UNPKG

browse

Version:

Unified Browserbase CLI for browser automation and cloud APIs.

77 lines (76 loc) 2.65 kB
import { fail } from "../errors.js"; import { resolveWsTarget } from "./resolve-ws.js"; function resolveHeadless(flags) { if (flags.headed && flags.headless) { fail("Pass either --headed or --headless, not both."); } if (flags.headed) return false; if (flags.headless) return true; return true; } export async function resolveConnectionTarget(flags) { if (flags.cdp) { failOnConflictingFlags("--cdp", [ flags["auto-connect"] ? "--auto-connect" : null, flags.local ? "--local" : null, flags.remote ? "--remote" : null, flags.headed ? "--headed" : null, flags.headless ? "--headless" : null, ]); return { kind: "cdp", endpoint: await resolveWsTarget(flags.cdp), targetId: flags["target-id"], }; } if (flags["target-id"]) { fail("--target-id requires --cdp."); } if (flags["auto-connect"]) { failOnConflictingFlags("--auto-connect", [ flags.local ? "--local" : null, flags.remote ? "--remote" : null, flags.headed ? "--headed" : null, flags.headless ? "--headless" : null, ]); return { kind: "auto-connect" }; } if (flags.local && flags.remote) { fail("Pass either --local or --remote, not both."); } if (flags.remote) { failOnConflictingFlags("--remote", [ flags.headed ? "--headed" : null, flags.headless ? "--headless" : null, ]); return { kind: "remote" }; } if (flags.local) { return { kind: "managed-local", headless: resolveHeadless(flags) }; } if (process.env.BROWSERBASE_API_KEY) { failOnConflictingFlags("remote mode", [ flags.headed ? "--headed" : null, flags.headless ? "--headless" : null, ]); return { kind: "remote" }; } return { kind: "managed-local", headless: resolveHeadless(flags) }; } function failOnConflictingFlags(flag, candidates) { const conflicts = candidates.filter((candidate) => Boolean(candidate)); if (conflicts.length > 0) fail(`${flag} cannot be combined with ${conflicts.join(", ")}.`); } export function targetsCompatible(left, right) { if (left.kind !== right.kind) return false; if (left.kind === "managed-local" && right.kind === "managed-local") return left.headless === right.headless; if (left.kind === "cdp" && right.kind === "cdp") { return left.endpoint === right.endpoint && left.targetId === right.targetId; } return true; }