webdriver 9.30.0 → 9.31.1

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.
package/README.md CHANGED
@@ -143,6 +143,12 @@ Count of request retries to the Selenium server.
143
143
  Type: `Number`<br />
144
144
  Default: *3*
145
145
 
146
+ ### bidiResponseTimeout
147
+ Timeout (in ms) for a WebDriver Bidi command to receive a response from the browser. Increase this if you run commands, e.g. `execute`, that legitimately take longer than the default to resolve.
148
+
149
+ Type: `Number`<br />
150
+ Default: *180000*
151
+
146
152
  ### agent
147
153
 
148
154
  Allows you to use a custom` http`/`https`/`http2` [agent](https://www.npmjs.com/package/got#agent) to make requests.
@@ -2,6 +2,7 @@ import type { ClientOptions, RawData, WebSocket } from 'ws';
2
2
  import type { CommandData } from './remoteTypes.js';
3
3
  import type { CommandResponse } from './localTypes.js';
4
4
  import type { Client } from '../types.js';
5
+ export declare const DEFAULT_RESPONSE_TIMEOUT: number;
5
6
  export declare class BidiCore {
6
7
  #private;
7
8
  client: Client | undefined;
@@ -9,7 +10,7 @@ export declare class BidiCore {
9
10
  * @private
10
11
  */
11
12
  private _isConnected;
12
- constructor(webSocketUrl: string, opts?: ClientOptions);
13
+ constructor(webSocketUrl: string, opts?: ClientOptions, responseTimeout?: number);
13
14
  /**
14
15
  * We initiate the Bidi instance before a WebdriverIO instance is created.
15
16
  * In order to emit Bidi events we have to attach the WebdriverIO instance
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/bidi/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,iBAAiB,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AASzC,qBAAa,QAAQ;;IASjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAQ;gBAEf,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IASvD;;;;OAIG;IACI,YAAY,CAAE,MAAM,EAAE,MAAM;IAItB,OAAO;IAiBb,KAAK;IAeL,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IAQ5D;;;OAGG;IACH,gBAAgB;IAIhB,IAAI,MAAM,0BAET;IAED,IAAI,WAAW,YAEd;IAED;;;OAGG;IACH,IAAI,gBAAgB,WAIG,OAAO,UAF7B;IAqCY,IAAI,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAgCtE,SAAS,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;CAWpD;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAwCjE"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/bidi/core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAK3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,iBAAiB,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAOzC,eAAO,MAAM,wBAAwB,QAAa,CAAA;AAElD,qBAAa,QAAQ;;IAUjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B;;OAEG;IACH,OAAO,CAAC,YAAY,CAAQ;gBAGxB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,aAAa,EACpB,eAAe,SAA2B;IAe9C;;;;OAIG;IACI,YAAY,CAAE,MAAM,EAAE,MAAM;IAItB,OAAO;IAiBb,KAAK;IAeL,SAAS,CAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa;IAQ5D;;;OAGG;IACH,gBAAgB;IAIhB,IAAI,MAAM,0BAET;IAED,IAAI,WAAW,YAEd;IAED;;;OAGG;IACH,IAAI,gBAAgB,WAIG,OAAO,UAF7B;IAqCY,IAAI,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAmCtE,SAAS,CAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC;CAWpD;AAED,wBAAgB,gBAAgB,CAAE,MAAM,EAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAwCjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAkJ/D,CAAA;AAED,eAAO,MAAM,WAAW,wCAAwC,CAAA;AAChE,eAAO,MAAM,kBAAkB,uCAAuC,CAAA;AAEtE,eAAO,MAAM,aAAa,QAAiE,CAAA;AAC3F,eAAO,MAAM,qCAAqC,SAAU,CAAA;AAE5D,eAAO,MAAM,qBAAqB;;CAAsC,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CA+J/D,CAAA;AAED,eAAO,MAAM,WAAW,wCAAwC,CAAA;AAChE,eAAO,MAAM,kBAAkB,uCAAuC,CAAA;AAEtE,eAAO,MAAM,aAAa,QAAiE,CAAA;AAC3F,eAAO,MAAM,qCAAqC,SAAU,CAAA;AAE5D,eAAO,MAAM,qBAAqB;;CAAsC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAyB,YAAY,EAAE,kBAAkB,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAA;AAIrE,MAAM,CAAC,OAAO,OAAO,SAAS;WACb,UAAU,CACnB,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,oBAAoB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC9C,yBAAyB,GAAE,MAAM,EAAO,GACzC,OAAO,CAAC,MAAM,CAAC;IA4ElB;;OAEG;IACH,MAAM,CAAC,eAAe,CAClB,OAAO,CAAC,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GACzC,MAAM;IAmDT;;;;;;OAMG;WACU,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,YAAY,CAAC,EAAE,WAAW,CAAA;KAAE,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,YAAY;IA2DxH,MAAM,KAAK,SAAS,qBAEnB;CACJ;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAA;AACzG,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAyB,YAAY,EAAE,kBAAkB,EAAsB,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACxI,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAgB,MAAM,YAAY,CAAA;AAIrE,MAAM,CAAC,OAAO,OAAO,SAAS;WACb,UAAU,CACnB,OAAO,EAAE,YAAY,CAAC,YAAY,EAClC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,oBAAoB,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC9C,yBAAyB,GAAE,MAAM,EAAO,GACzC,OAAO,CAAC,MAAM,CAAC;IA6ElB;;OAEG;IACH,MAAM,CAAC,eAAe,CAClB,OAAO,CAAC,EAAE,aAAa,EACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAClC,aAAa,KAAK,EAClB,cAAc,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GACzC,MAAM;IAoDT;;;;;;OAMG;WACU,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,YAAY,CAAC,EAAE,WAAW,CAAA;KAAE,EAAE,eAAe,CAAC,EAAE,WAAW,CAAC,YAAY;IA2DxH,MAAM,KAAK,SAAS,qBAEnB;CACJ;AAED;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAA;AACzG,cAAc,YAAY,CAAA;AAC1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAA"}
package/build/index.js CHANGED
@@ -169,6 +169,19 @@ var DEFAULTS = {
169
169
  type: "number",
170
170
  default: 3
171
171
  },
172
+ /**
173
+ * Timeout for a WebDriver Bidi command to receive a response from the browser
174
+ */
175
+ bidiResponseTimeout: {
176
+ type: "number",
177
+ default: DEFAULT_RESPONSE_TIMEOUT,
178
+ validate: (timeout) => {
179
+ if (!Number.isFinite(timeout) || timeout <= 0) {
180
+ throw new TypeError('The option "bidiResponseTimeout" needs to be a positive number');
181
+ }
182
+ return true;
183
+ }
184
+ },
172
185
  /**
173
186
  * Override default agent
174
187
  */
@@ -216,8 +229,7 @@ var DEFAULTS = {
216
229
  * when attempting to start a session.
217
230
  */
218
231
  cacheDir: {
219
- type: "string",
220
- default: environment.value.variables.WEBDRIVER_CACHE_DIR
232
+ type: "string"
221
233
  },
222
234
  /**
223
235
  * Mask sensitive data in logs by replacing matching string or all captured groups for the provided regular expressions as string
@@ -263,10 +275,10 @@ function isBase64Safe(str) {
263
275
  var SCRIPT_PREFIX = "/* __wdio script__ */";
264
276
  var SCRIPT_SUFFIX = "/* __wdio script end__ */";
265
277
  var log = logger("webdriver");
266
- var RESPONSE_TIMEOUT = 1e3 * 60;
267
- var _id, _ws, _waitForConnected, _resolveWaitForConnected, _webSocketUrl, _clientOptions, _pendingCommands, _BidiCore_instances, handleResponse_fn;
278
+ var DEFAULT_RESPONSE_TIMEOUT = 1e3 * 180;
279
+ var _id, _ws, _waitForConnected, _resolveWaitForConnected, _webSocketUrl, _clientOptions, _responseTimeout, _pendingCommands, _BidiCore_instances, handleResponse_fn;
268
280
  var BidiCore = class {
269
- constructor(webSocketUrl, opts) {
281
+ constructor(webSocketUrl, opts, responseTimeout = DEFAULT_RESPONSE_TIMEOUT) {
270
282
  __privateAdd(this, _BidiCore_instances);
271
283
  __privateAdd(this, _id, 0);
272
284
  __privateAdd(this, _ws);
@@ -274,14 +286,19 @@ var BidiCore = class {
274
286
  __privateAdd(this, _resolveWaitForConnected);
275
287
  __privateAdd(this, _webSocketUrl);
276
288
  __privateAdd(this, _clientOptions);
289
+ __privateAdd(this, _responseTimeout);
277
290
  __privateAdd(this, _pendingCommands, /* @__PURE__ */ new Map());
278
291
  __publicField(this, "client");
279
292
  /**
280
293
  * @private
281
294
  */
282
295
  __publicField(this, "_isConnected", false);
296
+ if (!Number.isFinite(responseTimeout) || responseTimeout <= 0) {
297
+ throw new TypeError('The option "bidiResponseTimeout" needs to be a positive number');
298
+ }
283
299
  __privateSet(this, _webSocketUrl, webSocketUrl);
284
300
  __privateSet(this, _clientOptions, opts);
301
+ __privateSet(this, _responseTimeout, responseTimeout);
285
302
  __privateSet(this, _resolveWaitForConnected, () => {
286
303
  });
287
304
  __privateSet(this, _waitForConnected, new Promise((resolve) => {
@@ -351,9 +368,11 @@ var BidiCore = class {
351
368
  const failError = new Error('WebDriver Bidi command "'.concat(params.method, '" failed'));
352
369
  const payload = await new Promise((resolve, reject) => {
353
370
  const t = setTimeout(() => {
354
- reject(new Error("Command ".concat(params.method, " with id ").concat(id, " (with the following parameter: ").concat(JSON.stringify(params.params), ") timed out")));
371
+ reject(new Error(
372
+ "Command ".concat(params.method, " with id ").concat(id, " timed out after ").concat(__privateGet(this, _responseTimeout), "ms! ") + 'Consider increasing the "bidiResponseTimeout" option.'
373
+ ));
355
374
  __privateGet(this, _pendingCommands).delete(id);
356
- }, RESPONSE_TIMEOUT);
375
+ }, __privateGet(this, _responseTimeout));
357
376
  __privateGet(this, _pendingCommands).set(id, (payload2) => {
358
377
  clearTimeout(t);
359
378
  resolve(payload2);
@@ -388,6 +407,7 @@ _waitForConnected = new WeakMap();
388
407
  _resolveWaitForConnected = new WeakMap();
389
408
  _webSocketUrl = new WeakMap();
390
409
  _clientOptions = new WeakMap();
410
+ _responseTimeout = new WeakMap();
391
411
  _pendingCommands = new WeakMap();
392
412
  _BidiCore_instances = new WeakSet();
393
413
  handleResponse_fn = function(data) {
@@ -1553,7 +1573,7 @@ var getSessionError = (err, params = {}) => {
1553
1573
  }
1554
1574
  return err.message;
1555
1575
  };
1556
- function initiateBidi(socketUrl, strictSSL = true, userHeaders) {
1576
+ function initiateBidi(socketUrl, strictSSL = true, userHeaders, responseTimeout) {
1557
1577
  const isUnitTesting = environment.value.variables.WDIO_UNIT_TESTS;
1558
1578
  if (isUnitTesting) {
1559
1579
  log2.info("Skip connecting to WebDriver Bidi interface due to unit tests");
@@ -1574,7 +1594,7 @@ function initiateBidi(socketUrl, strictSSL = true, userHeaders) {
1574
1594
  if (userHeaders) {
1575
1595
  bidiReqOpts.headers = userHeaders;
1576
1596
  }
1577
- const handler = new BidiHandler(socketUrl, bidiReqOpts);
1597
+ const handler = new BidiHandler(socketUrl, bidiReqOpts, responseTimeout);
1578
1598
  handler.connect().then((isConnected) => isConnected && log2.info("Connected to WebDriver Bidi interface at ".concat(socketUrl)));
1579
1599
  return {
1580
1600
  _bidiHandler: { value: handler },
@@ -1813,7 +1833,8 @@ var WebDriver = class _WebDriver {
1813
1833
  Object.assign(bidiPrototype, initiateBidi(
1814
1834
  capabilities.webSocketUrl,
1815
1835
  options.strictSSL,
1816
- options.headers
1836
+ options.headers,
1837
+ params.bidiResponseTimeout
1817
1838
  ));
1818
1839
  }
1819
1840
  const monad = webdriverMonad(
@@ -1865,7 +1886,8 @@ var WebDriver = class _WebDriver {
1865
1886
  Object.assign(bidiPrototype, initiateBidi(
1866
1887
  webSocketUrl,
1867
1888
  options.strictSSL,
1868
- options.headers
1889
+ options.headers,
1890
+ options.bidiResponseTimeout
1869
1891
  ));
1870
1892
  }
1871
1893
  const prototype = { ...protocolCommands, ...environmentPrototype, ...userPrototype, ...bidiPrototype };
@@ -2051,10 +2073,11 @@ var WebDriverRequestError = class extends WebDriverError {
2051
2073
  __publicField(this, "code");
2052
2074
  this.url = url;
2053
2075
  this.opts = opts;
2054
- const errorCode = typeof err.cause === "object" && err.cause && "code" in err.cause && typeof err.cause.code === "string" ? err.cause.code : "code" in err && typeof err.code === "string" ? err.code : void 0;
2076
+ const isAbortTimeout = err.name === "TimeoutError";
2077
+ const errorCode = typeof err.cause === "object" && err.cause && "code" in err.cause && typeof err.cause.code === "string" ? err.cause.code : "code" in err && typeof err.code === "string" ? err.code : isAbortTimeout ? "ETIMEDOUT" : void 0;
2055
2078
  if (errorCode) {
2056
2079
  this.code = errorCode;
2057
- this.message = errorCode === "UND_ERR_CONNECT_TIMEOUT" ? 'Request timed out! Consider increasing the "connectionRetryTimeout" option.' : "Request failed with error code " + errorCode;
2080
+ this.message = errorCode === "UND_ERR_CONNECT_TIMEOUT" || isAbortTimeout ? 'Request timed out! Consider increasing the "connectionRetryTimeout" option.' : "Request failed with error code " + errorCode;
2058
2081
  }
2059
2082
  if (typeof err.cause === "object" && err.cause) {
2060
2083
  this.statusCode = "statusCode" in err.cause && typeof err.cause.statusCode === "number" ? err.cause.statusCode : void 0;
@@ -2091,7 +2114,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
2091
2114
  // package.json
2092
2115
  var package_default = {
2093
2116
  name: "webdriver",
2094
- version: "9.29.1",
2117
+ version: "9.31.0",
2095
2118
  description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
2096
2119
  author: "Christian Bromann <mail@bromann.dev>",
2097
2120
  homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
@@ -2185,6 +2208,31 @@ var DEFAULT_HEADERS = {
2185
2208
  "User-Agent": "webdriver/" + package_default.version
2186
2209
  };
2187
2210
  var log5 = logger5("webdriver");
2211
+ function hasLoggableBody(body) {
2212
+ if (typeof body === "string") {
2213
+ return body.length > 0;
2214
+ }
2215
+ if (body instanceof URLSearchParams || body instanceof FormData) {
2216
+ return !body.keys().next().done;
2217
+ }
2218
+ if (body instanceof Blob) {
2219
+ return body.size > 0;
2220
+ }
2221
+ if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {
2222
+ return body.byteLength > 0;
2223
+ }
2224
+ return Object.keys(body).length > 0;
2225
+ }
2226
+ function toLoggableBody(body) {
2227
+ if (typeof body !== "string") {
2228
+ return body;
2229
+ }
2230
+ try {
2231
+ return JSON.parse(body);
2232
+ } catch {
2233
+ return body;
2234
+ }
2235
+ }
2188
2236
  var WebDriverRequest = class {
2189
2237
  constructor(method, endpoint, body, abortSignal, isHubCommand = false, eventHandler = {}) {
2190
2238
  __publicField(this, "body");
@@ -2194,6 +2242,7 @@ var WebDriverRequest = class {
2194
2242
  __publicField(this, "requiresSessionId");
2195
2243
  __publicField(this, "eventHandler");
2196
2244
  __publicField(this, "abortSignal");
2245
+ __publicField(this, "connectionRetryTimeout", DEFAULTS.connectionRetryTimeout.default);
2197
2246
  this.body = body;
2198
2247
  this.method = method;
2199
2248
  this.endpoint = endpoint;
@@ -2208,15 +2257,18 @@ var WebDriverRequest = class {
2208
2257
  (_b = (_a = this.eventHandler).onRequest) == null ? void 0 : _b.call(_a, requestOptions);
2209
2258
  return this._request(url, requestOptions, options.transformResponse, options.connectionRetryCount, 0);
2210
2259
  }
2260
+ createAbortSignal(signal) {
2261
+ return AbortSignal.any([
2262
+ AbortSignal.timeout(this.connectionRetryTimeout),
2263
+ ...signal ? [signal] : []
2264
+ ]);
2265
+ }
2211
2266
  async createOptions(options, sessionId, isBrowser = false) {
2212
- const timeout = options.connectionRetryTimeout || DEFAULTS.connectionRetryTimeout.default;
2267
+ this.connectionRetryTimeout = options.connectionRetryTimeout || DEFAULTS.connectionRetryTimeout.default;
2213
2268
  const requestOptions = {
2214
2269
  method: this.method,
2215
2270
  redirect: "follow",
2216
- signal: AbortSignal.any([
2217
- AbortSignal.timeout(timeout),
2218
- ...this.abortSignal ? [this.abortSignal] : []
2219
- ])
2271
+ signal: this.abortSignal
2220
2272
  };
2221
2273
  const requestHeaders = new Headers({
2222
2274
  ...DEFAULT_HEADERS,
@@ -2280,10 +2332,14 @@ var WebDriverRequest = class {
2280
2332
  async _request(url, fullRequestOptions, transformResponse, totalRetryCount = 0, retryCount = 0) {
2281
2333
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
2282
2334
  log5.info("[".concat(fullRequestOptions.method, "] ").concat(url.href));
2283
- if (fullRequestOptions.body && Object.keys(fullRequestOptions.body).length) {
2284
- (_b = (_a = this.eventHandler).onLogData) == null ? void 0 : _b.call(_a, fullRequestOptions.body);
2335
+ const loggableBody = fullRequestOptions.body && toLoggableBody(fullRequestOptions.body);
2336
+ if (loggableBody && hasLoggableBody(loggableBody)) {
2337
+ (_b = (_a = this.eventHandler).onLogData) == null ? void 0 : _b.call(_a, loggableBody);
2285
2338
  }
2286
- const { ...requestLibOptions } = fullRequestOptions;
2339
+ const requestLibOptions = {
2340
+ ...fullRequestOptions,
2341
+ signal: this.createAbortSignal(fullRequestOptions.signal)
2342
+ };
2287
2343
  const startTime = performance.now();
2288
2344
  let response = await this._libRequest(url, requestLibOptions).catch((err) => err);
2289
2345
  const durationMillisecond = performance.now() - startTime;
package/build/node.js CHANGED
@@ -150,6 +150,19 @@ var DEFAULTS = {
150
150
  type: "number",
151
151
  default: 3
152
152
  },
153
+ /**
154
+ * Timeout for a WebDriver Bidi command to receive a response from the browser
155
+ */
156
+ bidiResponseTimeout: {
157
+ type: "number",
158
+ default: DEFAULT_RESPONSE_TIMEOUT,
159
+ validate: (timeout) => {
160
+ if (!Number.isFinite(timeout) || timeout <= 0) {
161
+ throw new TypeError('The option "bidiResponseTimeout" needs to be a positive number');
162
+ }
163
+ return true;
164
+ }
165
+ },
153
166
  /**
154
167
  * Override default agent
155
168
  */
@@ -197,8 +210,7 @@ var DEFAULTS = {
197
210
  * when attempting to start a session.
198
211
  */
199
212
  cacheDir: {
200
- type: "string",
201
- default: environment.value.variables.WEBDRIVER_CACHE_DIR
213
+ type: "string"
202
214
  },
203
215
  /**
204
216
  * Mask sensitive data in logs by replacing matching string or all captured groups for the provided regular expressions as string
@@ -244,7 +256,7 @@ function isBase64Safe(str) {
244
256
  var SCRIPT_PREFIX = "/* __wdio script__ */";
245
257
  var SCRIPT_SUFFIX = "/* __wdio script end__ */";
246
258
  var log = logger("webdriver");
247
- var RESPONSE_TIMEOUT = 1e3 * 60;
259
+ var DEFAULT_RESPONSE_TIMEOUT = 1e3 * 180;
248
260
  var BidiCore = class {
249
261
  #id = 0;
250
262
  #ws;
@@ -252,15 +264,20 @@ var BidiCore = class {
252
264
  #resolveWaitForConnected;
253
265
  #webSocketUrl;
254
266
  #clientOptions;
267
+ #responseTimeout;
255
268
  #pendingCommands = /* @__PURE__ */ new Map();
256
269
  client;
257
270
  /**
258
271
  * @private
259
272
  */
260
273
  _isConnected = false;
261
- constructor(webSocketUrl, opts) {
274
+ constructor(webSocketUrl, opts, responseTimeout = DEFAULT_RESPONSE_TIMEOUT) {
275
+ if (!Number.isFinite(responseTimeout) || responseTimeout <= 0) {
276
+ throw new TypeError('The option "bidiResponseTimeout" needs to be a positive number');
277
+ }
262
278
  this.#webSocketUrl = webSocketUrl;
263
279
  this.#clientOptions = opts;
280
+ this.#responseTimeout = responseTimeout;
264
281
  this.#resolveWaitForConnected = () => {
265
282
  };
266
283
  this.#waitForConnected = new Promise((resolve) => {
@@ -357,9 +374,11 @@ var BidiCore = class {
357
374
  const failError = new Error(`WebDriver Bidi command "${params.method}" failed`);
358
375
  const payload = await new Promise((resolve, reject) => {
359
376
  const t = setTimeout(() => {
360
- reject(new Error(`Command ${params.method} with id ${id} (with the following parameter: ${JSON.stringify(params.params)}) timed out`));
377
+ reject(new Error(
378
+ `Command ${params.method} with id ${id} timed out after ${this.#responseTimeout}ms! Consider increasing the "bidiResponseTimeout" option.`
379
+ ));
361
380
  this.#pendingCommands.delete(id);
362
- }, RESPONSE_TIMEOUT);
381
+ }, this.#responseTimeout);
363
382
  this.#pendingCommands.set(id, (payload2) => {
364
383
  clearTimeout(t);
365
384
  resolve(payload2);
@@ -1523,7 +1542,7 @@ It seems like the service failed to start or is rejecting any connections.`;
1523
1542
  }
1524
1543
  return err.message;
1525
1544
  };
1526
- function initiateBidi(socketUrl, strictSSL = true, userHeaders) {
1545
+ function initiateBidi(socketUrl, strictSSL = true, userHeaders, responseTimeout) {
1527
1546
  const isUnitTesting = environment.value.variables.WDIO_UNIT_TESTS;
1528
1547
  if (isUnitTesting) {
1529
1548
  log2.info("Skip connecting to WebDriver Bidi interface due to unit tests");
@@ -1544,7 +1563,7 @@ function initiateBidi(socketUrl, strictSSL = true, userHeaders) {
1544
1563
  if (userHeaders) {
1545
1564
  bidiReqOpts.headers = userHeaders;
1546
1565
  }
1547
- const handler = new BidiHandler(socketUrl, bidiReqOpts);
1566
+ const handler = new BidiHandler(socketUrl, bidiReqOpts, responseTimeout);
1548
1567
  handler.connect().then((isConnected) => isConnected && log2.info(`Connected to WebDriver Bidi interface at ${socketUrl}`));
1549
1568
  return {
1550
1569
  _bidiHandler: { value: handler },
@@ -1789,7 +1808,8 @@ var WebDriver = class _WebDriver {
1789
1808
  Object.assign(bidiPrototype, initiateBidi(
1790
1809
  capabilities.webSocketUrl,
1791
1810
  options.strictSSL,
1792
- options.headers
1811
+ options.headers,
1812
+ params.bidiResponseTimeout
1793
1813
  ));
1794
1814
  }
1795
1815
  const monad = webdriverMonad(
@@ -1840,7 +1860,8 @@ var WebDriver = class _WebDriver {
1840
1860
  Object.assign(bidiPrototype, initiateBidi(
1841
1861
  webSocketUrl,
1842
1862
  options.strictSSL,
1843
- options.headers
1863
+ options.headers,
1864
+ options.bidiResponseTimeout
1844
1865
  ));
1845
1866
  }
1846
1867
  const prototype = { ...protocolCommands, ...environmentPrototype, ...userPrototype, ...bidiPrototype };
@@ -1982,10 +2003,11 @@ var WebDriverRequestError = class extends WebDriverError {
1982
2003
  super(message);
1983
2004
  this.url = url;
1984
2005
  this.opts = opts;
1985
- const errorCode = typeof err.cause === "object" && err.cause && "code" in err.cause && typeof err.cause.code === "string" ? err.cause.code : "code" in err && typeof err.code === "string" ? err.code : void 0;
2006
+ const isAbortTimeout = err.name === "TimeoutError";
2007
+ const errorCode = typeof err.cause === "object" && err.cause && "code" in err.cause && typeof err.cause.code === "string" ? err.cause.code : "code" in err && typeof err.code === "string" ? err.code : isAbortTimeout ? "ETIMEDOUT" : void 0;
1986
2008
  if (errorCode) {
1987
2009
  this.code = errorCode;
1988
- this.message = errorCode === "UND_ERR_CONNECT_TIMEOUT" ? 'Request timed out! Consider increasing the "connectionRetryTimeout" option.' : "Request failed with error code " + errorCode;
2010
+ this.message = errorCode === "UND_ERR_CONNECT_TIMEOUT" || isAbortTimeout ? 'Request timed out! Consider increasing the "connectionRetryTimeout" option.' : "Request failed with error code " + errorCode;
1989
2011
  }
1990
2012
  if (typeof err.cause === "object" && err.cause) {
1991
2013
  this.statusCode = "statusCode" in err.cause && typeof err.cause.statusCode === "number" ? err.cause.statusCode : void 0;
@@ -2022,7 +2044,7 @@ var WebDriverResponseError = class _WebDriverResponseError extends WebDriverErro
2022
2044
  // package.json
2023
2045
  var package_default = {
2024
2046
  name: "webdriver",
2025
- version: "9.29.1",
2047
+ version: "9.31.0",
2026
2048
  description: "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
2027
2049
  author: "Christian Bromann <mail@bromann.dev>",
2028
2050
  homepage: "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
@@ -2116,6 +2138,31 @@ var DEFAULT_HEADERS = {
2116
2138
  "User-Agent": "webdriver/" + package_default.version
2117
2139
  };
2118
2140
  var log5 = logger5("webdriver");
2141
+ function hasLoggableBody(body) {
2142
+ if (typeof body === "string") {
2143
+ return body.length > 0;
2144
+ }
2145
+ if (body instanceof URLSearchParams || body instanceof FormData) {
2146
+ return !body.keys().next().done;
2147
+ }
2148
+ if (body instanceof Blob) {
2149
+ return body.size > 0;
2150
+ }
2151
+ if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {
2152
+ return body.byteLength > 0;
2153
+ }
2154
+ return Object.keys(body).length > 0;
2155
+ }
2156
+ function toLoggableBody(body) {
2157
+ if (typeof body !== "string") {
2158
+ return body;
2159
+ }
2160
+ try {
2161
+ return JSON.parse(body);
2162
+ } catch {
2163
+ return body;
2164
+ }
2165
+ }
2119
2166
  var WebDriverRequest = class {
2120
2167
  body;
2121
2168
  method;
@@ -2124,6 +2171,7 @@ var WebDriverRequest = class {
2124
2171
  requiresSessionId;
2125
2172
  eventHandler;
2126
2173
  abortSignal;
2174
+ connectionRetryTimeout = DEFAULTS.connectionRetryTimeout.default;
2127
2175
  constructor(method, endpoint, body, abortSignal, isHubCommand = false, eventHandler = {}) {
2128
2176
  this.body = body;
2129
2177
  this.method = method;
@@ -2138,15 +2186,18 @@ var WebDriverRequest = class {
2138
2186
  this.eventHandler.onRequest?.(requestOptions);
2139
2187
  return this._request(url, requestOptions, options.transformResponse, options.connectionRetryCount, 0);
2140
2188
  }
2189
+ createAbortSignal(signal) {
2190
+ return AbortSignal.any([
2191
+ AbortSignal.timeout(this.connectionRetryTimeout),
2192
+ ...signal ? [signal] : []
2193
+ ]);
2194
+ }
2141
2195
  async createOptions(options, sessionId, isBrowser = false) {
2142
- const timeout = options.connectionRetryTimeout || DEFAULTS.connectionRetryTimeout.default;
2196
+ this.connectionRetryTimeout = options.connectionRetryTimeout || DEFAULTS.connectionRetryTimeout.default;
2143
2197
  const requestOptions = {
2144
2198
  method: this.method,
2145
2199
  redirect: "follow",
2146
- signal: AbortSignal.any([
2147
- AbortSignal.timeout(timeout),
2148
- ...this.abortSignal ? [this.abortSignal] : []
2149
- ])
2200
+ signal: this.abortSignal
2150
2201
  };
2151
2202
  const requestHeaders = new Headers({
2152
2203
  ...DEFAULT_HEADERS,
@@ -2209,10 +2260,14 @@ var WebDriverRequest = class {
2209
2260
  }
2210
2261
  async _request(url, fullRequestOptions, transformResponse, totalRetryCount = 0, retryCount = 0) {
2211
2262
  log5.info(`[${fullRequestOptions.method}] ${url.href}`);
2212
- if (fullRequestOptions.body && Object.keys(fullRequestOptions.body).length) {
2213
- this.eventHandler.onLogData?.(fullRequestOptions.body);
2263
+ const loggableBody = fullRequestOptions.body && toLoggableBody(fullRequestOptions.body);
2264
+ if (loggableBody && hasLoggableBody(loggableBody)) {
2265
+ this.eventHandler.onLogData?.(loggableBody);
2214
2266
  }
2215
- const { ...requestLibOptions } = fullRequestOptions;
2267
+ const requestLibOptions = {
2268
+ ...fullRequestOptions,
2269
+ signal: this.createAbortSignal(fullRequestOptions.signal)
2270
+ };
2216
2271
  const startTime = performance.now();
2217
2272
  let response = await this._libRequest(url, requestLibOptions).catch((err) => err);
2218
2273
  const durationMillisecond = performance.now() - startTime;
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/request/error.ts"],"names":[],"mappings":"AAIA,uBAAe,cAAe,SAAQ,KAAK;;IACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAE1B;;OAEG;IACH,mBAAmB;CAsCtB;AAED,qBAAa,qBAAsB,SAAQ,cAAc;IACrD,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,WAAW,CAAA;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;gBAEA,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW;CA8BvD;AAED,qBAAa,sBAAuB,SAAQ,cAAc;IACtD,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,WAAW,CAAA;gBACJ,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW;CA2D9D"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/request/error.ts"],"names":[],"mappings":"AAIA,uBAAe,cAAe,SAAQ,KAAK;;IACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAE1B;;OAEG;IACH,mBAAmB;CAsCtB;AAED,qBAAa,qBAAsB,SAAQ,cAAc;IACrD,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,WAAW,CAAA;IAEjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;gBAEA,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW;CAsCvD;AAED,qBAAa,sBAAuB,SAAQ,cAAc;IACtD,GAAG,EAAE,GAAG,CAAA;IACR,IAAI,EAAE,WAAW,CAAA;gBACJ,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW;CA2D9D"}
@@ -10,8 +10,10 @@ export declare abstract class WebDriverRequest {
10
10
  requiresSessionId: boolean;
11
11
  eventHandler: RequestEventHandler;
12
12
  abortSignal?: AbortSignal;
13
+ connectionRetryTimeout: number;
13
14
  constructor(method: string, endpoint: string, body?: Record<string, unknown>, abortSignal?: AbortSignal, isHubCommand?: boolean, eventHandler?: RequestEventHandler);
14
15
  makeRequest(options: RequestOptions, sessionId?: string): Promise<WebDriverResponse<unknown>>;
16
+ private createAbortSignal;
15
17
  createOptions(options: RequestOptions, sessionId?: string, isBrowser?: boolean): Promise<{
16
18
  url: URL;
17
19
  requestOptions: RequestInit;
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAM5G,OAAO,eAAe,CAAA;AAetB,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAExE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,CAAC,EAAE,WAAW,CAAA;gBAErB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,GAAE,OAAe,EAC7B,YAAY,GAAE,mBAAwB;IAWpC,WAAW,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM;IAMxD,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,WAAW,CAAC;KAAE,CAAC;cA6DlI,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAiBhF,aAAa;cAiBX,QAAQ,CACpB,GAAG,EAAE,GAAG,EACR,kBAAkB,EAAE,WAAW,EAC/B,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,KAAK,kBAAkB,EACrG,eAAe,SAAI,EACnB,UAAU,SAAI,GACf,OAAO,CAAC,iBAAiB,CAAC;CA+HhC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/request/request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAM5G,OAAO,eAAe,CAAA;AA+CtB,8BAAsB,gBAAgB;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAExE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,sBAAsB,SAA2C;gBAE7D,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,WAAW,CAAC,EAAE,WAAW,EACzB,YAAY,GAAE,OAAe,EAC7B,YAAY,GAAE,mBAAwB;IAWpC,WAAW,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM;IAM9D,OAAO,CAAC,iBAAiB;IAOnB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,WAAW,CAAC;KAAE,CAAC;cA0DlI,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAiBhF,aAAa;cAiBX,QAAQ,CACpB,GAAG,EAAE,GAAG,EACR,kBAAkB,EAAE,WAAW,EAC/B,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,KAAK,kBAAkB,EACrG,eAAe,SAAI,EACnB,UAAU,SAAI,GACf,OAAO,CAAC,iBAAiB,CAAC;CAsIhC"}
@@ -21,7 +21,7 @@ export interface RequestEventHandler {
21
21
  onResponse?: (ev: RequestEndEvent) => void;
22
22
  onRetry?: (ev: RequestRetryEvent) => void;
23
23
  onPerformance?: (ev: RequestPerformanceEvent) => void;
24
- onLogData?: (ev: BodyInit) => void;
24
+ onLogData?: (ev: BodyInit | Record<string, unknown>) => void;
25
25
  }
26
26
  export type RequestStartEvent = RequestInit;
27
27
  export type RequestEndEvent = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/request/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C,KAAK,EAAE,CAAC,CAAA;IACR;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AAEpE,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACzC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACrD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,CAAA;CACrC;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAC3C,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/request/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC1C,KAAK,EAAE,CAAC,CAAA;IACR;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;AAEpE,MAAM,WAAW,mBAAmB;IAChC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,eAAe,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACzC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACrD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAA;AAC3C,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AACjE,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AACpE,MAAM,MAAM,uBAAuB,GAAG;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA"}
package/build/utils.d.ts CHANGED
@@ -52,9 +52,10 @@ export declare const getSessionError: (err: JSONWPCommandError, params?: Partial
52
52
  * @param socketUrl url to bidi interface
53
53
  * @param strictSSL
54
54
  * @param userHeaders
55
+ * @param responseTimeout timeout for a Bidi command to receive a response from the browser
55
56
  * @returns prototype with interface for bidi primitives
56
57
  */
57
- export declare function initiateBidi(socketUrl: string, strictSSL?: boolean, userHeaders?: Record<string, string>): PropertyDescriptorMap;
58
+ export declare function initiateBidi(socketUrl: string, strictSSL?: boolean, userHeaders?: Record<string, string>, responseTimeout?: number): PropertyDescriptorMap;
58
59
  export declare function parseBidiMessage(this: EventEmitter, data: ArrayBuffer): void;
59
60
  /**
60
61
  * Masks the `text` parameter in a WebDriver command if masking is enabled in the options.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,iBAAiB,CAAA;AAMhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAwC/G;;GAEG;AACH,wBAAsB,qBAAqB,CAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;CAAE,CAAC,CAkHzI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,YAAY,EAAE,WAAW,CAAC,YAAY,QAiC3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,WAkExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,sCAiD7H;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAuBpM;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAgBhD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,kBAAkB,EAAE,SAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,CAAM,WAmD/F,CAAA;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAc,EACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,qBAAqB,CA6CvB;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,QAWtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;;;;EA8BhI"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,iBAAiB,CAAA;AAMhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAM1C,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAwC/G;;GAEG;AACH,wBAAsB,qBAAqB,CAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;CAAE,CAAC,CAkHzI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,YAAY,EAAE,WAAW,CAAC,YAAY,QAiC3E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,WAkExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,sCAiD7H;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,qBAAqB,CAuBpM;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAgBhD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,kBAAkB,EAAE,SAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,CAAM,WAmD/F,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAc,EACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,eAAe,CAAC,EAAE,MAAM,GACzB,qBAAqB,CA6CvB;AAED,wBAAgB,gBAAgB,CAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,QAWtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;;;;EA8BhI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webdriver",
3
- "version": "9.30.0",
3
+ "version": "9.31.1",
4
4
  "description": "A Node.js bindings implementation for the W3C WebDriver and Mobile JSONWire Protocol",
5
5
  "author": "Christian Bromann <mail@bromann.dev>",
6
6
  "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/webdriver",
@@ -38,15 +38,15 @@
38
38
  "dependencies": {
39
39
  "@types/node": "^20.1.0",
40
40
  "@types/ws": "^8.5.3",
41
- "@wdio/config": "9.30.0",
41
+ "@wdio/config": "9.31.1",
42
42
  "@wdio/logger": "9.29.1",
43
- "@wdio/protocols": "9.30.0",
44
- "@wdio/types": "9.29.1",
45
- "@wdio/utils": "9.30.0",
43
+ "@wdio/protocols": "9.31.1",
44
+ "@wdio/types": "9.31.1",
45
+ "@wdio/utils": "9.31.1",
46
46
  "deepmerge-ts": "^7.0.3",
47
47
  "https-proxy-agent": "^7.0.6",
48
48
  "undici": "^6.27.0",
49
49
  "ws": "^8.21.0"
50
50
  },
51
- "gitHead": "5e412ba964c99fb2a4cbf34b5e8ecfee746a5835"
51
+ "gitHead": "c766850846f7ac91cd6cd1d2cd979fbb8a6e8daf"
52
52
  }