jumpy-lion 0.1.0 → 0.1.2

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 (230) hide show
  1. package/dist/browser-controller.d.ts +22 -3
  2. package/dist/browser-controller.d.ts.map +1 -1
  3. package/dist/browser-controller.js +319 -28
  4. package/dist/browser-controller.js.map +1 -1
  5. package/dist/browser-plugin.d.ts +56 -7
  6. package/dist/browser-plugin.d.ts.map +1 -1
  7. package/dist/browser-plugin.js +268 -56
  8. package/dist/browser-plugin.js.map +1 -1
  9. package/dist/browser-process/browser.d.ts +39 -0
  10. package/dist/browser-process/browser.d.ts.map +1 -1
  11. package/dist/browser-process/browser.js +125 -18
  12. package/dist/browser-process/browser.js.map +1 -1
  13. package/dist/browser-process/process.d.ts +9 -0
  14. package/dist/browser-process/process.d.ts.map +1 -1
  15. package/dist/browser-process/process.js +100 -6
  16. package/dist/browser-process/process.js.map +1 -1
  17. package/dist/browser-profiles/chrome/default.d.ts +116 -0
  18. package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
  19. package/dist/browser-profiles/chrome/default.js +118 -1
  20. package/dist/browser-profiles/chrome/default.js.map +1 -1
  21. package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
  22. package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
  23. package/dist/browser-profiles/chrome/populate-profile.js +300 -0
  24. package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
  25. package/dist/browser-profiles/index.d.ts +1 -0
  26. package/dist/browser-profiles/index.d.ts.map +1 -1
  27. package/dist/browser-profiles/index.js +2 -0
  28. package/dist/browser-profiles/index.js.map +1 -1
  29. package/dist/crawler.d.ts +81 -9
  30. package/dist/crawler.d.ts.map +1 -1
  31. package/dist/crawler.js +26 -10
  32. package/dist/crawler.js.map +1 -1
  33. package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
  34. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
  35. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
  36. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -0
  37. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
  38. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
  39. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
  40. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -0
  41. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
  42. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
  43. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
  44. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -0
  45. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
  46. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
  47. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
  48. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -0
  49. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
  50. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
  51. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
  52. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -0
  53. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
  54. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
  55. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
  56. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -0
  57. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
  58. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
  59. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
  60. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -0
  61. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
  62. package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
  63. package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
  64. package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
  65. package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
  66. package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
  67. package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
  68. package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
  69. package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
  70. package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
  71. package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
  72. package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
  73. package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
  74. package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
  75. package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
  76. package/dist/fingerprinting/anti-webgpu/background.js +4 -0
  77. package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
  78. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
  79. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
  80. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
  81. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
  82. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
  83. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
  84. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
  85. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
  86. package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
  87. package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
  88. package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
  89. package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
  90. package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
  91. package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
  92. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
  93. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
  94. package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
  95. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
  96. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
  97. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
  98. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
  99. package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
  100. package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
  101. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
  102. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
  103. package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
  104. package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
  105. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
  106. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
  107. package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
  108. package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
  109. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
  110. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
  111. package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
  112. package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
  113. package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
  114. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
  115. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
  116. package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
  117. package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
  118. package/dist/fingerprinting/fingerprint-injector.d.ts +157 -0
  119. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -0
  120. package/dist/fingerprinting/fingerprint-injector.js +632 -0
  121. package/dist/fingerprinting/fingerprint-injector.js.map +1 -0
  122. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
  123. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
  124. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +119 -0
  125. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
  126. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
  127. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
  128. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +149 -0
  129. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
  130. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
  131. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
  132. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +763 -0
  133. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
  134. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
  135. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
  136. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +195 -0
  137. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
  138. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts +10 -0
  139. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -0
  140. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +195 -0
  141. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -0
  142. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +28 -0
  143. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
  144. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +1181 -0
  145. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
  146. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
  147. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
  148. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +171 -0
  149. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
  150. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +36 -0
  151. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
  152. package/dist/fingerprinting/fingerprint-overrides/index.js +40 -0
  153. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
  154. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
  155. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
  156. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +268 -0
  157. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
  158. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
  159. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
  160. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +301 -0
  161. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
  162. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
  163. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
  164. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +58 -0
  165. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
  166. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
  167. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
  168. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +249 -0
  169. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
  170. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +33 -0
  171. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
  172. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +618 -0
  173. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
  174. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts +13 -0
  175. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
  176. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +356 -0
  177. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
  178. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +18 -0
  179. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
  180. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +171 -0
  181. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
  182. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
  183. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
  184. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +244 -0
  185. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
  186. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +14 -0
  187. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
  188. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +925 -0
  189. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
  190. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
  191. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
  192. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +346 -0
  193. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
  194. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
  195. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
  196. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +264 -0
  197. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
  198. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +27 -0
  199. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
  200. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +213 -0
  201. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -0
  202. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
  203. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
  204. package/dist/fingerprinting/fingerprint-overrides/utils.js +517 -0
  205. package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
  206. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
  207. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
  208. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +215 -0
  209. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
  210. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
  211. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
  212. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +202 -0
  213. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
  214. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
  215. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
  216. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +188 -0
  217. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
  218. package/dist/index.d.ts +4 -0
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +2 -0
  221. package/dist/index.js.map +1 -1
  222. package/dist/launcher-wrap.d.ts +2 -2
  223. package/dist/launcher-wrap.d.ts.map +1 -1
  224. package/dist/launcher-wrap.js.map +1 -1
  225. package/dist/page.d.ts +161 -7
  226. package/dist/page.d.ts.map +1 -1
  227. package/dist/page.js +1034 -23
  228. package/dist/page.js.map +1 -1
  229. package/dist/tsconfig.build.tsbuildinfo +1 -1
  230. package/package.json +8 -4
