import type { Command } from "commander"; import { resolveBrowserControlUrl } from "../browser/client.js"; import { browserCookies, browserCookiesClear, browserCookiesSet, browserStorageClear, browserStorageGet, browserStorageSet, } from "../browser/client-actions.js"; import { danger } from "../globals.js"; import { defaultRuntime } from "../runtime.js"; import type { BrowserParentOpts } from "./browser-cli-shared.js"; export function registerBrowserCookiesAndStorageCommands( browser: Command, parentOpts: (cmd: Command) => BrowserParentOpts, ) { const cookies = browser.command("cookies").description("Read/write cookies"); cookies .option("--target-id ", "CDP target id (or unique prefix)") .action(async (opts, cmd) => { const parent = parentOpts(cmd); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserCookies(baseUrl, { targetId: opts.targetId?.trim() || undefined, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log(JSON.stringify(result.cookies ?? [], null, 2)); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); cookies .command("set") .description("Set a cookie (requires --url or domain+path)") .argument("", "Cookie name") .argument("", "Cookie value") .requiredOption("--url ", "Cookie URL scope (recommended)") .option("--target-id ", "CDP target id (or unique prefix)") .action(async (name: string, value: string, opts, cmd) => { const parent = parentOpts(cmd); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserCookiesSet(baseUrl, { targetId: opts.targetId?.trim() || undefined, cookie: { name, value, url: opts.url }, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log(`cookie set: ${name}`); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); cookies .command("clear") .description("Clear all cookies") .option("--target-id ", "CDP target id (or unique prefix)") .action(async (opts, cmd) => { const parent = parentOpts(cmd); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserCookiesClear(baseUrl, { targetId: opts.targetId?.trim() || undefined, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log("cookies cleared"); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); const storage = browser.command("storage").description("Read/write localStorage/sessionStorage"); function registerStorageKind(kind: "local" | "session") { const cmd = storage.command(kind).description(`${kind}Storage commands`); cmd .command("get") .description(`Get ${kind}Storage (all keys or one key)`) .argument("[key]", "Key (optional)") .option("--target-id ", "CDP target id (or unique prefix)") .action(async (key: string | undefined, opts, cmd2) => { const parent = parentOpts(cmd2); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserStorageGet(baseUrl, { kind, key: key?.trim() || undefined, targetId: opts.targetId?.trim() || undefined, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log(JSON.stringify(result.values ?? {}, null, 2)); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); cmd .command("set") .description(`Set a ${kind}Storage key`) .argument("", "Key") .argument("", "Value") .option("--target-id ", "CDP target id (or unique prefix)") .action(async (key: string, value: string, opts, cmd2) => { const parent = parentOpts(cmd2); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserStorageSet(baseUrl, { kind, key, value, targetId: opts.targetId?.trim() || undefined, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log(`${kind}Storage set: ${key}`); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); cmd .command("clear") .description(`Clear all ${kind}Storage keys`) .option("--target-id ", "CDP target id (or unique prefix)") .action(async (opts, cmd2) => { const parent = parentOpts(cmd2); const baseUrl = resolveBrowserControlUrl(parent?.url); const profile = parent?.browserProfile; try { const result = await browserStorageClear(baseUrl, { kind, targetId: opts.targetId?.trim() || undefined, profile, }); if (parent?.json) { defaultRuntime.log(JSON.stringify(result, null, 2)); return; } defaultRuntime.log(`${kind}Storage cleared`); } catch (err) { defaultRuntime.error(danger(String(err))); defaultRuntime.exit(1); } }); } registerStorageKind("local"); registerStorageKind("session"); }