brave-real-puppeteer-core 24.23.0 → 24.25.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 (77) hide show
  1. package/README.md +5 -5
  2. package/advanced-stealth.js +1 -1
  3. package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +2 -2
  4. package/lib/cjs/puppeteer/cdp/Accessibility.js +16 -0
  5. package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
  6. package/lib/cjs/puppeteer/cdp/Browser.d.ts +2 -2
  7. package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  8. package/lib/cjs/puppeteer/cdp/Browser.js +9 -4
  9. package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  10. package/lib/cjs/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  11. package/lib/cjs/puppeteer/cdp/BrowserConnector.js +2 -2
  12. package/lib/cjs/puppeteer/cdp/BrowserConnector.js.map +1 -1
  13. package/lib/cjs/puppeteer/common/ConnectOptions.d.ts +7 -0
  14. package/lib/cjs/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  15. package/lib/cjs/puppeteer/common/util.js +1 -1
  16. package/lib/cjs/puppeteer/common/util.js.map +1 -1
  17. package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  18. package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  19. package/lib/cjs/puppeteer/node/BrowserLauncher.js +12 -5
  20. package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  21. package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js +1 -1
  22. package/lib/cjs/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  23. package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  24. package/lib/cjs/puppeteer/revisions.js +3 -3
  25. package/lib/cjs/puppeteer/revisions.js.map +1 -1
  26. package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  27. package/lib/cjs/puppeteer/util/version.d.ts +7 -0
  28. package/lib/cjs/puppeteer/util/version.d.ts.map +1 -0
  29. package/lib/cjs/puppeteer/util/version.js +13 -0
  30. package/lib/cjs/puppeteer/util/version.js.map +1 -0
  31. package/lib/es5-iife/puppeteer-core-browser.d.ts +7 -0
  32. package/lib/es5-iife/puppeteer-core-browser.js +40 -14
  33. package/lib/esm/puppeteer/cdp/Accessibility.js +16 -0
  34. package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
  35. package/lib/esm/puppeteer/cdp/Browser.d.ts +2 -2
  36. package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  37. package/lib/esm/puppeteer/cdp/Browser.js +9 -4
  38. package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  39. package/lib/esm/puppeteer/cdp/BrowserConnector.d.ts.map +1 -1
  40. package/lib/esm/puppeteer/cdp/BrowserConnector.js +2 -2
  41. package/lib/esm/puppeteer/cdp/BrowserConnector.js.map +1 -1
  42. package/lib/esm/puppeteer/common/ConnectOptions.d.ts +7 -0
  43. package/lib/esm/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  44. package/lib/esm/puppeteer/common/util.js +1 -1
  45. package/lib/esm/puppeteer/common/util.js.map +1 -1
  46. package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  47. package/lib/esm/puppeteer/node/BrowserLauncher.js +12 -5
  48. package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  49. package/lib/esm/puppeteer/node/NodeWebSocketTransport.js +1 -1
  50. package/lib/esm/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  51. package/lib/esm/puppeteer/revisions.d.ts +3 -3
  52. package/lib/esm/puppeteer/revisions.js +3 -3
  53. package/lib/esm/puppeteer/revisions.js.map +1 -1
  54. package/lib/esm/puppeteer/util/version.d.ts +7 -0
  55. package/lib/esm/puppeteer/util/version.d.ts.map +1 -0
  56. package/lib/esm/puppeteer/util/version.js +10 -0
  57. package/lib/esm/puppeteer/util/version.js.map +1 -0
  58. package/lib/types.d.ts +7 -0
  59. package/package.json +13 -13
  60. package/src/cdp/Accessibility.ts +18 -0
  61. package/src/cdp/Browser.ts +9 -1
  62. package/src/cdp/BrowserConnector.ts +2 -0
  63. package/src/common/ConnectOptions.ts +8 -0
  64. package/src/common/util.ts +1 -1
  65. package/src/node/BrowserLauncher.ts +16 -5
  66. package/src/node/NodeWebSocketTransport.ts +1 -1
  67. package/src/revisions.ts +3 -3
  68. package/src/util/version.ts +10 -0
  69. package/lib/cjs/puppeteer/generated/version.d.ts +0 -5
  70. package/lib/cjs/puppeteer/generated/version.d.ts.map +0 -1
  71. package/lib/cjs/puppeteer/generated/version.js +0 -8
  72. package/lib/cjs/puppeteer/generated/version.js.map +0 -1
  73. package/lib/esm/puppeteer/generated/version.d.ts +0 -5
  74. package/lib/esm/puppeteer/generated/version.d.ts.map +0 -1
  75. package/lib/esm/puppeteer/generated/version.js +0 -5
  76. package/lib/esm/puppeteer/generated/version.js.map +0 -1
  77. package/src/generated/version.ts +0 -4
