jumpy-lion 0.1.2 → 0.1.4

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 (61) hide show
  1. package/dist/browser-controller.js +1 -1
  2. package/dist/browser-controller.js.map +1 -1
  3. package/dist/browser-process/browser.d.ts.map +1 -1
  4. package/dist/browser-process/browser.js +3 -1
  5. package/dist/browser-process/browser.js.map +1 -1
  6. package/dist/fingerprinting/fingerprint-injector.d.ts +7 -1
  7. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  8. package/dist/fingerprinting/fingerprint-injector.js +92 -12
  9. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  10. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -1
  11. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +16 -1
  12. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
  13. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -1
  14. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +18 -1
  15. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -1
  16. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -1
  17. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +16 -1
  18. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -1
  19. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -1
  20. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +16 -1
  21. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -1
  22. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
  23. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +16 -1
  24. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
  25. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -1
  26. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +13 -3
  27. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -1
  28. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +1 -0
  29. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  30. package/dist/fingerprinting/fingerprint-overrides/index.js +1 -0
  31. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  32. package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts +14 -0
  33. package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.d.ts.map +1 -0
  34. package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js +160 -0
  35. package/dist/fingerprinting/fingerprint-overrides/media-codecs-spoofing.js.map +1 -0
  36. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
  37. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +16 -1
  38. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
  39. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -1
  40. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +16 -1
  41. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -1
  42. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  43. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +19 -17
  44. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  45. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  46. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +77 -19
  47. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  48. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
  49. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +27 -18
  50. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
  51. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  52. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +16 -4
  53. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  54. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
  55. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +16 -2
  56. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
  57. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
  58. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +20 -9
  59. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
  60. package/dist/tsconfig.build.tsbuildinfo +1 -1
  61. package/package.json +1 -1
@@ -41,24 +41,19 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
41
41
  bitness = '64';
42
42
  wow64 = false;
43
43
  }
44
- // Chrome version - use generated data if available, otherwise defaults
45
- const chromeVersion = generatedUAData?.uaFullVersion?.split('.')[0] || '134';
46
- const fullVersion = generatedUAData?.uaFullVersion || '134.0.6998.88';
44
+ // Chrome version - use generated data if available.
45
+ // When no generated data, we parse the version from navigator.userAgent at runtime
46
+ // to ensure JS-side brands match the HTTP-level Sec-CH-UA headers set by
47
+ // Network.setUserAgentOverride (which also parses from the UA string).
48
+ const hasGeneratedVersion = !!generatedUAData?.uaFullVersion;
49
+ const fullVersion = generatedUAData?.uaFullVersion || '';
47
50
  // Brands - use generated data if available
48
51
  const brandsJson = generatedUAData?.brands
49
52
  ? JSON.stringify(generatedUAData.brands)
50
- : JSON.stringify([
51
- { brand: "Google Chrome", version: chromeVersion },
52
- { brand: "Chromium", version: chromeVersion },
53
- { brand: "Not_A Brand", version: "24" },
54
- ]);
53
+ : '';
55
54
  const fullVersionListJson = generatedUAData?.fullVersionList
56
55
  ? JSON.stringify(generatedUAData.fullVersionList)
