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.
- package/README.md +13 -0
- package/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +52 -2
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +31 -0
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +76 -1
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/anti-detect-browser.d.ts +56 -0
- package/dist/browser-process/anti-detect-browser.d.ts.map +1 -0
- package/dist/browser-process/anti-detect-browser.js +134 -0
- package/dist/browser-process/anti-detect-browser.js.map +1 -0
- package/dist/browser-process/anti-detect-config.d.ts +84 -0
- package/dist/browser-process/anti-detect-config.d.ts.map +1 -0
- package/dist/browser-process/anti-detect-config.js +178 -0
- package/dist/browser-process/anti-detect-config.js.map +1 -0
- package/dist/browser-process/browser.d.ts +19 -0
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +83 -4
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-process/get-chrome-executable.d.ts +7 -0
- package/dist/browser-process/get-chrome-executable.d.ts.map +1 -1
- package/dist/browser-process/get-chrome-executable.js +42 -0
- package/dist/browser-process/get-chrome-executable.js.map +1 -1
- package/dist/browser-process/index.d.ts +4 -1
- package/dist/browser-process/index.d.ts.map +1 -1
- package/dist/browser-process/index.js +3 -1
- package/dist/browser-process/index.js.map +1 -1
- package/dist/crawler.d.ts +2 -0
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +5 -2
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.d.ts +39 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +141 -50
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +16 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +3 -2
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +18 -10
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +5 -8
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +12 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +27 -22
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +86 -28
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +165 -33
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +10 -8
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +9 -7
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +6 -6
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/utils.js +44 -1
- package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +43 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +9 -1
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +14 -3
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
- package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts +32 -0
- package/dist/fingerprinting/non-apify-fingerprint-generator.d.ts.map +1 -0
- package/dist/fingerprinting/non-apify-fingerprint-generator.js +480 -0
- package/dist/fingerprinting/non-apify-fingerprint-generator.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +11 -2
- 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
|
|
131
|
+
// Client Hints - dynamically matched to actual Chrome UA (computed above)
|
|
125
132
|
brands: [
|
|
126
|
-
{ brand: '
|
|
127
|
-
{ brand: '
|
|
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: '
|
|
132
|
-
{ brand: '
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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(
|
|
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
|
|
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;
|
|
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;
|
|
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,
|
|
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
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
//
|
|
16
|
-
const
|
|
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
|
-
|
|
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
|
|
32
|
-
let h =
|
|
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 + (
|
|
36
|
-
h = (h << 5) - h + (
|
|
37
|
-
h = (h << 5) - h + (
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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,
|
|
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"}
|