aboutsummaryrefslogtreecommitdiff
path: root/src/cdp/current-target.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/cdp/current-target.ts')
-rw-r--r--src/cdp/current-target.ts27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/cdp/current-target.ts b/src/cdp/current-target.ts
new file mode 100644
index 0000000..82bebe6
--- /dev/null
+++ b/src/cdp/current-target.ts
@@ -0,0 +1,27 @@
+/**
+ * The target the harness is actually pointed at, resolved with I/O.
+ *
+ * `resolveCdpTarget` in endpoint.ts is deliberately pure, so every caller that
+ * needs the *effective* target has to read the stored choice first. This wraps
+ * that pair so callers outside the CDP layer — profile selection in
+ * particular — can ask "am I driving a browser on this machine?" without
+ * duplicating the precedence rules.
+ */
+
+import { type CdpTarget, resolveCdpTarget } from "./endpoint";
+import { readTarget } from "./target-store";
+
+/** The effective target: BU_CDP_HTTP, else /browser-target, else the default. */
+export const currentCdpTarget = async (): Promise<CdpTarget> =>
+ resolveCdpTarget(process.env, await readTarget());
+
+/**
+ * True when the harness is driving a browser on another host.
+ *
+ * Profile selection is meaningless in that case: it works by launching the
+ * browser binary with --profile-directory and letting ProcessSingleton hand
+ * the argv to the running browser (see profile/launch.ts), which only reaches
+ * a browser on this machine.
+ */
+export const drivingRemoteBrowser = async (): Promise<boolean> =>
+ (await currentCdpTarget()).kind === "remote";