jumpy-lion 0.1.0 → 0.1.2
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 +22 -3
- package/dist/browser-controller.d.ts.map +1 -1
- package/dist/browser-controller.js +319 -28
- package/dist/browser-controller.js.map +1 -1
- package/dist/browser-plugin.d.ts +56 -7
- package/dist/browser-plugin.d.ts.map +1 -1
- package/dist/browser-plugin.js +268 -56
- package/dist/browser-plugin.js.map +1 -1
- package/dist/browser-process/browser.d.ts +39 -0
- package/dist/browser-process/browser.d.ts.map +1 -1
- package/dist/browser-process/browser.js +125 -18
- package/dist/browser-process/browser.js.map +1 -1
- package/dist/browser-process/process.d.ts +9 -0
- package/dist/browser-process/process.d.ts.map +1 -1
- package/dist/browser-process/process.js +100 -6
- package/dist/browser-process/process.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 +81 -9
- package/dist/crawler.d.ts.map +1 -1
- package/dist/crawler.js +26 -10
- package/dist/crawler.js.map +1 -1
- package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
- package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
- package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
- package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/background.js +4 -0
- package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
- package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
- package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
- package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
- package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
- package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
- package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
- package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
- 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 +157 -0
- package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-injector.js +632 -0
- package/dist/fingerprinting/fingerprint-injector.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +119 -0
- package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +149 -0
- package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
- 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 +763 -0
- package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts +10 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +195 -0
- package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +28 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +1181 -0
- package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts +36 -0
- package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js +40 -0
- package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
- 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 +268 -0
- package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +301 -0
- package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +58 -0
- package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +249 -0
- package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +33 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +618 -0
- package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
- 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 +356 -0
- package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +18 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +171 -0
- package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
- 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 +244 -0
- package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +14 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +925 -0
- package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
- 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 +346 -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 +264 -0
- package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +27 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +213 -0
- package/dist/fingerprinting/fingerprint-overrides/ua-ch.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 +517 -0
- package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +215 -0
- package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +202 -0
- package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +188 -0
- package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/launcher-wrap.d.ts +2 -2
- package/dist/launcher-wrap.d.ts.map +1 -1
- package/dist/launcher-wrap.js.map +1 -1
- package/dist/page.d.ts +161 -7
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +1034 -23
- package/dist/page.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scroll Humanization Module
|
|
3
|
+
* Simulates realistic scroll behavior for 2024-2025
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Natural scroll momentum physics
|
|
7
|
+
* - Reading-speed based scroll patterns
|
|
8
|
+
* - Scroll pause at content sections
|
|
9
|
+
* - Touch-like vs mouse wheel differentiation
|
|
10
|
+
* - CDP-level scroll enhancement
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_SCROLL_CONFIG = {
|
|
13
|
+
baseScrollAmount: 100,
|
|
14
|
+
scrollVariance: 30,
|
|
15
|
+
deceleration: 0.95,
|
|
16
|
+
minVelocity: 5,
|
|
17
|
+
readingPauseProbability: 0.15,
|
|
18
|
+
readingPauseDuration: [500, 2000],
|
|
19
|
+
eventDelay: 16, // ~60fps
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Generate human-like scroll positions using momentum physics
|
|
23
|
+
*/
|
|
24
|
+
export const generateScrollPath = (startY, targetY, config = {}) => {
|
|
25
|
+
const cfg = { ...DEFAULT_SCROLL_CONFIG, ...config };
|
|
26
|
+
const path = [];
|
|
27
|
+
const direction = targetY > startY ? 1 : -1;
|
|
28
|
+
const totalDistance = Math.abs(targetY - startY);
|
|
29
|
+
// Initial velocity based on distance
|
|
30
|
+
let velocity = Math.min(cfg.baseScrollAmount * 2, totalDistance / 10);
|
|
31
|
+
let currentY = startY;
|
|
32
|
+
while (Math.abs(targetY - currentY) > cfg.minVelocity) {
|
|
33
|
+
// Apply deceleration as we approach target
|
|
34
|
+
const remainingDistance = Math.abs(targetY - currentY);
|
|
35
|
+
const decelerationFactor = remainingDistance < 200 ?
|
|
36
|
+
cfg.deceleration * 0.8 : cfg.deceleration;
|
|
37
|
+
velocity *= decelerationFactor;
|
|
38
|
+
// Add variance to make it look natural
|
|
39
|
+
const variance = (Math.random() - 0.5) * cfg.scrollVariance;
|
|
40
|
+
const scrollAmount = (velocity + variance) * direction;
|
|
41
|
+
currentY += scrollAmount;
|
|
42
|
+
// Clamp to target
|
|
43
|
+
if (direction > 0) {
|
|
44
|
+
currentY = Math.min(currentY, targetY);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
currentY = Math.max(currentY, targetY);
|
|
48
|
+
}
|
|
49
|
+
// Add slight variation to timing
|
|
50
|
+
const delay = cfg.eventDelay + (Math.random() - 0.5) * 8;
|
|
51
|
+
path.push({ y: Math.round(currentY), delay: Math.round(delay) });
|
|
52
|
+
// Occasionally pause as if reading
|
|
53
|
+
if (Math.random() < cfg.readingPauseProbability && path.length > 3) {
|
|
54
|
+
const pauseDuration = cfg.readingPauseDuration[0] +
|
|
55
|
+
Math.random() * (cfg.readingPauseDuration[1] - cfg.readingPauseDuration[0]);
|
|
56
|
+
path.push({ y: Math.round(currentY), delay: Math.round(pauseDuration) });
|
|
57
|
+
// Reset velocity after pause (user starts scrolling again)
|
|
58
|
+
velocity = cfg.baseScrollAmount;
|
|
59
|
+
}
|
|
60
|
+
// Ensure we don't get stuck in an infinite loop
|
|
61
|
+
if (velocity < cfg.minVelocity) {
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Final position
|
|
66
|
+
path.push({ y: targetY, delay: cfg.eventDelay });
|
|
67
|
+
return path;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Create a script that enhances scroll events in the browser
|
|
71
|
+
*/
|
|
72
|
+
export const createScrollHumanizationScript = () => {
|
|
73
|
+
return `
|
|
74
|
+
(() => {
|
|
75
|
+
'use strict';
|
|
76
|
+
|
|
77
|
+
// Scroll Humanization for 2024-2025
|
|
78
|
+
const humanizeScroll = () => {
|
|
79
|
+
// Track scroll state
|
|
80
|
+
let scrollVelocity = 0;
|
|
81
|
+
|
|
82
|
+
// Store original wheel event constructor
|
|
83
|
+
const OriginalWheelEvent = WheelEvent;
|
|
84
|
+
|
|
85
|
+
// Override WheelEvent to add realistic properties
|
|
86
|
+
window.WheelEvent = function(type, eventInitDict = {}) {
|
|
87
|
+
const enhancedInit = { ...eventInitDict };
|
|
88
|
+
|
|
89
|
+
// Add realistic delta values if not set
|
|
90
|
+
if (enhancedInit.deltaY === undefined) {
|
|
91
|
+
enhancedInit.deltaY = 100 + (Math.random() - 0.5) * 30;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Add variance to existing delta
|
|
95
|
+
if (typeof enhancedInit.deltaY === 'number') {
|
|
96
|
+
enhancedInit.deltaY += (Math.random() - 0.5) * 10;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Ensure proper delta mode (0 = pixels, 1 = lines, 2 = pages)
|
|
100
|
+
if (enhancedInit.deltaMode === undefined) {
|
|
101
|
+
enhancedInit.deltaMode = 0; // Pixels is most common
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return new OriginalWheelEvent(type, enhancedInit);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// Note: Don't assign to prototype - it may be frozen in modern Chrome
|
|
108
|
+
// The Proxy wrapper handles prototype access via get trap if needed
|
|
109
|
+
|
|
110
|
+
// Enhanced scroll behavior tracking
|
|
111
|
+
const trackScrollBehavior = () => {
|
|
112
|
+
const originalScrollTo = window.scrollTo;
|
|
113
|
+
const originalScrollBy = window.scrollBy;
|
|
114
|
+
const originalScrollIntoView = Element.prototype.scrollIntoView;
|
|
115
|
+
|
|
116
|
+
// Override scrollTo - pass through to original
|
|
117
|
+
// The humanization happens at the wheel event level
|
|
118
|
+
window.scrollTo = function(options) {
|
|
119
|
+
return originalScrollTo.apply(this, arguments);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
// Override scrollBy - pass through to original
|
|
123
|
+
// Variance removed: it broke precise programmatic scrolling
|
|
124
|
+
// (e.g., _scrollElementIntoView in page.ts needs exact positioning)
|
|
125
|
+
window.scrollBy = function(options) {
|
|
126
|
+
return originalScrollBy.apply(this, arguments);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// Override scrollIntoView - pass through to original
|
|
130
|
+
Element.prototype.scrollIntoView = function(options) {
|
|
131
|
+
return originalScrollIntoView.call(this, options);
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Track and enhance touch scroll events
|
|
136
|
+
const enhanceTouchScroll = () => {
|
|
137
|
+
let touchStartY = 0;
|
|
138
|
+
let touchStartTime = 0;
|
|
139
|
+
|
|
140
|
+
window.addEventListener('touchstart', (event) => {
|
|
141
|
+
if (event.touches.length === 1) {
|
|
142
|
+
touchStartY = event.touches[0].clientY;
|
|
143
|
+
touchStartTime = performance.now();
|
|
144
|
+
}
|
|
145
|
+
}, { passive: true });
|
|
146
|
+
|
|
147
|
+
window.addEventListener('touchend', (event) => {
|
|
148
|
+
const touchDuration = performance.now() - touchStartTime;
|
|
149
|
+
const touchEndY = event.changedTouches[0]?.clientY || touchStartY;
|
|
150
|
+
const distance = touchStartY - touchEndY;
|
|
151
|
+
|
|
152
|
+
// Calculate velocity for momentum
|
|
153
|
+
if (touchDuration > 0) {
|
|
154
|
+
scrollVelocity = distance / touchDuration;
|
|
155
|
+
}
|
|
156
|
+
}, { passive: true });
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// Initialize scroll humanization
|
|
160
|
+
trackScrollBehavior();
|
|
161
|
+
enhanceTouchScroll();
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
// Don't catch errors - let them bubble up so we can see them
|
|
165
|
+
humanizeScroll();
|
|
166
|
+
})();`;
|
|
167
|
+
};
|
|
168
|
+
/**
|
|
169
|
+
* Helper sleep function
|
|
170
|
+
*/
|
|
171
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
172
|
+
/**
|
|
173
|
+
* CDP-level human-like scroll function
|
|
174
|
+
*/
|
|
175
|
+
export const humanScroll = async (client, targetY, config = {}) => {
|
|
176
|
+
const inputClient = client;
|
|
177
|
+
// Use Page.getLayoutMetrics instead of Runtime.evaluate to avoid
|
|
178
|
+
// activating the Runtime domain (detection vector #1)
|
|
179
|
+
const metrics = await inputClient.Page.getLayoutMetrics();
|
|
180
|
+
const startY = metrics.layoutViewport.pageY;
|
|
181
|
+
const viewport = {
|
|
182
|
+
width: metrics.layoutViewport.clientWidth,
|
|
183
|
+
height: metrics.layoutViewport.clientHeight,
|
|
184
|
+
};
|
|
185
|
+
// Generate scroll path
|
|
186
|
+
const path = generateScrollPath(startY, targetY, config);
|
|
187
|
+
// Position mouse in center of viewport
|
|
188
|
+
const mouseX = viewport.width / 2;
|
|
189
|
+
const mouseY = viewport.height / 2;
|
|
190
|
+
// Execute scroll path
|
|
191
|
+
let lastY = startY;
|
|
192
|
+
for (const point of path) {
|
|
193
|
+
const deltaY = point.y - lastY;
|
|
194
|
+
if (deltaY !== 0) {
|
|
195
|
+
// Dispatch wheel event
|
|
196
|
+
await inputClient.Input.dispatchMouseEvent({
|
|
197
|
+
type: 'mouseWheel',
|
|
198
|
+
x: mouseX,
|
|
199
|
+
y: mouseY,
|
|
200
|
+
deltaX: 0,
|
|
201
|
+
deltaY: deltaY,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
lastY = point.y;
|
|
205
|
+
// Wait for delay
|
|
206
|
+
await sleep(point.delay);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Scroll to element with human-like behavior
|
|
211
|
+
*/
|
|
212
|
+
export const humanScrollToElement = async (client, selector, config = {}) => {
|
|
213
|
+
const cdpClient = client;
|
|
214
|
+
// Use DOM domain to find element position (avoids Runtime.evaluate)
|
|
215
|
+
await cdpClient.DOM.enable();
|
|
216
|
+
const { root } = await cdpClient.DOM.getDocument();
|
|
217
|
+
const { nodeId } = await cdpClient.DOM.querySelector({ nodeId: root.nodeId, selector });
|
|
218
|
+
if (!nodeId) {
|
|
219
|
+
throw new Error(`Element not found: ${selector}`);
|
|
220
|
+
}
|
|
221
|
+
const { model } = await cdpClient.DOM.getBoxModel({ nodeId });
|
|
222
|
+
// content quad: [x1,y1, x2,y2, x3,y3, x4,y4] - these are page coordinates
|
|
223
|
+
const elementTop = model.content[1];
|
|
224
|
+
const elementBottom = model.content[5];
|
|
225
|
+
const elementHeight = elementBottom - elementTop;
|
|
226
|
+
// Get viewport dimensions
|
|
227
|
+
const metrics = await cdpClient.Page.getLayoutMetrics();
|
|
228
|
+
const viewportHeight = metrics.layoutViewport.clientHeight;
|
|
229
|
+
// Calculate target scroll position (element centered in viewport)
|
|
230
|
+
const targetY = elementTop - (viewportHeight / 2) + (elementHeight / 2);
|
|
231
|
+
await humanScroll(client, Math.max(0, targetY), config);
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* Setup scroll humanization at CDP level
|
|
235
|
+
*/
|
|
236
|
+
export const setupScrollHumanization = async (client) => {
|
|
237
|
+
const runtimeClient = client;
|
|
238
|
+
// NOTE: Using addScriptToEvaluateOnNewDocument instead of Runtime.evaluate
|
|
239
|
+
// Runtime.evaluate is a CDP detection vector
|
|
240
|
+
await runtimeClient.Page.addScriptToEvaluateOnNewDocument({
|
|
241
|
+
source: createScrollHumanizationScript()
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=scroll-humanization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-humanization.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/scroll-humanization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base stealth script for hiding automation indicators
|
|
3
|
+
* Includes error stack hiding, console patching, and automation flags removal
|
|
4
|
+
*
|
|
5
|
+
* 2024-2025 Enhancements:
|
|
6
|
+
* - deviceMemory spoofing
|
|
7
|
+
* - pdfViewerEnabled consistency
|
|
8
|
+
* - Notification.permission handling
|
|
9
|
+
* - Bluetooth/USB/Serial API masking
|
|
10
|
+
* - Speech synthesis voice spoofing
|
|
11
|
+
* - Credentials API consistency
|
|
12
|
+
*/
|
|
13
|
+
export declare const createStealthScript: () => string;
|
|
14
|
+
//# sourceMappingURL=stealth-script.d.ts.map
|
|
@@ -0,0 +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,MA+4BtC,CAAC"}
|