jumpy-lion 0.1.6-beta.30 → 0.1.6-beta.32

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 (144) hide show
  1. package/README.md +1 -795
  2. package/browser/fonts/macos-bundle/README.md +9 -61
  3. package/dist/browser-controller.d.ts +8 -3
  4. package/dist/browser-controller.d.ts.map +1 -1
  5. package/dist/browser-controller.js +66 -266
  6. package/dist/browser-controller.js.map +1 -1
  7. package/dist/browser-plugin.d.ts +68 -106
  8. package/dist/browser-plugin.d.ts.map +1 -1
  9. package/dist/browser-plugin.js +210 -705
  10. package/dist/browser-plugin.js.map +1 -1
  11. package/dist/browser-process/align-fingerprint-config.d.ts +40 -0
  12. package/dist/browser-process/align-fingerprint-config.d.ts.map +1 -0
  13. package/dist/browser-process/align-fingerprint-config.js +79 -0
  14. package/dist/browser-process/align-fingerprint-config.js.map +1 -0
  15. package/dist/browser-process/anti-detect-config.d.ts +5 -43
  16. package/dist/browser-process/anti-detect-config.d.ts.map +1 -1
  17. package/dist/browser-process/anti-detect-config.js +212 -554
  18. package/dist/browser-process/anti-detect-config.js.map +1 -1
  19. package/dist/browser-process/browser.d.ts +19 -137
  20. package/dist/browser-process/browser.d.ts.map +1 -1
  21. package/dist/browser-process/browser.js +49 -10
  22. package/dist/browser-process/browser.js.map +1 -1
  23. package/dist/browser-process/fingerprint-config.d.ts +103 -0
  24. package/dist/browser-process/fingerprint-config.d.ts.map +1 -0
  25. package/dist/browser-process/fingerprint-config.js +245 -0
  26. package/dist/browser-process/fingerprint-config.js.map +1 -0
  27. package/dist/browser-process/gpu-family-profiles.d.ts +53 -0
  28. package/dist/browser-process/gpu-family-profiles.d.ts.map +1 -0
  29. package/dist/browser-process/gpu-family-profiles.js +395 -0
  30. package/dist/browser-process/gpu-family-profiles.js.map +1 -0
  31. package/dist/browser-process/launch-options.d.ts +195 -0
  32. package/dist/browser-process/launch-options.d.ts.map +1 -0
  33. package/dist/browser-process/launch-options.js +2 -0
  34. package/dist/browser-process/launch-options.js.map +1 -0
  35. package/dist/browser-process/port-allocator.d.ts +46 -0
  36. package/dist/browser-process/port-allocator.d.ts.map +1 -0
  37. package/dist/browser-process/port-allocator.js +171 -0
  38. package/dist/browser-process/port-allocator.js.map +1 -0
  39. package/dist/browser-process/process.d.ts +54 -0
  40. package/dist/browser-process/process.d.ts.map +1 -1
  41. package/dist/browser-process/process.js +164 -19
  42. package/dist/browser-process/process.js.map +1 -1
  43. package/dist/browser-process/signal-cleanup.d.ts +37 -0
  44. package/dist/browser-process/signal-cleanup.d.ts.map +1 -0
  45. package/dist/browser-process/signal-cleanup.js +93 -0
  46. package/dist/browser-process/signal-cleanup.js.map +1 -0
  47. package/dist/connection/cdp-reconnection.d.ts +61 -0
  48. package/dist/connection/cdp-reconnection.d.ts.map +1 -0
  49. package/dist/connection/cdp-reconnection.js +98 -0
  50. package/dist/connection/cdp-reconnection.js.map +1 -0
  51. package/dist/connection/page-session.d.ts +109 -0
  52. package/dist/connection/page-session.d.ts.map +1 -0
  53. package/dist/connection/page-session.js +257 -0
  54. package/dist/connection/page-session.js.map +1 -0
  55. package/dist/crawler.d.ts +1 -1
  56. package/dist/crawler.d.ts.map +1 -1
  57. package/dist/crawler.js +1 -1
  58. package/dist/crawler.js.map +1 -1
  59. package/dist/fingerprinting/fingerprint-injector.d.ts +6 -116
  60. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  61. package/dist/fingerprinting/fingerprint-injector.js +50 -535
  62. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  63. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +6 -2
  64. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  65. package/dist/fingerprinting/fingerprint-overrides/index.js +6 -2
  66. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  67. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts +18 -0
  68. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts.map +1 -0
  69. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js +136 -0
  70. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js.map +1 -0
  71. package/dist/fingerprinting/fingerprint-overrides/override.d.ts +137 -0
  72. package/dist/fingerprinting/fingerprint-overrides/override.d.ts.map +1 -0
  73. package/dist/fingerprinting/fingerprint-overrides/override.js +14 -0
  74. package/dist/fingerprinting/fingerprint-overrides/override.js.map +1 -0
  75. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts +27 -0
  76. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts.map +1 -0
  77. package/dist/fingerprinting/fingerprint-overrides/registry.js +285 -0
  78. package/dist/fingerprinting/fingerprint-overrides/registry.js.map +1 -0
  79. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts +16 -0
  80. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts.map +1 -0
  81. package/dist/fingerprinting/fingerprint-overrides/screen-override.js +175 -0
  82. package/dist/fingerprinting/fingerprint-overrides/screen-override.js.map +1 -0
  83. package/dist/fingerprinting/injection-planner.d.ts +178 -0
  84. package/dist/fingerprinting/injection-planner.d.ts.map +1 -0
  85. package/dist/fingerprinting/injection-planner.js +376 -0
  86. package/dist/fingerprinting/injection-planner.js.map +1 -0
  87. package/dist/fingerprinting/profile-quality.d.ts +24 -0
  88. package/dist/fingerprinting/profile-quality.d.ts.map +1 -0
  89. package/dist/fingerprinting/profile-quality.js +165 -0
  90. package/dist/fingerprinting/profile-quality.js.map +1 -0
  91. package/dist/fingerprinting/profile-selector.d.ts +101 -0
  92. package/dist/fingerprinting/profile-selector.d.ts.map +1 -0
  93. package/dist/fingerprinting/profile-selector.js +156 -0
  94. package/dist/fingerprinting/profile-selector.js.map +1 -0
  95. package/dist/fingerprinting/ua-alignment.d.ts +51 -0
  96. package/dist/fingerprinting/ua-alignment.d.ts.map +1 -0
  97. package/dist/fingerprinting/ua-alignment.js +146 -0
  98. package/dist/fingerprinting/ua-alignment.js.map +1 -0
  99. package/dist/input/dropdown-selector.d.ts +74 -0
  100. package/dist/input/dropdown-selector.d.ts.map +1 -0
  101. package/dist/input/dropdown-selector.js +306 -0
  102. package/dist/input/dropdown-selector.js.map +1 -0
  103. package/dist/input/element-target.d.ts +117 -0
  104. package/dist/input/element-target.d.ts.map +1 -0
  105. package/dist/input/element-target.js +383 -0
  106. package/dist/input/element-target.js.map +1 -0
  107. package/dist/input/input-emulator.d.ts +85 -0
  108. package/dist/input/input-emulator.d.ts.map +1 -0
  109. package/dist/input/input-emulator.js +319 -0
  110. package/dist/input/input-emulator.js.map +1 -0
  111. package/dist/input/input-transport.d.ts +60 -0
  112. package/dist/input/input-transport.d.ts.map +1 -0
  113. package/dist/input/input-transport.js +28 -0
  114. package/dist/input/input-transport.js.map +1 -0
  115. package/dist/input/recording-transport.d.ts +32 -0
  116. package/dist/input/recording-transport.d.ts.map +1 -0
  117. package/dist/input/recording-transport.js +43 -0
  118. package/dist/input/recording-transport.js.map +1 -0
  119. package/dist/navigation/page-navigation.d.ts +67 -0
  120. package/dist/navigation/page-navigation.d.ts.map +1 -0
  121. package/dist/navigation/page-navigation.js +107 -0
  122. package/dist/navigation/page-navigation.js.map +1 -0
  123. package/dist/network/network-watch.d.ts +72 -0
  124. package/dist/network/network-watch.d.ts.map +1 -0
  125. package/dist/network/network-watch.js +143 -0
  126. package/dist/network/network-watch.js.map +1 -0
  127. package/dist/page.d.ts +59 -117
  128. package/dist/page.d.ts.map +1 -1
  129. package/dist/page.js +169 -1304
  130. package/dist/page.js.map +1 -1
  131. package/dist/session-profile.d.ts +79 -0
  132. package/dist/session-profile.d.ts.map +1 -0
  133. package/dist/session-profile.js +124 -0
  134. package/dist/session-profile.js.map +1 -0
  135. package/dist/tsconfig.build.tsbuildinfo +1 -1
  136. package/package.json +6 -4
  137. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +0 -87
  138. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +0 -1
  139. package/dist/fingerprinting/custom-fingerprint-injector.js +0 -342
  140. package/dist/fingerprinting/custom-fingerprint-injector.js.map +0 -1
  141. package/dist/launcher-wrap.d.ts +0 -10
  142. package/dist/launcher-wrap.d.ts.map +0 -1
  143. package/dist/launcher-wrap.js +0 -11
  144. package/dist/launcher-wrap.js.map +0 -1