@@ -0,0 +1,632 @@
1
+ /**
2
+ * Enhanced CDP Fingerprint Injector for 2025
3
+ *
4
+ * This module provides advanced fingerprint spoofing and anti-detection capabilities
5
+ * specifically designed to bypass hardcore fingerprinting techniques used in 2025.
6
+ *
7
+ * Key Features:
8
+ *
9
+ * 1. **WebGPU Fingerprinting Protection**:
10
+ * - Spoofs GPU adapter information and capabilities
11
+ * - Fakes GPU uptime to appear as if the GPU has been running for 24-72 hours
12
+ * - Intercepts timestamp queries to prevent timing-based detection
13
+ *
14
+ * 2. **Platform Consistency (1:1 Fingerprinting)**:
15
+ * - Ensures all browser properties match the specified platform (Win32, MacIntel, Linux)
16
+ * - Synchronizes navigator properties, screen metrics, and WebGL/WebGPU values
17
+ * - Platform-specific GPU configurations for realistic fingerprints
18
+ *
19
+ * 3. **Runtime.enable Bypass**:
20
+ * - Prevents CDP detection through console.log(Error) technique
21
+ * - Intercepts and blocks Runtime.enable calls
22
+ * - Modifies Error stack traces to hide automation
23
+ *
24
+ * 4. **Advanced Canvas Protection**:
25
+ * - Adds controlled noise to canvas operations
26
+ * - Protects against both 2D and WebGL canvas fingerprinting
27
+ * - Includes font measurement variations
28
+ *
29
+ * 5. **WebRTC IP Leak Prevention**:
30
+ * - Filters STUN servers to prevent IP leaks
31
+ * - Provides fake but consistent device IDs
32
+ * - Modifies ICE candidates and statistics
33
+ *
34
+ * 6. **Audio Context Spoofing**:
35
+ * - Adds noise to audio processing to prevent fingerprinting
36
+ * - Works with both AudioContext and OfflineAudioContext
37
+ *
38
+ * 7. **Client Rect Variations**:
39
+ * - Adds small variations to getBoundingClientRect results
40
+ * - Makes automation harder to detect through DOM measurements
41
+ *
42
+ * 8. **Mouse Movement Humanization**:
43
+ * - Generates bezier curve movements instead of straight lines
44
+ * - Adds random variations to mouse paths
45
+ *
46
+ * Usage:
47
+ * ```typescript
48
+ * await CdpFingerprintInjector.injectFingerprint(page, fingerprint, {
49
+ * enableAdvancedStealth: true,
50
+ * bypassRuntimeEnable: true,
51
+ * platform: 'Win32', // Spoof as Windows for better evasion on Apify Linux
52
+ * spoofWebGL: true,
53
+ * spoofAudioContext: true,
54
+ * spoofClientRects: true,
55
+ * humanizeInteractions: true,
56
+ * spoofFonts: true, // New: Hide Linux-specific fonts
57
+ * spoofPerformance: true, // New: Windows-like timing characteristics
58
+ * spoofLocale: true, // New: Consistent Windows locale formatting
59
+ * useFingerprintDefaults: true // Use fingerprint-generator Windows values
60
+ * });
61
+ * ```
62
+ */
63
+ import { log } from 'crawlee';
64
+ import { gotScraping } from 'got-scraping';
65
+ import { createCustomFingerprintInjection } from './custom-fingerprint-injector.js';
66
+ import { createStealthScript, createWebGLSpoofingScript, createAudioFingerprintSpoofingScript, createAdvancedCanvasProtectionScript, createClientRectSpoofingScript, createWebRTCSpoofingScript, createWebGPUSpoofingScript, createPlatformConsistencyScript, setupMouseMovementHumanization, createRuntimeEnableBypassScript, createFontSpoofingScript, createPerformanceSpoofingScript, createLocaleSpoofingScript, createUAClientHintsSpoofingScript,
67
+ // Stealth utilities (must be injected first)
68
+ createStealthUtilsScript,
69
+ // Prototype integrity (must be injected early)
70
+ createPrototypeIntegrityScript,
71
+ // 2024-2025 New modules
72
+ createCDPDetectionBypassScript, createStorageConsistencyScript, createTimingConsistencyScript, createKeyboardHumanizationScript, createScrollHumanizationScript, createDataDomeBypassScript, createCoalescedEventsSpoofingScript, setupKeyboardHumanization, setupScrollHumanization, } from './fingerprint-overrides/index.js';
73
+ export class CdpFingerprintInjector {
74
+ constructor(page) {
75
+ Object.defineProperty(this, "page", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: void 0
80
+ });
81
+ this.page = page;
82
+ }
83
+ /**
84
+ * Get recommended settings for Apify platform
85
+ * These settings are optimized for running headful Chrome on Apify (Linux)
86
+ * but spoofed to appear as Windows for better anti-bot evasion.
87
+ *
88
+ * Note: Humanization is disabled by default for performance.
89
+ * Use getDataDomeSettings() or enable humanization manually for anti-bot sites.
90
+ */
91
+ static getApifyRecommendedSettings() {
92
+ return {
93
+ debug: true, // Enable debug logging by default
94
+ enableAdvancedStealth: true,
95
+ bypassRuntimeEnable: true,
96
+ platform: 'Win32', // Spoof as Windows instead of Linux for better evasion
97
+ spoofWebGL: true,
98
+ spoofAudioContext: true,
99
+ spoofClientRects: true,
100
+ detectTimezone: true, // Auto-detect timezone from proxy
101
+ // New advanced spoofing options for 2025
102
+ spoofFonts: true,
103
+ spoofPerformance: true,
104
+ spoofLocale: true,
105
+ useFingerprintDefaults: true, // Use fingerprint-generator Windows values
106
+ // 2024-2025 DataDome bypass options
107
+ bypassCDPDetection: true,
108
+ spoofStorage: true,
109
+ spoofTiming: true,
110
+ enableDataDomeBypass: false, // Enable only when needed
111
+ // Humanization disabled by default for performance
112
+ humanization: {
113
+ mouse: false,
114
+ keyboard: false,
115
+ scroll: false,
116
+ },
117
+ viewport: {
118
+ width: 1920,
119
+ height: 1080,
120
+ deviceScaleFactor: 1,
121
+ mobile: false,
122
+ },
123
+ };
124
+ }
125
+ /**
126
+ * Get settings specifically optimized for DataDome-protected sites.
127
+ * Enables all humanization features for maximum anti-bot evasion.
128
+ */
129
+ static getDataDomeSettings() {
130
+ return {
131
+ ...this.getApifyRecommendedSettings(),
132
+ debug: true, // Enable debug logging by default
133
+ // DataDome-specific optimizations (use both for compatibility)
134
+ enableDataDomeBypass: true,
135
+ bypassDatadome: true, // New alias - enables early injection
136
+ bypassCDPDetection: true,
137
+ spoofStorage: true,
138
+ spoofTiming: true,
139
+ // Enable all humanization for DataDome bypass
140
+ humanization: {
141
+ mouse: true,
142
+ keyboard: true,
143
+ scroll: true,
144
+ },
145
+ // Ensure all fingerprint attributes are consistent
146
+ spoofWebGL: true,
147
+ spoofAudioContext: true,
148
+ spoofClientRects: true,
149
+ spoofFonts: true,
150
+ spoofPerformance: true,
151
+ spoofLocale: true,
152
+ };
153
+ }
154
+ static async injectFingerprint(page, fingerprint, options) {
155
+ const handler = new CdpFingerprintInjector(page);
156
+ return handler.attachToPage(fingerprint, options);
157
+ }
158
+ async setViewport(viewport, fingerprint) {
159
+ // IMPORTANT: In headful mode, don't override viewport - it creates weird compressed layouts
160
+ // The browser window already has natural dimensions from the OS
161
+ // Only override viewport in headless mode where window size needs to be set
162
+ // Check if we're in headless mode
163
+ // In headful mode, we skip viewport override to avoid layout issues
164
+ const isHeadless = process.env.APIFY_HEADLESS === '1' ||
165
+ process.env.CRAWLEE_HEADLESS === '1' ||
166
+ process.env.HEADLESS === 'true';
167
+ if (!isHeadless) {
168
+ log.info('⚠️ Headful mode detected - SKIPPING viewport override to preserve natural window behavior');
169
+ log.info('✅ Browser will use OS window dimensions - scrolling will work naturally');
170
+ return; // Skip viewport override in headful mode
171
+ }
172
+ // Only apply viewport override in headless mode
173
+ log.info('Headless mode detected - applying viewport override');
174
+ let defaultViewport = {
175
+ width: 1920,
176
+ height: 1080,
177
+ deviceScaleFactor: 1,
178
+ mobile: false,
179
+ };
180
+ // Extract from fingerprint if available
181
+ if (fingerprint?.screen) {
182
+ // IMPORTANT: Set viewport height SMALLER than screen height to allow scrolling
183
+ // Reserve 150px for browser chrome, URL bar, and overflow space
184
+ const screenHeight = fingerprint.screen.height || 1080;
185
+ const viewportHeight = screenHeight - 150;
186
+ defaultViewport = {
187
+ width: fingerprint.screen.width || 1920,
188
+ height: viewportHeight,
189
+ deviceScaleFactor: fingerprint.screen.devicePixelRatio || 1,
190
+ mobile: false,
191
+ };
192
+ log.info('Viewport configured for scrolling', {
193
+ screenHeight,
194
+ viewportHeight,
195
+ reservedSpace: 150,
196
+ width: defaultViewport.width,
197
+ deviceScaleFactor: defaultViewport.deviceScaleFactor,
198
+ });
199
+ }
200
+ const finalViewport = Object.assign(defaultViewport, viewport);
201
+ log.info('Final viewport settings (headless mode)', finalViewport);
202
+ // CDP call to override device metrics (headless mode only)
203
+ await this.page.client.Emulation.setDeviceMetricsOverride(finalViewport);
204
+ log.info('setDeviceMetricsOverride completed (headless mode)');
205
+ }
206
+ async setExtraHTTPHeaders(headers) {
207
+ await this.page.client.Network.setExtraHTTPHeaders({ headers });
208
+ }
209
+ async getTimezoneFromIp(proxyUrl) {
210
+ try {
211
+ const response = await gotScraping({
212
+ url: 'https://ipinfo.io/json',
213
+ proxyUrl,
214
+ responseType: 'json',
215
+ });
216
+ return response.body.timezone;
217
+ }
218
+ catch (error) {
219
+ log.error('Failed to get timezone from IP:', { error });
220
+ return 'UTC';
221
+ }
222
+ }
223
+ async setTimezoneOverride(timezone) {
224
+ await this.page.client.Emulation.setTimezoneOverride({
225
+ timezoneId: timezone,
226
+ });
227
+ }
228
+ async injectStealthProtections() {
229
+ const stealthScript = createStealthScript();
230
+ await this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: stealthScript });
231
+ }
232
+ /**
233
+ * Create a debug script that logs fingerprint override status to the console
234
+ */
235
+ createDebugScript(options) {
236
+ return `
237
+ (() => {
238
+ // CDP Fingerprint Override Debug Logs
239
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
240
+
241
+ console.log(DEBUG_PREFIX, '=== Fingerprint Override Status ===');
242
+ console.log(DEBUG_PREFIX, 'Timestamp:', new Date().toISOString());
243
+
244
+ // Check navigator properties
245
+ console.log(DEBUG_PREFIX, 'Navigator Checks:');
246
+ console.log(DEBUG_PREFIX, ' - platform:', navigator.platform);
247
+ console.log(DEBUG_PREFIX, ' - userAgent:', navigator.userAgent.substring(0, 80) + '...');
248
+ console.log(DEBUG_PREFIX, ' - webdriver:', navigator.webdriver);
249
+ console.log(DEBUG_PREFIX, ' - hardwareConcurrency:', navigator.hardwareConcurrency);
250
+ console.log(DEBUG_PREFIX, ' - deviceMemory:', navigator.deviceMemory);
251
+ console.log(DEBUG_PREFIX, ' - language:', navigator.language);
252
+ console.log(DEBUG_PREFIX, ' - languages:', navigator.languages);
253
+ console.log(DEBUG_PREFIX, ' - maxTouchPoints:', navigator.maxTouchPoints);
254
+ console.log(DEBUG_PREFIX, ' - pdfViewerEnabled:', navigator.pdfViewerEnabled);
255
+ console.log(DEBUG_PREFIX, ' - plugins.length:', navigator.plugins?.length);
256
+
257
+ // Check screen properties
258
+ console.log(DEBUG_PREFIX, 'Screen Checks:');
259
+ console.log(DEBUG_PREFIX, ' - colorDepth:', screen.colorDepth);
260
+ console.log(DEBUG_PREFIX, ' - pixelDepth:', screen.pixelDepth);
261
+ console.log(DEBUG_PREFIX, ' - availWidth:', screen.availWidth);
262
+ console.log(DEBUG_PREFIX, ' - availHeight:', screen.availHeight);
263
+ console.log(DEBUG_PREFIX, ' - devicePixelRatio:', window.devicePixelRatio);
264
+
265
+ // Check window properties
266
+ console.log(DEBUG_PREFIX, 'Window Checks:');
267
+ console.log(DEBUG_PREFIX, ' - outerWidth:', window.outerWidth);
268
+ console.log(DEBUG_PREFIX, ' - outerHeight:', window.outerHeight);
269
+ console.log(DEBUG_PREFIX, ' - screenX:', window.screenX);
270
+ console.log(DEBUG_PREFIX, ' - screenY:', window.screenY);
271
+
272
+ // Check chrome object
273
+ console.log(DEBUG_PREFIX, 'Chrome Object:');
274
+ console.log(DEBUG_PREFIX, ' - chrome exists:', typeof window.chrome !== 'undefined');
275
+ console.log(DEBUG_PREFIX, ' - chrome.runtime exists:', typeof window.chrome?.runtime !== 'undefined');
276
+
277
+ // Check WebGL
278
+ try {
279
+ const canvas = document.createElement('canvas');
280
+ const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
281
+ if (gl) {
282
+ const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
283
+ if (debugInfo) {
284
+ console.log(DEBUG_PREFIX, 'WebGL Checks:');
285
+ console.log(DEBUG_PREFIX, ' - vendor:', gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL));
286
+ console.log(DEBUG_PREFIX, ' - renderer:', gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL));
287
+ } else {
288
+ console.log(DEBUG_PREFIX, 'WebGL debug extension not available');
289
+ }
290
+ } else {
291
+ console.log(DEBUG_PREFIX, 'WebGL context not available');
292
+ }
293
+ } catch (e) {
294
+ console.log(DEBUG_PREFIX, 'WebGL check failed:', e.message);
295
+ }
296
+
297
+ // Check automation markers
298
+ console.log(DEBUG_PREFIX, 'Automation Marker Checks:');
299
+ console.log(DEBUG_PREFIX, ' - $cdc_ properties:', Object.keys(window).filter(k => k.startsWith('$cdc_') || k.startsWith('cdc_')).length === 0 ? 'CLEAN' : 'DETECTED');
300
+ console.log(DEBUG_PREFIX, ' - webdriver properties:', Object.keys(window).filter(k => k.toLowerCase().includes('webdriver')).length === 0 ? 'CLEAN' : 'DETECTED');
301
+
302
+ // Check permissions API
303
+ if (navigator.permissions) {
304
+ navigator.permissions.query({ name: 'notifications' }).then(result => {
305
+ console.log(DEBUG_PREFIX, 'Permissions:');
306
+ console.log(DEBUG_PREFIX, ' - notifications:', result.state);
307
+ }).catch(e => {
308
+ console.log(DEBUG_PREFIX, 'Permissions check failed:', e.message);
309
+ });
310
+ }
311
+
312
+ // Check storage estimate
313
+ if (navigator.storage && navigator.storage.estimate) {
314
+ navigator.storage.estimate().then(estimate => {
315
+ console.log(DEBUG_PREFIX, 'Storage:');
316
+ console.log(DEBUG_PREFIX, ' - quota:', Math.round(estimate.quota / 1024 / 1024 / 1024) + ' GB');
317
+ console.log(DEBUG_PREFIX, ' - usage:', Math.round(estimate.usage / 1024) + ' KB');
318
+ }).catch(e => {
319
+ console.log(DEBUG_PREFIX, 'Storage check failed:', e.message);
320
+ });
321
+ }
322
+
323
+ // Log applied options
324
+ console.log(DEBUG_PREFIX, 'Applied Options:');
325
+ console.log(DEBUG_PREFIX, ' - platform:', '${options.platform || "auto"}');
326
+ console.log(DEBUG_PREFIX, ' - enableAdvancedStealth:', ${options.enableAdvancedStealth !== false});
327
+ console.log(DEBUG_PREFIX, ' - bypassCDPDetection:', ${options.bypassCDPDetection !== false});
328
+ console.log(DEBUG_PREFIX, ' - spoofStorage:', ${options.spoofStorage !== false});
329
+ console.log(DEBUG_PREFIX, ' - spoofTiming:', ${options.spoofTiming !== false});
330
+ console.log(DEBUG_PREFIX, ' - enableDataDomeBypass:', ${options.enableDataDomeBypass || false});
331
+ console.log(DEBUG_PREFIX, ' - humanization.mouse:', ${options.humanization?.mouse || false});
332
+ console.log(DEBUG_PREFIX, ' - humanization.keyboard:', ${options.humanization?.keyboard || false});
333
+ console.log(DEBUG_PREFIX, ' - humanization.scroll:', ${options.humanization?.scroll || false});
334
+
335
+ console.log(DEBUG_PREFIX, '=== End Fingerprint Override Status ===');
336
+ })();
337
+ `;
338
+ }
339
+ /**
340
+ * Extract relevant data from fingerprint for overrides
341
+ */
342
+ extractFingerprintData(fingerprint) {
343
+ const webglConfig = {};
344
+ const platformConfig = {};
345
+ let uaClientHints;
346
+ // Extract WebGL data from videoCard if available
347
+ if (fingerprint.videoCard) {
348
+ webglConfig.vendor = fingerprint.videoCard.vendor;
349
+ webglConfig.renderer = fingerprint.videoCard.renderer;
350
+ webglConfig.vendorUnmasked = fingerprint.videoCard.vendor;
351
+ webglConfig.rendererUnmasked = fingerprint.videoCard.renderer;
352
+ }
353
+ // Extract platform data if available
354
+ if (fingerprint.navigator) {
355
+ platformConfig.platform = fingerprint.navigator.platform;
356
+ platformConfig.vendor = fingerprint.navigator.vendor;
357
+ platformConfig.vendorSub = fingerprint.navigator.vendorSub;
358
+ platformConfig.productSub = fingerprint.navigator.productSub;
359
+ platformConfig.hardwareConcurrency = fingerprint.navigator.hardwareConcurrency;
360
+ platformConfig.maxTouchPoints = fingerprint.navigator.maxTouchPoints;
361
+ platformConfig.language = fingerprint.navigator.language;
362
+ platformConfig.languages = fingerprint.navigator.languages;
363
+ platformConfig.oscpu = fingerprint.navigator.oscpu;
364
+ platformConfig.userAgent = fingerprint.navigator.userAgent;
365
+ platformConfig.appVersion = fingerprint.navigator.appVersion;
366
+ platformConfig.appName = fingerprint.navigator.appName;
367
+ platformConfig.appCodeName = fingerprint.navigator.appCodeName;
368
+ platformConfig.product = fingerprint.navigator.product;
369
+ // Extract UA-CH data from generated fingerprint
370
+ // This ensures navigator.userAgentData brands/versions match the UA string
371
+ if (fingerprint.navigator.userAgentData) {
372
+ const uad = fingerprint.navigator.userAgentData;
373
+ uaClientHints = {
374
+ brands: uad.brands,
375
+ fullVersionList: uad.fullVersionList,
376
+ mobile: uad.mobile,
377
+ platform: uad.platform,
378
+ architecture: uad.architecture,
379
+ bitness: uad.bitness,
380
+ model: uad.model,
381
+ platformVersion: uad.platformVersion,
382
+ uaFullVersion: uad.uaFullVersion,
383
+ wow64: uad.wow64,
384
+ };
385
+ }
386
+ }
387
+ if (fingerprint.screen) {
388
+ platformConfig.devicePixelRatio = fingerprint.screen.devicePixelRatio;
389
+ platformConfig.screenDepth = fingerprint.screen.pixelDepth;
390
+ platformConfig.colorDepth = fingerprint.screen.colorDepth;
391
+ }
392
+ return { webglConfig, platformConfig, uaClientHints };
393
+ }
394
+ async attachToPage(browserFingerprintWithHeaders, options) {
395
+ const { fingerprint, headers } = browserFingerprintWithHeaders;
396
+ const shouldFetchTimezone = options?.timezone || options?.detectTimezone;
397
+ const timezone = shouldFetchTimezone
398
+ ? await this.getTimezoneFromIp(options?.proxyUrl)
399
+ : undefined;
400
+ if (timezone) {
401
+ await this.setTimezoneOverride(timezone);
402
+ }
403
+ // NOTE: Page.enable() is required for addScriptToEvaluateOnNewDocument to work
404
+ // We enable it lazily just before script injection to minimize detection surface
405
+ await this.page.ensurePageEnabled();
406
+ // Filter headers to only include those that can be injected via CDP
407
+ const filteredHeaders = {};
408
+ const allowedHeaders = ['accept', 'accept-encoding', 'accept-language', 'user-agent', 'referer', 'sec-ch-ua', 'sec-ch-ua-mobile', 'sec-ch-ua-platform'];
409
+ for (const [key, value] of Object.entries(headers)) {
410
+ if (allowedHeaders.includes(key.toLowerCase()) && typeof value === 'string') {
411
+ filteredHeaders[key] = value;
412
+ }
413
+ }
414
+ // Create custom fingerprint injection scripts
415
+ log.info('Creating custom fingerprint injection scripts');
416
+ const customFingerprintScripts = createCustomFingerprintInjection(fingerprint, {
417
+ debug: options?.debug !== false,
418
+ throwOnError: true,
419
+ });
420
+ // Prepare all scripts to inject - stealth utils and runtime bypass MUST be first
421
+ // These scripts set up protections BEFORE page JavaScript runs
422
+ // Check if DataDome bypass is enabled (via either option name)
423
+ const isDataDomeBypassEnabled = options?.enableDataDomeBypass || options?.bypassDatadome;
424
+ const scriptsToInject = [
425
+ createStealthUtilsScript(), // Must be first - provides guards and toString spoofing
426
+ createPrototypeIntegrityScript(), // Second - provides native-like property descriptor masking
427
+ createRuntimeEnableBypassScript(), // Third - protects against CDP detection via Error stack analysis
428
+ ];
429
+ // CRITICAL: DataDome bypass must be injected early for stack trace sanitization
430
+ // and performance.memory spoofing to work before other scripts run
431
+ if (isDataDomeBypassEnabled) {
432
+ scriptsToInject.push(createDataDomeBypassScript());
433
+ log.info('DataDome bypass enabled - injected early in script chain');
434
+ }
435
+ // Add custom fingerprint scripts
436
+ scriptsToInject.push(...customFingerprintScripts);
437
+ // Always inject base stealth protections
438
+ await this.injectStealthProtections();
439
+ // Extract fingerprint data if we should use it
440
+ // When useFingerprintDefaults is true (or undefined), use hardcoded defaults
441
+ // When useFingerprintDefaults is false, use the generated fingerprint data
442
+ const shouldUseFingerprintData = options?.useFingerprintDefaults === false;
443
+ const { webglConfig, platformConfig, uaClientHints } = shouldUseFingerprintData
444
+ ? this.extractFingerprintData(fingerprint)
445
+ : { webglConfig: undefined, platformConfig: undefined, uaClientHints: undefined };
446
+ // Add advanced features based on options
447
+ if (options?.enableAdvancedStealth !== false) {
448
+ // UA Client Hints spoofing - pass generated data when available
449
+ // to ensure brands/versions match the generated userAgent string
450
+ scriptsToInject.push(createUAClientHintsSpoofingScript(options?.platform, shouldUseFingerprintData ? uaClientHints : undefined));
451
+ // WebGL spoofing
452
+ if (options?.spoofWebGL !== false) {
453
+ scriptsToInject.push(createWebGLSpoofingScript(shouldUseFingerprintData ? webglConfig : undefined));
454
+ }
455
+ // Audio fingerprint spoofing
456
+ if (options?.spoofAudioContext !== false) {
457
+ scriptsToInject.push(createAudioFingerprintSpoofingScript());
458
+ }
459
+ // Canvas protection
460
+ scriptsToInject.push(createAdvancedCanvasProtectionScript());
461
+ // Client rect spoofing
462
+ if (options?.spoofClientRects !== false) {
463
+ scriptsToInject.push(createClientRectSpoofingScript());
464
+ }
465
+ // Coalesced events spoofing (makes CDP mouse events look real)
466
+ scriptsToInject.push(createCoalescedEventsSpoofingScript());
467
+ // WebRTC spoofing
468
+ scriptsToInject.push(createWebRTCSpoofingScript());
469
+ // WebGPU spoofing (more aggressive when experimental fingerprints enabled)
470
+ scriptsToInject.push(createWebGPUSpoofingScript(options?.useExperimentalFingerprints));
471
+ // Font spoofing (2025)
472
+ if (options?.spoofFonts !== false) {
473
+ scriptsToInject.push(createFontSpoofingScript());
474
+ }
475
+ // Performance spoofing (2025)
476
+ if (options?.spoofPerformance !== false) {
477
+ scriptsToInject.push(createPerformanceSpoofingScript());
478
+ }
479
+ // Locale spoofing (2025)
480
+ if (options?.spoofLocale !== false) {
481
+ scriptsToInject.push(createLocaleSpoofingScript());
482
+ }
483
+ // 2024-2025 New protections
484
+ // CDP Detection Bypass
485
+ if (options?.bypassCDPDetection !== false) {
486
+ scriptsToInject.push(createCDPDetectionBypassScript());
487
+ }
488
+ // Storage consistency
489
+ if (options?.spoofStorage !== false) {
490
+ scriptsToInject.push(createStorageConsistencyScript());
491
+ }
492
+ // Timing consistency
493
+ if (options?.spoofTiming !== false) {
494
+ scriptsToInject.push(createTimingConsistencyScript());
495
+ }
496
+ // DataDome-specific bypass - already injected early if enabled
497
+ // (see isDataDomeBypassEnabled check at the beginning of scriptsToInject)
498
+ // Keyboard humanization (browser context) - disabled by default
499
+ if (options?.humanization?.keyboard) {
500
+ scriptsToInject.push(createKeyboardHumanizationScript());
501
+ }
502
+ // Scroll humanization (browser context) - disabled by default
503
+ if (options?.humanization?.scroll) {
504
+ scriptsToInject.push(createScrollHumanizationScript());
505
+ }
506
+ }
507
+ // Apply platform consistency script
508
+ if (options?.platform) {
509
+ scriptsToInject.push(createPlatformConsistencyScript(options.platform, shouldUseFingerprintData ? platformConfig : undefined));
510
+ }
511
+ // CRITICAL: Clean scripts to remove CDP detection patterns
512
+ const isDebug = options?.debug === true;
513
+ const cleanScript = (script) => {
514
+ let cleaned = script
515
+ // Remove sourceURL patterns that reveal CDP injection
516
+ .replace(/\/\/# sourceURL=[^\n]*/g, '')
517
+ .replace(/\/\/@ sourceURL=[^\n]*/g, '')
518
+ // Remove sourceMappingURL patterns
519
+ .replace(/\/\/# sourceMappingURL=[^\n]*/g, '')
520
+ // Remove puppeteer/playwright markers
521
+ .replace(/__puppeteer_evaluation_script__/g, 'anonymous')
522
+ .replace(/__playwright_evaluation_script__/g, 'anonymous')
523
+ // Remove CDP-specific comments
524
+ .replace(/\/\*\s*__CDP_[A-Z_]+__\s*\*\//g, '');
525
+ // CRITICAL: Strip ALL console output from injected scripts in production.
526
+ // Anti-bot services hook console.log and detect debug prefixes like
527
+ // [CDP-FP-DEBUG], [DD-BYPASS], [RUNTIME-ENABLE-BYPASS], etc.
528
+ if (!isDebug) {
529
+ cleaned = cleaned
530
+ .replace(/^\s*console\.(log|warn|info|debug)\s*\([^;]*\);?\s*$/gm, '')
531
+ .replace(/^\s*const\s+(DEBUG_PREFIX|ERROR_PREFIX)\s*=\s*[^;]*;\s*$/gm, '');
532
+ }
533
+ return cleaned;
534
+ };
535
+ // Add debug scripts into the bundle only when explicitly enabled
536
+ if (isDebug) {
537
+ scriptsToInject.push(this.createDebugScript(options || {}));
538
+ }
539
+ // BUNDLE ALL SCRIPTS INTO ONE to minimize CDP interactions
540
+ log.info(`Bundling ${scriptsToInject.length} fingerprint scripts into single injection`);
541
+ // Preamble: create shared stealth store accessible by all module IIFEs via closure
542
+ const preamble = `var __stealth = { debug: ${isDebug} };`;
543
+ const bundledScript = preamble + '\n\n' + scriptsToInject
544
+ .map(script => cleanScript(script))
545
+ .join('\n\n');
546
+ // Validate bundled script for syntax errors
547
+ try {
548
+ new Function(bundledScript);
549
+ log.info('✓ Bundled script passed syntax validation');
550
+ }
551
+ catch (error) {
552
+ log.error('✗ Bundled script has syntax error:', { error });
553
+ // Fall back to individual script validation to find the culprit
554
+ scriptsToInject.forEach((script, index) => {
555
+ try {
556
+ new Function(script);
557
+ }
558
+ catch (e) {
559
+ const scriptPreview = script.substring(0, 300);
560
+ log.error(`✗ Error in script ${index + 1}:`, { error: e, scriptPreview });
561
+ }
562
+ });
563
+ throw new Error(`Bundled script has syntax error: ${error}`);
564
+ }
565
+ // Inject SINGLE bundled script - reduces CDP detection surface
566
+ try {
567
+ log.info('Injecting single bundled fingerprint script (minimizes CDP detection)');
568
+ await Promise.all([
569
+ this.setViewport(options?.viewport, fingerprint),
570
+ this.setExtraHTTPHeaders(filteredHeaders),
571
+ // Single script injection instead of many - reduces CDP detection surface
572
+ (async () => {
573
+ try {
574
+ await this.page.client.Page.addScriptToEvaluateOnNewDocument({
575
+ source: bundledScript,
576
+ });
577
+ log.info('✓ Bundled script injected successfully');
578
+ }
579
+ catch (error) {
580
+ const scriptPreview = bundledScript.substring(0, 200).split('\n')[0];
581
+ log.error('✗ Failed to inject bundled script:', {
582
+ error,
583
+ scriptPreview,
584
+ });
585
+ throw error; // Rethrow to fail the entire injection
586
+ }
587
+ })(),
588
+ ]);
589
+ log.info('✓ Fingerprint injection complete (single bundled script)');
590
+ }
591
+ catch (error) {
592
+ log.error('✗ Failed to inject fingerprint scripts:', { error });
593
+ throw error; // Rethrow to make injection failures visible
594
+ }
595
+ // Setup mouse movement humanization if requested (disabled by default)
596
+ // Support both legacy humanizeInteractions and new humanization.mouse
597
+ const enableMouseHumanization = options?.humanization?.mouse || options?.humanizeInteractions;
598
+ if (enableMouseHumanization) {
599
+ await setupMouseMovementHumanization(this.page.client);
600
+ }
601
+ // NOTE: setupRuntimeEnableBypass REMOVED - it uses Runtime.evaluate which is itself a detection vector!
602
+ // The bypass script is now included in the bundled stealth scripts injected via addScriptToEvaluateOnNewDocument
603
+ // This runs BEFORE page JavaScript, avoiding Runtime domain activation
604
+ // 2024-2025: CDP-level keyboard humanization (disabled by default)
605
+ if (options?.humanization?.keyboard) {
606
+ await setupKeyboardHumanization(this.page.client);
607
+ }
608
+ // 2024-2025: CDP-level scroll humanization (disabled by default)
609
+ if (options?.humanization?.scroll) {
610
+ await setupScrollHumanization(this.page.client);
611
+ }
612
+ // Debug and viewport debug scripts are now bundled into the main injection above
613
+ log.info('Enhanced fingerprint attached with settings:', {
614
+ proxy: options?.proxyUrl,
615
+ timezone,
616
+ advancedStealth: options?.enableAdvancedStealth !== false,
617
+ bypassRuntimeEnable: options?.bypassRuntimeEnable,
618
+ platform: options?.platform,
619
+ useFingerprintDefaults: options?.useFingerprintDefaults,
620
+ bypassCDPDetection: options?.bypassCDPDetection !== false,
621
+ spoofStorage: options?.spoofStorage !== false,
622
+ spoofTiming: options?.spoofTiming !== false,
623
+ enableDataDomeBypass: options?.enableDataDomeBypass,
624
+ humanization: {
625
+ mouse: enableMouseHumanization || false,
626
+ keyboard: options?.humanization?.keyboard || false,
627
+ scroll: options?.humanization?.scroll || false,
628
+ },
629
+ });
630
+ }
631
+ }
632
+ //# sourceMappingURL=fingerprint-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Audio Fingerprint Spoofing
3
+ * Adds controlled noise to audio processing to prevent fingerprinting
4
+ */
5
+ export declare const createAudioFingerprintSpoofingScript: () => string;
6
+ //# sourceMappingURL=audio-spoofing.d.ts.map