jumpy-lion 0.0.40 → 0.0.42
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/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +102 -16
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +26 -1
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +25 -2
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +24 -1
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +79 -6
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-profiles/chrome/default.d.ts +116 -0
- package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
- package/dist/browser-profiles/chrome/default.js +118 -1
- package/dist/browser-profiles/chrome/default.js.map +1 -1
- package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
- package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
- package/dist/browser-profiles/chrome/populate-profile.js +300 -0
- package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
- package/dist/browser-profiles/index.d.ts +1 -0
- package/dist/browser-profiles/index.d.ts.map +1 -1
- package/dist/browser-profiles/index.js +2 -0
- package/dist/browser-profiles/index.js.map +1 -1
- package/dist/crawler.d.ts +34 -1
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +7 -0
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
- package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
- package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts +40 -2
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-injector.js +449 -44
- 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 +11 -1
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +497 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +536 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +16 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +19 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +291 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +54 -22
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +4 -5
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +11 -1
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +413 -70
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +10 -3
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +132 -73
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +380 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +8 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +417 -71
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +368 -0
- package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +438 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js +315 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +13 -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 +11 -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 +11 -1
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
- package/dist/page.d.ts +12 -0
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +35 -3
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/dist/fingerprinting/canvas-fingerprint.d.ts +0 -4
- package/dist/fingerprinting/canvas-fingerprint.d.ts.map +0 -1
- package/dist/fingerprinting/canvas-fingerprint.js +0 -60
- package/dist/fingerprinting/canvas-fingerprint.js.map +0 -1
|
@@ -61,46 +61,57 @@
|
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
63
|
import { log } from 'crawlee';
|
|
64
|
-
import { FingerprintInjector } from 'fingerprint-injector';
|
|
65
64
|
import { gotScraping } from 'got-scraping';
|
|
66
|
-
import {
|
|
65
|
+
import { createCustomFingerprintInjection } from './custom-fingerprint-injector.js';
|
|
66
|
+
import { createStealthScript, createWebGLSpoofingScript, createAudioFingerprintSpoofingScript, createAdvancedCanvasProtectionScript, createClientRectSpoofingScript, createWebRTCSpoofingScript, createWebGPUSpoofingScript, createPlatformConsistencyScript, setupMouseMovementHumanization, createRuntimeEnableBypassScript, createFontSpoofingScript, createPerformanceSpoofingScript, createLocaleSpoofingScript, createUAClientHintsSpoofingScript,
|
|
67
|
+
// Stealth utilities (must be injected first)
|
|
68
|
+
createStealthUtilsScript,
|
|
69
|
+
// 2024-2025 New modules
|
|
70
|
+
createCDPDetectionBypassScript, createStorageConsistencyScript, createTimingConsistencyScript, createKeyboardHumanizationScript, createScrollHumanizationScript, createDataDomeBypassScript, setupKeyboardHumanization, setupScrollHumanization, } from './fingerprint-overrides/index.js';
|
|
67
71
|
export class CdpFingerprintInjector {
|
|
68
72
|
constructor(page) {
|
|
69
|
-
Object.defineProperty(this, "injector", {
|
|
70
|
-
enumerable: true,
|
|
71
|
-
configurable: true,
|
|
72
|
-
writable: true,
|
|
73
|
-
value: void 0
|
|
74
|
-
});
|
|
75
73
|
Object.defineProperty(this, "page", {
|
|
76
74
|
enumerable: true,
|
|
77
75
|
configurable: true,
|
|
78
76
|
writable: true,
|
|
79
77
|
value: void 0
|
|
80
78
|
});
|
|
81
|
-
this.injector = new FingerprintInjector();
|
|
82
79
|
this.page = page;
|
|
83
80
|
}
|
|
84
81
|
/**
|
|
85
82
|
* Get recommended settings for Apify platform
|
|
86
83
|
* These settings are optimized for running headful Chrome on Apify (Linux)
|
|
87
|
-
* but spoofed to appear as Windows for better anti-bot evasion
|
|
84
|
+
* but spoofed to appear as Windows for better anti-bot evasion.
|
|
85
|
+
*
|
|
86
|
+
* Note: Humanization is disabled by default for performance.
|
|
87
|
+
* Use getDataDomeSettings() or enable humanization manually for anti-bot sites.
|
|
88
88
|
*/
|
|
89
89
|
static getApifyRecommendedSettings() {
|
|
90
90
|
return {
|
|
91
|
+
debug: true, // Enable debug logging by default
|
|
91
92
|
enableAdvancedStealth: true,
|
|
92
93
|
bypassRuntimeEnable: true,
|
|
93
94
|
platform: 'Win32', // Spoof as Windows instead of Linux for better evasion
|
|
94
95
|
spoofWebGL: true,
|
|
95
96
|
spoofAudioContext: true,
|
|
96
97
|
spoofClientRects: true,
|
|
97
|
-
humanizeInteractions: true,
|
|
98
98
|
detectTimezone: true, // Auto-detect timezone from proxy
|
|
99
99
|
// New advanced spoofing options for 2025
|
|
100
100
|
spoofFonts: true,
|
|
101
101
|
spoofPerformance: true,
|
|
102
102
|
spoofLocale: true,
|
|
103
103
|
useFingerprintDefaults: true, // Use fingerprint-generator Windows values
|
|
104
|
+
// 2024-2025 DataDome bypass options
|
|
105
|
+
bypassCDPDetection: true,
|
|
106
|
+
spoofStorage: true,
|
|
107
|
+
spoofTiming: true,
|
|
108
|
+
enableDataDomeBypass: false, // Enable only when needed
|
|
109
|
+
// Humanization disabled by default for performance
|
|
110
|
+
humanization: {
|
|
111
|
+
mouse: false,
|
|
112
|
+
keyboard: false,
|
|
113
|
+
scroll: false,
|
|
114
|
+
},
|
|
104
115
|
viewport: {
|
|
105
116
|
width: 1920,
|
|
106
117
|
height: 1080,
|
|
@@ -109,20 +120,85 @@ export class CdpFingerprintInjector {
|
|
|
109
120
|
},
|
|
110
121
|
};
|
|
111
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Get settings specifically optimized for DataDome-protected sites.
|
|
125
|
+
* Enables all humanization features for maximum anti-bot evasion.
|
|
126
|
+
*/
|
|
127
|
+
static getDataDomeSettings() {
|
|
128
|
+
return {
|
|
129
|
+
...this.getApifyRecommendedSettings(),
|
|
130
|
+
debug: true, // Enable debug logging by default
|
|
131
|
+
// DataDome-specific optimizations
|
|
132
|
+
enableDataDomeBypass: true,
|
|
133
|
+
bypassCDPDetection: true,
|
|
134
|
+
spoofStorage: true,
|
|
135
|
+
spoofTiming: true,
|
|
136
|
+
// Enable all humanization for DataDome bypass
|
|
137
|
+
humanization: {
|
|
138
|
+
mouse: true,
|
|
139
|
+
keyboard: true,
|
|
140
|
+
scroll: true,
|
|
141
|
+
},
|
|
142
|
+
// Ensure all fingerprint attributes are consistent
|
|
143
|
+
spoofWebGL: true,
|
|
144
|
+
spoofAudioContext: true,
|
|
145
|
+
spoofClientRects: true,
|
|
146
|
+
spoofFonts: true,
|
|
147
|
+
spoofPerformance: true,
|
|
148
|
+
spoofLocale: true,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
112
151
|
static async injectFingerprint(page, fingerprint, options) {
|
|
113
152
|
const handler = new CdpFingerprintInjector(page);
|
|
114
153
|
return handler.attachToPage(fingerprint, options);
|
|
115
154
|
}
|
|
116
|
-
async setViewport(viewport) {
|
|
117
|
-
|
|
155
|
+
async setViewport(viewport, fingerprint) {
|
|
156
|
+
// IMPORTANT: In headful mode, don't override viewport - it creates weird compressed layouts
|
|
157
|
+
// The browser window already has natural dimensions from the OS
|
|
158
|
+
// Only override viewport in headless mode where window size needs to be set
|
|
159
|
+
// Check if we're in headless mode
|
|
160
|
+
// In headful mode, we skip viewport override to avoid layout issues
|
|
161
|
+
const isHeadless = process.env.APIFY_HEADLESS === '1' ||
|
|
162
|
+
process.env.CRAWLEE_HEADLESS === '1' ||
|
|
163
|
+
process.env.HEADLESS === 'true';
|
|
164
|
+
if (!isHeadless) {
|
|
165
|
+
log.info('⚠️ Headful mode detected - SKIPPING viewport override to preserve natural window behavior');
|
|
166
|
+
log.info('✅ Browser will use OS window dimensions - scrolling will work naturally');
|
|
167
|
+
return; // Skip viewport override in headful mode
|
|
168
|
+
}
|
|
169
|
+
// Only apply viewport override in headless mode
|
|
170
|
+
log.info('Headless mode detected - applying viewport override');
|
|
171
|
+
let defaultViewport = {
|
|
118
172
|
width: 1920,
|
|
119
173
|
height: 1080,
|
|
120
174
|
deviceScaleFactor: 1,
|
|
121
175
|
mobile: false,
|
|
122
176
|
};
|
|
177
|
+
// Extract from fingerprint if available
|
|
178
|
+
if (fingerprint?.screen) {
|
|
179
|
+
// IMPORTANT: Set viewport height SMALLER than screen height to allow scrolling
|
|
180
|
+
// Reserve 150px for browser chrome, URL bar, and overflow space
|
|
181
|
+
const screenHeight = fingerprint.screen.height || 1080;
|
|
182
|
+
const viewportHeight = screenHeight - 150;
|
|
183
|
+
defaultViewport = {
|
|
184
|
+
width: fingerprint.screen.width || 1920,
|
|
185
|
+
height: viewportHeight,
|
|
186
|
+
deviceScaleFactor: fingerprint.screen.devicePixelRatio || 1,
|
|
187
|
+
mobile: false,
|
|
188
|
+
};
|
|
189
|
+
log.info('Viewport configured for scrolling', {
|
|
190
|
+
screenHeight,
|
|
191
|
+
viewportHeight,
|
|
192
|
+
reservedSpace: 150,
|
|
193
|
+
width: defaultViewport.width,
|
|
194
|
+
deviceScaleFactor: defaultViewport.deviceScaleFactor,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
123
197
|
const finalViewport = Object.assign(defaultViewport, viewport);
|
|
124
|
-
|
|
198
|
+
log.info('Final viewport settings (headless mode)', finalViewport);
|
|
199
|
+
// CDP call to override device metrics (headless mode only)
|
|
125
200
|
await this.page.client.Emulation.setDeviceMetricsOverride(finalViewport);
|
|
201
|
+
log.info('setDeviceMetricsOverride completed (headless mode)');
|
|
126
202
|
}
|
|
127
203
|
async setExtraHTTPHeaders(headers) {
|
|
128
204
|
await this.page.client.Network.setExtraHTTPHeaders({ headers });
|
|
@@ -150,18 +226,140 @@ export class CdpFingerprintInjector {
|
|
|
150
226
|
const stealthScript = createStealthScript();
|
|
151
227
|
await this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: stealthScript });
|
|
152
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Create a debug script that logs fingerprint override status to the console
|
|
231
|
+
*/
|
|
232
|
+
createDebugScript(options) {
|
|
233
|
+
return `
|
|
234
|
+
(() => {
|
|
235
|
+
// CDP Fingerprint Override Debug Logs
|
|
236
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
237
|
+
|
|
238
|
+
console.log(DEBUG_PREFIX, '=== Fingerprint Override Status ===');
|
|
239
|
+
console.log(DEBUG_PREFIX, 'Timestamp:', new Date().toISOString());
|
|
240
|
+
|
|
241
|
+
// Check navigator properties
|
|
242
|
+
console.log(DEBUG_PREFIX, 'Navigator Checks:');
|
|
243
|
+
console.log(DEBUG_PREFIX, ' - platform:', navigator.platform);
|
|
244
|
+
console.log(DEBUG_PREFIX, ' - userAgent:', navigator.userAgent.substring(0, 80) + '...');
|
|
245
|
+
console.log(DEBUG_PREFIX, ' - webdriver:', navigator.webdriver);
|
|
246
|
+
console.log(DEBUG_PREFIX, ' - hardwareConcurrency:', navigator.hardwareConcurrency);
|
|
247
|
+
console.log(DEBUG_PREFIX, ' - deviceMemory:', navigator.deviceMemory);
|
|
248
|
+
console.log(DEBUG_PREFIX, ' - language:', navigator.language);
|
|
249
|
+
console.log(DEBUG_PREFIX, ' - languages:', navigator.languages);
|
|
250
|
+
console.log(DEBUG_PREFIX, ' - maxTouchPoints:', navigator.maxTouchPoints);
|
|
251
|
+
console.log(DEBUG_PREFIX, ' - pdfViewerEnabled:', navigator.pdfViewerEnabled);
|
|
252
|
+
console.log(DEBUG_PREFIX, ' - plugins.length:', navigator.plugins?.length);
|
|
253
|
+
|
|
254
|
+
// Check screen properties
|
|
255
|
+
console.log(DEBUG_PREFIX, 'Screen Checks:');
|
|
256
|
+
console.log(DEBUG_PREFIX, ' - colorDepth:', screen.colorDepth);
|
|
257
|
+
console.log(DEBUG_PREFIX, ' - pixelDepth:', screen.pixelDepth);
|
|
258
|
+
console.log(DEBUG_PREFIX, ' - availWidth:', screen.availWidth);
|
|
259
|
+
console.log(DEBUG_PREFIX, ' - availHeight:', screen.availHeight);
|
|
260
|
+
console.log(DEBUG_PREFIX, ' - devicePixelRatio:', window.devicePixelRatio);
|
|
261
|
+
|
|
262
|
+
// Check window properties
|
|
263
|
+
console.log(DEBUG_PREFIX, 'Window Checks:');
|
|
264
|
+
console.log(DEBUG_PREFIX, ' - outerWidth:', window.outerWidth);
|
|
265
|
+
console.log(DEBUG_PREFIX, ' - outerHeight:', window.outerHeight);
|
|
266
|
+
console.log(DEBUG_PREFIX, ' - screenX:', window.screenX);
|
|
267
|
+
console.log(DEBUG_PREFIX, ' - screenY:', window.screenY);
|
|
268
|
+
|
|
269
|
+
// Check chrome object
|
|
270
|
+
console.log(DEBUG_PREFIX, 'Chrome Object:');
|
|
271
|
+
console.log(DEBUG_PREFIX, ' - chrome exists:', typeof window.chrome !== 'undefined');
|
|
272
|
+
console.log(DEBUG_PREFIX, ' - chrome.runtime exists:', typeof window.chrome?.runtime !== 'undefined');
|
|
273
|
+
|
|
274
|
+
// Check WebGL
|
|
275
|
+
try {
|
|
276
|
+
const canvas = document.createElement('canvas');
|
|
277
|
+
const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
|
|
278
|
+
if (gl) {
|
|
279
|
+
const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
|
|
280
|
+
if (debugInfo) {
|
|
281
|
+
console.log(DEBUG_PREFIX, 'WebGL Checks:');
|
|
282
|
+
console.log(DEBUG_PREFIX, ' - vendor:', gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL));
|
|
283
|
+
console.log(DEBUG_PREFIX, ' - renderer:', gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL));
|
|
284
|
+
} else {
|
|
285
|
+
console.log(DEBUG_PREFIX, 'WebGL debug extension not available');
|
|
286
|
+
}
|
|
287
|
+
} else {
|
|
288
|
+
console.log(DEBUG_PREFIX, 'WebGL context not available');
|
|
289
|
+
}
|
|
290
|
+
} catch (e) {
|
|
291
|
+
console.log(DEBUG_PREFIX, 'WebGL check failed:', e.message);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Check automation markers
|
|
295
|
+
console.log(DEBUG_PREFIX, 'Automation Marker Checks:');
|
|
296
|
+
console.log(DEBUG_PREFIX, ' - $cdc_ properties:', Object.keys(window).filter(k => k.startsWith('$cdc_') || k.startsWith('cdc_')).length === 0 ? 'CLEAN' : 'DETECTED');
|
|
297
|
+
console.log(DEBUG_PREFIX, ' - webdriver properties:', Object.keys(window).filter(k => k.toLowerCase().includes('webdriver')).length === 0 ? 'CLEAN' : 'DETECTED');
|
|
298
|
+
|
|
299
|
+
// Check permissions API
|
|
300
|
+
if (navigator.permissions) {
|
|
301
|
+
navigator.permissions.query({ name: 'notifications' }).then(result => {
|
|
302
|
+
console.log(DEBUG_PREFIX, 'Permissions:');
|
|
303
|
+
console.log(DEBUG_PREFIX, ' - notifications:', result.state);
|
|
304
|
+
}).catch(e => {
|
|
305
|
+
console.log(DEBUG_PREFIX, 'Permissions check failed:', e.message);
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Check storage estimate
|
|
310
|
+
if (navigator.storage && navigator.storage.estimate) {
|
|
311
|
+
navigator.storage.estimate().then(estimate => {
|
|
312
|
+
console.log(DEBUG_PREFIX, 'Storage:');
|
|
313
|
+
console.log(DEBUG_PREFIX, ' - quota:', Math.round(estimate.quota / 1024 / 1024 / 1024) + ' GB');
|
|
314
|
+
console.log(DEBUG_PREFIX, ' - usage:', Math.round(estimate.usage / 1024) + ' KB');
|
|
315
|
+
}).catch(e => {
|
|
316
|
+
console.log(DEBUG_PREFIX, 'Storage check failed:', e.message);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Log applied options
|
|
321
|
+
console.log(DEBUG_PREFIX, 'Applied Options:');
|
|
322
|
+
console.log(DEBUG_PREFIX, ' - platform:', '${options.platform || "auto"}');
|
|
323
|
+
console.log(DEBUG_PREFIX, ' - enableAdvancedStealth:', ${options.enableAdvancedStealth !== false});
|
|
324
|
+
console.log(DEBUG_PREFIX, ' - bypassCDPDetection:', ${options.bypassCDPDetection !== false});
|
|
325
|
+
console.log(DEBUG_PREFIX, ' - spoofStorage:', ${options.spoofStorage !== false});
|
|
326
|
+
console.log(DEBUG_PREFIX, ' - spoofTiming:', ${options.spoofTiming !== false});
|
|
327
|
+
console.log(DEBUG_PREFIX, ' - enableDataDomeBypass:', ${options.enableDataDomeBypass || false});
|
|
328
|
+
console.log(DEBUG_PREFIX, ' - humanization.mouse:', ${options.humanization?.mouse || false});
|
|
329
|
+
console.log(DEBUG_PREFIX, ' - humanization.keyboard:', ${options.humanization?.keyboard || false});
|
|
330
|
+
console.log(DEBUG_PREFIX, ' - humanization.scroll:', ${options.humanization?.scroll || false});
|
|
331
|
+
|
|
332
|
+
console.log(DEBUG_PREFIX, '=== End Fingerprint Override Status ===');
|
|
333
|
+
|
|
334
|
+
// Store debug info globally for later inspection
|
|
335
|
+
window.__CDP_FINGERPRINT_DEBUG__ = {
|
|
336
|
+
timestamp: new Date().toISOString(),
|
|
337
|
+
platform: navigator.platform,
|
|
338
|
+
webdriver: navigator.webdriver,
|
|
339
|
+
deviceMemory: navigator.deviceMemory,
|
|
340
|
+
hardwareConcurrency: navigator.hardwareConcurrency,
|
|
341
|
+
appliedOptions: {
|
|
342
|
+
platform: '${options.platform || "auto"}',
|
|
343
|
+
enableAdvancedStealth: ${options.enableAdvancedStealth !== false},
|
|
344
|
+
bypassCDPDetection: ${options.bypassCDPDetection !== false},
|
|
345
|
+
enableDataDomeBypass: ${options.enableDataDomeBypass || false},
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
})();
|
|
349
|
+
`;
|
|
350
|
+
}
|
|
153
351
|
/**
|
|
154
352
|
* Extract relevant data from fingerprint for overrides
|
|
155
353
|
*/
|
|
156
354
|
extractFingerprintData(fingerprint) {
|
|
157
355
|
const webglConfig = {};
|
|
158
356
|
const platformConfig = {};
|
|
159
|
-
// Extract WebGL data if available
|
|
160
|
-
if (fingerprint.
|
|
161
|
-
webglConfig.vendor = fingerprint.
|
|
162
|
-
webglConfig.renderer = fingerprint.
|
|
163
|
-
webglConfig.vendorUnmasked = fingerprint.
|
|
164
|
-
webglConfig.rendererUnmasked = fingerprint.
|
|
357
|
+
// Extract WebGL data from videoCard if available
|
|
358
|
+
if (fingerprint.videoCard) {
|
|
359
|
+
webglConfig.vendor = fingerprint.videoCard.vendor;
|
|
360
|
+
webglConfig.renderer = fingerprint.videoCard.renderer;
|
|
361
|
+
webglConfig.vendorUnmasked = fingerprint.videoCard.vendor;
|
|
362
|
+
webglConfig.rendererUnmasked = fingerprint.videoCard.renderer;
|
|
165
363
|
}
|
|
166
364
|
// Extract platform data if available
|
|
167
365
|
if (fingerprint.navigator) {
|
|
@@ -174,6 +372,12 @@ export class CdpFingerprintInjector {
|
|
|
174
372
|
platformConfig.language = fingerprint.navigator.language;
|
|
175
373
|
platformConfig.languages = fingerprint.navigator.languages;
|
|
176
374
|
platformConfig.oscpu = fingerprint.navigator.oscpu;
|
|
375
|
+
// Extract userAgent and related properties from generated fingerprint
|
|
376
|
+
platformConfig.userAgent = fingerprint.navigator.userAgent;
|
|
377
|
+
platformConfig.appVersion = fingerprint.navigator.appVersion;
|
|
378
|
+
platformConfig.appName = fingerprint.navigator.appName;
|
|
379
|
+
platformConfig.appCodeName = fingerprint.navigator.appCodeName;
|
|
380
|
+
platformConfig.product = fingerprint.navigator.product;
|
|
177
381
|
}
|
|
178
382
|
if (fingerprint.screen) {
|
|
179
383
|
platformConfig.devicePixelRatio = fingerprint.screen.devicePixelRatio;
|
|
@@ -191,21 +395,36 @@ export class CdpFingerprintInjector {
|
|
|
191
395
|
if (timezone) {
|
|
192
396
|
await this.setTimezoneOverride(timezone);
|
|
193
397
|
}
|
|
194
|
-
//
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
398
|
+
// NOTE: Page.enable() is required for addScriptToEvaluateOnNewDocument to work
|
|
399
|
+
// We enable it lazily just before script injection to minimize detection surface
|
|
400
|
+
await this.page.ensurePageEnabled();
|
|
401
|
+
// Filter headers to only include those that can be injected via CDP
|
|
402
|
+
const filteredHeaders = {};
|
|
403
|
+
const allowedHeaders = ['accept', 'accept-encoding', 'accept-language', 'user-agent', 'referer', 'sec-ch-ua', 'sec-ch-ua-mobile', 'sec-ch-ua-platform'];
|
|
404
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
405
|
+
if (allowedHeaders.includes(key.toLowerCase()) && typeof value === 'string') {
|
|
406
|
+
filteredHeaders[key] = value;
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Create custom fingerprint injection scripts
|
|
410
|
+
log.info('Creating custom fingerprint injection scripts');
|
|
411
|
+
const customFingerprintScripts = createCustomFingerprintInjection(fingerprint, {
|
|
412
|
+
debug: options?.debug !== false,
|
|
413
|
+
throwOnError: true
|
|
414
|
+
});
|
|
415
|
+
// Prepare all scripts to inject - stealth utils and runtime bypass MUST be first
|
|
416
|
+
// These scripts set up protections BEFORE page JavaScript runs
|
|
417
|
+
const scriptsToInject = [
|
|
418
|
+
createStealthUtilsScript(), // Must be first - provides guards and toString spoofing
|
|
419
|
+
createRuntimeEnableBypassScript(), // Second - protects against CDP detection via Error stack analysis
|
|
420
|
+
...customFingerprintScripts, // Custom fingerprint injection replacing fingerprint-injector
|
|
421
|
+
];
|
|
205
422
|
// Always inject base stealth protections
|
|
206
423
|
await this.injectStealthProtections();
|
|
207
424
|
// Extract fingerprint data if we should use it
|
|
208
|
-
|
|
425
|
+
// When useFingerprintDefaults is true (or undefined), use hardcoded defaults
|
|
426
|
+
// When useFingerprintDefaults is false, use the generated fingerprint data
|
|
427
|
+
const shouldUseFingerprintData = options?.useFingerprintDefaults === false;
|
|
209
428
|
const { webglConfig, platformConfig } = shouldUseFingerprintData
|
|
210
429
|
? this.extractFingerprintData(fingerprint)
|
|
211
430
|
: { webglConfig: undefined, platformConfig: undefined };
|
|
@@ -243,34 +462,220 @@ export class CdpFingerprintInjector {
|
|
|
243
462
|
if (options?.spoofLocale !== false) {
|
|
244
463
|
scriptsToInject.push(createLocaleSpoofingScript());
|
|
245
464
|
}
|
|
465
|
+
// 2024-2025 New protections
|
|
466
|
+
// CDP Detection Bypass
|
|
467
|
+
if (options?.bypassCDPDetection !== false) {
|
|
468
|
+
scriptsToInject.push(createCDPDetectionBypassScript());
|
|
469
|
+
}
|
|
470
|
+
// Storage consistency
|
|
471
|
+
if (options?.spoofStorage !== false) {
|
|
472
|
+
scriptsToInject.push(createStorageConsistencyScript());
|
|
473
|
+
}
|
|
474
|
+
// Timing consistency
|
|
475
|
+
if (options?.spoofTiming !== false) {
|
|
476
|
+
scriptsToInject.push(createTimingConsistencyScript());
|
|
477
|
+
}
|
|
478
|
+
// DataDome-specific bypass
|
|
479
|
+
if (options?.enableDataDomeBypass) {
|
|
480
|
+
scriptsToInject.push(createDataDomeBypassScript());
|
|
481
|
+
}
|
|
482
|
+
// Keyboard humanization (browser context) - disabled by default
|
|
483
|
+
if (options?.humanization?.keyboard) {
|
|
484
|
+
scriptsToInject.push(createKeyboardHumanizationScript());
|
|
485
|
+
}
|
|
486
|
+
// Scroll humanization (browser context) - disabled by default
|
|
487
|
+
if (options?.humanization?.scroll) {
|
|
488
|
+
scriptsToInject.push(createScrollHumanizationScript());
|
|
489
|
+
}
|
|
246
490
|
}
|
|
247
491
|
// Apply platform consistency script
|
|
248
492
|
if (options?.platform) {
|
|
249
493
|
scriptsToInject.push(createPlatformConsistencyScript(options.platform, shouldUseFingerprintData ? platformConfig : undefined));
|
|
250
494
|
}
|
|
251
|
-
//
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
495
|
+
// CRITICAL: Clean scripts to remove CDP detection patterns
|
|
496
|
+
// Remove sourceURL comments that reveal CDP injection
|
|
497
|
+
const cleanScript = (script) => {
|
|
498
|
+
return script
|
|
499
|
+
// Remove sourceURL patterns that reveal CDP injection
|
|
500
|
+
.replace(/\/\/# sourceURL=[^\n]*/g, '')
|
|
501
|
+
.replace(/\/\/@ sourceURL=[^\n]*/g, '')
|
|
502
|
+
// Remove sourceMappingURL patterns
|
|
503
|
+
.replace(/\/\/# sourceMappingURL=[^\n]*/g, '')
|
|
504
|
+
// Remove puppeteer/playwright markers
|
|
505
|
+
.replace(/__puppeteer_evaluation_script__/g, 'anonymous')
|
|
506
|
+
.replace(/__playwright_evaluation_script__/g, 'anonymous')
|
|
507
|
+
// Remove CDP-specific comments
|
|
508
|
+
.replace(/\/\*\s*__CDP_[A-Z_]+__\s*\*\//g, '');
|
|
509
|
+
};
|
|
510
|
+
// BUNDLE ALL SCRIPTS INTO ONE to minimize CDP interactions
|
|
511
|
+
// Each addScriptToEvaluateOnNewDocument call is a detection opportunity
|
|
512
|
+
log.info(`Bundling ${scriptsToInject.length} fingerprint scripts into single injection`);
|
|
513
|
+
const bundledScript = scriptsToInject
|
|
514
|
+
.map(script => cleanScript(script))
|
|
515
|
+
.join('\n\n// --- Next Module ---\n\n');
|
|
516
|
+
// Validate bundled script for syntax errors
|
|
517
|
+
try {
|
|
518
|
+
new Function(bundledScript);
|
|
519
|
+
log.info('✓ Bundled script passed syntax validation');
|
|
520
|
+
}
|
|
521
|
+
catch (error) {
|
|
522
|
+
log.error('✗ Bundled script has syntax error:', { error });
|
|
523
|
+
// Fall back to individual script validation to find the culprit
|
|
524
|
+
scriptsToInject.forEach((script, index) => {
|
|
525
|
+
try {
|
|
526
|
+
new Function(script);
|
|
527
|
+
}
|
|
528
|
+
catch (e) {
|
|
529
|
+
const scriptPreview = script.substring(0, 300);
|
|
530
|
+
log.error(`✗ Error in script ${index + 1}:`, { error: e, scriptPreview });
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
throw new Error(`Bundled script has syntax error: ${error}`);
|
|
534
|
+
}
|
|
535
|
+
// Inject SINGLE bundled script - reduces CDP detection surface
|
|
536
|
+
try {
|
|
537
|
+
log.info('Injecting single bundled fingerprint script (minimizes CDP detection)');
|
|
538
|
+
await Promise.all([
|
|
539
|
+
this.setViewport(options?.viewport, fingerprint),
|
|
540
|
+
this.setExtraHTTPHeaders(filteredHeaders),
|
|
541
|
+
// Single script injection instead of many - reduces CDP detection surface
|
|
542
|
+
(async () => {
|
|
543
|
+
try {
|
|
544
|
+
await this.page.client.Page.addScriptToEvaluateOnNewDocument({
|
|
545
|
+
source: bundledScript
|
|
546
|
+
});
|
|
547
|
+
log.info('✓ Bundled script injected successfully');
|
|
548
|
+
}
|
|
549
|
+
catch (error) {
|
|
550
|
+
const scriptPreview = bundledScript.substring(0, 200).split('\n')[0];
|
|
551
|
+
log.error('✗ Failed to inject bundled script:', {
|
|
552
|
+
error,
|
|
553
|
+
scriptPreview,
|
|
554
|
+
});
|
|
555
|
+
throw error; // Rethrow to fail the entire injection
|
|
556
|
+
}
|
|
557
|
+
})(),
|
|
558
|
+
]);
|
|
559
|
+
log.info('✓ Fingerprint injection complete (single bundled script)');
|
|
560
|
+
}
|
|
561
|
+
catch (error) {
|
|
562
|
+
log.error('✗ Failed to inject fingerprint scripts:', { error });
|
|
563
|
+
throw error; // Rethrow to make injection failures visible
|
|
564
|
+
}
|
|
565
|
+
// Setup mouse movement humanization if requested (disabled by default)
|
|
566
|
+
// Support both legacy humanizeInteractions and new humanization.mouse
|
|
567
|
+
const enableMouseHumanization = options?.humanization?.mouse || options?.humanizeInteractions;
|
|
568
|
+
if (enableMouseHumanization) {
|
|
259
569
|
await setupMouseMovementHumanization(this.page.client);
|
|
260
570
|
}
|
|
261
|
-
//
|
|
262
|
-
|
|
263
|
-
|
|
571
|
+
// NOTE: setupRuntimeEnableBypass REMOVED - it uses Runtime.evaluate which is itself a detection vector!
|
|
572
|
+
// The bypass script is now included in the bundled stealth scripts injected via addScriptToEvaluateOnNewDocument
|
|
573
|
+
// This runs BEFORE page JavaScript, avoiding Runtime domain activation
|
|
574
|
+
// 2024-2025: CDP-level keyboard humanization (disabled by default)
|
|
575
|
+
if (options?.humanization?.keyboard) {
|
|
576
|
+
await setupKeyboardHumanization(this.page.client);
|
|
577
|
+
}
|
|
578
|
+
// 2024-2025: CDP-level scroll humanization (disabled by default)
|
|
579
|
+
if (options?.humanization?.scroll) {
|
|
580
|
+
await setupScrollHumanization(this.page.client);
|
|
581
|
+
}
|
|
582
|
+
// Inject debug script for browser console verification (always inject for debugging)
|
|
583
|
+
if (options?.debug !== false) {
|
|
584
|
+
const debugScript = this.createDebugScript(options || {});
|
|
585
|
+
await this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: debugScript });
|
|
264
586
|
}
|
|
265
587
|
log.info('Enhanced fingerprint attached with settings:', {
|
|
266
588
|
proxy: options?.proxyUrl,
|
|
267
589
|
timezone,
|
|
268
590
|
advancedStealth: options?.enableAdvancedStealth !== false,
|
|
269
|
-
humanizeInteractions: options?.humanizeInteractions,
|
|
270
591
|
bypassRuntimeEnable: options?.bypassRuntimeEnable,
|
|
271
592
|
platform: options?.platform,
|
|
272
593
|
useFingerprintDefaults: options?.useFingerprintDefaults,
|
|
594
|
+
// 2024-2025 new options
|
|
595
|
+
bypassCDPDetection: options?.bypassCDPDetection !== false,
|
|
596
|
+
spoofStorage: options?.spoofStorage !== false,
|
|
597
|
+
spoofTiming: options?.spoofTiming !== false,
|
|
598
|
+
enableDataDomeBypass: options?.enableDataDomeBypass,
|
|
599
|
+
// Humanization options
|
|
600
|
+
humanization: {
|
|
601
|
+
mouse: enableMouseHumanization || false,
|
|
602
|
+
keyboard: options?.humanization?.keyboard || false,
|
|
603
|
+
scroll: options?.humanization?.scroll || false,
|
|
604
|
+
},
|
|
605
|
+
// Viewport info
|
|
606
|
+
viewport: options?.viewport,
|
|
607
|
+
fingerprintScreen: fingerprint?.screen ? {
|
|
608
|
+
width: fingerprint.screen.width,
|
|
609
|
+
height: fingerprint.screen.height,
|
|
610
|
+
devicePixelRatio: fingerprint.screen.devicePixelRatio,
|
|
611
|
+
} : undefined,
|
|
273
612
|
});
|
|
613
|
+
// Add a debug script to log viewport info in the browser console
|
|
614
|
+
const viewportDebugScript = `
|
|
615
|
+
(() => {
|
|
616
|
+
console.log('[VIEWPORT-DEBUG] Initial window dimensions:', {
|
|
617
|
+
innerWidth: window.innerWidth,
|
|
618
|
+
innerHeight: window.innerHeight,
|
|
619
|
+
outerWidth: window.outerWidth,
|
|
620
|
+
outerHeight: window.outerHeight,
|
|
621
|
+
screenWidth: screen.width,
|
|
622
|
+
screenHeight: screen.height,
|
|
623
|
+
availWidth: screen.availWidth,
|
|
624
|
+
availHeight: screen.availHeight,
|
|
625
|
+
devicePixelRatio: window.devicePixelRatio,
|
|
626
|
+
scrollY: window.scrollY,
|
|
627
|
+
scrollHeight: document.documentElement?.scrollHeight || 'N/A',
|
|
628
|
+
clientHeight: document.documentElement?.clientHeight || 'N/A'
|
|
629
|
+
});
|
|
630
|
+
|
|
631
|
+
// Check consistency
|
|
632
|
+
const inconsistencies = [];
|
|
633
|
+
if (window.innerWidth !== screen.width && Math.abs(window.innerWidth - screen.width) > 50) {
|
|
634
|
+
inconsistencies.push(\`innerWidth (\${window.innerWidth}) != screen.width (\${screen.width})\`);
|
|
635
|
+
}
|
|
636
|
+
if (window.innerHeight !== screen.height && Math.abs(window.innerHeight - screen.height) > 100) {
|
|
637
|
+
inconsistencies.push(\`innerHeight (\${window.innerHeight}) != screen.height (\${screen.height})\`);
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
if (inconsistencies.length > 0) {
|
|
641
|
+
console.warn('[VIEWPORT-DEBUG] ⚠️ INCONSISTENCIES DETECTED:', inconsistencies);
|
|
642
|
+
} else {
|
|
643
|
+
console.log('[VIEWPORT-DEBUG] ✅ Dimensions appear consistent');
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// Test scrolling after DOM is ready
|
|
647
|
+
const checkScroll = () => {
|
|
648
|
+
if (document.documentElement) {
|
|
649
|
+
const scrollHeight = document.documentElement.scrollHeight;
|
|
650
|
+
const clientHeight = document.documentElement.clientHeight;
|
|
651
|
+
const canScroll = scrollHeight > clientHeight;
|
|
652
|
+
|
|
653
|
+
console.log('[VIEWPORT-DEBUG] After load:', {
|
|
654
|
+
scrollHeight,
|
|
655
|
+
clientHeight,
|
|
656
|
+
canScroll,
|
|
657
|
+
overflow: scrollHeight - clientHeight,
|
|
658
|
+
bodyHeight: document.body?.scrollHeight,
|
|
659
|
+
innerHeight: window.innerHeight,
|
|
660
|
+
screenHeight: screen.height
|
|
661
|
+
});
|
|
662
|
+
|
|
663
|
+
if (canScroll) {
|
|
664
|
+
console.log('[VIEWPORT-DEBUG] ✅ SCROLLING ENABLED - Page has', scrollHeight - clientHeight, 'px overflow');
|
|
665
|
+
} else {
|
|
666
|
+
console.log('[VIEWPORT-DEBUG] ⚠️ NO OVERFLOW - Cannot scroll (scrollHeight === clientHeight)');
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
if (document.readyState === 'loading') {
|
|
672
|
+
document.addEventListener('DOMContentLoaded', checkScroll);
|
|
673
|
+
} else {
|
|
674
|
+
setTimeout(checkScroll, 1000);
|
|
675
|
+
}
|
|
676
|
+
})();
|
|
677
|
+
`;
|
|
678
|
+
await this.page.client.Page.addScriptToEvaluateOnNewDocument({ source: viewportDebugScript });
|
|
274
679
|
}
|
|
275
680
|
}
|
|
276
681
|
//# sourceMappingURL=fingerprint-injector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/fingerprint-injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/audio-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,oCAAoC,QAAO,
|
|
1
|
+
{"version":3,"file":"audio-spoofing.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/audio-spoofing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,oCAAoC,QAAO,MA2FvD,CAAC"}
|