browse
Version:
Unified Browserbase CLI for browser automation and cloud APIs.
77 lines (76 loc) • 2.65 kB
JavaScript
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;
}