jumpy-lion 0.1.5 → 0.1.6-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +13 -0
  2. package/dist/browser-controller.d.ts.map +1 -1
  3. package/dist/browser-controller.js +52 -2
  4. package/dist/browser-controller.js.map +1 -1
  5. package/dist/browser-plugin.d.ts +31 -0
  6. package/dist/browser-plugin.d.ts.map +1 -1
  7. package/dist/browser-plugin.js +76 -1
  8. package/dist/browser-plugin.js.map +1 -1
  9. package/dist/browser-process/anti-detect-browser.d.ts +56 -0
  10. package/dist/browser-process/anti-detect-browser.d.ts.map +1 -0
  11. package/dist/browser-process/anti-detect-browser.js +134 -0
  12. package/dist/browser-process/anti-detect-browser.js.map +1 -0
  13. package/dist/browser-process/anti-detect-config.d.ts +84 -0
  14. package/dist/browser-process/anti-detect-config.d.ts.map +1 -0
  15. package/dist/browser-process/anti-detect-config.js +178 -0
  16. package/dist/browser-process/anti-detect-config.js.map +1 -0
  17. package/dist/browser-process/browser.d.ts +19 -0
  18. package/dist/browser-process/browser.d.ts.map +1 -1
  19. package/dist/browser-process/browser.js +83 -4
  20. package/dist/browser-process/browser.js.map +1 -1
  21. package/dist/browser-process/get-chrome-executable.d.ts +7 -0
  22. package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
  23. package/dist/browser-process/get-chrome-executable.js +42 -0
  24. package/dist/browser-process/get-chrome-executable.js.map +1 -1
  25. package/dist/browser-process/index.d.ts +4 -1
  26. package/dist/browser-process/index.d.ts.map +1 -1
  27. package/dist/browser-process/index.js +3 -1
  28. package/dist/browser-process/index.js.map +1 -1
  29. package/dist/crawler.d.ts +2 -0
  30. package/dist/crawler.d.ts.map +1 -1
  31. package/dist/crawler.js +5 -2
  32. package/dist/crawler.js.map +1 -1
  33. package/dist/fingerprinting/fingerprint-injector.d.ts +39 -0
  34. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  35. package/dist/fingerprinting/fingerprint-injector.js +141 -50
  36. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  37. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -1
  38. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +16 -0
  39. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
  40. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -1
  41. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +3 -2
  42. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -1
  43. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
  44. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +18 -10
  45. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
  46. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +1 -1
  47. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  48. package/dist/fingerprinting/fingerprint-overrides/index.js +1 -1
  49. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  50. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -1
  51. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +5 -8
  52. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -1
  53. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +12 -1
  54. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
  55. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +27 -22
  56. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
  57. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  58. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +86 -28
  59. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  60. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  61. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +165 -33
  62. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  63. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -1
  64. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +10 -8
  65. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -1
  66. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -1
  67. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +9 -7
  68. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -1
  69. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +6 -6
  70. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -1
  71. package/dist/fingerprinting/fingerprint-overrides/utils.js +44 -1
  72. package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -1
  73. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  74. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +43 -1
  75. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  76. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
  77. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +9 -1
  78. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
  79. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
  80. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +14 -3
  81. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
  82. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +32 -0
  83. package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -0
  84. package/dist/fingerprinting/non-apify-fingerprint-generator.js +480 -0
  85. package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -0
  86. package/dist/tsconfig.build.tsbuildinfo +1 -1
  87. package/package.json +11 -2
  88. package/scripts/postinstall.cjs +242 -0
@@ -66,6 +66,13 @@ export const createDataDomeBypassScript = () => {
66
66
  return min + r * (max - min);
67
67
  };
68
68
 