@@ -1,76 +1,24 @@
1
- # macOS-equivalent font bundle for Linux hosts
1
+ # macOS-equivalent font bundle
2
2
 
3
- This directory ships:
4
-
5
- - **`40-macos-aliases.conf`** fontconfig file that aliases macOS family names
6
- (Helvetica, SF Pro, Menlo, Lucida Grande, etc.) to freely-licensed clones.
7
- - **`install.sh`** — installs the required apt packages, drops the alias file
8
- into `/etc/fonts/conf.d/`, and rebuilds the font cache.
9
-
10
- ## Why
11
-
12
- When a Linux host runs the crawler with a macOS fingerprint (`platform:
13
- 'MacIntel'`), Skia (Chromium's font subsystem) consults fontconfig to resolve
14
- font family names. Without these aliases, "Helvetica" silently substitutes
15
- to DejaVu Sans / Liberation Sans, producing different glyph rasters and
16
- `measureText()` widths than real macOS. Anti-bot vendors detect this delta
17
- through canvas pixel hashing and font-width fingerprinting — a signal that
18
- survives any pixel-level noise patch.
19
-
20
- These aliases redirect the resolution to clones that are visually close to
21
- the macOS originals, narrowing the cross-platform delta enough that a
22
- moderate noise envelope can mask the residual difference.
3
+ Fontconfig aliases plus an installer that map common macOS font family names
4
+ (Helvetica, SF Pro, Menlo, Lucida Grande, …) to freely-licensed clones, so an
5
+ application rendering with macOS font names on a Linux host resolves to
6
+ visually similar fonts instead of the platform defaults.
23
7
 
24
8
  ## Usage (Docker)
25
9
 
26
- In your Apify actor `Dockerfile`, copy this directory in and run the
27
- installer as part of your image build:
28
-
29
10
  ```dockerfile
30
- # Bundle Mac-equivalent fonts so Skia rasterizes a Mac-like glyph set even
31
- # on a Linux host. Must run as root.
32
11
  COPY browser/fonts/macos-bundle /tmp/macos-bundle
33
12
  RUN bash /tmp/macos-bundle/install.sh && rm -rf /tmp/macos-bundle
34
13
  ```
35
14
 
36
- After the build, verify inside the container:
15
+ Verify inside the container:
37
16
 
38
17
  ```bash
39
18
  fc-match Helvetica
40
- # Expect: qhvr.otf: "TeX Gyre Heros" "Regular"
41
- # NOT: DejaVuSans.ttf: "DejaVu Sans" "Book"
42
19
  ```
43
20
 
44
- ## Font packages used
45
-
46
- | macOS font | Linux clone | Apt package | License |
47
- |------------|-------------|-------------|---------|
48
- | Helvetica / Helvetica Neue | TeX Gyre Heros | `fonts-texgyre` | GUST (BSD-equivalent) |
49
- | Arial | Arimo | `fonts-croscore` | Apache 2.0 |
50
- | Times / Times New Roman | Tinos | `fonts-croscore` | Apache 2.0 |
51
- | Courier / Courier New | Cousine | `fonts-croscore` | Apache 2.0 |
52
- | SF Pro / SF Pro Display / SF Pro Text | Inter | `fonts-inter` | SIL OFL 1.1 |
53
- | SF Mono | JetBrains Mono | `fonts-jetbrains-mono` | Apache 2.0 |
54
- | Menlo | DejaVu Sans Mono | `fonts-dejavu-core` | Bitstream Vera (free) |
55
- | Monaco | Liberation Mono | `fonts-liberation` | SIL OFL 1.1 |
56
- | Geneva | Liberation Sans | `fonts-liberation` | SIL OFL 1.1 |
57
- | Lucida Grande | DejaVu Sans | `fonts-dejavu-core` | Bitstream Vera |
58
- | New York / Baskerville / Hoefler Text / Charter / Cochin / Didot | Tinos | `fonts-croscore` | Apache 2.0 |
59
- | Optima / Gill Sans | URW Classico / URW Gothic | `fonts-urw-base35` | GPL+font exception |
60
- | Avenir / Avenir Next | Inter | `fonts-inter` | SIL OFL 1.1 |
61
- | Futura | URW Gothic | `fonts-urw-base35` | GPL+font exception |
62
- | Palatino | TeX Gyre Pagella / P052 | `fonts-texgyre` | GUST |
63
- | Bookman / Bookman Old Style | TeX Gyre Bonum / URW Bookman | `fonts-texgyre` | GUST |
64
- | Apple Color Emoji | Noto Color Emoji | `fonts-noto-color-emoji` | SIL OFL 1.1 |
65
- | Apple SD Gothic Neo / AppleGothic | Noto Sans CJK KR | `fonts-noto-cjk` | SIL OFL 1.1 |
66
- | Hiragino Sans (JP) | Noto Sans CJK JP | `fonts-noto-cjk` | SIL OFL 1.1 |
67
- | PingFang SC/TC | Noto Sans CJK SC/TC | `fonts-noto-cjk` | SIL OFL 1.1 |
68
- | Apple Symbols | Symbola / Noto Sans Symbols | `fonts-symbola`, `fonts-noto-core` | various free |
69
-
70
- ## Limitations
21
+ ## License
71
22
 
72
- The aliases bring glyph metrics close to macOS but **never byte-identical**.
73
- FreeType (Linux) and CoreText (macOS) use different rasterization, hinting,
74
- and sub-pixel positioning algorithms. Pair this bundle with the cromite
75
- text-rect noise envelope (`F7-B`) and the deterministic font-fallback patch
76
- (`F7-C`) for full coverage.
23
+ The bundled clones are all freely licensed (Apache-2.0, SIL OFL 1.1, GUST,
24
+ Bitstream Vera). See `install.sh` for the exact apt packages.
@@ -1,6 +1,5 @@
1
1
  import { BrowserController } from 'crawlee';
2
- import type { LaunchBrowserOptions } from './browser-plugin.js';
3
- import type { CdpLauncher, LaunchReturn } from './launcher-wrap.js';
2
+ import type { CdpLauncher, LaunchBrowserOptions, LaunchReturn } from './browser-plugin.js';
4
3
  import type { Cookie } from './page.js';
5
4
  import CdpPage from './page.js';
6
5
  export type NewPageResult = CdpPage;
@@ -10,7 +9,6 @@ LaunchReturn, // LaunchResult (CDP client)
10
9
  {}, // NewPageOptions (empty as there are no specific options)
11
10
  NewPageResult> {
12
11
  private client?;
13
- private reconnectAttempts;
14
12
  private hasDisconnectListener;
15
13
  private isClosing;
16
14
  initialize(): Promise<void>;
@@ -39,6 +37,13 @@ NewPageResult> {
39
37
  * @private
40
38
  */
41
39
  protected _newPage(maxRetries?: number): Promise<NewPageResult>;
40
+ /**
41
+ * Thin delegate to the FingerprintConfig module's post-launch path. It
42
+ * reuses the once-per-launch profile selection (stamped by the plugin's
43
+ * pre-launch native path) or selects here for the system-Chrome fallback,
44
+ * then drives the JS fingerprint injection on the new page. The pre-vs-post
45
+ * decision and the PROFILE_SELECTION_KEY handshake live inside that module.
46
+ */
42
47
  private _maybeOverrideFingerprint;
43
48
  /**
44
49
  * Records the launch-time inputs the saveSession() helper later needs to read
@@ -1 +1 @@
1
- {"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAExD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,OAAO,MAAM,WAAW,CAAC;AAGhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAAiB,CAC/D,WAAW,EAAE,6CAA6C;AAC1D,oBAAoB,EAAE,gBAAgB;AACtC,YAAY,EAAE,4BAA4B;AAC1C,EAAE,EAAE,0DAA0D;AAC9D,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,SAAS,CAAS;IAEpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;OAGG;YACW,iBAAiB;IAqC/B;;;OAGG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCvC;;;OAGG;cACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC;;;OAGG;cACa,QAAQ,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,aAAa,CAAC;YAuDlD,yBAAyB;IA+NvC;;;;;OAKG;YACW,qBAAqB;IAiBnC;;;;OAIG;YACW,oBAAoB;IAUlC;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1D,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5G"}
1
+ {"version":3,"file":"browser-controller.d.ts","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAc,MAAM,SAAS,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAI3F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,OAAO,MAAM,WAAW,CAAC;AAGhC,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;AAEpC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,iBAAiB,CAC/D,WAAW,EAAE,6CAA6C;AAC1D,oBAAoB,EAAE,gBAAgB;AACtC,YAAY,EAAE,4BAA4B;AAC1C,EAAE,EAAE,0DAA0D;AAC9D,aAAa,CAChB;IACG,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,SAAS,CAAS;IAEpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;OAGG;YACW,iBAAiB;IA8B/B;;;OAGG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CvC;;;OAGG;cACa,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC;;;OAGG;cACa,QAAQ,CAAC,UAAU,SAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAuDhE;;;;;;OAMG;YACW,yBAAyB;IAOvC;;;;;OAKG;YACW,qBAAqB;IAiBnC;;;;OAIG;YACW,oBAAoB;IAUlC;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlF;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ1D,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5G"}
@@ -1,8 +1,8 @@
1
1
  import CDP from 'chrome-remote-interface';
2
2
  import { BrowserController, log, utils } from 'crawlee';
3
+ import { applyToPage } from './browser-process/fingerprint-config.js';
4
+ import { runWithRetries, linearBackoff, fixedBackoff } from './connection/cdp-reconnection.js';
3
5
  import { PAGE_CLOSED } from './events.js';
4
- import { CdpFingerprintInjector } from './fingerprinting/fingerprint-injector.js';
5
- import { generateNonApifyFingerprint } from './fingerprinting/non-apify-fingerprint-generator.js';
6
6
  import CdpPage from './page.js';
7
7
  import { installSessionInjectionHook } from './session/inject-hook.js';
8
8
  export default class CDPBrowserController extends BrowserController {
@@ -14,12 +14,6 @@ export default class CDPBrowserController extends BrowserController {
14
14
  writable: true,
15
15
  value: void 0
16
16
  });
17
- Object.defineProperty(this, "reconnectAttempts", {
18
- enumerable: true,
19
- configurable: true,
20
- writable: true,
21
- value: 0
22
- });
23
17
  Object.defineProperty(this, "hasDisconnectListener", {
24
18
  enumerable: true,
25
19
  configurable: true,
@@ -34,27 +28,22 @@ export default class CDPBrowserController extends BrowserController {
34
28
  }); // Flag to track intentional browser closure
35
29
  }
36
30
  async initialize() {
31
+ // Retry machinery lives in CdpReconnection; this binding connects to
32
+ // the default (root) target without enabling any domain — eager
33
+ // Network.enable/Page.enable are CDP detection vectors.
37
34
  const maxInitAttempts = 3;
38
- let attempt = 0;
39
- while (attempt < maxInitAttempts) {
40
- try {
41
- this.client = await CDP({
42
- port: this.launchContext.debuggingPort,
43
- local: true,
44
- });
45
- this._attachDisconnectListener();
46
- return;
47
- }
48
- catch (error) {
49
- attempt++;
35
+ this.client = await runWithRetries({
36
+ label: 'CDP client initialization',
37
+ policy: linearBackoff(maxInitAttempts, 2000),
38
+ attempt: async () => await CDP({
39
+ port: this.launchContext.debuggingPort,
40
+ local: true,
41
+ }),
42
+ onAttemptError: (error, attempt) => {
50
43
  log.error(`Failed to initialize CDP client (attempt ${attempt}/${maxInitAttempts})`, error);
51
- if (attempt === maxInitAttempts) {
52
- throw error;
53
- }
54
- // Wait before retrying
55
- await utils.sleep(2000 * attempt);
56
- }
57
- }
44
+ },
45
+ }); // linearBackoff throws on exhaustion, so this is always defined
46
+ this._attachDisconnectListener();
58
47
  }
59
48
  /**
60
49
  * Attach a listener to handle WebSocket disconnections.
@@ -80,68 +69,73 @@ export default class CDPBrowserController extends BrowserController {
80
69
  * @private
81
70
  */
82
71
  async _attemptReconnect(maxAttempts = 5, delayMs = 2000) {
83
- this.reconnectAttempts = 0;
84
- while (this.reconnectAttempts < maxAttempts) {
85
- try {
86
- log.info(`Reconnect attempt ${this.reconnectAttempts + 1} of ${maxAttempts}`);
87
- // Connect to browser target directly
72
+ await runWithRetries({
73
+ label: 'browser root reconnect',
74
+ policy: fixedBackoff(maxAttempts, delayMs / 2),
75
+ attempt: async (attempt) => {
76
+ log.info(`Reconnect attempt ${attempt} of ${maxAttempts}`);
77
+ // Connect to browser target directly — the root target connect
78
+ // does not create new targets.
88
79
  this.client = await CDP({
89
80
  port: this.launchContext.debuggingPort,
90
- target: 'browser', // This connects to the root target without creating new ones
81
+ target: 'browser',
91
82
  local: true,
92
83
  });
93
84
  // NOTE: Network.enable() and Page.enable() REMOVED - they are CDP detection vectors!
94
85
  // These domains will be enabled lazily only when actually needed
95
86
  // Enabling them on connect triggers detectable side effects
96
- this.reconnectAttempts = 0;
97
87
  log.info('Reconnected to browser successfully.');
98
88
  this.hasDisconnectListener = false;
99
89
  this._attachDisconnectListener();
100
- return;
101
- }
102
- catch (error) {
103
- this.reconnectAttempts++;
104
- log.error(`Reconnect attempt ${this.reconnectAttempts} failed.`, error);
105
- if (this.reconnectAttempts === maxAttempts) {
106
- log.error('Max reconnect attempts reached.');
107
- return;
108
- }
109
- await utils.sleep(delayMs / 2);
110
- }
111
- }
90
+ return true;
91
+ },
92
+ onAttemptError: (error, attempt) => {
93
+ log.error(`Reconnect attempt ${attempt} failed.`, error);
94
+ },
95
+ });
112
96
  }
113
97
  /**
114
98
  * Gracefully closes the browser and associated process.
115
99
  * @private
116
100
  */
117
101
  async _close() {
102
+ // Set first so the disconnect listener bails instead of fighting our
103
+ // own shutdown with reconnect attempts when Browser.close drops the WS.
104
+ this.isClosing = true;
105
+ const browserProcess = this.launchContext.process;
106
+ // 1) Graceful CDP quit. This lets Chromium tear down its OWN helper
107
+ // processes and write a clean-exit preference, so there is no macOS
108
+ // "quit unexpectedly" crash dialog. Fast-fail to the process kill —
109
+ // a hung / resource-exhausted browser will not answer this.
118
110
  try {
119
- this.isClosing = true;
120
111
  if (this.client) {
121
112
  await Promise.race([
122
- this.client.close(),
123
- new Promise((_, reject) => setTimeout(() => reject(new Error('CDP client close timeout')), 3000)),
113
+ this.client.Browser.close(),
114
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Browser.close timeout')), 2000)),
124
115
  ]);
125
116
  }
126
- // Gracefully close the browser process with shorter timeout
127
- await Promise.race([
128
- this.launchContext.process.close(),
129
- new Promise((_, reject) => setTimeout(() => reject(new Error('Browser process close timeout')), 3000)),
130
- ]);
131
- log.info('Browser process closed successfully');
132
117
  }
133
118
  catch (e) {
134
- log.warning('Could not close browser gracefully, force killing', e);
135
- // Force kill the browser process immediately
136
- try {
137
- await this.launchContext.process.kill();
138
- }
139
- catch (killError) {
140
- log.error('Could not kill browser process', killError);
119
+ log.debug('Graceful Browser.close failed; falling back to process group kill', e);
120
+ }
121
+ // 2) Drop the websocket (best-effort — it may already be gone after
122
+ // Browser.close). Never let this block shutdown.
123
+ try {
124
+ if (this.client) {
125
+ await Promise.race([
126
+ this.client.close(),
127
+ new Promise((_, reject) => setTimeout(() => reject(new Error('CDP client close timeout')), 1000)),
128
+ ]);
141
129
  }
142
130
  }
143
- // Wait for 5 seconds to ensure the browser is fully closed
144
- await utils.sleep(5000);
131
+ catch (e) {
132
+ log.debug('CDP client close failed/timed out', e);
133
+ }
134
+ // 3) Guarantee the process and its whole group are gone. close() does
135
+ // SIGTERM→SIGKILL on the process GROUP with real escalation, so even
136
+ // if the graceful path failed, no orphan helpers survive.
137
+ await browserProcess.close();
138
+ log.info('Browser process closed successfully');
145
139
  }
146
140
  /**
147
141
  * Force kills the browser process without any grace period.
@@ -213,209 +207,15 @@ export default class CDPBrowserController extends BrowserController {
213
207
  }
214
208
  throw new Error('Failed to create a new page after maximum retry attempts.');
215
209
  }
210
+ /**
211
+ * Thin delegate to the FingerprintConfig module's post-launch path. It
212
+ * reuses the once-per-launch profile selection (stamped by the plugin's
213
+ * pre-launch native path) or selects here for the system-Chrome fallback,
214
+ * then drives the JS fingerprint injection on the new page. The pre-vs-post
215
+ * decision and the PROFILE_SELECTION_KEY handshake live inside that module.
216
+ */
216
217
  async _maybeOverrideFingerprint(page) {
217
- if (!this.launchContext.fingerprint) {
218
- log.debug('No fingerprint provided in launchContext, skipping fingerprint injection');
219
- return;
220
- }
221
- try {
222
- const { fingerprint: launchFingerprint } = this.launchContext;
223
- let fingerprint = launchFingerprint;
224
- let fp = fingerprint.fingerprint;
225
- // ── Non-Apify real-device fingerprint override ───────────────────────
226
- // When useNonApifyFingerprints is set, replace the Crawlee-provided
227
- // synthetic fingerprint with a real Chrome device profile. All fields
228
- // (navigator, screen, GPU, UA-CH) come from the same physical device,
229
- // guaranteeing cross-property consistency that synthetic generators miss.
230
- //
231
- // Native-stealth runs already populated `launchContext.fingerprint`
232
- // pre-launch in browser-plugin.ts; this block re-runs the same
233
- // selection logic for the system-Chrome fallback path (where the
234
- // pre-launch C++ config write was skipped).
235
- const _fpOpts = this.launchContext.launchOptions?.fingerprintOptions;
236
- const fingerprintGeneratorOptions = this.launchContext.launchOptions?.fingerprintGeneratorOptions;
237
- if (_fpOpts?.useNonApifyFingerprints) {
238
- const userPlatform = _fpOpts?.platform;
239
- const osHint = (() => {
240
- // 1. Explicit user platform pin (fingerprintOptions.platform)
241
- if (userPlatform === 'MacIntel')
242
- return 'macos';
243
- if (userPlatform === 'Linux x86_64')
244
- return 'linux';
245
- if (userPlatform === 'Win32')
246
- return 'windows';
247
- // 2. operatingSystems[0] from fingerprintGeneratorOptions —
248
- // Phase 1 validation guarantees this cannot contradict #1.
249
- const fromOpSys = fingerprintGeneratorOptions?.operatingSystems?.[0]?.toLowerCase();
250
- if (fromOpSys === 'macos' || fromOpSys === 'linux' || fromOpSys === 'windows') {
251
- return fromOpSys;
252
- }
253
- // 3. Existing fingerprint's platform string (Crawlee-generated)
254
- const p = (fp?.navigator?.platform || '').toLowerCase();
255
- if (p.includes('mac'))
256
- return 'macos';
257
- if (p.includes('linux'))
258
- return 'linux';
259
- if (p.includes('win'))
260
- return 'windows';
261
- // 4. Host OS fallback
262
- if (process.platform === 'darwin')
263
- return 'macos';
264
- if (process.platform === 'linux')
265
- return 'linux';
266
- return 'windows';
267
- })();
268
- // When `userPlatform` is unset, derive it from `osHint` so the
269
- // non-Apify pool's `platformToOs(platform)` mapping (which wins
270
- // over the `os` field) lands on the same bucket.
271
- const platformForPool = userPlatform
272
- ?? (osHint === 'macos' ? 'MacIntel'
273
- : osHint === 'linux' ? 'Linux x86_64'
274
- : osHint === 'windows' ? 'Win32'
275
- : undefined);
276
- // Mirror the seed-source contract from browser-plugin.ts. Production
277
- // path: extract `session-X` from the proxy URL. Test/A-B path: read
278
- // `fingerprintOptions.seedKey` so harvest comparisons across hosts (Mac
279
- // vs Linux Docker) hit the SAME bundled profile without needing a fake
280
- // proxy.
281
- const proxySeedKey = this.launchContext.proxyUrl
282
- ? (this.launchContext.proxyUrl.match(/session-([^,&]+)/i)?.[1] ?? null)
283
- : (typeof _fpOpts?.seedKey === 'string'
284
- ? _fpOpts.seedKey
285
- : null);
286
- fingerprint = await generateNonApifyFingerprint({
287
- platform: platformForPool,
288
- os: osHint,
289
- proxySeedKey,
290
- });
291
- fp = fingerprint.fingerprint;
292
- this.launchContext.fingerprint = fingerprint;
293
- log.info('Using non-Apify real Chrome device fingerprint', {
294
- requestedPlatform: platformForPool ?? '(none — derived from existing fingerprint)',
295
- os: osHint,
296
- platform: fp?.navigator?.platform,
297
- userAgent: `${(fp?.navigator?.userAgent || '').substring(0, 70)}...`,
298
- webglRenderer: (fp?.videoCard?.renderer || '').substring(0, 70),
299
- });
300
- }
301
- // Note: previously a post-launch OS-mismatch detector here regenerated
302
- // the fingerprint via `new FingerprintGenerator(fingerprintGeneratorOptions)`.
303
- // It was removed because:
304
- // - The Apify pool draw had no `isContaminatedProfile` reroll, so it
305
- // routinely returned profiles like
306
- // `navigator.platform="Linux x86_64"` paired with a Mac UA — leaking
307
- // into logs and (on the system-Chrome JS-injection path) into the
308
- // page DOM.
309
- // - With Phase 2's plumbing fix above, the pre-launch C++ path and
310
- // this post-launch fallback both already consult
311
- // `operatingSystems`, so the mismatch they were trying to correct
312
- // no longer occurs.
313
- // - On native-stealth runs, the regenerated value was discarded by
314
- // the JS-injection skip anyway.
315
- const webgl = fp?.webgl;
316
- log.debug('Fingerprint data from generator:', {
317
- hasFingerprint: !!fp,
318
- hasHeaders: !!fingerprint.headers,
319
- navigatorPlatform: fp?.navigator?.platform,
320
- navigatorUserAgent: `${(fp?.navigator?.userAgent || '').substring(0, 50)}...`,
321
- screenWidth: fp?.screen?.width,
322
- screenHeight: fp?.screen?.height,
323
- webglVendor: webgl?.vendorUnmasked?.substring(0, 30),
324
- webglRenderer: webgl?.rendererUnmasked?.substring(0, 50),
325
- });
326
- // Detect platform from fingerprint or default to Windows for better evasion
327
- const fingerprintPlatform = fp?.navigator?.platform;
328
- const platform = fingerprintPlatform || 'Win32'; // Default to Windows instead of Linux
329
- // Determine if we're running on Apify
330
- const isApify = process.env.APIFY_IS_AT_HOME === 'true';
331
- // Get fingerprint options from launch context
332
- const fingerprintOptions = this.launchContext.launchOptions?.fingerprintOptions || {};
333
- // Get recommended settings based on environment
334
- const defaultOptions = isApify
335
- ? CdpFingerprintInjector.getApifyRecommendedSettings()
336
- : {
337
- debug: false, // Disable debug logging - anti-bot services detect debug prefixes
338
- enableAdvancedStealth: true,
339
- bypassRuntimeEnable: true,
340
- spoofWebGL: true,
341
- spoofAudioContext: true,
342
- spoofClientRects: true,
343
- spoofFonts: true,
344
- spoofPerformance: true,
345
- spoofLocale: true,
346
- detectTimezone: !!this.launchContext.proxyUrl,
347
- useFingerprintDefaults: true, // Use hardcoded defaults (set to false to use generated fingerprint data)
348
- // 2024-2025 new defaults
349
- bypassCDPDetection: true,
350
- spoofStorage: true,
351
- spoofTiming: true,
352
- enableDataDomeBypass: false,
353
- webRtcPolicy: 'spoof',
354
- // Safe defaults for humanized interaction patterns
355
- humanization: {
356
- mouse: true,
357
- keyboard: true,
358
- scroll: true,
359
- },
360
- };
361
- // Determine effective useFingerprintDefaults value.
362
- // Real device profiles (useNonApifyFingerprints=true) contain consistent cross-property
363
- // data measured from a real device — default to using it (useFingerprintDefaults=false).
364
- // Synthetic Apify-generated fingerprints need the hardcoded defaults to avoid
365
- // injecting inconsistent generated values, so they keep useFingerprintDefaults=true.
366
- const usingRealDeviceProfile = !!_fpOpts?.useNonApifyFingerprints;
367
- const effectiveUseFingerprintDefaults = fingerprintOptions.useFingerprintDefaults
368
- ?? (usingRealDeviceProfile ? false : (defaultOptions.useFingerprintDefaults ?? true));
369
- // Platform selection logic:
370
- // - When useFingerprintDefaults is false: prefer generated fingerprint platform
371
- // - When useFingerprintDefaults is true (default): prefer hardcoded fingerprintOptions.platform
372
- const effectivePlatform = effectiveUseFingerprintDefaults === false
373
- ? (platform || fingerprintOptions.platform || 'Win32') // Generated fingerprint first
374
- : (fingerprintOptions.platform || platform || 'Win32'); // Hardcoded option first
375
- // Check useNativeStealth from all possible locations (in priority order):
376
- // 1. Top-level launchOptions (e.g. CDPBrowserPlugin constructor arg)
377
- // 2. Inside fingerprintOptions (e.g. datadome test / crawler launchOptions)
378
- // 3. At launchContext root (some CDPCrawler launchContext configurations)
379
- const useNativeStealth = !!this.launchContext.launchOptions?.useNativeStealth ||
380
- !!this.launchContext.launchOptions?.fingerprintOptions?.useNativeStealth ||
381
- !!this.launchContext?.useNativeStealth;
382
- // Resolved locale triple is populated in browser-plugin before launch. Pass the
383
- // whole thing through so the injector sets navigator.language, Accept-Language,
384
- // Intl defaults, and timezone from one coherent source of truth.
385
- const resolvedLocale = this.launchContext.launchOptions?.resolvedLocale;
386
- // Merge humanization options properly
387
- const mergedOptions = {
388
- ...defaultOptions,
389
- ...fingerprintOptions,
390
- useNativeStealth,
391
- // Explicitly set the computed effective value — the spread above would resolve to
392
- // defaultOptions.useFingerprintDefaults (always true) when fingerprintOptions
393
- // does not include the key, so we must override it here.
394
- useFingerprintDefaults: effectiveUseFingerprintDefaults,
395
- proxyUrl: this.launchContext.proxyUrl,
396
- platform: effectivePlatform,
397
- viewport: this.launchContext.launchOptions?.viewport,
398
- resolvedLocale,
399
- // Ensure humanization options are properly merged
400
- humanization: {
401
- ...defaultOptions.humanization,
402
- ...fingerprintOptions.humanization,
403
- },
404
- };
405
- await CdpFingerprintInjector.injectFingerprint(page, fingerprint, mergedOptions);
406
- page.setHumanizationOptions(mergedOptions.humanization);
407
- log.info('Fingerprint injected successfully', {
408
- platform: mergedOptions.platform,
409
- isApify,
410
- hasProxy: !!this.launchContext.proxyUrl,
411
- useFingerprintDefaults: mergedOptions.useFingerprintDefaults,
412
- enableDataDomeBypass: mergedOptions.enableDataDomeBypass,
413
- humanization: mergedOptions.humanization,
414
- });
415
- }
416
- catch (error) {
417
- log.error('Error attaching fingerprint', { error });
418
- }
218
+ await applyToPage(this.launchContext, page);
419
219
  }
420
220
  /**
421
221
  * Records the launch-time inputs the saveSession() helper later needs to read
@@ -1 +1 @@
1
- {"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-controller.js","sourceRoot":"","sources":["../src/browser-controller.ts"],"names":[],"mappings":"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"}