@@ -7,8 +7,8 @@
7
7
  * @internal
8
8
  */
9
9
  export declare const PUPPETEER_REVISIONS: Readonly<{
10
- chrome: "141.0.7390.54";
11
- 'chrome-headless-shell': "141.0.7390.54";
12
- firefox: "stable_143.0.3";
10
+ chrome: "141.0.7390.78";
11
+ 'chrome-headless-shell': "141.0.7390.78";
12
+ firefox: "stable_144.0";
13
13
  }>;
14
14
  //# sourceMappingURL=revisions.d.ts.map
@@ -7,8 +7,8 @@
7
7
  * @internal
8
8
  */
9
9
  export const PUPPETEER_REVISIONS = Object.freeze({
10
- chrome: '141.0.7390.54',
11
- 'chrome-headless-shell': '141.0.7390.54',
12
- firefox: 'stable_143.0.3',
10
+ chrome: '141.0.7390.78',
11
+ 'chrome-headless-shell': '141.0.7390.78',
12
+ firefox: 'stable_144.0',
13
13
  });
14
14
  //# sourceMappingURL=revisions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"revisions.js","sourceRoot":"","sources":["../../../src/revisions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,eAAe;IACvB,uBAAuB,EAAE,eAAe;IACxC,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC"}
1
+ {"version":3,"file":"revisions.js","sourceRoot":"","sources":["../../../src/revisions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,MAAM,EAAE,eAAe;IACvB,uBAAuB,EAAE,eAAe;IACxC,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare const packageVersion = "24.25.0";
7
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../src/util/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,cAAc,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ // If moved update release-please config
7
+ // x-release-please-start-version
8
+ export const packageVersion = '24.25.0';
9
+ // x-release-please-end
10
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/util/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wCAAwC;AACxC,iCAAiC;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AACxC,uBAAuB"}
package/lib/types.d.ts CHANGED
@@ -1075,6 +1075,13 @@ export declare interface ConnectOptions {
1075
1075
  */
1076
1076
  targetFilter?: TargetFilterCallback;
1077
1077
 
1078
+ /**
1079
+ * Whether to handle the DevTools windows as pages in Puppeteer. Supported
1080
+ * only in Chrome with CDP.
1081
+ *
1082
+ * @defaultValue 'false'
1083
+ */
1084
+ handleDevToolsAsPage?: boolean;
1078
1085
  /**
1079
1086
  * @defaultValue Determined at run time:
1080
1087
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "brave-real-puppeteer-core",
3
- "version": "24.23.0",
4
- "description": "Brave-optimized Puppeteer Core (v24.23.0) with comprehensive stealth patches and cross-platform browser detection",
3
+ "version": "24.25.0",
4
+ "description": "Brave-optimized Puppeteer Core (v24.25.0) with comprehensive stealth patches and cross-platform browser detection",
5
5
  "keywords": [
6
6
  "puppeteer",
7
7
  "brave",
@@ -13,7 +13,7 @@
13
13
  "rebrowser",
14
14
  "patches",
15
15
  "anti-detection",
16
- "puppeteer-24.23.0",
16
+ "puppeteer-24.25.0",
17
17
  "puppeteer-core",
18
18
  "patch-version"
19
19
  ],
@@ -37,17 +37,17 @@
37
37
  },
38
38
  "license": "MIT",
39
39
  "dependencies": {
40
- "@puppeteer/browsers": "2.10.10",
40
+ "@puppeteer/browsers": "2.10.12",
41
41
  "chromium-bidi": "9.1.0",
42
42
  "debug": "^4.4.3",
43
43
  "devtools-protocol": "0.0.1508733",
44
44
  "typed-query-selector": "^2.12.0",
45
- "webdriver-bidi-protocol": "0.3.6",
45
+ "webdriver-bidi-protocol": "0.3.7",
46
46
  "ws": "^8.18.3"
47
47
  },
48
48
  "optionalDependencies": {},
49
49
  "peerDependencies": {
50
- "puppeteer-core": "24.23.0"
50
+ "puppeteer-core": "24.25.0"
51
51
  },
52
52
  "files": [
53
53
  "lib",
@@ -58,16 +58,16 @@
58
58
  ],
59
59
  "brave": {
60
60
  "optimized": true,
61
- "version": "24.23.0",
61
+ "version": "24.25.0",
62
62
  "basedOn": {
63
- "puppeteer-core": "24.23.0",
64
- "patches-version": "24.23.0",
65
- "release-info": "Brave Puppeteer v24.23.0 based on Puppeteer Core v24.23.0"
63
+ "puppeteer-core": "24.25.0",
64
+ "patches-version": "24.25.0",
65
+ "release-info": "Brave Puppeteer v24.25.0 based on Puppeteer Core v24.25.0"
66
66
  },
67
67
  "versionInfo": {
68
- "braveVersion": "24.23.0",
69
- "puppeteerVersion": "24.23.0",
70
- "fullName": "Brave Puppeteer Core v24.23.0 (Puppeteer 24.23.0)"
68
+ "braveVersion": "24.25.0",
69
+ "puppeteerVersion": "24.25.0",
70
+ "fullName": "Brave Puppeteer Core v24.25.0 (Puppeteer 24.25.0)"
71
71
  },
72
72
  "features": [
73
73
  "ultra-fast-timing",
@@ -319,6 +319,7 @@ class AXNode {
319
319
  #name: string;
320
320
  #role: string;
321
321
  #ignored: boolean;
322
+ #cachedHasFocusableChild?: boolean;
322
323
  #realm: Realm;
323
324
 
324
325
  constructor(realm: Realm, payload: Protocol.Accessibility.AXNode) {
@@ -361,6 +362,19 @@ class AXNode {
361
362
  );
362
363
  }
363
364
 
365
+ #hasFocusableChild(): boolean {
366
+ if (this.#cachedHasFocusableChild === undefined) {
367
+ this.#cachedHasFocusableChild = false;
368
+ for (const child of this.children) {
369
+ if (child.#focusable || child.#hasFocusableChild()) {
370
+ this.#cachedHasFocusableChild = true;
371
+ break;
372
+ }
373
+ }
374
+ }
375
+ return this.#cachedHasFocusableChild;
376
+ }
377
+
364
378
  public find(predicate: (x: AXNode) => boolean): AXNode | null {
365
379
  if (predicate(this)) {
366
380
  return this;
@@ -406,6 +420,10 @@ class AXNode {
406
420
  break;
407
421
  }
408
422
 
423
+ if (this.#hasFocusableChild()) {
424
+ return false;
425
+ }
426
+
409
427
  if (this.#role === 'heading' && this.#name) {
410
428
  return true;
411
429
  }
@@ -56,6 +56,7 @@ export class CdpBrowser extends BrowserBase {
56
56
  isPageTargetCallback?: IsPageTargetCallback,
57
57
  waitForInitiallyDiscoveredTargets = true,
58
58
  networkEnabled = true,
59
+ handleDevToolsAsPage = false,
59
60
  ): Promise<CdpBrowser> {
60
61
  const browser = new CdpBrowser(
61
62
  connection,
@@ -67,6 +68,7 @@ export class CdpBrowser extends BrowserBase {
67
68
  isPageTargetCallback,
68
69
  waitForInitiallyDiscoveredTargets,
69
70
  networkEnabled,
71
+ handleDevToolsAsPage,
70
72
  );
71
73
  if (acceptInsecureCerts) {
72
74
  await connection.send('Security.setIgnoreCertificateErrors', {
@@ -86,6 +88,7 @@ export class CdpBrowser extends BrowserBase {
86
88
  #contexts = new Map<string, CdpBrowserContext>();
87
89
  #networkEnabled = true;
88
90
  #targetManager: TargetManager;
91
+ #handleDevToolsAsPage = false;
89
92
 
90
93
  constructor(
91
94
  connection: Connection,
@@ -97,6 +100,7 @@ export class CdpBrowser extends BrowserBase {
97
100
  isPageTargetCallback?: IsPageTargetCallback,
98
101
  waitForInitiallyDiscoveredTargets = true,
99
102
  networkEnabled = true,
103
+ handleDevToolsAsPage = false,
100
104
  ) {
101
105
  super();
102
106
  this.#networkEnabled = networkEnabled;
@@ -109,6 +113,7 @@ export class CdpBrowser extends BrowserBase {
109
113
  (() => {
110
114
  return true;
111
115
  });
116
+ this.#handleDevToolsAsPage = handleDevToolsAsPage;
112
117
  this.#setIsPageTargetCallback(isPageTargetCallback);
113
118
  this.#targetManager = new TargetManager(
114
119
  connection,
@@ -188,7 +193,10 @@ export class CdpBrowser extends BrowserBase {
188
193
  return (
189
194
  target.type() === 'page' ||
190
195
  target.type() === 'background_page' ||
191
- target.type() === 'webview'
196
+ target.type() === 'webview' ||
197
+ (this.#handleDevToolsAsPage &&
198
+ target.type() === 'other' &&
199
+ target.url().startsWith('devtools://'))
192
200
  );
193
201
  });
194
202
  }
@@ -31,6 +31,7 @@ export async function _connectToCdpBrowser(
31
31
  _isPageTarget: isPageTarget,
32
32
  slowMo = 0,
33
33
  protocolTimeout,
34
+ handleDevToolsAsPage,
34
35
  } = options;
35
36
 
36
37
  const connection = new Connection(
@@ -57,6 +58,7 @@ export async function _connectToCdpBrowser(
57
58
  isPageTarget,
58
59
  undefined,
59
60
  networkEnabled,
61
+ handleDevToolsAsPage,
60
62
  );
61
63
  return browser;
62
64
  }
@@ -82,6 +82,14 @@ export interface ConnectOptions {
82
82
  */
83
83
  _isPageTarget?: IsPageTargetCallback;
84
84
 
85
+ /**
86
+ * Whether to handle the DevTools windows as pages in Puppeteer. Supported
87
+ * only in Chrome with CDP.
88
+ *
89
+ * @defaultValue 'false'
90
+ */
91
+ handleDevToolsAsPage?: boolean;
92
+
85
93
  /**
86
94
  * @defaultValue Determined at run time:
87
95
  *
@@ -17,9 +17,9 @@ import {
17
17
  } from '../../third_party/rxjs/rxjs.js';
18
18
  import type {CDPSession} from '../api/CDPSession.js';
19
19
  import {environment} from '../environment.js';
20
- import {packageVersion} from '../generated/version.js';
21
20
  import {assert} from '../util/assert.js';
22
21
  import {mergeUint8Arrays, stringToTypedArray} from '../util/encoding.js';
22
+ import {packageVersion} from '../util/version.js';
23
23
 
24
24
  import {debug} from './Debug.js';
25
25
  import {TimeoutError} from './Errors.js';
@@ -87,6 +87,7 @@ export abstract class BrowserLauncher {
87
87
  timeout = 30000,
88
88
  waitForInitialPage = true,
89
89
  protocolTimeout,
90
+ handleDevToolsAsPage,
90
91
  } = options;
91
92
 
92
93
  let {protocol} = options;
@@ -206,22 +207,32 @@ export abstract class BrowserLauncher {
206
207
  undefined,
207
208
  undefined,
208
209
  networkEnabled,
210
+ handleDevToolsAsPage,
209
211
  );
210
212
  }
211
213
  }
212
214
  } catch (error) {
213
215
  void browserCloseCallback();
216
+ const logs = browserProcess.getRecentLogs().join('\n');
214
217
  if (
215
- browserProcess.getRecentLogs().some(line => {
216
- return line.includes(
217
- 'Failed to create a ProcessSingleton for your profile directory',
218
- );
219
- })
218
+ logs.includes(
219
+ 'Failed to create a ProcessSingleton for your profile directory',
220
+ ) ||
221
+ // On Windows we will not get logs due to the singleton process
222
+ // handover. See
223
+ // https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/process_singleton_win.cc;l=46;drc=fc7952f0422b5073515a205a04ec9c3a1ae81658
224
+ (process.platform === 'win32' &&
225
+ existsSync(join(launchArgs.userDataDir, 'lockfile')))
220
226
  ) {
221
227
  throw new Error(
222
228
  `The browser is already running for ${launchArgs.userDataDir}. Use a different \`userDataDir\` or stop the running browser first.`,
223
229
  );
224
230
  }
231
+ if (logs.includes('Missing X server') && options.headless === false) {
232
+ throw new Error(
233
+ `Missing X server to start the headful browser. Either set headless to true or use xvfb-run to run your Puppeteer script.`,
234
+ );
235
+ }
225
236
  if (error instanceof BrowsersTimeoutError) {
226
237
  throw new TimeoutError(error.message);
227
238
  }
@@ -6,7 +6,7 @@
6
6
  import NodeWebSocket from 'ws';
7
7
 
8
8
  import type {ConnectionTransport} from '../common/ConnectionTransport.js';
9
- import {packageVersion} from '../generated/version.js';
9
+ import {packageVersion} from '../util/version.js';
10
10
 
11
11
  /**
12
12
  * @internal
package/src/revisions.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * @internal
9
9
  */
10
10
  export const PUPPETEER_REVISIONS = Object.freeze({
11
- chrome: '141.0.7390.54',
12
- 'chrome-headless-shell': '141.0.7390.54',
13
- firefox: 'stable_143.0.3',
11
+ chrome: '141.0.7390.78',
12
+ 'chrome-headless-shell': '141.0.7390.78',
13
+ firefox: 'stable_144.0',
14
14
  });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ // If moved update release-please config
8
+ // x-release-please-start-version
9
+ export const packageVersion = '24.25.0';
10
+ // x-release-please-end
@@ -1,5 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export declare const packageVersion = "24.23.0";
5
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc,YAAY,CAAC"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.packageVersion = void 0;
4
- /**
5
- * @internal
6
- */
7
- exports.packageVersion = '24.23.0';
8
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/generated/version.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,cAAc,GAAG,SAAS,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export declare const packageVersion = "24.23.0";
5
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc,YAAY,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export const packageVersion = '24.23.0';
5
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC"}
@@ -1,4 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export const packageVersion = '24.23.0';