jumpy-lion 0.1.6-beta.7 → 1.0.0-beta.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 (232) hide show
  1. package/README.md +1 -607
  2. package/browser/fonts/macos-bundle/40-macos-aliases.conf +515 -0
  3. package/browser/fonts/macos-bundle/README.md +24 -0
  4. package/browser/fonts/macos-bundle/install.sh +83 -0
  5. package/dist/browser-controller.d.ts +47 -4
  6. package/dist/browser-controller.d.ts.map +1 -1
  7. package/dist/browser-controller.js +219 -278
  8. package/dist/browser-controller.js.map +1 -1
  9. package/dist/browser-plugin.d.ts +82 -110
  10. package/dist/browser-plugin.d.ts.map +1 -1
  11. package/dist/browser-plugin.js +376 -379
  12. package/dist/browser-plugin.js.map +1 -1
  13. package/dist/browser-process/align-fingerprint-config.d.ts +36 -0
  14. package/dist/browser-process/align-fingerprint-config.d.ts.map +1 -0
  15. package/dist/browser-process/align-fingerprint-config.js +74 -0
  16. package/dist/browser-process/align-fingerprint-config.js.map +1 -0
  17. package/dist/browser-process/anti-detect-browser.d.ts +2 -2
  18. package/dist/browser-process/anti-detect-browser.js +7 -7
  19. package/dist/browser-process/anti-detect-config.d.ts +131 -2
  20. package/dist/browser-process/anti-detect-config.d.ts.map +1 -1
  21. package/dist/browser-process/anti-detect-config.js +337 -127
  22. package/dist/browser-process/anti-detect-config.js.map +1 -1
  23. package/dist/browser-process/browser.d.ts +25 -92
  24. package/dist/browser-process/browser.d.ts.map +1 -1
  25. package/dist/browser-process/browser.js +429 -73
  26. package/dist/browser-process/browser.js.map +1 -1
  27. package/dist/browser-process/fingerprint-config.d.ts +146 -0
  28. package/dist/browser-process/fingerprint-config.d.ts.map +1 -0
  29. package/dist/browser-process/fingerprint-config.js +308 -0
  30. package/dist/browser-process/fingerprint-config.js.map +1 -0
  31. package/dist/browser-process/get-chrome-executable.d.ts +6 -0
  32. package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
  33. package/dist/browser-process/get-chrome-executable.js +79 -4
  34. package/dist/browser-process/get-chrome-executable.js.map +1 -1
  35. package/dist/browser-process/gpu-family-profiles.d.ts +58 -0
  36. package/dist/browser-process/gpu-family-profiles.d.ts.map +1 -0
  37. package/dist/browser-process/gpu-family-profiles.js +480 -0
  38. package/dist/browser-process/gpu-family-profiles.js.map +1 -0
  39. package/dist/browser-process/launch-options.d.ts +301 -0
  40. package/dist/browser-process/launch-options.d.ts.map +1 -0
  41. package/dist/browser-process/launch-options.js +2 -0
  42. package/dist/browser-process/launch-options.js.map +1 -0
  43. package/dist/browser-process/port-allocator.d.ts +64 -0
  44. package/dist/browser-process/port-allocator.d.ts.map +1 -0
  45. package/dist/browser-process/port-allocator.js +198 -0
  46. package/dist/browser-process/port-allocator.js.map +1 -0
  47. package/dist/browser-process/process.d.ts +85 -0
  48. package/dist/browser-process/process.d.ts.map +1 -1
  49. package/dist/browser-process/process.js +235 -19
  50. package/dist/browser-process/process.js.map +1 -1
  51. package/dist/browser-process/signal-cleanup.d.ts +40 -0
  52. package/dist/browser-process/signal-cleanup.d.ts.map +1 -0
  53. package/dist/browser-process/signal-cleanup.js +105 -0
  54. package/dist/browser-process/signal-cleanup.js.map +1 -0
  55. package/dist/browser-process/widevine-cdm.d.ts +144 -0
  56. package/dist/browser-process/widevine-cdm.d.ts.map +1 -0
  57. package/dist/browser-process/widevine-cdm.js +298 -0
  58. package/dist/browser-process/widevine-cdm.js.map +1 -0
  59. package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -1
  60. package/dist/browser-profiles/chrome/populate-profile.js +21 -22
  61. package/dist/browser-profiles/chrome/populate-profile.js.map +1 -1
  62. package/dist/connection/cdp-reconnection.d.ts +50 -0
  63. package/dist/connection/cdp-reconnection.d.ts.map +1 -0
  64. package/dist/connection/cdp-reconnection.js +75 -0
  65. package/dist/connection/cdp-reconnection.js.map +1 -0
  66. package/dist/connection/page-session.d.ts +114 -0
  67. package/dist/connection/page-session.d.ts.map +1 -0
  68. package/dist/connection/page-session.js +237 -0
  69. package/dist/connection/page-session.js.map +1 -0
  70. package/dist/connection/session-client.d.ts +34 -0
  71. package/dist/connection/session-client.d.ts.map +1 -0
  72. package/dist/connection/session-client.js +129 -0
  73. package/dist/connection/session-client.js.map +1 -0
  74. package/dist/crawler.d.ts +9 -88
  75. package/dist/crawler.d.ts.map +1 -1
  76. package/dist/crawler.js +157 -8
  77. package/dist/crawler.js.map +1 -1
  78. package/dist/fingerprinting/fingerprint-injector.d.ts +24 -114
  79. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  80. package/dist/fingerprinting/fingerprint-injector.js +305 -611
  81. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  82. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +1 -1
  83. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
  84. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +16 -14
  85. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
  86. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +6 -2
  87. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  88. package/dist/fingerprinting/fingerprint-overrides/index.js +6 -2
  89. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  90. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +1 -1
  91. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +4 -4
  92. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -1
  93. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +4 -4
  94. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts +18 -0
  95. package/dist/fingerprinting/fingerprint-overrides/navigator-override.d.ts.map +1 -0
  96. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js +136 -0
  97. package/dist/fingerprinting/fingerprint-overrides/navigator-override.js.map +1 -0
  98. package/dist/fingerprinting/fingerprint-overrides/override.d.ts +151 -0
  99. package/dist/fingerprinting/fingerprint-overrides/override.d.ts.map +1 -0
  100. package/dist/fingerprinting/fingerprint-overrides/override.js +14 -0
  101. package/dist/fingerprinting/fingerprint-overrides/override.js.map +1 -0
  102. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  103. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +46 -15
  104. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  105. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts +43 -0
  106. package/dist/fingerprinting/fingerprint-overrides/registry.d.ts.map +1 -0
  107. package/dist/fingerprinting/fingerprint-overrides/registry.js +342 -0
  108. package/dist/fingerprinting/fingerprint-overrides/registry.js.map +1 -0
  109. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts +16 -0
  110. package/dist/fingerprinting/fingerprint-overrides/screen-override.d.ts.map +1 -0
  111. package/dist/fingerprinting/fingerprint-overrides/screen-override.js +175 -0
  112. package/dist/fingerprinting/fingerprint-overrides/screen-override.js.map +1 -0
  113. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +1 -1
  114. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +4 -4
  115. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -1
  116. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  117. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +75 -9
  118. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  119. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +1 -1
  120. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
  121. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +34 -20
  122. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
  123. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  124. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +25 -6
  125. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  126. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +1 -1
  127. package/dist/fingerprinting/hardware-realism.d.ts +83 -0
  128. package/dist/fingerprinting/hardware-realism.d.ts.map +1 -0
  129. package/dist/fingerprinting/hardware-realism.js +156 -0
  130. package/dist/fingerprinting/hardware-realism.js.map +1 -0
  131. package/dist/fingerprinting/injection-planner.d.ts +133 -0
  132. package/dist/fingerprinting/injection-planner.d.ts.map +1 -0
  133. package/dist/fingerprinting/injection-planner.js +497 -0
  134. package/dist/fingerprinting/injection-planner.js.map +1 -0
  135. package/dist/fingerprinting/locale-resolver.d.ts +8 -1
  136. package/dist/fingerprinting/locale-resolver.d.ts.map +1 -1
  137. package/dist/fingerprinting/locale-resolver.js +26 -3
  138. package/dist/fingerprinting/locale-resolver.js.map +1 -1
  139. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +4 -4
  140. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -1
  141. package/dist/fingerprinting/non-apify-fingerprint-generator.js +24 -58
  142. package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -1
  143. package/dist/fingerprinting/non-apify-profiles.json +10515 -8494
  144. package/dist/fingerprinting/os-consistency.d.ts +28 -0
  145. package/dist/fingerprinting/os-consistency.d.ts.map +1 -0
  146. package/dist/fingerprinting/os-consistency.js +45 -0
  147. package/dist/fingerprinting/os-consistency.js.map +1 -0
  148. package/dist/fingerprinting/profile-quality.d.ts +25 -0
  149. package/dist/fingerprinting/profile-quality.d.ts.map +1 -0
  150. package/dist/fingerprinting/profile-quality.js +310 -0
  151. package/dist/fingerprinting/profile-quality.js.map +1 -0
  152. package/dist/fingerprinting/profile-selector.d.ts +102 -0
  153. package/dist/fingerprinting/profile-selector.d.ts.map +1 -0
  154. package/dist/fingerprinting/profile-selector.js +168 -0
  155. package/dist/fingerprinting/profile-selector.js.map +1 -0
  156. package/dist/fingerprinting/ua-alignment.d.ts +83 -0
  157. package/dist/fingerprinting/ua-alignment.d.ts.map +1 -0
  158. package/dist/fingerprinting/ua-alignment.js +197 -0
  159. package/dist/fingerprinting/ua-alignment.js.map +1 -0
  160. package/dist/fingerprinting/ua-ch-brands.d.ts +88 -0
  161. package/dist/fingerprinting/ua-ch-brands.d.ts.map +1 -0
  162. package/dist/fingerprinting/ua-ch-brands.js +174 -0
  163. package/dist/fingerprinting/ua-ch-brands.js.map +1 -0
  164. package/dist/index.d.ts +5 -0
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +6 -0
  167. package/dist/index.js.map +1 -1
  168. package/dist/input/dropdown-selector.d.ts +90 -0
  169. package/dist/input/dropdown-selector.d.ts.map +1 -0
  170. package/dist/input/dropdown-selector.js +394 -0
  171. package/dist/input/dropdown-selector.js.map +1 -0
  172. package/dist/input/element-target.d.ts +152 -0
  173. package/dist/input/element-target.d.ts.map +1 -0
  174. package/dist/input/element-target.js +461 -0
  175. package/dist/input/element-target.js.map +1 -0
  176. package/dist/input/input-emulator.d.ts +85 -0
  177. package/dist/input/input-emulator.d.ts.map +1 -0
  178. package/dist/input/input-emulator.js +325 -0
  179. package/dist/input/input-emulator.js.map +1 -0
  180. package/dist/input/input-transport.d.ts +60 -0
  181. package/dist/input/input-transport.d.ts.map +1 -0
  182. package/dist/input/input-transport.js +28 -0
  183. package/dist/input/input-transport.js.map +1 -0
  184. package/dist/input/recording-transport.d.ts +32 -0
  185. package/dist/input/recording-transport.d.ts.map +1 -0
  186. package/dist/input/recording-transport.js +43 -0
  187. package/dist/input/recording-transport.js.map +1 -0
  188. package/dist/keyboard-layout.d.ts +2 -2
  189. package/dist/keyboard-layout.js +2 -2
  190. package/dist/navigation/page-navigation.d.ts +67 -0
  191. package/dist/navigation/page-navigation.d.ts.map +1 -0
  192. package/dist/navigation/page-navigation.js +122 -0
  193. package/dist/navigation/page-navigation.js.map +1 -0
  194. package/dist/network/network-watch.d.ts +110 -0
  195. package/dist/network/network-watch.d.ts.map +1 -0
  196. package/dist/network/network-watch.js +223 -0
  197. package/dist/network/network-watch.js.map +1 -0
  198. package/dist/page.d.ts +118 -104
  199. package/dist/page.d.ts.map +1 -1
  200. package/dist/page.js +311 -1130
  201. package/dist/page.js.map +1 -1
  202. package/dist/session/inject-hook.d.ts +24 -0
  203. package/dist/session/inject-hook.d.ts.map +1 -0
  204. package/dist/session/inject-hook.js +80 -0
  205. package/dist/session/inject-hook.js.map +1 -0
  206. package/dist/session/save.d.ts +21 -0
  207. package/dist/session/save.d.ts.map +1 -0
  208. package/dist/session/save.js +163 -0
  209. package/dist/session/save.js.map +1 -0
  210. package/dist/session/tar-data-dir.d.ts +18 -0
  211. package/dist/session/tar-data-dir.d.ts.map +1 -0
  212. package/dist/session/tar-data-dir.js +105 -0
  213. package/dist/session/tar-data-dir.js.map +1 -0
  214. package/dist/session/types.d.ts +80 -0
  215. package/dist/session/types.d.ts.map +1 -0
  216. package/dist/session/types.js +29 -0
  217. package/dist/session/types.js.map +1 -0
  218. package/dist/session-profile.d.ts +102 -0
  219. package/dist/session-profile.d.ts.map +1 -0
  220. package/dist/session-profile.js +163 -0
  221. package/dist/session-profile.js.map +1 -0
  222. package/dist/tsconfig.build.tsbuildinfo +1 -1
  223. package/package.json +17 -6
  224. package/scripts/postinstall.cjs +58 -0
  225. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +0 -87
  226. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +0 -1
  227. package/dist/fingerprinting/custom-fingerprint-injector.js +0 -342
  228. package/dist/fingerprinting/custom-fingerprint-injector.js.map +0 -1
  229. package/dist/launcher-wrap.d.ts +0 -10
  230. package/dist/launcher-wrap.d.ts.map +0 -1
  231. package/dist/launcher-wrap.js +0 -11
  232. package/dist/launcher-wrap.js.map +0 -1