57
- : JSON.stringify([
58
- { brand: "Google Chrome", version: fullVersion },
59
- { brand: "Chromium", version: fullVersion },
60
- { brand: "Not_A Brand", version: "24.0.0.0" },
61
- ]);
56
+ : '';
62
57
  return `
63
58
  (() => {
64
59
  'use strict';
@@ -67,14 +62,28 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
67
62
  // CRITICAL: Must match the platform spoofing and userAgent
68
63
 
69
64
  const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
70
-
71
- // Brand list - from generated fingerprint or hardcoded defaults
65
+
66
+ // Parse Chrome version from UA at runtime to stay in sync with
67
+ // HTTP-level Sec-CH-UA set by Network.setUserAgentOverride.
68
+ const _parsedMatch = navigator.userAgent.match(/Chrome\\/([\\d.]+)/);
69
+ const _rtFullVersion = _parsedMatch ? _parsedMatch[1] : '134.0.6998.88';
70
+ const _rtMajorVersion = _rtFullVersion.split('.')[0];
71
+
72
+ // Brand list - from generated fingerprint or derived from UA at runtime
72
73
  const brands = Object.freeze(
73
- ${brandsJson}.map(b => Object.freeze(b))
74
+ ${brandsJson || `[
75
+ { brand: "Google Chrome", version: _rtMajorVersion },
76
+ { brand: "Chromium", version: _rtMajorVersion },
77
+ { brand: "Not_A Brand", version: "24" },
78
+ ]`}.map(b => Object.freeze(b))
74
79
  );
75
80
 
76
81
  const fullVersionList = Object.freeze(
77
- ${fullVersionListJson}.map(b => Object.freeze(b))
82
+ ${fullVersionListJson || `[
83
+ { brand: "Google Chrome", version: _rtFullVersion },
84
+ { brand: "Chromium", version: _rtFullVersion },
85
+ { brand: "Not_A Brand", version: "24.0.0.0" },
86
+ ]`}.map(b => Object.freeze(b))
78
87
  );
79
88
 
80
89
  const mobile = false;
@@ -94,7 +103,7 @@ export const createUAClientHintsSpoofingScript = (platform = 'Win32', generatedU
94
103
  model: "",
95
104
  platform: platformData,
96
105
  platformVersion: platformVersion,
97
- uaFullVersion: "${fullVersion}",
106
+ uaFullVersion: ${hasGeneratedVersion ? `"${fullVersion}"` : '_rtFullVersion'},
98
107
  wow64: wow64,
99
108
  formFactor: []
100
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ua-ch.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/ua-ch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ua-ch.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/ua-ch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC7C,QAAQ,GAAG,OAAO,EAClB,eAAmC,EAC7B,EAAE;IACR,oEAAoE;IACpE,+DAA+D;IAC/D,IAAI,YAAoB,CAAC;IACzB,IAAI,eAAuB,CAAC;IAC5B,IAAI,YAAoB,CAAC;IACzB,IAAI,OAAe,CAAC;IACpB,IAAI,KAAc,CAAC;IAEnB,IAAI,eAAe,EAAE,CAAC;QAClB,YAAY,GAAG,eAAe,CAAC,QAAQ,IAAI,SAAS,CAAC;QACrD,eAAe,GAAG,eAAe,CAAC,eAAe,IAAI,QAAQ,CAAC;QAC9D,YAAY,GAAG,eAAe,CAAC,YAAY,IAAI,KAAK,CAAC;QACrD,OAAO,GAAG,eAAe,CAAC,OAAO,IAAI,IAAI,CAAC;QAC1C,KAAK,GAAG,eAAe,CAAC,KAAK,IAAI,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAC5D,YAAY,GAAG,SAAS,CAAC;QACzB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,QAAQ,CAAC;QAC3B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,YAAY,GAAG,OAAO,CAAC;QACvB,eAAe,GAAG,OAAO,CAAC;QAC1B,YAAY,GAAG,KAAK,CAAC;QACrB,OAAO,GAAG,IAAI,CAAC;QACf,KAAK,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,oDAAoD;IACpD,mFAAmF;IACnF,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,mBAAmB,GAAG,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC;IAC7D,MAAM,WAAW,GAAG,eAAe,EAAE,aAAa,IAAI,EAAE,CAAC;IAEzD,2CAA2C;IAC3C,MAAM,UAAU,GAAG,eAAe,EAAE,MAAM;QACtC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,mBAAmB,GAAG,eAAe,EAAE,eAAe;QACxD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,eAAe,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;;;;;;;;;;;;;;;;;UAiBD,UAAU,IAAI;;;;UAId;;;;UAIA,mBAAmB,IAAI;;;;UAIvB;;;;4BAIkB,YAAY;+BACT,eAAe;4BAClB,YAAY;uBACjB,OAAO;oBACV,KAAK;;;;;;;;;;;;yBAYA,mBAAmB,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkHnF,CAAC;AACF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,yBAAyB,sBAAuB,WAAW,KAAG,MAkN1E,CAAC"}
1
+ {"version":3,"file":"webgl-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,yBAAyB,sBAAuB,WAAW,KAAG,MA8N1E,CAAC"}
@@ -86,10 +86,22 @@ export const createWebGLSpoofingScript = (fingerprintWebGL) => {
86
86
  const config = gpuConfigs[platform] || gpuConfigs['Win32'];
87
87
 
88
88
  // Select a consistent vendor/renderer pair per session.
89
- // Use Date.now() XOR'd with UA hash so different sessions get different GPUs
90
- // even with the same user agent (avoids mass correlation).
91
- const uaHash = (navigator.userAgent || '').split('').reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0);
92
- const sessionSeed = (Date.now() ^ uaHash) >>> 0;
89
+ // Stable seed: must NOT use Date.now() because this script re-executes on
90
+ // every reload via addScriptToEvaluateOnNewDocument.
91
+ const _stableHash = (salt) => {
92
+ const _s = typeof __stealth !== 'undefined' ? __stealth : {};
93
+ const key = _s.seedKey || '';
94
+ const ua = navigator.userAgent || '';
95
+ const s = screen;
96
+ let h = salt | 0;
97
+ for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
98
+ for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
99
+ h = (h << 5) - h + (s.width || 0) | 0;
100
+ h = (h << 5) - h + (s.height || 0) | 0;
101
+ h = (h << 5) - h + (s.colorDepth || 0) | 0;
102
+ return h >>> 0;
103
+ };
104
+ const sessionSeed = _stableHash(0xCAFE1002);
93
105
  const seededIdx = sessionSeed % config.vendorPairs.length;
94
106
  const selectedPair = config.vendorPairs[seededIdx];
95
107
  const selectedVendor = selectedPair.vendor;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,gBAA8B,EAAU,EAAE;IAChF,iFAAiF;IACjF,MAAM,cAAc,GAAG,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAElH,OAAO;;;;;;;;;;UAUD,cAAc,CAAC,CAAC,CAAC;;oCAES,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;SAI3D,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA2EH;;;;;;;;;;;;;;yBAcgB,cAAc,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU;;;yBAGxF,cAAc,IAAI,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2CjH,CAAC,cAAc,CAAC,CAAC,CAAC;;;;;;;;;SASnB,CAAC,CAAC,CAAC;;SAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2CH,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"webgl-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgl-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,gBAA8B,EAAU,EAAE;IAChF,iFAAiF;IACjF,MAAM,cAAc,GAAG,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,cAAc,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAElH,OAAO;;;;;;;;;;UAUD,cAAc,CAAC,CAAC,CAAC;;oCAES,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;;;;SAI3D,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAuFH;;;;;;;;;;;;;;yBAcgB,cAAc,IAAI,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU;;;yBAGxF,cAAc,IAAI,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA2CjH,CAAC,cAAc,CAAC,CAAC,CAAC;;;;;;;;;SASnB,CAAC,CAAC,CAAC;;SAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2CH,CAAC;AACP,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,kCAA+B,MAoMrE,CAAC"}
1
+ {"version":3,"file":"webgpu-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,kCAA+B,MAkNrE,CAAC"}
@@ -22,8 +22,22 @@ export const createWebGPUSpoofingScript = (experimentalMode = false) => {
22
22
  ` : ''}
