craftdriver 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +7 -3
  3. package/dist/cli/daemon.d.ts.map +1 -1
  4. package/dist/cli/daemon.js +4 -0
  5. package/dist/cli/daemon.js.map +1 -1
  6. package/dist/cli/mcp/server.d.ts.map +1 -1
  7. package/dist/cli/mcp/server.js +4 -0
  8. package/dist/cli/mcp/server.js.map +1 -1
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +2 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/lib/browser.d.ts +73 -22
  14. package/dist/lib/browser.d.ts.map +1 -1
  15. package/dist/lib/browser.js +155 -41
  16. package/dist/lib/browser.js.map +1 -1
  17. package/dist/lib/browserContext.d.ts +1 -1
  18. package/dist/lib/browserContext.d.ts.map +1 -1
  19. package/dist/lib/builder.d.ts +12 -1
  20. package/dist/lib/builder.d.ts.map +1 -1
  21. package/dist/lib/builder.js +26 -0
  22. package/dist/lib/builder.js.map +1 -1
  23. package/dist/lib/capabilities.d.ts +8 -0
  24. package/dist/lib/capabilities.d.ts.map +1 -1
  25. package/dist/lib/capabilities.js +26 -10
  26. package/dist/lib/capabilities.js.map +1 -1
  27. package/dist/lib/driver.d.ts +17 -1
  28. package/dist/lib/driver.d.ts.map +1 -1
  29. package/dist/lib/driver.js +27 -2
  30. package/dist/lib/driver.js.map +1 -1
  31. package/dist/lib/elementHandle.d.ts.map +1 -1
  32. package/dist/lib/elementHandle.js +34 -0
  33. package/dist/lib/elementHandle.js.map +1 -1
  34. package/dist/lib/errors.d.ts +7 -0
  35. package/dist/lib/errors.d.ts.map +1 -1
  36. package/dist/lib/errors.js +7 -0
  37. package/dist/lib/errors.js.map +1 -1
  38. package/dist/lib/http.d.ts.map +1 -1
  39. package/dist/lib/http.js +31 -10
  40. package/dist/lib/http.js.map +1 -1
  41. package/dist/lib/launchTarget.d.ts +21 -2
  42. package/dist/lib/launchTarget.d.ts.map +1 -1
  43. package/dist/lib/launchTarget.js +105 -17
  44. package/dist/lib/launchTarget.js.map +1 -1
  45. package/dist/lib/remote.d.ts +55 -0
  46. package/dist/lib/remote.d.ts.map +1 -0
  47. package/dist/lib/remote.js +127 -0
  48. package/dist/lib/remote.js.map +1 -0
  49. package/dist/lib/timing.d.ts +8 -0
  50. package/dist/lib/timing.d.ts.map +1 -1
  51. package/dist/lib/timing.js +8 -0
  52. package/dist/lib/timing.js.map +1 -1
  53. package/dist/lib/tracing.d.ts +1 -1
  54. package/dist/lib/tracing.d.ts.map +1 -1
  55. package/dist/lib/tracing.js.map +1 -1
  56. package/dist/lib/types.d.ts +22 -0
  57. package/dist/lib/types.d.ts.map +1 -1
  58. package/dist/lib/vibiumTrace.d.ts +1 -1
  59. package/dist/lib/vibiumTrace.d.ts.map +1 -1
  60. package/dist/lib/visual/antialias.d.ts +41 -0
  61. package/dist/lib/visual/antialias.d.ts.map +1 -0
  62. package/dist/lib/visual/antialias.js +126 -0
  63. package/dist/lib/visual/antialias.js.map +1 -0
  64. package/dist/lib/visual/codec.d.ts +24 -0
  65. package/dist/lib/visual/codec.d.ts.map +1 -0
  66. package/dist/lib/visual/codec.js +11 -0
  67. package/dist/lib/visual/codec.js.map +1 -0
  68. package/dist/lib/visual/compare.d.ts +38 -0
  69. package/dist/lib/visual/compare.d.ts.map +1 -0
  70. package/dist/lib/visual/compare.js +209 -0
  71. package/dist/lib/visual/compare.js.map +1 -0
  72. package/dist/lib/visual/diff.d.ts +18 -0
  73. package/dist/lib/visual/diff.d.ts.map +1 -0
  74. package/dist/lib/visual/diff.js +23 -0
  75. package/dist/lib/visual/diff.js.map +1 -0
  76. package/dist/lib/visual/expectScreenshot.d.ts +65 -0
  77. package/dist/lib/visual/expectScreenshot.d.ts.map +1 -0
  78. package/dist/lib/visual/expectScreenshot.js +287 -0
  79. package/dist/lib/visual/expectScreenshot.js.map +1 -0
  80. package/dist/lib/visual/index.d.ts +10 -0
  81. package/dist/lib/visual/index.d.ts.map +1 -0
  82. package/dist/lib/visual/index.js +9 -0
  83. package/dist/lib/visual/index.js.map +1 -0
  84. package/dist/lib/visual/pixelMath.d.ts +32 -0
  85. package/dist/lib/visual/pixelMath.d.ts.map +1 -0
  86. package/dist/lib/visual/pixelMath.js +70 -0
  87. package/dist/lib/visual/pixelMath.js.map +1 -0
  88. package/dist/lib/visual/pngHeader.d.ts +27 -0
  89. package/dist/lib/visual/pngHeader.d.ts.map +1 -0
  90. package/dist/lib/visual/pngHeader.js +63 -0
  91. package/dist/lib/visual/pngHeader.js.map +1 -0
  92. package/dist/lib/visual/pngjsCodec.d.ts +22 -0
  93. package/dist/lib/visual/pngjsCodec.d.ts.map +1 -0
  94. package/dist/lib/visual/pngjsCodec.js +70 -0
  95. package/dist/lib/visual/pngjsCodec.js.map +1 -0
  96. package/dist/lib/visual/types.d.ts +89 -0
  97. package/dist/lib/visual/types.d.ts.map +1 -0
  98. package/dist/lib/visual/types.js +20 -0
  99. package/dist/lib/visual/types.js.map +1 -0
  100. package/dist/lib/visual/visualError.d.ts +32 -0
  101. package/dist/lib/visual/visualError.d.ts.map +1 -0
  102. package/dist/lib/visual/visualError.js +59 -0
  103. package/dist/lib/visual/visualError.js.map +1 -0
  104. package/dist/lib/wait.d.ts.map +1 -1
  105. package/dist/lib/wait.js +7 -1
  106. package/dist/lib/wait.js.map +1 -1
  107. package/docs/api-reference.md +18 -2
  108. package/docs/browser-api.md +5 -4
  109. package/docs/driver-configuration.md +6 -0
  110. package/docs/error-codes.md +1 -0
  111. package/docs/index.md +1 -0
  112. package/docs/keyboard-mouse.md +7 -5
  113. package/docs/recipes/run-on-browserstack.md +265 -0
  114. package/docs/recipes.md +15 -1
  115. package/docs/remote-webdriver.md +308 -0
  116. package/docs/screenshots.md +15 -6
  117. package/docs/standards.md +15 -10
  118. package/docs/visual-testing.md +254 -0
  119. package/docs/why-craftdriver.md +5 -2
  120. package/package.json +5 -1
