aboutsummaryrefslogtreecommitdiff
path: root/src/cdp/current-target.ts
blob: 82bebe60d9710288fde3fdaa8218005c93b246fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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";