@@ -1,28 +1,53 @@
1
1
  /**
2
- * anti-detect-config.ts — Generate and manage FingerprintConfig JSON for the anti-detect browser
2
+ * anti-detect-config.ts - Generate and manage FingerprintConfig JSON for the anti-detect browser
3
3
  *
4
4
  * Called by browser.ts before launching the browser when useNativeStealth is enabled.
5
5
  * Translates the fingerprint-generator BrowserFingerprintWithHeaders output into
6
- * the --fingerprint-config JSON schema consumed by the C++ FingerprintConfig class.
6
+ * the --blink-platform-overrides-file JSON schema consumed by the C++ override singleton.
7
7
  */
8
+ import crypto from 'crypto';
8
9
  import fs from 'fs/promises';
9
10
  import os from 'os';
10
11
  import path from 'path';
11
- import crypto from 'crypto';
12
+ import { log } from 'crawlee';
13
+ import { deriveWebglFamilyProfile } from './gpu-family-profiles.js';
14
+ import { deriveRealisticDeviceMemory, deriveStorageQuota, normalizePlatformVersion, } from '../fingerprinting/hardware-realism.js';
15
+ import { alignBrandList } from '../fingerprinting/ua-ch-brands.js';
16
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
17
+ /**
18
+ * Pick deterministic, plausible navigator.connection values for a given session.
19
+ * Real residential broadband: rtt 25-150ms (Chrome rounds to 25ms steps),
20
+ * downlink 5-50 Mbps. Datacenters report rtt<5ms and downlink>500 Mbps which
21
+ * is an obvious bot signal. Same seed → same values, so a Mac harvest and a
22
+ * Linux-Docker-spoof harvest produce identical readouts.
23
+ */
24
+ function deriveNetwork(seed) {
25
+ // rtt in [50, 150] ms, in 25ms steps (so 50, 75, 100, 125, 150).
26
+ const rttSteps = [50, 75, 100, 125, 150];
27
+ const rttIdx = (seed >>> 16) % rttSteps.length;
28
+ const rtt = rttSteps[rttIdx];
29
+ // downlink in [5, 25] Mbps, rounded to one decimal - Chrome rounds to ~1.5
30
+ // significant figures. Use a stable hash of the seed so the choice is
31
+ // reproducible.
32
+ const downlinkBucket = (seed >>> 24) & 0xFF; // 0..255
33
+ const downlink = Math.round((5 + (downlinkBucket / 255) * 20) * 10) / 10;
34
+ return { rtt, downlink, effectiveType: '4g', saveData: false };
35
+ }
36
+ /**
37
+ * Pick AudioContext sampleRate matching the spoofed platform. Real Mac default
38
+ * is 44100 Hz (CoreAudio); real Linux/Windows is 48000 Hz (PulseAudio/WASAPI).
39
+ * Pinning here makes the JS-visible value match the OS we're claiming.
40
+ */
41
+ function deriveAudioSampleRate(platform) {
42
+ return platform.startsWith('Mac') ? 44100 : 48000;
43
+ }
12
44
  // ─── Generation ───────────────────────────────────────────────────────────────