package/dist/lib/http.js CHANGED
@@ -10,7 +10,12 @@ import { CraftdriverError, ErrorCode } from './errors.js';
10
10
  */
11
11
  const agents = new Map();
12
12
  function agentKey(endpoint) {
13
- return `${endpoint.protocol}//${endpoint.hostname}:${endpoint.port}`;
13
+ // Remote endpoints stamp a unique poolKey (see parseRemoteEndpoint) so
14
+ // concurrent sessions sharing one grid/hub host:port never share an agent
15
+ // — quitting one session must not destroy another's in-flight sockets.
16
+ // Local endpoints never set poolKey and keep the original host:port
17
+ // keying (every local DriverService already picks its own free port).
18
+ return endpoint.poolKey ?? `${endpoint.protocol}//${endpoint.hostname}:${endpoint.port}`;
14
19
  }
15
20
  function getAgent(endpoint) {
16
21
  const key = agentKey(endpoint);
@@ -93,10 +98,19 @@ export class HttpClient {
93
98
  this.endpoint = endpoint;
94
99
  }
95
100
  async send({ method, path, body, timeoutMs, }) {
96
- const base = `${this.endpoint.protocol}://${this.endpoint.hostname}:${this.endpoint.port}${this.endpoint.path ?? ''}`;
97
- const url = new URL(path, base);
101
+ // WHATWG URL: an absolute-path second arg to `new URL(path, base)`
102
+ // *replaces* base's path rather than concatenating — so joining directly
103
+ // against a base carrying `endpoint.path` (e.g. a Grid's `/wd/hub`)
104
+ // silently dropped it. Concatenate the base path onto `path` ourselves
105
+ // first, then resolve against the origin only. For local endpoints
106
+ // `endpoint.path` is always `''`, so `basePath` is `''` and this is
107
+ // byte-identical to the previous behavior.
108
+ const basePath = (this.endpoint.path ?? '').replace(/\/$/, '');
109
+ const origin = `${this.endpoint.protocol}://${this.endpoint.hostname}:${this.endpoint.port}`;
110
+ const url = new URL(`${basePath}${path}`, origin);
98
111
  const isHttps = url.protocol === 'https:';
99
112
  const payload = body ? JSON.stringify(body) : undefined;
113
+ const effectiveTimeoutMs = timeoutMs ?? this.endpoint.commandTimeoutMs;
100
114
  const options = {
101
115
  method,
102
116
  agent: getAgent(this.endpoint),
@@ -104,6 +118,12 @@ export class HttpClient {
104
118
  'Content-Type': 'application/json; charset=utf-8',
105
119
  Accept: 'application/json',
106
120
  ...(payload ? { 'Content-Length': Buffer.byteLength(payload) } : {}),
121
+ ...(this.endpoint.auth
122
+ ? {
123
+ Authorization: 'Basic ' +
124
+ Buffer.from(`${this.endpoint.auth.username}:${this.endpoint.auth.password}`).toString('base64'),
125
+ }
126
+ : {}),
107
127
  },
108
128
  };
109
129
  const transport = isHttps ? https : http;
@@ -151,15 +171,16 @@ export class HttpClient {
151
171
  });
152
172
  });