69
+ // Compute Chrome version from navigator.userAgent (set by CDP before page load).
70
+ // This ensures UA-CH brands/versions always match the actual Chrome UA regardless of
71
+ // which Chrome version the fingerprint uses, preventing version-mismatch detection.
72
+ const _chrM = navigator.userAgent.match(/Chrome\\/(\d+)\.(\d+\.\d+\.\d+)/);
73
+ const _chrMaj = _chrM ? _chrM[1] : '134';
74
+ const _chrFull = _chrM ? (_chrM[1] + '.' + _chrM[2]) : '134.0.6998.88';
75
+
69
76
  const CONFIG = {
70
77
  // Navigator
71
78
  userAgent: navigator.userAgent,
@@ -121,22 +128,22 @@ export const createDataDomeBypassScript = () => {
121
128
  rtt: 50 + Math.floor(stableRand(0, 50)),
122
129
  downlink: 10 + stableRand(0, 40),
123
130
 
124
- // Client Hints (CRITICAL for DataDome) - must match ua-ch.ts
131
+ // Client Hints - dynamically matched to actual Chrome UA (computed above)
125
132
  brands: [
126
- { brand: 'Google Chrome', version: '134' },
127
- { brand: 'Chromium', version: '134' },
133
+ { brand: 'Chromium', version: _chrMaj },
134
+ { brand: 'Google Chrome', version: _chrMaj },
128
135
  { brand: 'Not_A Brand', version: '24' }
129
136
  ],
130
137
  fullVersionList: [
131
- { brand: 'Google Chrome', version: '134.0.6998.88' },
132
- { brand: 'Chromium', version: '134.0.6998.88' },
138
+ { brand: 'Chromium', version: _chrFull },
139
+ { brand: 'Google Chrome', version: _chrFull },
133
140
  { brand: 'Not_A Brand', version: '24.0.0.0' }
134
141
  ],
135
142
  architecture: 'x86',
136
143
  bitness: '64',
137
144
  model: '',
138
145
  platformVersion: '15.0.0',
139
- uaFullVersion: '134.0.6998.88',
146
+ uaFullVersion: _chrFull,
140
147
  wow64: false,
141
148
  mobile: false,
142
149
  };
@@ -409,7 +416,7 @@ export const createDataDomeBypassScript = () => {
409
416
  let last = 0;
410
417
  performance.now = function() {
411
418
  let n = origNow();
412
- if (n <= last) n = last + 0.001 + Math.random() * 0.001;
419
+ if (n <= last) n = last + 0.001;
413
420
  last = n;
414
421
  return n;
415
422
  };
@@ -660,7 +667,8 @@ export const createDataDomeBypassScript = () => {
660
667
  rtt: CONFIG.rtt,
661
668
  downlink: CONFIG.downlink,
662
669
  saveData: false,
663
- type: 'wifi',
670
+ // NOTE: 'type' is NOT present on desktop Chrome (only Android exposes it).
671
+ // Setting type:'wifi' was a false signal detectable by fingerprinters.
664
672
  };
665
673
 
666
674
  for (const [k, v] of Object.entries(props)) {
@@ -871,7 +879,7 @@ export const createDataDomeBypassScript = () => {
871
879
 
872
880
  window.requestAnimationFrame = function(cb) {
873
881
  const id = nextId++;
874
- const jitter = Math.random() * 2;
882
+ const jitter = stableRand(0, 2);
875
883
  const realId = origRAF.call(this, (ts) => {
876
884
  pending.delete(id);
877
885
  cb(ts + jitter);
@@ -1081,7 +1089,7 @@ export const createDataDomeBypassScript = () => {
1081
1089
  window.setTimeout = function(cb, delay, ...args) {
1082
1090
  // Add variance to short delays (DataDome detection)
1083
1091
  if (delay !== undefined && delay < 100) {
1084
- delay = delay + Math.floor(Math.random() * 30);
1092
+ delay = delay + Math.floor(stableRand(0, 30));
1085
1093
  }
1086
1094
  return orig.call(this, cb, delay, ...args);
1087
1095
  };
@@ -1 +1 @@
1
- {"version":3,"file":"datadome-bypass.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/datadome-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8oCL,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"datadome-bypass.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/datadome-bypass.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAspCL,CAAC;AACP,CAAC,CAAC"}
@@ -18,7 +18,7 @@ export { createClientRectSpoofingScript } from './client-rect-spoofing.js';
18
18
  export { createWebRTCSpoofingScript, createWebRTCDisableScript } from './webrtc-spoofing.js';
19
19
  export { createWebGPUSpoofingScript } from './webgpu-spoofing.js';
20
20
  export { createPlatformConsistencyScript, type PlatformConfig } from './platform-consistency.js';
21
- export { setupMouseMovementHumanization } from './mouse-humanization.js';
21
+ export { createMouseMovementHumanizationScript, setupMouseMovementHumanization } from './mouse-humanization.js';
22
22
  export { createRuntimeEnableBypassScript } from './runtime-enable-bypass.js';
23
23
  export { createFontSpoofingScript } from './font-spoofing.js';
24
24
  export { createPerformanceSpoofingScript } from './performance-spoofing.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACH,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,8BAA8B,EAC9B,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,qCAAqC,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAG1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACH,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,8BAA8B,EAC9B,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -19,7 +19,7 @@ export { createClientRectSpoofingScript } from './client-rect-spoofing.js';
19
19
  export { createWebRTCSpoofingScript, createWebRTCDisableScript } from './webrtc-spoofing.js';
20
20
  export { createWebGPUSpoofingScript } from './webgpu-spoofing.js';
21
21
  export { createPlatformConsistencyScript } from './platform-consistency.js';
22
- export { setupMouseMovementHumanization } from './mouse-humanization.js';
22
+ export { createMouseMovementHumanizationScript, setupMouseMovementHumanization } from './mouse-humanization.js';
23
23
  export { createRuntimeEnableBypassScript } from './runtime-enable-bypass.js';
24
24
  export { createFontSpoofingScript } from './font-spoofing.js';
25
25
  export { createPerformanceSpoofingScript } from './performance-spoofing.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,sCAAsC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAoB,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAuB,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAA0B,MAAM,YAAY,CAAC;AAEvF,6CAA6C;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,iDAAiD;AACjD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,wBAAwB;AACxB,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACH,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,8BAA8B,EAC9B,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,sCAAsC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAoB,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAuB,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,qCAAqC,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAChH,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAA0B,MAAM,YAAY,CAAC;AAEvF,6CAA6C;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,iDAAiD;AACjD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,wBAAwB;AACxB,OAAO,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACH,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,8BAA8B,EAC9B,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,+BAA+B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"locale-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/locale-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,MAuS7C,CAAC"}
1
+ {"version":3,"file":"locale-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/locale-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,MAoS7C,CAAC"}
@@ -57,14 +57,11 @@ export const createLocaleSpoofingScript = () => {
57
57
 
58
58
  isCreatingDateTimeFormat = true;
59
59
  try {
60
- // Ensure Windows-like date formatting regardless of actual locale
61
- const windowsOptions = Object.assign({}, windowsLocaleConfig.dateFormat, options);
62
-
63
- // Force specific Windows locale patterns
64
- if (platform === 'Win32' || !platform.includes('Linux')) {
65
- if (!options || !options.timeZone) {
66
- windowsOptions.timeZone = cachedTimeZone;
67
- }
60
+ // Only normalize timezone injecting dateFormat defaults breaks callers that
61
+ // pass minimal options (e.g. { month:'numeric' }), which is a detectable anomaly
62
+ const windowsOptions = Object.assign({}, options);
63
+ if (!windowsOptions.timeZone) {
64
+ windowsOptions.timeZone = cachedTimeZone;
68
65
  }
69
66
 
70
67
  // Use Reflect.construct to properly create instance with original constructor
@@ -1 +1 @@
1
- {"version":3,"file":"locale-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/locale-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqSV,CAAC;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"locale-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/locale-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkSV,CAAC;AACF,CAAC,CAAC"}
@@ -3,5 +3,16 @@
3
3
  * Generates bezier curve movements instead of straight lines
4
4
  * Stores the utility in the __stealth store for internal use only
5
5
  */
6
- export declare const setupMouseMovementHumanization: (client: any) => Promise<void>;
6
+ /**
7
+ * Returns the browser-context script that installs the bezier-curve mouse
8
+ * utility on __stealth.humanizeMouse. Included in the main bundled injection
9
+ * so it counts as only ONE addScriptToEvaluateOnNewDocument call.
10
+ */
11
+ export declare const createMouseMovementHumanizationScript: () => string;
12
+ /**
13
+ * @deprecated The browser-context script is now bundled via
14
+ * createMouseMovementHumanizationScript(). This function is kept only as a
15
+ * no-op so callers that haven't been updated don't break at runtime.
16
+ */
17
+ export declare const setupMouseMovementHumanization: (_client: any) => Promise<void>;
7
18
  //# sourceMappingURL=mouse-humanization.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse-humanization.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/mouse-humanization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,8BAA8B,WAAkB,GAAG,KAAG,OAAO,CAAC,IAAI,CAkE9E,CAAC"}
1
+ {"version":3,"file":"mouse-humanization.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/mouse-humanization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,QAAO,MAyDxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,YAAmB,GAAG,KAAG,OAAO,CAAC,IAAI,CAG/E,CAAC"}
@@ -3,17 +3,19 @@
3
3
  * Generates bezier curve movements instead of straight lines
4
4
  * Stores the utility in the __stealth store for internal use only
5
5
  */
6
- export const setupMouseMovementHumanization = async (client) => {
7
- // NOTE: Using addScriptToEvaluateOnNewDocument instead of Runtime.evaluate
8
- // Runtime.evaluate is a CDP detection vector - it modifies console bindings and Error stacks
9
- await client.Page.addScriptToEvaluateOnNewDocument({ source: `
6
+ /**
7
+ * Returns the browser-context script that installs the bezier-curve mouse
8
+ * utility on __stealth.humanizeMouse. Included in the main bundled injection
9
+ * so it counts as only ONE addScriptToEvaluateOnNewDocument call.
10
+ */
11
+ export const createMouseMovementHumanizationScript = () => `
10
12
  (() => {
11
13
  'use strict';
12
14
 
13
15
  const _s = typeof __stealth !== 'undefined' ? __stealth : {};
14
16
 
15
- // Seeded PRNG (mulberry32) for deterministic curves
16
- const createSeededRNG = (seed) => {
17
+ // Re-use centralized helpers when available; local fallback for safety.
18
+ const _createRNG = _s.createRNG || ((seed) => {
17
19
  let s = seed | 0;
18
20
  return () => {
19
21
  s = s + 0x6D2B79F5 | 0;
@@ -21,37 +23,31 @@ export const setupMouseMovementHumanization = async (client) => {
21
23
  t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
22
24
  return ((t ^ t >>> 14) >>> 0) / 4294967296;
23
25
  };
24
- };
25
- // Stable seed: must NOT use Date.now() or Math.random() because this script
26
- // re-executes on every reload via addScriptToEvaluateOnNewDocument.
27
- const _stableHash = (salt) => {
28
- const _s = typeof __stealth !== 'undefined' ? __stealth : {};
26
+ });
27
+ const sessionSeed = (_s.stableHash ? _s.stableHash(0xCAFE1009) : (() => {
29
28
  const key = _s.seedKey || '';
30
29
  const ua = navigator.userAgent || '';
31
- const s = screen;
32
- let h = salt | 0;
30
+ const sc = screen;
31
+ let h = 0xCAFE1009;
33
32
  for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
34
33
  for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
35
- h = (h << 5) - h + (s.width || 0) | 0;
36
- h = (h << 5) - h + (s.height || 0) | 0;
37
- h = (h << 5) - h + (s.colorDepth || 0) | 0;
34
+ h = (h << 5) - h + (sc.width || 0) | 0;
35
+ h = (h << 5) - h + (sc.height || 0) | 0;
36
+ h = (h << 5) - h + (sc.colorDepth || 0) | 0;
38
37
  return h >>> 0;
39
- };
40
- const sessionSeed = _stableHash(0xCAFE1009);
41
- const seededRandom = createSeededRNG(sessionSeed);
38
+ })());
39
+ const seededRandom = _createRNG(sessionSeed);
42
40
 
43
41
  // Bezier curve movement generator
44
42
  _s.humanizeMouse = (fromX, fromY, toX, toY) => {
45
43
  const steps = 20 + Math.floor(seededRandom() * 10);
46
44
  const points = [];
47
45
 
48
- // Generate control points for bezier curve
49
46
  const cp1x = fromX + (toX - fromX) * 0.25 + (seededRandom() - 0.5) * 50;
50
47
  const cp1y = fromY + (toY - fromY) * 0.25 + (seededRandom() - 0.5) * 50;
51
48
  const cp2x = fromX + (toX - fromX) * 0.75 + (seededRandom() - 0.5) * 50;
52
49
  const cp2y = fromY + (toY - fromY) * 0.75 + (seededRandom() - 0.5) * 50;
53
50
 
54
- // Calculate bezier curve points
55
51
  for (let i = 0; i <= steps; i++) {
56
52
  const t = i / steps;
57
53
  const t2 = t * t;
@@ -68,6 +64,15 @@ export const setupMouseMovementHumanization = async (client) => {
68
64
 
69
65
  return points;
70
66
  };
71
- })();` });
67
+ })();
68
+ `;
69
+ /**
70
+ * @deprecated The browser-context script is now bundled via
71
+ * createMouseMovementHumanizationScript(). This function is kept only as a
72
+ * no-op so callers that haven't been updated don't break at runtime.
73
+ */
74
+ export const setupMouseMovementHumanization = async (_client) => {
75
+ // No-op: script is now included in the main bundled injection to avoid
76
+ // multiple addScriptToEvaluateOnNewDocument calls (detection vector).
72
77
  };
73
78
  //# sourceMappingURL=mouse-humanization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mouse-humanization.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/mouse-humanization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,MAAW,EAAiB,EAAE;IAC/E,2EAA2E;IAC3E,6FAA6F;IAC7F,MAAM,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8D3D,EAAE,CAAC,CAAC;AACV,CAAC,CAAC"}
1
+ {"version":3,"file":"mouse-humanization.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/mouse-humanization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDlE,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EAAE,OAAY,EAAiB,EAAE;IAChF,uEAAuE;IACvE,sEAAsE;AAC1E,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,+BAA+B,aAAc,MAAM,oBAAoB,cAAc,KAAG,MAimBpG,CAAC"}
1
+ {"version":3,"file":"platform-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,+BAA+B,aAAc,MAAM,oBAAoB,cAAc,KAAG,MA2pBpG,CAAC"}
@@ -111,7 +111,14 @@ export const createPlatformConsistencyScript = (platform, fingerprintData) => {
111
111
  return `
112
112
  (() => {
113
113
  'use strict';
114
-
114
+
115
+ // Only run in the top-level frame. Sub-frames (iframes) should keep native
116
+ // property descriptors so that detection tools comparing main-frame getter
117
+ // identity vs iframe getter identity (hasMismatchPlatformIframe) find no
118
+ // discrepancy. The main-frame injection already cannot override non-
119
+ // configurable navigator properties, so leaving iframes at native is correct.
120
+ if (window !== window.top) return;
121
+
115
122
  // Platform Consistency for ${platform}
116
123
  const config = ${JSON.stringify(config)};
117
124
 
@@ -133,15 +140,21 @@ export const createPlatformConsistencyScript = (platform, fingerprintData) => {
133
140
  }
134
141
  };
135
142
 
136
- // Override navigator properties for platform consistency (with guards)
143
+ // Override navigator properties for platform consistency (with guards).
144
+ // NOTE: vendorSub / cookieEnabled / onLine are intentionally omitted —
145
+ // their native Chrome values always match the fingerprint values, and adding
146
+ // instance-level JS getters for them without doing the same in sub-frames
147
+ // creates a descriptor asymmetry that detection tools flag as
148
+ // hasMismatchPlatformIframe. Injecting into sub-frames is guarded off
149
+ // above (window !== window.top), so we only define properties where Chrome
150
+ // already exposes a non-configurable native getter at the instance level
151
+ // (platform, vendor, userAgent, etc.) — those fail silently in both
152
+ // contexts and stay symmetric.
137
153
  safeDefineProperty(navigator, 'platform', () => config.platform);
138
154
  safeDefineProperty(navigator, 'vendor', () => config.vendor);
139
- safeDefineProperty(navigator, 'vendorSub', () => config.vendorSub);
140
155
  safeDefineProperty(navigator, 'productSub', () => config.productSub);
141
156
  safeDefineProperty(navigator, 'hardwareConcurrency', () => config.hardwareConcurrency);
142
157
  safeDefineProperty(navigator, 'maxTouchPoints', () => config.maxTouchPoints);
143
- safeDefineProperty(navigator, 'cookieEnabled', () => config.cookieEnabled);
144
- safeDefineProperty(navigator, 'onLine', () => config.onLine);
145
158
  safeDefineProperty(navigator, 'language', () => config.language);
146
159
  safeDefineProperty(navigator, 'languages', () => config.languages);
147
160
 
@@ -240,28 +253,12 @@ export const createPlatformConsistencyScript = (platform, fingerprintData) => {
240
253
  safeDefineProperty(screen, 'colorDepth', () => config.colorDepth);
241
254
  safeDefineProperty(screen, 'pixelDepth', () => config.screenDepth || config.colorDepth);
242
255
 
243
- // Ensure WebGL returns platform-appropriate values
244
- const getParameterProto = WebGLRenderingContext.prototype.getParameter;
245
- WebGLRenderingContext.prototype.getParameter = function(param) {
246
- if (param === 0x9245 || param === 0x9246) { // UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL
247
- // Return platform-appropriate GPU with corrected ANGLE token count
248
- if (config.platform === 'Win32') {
249
- return param === 0x9245
250
- ? 'NVIDIA Corporation'
251
- : 'ANGLE (NVIDIA, NVIDIA GeForce GTX 1660 Ti Direct3D 11.0)'; // Fixed: fewer tokens
252
- } else if (config.platform === 'MacIntel') {
253
- return param === 0x9245 ? 'Apple Inc.' : 'ANGLE (Apple, Apple M1 Pro, OpenGL 4.1)';
254
- } else {
255
- return param === 0x9245 ? 'Intel' : 'ANGLE (Intel, Mesa Intel(R) UHD Graphics 630, OpenGL 4.6)';
256
- }
257
- }
258
- return getParameterProto.apply(this, arguments);
259
- };
260
-
261
- if (typeof WebGL2RenderingContext !== 'undefined') {
262
- WebGL2RenderingContext.prototype.getParameter = WebGLRenderingContext.prototype.getParameter;
263
- }
264
-
256
+ // NOTE: WebGL getParameter override intentionally removed.
257
+ // webgl-spoofing.ts is the single authority for WebGL vendor/renderer.
258
+ // Having multiple modules override the same prototype method means only
259
+ // the last one survives a silent conflict that produces inconsistent
260
+ // GPU strings across vendor/renderer values.
261
+
265
262
  // ========== 2024-2025 Enhanced Platform Consistency ==========
266
263
 
267
264
  // Screen Orientation API Consistency
@@ -584,10 +581,71 @@ export const createPlatformConsistencyScript = (platform, fingerprintData) => {
584
581
  }
585
582
  };
586
583
 
584
+ // ── Iframe prototype alignment ───────────────────────────────────────────
585
+ // Detection technique used by fpscanner.com (hasMismatchPlatformIframe):
586
+ // const nativeGet = Object.getOwnPropertyDescriptor(
587
+ // iframe.contentWindow.Navigator.prototype, prop)?.get;
588
+ // const realValue = nativeGet.call(navigator); // bypasses instance override
589
+ // When the main frame has property overrides (JS or CDP-injected native), calling
590
+ // the iframe's prototype getter on main navigator returns the underlying C++ value,
591
+ // which differs from the overridden value → mismatch detected.
592
+ // Fix: intercept contentWindow access and override the iframe's Navigator.prototype
593
+ // getters to return the same value the main frame's navigator currently reports.
594
+ try {
595
+ const _fpAlignIframeProto = (win) => {
596
+ try {
597
+ if (!win || !win.navigator) return;
598
+ const iwProto = Object.getPrototypeOf(win.navigator);
599
+ const propsToAlign = [
600
+ 'platform', 'hardwareConcurrency', 'userAgent', 'vendor',
601
+ 'productSub', 'appVersion', 'appCodeName', 'appName', 'product',
602
+ ];
603
+ for (const prop of propsToAlign) {
604
+ try {
605
+ const mainVal = (navigator)[prop];
606
+ const protoDesc = Object.getOwnPropertyDescriptor(iwProto, prop);
607
+ if (!protoDesc || protoDesc.configurable !== false) {
608
+ // Save the native getter's toString string BEFORE replacing it.
609
+ // fpscanner (hasMismatchPlatformIframe) checks whether the
610
+ // iframe's prototype getter toString looks like native code.
611
+ // Our replacement getter's .toString() must return the same
612
+ // native-code string the original getter had.
613
+ const nativeGetStr = protoDesc?.get?.toString()
614
+ ?? \`function get \${prop}() { [native code] }\`;
615
+ const ourGetter = (() => { const v = mainVal; return function() { return v; }; })();
616
+ Object.defineProperty(ourGetter, 'toString', {
617
+ value: () => nativeGetStr,
618
+ configurable: true,
619
+ writable: true,
620
+ });
621
+ Object.defineProperty(iwProto, prop, {
622
+ get: ourGetter,
623
+ configurable: true,
624
+ });
625
+ }
626
+ } catch (_) { /* skip non-configurable property */ }
627
+ }
628
+ } catch (_) { /* cross-origin iframe — skip */ }
629
+ };
630
+
631
+ const _fpCWDesc = Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, 'contentWindow');
632
+ if (_fpCWDesc && _fpCWDesc.get) {
633
+ const _fpCWGet = _fpCWDesc.get;
634
+ Object.defineProperty(HTMLIFrameElement.prototype, 'contentWindow', {
635
+ get() {
636
+ const win = _fpCWGet.call(this);
637
+ if (win) _fpAlignIframeProto(win);
638
+ return win;
639
+ },
640
+ configurable: true,
641
+ });
642
+ }
643
+ } catch (_) { /* HTMLIFrameElement not available */ }
644
+
587
645
  // Initialize all enhanced spoofing
588
646
  const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
589
647
  const ERROR_PREFIX = '[CDP-FP-ERROR]';
590
-
648
+
591
649
  console.log(DEBUG_PREFIX, 'Starting platform consistency overrides for:', config.platform);
592
650
 
593
651
  const applyConsistency = (name, fn) => {
@@ -1 +1 @@
1
- {"version":3,"file":"platform-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stealth-script.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,mBAAmB,QAAO,MAy8BtC,CAAC"}
1
+ {"version":3,"file":"stealth-script.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,mBAAmB,QAAO,MA6kCtC,CAAC"}