23
23
 
24
24
  // Standard mode: spoof WebGPU
25
- // Session-stable seeded PRNG to ensure consistent GPU selection across navigations
26
- const sessionSeed = Date.now() ^ 0xD4E5F617;
25
+ // Stable seed: must NOT use Date.now() because this script re-executes on
26
+ // every reload via addScriptToEvaluateOnNewDocument.
27
+ const _stableHash = (salt) => {
28
+ const _s = typeof __stealth !== 'undefined' ? __stealth : {};
29
+ const key = _s.seedKey || '';
30
+ const ua = navigator.userAgent || '';
31
+ const s = screen;
32
+ let h = salt | 0;
33
+ for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
34
+ 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;
38
+ return h >>> 0;
39
+ };
40
+ const sessionSeed = _stableHash(0xCAFE1004);
27
41
  const createSeededRNG = (seed) => {
28
42
  let s = seed | 0;
29
43
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAgB,GAAG,KAAK,EAAU,EAAE;IAC3E,OAAO;;;;;;;UAOD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;SASpB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkLR,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"webgpu-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webgpu-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,gBAAgB,GAAG,KAAK,EAAU,EAAE;IAC3E,OAAO;;;;;;;UAOD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;SASpB,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgMR,CAAC;AACP,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,MAsL7C,CAAC"}
1
+ {"version":3,"file":"webrtc-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,0BAA0B,QAAO,MAiM7C,CAAC"}
@@ -19,20 +19,31 @@ export const createWebRTCSpoofingScript = () => {
19
19
  return ((t ^ t >>> 14) >>> 0) / 4294967296;
20
20
  };
21
21
  };
22
- const sessionSeed = Date.now() ^ 0xC3A5F917;
22
+ // Stable seed: must NOT use Date.now() because this script re-executes on
23
+ // every reload via addScriptToEvaluateOnNewDocument.
24
+ const _stableHash = (salt) => {
25
+ const _s = typeof __stealth !== 'undefined' ? __stealth : {};
26
+ const key = _s.seedKey || '';
27
+ const ua = navigator.userAgent || '';
28
+ const s = screen;
29
+ let h = salt | 0;
30
+ for (let i = 0; i < key.length; i++) h = (h << 5) - h + key.charCodeAt(i) | 0;
31
+ for (let i = 0; i < ua.length; i++) h = (h << 5) - h + ua.charCodeAt(i) | 0;
32
+ h = (h << 5) - h + (s.width || 0) | 0;
33
+ h = (h << 5) - h + (s.height || 0) | 0;
34
+ h = (h << 5) - h + (s.colorDepth || 0) | 0;
35
+ return h >>> 0;
36
+ };
37
+ const sessionSeed = _stableHash(0xCAFE1006);
23
38
  const seededRandom = createSeededRNG(sessionSeed);
24
39
 
25
- // Generate crypto-quality random hex device IDs (64 chars)
40
+ // Generate deterministic hex device IDs (64 chars) using the seeded PRNG.
41
+ // Must NOT use crypto.getRandomValues or Math.random because the cache resets
42
+ // on every reload (addScriptToEvaluateOnNewDocument re-runs).
26
43
  const generateDeviceId = () => {
27
- if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
28
- const bytes = new Uint8Array(32);
29
- crypto.getRandomValues(bytes);
30
- return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
31
- }
32
- // Fallback: combine Date.now, Math.random, and performance.now for entropy
33
44
  let id = '';
34
45
  for (let i = 0; i < 64; i++) {
35
- id += Math.floor(Math.random() * 16).toString(16);
46
+ id += Math.floor(seededRandom() * 16).toString(16);
36
47
  }
37
48
  return id;
38
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoLL,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"webrtc-spoofing.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/webrtc-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAW,EAAE;IACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+LL,CAAC;AACP,CAAC,CAAC"}