153
173
  req.on('error', (err) => settleReject(buildTransportError(err, method, path)));
154
- // Only armed when the caller opts in (timeoutMs is undefined for every
155
- // regular WebDriver command today) — a hung connection otherwise waits
156
- // forever with no way for the caller to recover. See Driver.create(),
157
- // the one call site that currently sets this.
158
- if (timeoutMs) {
174
+ // Only armed when the caller opts in, or the endpoint carries a
175
+ // default (remote endpoints only — see `commandTimeoutMs`) — a hung
176
+ // connection otherwise waits forever with no way for the caller to
177
+ // recover. `Driver.create()` is the one local call site that sets its
178
+ // own `timeoutMs`; every other local command leaves both unset.
179
+ if (effectiveTimeoutMs) {
159
180
  timer = setTimeout(() => {
160
- settleReject(new CraftdriverError(ErrorCode.DRIVER_ERROR, `WebDriver command ${method} ${path} timed out after ${timeoutMs}ms waiting for a response`, { detail: { method, path, timeoutMs } }));
181
+ settleReject(new CraftdriverError(ErrorCode.DRIVER_ERROR, `WebDriver command ${method} ${path} timed out after ${effectiveTimeoutMs}ms waiting for a response`, { detail: { method, path, timeoutMs: effectiveTimeoutMs } }));
161
182
  req.destroy();
162
- }, timeoutMs);
183
+ }, effectiveTimeoutMs);
163
184
  }
164
185
  if (payload)
165
186
  req.write(payload);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
+ import type { RemoteWebDriverOptions } from './remote.js';
1
2
  export type SupportedBrowserName = 'chrome' | 'chromium' | 'firefox' | 'safari';
