jumpy-lion 0.0.41 → 0.0.43
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 +20 -1
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +21 -1
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +22 -1
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +77 -5
- 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 +32 -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 +452 -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 +776 -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 +643 -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 +17 -1
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/index.js +21 -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 +153 -90
- 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/prototype-integrity.d.ts +13 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +355 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +12 -3
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +261 -71
- 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 +756 -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/ua-ch.d.ts +7 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +158 -58
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
- 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 +517 -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 +51 -10
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populate-profile.js","sourceRoot":"","sources":["../../../src/browser-profiles/chrome/populate-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { DEFAULT_PROFILE } from "./chrome/default.js";
|
|
2
2
|
export { createChromeProfile, modifyChromeProfile as modifyProfile } from "./chrome/create.js";
|
|
3
|
+
export { populateChromeProfile, generateLocalState, generateSiteEngagement, generateMediaEngagement, generateLocalStorageScript, generateSessionStorageScript, generateReturningVisitorCookies, type PopulateProfileOptions, type ProfileCookie, } from "./chrome/populate-profile.js";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser-profiles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser-profiles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG/F,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,GACrB,MAAM,8BAA8B,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { DEFAULT_PROFILE } from "./chrome/default.js";
|
|
2
2
|
export { createChromeProfile, modifyChromeProfile as modifyProfile } from "./chrome/create.js";
|
|
3
|
+
// 2024-2025 Profile population utilities
|
|
4
|
+
export { populateChromeProfile, generateLocalState, generateSiteEngagement, generateMediaEngagement, generateLocalStorageScript, generateSessionStorageScript, generateReturningVisitorCookies, } from "./chrome/populate-profile.js";
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser-profiles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser-profiles/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE/F,yCAAyC;AACzC,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,EAC1B,4BAA4B,EAC5B,+BAA+B,GAGlC,MAAM,8BAA8B,CAAC"}
|
package/dist/crawler.d.ts
CHANGED
|
@@ -7,6 +7,28 @@ import { CdpLauncher, type LaunchReturn } from './launcher-wrap.js';
|
|
|
7
7
|
import type CdpPage from './page.js';
|
|
8
8
|
import type { GotoOptions } from './page.js';
|
|
9
9
|
import type CDPCrawler from './index.js';
|
|
10
|
+
/**
|
|
11
|
+
* Humanization options for simulating realistic user behavior
|
|
12
|
+
* All options are disabled by default for performance
|
|
13
|
+
*/
|
|
14
|
+
interface HumanizationOptions {
|
|
15
|
+
/** Enable mouse movement humanization. Default: false */
|
|
16
|
+
mouse?: boolean;
|
|
17
|
+
/** Enable keyboard humanization. Default: false */
|
|
18
|
+
keyboard?: boolean;
|
|
19
|
+
/** Enable scroll humanization. Default: false */
|
|
20
|
+
scroll?: boolean;
|
|
21
|
+
}
|
|
22
|
+
interface FingerprintGeneratorOptions {
|
|
23
|
+
/** Operating systems to generate fingerprints for (e.g., ["windows"], ["macos"], ["linux"]) */
|
|
24
|
+
operatingSystems?: string[];
|
|
25
|
+
/** Devices to generate fingerprints for (e.g., ["desktop"], ["mobile"]) */
|
|
26
|
+
devices?: string[];
|
|
27
|
+
/** Browsers to generate fingerprints for (e.g., ["chrome"], ["firefox"]) */
|
|
28
|
+
browsers?: string[];
|
|
29
|
+
/** Locales to generate fingerprints for (e.g., ["en-US"], ["it-IT"]) */
|
|
30
|
+
locales?: string[];
|
|
31
|
+
}
|
|
10
32
|
interface LaunchOptions {
|
|
11
33
|
headless?: boolean;
|
|
12
34
|
useExperimentalFingerprints?: boolean;
|
|
@@ -18,10 +40,11 @@ interface LaunchOptions {
|
|
|
18
40
|
useIncognitoPages?: boolean;
|
|
19
41
|
/** Whether to start the browser maximized and fullscreen. Default: true */
|
|
20
42
|
maximizeWindow?: boolean;
|
|
43
|
+
/** Options for fingerprint generation - passed from browserPoolOptions */
|
|
44
|
+
fingerprintGeneratorOptions?: FingerprintGeneratorOptions;
|
|
21
45
|
fingerprintOptions?: {
|
|
22
46
|
enableAdvancedStealth?: boolean;
|
|
23
47
|
bypassRuntimeEnable?: boolean;
|
|
24
|
-
humanizeInteractions?: boolean;
|
|
25
48
|
spoofWebGL?: boolean;
|
|
26
49
|
spoofAudioContext?: boolean;
|
|
27
50
|
spoofClientRects?: boolean;
|
|
@@ -32,6 +55,14 @@ interface LaunchOptions {
|
|
|
32
55
|
spoofPerformance?: boolean;
|
|
33
56
|
spoofLocale?: boolean;
|
|
34
57
|
detectTimezone?: boolean;
|
|
58
|
+
bypassCDPDetection?: boolean;
|
|
59
|
+
spoofStorage?: boolean;
|
|
60
|
+
spoofTiming?: boolean;
|
|
61
|
+
enableDataDomeBypass?: boolean;
|
|
62
|
+
/** Humanization options (all disabled by default) */
|
|
63
|
+
humanization?: HumanizationOptions;
|
|
64
|
+
/** Enable debug logging in browser console. Default: true for debugging */
|
|
65
|
+
debug?: boolean;
|
|
35
66
|
};
|
|
36
67
|
}
|
|
37
68
|
export interface CDPPluginOptions {
|
package/dist/crawler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5K,OAAO,EAAE,cAAc,EAAE,aAAa,EAAU,MAAM,SAAS,CAAC;AAEhE,OAAO,KAAK,oBAAoB,MAAM,yBAAyB,CAAC;AAChE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC,UAAU,aAAa;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE;QACjB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,
|
|
1
|
+
{"version":3,"file":"crawler.d.ts","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"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"}
|
package/dist/crawler.js
CHANGED
|
@@ -24,6 +24,13 @@ export default class Crawler extends BrowserCrawler {
|
|
|
24
24
|
launchContext.launchOptions ?? (launchContext.launchOptions = {});
|
|
25
25
|
launchContext.launchOptions.headless = headless;
|
|
26
26
|
}
|
|
27
|
+
// Pass fingerprintGeneratorOptions from browserPoolOptions to launchContext
|
|
28
|
+
// This ensures the browser controller can regenerate fingerprints with correct OS/locale settings
|
|
29
|
+
const fingerprintGeneratorOptions = poolOptions?.fingerprintOptions?.fingerprintGeneratorOptions;
|
|
30
|
+
if (fingerprintGeneratorOptions) {
|
|
31
|
+
launchContext.launchOptions ?? (launchContext.launchOptions = {});
|
|
32
|
+
launchContext.launchOptions.fingerprintGeneratorOptions = fingerprintGeneratorOptions;
|
|
33
|
+
}
|
|
27
34
|
// Update the plugin initialization with proper context
|
|
28
35
|
browserPoolOptions.browserPlugins = [
|
|
29
36
|
new CDPBrowserPlugin(new CdpLauncher(), launchContext), // Temporary type assertion until we fix the underlying types
|
package/dist/crawler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"crawler.js","sourceRoot":"","sources":["../src/crawler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGhE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAqB,MAAM,oBAAoB,CAAC;AA6FpE,iDAAiD;AACjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,cAIpC;IACG;IACI,6BAA6B;IACZ,iBAAoC,EAAE,EACrC,SAAS,aAAa,CAAC,eAAe,EAAE;QAE1D,MAAM,EACF,aAAa,GAAG,EAAsB,EACtC,QAAQ,GAAG,KAAK,EAChB,kBAAkB,EAAE,WAAW,GAAG,EAAE,EACpC,GAAG,qBAAqB,EAC3B,GAAG,cAAc,CAAC;QAEnB,MAAM,kBAAkB,GAAG;YACvB,GAAG,WAAW;YACd,wDAAwD;YACxD,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,IAAI,CAAC;YAC/D,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,IAAI,GAAG;SAChE,CAAC;QAEF,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;QAClI,CAAC;QAED,yDAAyD;QACzD,IAAI,kBAAkB,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;QAC5G,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACnB,aAAa,CAAC,aAAa,KAA3B,aAAa,CAAC,aAAa,GAAK,EAAE,EAAC;YACnC,aAAa,CAAC,aAAa,CAAC,QAAQ,GAAG,QAAmB,CAAC;QAC/D,CAAC;QAED,4EAA4E;QAC5E,kGAAkG;QAClG,MAAM,2BAA2B,GAAI,WAAmB,EAAE,kBAAkB,EAAE,2BAA2B,CAAC;QAC1G,IAAI,2BAA2B,EAAE,CAAC;YAC9B,aAAa,CAAC,aAAa,KAA3B,aAAa,CAAC,aAAa,GAAK,EAAE,EAAC;YAClC,aAAa,CAAC,aAAqB,CAAC,2BAA2B,GAAG,2BAA2B,CAAC;QACnG,CAAC;QAED,uDAAuD;QACvD,kBAAkB,CAAC,cAAc,GAAG;YAChC,IAAI,gBAAgB,CAAC,IAAI,WAAW,EAAE,EAAE,aAAoB,CAAC,EAAE,6DAA6D;SAC/H,CAAC;QAEF,kEAAkE;QAClE,kDAAkD;QAClD,IAAI;QAEJ,8DAA8D;QAC9D,SAAS;QACT,KAAK,CAAC,EAAE,GAAG,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;QAlD/E;;;;mBAAiB,cAAc;WAAwB;QACvD;;;;mBAAkB,MAAM;WAAkC;IAkD9D,CAAC;IAED,wEAAwE;IACrD,KAAK,CAAC,kBAAkB,CAAC,eAAmC,EAAE,WAAwB;QACrG,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;QAEjC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB;IACzF,CAAC;CACJ;AAMD,MAAM,UAAU,eAAe,CAE7B,MAA0C;IACxC,OAAO,MAAM,CAAC,MAAM,CAAU,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Fingerprint Injection Module
|
|
3
|
+
*
|
|
4
|
+
* Replaces the fingerprint-injector library with custom logic that:
|
|
5
|
+
* - Generates injection scripts for all fingerprint properties
|
|
6
|
+
* - Logs successful property overrides
|
|
7
|
+
* - Throws/logs errors instead of silently failing
|
|
8
|
+
* - Uses puppeteer-stealth-style property guards
|
|
9
|
+
*/
|
|
10
|
+
interface BrowserFingerprint {
|
|
11
|
+
navigator?: {
|
|
12
|
+
userAgent?: string;
|
|
13
|
+
platform?: string;
|
|
14
|
+
vendor?: string;
|
|
15
|
+
vendorSub?: string;
|
|
16
|
+
productSub?: string;
|
|
17
|
+
language?: string;
|
|
18
|
+
languages?: string[];
|
|
19
|
+
hardwareConcurrency?: number;
|
|
20
|
+
deviceMemory?: number;
|
|
21
|
+
maxTouchPoints?: number;
|
|
22
|
+
oscpu?: string;
|
|
23
|
+
appVersion?: string;
|
|
24
|
+
appName?: string;
|
|
25
|
+
appCodeName?: string;
|
|
26
|
+
product?: string;
|
|
27
|
+
pdfViewerEnabled?: boolean;
|
|
28
|
+
cookieEnabled?: boolean;
|
|
29
|
+
onLine?: boolean;
|
|
30
|
+
doNotTrack?: string | null;
|
|
31
|
+
};
|
|
32
|
+
screen?: {
|
|
33
|
+
width?: number;
|
|
34
|
+
height?: number;
|
|
35
|
+
availWidth?: number;
|
|
36
|
+
availHeight?: number;
|
|
37
|
+
colorDepth?: number;
|
|
38
|
+
pixelDepth?: number;
|
|
39
|
+
availLeft?: number;
|
|
40
|
+
availTop?: number;
|
|
41
|
+
devicePixelRatio?: number;
|
|
42
|
+
pageXOffset?: number;
|
|
43
|
+
pageYOffset?: number;
|
|
44
|
+
};
|
|
45
|
+
videoCard?: {
|
|
46
|
+
vendor?: string;
|
|
47
|
+
renderer?: string;
|
|
48
|
+
};
|
|
49
|
+
battery?: {
|
|
50
|
+
charging?: boolean;
|
|
51
|
+
chargingTime?: number;
|
|
52
|
+
dischargingTime?: number;
|
|
53
|
+
level?: number;
|
|
54
|
+
};
|
|
55
|
+
audioContext?: {
|
|
56
|
+
sampleRate?: number;
|
|
57
|
+
numberOfChannels?: number;
|
|
58
|
+
maxChannelCount?: number;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Creates a script that overrides all navigator properties
|
|
63
|
+
*/
|
|
64
|
+
export declare function createNavigatorOverrideScript(fingerprint: BrowserFingerprint): string;
|
|
65
|
+
/**
|
|
66
|
+
* Creates a script that overrides all screen properties
|
|
67
|
+
*/
|
|
68
|
+
export declare function createScreenOverrideScript(fingerprint: BrowserFingerprint): string;
|
|
69
|
+
/**
|
|
70
|
+
* Creates a script that overrides window-level properties
|
|
71
|
+
*/
|
|
72
|
+
export declare function createWindowOverrideScript(fingerprint: BrowserFingerprint): string;
|
|
73
|
+
/**
|
|
74
|
+
* Creates a comprehensive fingerprint injection script
|
|
75
|
+
*/
|
|
76
|
+
export declare function createComprehensiveFingerprintScript(fingerprint: BrowserFingerprint): string;
|
|
77
|
+
export interface CustomFingerprintOptions {
|
|
78
|
+
debug?: boolean;
|
|
79
|
+
throwOnError?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Main function to inject custom fingerprint
|
|
83
|
+
* This replaces the fingerprint-injector library's injectable script
|
|
84
|
+
*/
|
|
85
|
+
export declare function createCustomFingerprintInjection(fingerprint: BrowserFingerprint, _options?: CustomFingerprintOptions): string[];
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=custom-fingerprint-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-fingerprint-injector.d.ts","sourceRoot":"","sources":["../../src/fingerprinting/custom-fingerprint-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,UAAU,kBAAkB;IACxB,SAAS,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;IACF,MAAM,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACL;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CAqGrF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CA0FlF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CAwElF;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,CAyB5F;AAED,MAAM,WAAW,wBAAwB;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC5C,WAAW,EAAE,kBAAkB,EAC/B,QAAQ,GAAE,wBAA6B,GACxC,MAAM,EAAE,CAiCV"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Fingerprint Injection Module
|
|
3
|
+
*
|
|
4
|
+
* Replaces the fingerprint-injector library with custom logic that:
|
|
5
|
+
* - Generates injection scripts for all fingerprint properties
|
|
6
|
+
* - Logs successful property overrides
|
|
7
|
+
* - Throws/logs errors instead of silently failing
|
|
8
|
+
* - Uses puppeteer-stealth-style property guards
|
|
9
|
+
*/
|
|
10
|
+
import { log } from 'crawlee';
|
|
11
|
+
/**
|
|
12
|
+
* Creates a script that overrides all navigator properties
|
|
13
|
+
*/
|
|
14
|
+
export function createNavigatorOverrideScript(fingerprint) {
|
|
15
|
+
const nav = fingerprint.navigator || {};
|
|
16
|
+
return `
|
|
17
|
+
(() => {
|
|
18
|
+
'use strict';
|
|
19
|
+
|
|
20
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
21
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
22
|
+
|
|
23
|
+
console.log(DEBUG_PREFIX, 'Starting navigator property overrides...');
|
|
24
|
+
|
|
25
|
+
// Get stealth utilities
|
|
26
|
+
const utils = window.__stealthUtils__ || {
|
|
27
|
+
overrideGetterWithNative: (obj, prop, getter) => {
|
|
28
|
+
try {
|
|
29
|
+
const existing = Object.getOwnPropertyDescriptor(obj, prop);
|
|
30
|
+
if (existing && existing.configurable === false) {
|
|
31
|
+
console.warn(DEBUG_PREFIX, \`Property navigator.\${prop} is frozen, attempting fallback\`);
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(obj, prop, {
|
|
35
|
+
get: getter,
|
|
36
|
+
configurable: true,
|
|
37
|
+
enumerable: true
|
|
38
|
+
});
|
|
39
|
+
return true;
|
|
40
|
+
} catch (e) {
|
|
41
|
+
console.error(ERROR_PREFIX, \`Failed to override navigator.\${prop}:\`, e);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const overrideNavigatorProperty = (prop, value) => {
|
|
48
|
+
try {
|
|
49
|
+
const success = utils.overrideGetterWithNative(
|
|
50
|
+
navigator,
|
|
51
|
+
prop,
|
|
52
|
+
() => value
|
|
53
|
+
);
|
|
54
|
+
if (success) {
|
|
55
|
+
console.log(DEBUG_PREFIX, \`✓ Overridden navigator.\${prop} to:\`, value);
|
|
56
|
+
} else {
|
|
57
|
+
console.warn(DEBUG_PREFIX, \`⚠ Could not override navigator.\${prop} (frozen property)\`);
|
|
58
|
+
}
|
|
59
|
+
return success;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error(ERROR_PREFIX, \`Exception overriding navigator.\${prop}:\`, error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Override navigator properties
|
|
67
|
+
const overrides = {
|
|
68
|
+
${nav.userAgent ? `userAgent: ${JSON.stringify(nav.userAgent)},` : ''}
|
|
69
|
+
${nav.platform ? `platform: ${JSON.stringify(nav.platform)},` : ''}
|
|
70
|
+
${nav.vendor ? `vendor: ${JSON.stringify(nav.vendor)},` : ''}
|
|
71
|
+
${nav.vendorSub ? `vendorSub: ${JSON.stringify(nav.vendorSub)},` : ''}
|
|
72
|
+
${nav.productSub ? `productSub: ${JSON.stringify(nav.productSub)},` : ''}
|
|
73
|
+
${nav.language ? `language: ${JSON.stringify(nav.language)},` : ''}
|
|
74
|
+
${nav.languages ? `languages: ${JSON.stringify(nav.languages)},` : ''}
|
|
75
|
+
${nav.hardwareConcurrency ? `hardwareConcurrency: ${nav.hardwareConcurrency},` : ''}
|
|
76
|
+
${nav.deviceMemory ? `deviceMemory: ${nav.deviceMemory},` : ''}
|
|
77
|
+
${nav.maxTouchPoints !== undefined ? `maxTouchPoints: ${nav.maxTouchPoints},` : ''}
|
|
78
|
+
${nav.oscpu ? `oscpu: ${JSON.stringify(nav.oscpu)},` : ''}
|
|
79
|
+
${nav.appVersion ? `appVersion: ${JSON.stringify(nav.appVersion)},` : ''}
|
|
80
|
+
${nav.appName ? `appName: ${JSON.stringify(nav.appName)},` : ''}
|
|
81
|
+
${nav.appCodeName ? `appCodeName: ${JSON.stringify(nav.appCodeName)},` : ''}
|
|
82
|
+
${nav.product ? `product: ${JSON.stringify(nav.product)},` : ''}
|
|
83
|
+
${nav.pdfViewerEnabled !== undefined ? `pdfViewerEnabled: ${nav.pdfViewerEnabled},` : ''}
|
|
84
|
+
${nav.cookieEnabled !== undefined ? `cookieEnabled: ${nav.cookieEnabled},` : ''}
|
|
85
|
+
${nav.onLine !== undefined ? `onLine: ${nav.onLine},` : ''}
|
|
86
|
+
${nav.doNotTrack !== undefined ? `doNotTrack: ${nav.doNotTrack === null ? 'null' : JSON.stringify(nav.doNotTrack)},` : ''}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
let successCount = 0;
|
|
90
|
+
let failureCount = 0;
|
|
91
|
+
|
|
92
|
+
for (const [prop, value] of Object.entries(overrides)) {
|
|
93
|
+
if (overrideNavigatorProperty(prop, value)) {
|
|
94
|
+
successCount++;
|
|
95
|
+
} else {
|
|
96
|
+
failureCount++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
console.log(DEBUG_PREFIX, \`Navigator overrides complete: \${successCount} succeeded, \${failureCount} failed\`);
|
|
101
|
+
|
|
102
|
+
// Verify overrides
|
|
103
|
+
console.log(DEBUG_PREFIX, 'Verifying navigator overrides...');
|
|
104
|
+
for (const [prop, expectedValue] of Object.entries(overrides)) {
|
|
105
|
+
const actualValue = navigator[prop];
|
|
106
|
+
if (JSON.stringify(actualValue) === JSON.stringify(expectedValue)) {
|
|
107
|
+
console.log(DEBUG_PREFIX, \`✓ Verified navigator.\${prop}\`);
|
|
108
|
+
} else {
|
|
109
|
+
console.warn(DEBUG_PREFIX, \`⚠ Mismatch for navigator.\${prop}: expected\`, expectedValue, 'got', actualValue);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
})();
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Creates a script that overrides all screen properties
|
|
117
|
+
*/
|
|
118
|
+
export function createScreenOverrideScript(fingerprint) {
|
|
119
|
+
const scr = fingerprint.screen || {};
|
|
120
|
+
return `
|
|
121
|
+
(() => {
|
|
122
|
+
'use strict';
|
|
123
|
+
|
|
124
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
125
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
126
|
+
|
|
127
|
+
console.log(DEBUG_PREFIX, 'Starting screen property overrides...');
|
|
128
|
+
|
|
129
|
+
// Get stealth utilities
|
|
130
|
+
const utils = window.__stealthUtils__ || {
|
|
131
|
+
overrideGetterWithNative: (obj, prop, getter) => {
|
|
132
|
+
try {
|
|
133
|
+
const existing = Object.getOwnPropertyDescriptor(obj, prop);
|
|
134
|
+
if (existing && existing.configurable === false) {
|
|
135
|
+
console.warn(DEBUG_PREFIX, \`Property screen.\${prop} is frozen, attempting fallback\`);
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
Object.defineProperty(obj, prop, {
|
|
139
|
+
get: getter,
|
|
140
|
+
configurable: true,
|
|
141
|
+
enumerable: true
|
|
142
|
+
});
|
|
143
|
+
return true;
|
|
144
|
+
} catch (e) {
|
|
145
|
+
console.error(ERROR_PREFIX, \`Failed to override screen.\${prop}:\`, e);
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const overrideScreenProperty = (prop, value) => {
|
|
152
|
+
try {
|
|
153
|
+
const success = utils.overrideGetterWithNative(
|
|
154
|
+
screen,
|
|
155
|
+
prop,
|
|
156
|
+
() => value
|
|
157
|
+
);
|
|
158
|
+
if (success) {
|
|
159
|
+
console.log(DEBUG_PREFIX, \`✓ Overridden screen.\${prop} to:\`, value);
|
|
160
|
+
} else {
|
|
161
|
+
console.warn(DEBUG_PREFIX, \`⚠ Could not override screen.\${prop} (frozen property)\`);
|
|
162
|
+
}
|
|
163
|
+
return success;
|
|
164
|
+
} catch (error) {
|
|
165
|
+
console.error(ERROR_PREFIX, \`Exception overriding screen.\${prop}:\`, error);
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Override screen properties
|
|
171
|
+
const overrides = {
|
|
172
|
+
${scr.width ? `width: ${scr.width},` : ''}
|
|
173
|
+
${scr.height ? `height: ${scr.height},` : ''}
|
|
174
|
+
${scr.availWidth ? `availWidth: ${scr.availWidth},` : ''}
|
|
175
|
+
${scr.availHeight ? `availHeight: ${scr.availHeight},` : ''}
|
|
176
|
+
${scr.colorDepth ? `colorDepth: ${scr.colorDepth},` : ''}
|
|
177
|
+
${scr.pixelDepth ? `pixelDepth: ${scr.pixelDepth},` : ''}
|
|
178
|
+
${scr.availLeft !== undefined ? `availLeft: ${scr.availLeft},` : ''}
|
|
179
|
+
${scr.availTop !== undefined ? `availTop: ${scr.availTop},` : ''}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
let successCount = 0;
|
|
183
|
+
let failureCount = 0;
|
|
184
|
+
|
|
185
|
+
for (const [prop, value] of Object.entries(overrides)) {
|
|
186
|
+
if (overrideScreenProperty(prop, value)) {
|
|
187
|
+
successCount++;
|
|
188
|
+
} else {
|
|
189
|
+
failureCount++;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
console.log(DEBUG_PREFIX, \`Screen overrides complete: \${successCount} succeeded, \${failureCount} failed\`);
|
|
194
|
+
|
|
195
|
+
// Verify overrides
|
|
196
|
+
console.log(DEBUG_PREFIX, 'Verifying screen overrides...');
|
|
197
|
+
for (const [prop, expectedValue] of Object.entries(overrides)) {
|
|
198
|
+
const actualValue = screen[prop];
|
|
199
|
+
if (actualValue === expectedValue) {
|
|
200
|
+
console.log(DEBUG_PREFIX, \`✓ Verified screen.\${prop}\`);
|
|
201
|
+
} else {
|
|
202
|
+
console.warn(DEBUG_PREFIX, \`⚠ Mismatch for screen.\${prop}: expected\`, expectedValue, 'got', actualValue);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
})();
|
|
206
|
+
`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Creates a script that overrides window-level properties
|
|
210
|
+
*/
|
|
211
|
+
export function createWindowOverrideScript(fingerprint) {
|
|
212
|
+
const scr = fingerprint.screen || {};
|
|
213
|
+
return `
|
|
214
|
+
(() => {
|
|
215
|
+
'use strict';
|
|
216
|
+
|
|
217
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
218
|
+
const ERROR_PREFIX = '[CDP-FP-ERROR]';
|
|
219
|
+
|
|
220
|
+
console.log(DEBUG_PREFIX, 'Starting window property overrides...');
|
|
221
|
+
|
|
222
|
+
// Get stealth utilities
|
|
223
|
+
const utils = window.__stealthUtils__ || {
|
|
224
|
+
overrideGetterWithNative: (obj, prop, getter) => {
|
|
225
|
+
try {
|
|
226
|
+
const existing = Object.getOwnPropertyDescriptor(obj, prop);
|
|
227
|
+
if (existing && existing.configurable === false) {
|
|
228
|
+
console.warn(DEBUG_PREFIX, \`Property window.\${prop} is frozen, attempting fallback\`);
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
Object.defineProperty(obj, prop, {
|
|
232
|
+
get: getter,
|
|
233
|
+
configurable: true,
|
|
234
|
+
enumerable: true
|
|
235
|
+
});
|
|
236
|
+
return true;
|
|
237
|
+
} catch (e) {
|
|
238
|
+
console.error(ERROR_PREFIX, \`Failed to override window.\${prop}:\`, e);
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
const overrideWindowProperty = (prop, value) => {
|
|
245
|
+
try {
|
|
246
|
+
const success = utils.overrideGetterWithNative(
|
|
247
|
+
window,
|
|
248
|
+
prop,
|
|
249
|
+
() => value
|
|
250
|
+
);
|
|
251
|
+
if (success) {
|
|
252
|
+
console.log(DEBUG_PREFIX, \`✓ Overridden window.\${prop} to:\`, value);
|
|
253
|
+
} else {
|
|
254
|
+
console.warn(DEBUG_PREFIX, \`⚠ Could not override window.\${prop} (frozen property)\`);
|
|
255
|
+
}
|
|
256
|
+
return success;
|
|
257
|
+
} catch (error) {
|
|
258
|
+
console.error(ERROR_PREFIX, \`Exception overriding window.\${prop}:\`, error);
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
// Override window properties
|
|
264
|
+
const overrides = {
|
|
265
|
+
${scr.devicePixelRatio ? `devicePixelRatio: ${scr.devicePixelRatio},` : ''}
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
let successCount = 0;
|
|
269
|
+
let failureCount = 0;
|
|
270
|
+
|
|
271
|
+
for (const [prop, value] of Object.entries(overrides)) {
|
|
272
|
+
if (overrideWindowProperty(prop, value)) {
|
|
273
|
+
successCount++;
|
|
274
|
+
} else {
|
|
275
|
+
failureCount++;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
console.log(DEBUG_PREFIX, \`Window overrides complete: \${successCount} succeeded, \${failureCount} failed\`);
|
|
280
|
+
})();
|
|
281
|
+
`;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Creates a comprehensive fingerprint injection script
|
|
285
|
+
*/
|
|
286
|
+
export function createComprehensiveFingerprintScript(fingerprint) {
|
|
287
|
+
log.debug('Creating comprehensive fingerprint injection script', {
|
|
288
|
+
hasNavigator: !!fingerprint.navigator,
|
|
289
|
+
hasScreen: !!fingerprint.screen,
|
|
290
|
+
hasVideoCard: !!fingerprint.videoCard,
|
|
291
|
+
});
|
|
292
|
+
return `
|
|
293
|
+
(() => {
|
|
294
|
+
'use strict';
|
|
295
|
+
|
|
296
|
+
const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
|
|
297
|
+
console.log(DEBUG_PREFIX, '=== Starting Comprehensive Fingerprint Injection ===');
|
|
298
|
+
console.log(DEBUG_PREFIX, 'Timestamp:', new Date().toISOString());
|
|
299
|
+
|
|
300
|
+
// Log fingerprint data structure
|
|
301
|
+
console.log(DEBUG_PREFIX, 'Fingerprint data available:', {
|
|
302
|
+
hasNavigator: ${!!fingerprint.navigator},
|
|
303
|
+
hasScreen: ${!!fingerprint.screen},
|
|
304
|
+
hasVideoCard: ${!!fingerprint.videoCard},
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
console.log(DEBUG_PREFIX, '=== Fingerprint Injection Complete ===');
|
|
308
|
+
})();
|
|
309
|
+
`;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Main function to inject custom fingerprint
|
|
313
|
+
* This replaces the fingerprint-injector library's injectable script
|
|
314
|
+
*/
|
|
315
|
+
export function createCustomFingerprintInjection(fingerprint, _options = {}) {
|
|
316
|
+
const scripts = [];
|
|
317
|
+
log.info('Creating custom fingerprint injection scripts', {
|
|
318
|
+
hasNavigator: !!fingerprint.navigator,
|
|
319
|
+
hasScreen: !!fingerprint.screen,
|
|
320
|
+
hasVideoCard: !!fingerprint.videoCard,
|
|
321
|
+
});
|
|
322
|
+
// Add comprehensive logging script
|
|
323
|
+
scripts.push(createComprehensiveFingerprintScript(fingerprint));
|
|
324
|
+
// Add navigator overrides
|
|
325
|
+
if (fingerprint.navigator && Object.keys(fingerprint.navigator).length > 0) {
|
|
326
|
+
scripts.push(createNavigatorOverrideScript(fingerprint));
|
|
327
|
+
log.debug('Added navigator override script');
|
|
328
|
+
}
|
|
329
|
+
// Add screen overrides
|
|
330
|
+
if (fingerprint.screen && Object.keys(fingerprint.screen).length > 0) {
|
|
331
|
+
scripts.push(createScreenOverrideScript(fingerprint));
|
|
332
|
+
log.debug('Added screen override script');
|
|
333
|
+
}
|
|
334
|
+
// Add window overrides
|
|
335
|
+
if (fingerprint.screen?.devicePixelRatio) {
|
|
336
|
+
scripts.push(createWindowOverrideScript(fingerprint));
|
|
337
|
+
log.debug('Added window override script');
|
|
338
|
+
}
|
|
339
|
+
log.info(`Created ${scripts.length} custom fingerprint injection scripts`);
|
|
340
|
+
return scripts;
|
|
341
|
+
}
|
|
342
|
+
//# sourceMappingURL=custom-fingerprint-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-fingerprint-injector.js","sourceRoot":"","sources":["../../src/fingerprinting/custom-fingerprint-injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,18 @@ interface Viewport {
|
|
|
68
68
|
deviceScaleFactor: number;
|
|
69
69
|
mobile: boolean;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Humanization options for simulating realistic user behavior
|
|
73
|
+
* All options are disabled by default for performance
|
|
74
|
+
*/
|
|
75
|
+
interface HumanizationOptions {
|
|
76
|
+
/** Enable mouse movement humanization (Bezier curves, natural movement). Default: false */
|
|
77
|
+
mouse?: boolean;
|
|
78
|
+
/** Enable keyboard humanization (realistic typing delays). Default: false */
|
|
79
|
+
keyboard?: boolean;
|
|
80
|
+
/** Enable scroll humanization (natural physics, momentum). Default: false */
|
|
81
|
+
scroll?: boolean;
|
|
82
|
+
}
|
|
71
83
|
interface AttachOptions {
|
|
72
84
|
debug?: boolean;
|
|
73
85
|
timezone?: string;
|
|
@@ -76,6 +88,7 @@ interface AttachOptions {
|
|
|
76
88
|
viewport?: Viewport;
|
|
77
89
|
enableAdvancedStealth?: boolean;
|
|
78
90
|
bypassRuntimeEnable?: boolean;
|
|
91
|
+
/** @deprecated Use humanization.mouse instead */
|
|
79
92
|
humanizeInteractions?: boolean;
|
|
80
93
|
spoofWebGL?: boolean;
|
|
81
94
|
spoofAudioContext?: boolean;
|
|
@@ -87,23 +100,48 @@ interface AttachOptions {
|
|
|
87
100
|
spoofLocale?: boolean;
|
|
88
101
|
useExperimentalFingerprints?: boolean;
|
|
89
102
|
useFingerprintDefaults?: boolean;
|
|
103
|
+
/** Enable CDP detection bypass (iframe, eval, sourceURL hiding) */
|
|
104
|
+
bypassCDPDetection?: boolean;
|
|
105
|
+
/** Enable storage API consistency (quota, IndexedDB, CacheStorage) */
|
|
106
|
+
spoofStorage?: boolean;
|
|
107
|
+
/** Enable timing consistency (Date.now, performance.now alignment) */
|
|
108
|
+
spoofTiming?: boolean;
|
|
109
|
+
/** Enable DataDome-specific bypass (JS challenges, proof-of-work) */
|
|
110
|
+
enableDataDomeBypass?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Humanization options for simulating realistic user behavior.
|
|
113
|
+
* All options are disabled by default for performance.
|
|
114
|
+
* Enable specific options to simulate human-like interactions.
|
|
115
|
+
*/
|
|
116
|
+
humanization?: HumanizationOptions;
|
|
90
117
|
}
|
|
91
118
|
export declare class CdpFingerprintInjector {
|
|
92
|
-
private injector;
|
|
93
119
|
private page;
|
|
94
120
|
constructor(page: CdpPage);
|
|
95
121
|
/**
|
|
96
122
|
* Get recommended settings for Apify platform
|
|
97
123
|
* These settings are optimized for running headful Chrome on Apify (Linux)
|
|
98
|
-
* but spoofed to appear as Windows for better anti-bot evasion
|
|
124
|
+
* but spoofed to appear as Windows for better anti-bot evasion.
|
|
125
|
+
*
|
|
126
|
+
* Note: Humanization is disabled by default for performance.
|
|
127
|
+
* Use getDataDomeSettings() or enable humanization manually for anti-bot sites.
|
|
99
128
|
*/
|
|
100
129
|
static getApifyRecommendedSettings(): AttachOptions;
|
|
130
|
+
/**
|
|
131
|
+
* Get settings specifically optimized for DataDome-protected sites.
|
|
132
|
+
* Enables all humanization features for maximum anti-bot evasion.
|
|
133
|
+
*/
|
|
134
|
+
static getDataDomeSettings(): AttachOptions;
|
|
101
135
|
static injectFingerprint(page: CdpPage, fingerprint: BrowserFingerprintWithHeaders, options?: AttachOptions): Promise<void>;
|
|
102
136
|
private setViewport;
|
|
103
137
|
private setExtraHTTPHeaders;
|
|
104
138
|
private getTimezoneFromIp;
|
|
105
139
|
private setTimezoneOverride;
|
|
106
140
|
private injectStealthProtections;
|
|
141
|
+
/**
|
|
142
|
+
* Create a debug script that logs fingerprint override status to the console
|
|
143
|
+
*/
|
|
144
|
+
private createDebugScript;
|
|
107
145
|
/**
|
|
108
146
|
* Extract relevant data from fingerprint for overrides
|
|
109
147
|
*/
|