13
45
  /**
14
- * Generate a FingerprintConfig JSON object from fingerprint-generator output.
15
- *
16
- * @param fingerprint - BrowserFingerprintWithHeaders from fingerprint-generator
17
- * @param sessionId - Session identifier used to derive the seed (proxy session ID, etc.)
18
- * @param resolvedLocale - Pre-resolved locale/languages/timezone triple. When provided,
19
- * these values win over anything derived from fingerprint-generator headers so that a
20
- * user-supplied `locale: 'ko-KR'` coherently propagates to every locale surface
21
- * (Accept-Language, navigator.language, Intl defaults, timezone).
46
+ * Derive the 53-bit session seed from the proxy session tag (or a per-process
47
+ * random source when none is supplied) and the UA. See `generateFingerprintConfig`
48
+ * for the determinism rationale.
22
49
  */
23
- export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale) {
24
- const fp = fingerprint.fingerprint;
25
- const headers = fingerprint.headers;
50
+ function deriveSeed(sessionId, userAgent) {
26
51
  // Seed derivation:
27
52
  // - With a sessionId (proxy session tag) → deterministic: same session ID
28
53
  // always yields the same seed so cookies/IP/canvas/audio stay coherent
@@ -31,20 +56,25 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
31
56
  // random. Without this, the fingerprint-generator macOS/Chrome pool
32
57
  // emits exactly one UA across many runs, so sessionId-less calls would
33
58
  // all produce the same seed and therefore the same canvas/audio noise
34
- // hash across every session — a cross-session correlation signal.
59
+ // hash across every session - a cross-session correlation signal.
35
60
  const seedSource = sessionId
36
- ? `${sessionId}|${fp.navigator?.userAgent ?? ''}`
37
- : `${crypto.randomBytes(16).toString('hex')}|${fp.navigator?.userAgent ?? ''}`;
61
+ ? `${sessionId}|${userAgent}`
62
+ : `${crypto.randomBytes(16).toString('hex')}|${userAgent}`;
38
63
  const seedHash = crypto.createHash('sha256').update(seedSource).digest();
39
64
  // Take first 8 bytes as a number (JavaScript number precision is sufficient for 53-bit ints)
40
- const seed = seedHash.readUInt32BE(0) * 0x100000000 + seedHash.readUInt32BE(4);
41
- // Navigator platform
65
+ return seedHash.readUInt32BE(0) * 0x100000000 + seedHash.readUInt32BE(4);
66
+ }
67
+ /**
68
+ * Build the navigator surface: legacy + UA-CH platform split, UA-CH brands,
69
+ * user agent, deviceMemory resampling, and storage-quota pinning. Pure.
70
+ */
71
+ function buildNavigatorSurface(fp, headers, seed, locale) {
42
72
  // navigator.platform (legacy) and navigator.userAgentData.platform (UA-CH)
43
73
  // are DIFFERENT APIs with DIFFERENT values:
44
74
  // navigator.platform → 'MacIntel' | 'Win32' | 'Linux x86_64'
45
75
  // navigator.userAgentData.platform → 'macOS' | 'Windows' | 'Linux'
46
76
  // Previously this code collapsed both to the UA-CH form, which made
47
- // navigator.platform report "macOS" in both the main frame and workers —
77
+ // navigator.platform report "macOS" in both the main frame and workers -
48
78
  // that is a Chrome invariant violation (real Chrome always returns
49
79
  // "MacIntel" from navigator.platform regardless of architecture).
50
80
  //
@@ -59,103 +89,305 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
59
89
  'Linux x86_64': 'Linux',
60
90
  };
61
91
  const uaChPlatform = legacyToUaCH[platform] ?? platform;
62
- // UA-CH brands from fingerprint
92
+ // User agent from headers (most accurate source)
93
+ const userAgent = headers['user-agent']
94
+ ?? fp.navigator?.userAgent
95
+ ?? '';
96
+ // UA-CH brands from fingerprint. Rebuilt rather than copied: Chromium
97
+ // derives the GREASE token, its fake version and the ORDER of the
98
+ // three-entry list from the major alone (see ua-ch-brands.ts). Pool
99
+ // profiles occasionally carry a GREASE token harvested from a different
100
+ // major, and `alignFingerprintConfigWithBinary` only runs when the binary
101
+ // version can be read - so the C++ FingerprintConfig has to be coherent at
102
+ // construction, or the binary faithfully emits a `sec-ch-ua` no Chromium
103
+ // ever sent (challenge-free HTTP 418 on Naver - issue #131).
63
104
  const uaData = fp.navigator?.userAgentData;
64
105
  const brands = uaData?.brands ?? [];
65
- const fullVersionList = uaData?.fullVersionList ?? brands;
66
- const uaBrands = brands.map((b, i) => ({
106
+ // Same rule on the native path: UA-CH carries the real build even though UA
107
+ // Reduction froze the UA string to MAJOR.0.0.0, so the UA is the LAST resort
108
+ // for this value. `alignFingerprintConfigWithBinary` normally replaces it
109
+ // with the binary's own build; when the version probe failed AND the profile
110
+ // has no build number, the config would emit "147.0.0.0" in
111
+ // sec-ch-ua-full-version(-list) - a shape no Chrome sends (issue #131).
112
+ const uaFullVersion = uaData?.uaFullVersion ?? extractFullVersion(userAgent);
113
+ if (/^\d+\.0\.0\.0$/.test(uaFullVersion)) {
114
+ log.warning('[AntiDetect] Profile has no UA-CH build version; falling back to the UA-reduced '
115
+ + 'MAJOR.0.0.0 shape. Origins that request high-entropy hints reject it - the binary '
116
+ + 'version probe must succeed for alignFingerprintConfigWithBinary to repair this.', { uaFullVersion });
117
+ }
118
+ const majorBrands = alignBrandList(brands, uaFullVersion.split('.')[0]);
119
+ const fullBrands = alignBrandList(brands, uaFullVersion);
120
+ const uaBrands = brands.length === 0 ? [] : majorBrands.map((b, i) => ({
67
121
  brand: b.brand,
68
122
  version: b.version,
69
- full_version: fullVersionList[i]?.version ?? b.version,
123
+ full_version: fullBrands[i]?.version ?? b.version,
70
124
  }));
125
+ const brandName = extractBrandName(uaBrands, userAgent);
126
+ // deviceMemory: the W3C 2018 spec defined {0.25, 0.5, 1, 2, 4, 8} buckets,
127
+ // but real Chrome 147 on desktop now returns the raw host RAM in GB
128
+ // (verified by harvest 2026-05-11: 32 GB Apple Silicon Mac reports
129
+ // `navigator.deviceMemory === 32`). Reporting the legacy spec-bucketed 8
130
+ // is now a population minority (<15% of real Mac traffic) and an
131
+ // instant detection vector. Sample from a realistic 2026 Mac RAM
132
+ // distribution (8/16/24/32/48/64/128 GB), keyed off the session seed
133
+ // so Mac-on-Mac and Mac-on-Linux runs of the same seed agree.
134
+ const rawDeviceMemory = fp.navigator?.deviceMemory ?? 8;
135
+ const deviceMemory = deriveRealisticDeviceMemory(seed, rawDeviceMemory);
136
+ // navigator.storage.estimate().quota - pinned per-session so the same profile
137
+ // reports the same quota on Mac and Linux (without this, real disk leaks
138
+ // through). Derived from seed+deviceMemory to land in a plausible Mac-SSD
139
+ // distribution: 8 GB RAM ↔ 256/512 GB SSD, 16 GB ↔ 512/1024 GB, 24/32 GB ↔
140
+ // 1024/2048 GB. Chrome's StorageManager normally reports ~60% of total disk
141
+ // space; we mirror that range with ±10% seed-driven jitter so different
142
+ // profiles get different (but plausible) values.
143
+ const storageQuota = deriveStorageQuota(seed, deviceMemory);
144
+ const navigator = {
145
+ platform, // legacy form: 'MacIntel' | 'Win32' | 'Linux x86_64'
146
+ ...(locale.language && { language: locale.language }),
147
+ ...(locale.languages && { languages: locale.languages }),
148
+ hardwareConcurrency: fp.navigator?.hardwareConcurrency ?? 8,
149
+ deviceMemory,
150
+ storageQuota,
151
+ userAgent,
152
+ ...(uaBrands.length > 0 && {
153
+ userAgentData: {
154
+ brands: uaBrands,
155
+ mobile: uaData?.mobile ?? false,
156
+ platform: uaData?.platform ?? uaChPlatform,
157
+ platformVersion: normalizePlatformVersion(platform, uaData?.platformVersion, seed),
158
+ architecture: uaData?.architecture ?? 'x86',
159
+ bitness: uaData?.bitness ?? '64',
160
+ model: uaData?.model ?? '',
161
+ uaFullVersion,
162
+ fullVersionList: uaBrands,
163
+ },
164
+ }),
165
+ };
166
+ return { navigator, brandName, uaChPlatform, platform };
167
+ }
168
+ /**
169
+ * Build the WebGL surface: vendor/renderer passthrough, family classification,
170
+ * texture-size cap matched to the renderer, and the per-family pname block. Pure.
171
+ */
172
+ function buildWebglSurface(fp) {
71
173
  // WebGL from fingerprint. Real Chrome 147 on Apple Silicon leaks the
72
174
  // exact chip variant verbatim ("ANGLE (Apple, ANGLE Metal Renderer:
73
175
  // Apple M4 Pro, Unspecified Version)"), confirmed against a user's
74
176
  // shipping Chrome + CreepJS verdict. Matching that behavior is safer than
75
- // sanitizing to a generic M1 — anti-bot ML models expect the raw string,
177
+ // sanitizing to a generic M1 - anti-bot ML models expect the raw string,
76
178
  // and the hardware leak is not a Chrome-level invariant violation.
77
179
  const videoCard = fp.videoCard;
78
180
  const webglVendor = videoCard?.vendor ?? 'Google Inc. (NVIDIA)';
79
181
  const webglRenderer = videoCard?.renderer
80
182
  ?? 'ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)';
81
- // Screen
183
+ // GL_MAX_TEXTURE_SIZE override. SwiftShader (--use-angle=swiftshader) returns
184
+ // 8192; real Apple Silicon (Metal), modern NVIDIA / AMD discrete GPUs, and
185
+ // most Intel iGPUs return 16384. Pair the spoofed renderer with its real
186
+ // texture-size cap; mismatch is an instant CreepJS catch.
187
+ //
188
+ // M1 - also classify the renderer into a GPU family (apple_metal,
189
+ // linux_mesa_*, windows_d3d_*) so we can populate the rest of the
190
+ // platform-divergent WebGL pnames (max_draw_buffers, aliased_*_range, ...)
191
+ // from the per-family PLATFORM_GPU_TABLE. The C++ binary ignores the new
192
+ // keys until M2 lands the parser additions; once it does, the JSON shape
193
+ // is already correct.
194
+ const rendererLower = webglRenderer.toLowerCase();
195
+ // Thread navigator.platform so an unclassifiable renderer (SwiftShader,
196
+ // exotic strings) on a known OS falls back to that OS's family params
197
+ // instead of Apple-Silicon defaults - keeps the param block OS-coherent.
198
+ const navPlatform = fp.navigator?.platform;
199
+ const { family: webglFamily, profile: webglFamilyProfile } = deriveWebglFamilyProfile(webglRenderer, navPlatform);
200
+ const webglMaxTextureSize = (() => {
201
+ if (/apple|metal|m[123]\b|intel.*iris.*xe|nvidia geforce rtx 40|nvidia geforce rtx 30|nvidia geforce rtx 20|amd radeon (rx [56789]|pro)/i.test(rendererLower)) {
202
+ return 16384;
203
+ }
204
+ if (/nvidia geforce (gtx 1[06]|rtx 50|rtx 60)|amd radeon rx 7|nvidia rtx (a|h)/i.test(rendererLower)) {
205
+ return 32768; // newest cards / workstation
206
+ }
207
+ if (/swiftshader|llvmpipe|mesa offscreen/i.test(rendererLower)) {
208
+ return 8192; // honest SwiftShader claim
209
+ }
210
+ return webglFamilyProfile.maxTextureSize; // family-table default
211
+ })();
212
+ const webgl = {
213
+ vendor: webglVendor,
214
+ renderer: webglRenderer,
215
+ maxTextureSize: webglMaxTextureSize,
216
+ maxViewportDim: webglFamilyProfile.maxViewportDim,
217
+ extensions: webglFamilyProfile.extensions,
218
+ ...(webglFamily && { familyHint: webglFamily }),
219
+ maxDrawBuffers: webglFamilyProfile.maxDrawBuffers,
220
+ maxSamples: webglFamilyProfile.maxSamples,
221
+ max3dTextureSize: webglFamilyProfile.max3dTextureSize,
222
+ maxArrayTextureLayers: webglFamilyProfile.maxArrayTextureLayers,
223
+ subpixelBits: webglFamilyProfile.subpixelBits,
224
+ maxTransformFeedbackInterleavedComponents: webglFamilyProfile.maxTransformFeedbackInterleavedComponents,
225
+ aliasedLineWidthRange: webglFamilyProfile.aliasedLineWidthRange,
226
+ aliasedPointSizeRange: webglFamilyProfile.aliasedPointSizeRange,
227
+ };
228
+ return { webgl, family: webglFamily, vendor: webglVendor };
229
+ }
230
+ /** Build the WebGPU surface from explicit fingerprint data or the WebGL vendor. Pure. */
231
+ function buildWebgpuSurface(fp, webglVendor) {
232
+ // WebGPU - from explicit webgpu field on fingerprint (non-Apify profiles), or
233
+ // derived from WebGL vendor as a fallback (Apify fingerprints have no webgpu data).
234
+ const webgpuData = fp.webgpu;
235
+ const derivedWebGPUVendor = webgpuData?.vendor ?? deriveWebGPUVendorFromWebGL(webglVendor);
236
+ if (!derivedWebGPUVendor)
237
+ return undefined;
238
+ return {
239
+ vendor: derivedWebGPUVendor,
240
+ architecture: webgpuData?.architecture ?? '',
241
+ device: webgpuData?.device ?? '',
242
+ description: webgpuData?.description ?? '',
243
+ };
244
+ }
245
+ /** Build the screen surface, keeping it coherent with the claimed platform. Pure. */
246
+ function buildScreenSurface(fp) {
82
247
  const screen = fp.screen;
83
- // User agent from headers (most accurate source)
84
- const userAgent = headers['user-agent']
85
- ?? fp.navigator?.userAgent
86
- ?? '';
248
+ const isMac = /Mac/i.test(fp.navigator?.platform ?? '');
249
+ // colorDepth is NOT capped at 24. The previous cap carried the comment
250
+ // "real Chrome privacy-reduces to 24 regardless of display HDR capability".
251
+ // Measured 2026-08-10 against real Google Chrome 151.0.7922.108 on macOS
252
+ // 26.5.2: it reports 30, on colorDepth and pixelDepth alike. Capping made
253
+ // it impossible for a profile claiming a modern wide-gamut Mac to report
254
+ // what such a Mac reports, while every other screen field said Mac.
255
+ const colorDepth = screen?.colorDepth ?? (isMac ? 30 : 24);
256
+ // Every Apple Silicon Mac is Retina: devicePixelRatio is 2. A MacIntel
257
+ // platform with an Apple Metal renderer and devicePixelRatio 1 is a
258
+ // combination no real machine produces, and it is one line to check.
259
+ const rawRatio = screen?.devicePixelRatio;
260
+ const pixelRatio = isMac ? Math.max(rawRatio ?? 2, 2) : (rawRatio ?? 1);
261
+ // macOS always reserves the menu bar, so availHeight is strictly less than
262
+ // height. Measured 33px on a real Mac; the old blanket -40 is a Windows
263
+ // taskbar shape.
264
+ const height = screen?.height ?? (isMac ? 1117 : 1080);
265
+ const reserved = isMac ? 33 : 40;
266
+ return {
267
+ width: screen?.width ?? (isMac ? 1728 : 1920),
268
+ height,
269
+ availWidth: screen?.availWidth ?? screen?.width ?? (isMac ? 1728 : 1920),
270
+ availHeight: screen?.availHeight ?? height - reserved,
271
+ colorDepth,
272
+ pixelRatio,
273
+ };
274
+ }
275
+ /**
276
+ * Resolve the (navigator.language, navigator.languages, timezone) triple the
277
+ * config advertises. Prefers the pre-resolved locale (explicit-intent path),
278
+ * else a seeded plausible default. Pure.
279
+ */
280
+ function buildLocaleSurface(headers, resolvedLocale, seed) {
87
281
  // Accept-language: prefer the pre-resolved triple (so a user-supplied locale wins)
88
282
  // and fall back to fingerprint headers when no resolution happened.
89
283
  //
90
284
  // Important: the C++ FingerprintConfig reader splits this string on commas and
91
285
  // feeds each entry verbatim into `navigator.languages` (the JS array). Real Chrome's
92
- // navigator.languages never carries q-values — those are HTTP Accept-Language
286
+ // navigator.languages never carries q-values - those are HTTP Accept-Language
93
287
  // semantics only. If we leave `"en-US,en;q=0.9"` in the config, the JS array leaks
94
288
  // `"en;q=0.9"` which is an instant detectable anomaly. Strip q-values here so the
95
289
  // config field is the clean list; the HTTP header flows from the same field and
96
290
  // will also be q-less, which is a valid (if less common) real-browser pattern.
97
- const rawAcceptLanguage = resolvedLocale?.languages
98
- ?? headers['accept-language']
99
- ?? headers['Accept-Language'];
100
- const acceptLanguage = rawAcceptLanguage
101
- ? rawAcceptLanguage.split(',').map((l) => l.split(';')[0].trim()).filter(Boolean).join(',')
102
- : undefined;
103
- const navLanguage = resolvedLocale?.locale;
104
- const timezone = resolvedLocale?.timezone;
105
- // Primary brand name — extract from UA-CH brands or derive from User-Agent
106
- const brandName = extractBrandName(uaBrands, userAgent);
107
- // Battery — generate realistic values based on target platform.
108
- // Uses UA-CH platform names ('Windows'|'macOS'|'Linux') for the desktop/mac checks.
109
- const battery = generateBatteryConfig(uaChPlatform, seed);
110
- // deviceMemory: spec requires the value be one of {0.25, 0.5, 1, 2, 4, 8}
111
- // (https://www.w3.org/TR/device-memory/#sec-device-memory-js-api). Exposing
112
- // anything outside this set — in particular the real 32 on a 32 GB machine —
113
- // is an immediate "bot" signal for any vendor that checks.
114
- const rawDeviceMemory = fp.navigator?.deviceMemory ?? 8;
115
- const deviceMemory = clampDeviceMemoryToSpecBuckets(rawDeviceMemory);
116
- // colorDepth: real Chrome privacy-reduces to 24 regardless of display HDR
117
- // capability. 30 is the raw macOS value that leaks through when we don't cap.
118
- const rawColorDepth = screen?.colorDepth ?? 24;
119
- const colorDepth = Math.min(rawColorDepth, 24);
291
+ if (resolvedLocale) {
292
+ // User specified a locale (fingerprintOptions.locale) or one was derived
293
+ // from the proxy session. Honour it verbatim - this is the explicit-intent
294
+ // path and the source of truth for navigator.language / Accept-Language /
295
+ // timezone propagation.
296
+ const raw = resolvedLocale.languages
297
+ ?? headers['accept-language']
298
+ ?? headers['Accept-Language'];
299
+ const languages = raw
300
+ ? raw.split(',').map((l) => l.split(';')[0].trim()).filter(Boolean).join(',')
301
+ : undefined;
302
+ return { language: resolvedLocale.locale, languages, timezone: resolvedLocale.timezone };
303
+ }
304
+ // ─── No-intent fallback ─────────────────────────────────────────────
305
+ // Without a resolvedLocale, the fingerprint-generator's Accept-Language
306
+ // header reflects the HOST machine (Mac dev box in Prague → cs-CZ
307
+ // header). Using it would leak the host locale through navigator.languages
308
+ // and the Worker's Intl/Date paths regardless of what UA the spoof
309
+ // claims. CreepJS Worker probe flags this as "lang/timezone confidence:
310
+ // high" on the host's value - instant detection.
311
+ //
312
+ // Pin a seeded-but-plausible default so the seed deterministically picks
313
+ // a coherent (locale, languages, timezone) triple. Pool entries are
314
+ // common English-speaking combos that match the macOS UA-Reduction
315
+ // freeze; identical seed → identical triple, so Mac-on-Mac and
316
+ // Mac-on-Linux runs are diff-stable.
317
+ const FALLBACK_POOL = [
318
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Los_Angeles' },
319
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/New_York' },
320
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Chicago' },
321
+ { locale: 'en-US', languages: 'en-US,en', timezone: 'America/Denver' },
322
+ { locale: 'en-GB', languages: 'en-GB,en', timezone: 'Europe/London' },
323
+ { locale: 'en-CA', languages: 'en-CA,en', timezone: 'America/Toronto' },
324
+ { locale: 'en-AU', languages: 'en-AU,en', timezone: 'Australia/Sydney' },
325
+ ];
326
+ const idx = Math.abs(Math.trunc(seed)) % FALLBACK_POOL.length;
327
+ const fb = FALLBACK_POOL[idx];
328
+ return { language: fb.locale, languages: fb.languages, timezone: fb.timezone };
329
+ }
330
+ /**
331
+ * Derive the canvas text-rendering-mode hint from the WebGL family so canvas2D
332
+ * text rasterisation matches the OS we claim. Pure.
333
+ */
334
+ function buildCanvasSurface(family) {
335
+ // M6: the C++ FingerprintConfig parser ALSO derives the same default when
336
+ // canvas is omitted entirely, so this is belt-and-suspenders - but writing
337
+ // it from here means the JSON config is self-describing and a reader can
338
+ // see exactly which mode + font allowlist the session ships with.
339
+ if (!family)
340
+ return undefined;
341
+ const textRenderingMode = (() => {
342
+ switch (family) {
343
+ case 'apple_metal': return 'subpixel_aa_no_hinting';
344
+ case 'windows_d3d_nvidia':
345
+ case 'windows_d3d_amd':
346
+ case 'windows_d3d_intel':
347
+ return 'lcd_subpixel_full_hinting';
348
+ case 'linux_mesa_amd':
349
+ case 'linux_mesa_nvidia':
350
+ case 'linux_mesa_intel':
351
+ return 'rgb_subpixel_slight_hinting';
352
+ default:
353
+ return undefined;
354
+ }
355
+ })();
356
+ return textRenderingMode ? { textRenderingMode } : undefined;
357
+ }
358
+ /**
359
+ * Generate a FingerprintConfig JSON object from fingerprint-generator output.
360
+ *
361
+ * Composed from per-surface pure builders (navigator / webgl / webgpu / screen /
362
+ * locale / battery / network / audio / canvas). The narrow public signature is
363
+ * the module interface - the builders stay private so callers assemble the whole
364
+ * config in one call.
365
+ *
366
+ * @param fingerprint - BrowserFingerprintWithHeaders from fingerprint-generator
367
+ * @param sessionId - Session identifier used to derive the seed (proxy session ID, etc.)
368
+ * @param resolvedLocale - Pre-resolved locale/languages/timezone triple. When provided,
369
+ * these values win over anything derived from fingerprint-generator headers so that a
370
+ * user-supplied `locale: 'ko-KR'` coherently propagates to every locale surface
371
+ * (Accept-Language, navigator.language, Intl defaults, timezone).
372
+ */
373
+ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale) {
374
+ const fp = fingerprint.fingerprint;
375
+ const { headers } = fingerprint;
376
+ const seed = deriveSeed(sessionId, fp.navigator?.userAgent ?? '');
377
+ const locale = buildLocaleSurface(headers, resolvedLocale, seed);
378
+ const nav = buildNavigatorSurface(fp, headers, seed, locale);
379
+ const webglSurface = buildWebglSurface(fp);
120
380
  const config = {
121
381
  version: 1,
122
382
  seed,
123
- brandName,
124
- ...(timezone && { timezone }),
125
- navigator: {
126
- platform, // legacy form: 'MacIntel' | 'Win32' | 'Linux x86_64'
127
- ...(navLanguage && { language: navLanguage }),
128
- ...(acceptLanguage && { languages: acceptLanguage }),
129
- hardwareConcurrency: fp.navigator?.hardwareConcurrency ?? 8,
130
- deviceMemory,
131
- userAgent,
132
- ...(uaBrands.length > 0 && {
133
- userAgentData: {
134
- brands: uaBrands,
135
- mobile: uaData?.mobile ?? false,
136
- platform: uaData?.platform ?? uaChPlatform,
137
- platformVersion: uaData?.platformVersion ?? '15.0.0',
138
- architecture: uaData?.architecture ?? 'x86',
139
- bitness: uaData?.bitness ?? '64',
140
- model: uaData?.model ?? '',
141
- uaFullVersion: uaData?.uaFullVersion ?? extractFullVersion(userAgent),
142
- fullVersionList: uaBrands,
143
- },
144
- }),
145
- },
146
- webgl: {
147
- vendor: webglVendor,
148
- renderer: webglRenderer,
149
- },
150
- screen: {
151
- width: screen?.width ?? 1920,
152
- height: screen?.height ?? 1080,
153
- availWidth: screen?.availWidth ?? screen?.width ?? 1920,
154
- availHeight: screen?.availHeight ?? (screen?.height ? screen.height - 40 : 1040),
155
- colorDepth,
156
- pixelRatio: screen?.devicePixelRatio ?? 1,
157
- },
158
- battery,
383
+ brandName: nav.brandName,
384
+ ...(locale.timezone && { timezone: locale.timezone }),
385
+ navigator: nav.navigator,
386
+ webgl: webglSurface.webgl,
387
+ screen: buildScreenSurface(fp),
388
+ // Battery - generate realistic values based on target platform.
389
+ // Uses UA-CH platform names ('Windows'|'macOS'|'Linux') for the desktop/mac checks.
390
+ battery: generateBatteryConfig(nav.uaChPlatform, seed),
159
391
  noise: {
160
392
  canvas: true,
161
393
  audio: true,
@@ -166,18 +398,19 @@ export function generateFingerprintConfig(fingerprint, sessionId, resolvedLocale
166
398
  performanceNowResolutionMs: 1,
167
399
  },
168
400
  };
169
- // WebGPU — from explicit webgpu field on fingerprint (non-Apify profiles), or
170
- // derived from WebGL vendor as a fallback (Apify fingerprints have no webgpu data).
171
- const webgpuData = fp.webgpu;
172
- const derivedWebGPUVendor = webgpuData?.vendor ?? deriveWebGPUVendorFromWebGL(webglVendor);
173
- if (derivedWebGPUVendor) {
174
- config.webgpu = {
175
- vendor: derivedWebGPUVendor,
176
- architecture: webgpuData?.architecture ?? '',
177
- device: webgpuData?.device ?? '',
178
- description: webgpuData?.description ?? '',
179
- };
180
- }
401
+ const webgpu = buildWebgpuSurface(fp, webglSurface.vendor);
402
+ if (webgpu)
403
+ config.webgpu = webgpu;
404
+ // navigator.connection - prevent datacenter rtt/downlink leak. Same seed
405
+ // → same values, so Mac and Linux Docker hosts running the same profile
406
+ // report the same connection metrics.
407
+ config.network = deriveNetwork(seed);
408
+ // AudioContext.sampleRate hint matched to platform. Consumed by the C++
409
+ // base_audio_context.h getter when the binding-layer override lands.
410
+ config.audio = { sampleRate: deriveAudioSampleRate(nav.platform) };
411
+ const canvas = buildCanvasSurface(webglSurface.family);
412
+ if (canvas)
413
+ config.canvas = canvas;
181
414
  return config;
182
415
  }
183
416
  /**
@@ -199,33 +432,10 @@ export async function cleanupTempFingerprintConfig(filePath) {
199
432
  await fs.unlink(filePath);
200
433
  }
201
434
  catch {
202
- // Non-fatal — temp file will be cleaned by OS eventually
435
+ // Non-fatal - temp file will be cleaned by OS eventually
203
436
  }
204
437
  }
205
438
  // ─── Helpers ──────────────────────────────────────────────────────────────────
206
- /**
207
- * Clamp a raw device-memory-in-GB value to the buckets required by the
208
- * Device Memory API spec (https://www.w3.org/TR/device-memory/). Chrome
209
- * always quantizes to {0.25, 0.5, 1, 2, 4, 8}. Returning anything outside
210
- * this set — especially the real value on >8 GB machines — is an instant
211
- * anti-bot detection signal.
212
- *
213
- * Rule (per spec): the returned value is the closest bucket that is less
214
- * than or equal to the actual value, capped at 8.
215
- */
216
- function clampDeviceMemoryToSpecBuckets(raw) {
217
- const buckets = [0.25, 0.5, 1, 2, 4, 8];
218
- if (!Number.isFinite(raw) || raw <= 0)
219
- return 8;
220
- if (raw >= 8)
221
- return 8;
222
- let bucket = buckets[0];
223
- for (const b of buckets) {
224
- if (b <= raw)
225
- bucket = b;
226
- }
227
- return bucket;
228
- }
229
439
  /** Extract full Chrome version string from User-Agent (e.g. "Chrome/136.0.7103.0") */
230
440
  function extractFullVersion(userAgent) {
231
441
  const match = userAgent.match(/Chrome\/(\d+\.\d+\.\d+\.\d+)/);
@@ -304,7 +514,7 @@ function seedRng(seed) {
304
514
  return () => {
305
515
  s = (s + 0x6D2B79F5) | 0;
306
516
  let t = Math.imul(s ^ (s >>> 15), 1 | s);
307
- t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
517
+ t ^= t + Math.imul(t ^ (t >>> 7), 61 | t);
308
518
  return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
309
519
  };
310
520
  }
@@ -1 +1 @@
1
- {"version":3,"file":"anti-detect-config.js","sourceRoot":"","sources":["../../src/browser-process/anti-detect-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anti-detect-config.js","sourceRoot":"","sources":["../../src/browser-process/anti-detect-config.ts"],"names":[],"mappings":"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"}