3
+ /** Normalize a provider-facing name for internal engine-specific behavior. */
4
+ export declare function normalizeEngine(browserName: string): string;
2
5
  export interface BrowserLaunchTarget {
3
6
  kind: 'browser';
4
7
  browserName: SupportedBrowserName;
@@ -17,9 +20,25 @@ export interface ElectronLaunchTarget {
17
20
  mainProcess?: boolean;
18
21
  args?: string[];
19
22
  }
20
- export type LaunchTarget = BrowserLaunchTarget | ElectronLaunchTarget;
23
+ export interface RemoteLaunchTarget {
24
+ kind: 'remote';
25
+ /** Provider-facing browser name, forwarded verbatim. */
26
+ browserName: string;
27
+ /** Normalized engine family for internal checks. */
28
+ engine: string;
29
+ bidiRequested: boolean;
30
+ /** Validated shape; `parseRemoteEndpoint` (`remote.ts`) turns this into a `WebDriverEndpoint`. */
31
+ remote: RemoteWebDriverOptions;
32
+ }
33
+ export type LaunchTarget = BrowserLaunchTarget | ElectronLaunchTarget | RemoteLaunchTarget;
34
+ /**
35
+ * Reject `remote` at the CLI daemon and MCP entry points — both are local dev
36
+ * tools by design. Permanent product boundary, not a gap to fill: no CLI flag
37
+ * or MCP tool for remote exists, and none should be added.
38
+ */
39
+ export declare function assertLocalOnlyLaunch(options: Record<string, unknown>): void;
21
40
  /**
22
- * Normalize and validate the mutually-exclusive browser/Electron launch
41
+ * Normalize and validate the mutually-exclusive browser/Electron/remote launch
23
42
  * surfaces before any filesystem I/O or driver process is started.
24
43
  *
25
44
  * This function deliberately accepts an untyped record: `Browser.launch` is a
@@ -1 +1 @@
1
- {"version":3,"file":"launchTarget.d.ts","sourceRoot":"","sources":["../../src/lib/launchTarget.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAqDhF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,oBAAoB,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,QAAQ,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAsBtE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAuIlF"}
1
+ {"version":3,"file":"launchTarget.d.ts","sourceRoot":"","sources":["../../src/lib/launchTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQ1D,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEhF,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI3D;AA6CD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,oBAAoB,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,QAAQ,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IACvB,kGAAkG;IAClG,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAwH3F;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU5E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CA6IlF"}
@@ -1,14 +1,14 @@
1
1
  import { CraftdriverError, ErrorCode } from './errors.js';
2
- /**
3
- * Launch options that don't map onto Safari's public `safaridriver` surface.
4
- * None of these have a faithful Safari equivalent:
5
- * there is no supported headless mode, no browser-arg passthrough, no
6
- * alternate-binary launch (STP is selected via `SafariService`'s
7
- * `binaryPath`, not `browserPath`), no mobile/device emulation, and no
8
- * download-directory configuration craftdriver can drive. Checked here, at
9
- * launch-target resolution, so a Safari launch fails before any service
10
- * process starts rather than partially launching and then failing.
11
- */
2
+ // Unknown remote browser names must opt into BiDi explicitly.
3
+ const BIDI_CAPABLE_BY_DEFAULT = new Set(['chrome', 'chromium', 'firefox', 'edge', 'microsoftedge']);
4
+ /** Normalize a provider-facing name for internal engine-specific behavior. */
5
+ export function normalizeEngine(browserName) {
6
+ const lower = browserName.trim().toLowerCase();
7
+ if (lower === 'edge' || lower === 'msedge' || lower === 'microsoftedge')
8
+ return 'chrome';
9
+ return lower;
10
+ }
11
+ /** Reject local launch options that safaridriver cannot honor. */
12
12
  function assertSafariCompatible(options) {
13
13
  const headlessEnv = process.env.HEADLESS;
14
14
  const checks = [
@@ -26,7 +26,7 @@ function assertSafariCompatible(options) {
26
26
  present: hasValue(options, 'browserPath'),
27
27
  feature: 'browserPath',
28
28
  hint: 'Safari is launched from the installed app by safaridriver, not a chosen binary. ' +
29
- 'To use Safari Technology Preview, pass its safaridriver path via SafariService\'s binaryPath instead.',
29
+ "To use Safari Technology Preview, pass its safaridriver path via SafariService's binaryPath instead.",
30
30
  },
31
31
  {
32
32
  present: hasValue(options, 'mobileEmulation'),
@@ -63,8 +63,91 @@ function optionalStringArray(value, optionName) {
63
63
  }
64
64
  return value;
65
65
  }
66
+ // Local-only options rejected on a remote launch.
67
+ const REMOTE_CONFLICTS = [
68
+ ['electron', 'remote and electron are different launch targets; choose one'],
69
+ ['electronService', 'electronService only applies to an electron launch'],
70
+ ['chromeService', 'a remote session has no local driver process to configure'],
71
+ ['firefoxService', 'a remote session has no local driver process to configure'],
72
+ ['safariService', 'a remote session has no local driver process to configure'],
73
+ ['mobileEmulation', 'pass device capabilities via remote.capabilities instead'],
74
+ ['args', 'pass browser flags via remote.capabilities (e.g. goog:chromeOptions.args) instead'],
75
+ ['browserPath', 'a remote session launches whatever browser the grid/provider offers'],
76
+ ['downloadsDir', 'remote sessions have no client-visible downloads directory'],
77
+ ];
78
+ function resolveRemoteLaunchTarget(options, enableBiDi) {
79
+ for (const [key, guidance] of REMOTE_CONFLICTS) {
80
+ if (hasValue(options, key)) {
81
+ throw new Error(`remote cannot be combined with ${key}; ${guidance}.`);
82
+ }
83
+ }
84
+ const remote = options.remote;
85
+ if (!remote || typeof remote !== 'object' || Array.isArray(remote)) {
86
+ throw new Error('remote must be an object containing a url.');
87
+ }
88
+ const remoteOptions = remote;
89
+ if (typeof remoteOptions.url !== 'string' || remoteOptions.url.trim() === '') {
90
+ throw new Error('remote.url must be a non-empty string.');
91
+ }
92
+ const remoteCapabilities = remoteOptions.capabilities;
93
+ const capsObject = remoteCapabilities &&
94
+ typeof remoteCapabilities === 'object' &&
95
+ !Array.isArray(remoteCapabilities)
96
+ ? remoteCapabilities
97
+ : undefined;
98
+ const capsBrowserName = capsObject?.browserName;
99
+ const topLevelBrowserName = options.browserName;
100
+ if (topLevelBrowserName !== undefined &&
101
+ (typeof topLevelBrowserName !== 'string' || topLevelBrowserName.trim() === '')) {
102
+ throw new Error('browserName must be a non-empty string.');
103
+ }
104
+ if (capsBrowserName !== undefined &&
105
+ (typeof capsBrowserName !== 'string' || capsBrowserName.trim() === '')) {
106
+ throw new Error('remote.capabilities.browserName must be a non-empty string.');
107
+ }
108
+ if (typeof topLevelBrowserName === 'string' &&
109
+ typeof capsBrowserName === 'string' &&
110
+ topLevelBrowserName.toLowerCase() !== capsBrowserName.toLowerCase()) {
111
+ throw new Error(`browserName ("${topLevelBrowserName}") conflicts with remote.capabilities.browserName ` +
112
+ `("${capsBrowserName}"); set only one.`);
113
+ }
114
+ const requestedName = (typeof topLevelBrowserName === 'string' ? topLevelBrowserName : undefined) ??
115
+ (typeof capsBrowserName === 'string' ? capsBrowserName : undefined) ??
116
+ 'chrome';
117
+ const engine = normalizeEngine(requestedName);
118
+ // Known BiDi engines default on; other remote names require explicit opt-in.
119
+ const defaultsToBidi = BIDI_CAPABLE_BY_DEFAULT.has(engine);
120
+ const bidiRequested = defaultsToBidi ? enableBiDi !== false : enableBiDi === true;
121
+ // A caller can't keep BiDi on yet disable its transport: webSocketUrl:false would
122
+ // leave craftdriver negotiating a BiDi session the hub was never asked to provide,
123
+ // silently degrading every BiDi feature to Classic. Reject the contradiction early.
124
+ if (bidiRequested && capsObject?.webSocketUrl === false) {
125
+ throw new CraftdriverError(ErrorCode.INVALID_ARGUMENT, 'remote.capabilities.webSocketUrl is false, which disables WebDriver BiDi, but BiDi is ' +
126
+ `enabled for "${requestedName}". Pass enableBiDi: false to run over WebDriver Classic, ` +
127
+ 'or remove webSocketUrl to keep BiDi.', { detail: { browserName: requestedName, feature: 'WebDriver BiDi' } });
128
+ }
129
+ return {
130
+ kind: 'remote',
131
+ browserName: requestedName,
132
+ engine,
133
+ bidiRequested,
134
+ remote: remoteOptions,
135
+ };
136
+ }
66
137
  /**
67
- * Normalize and validate the mutually-exclusive browser/Electron launch
138
+ * Reject `remote` at the CLI daemon and MCP entry points — both are local dev
139
+ * tools by design. Permanent product boundary, not a gap to fill: no CLI flag
140
+ * or MCP tool for remote exists, and none should be added.
141
+ */
142
+ export function assertLocalOnlyLaunch(options) {
143
+ if (hasValue(options, 'remote')) {
144
+ throw new CraftdriverError(ErrorCode.UNSUPPORTED, 'The craftdriver CLI and MCP server are local dev tools and do not support remote ' +
145
+ '(Selenium Grid / BrowserStack / cloud) sessions. Use the Browser.launch({ remote }) ' +
146
+ 'library API directly from your own script instead.', { detail: { feature: 'remote' } });
147
+ }
148
+ }
149
+ /**
150
+ * Normalize and validate the mutually-exclusive browser/Electron/remote launch
68
151
  * surfaces before any filesystem I/O or driver process is started.
69
152
  *
70
153
  * This function deliberately accepts an untyped record: `Browser.launch` is a
@@ -76,8 +159,10 @@ export function resolveLaunchTarget(options) {
76
159
  if (enableBiDi !== undefined && typeof enableBiDi !== 'boolean') {
77
160
  throw new Error('enableBiDi must be a boolean.');
78
161
  }
79
- const electronWasProvided = Object.prototype.hasOwnProperty.call(options, 'electron') &&
80
- options.electron !== undefined;
162
+ if (hasValue(options, 'remote')) {
163
+ return resolveRemoteLaunchTarget(options, enableBiDi);
164
+ }
165
+ const electronWasProvided = Object.prototype.hasOwnProperty.call(options, 'electron') && options.electron !== undefined;
81
166
  if (!electronWasProvided) {
82
167
  if (hasValue(options, 'electronService')) {
83
168
  throw new Error('electronService requires the electron launch option.');
@@ -115,10 +200,13 @@ export function resolveLaunchTarget(options) {
115
200
  }
116
201
  const electronOptions = electron;
117
202
  const supportedElectronKeys = new Set([
118
- 'appBinaryPath', 'chromedriverPath', 'version', 'mainProcess', 'args',
203
+ 'appBinaryPath',
204
+ 'chromedriverPath',
205
+ 'version',
206
+ 'mainProcess',
207
+ 'args',
119
208
  ]);
120
- const unknownElectronKey = Object.keys(electronOptions)
121
- .find((key) => !supportedElectronKeys.has(key));
209
+ const unknownElectronKey = Object.keys(electronOptions).find((key) => !supportedElectronKeys.has(key));
122
210
  if (unknownElectronKey) {
123
211
  throw new Error(`Unsupported electron option "${unknownElectronKey}". ` +
124
212
  'Supported: appBinaryPath, chromedriverPath, version, mainProcess, args.');
@@ -1 +1 @@
1
- {"version":3,"file":"launchTarget.js","sourceRoot":"","sources":["../../src/lib/launchTarget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launchTarget.js","sourceRoot":"","sources":["../../src/lib/launchTarget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { Capabilities, WebDriverEndpoint } from './types.js';
2
+ export interface RemoteAuth {
3
+ username: string;
4
+ password: string;
5
+ }
6
+ /**
7
+ * Options for connecting to any W3C-compatible remote WebDriver endpoint —
8
+ * a self-hosted Selenium Grid, BrowserStack, or another cloud provider.
9
+ * Provider-specific detail (BrowserStack's `bstack:options`, etc.) is
10
+ * forwarded through `capabilities` without schema conversion.
11
+ */
12
+ export interface RemoteWebDriverOptions {
13
+ /** The remote endpoint's WebDriver base URL, e.g. `https://hub.browserstack.com/wd/hub`. */
14
+ url: string;
15
+ /**
16
+ * Basic auth credentials. Mutually exclusive with URL-embedded user-info
17
+ * (`https://user:pass@host/...`) — set one, not both.
18
+ */
19
+ auth?: RemoteAuth;
20
+ /** W3C capabilities merged under `alwaysMatch`; vendor namespaces are not schema-checked. */
21
+ capabilities?: Record<string, unknown>;
22
+ /** Timeout for the initial `POST /session` call. Defaults to craftdriver's local session-create timeout. */
23
+ sessionTimeoutMs?: number;
24
+ /** Default timeout applied to every WebDriver command after the session is created, unless overridden per call. */
25
+ commandTimeoutMs?: number;
26
+ }
27
+ export interface ParsedRemoteEndpoint {
28
+ endpoint: WebDriverEndpoint;
29
+ /** Timeout for the one `POST /session` call only — not stored on the endpoint, which is per-command. */
30
+ sessionTimeoutMs?: number;
31
+ }
32
+ /** Parse and runtime-validate remote launch options without exposing credentials. */
33
+ export declare function parseRemoteEndpoint(options: RemoteWebDriverOptions): ParsedRemoteEndpoint;
34
+ /**
35
+ * Build W3C capabilities for a remote session. Mirrors
36
+ * `buildLaunchCapabilities()`'s shape but never injects anything local-only
37
+ * (download prefs, `--headless`, binary paths) — remote users pass those
38
+ * through `remote.capabilities` themselves (e.g.
39
+ * `capabilities['goog:chromeOptions']`).
40
+ */
41
+ export declare function buildRemoteCapabilities(input: {
42
+ browserName: string;
43
+ bidiRequested: boolean;
44
+ userCapabilities?: Record<string, unknown>;
45
+ }): Capabilities;
46
+ /**
47
+ * Strip query string, fragment, and embedded user-info from a URL before
48
+ * it goes into a log line. Some remote providers proxy the BiDi
49
+ * `webSocketUrl` through tokens embedded in the query string or user-info —
50
+ * this must never end up in the Classic-fallback warning. Falls back to a
51
+ * fixed placeholder if the string isn't a parseable URL at all (safer than
52
+ * logging it verbatim).
53
+ */
54
+ export declare function redactUrlForLog(url: string): string;
55
+ //# sourceMappingURL=remote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/lib/remote.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAIlE,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,4FAA4F;IAC5F,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,4GAA4G;IAC5G,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mHAAmH;IACnH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAcD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,wGAAwG;IACxG,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,oBAAoB,CAwFzF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C,GAAG,YAAY,CAQf;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnD"}
@@ -0,0 +1,127 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { applyBidiDefaults } from './capabilities.js';
3
+ import { CraftdriverError, ErrorCode } from './errors.js';
4
+ function invalidArgument(message, detail) {
5
+ return new CraftdriverError(ErrorCode.INVALID_ARGUMENT, message, detail ? { detail } : undefined);
6
+ }
7
+ function positiveNumber(value, optionName) {
8
+ if (value === undefined)
9
+ return undefined;
10
+ if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
11
+ throw invalidArgument(`remote.${optionName} must be a positive number of milliseconds.`);
12
+ }
13
+ return value;
14
+ }
15
+ /** Parse and runtime-validate remote launch options without exposing credentials. */
16
+ export function parseRemoteEndpoint(options) {
17
+ if (!options || typeof options !== 'object' || Array.isArray(options)) {
18
+ throw invalidArgument('remote must be an object containing a url.');
19
+ }
20
+ if (typeof options.url !== 'string' || options.url.trim() === '') {
21
+ throw invalidArgument('remote.url must be a non-empty string.');
22
+ }
23
+ let parsed;
24
+ try {
25
+ parsed = new URL(options.url);
26
+ }
27
+ catch {
28
+ // The invalid URL may contain credentials, so do not echo it.
29
+ throw invalidArgument('remote.url is not a valid URL (check the scheme, host, and any embedded credentials).');
30
+ }
31
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
32
+ throw invalidArgument(`remote.url must use http or https (got "${parsed.protocol.replace(/:$/, '')}").`);
33
+ }
34
+ if (parsed.search) {
35
+ throw invalidArgument('remote.url must not include a query string.');
36
+ }
37
+ if (parsed.hash) {
38
+ throw invalidArgument('remote.url must not include a fragment.');
39
+ }
40
+ // Extract URL credentials so downstream URLs remain safe to log.
41
+ const userInfoPresent = parsed.username !== '' || parsed.password !== '';
42
+ if (userInfoPresent && options.auth) {
43
+ throw invalidArgument('remote.url embeds credentials and remote.auth is also set — provide credentials one way, not both.');
44
+ }
45
+ let auth;
46
+ if (userInfoPresent) {
47
+ auth = {
48
+ username: decodeURIComponent(parsed.username),
49
+ password: decodeURIComponent(parsed.password),
50
+ };
51
+ }
52
+ else if (options.auth !== undefined) {
53
+ if (typeof options.auth !== 'object' || options.auth === null || Array.isArray(options.auth)) {
54
+ throw invalidArgument('remote.auth must be an object with username and password.');
55
+ }
56
+ const candidate = options.auth;
57
+ if (typeof candidate.username !== 'string' || typeof candidate.password !== 'string') {
58
+ throw invalidArgument('remote.auth.username and remote.auth.password must be strings.');
59
+ }
60
+ auth = { username: candidate.username, password: candidate.password };
61
+ }
62
+ if (auth && (auth.username === '' || auth.password === '')) {
63
+ throw invalidArgument('remote.auth requires a non-empty username and password.');
64
+ }
65
+ if (options.capabilities !== undefined &&
66
+ (typeof options.capabilities !== 'object' ||
67
+ options.capabilities === null ||
68
+ Array.isArray(options.capabilities))) {
69
+ throw invalidArgument('remote.capabilities must be an object.');
70
+ }
71
+ const sessionTimeoutMs = positiveNumber(options.sessionTimeoutMs, 'sessionTimeoutMs');
72
+ const commandTimeoutMs = positiveNumber(options.commandTimeoutMs, 'commandTimeoutMs');
73
+ const port = parsed.port ? Number(parsed.port) : parsed.protocol === 'https:' ? 443 : 80;
74
+ const rawPath = parsed.pathname === '/' ? '' : parsed.pathname.replace(/\/$/, '');
75
+ return {
76
+ endpoint: {
77
+ protocol: parsed.protocol === 'https:' ? 'https' : 'http',
78
+ hostname: parsed.hostname,
79
+ port,
80
+ path: rawPath,
81
+ auth,
82
+ // Unique per session so quitting one never tears down another's
83
+ // keep-alive sockets — concurrent sessions often share one hub host:port.
84
+ poolKey: randomUUID(),
85
+ commandTimeoutMs,
86
+ },
87
+ sessionTimeoutMs,
88
+ };
89
+ }
90
+ /**
91
+ * Build W3C capabilities for a remote session. Mirrors
92
+ * `buildLaunchCapabilities()`'s shape but never injects anything local-only
93
+ * (download prefs, `--headless`, binary paths) — remote users pass those
94
+ * through `remote.capabilities` themselves (e.g.
95
+ * `capabilities['goog:chromeOptions']`).
96
+ */
97
+ export function buildRemoteCapabilities(input) {
98
+ const caps = { ...(input.userCapabilities ?? {}) };
99
+ if (caps.browserName === undefined) {
100
+ caps.browserName = input.browserName;
101
+ }
102
+ // Strict remote hubs require the Classic string prompt behavior.
103
+ applyBidiDefaults(caps, input.bidiRequested, 'string');
104
+ return caps;
105
+ }
106
+ /**
107
+ * Strip query string, fragment, and embedded user-info from a URL before
108
+ * it goes into a log line. Some remote providers proxy the BiDi
109
+ * `webSocketUrl` through tokens embedded in the query string or user-info —
110
+ * this must never end up in the Classic-fallback warning. Falls back to a
111
+ * fixed placeholder if the string isn't a parseable URL at all (safer than
112
+ * logging it verbatim).
113
+ */
114
+ export function redactUrlForLog(url) {
115
+ try {
116
+ const parsed = new URL(url);
117
+ parsed.username = '';
118
+ parsed.password = '';
119
+ parsed.search = '';
120
+ parsed.hash = '';
121
+ return parsed.toString();
122
+ }
123
+ catch {
124
+ return '<unparseable-url-redacted>';
125
+ }
126
+ }
127
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/lib/remote.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,14 @@ export declare const DEFAULT_POLL_INTERVAL_MS = 25;
25
25
  export declare const ASSERTION_POLL_INTERVAL_MS = 25;
26
26
  /** Poll interval for the driver service's `/status` readiness check. */
27
27
  export declare const DRIVER_READINESS_POLL_INTERVAL_MS = 25;
28
+ /**
29
+ * Delay between failed `browser.expectScreenshot()` attempts. Longer than the
30
+ * DOM-oriented poll intervals above because each attempt captures and compares a
31
+ * full PNG (a WebDriver round trip plus a decode), so a tighter cadence would
32
+ * just burn CPU re-screenshotting a page that is still settling. Callers can
33
+ * override per-assertion via `{ interval }` (floor 10 ms).
34
+ */
35
+ export declare const VISUAL_RETRY_INTERVAL_MS = 50;
28
36
  /**
29
37
  * Poll interval for state that changes at process/OS speed rather than DOM
30
38
  * speed: Classic `document.readyState`, the Classic `waitForPage`
@@ -1 +1 @@
1
- {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/lib/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,wEAAwE;AACxE,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAI/C,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,gFAAgF;AAChF,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAI3C,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,6DAA6D;AAC7D,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAI7C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,KAAK,CAAC"}
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/lib/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,wEAAwE;AACxE,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAI/C,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,gFAAgF;AAChF,eAAO,MAAM,eAAe,QAAS,CAAC;AAEtC,8EAA8E;AAC9E,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAI3C,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,6DAA6D;AAC7D,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAI7C;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,2BAA2B,IAAI,CAAC;AAC7C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,KAAK,CAAC"}
@@ -26,6 +26,14 @@ export const DEFAULT_POLL_INTERVAL_MS = 25;
26
26
  export const ASSERTION_POLL_INTERVAL_MS = 25;
27
27
  /** Poll interval for the driver service's `/status` readiness check. */
28
28
  export const DRIVER_READINESS_POLL_INTERVAL_MS = 25;
29
+ /**
30
+ * Delay between failed `browser.expectScreenshot()` attempts. Longer than the
31
+ * DOM-oriented poll intervals above because each attempt captures and compares a
32
+ * full PNG (a WebDriver round trip plus a decode), so a tighter cadence would
33
+ * just burn CPU re-screenshotting a page that is still settling. Callers can
34
+ * override per-assertion via `{ interval }` (floor 10 ms).
35
+ */
36
+ export const VISUAL_RETRY_INTERVAL_MS = 50;
29
37
  /**
30
38
  * Poll interval for state that changes at process/OS speed rather than DOM
31
39
  * speed: Classic `document.readyState`, the Classic `waitForPage`
@@ -1 +1 @@
1
- {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/lib/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,wEAAwE;AACxE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,gFAAgF;AAEhF,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAEpD,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,gFAAgF;AAEhF,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/lib/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C,wEAAwE;AACxE,MAAM,CAAC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C,gFAAgF;AAEhF,iFAAiF;AACjF,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAEpD,gFAAgF;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C,gFAAgF;AAEhF,yEAAyE;AACzE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAC9C,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC"}
@@ -113,7 +113,7 @@ export declare class Tracer {
113
113
  private actionIndex;
114
114
  /** Tracks in-flight screenshot captures so `stop()` can drain them. */
115
115
  private pendingCaptures;
116
- constructor(browser: Browser, conn: BiDiConnection, browserName: 'chrome' | 'chromium' | 'firefox' | 'safari');
116
+ constructor(browser: Browser, conn: BiDiConnection, browserName: string);
117
117
  get isRunning(): boolean;
118
118
  start(opts: TraceStartOptions): Promise<void>;
119
119
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/lib/tracing.ts"],"names":[],"mappings":"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"}