jumpy-lion 0.0.41 → 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.
Files changed (119) hide show
  1. package/dist/browser-controller.d.ts.map +1 -1
  2. package/dist/browser-controller.js +102 -16
  3. package/dist/browser-controller.js.map +1 -1
  4. package/dist/browser-plugin.d.ts +20 -1
  5. package/dist/browser-plugin.d.ts.map +1 -1
  6. package/dist/browser-plugin.js +21 -1
  7. package/dist/browser-plugin.js.map +1 -1
  8. package/dist/browser-process/browser.d.ts +22 -1
  9. package/dist/browser-process/browser.d.ts.map +1 -1
  10. package/dist/browser-process/browser.js +77 -5
  11. package/dist/browser-process/browser.js.map +1 -1
  12. package/dist/browser-profiles/chrome/default.d.ts +116 -0
  13. package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
  14. package/dist/browser-profiles/chrome/default.js +118 -1
  15. package/dist/browser-profiles/chrome/default.js.map +1 -1
  16. package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
  17. package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
  18. package/dist/browser-profiles/chrome/populate-profile.js +300 -0
  19. package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
  20. package/dist/browser-profiles/index.d.ts +1 -0
  21. package/dist/browser-profiles/index.d.ts.map +1 -1
  22. package/dist/browser-profiles/index.js +2 -0
  23. package/dist/browser-profiles/index.js.map +1 -1
  24. package/dist/crawler.d.ts +32 -1
  25. package/dist/crawler.d.ts.map +1 -1
  26. package/dist/crawler.js +7 -0
  27. package/dist/crawler.js.map +1 -1
  28. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
  29. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
  30. package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
  31. package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
  32. package/dist/fingerprinting/fingerprint-injector.d.ts +40 -2
  33. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -1
  34. package/dist/fingerprinting/fingerprint-injector.js +449 -44
  35. package/dist/fingerprinting/fingerprint-injector.js.map +1 -1
  36. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -1
  37. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +11 -1
  38. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -1
  39. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -1
  40. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +11 -1
  41. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -1
  42. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
  43. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
  44. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +497 -0
  45. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
  46. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -1
  47. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +11 -1
  48. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -1
  49. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +14 -0
  50. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
  51. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +536 -0
  52. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
  53. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -1
  54. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +11 -1
  55. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -1
  56. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +16 -1
  57. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  58. package/dist/fingerprinting/fingerprint-overrides/index.js +19 -1
  59. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -1
  60. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
  61. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
  62. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +291 -0
  63. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
  64. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -1
  65. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +54 -22
  66. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -1
  67. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -1
  68. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +4 -5
  69. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -1
  70. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -1
  71. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +11 -1
  72. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -1
  73. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +13 -0
  74. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -1
  75. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +413 -70
  76. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -1
  77. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +10 -3
  78. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -1
  79. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +132 -73
  80. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -1
  81. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
  82. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
  83. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +380 -0
  84. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
  85. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +8 -0
  86. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  87. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +417 -71
  88. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  89. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
  90. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
  91. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +368 -0
  92. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
  93. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
  94. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
  95. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +438 -0
  96. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
  97. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
  98. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
  99. package/dist/fingerprinting/fingerprint-overrides/utils.js +315 -0
  100. package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
  101. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  102. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +13 -1
  103. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  104. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
  105. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +11 -1
  106. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
  107. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
  108. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +11 -1
  109. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
  110. package/dist/page.d.ts +12 -0
  111. package/dist/page.d.ts.map +1 -1
  112. package/dist/page.js +35 -3
  113. package/dist/page.js.map +1 -1
  114. package/dist/tsconfig.build.tsbuildinfo +1 -1
  115. package/package.json +4 -4
  116. package/dist/fingerprinting/canvas-fingerprint.d.ts +0 -4
  117. package/dist/fingerprinting/canvas-fingerprint.d.ts.map +0 -1
  118. package/dist/fingerprinting/canvas-fingerprint.js +0 -60
  119. package/dist/fingerprinting/canvas-fingerprint.js.map +0 -1
@@ -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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"}
@@ -1,6 +1,14 @@
1
1
  /**
2
2
  * Base stealth script for hiding automation indicators
3
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
4
12
  */
5
13
  export declare const createStealthScript: () => string;
6
14
  //# sourceMappingURL=stealth-script.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stealth-script.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,mBAAmB,QAAO,MAkbtC,CAAC"}
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,MAowBtC,CAAC"}
@@ -1,13 +1,21 @@
1
1
  /**
2
2
  * Base stealth script for hiding automation indicators
3
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
4
12
  */
5
13
  export const createStealthScript = () => {
6
14
  return `
7
15
  (() => {
8
16
  'use strict';
9
17
 
10
- // Enhanced stealth script for 2025 - July
18
+ // Enhanced stealth script for 2025 - December
11
19
 
12
20
  // Helper functions
13
21
  const wrapNative = (fnName) => {
@@ -24,6 +32,42 @@ export const createStealthScript = () => {
24
32
  }
25
33
  });
26
34
  };
35
+
36
+ // Generate consistent session seed for stable values
37
+ const generateSessionSeed = () => {
38
+ const ua = navigator.userAgent || '';
39
+ const screen = window.screen;
40
+ const seed = ua.length + (screen.width || 0) + (screen.height || 0);
41
+ return seed;
42
+ };
43
+
44
+ const sessionSeed = generateSessionSeed();
45
+
46
+ // Helper to safely define property with guards
47
+ const safeDefineProperty = (obj, prop, descriptor) => {
48
+ try {
49
+ const existing = Object.getOwnPropertyDescriptor(obj, prop);
50
+ if (existing && existing.configurable === false) {
51
+ return false; // Cannot redefine
52
+ }
53
+ // Always use configurable: true to allow other scripts to modify
54
+ Object.defineProperty(obj, prop, {
55
+ ...descriptor,
56
+ configurable: true
57
+ });
58
+ return true;
59
+ } catch (e) {
60
+ return false;
61
+ }
62
+ };
63
+
64
+ // Helper to safely define getter property
65
+ const safeDefineGetter = (obj, prop, getter, enumerable = true) => {
66
+ return safeDefineProperty(obj, prop, {
67
+ get: getter,
68
+ enumerable: enumerable
69
+ });
70
+ };
27
71
 
28
72
  // 1. Enhanced Error Stack Hiding (2025)
29
73
  const hideErrorStack = () => {
@@ -98,9 +142,8 @@ export const createStealthScript = () => {
98
142
  });
99
143
 
100
144
  try {
101
- Object.defineProperty(window, 'console', {
145
+ safeDefineProperty(window, 'console', {
102
146
  value: consoleProxy,
103
- configurable: false,
104
147
  writable: false,
105
148
  enumerable: true
106
149
  });
@@ -112,12 +155,9 @@ export const createStealthScript = () => {
112
155
 
113
156
  // 3. WebDriver and Automation Flags Removal (2025)
114
157
  const removeAutomationFlags = () => {
115
- // Remove webdriver
158
+ // Remove webdriver (with guard)
116
159
  if (navigator.webdriver) {
117
- Object.defineProperty(navigator, 'webdriver', {
118
- get: () => undefined,
119
- configurable: false
120
- });
160
+ safeDefineGetter(navigator, 'webdriver', () => undefined, false);
121
161
  }
122
162
 
123
163
  // Remove automation indicators
@@ -143,17 +183,16 @@ export const createStealthScript = () => {
143
183
  } catch (e) {}
144
184
  });
145
185
 
146
- // Remove CDP specific properties
186
+ // Remove CDP specific properties (with guard)
147
187
  if (window.chrome) {
148
188
  const originalChrome = window.chrome;
149
- Object.defineProperty(window, 'chrome', {
150
- get() {
189
+ safeDefineGetter(window, 'chrome', () => {
190
+ try {
151
191
  if (new Error().stack.includes('evaluateOnNewDocument')) {
152
192
  return undefined;
153
193
  }
154
- return originalChrome;
155
- },
156
- configurable: false
194
+ } catch (e) {}
195
+ return originalChrome;
157
196
  });
158
197
  }
159
198
  };
@@ -178,7 +217,7 @@ export const createStealthScript = () => {
178
217
 
179
218
  // Patch Error constructor to prevent stack trace manipulation
180
219
  const OriginalError = Error;
181
- window.Error = new Proxy(OriginalError, {
220
+ const ErrorProxy = new Proxy(OriginalError, {
182
221
  construct(target, args) {
183
222
  const error = Reflect.construct(target, args);
184
223
 
@@ -194,9 +233,35 @@ export const createStealthScript = () => {
194
233
  });
195
234
 
196
235
  return error;
236
+ },
237
+ get(target, prop) {
238
+ // Return the original prototype when accessing .prototype
239
+ if (prop === 'prototype') {
240
+ return OriginalError.prototype;
241
+ }
242
+ return Reflect.get(target, prop);
243
+ },
244
+ set(target, prop, value) {
245
+ // Prevent setting prototype or other frozen properties
246
+ if (prop === 'prototype') {
247
+ return true; // Silently ignore
248
+ }
249
+ return Reflect.set(target, prop, value);
197
250
  }
198
251
  });
199
- window.Error.prototype = OriginalError.prototype;
252
+
253
+ // Use defineProperty to replace Error without modifying frozen prototype
254
+ try {
255
+ Object.defineProperty(window, 'Error', {
256
+ value: ErrorProxy,
257
+ writable: true,
258
+ enumerable: false,
259
+ configurable: true
260
+ });
261
+ } catch (e) {
262
+ // If we can't redefine, just assign
263
+ window.Error = ErrorProxy;
264
+ }
200
265
  };
201
266
 
202
267
  // 5. Plugin and MimeType Spoofing (2025)
@@ -237,62 +302,58 @@ export const createStealthScript = () => {
237
302
  }
238
303
  ];
239
304
 
240
- // Create fake plugins
305
+ // Create fake plugins using Object.defineProperty for read-only properties
241
306
  const fakePlugins = pluginData.map((p, index) => {
242
307
  const plugin = Object.create(Plugin.prototype);
243
- plugin.name = p.name;
244
- plugin.filename = p.filename;
245
- plugin.description = p.description;
246
- plugin.length = 1;
308
+ Object.defineProperty(plugin, 'name', { value: p.name, writable: false, enumerable: true });
309
+ Object.defineProperty(plugin, 'filename', { value: p.filename, writable: false, enumerable: true });
310
+ Object.defineProperty(plugin, 'description', { value: p.description, writable: false, enumerable: true });
311
+ Object.defineProperty(plugin, 'length', { value: 1, writable: false, enumerable: true });
247
312
  plugin[0] = mimeData[index] || mimeData[0];
248
313
  return plugin;
249
314
  });
250
315
 
251
- // Create fake mimeTypes
316
+ // Create fake mimeTypes using Object.defineProperty for read-only properties
252
317
  const fakeMimeTypes = mimeData.map((m, index) => {
253
318
  const mimeType = Object.create(MimeType.prototype);
254
- mimeType.type = m.type;
255
- mimeType.suffixes = m.suffixes;
256
- mimeType.description = m.description;
257
- mimeType.enabledPlugin = fakePlugins[0];
319
+ Object.defineProperty(mimeType, 'type', { value: m.type, writable: false, enumerable: true });
320
+ Object.defineProperty(mimeType, 'suffixes', { value: m.suffixes, writable: false, enumerable: true });
321
+ Object.defineProperty(mimeType, 'description', { value: m.description, writable: false, enumerable: true });
322
+ Object.defineProperty(mimeType, 'enabledPlugin', { value: fakePlugins[0], writable: false, enumerable: true });
258
323
  return mimeType;
259
324
  });
260
325
 
261
- // Override navigator.plugins
326
+ // Override navigator.plugins (with guard)
262
327
  try {
263
- Object.defineProperty(navigator, 'plugins', {
264
- get: () => {
265
- const arr = Object.create(PluginArray.prototype);
266
- fakePlugins.forEach((p, i) => {
267
- arr[i] = p;
268
- arr[p.name] = p;
269
- });
270
- arr.length = fakePlugins.length;
271
- arr.item = (index) => arr[index] || null;
272
- arr.namedItem = (name) => arr[name] || null;
273
- arr.refresh = () => {};
274
- return arr;
275
- },
276
- configurable: false,
277
- enumerable: true
278
- });
328
+ const pluginsGetter = () => {
329
+ const arr = Object.create(PluginArray.prototype);
330
+ fakePlugins.forEach((p, i) => {
331
+ arr[i] = p;
332
+ arr[p.name] = p;
333
+ });
334
+ // Use Object.defineProperty for read-only properties
335
+ Object.defineProperty(arr, 'length', { value: fakePlugins.length, writable: false, enumerable: true });
336
+ Object.defineProperty(arr, 'item', { value: (index) => arr[index] || null, writable: false, enumerable: false });
337
+ Object.defineProperty(arr, 'namedItem', { value: (name) => arr[name] || null, writable: false, enumerable: false });
338
+ Object.defineProperty(arr, 'refresh', { value: () => {}, writable: false, enumerable: false });
339
+ return arr;
340
+ };
341
+ safeDefineGetter(navigator, 'plugins', pluginsGetter);
279
342
 
280
- // Override navigator.mimeTypes
281
- Object.defineProperty(navigator, 'mimeTypes', {
282
- get: () => {
283
- const arr = Object.create(MimeTypeArray.prototype);
284
- fakeMimeTypes.forEach((m, i) => {
285
- arr[i] = m;
286
- arr[m.type] = m;
287
- });
288
- arr.length = fakeMimeTypes.length;
289
- arr.item = (index) => arr[index] || null;
290
- arr.namedItem = (name) => arr[name] || null;
291
- return arr;
292
- },
293
- configurable: false,
294
- enumerable: true
295
- });
343
+ // Override navigator.mimeTypes (with guard)
344
+ const mimeTypesGetter = () => {
345
+ const arr = Object.create(MimeTypeArray.prototype);
346
+ fakeMimeTypes.forEach((m, i) => {
347
+ arr[i] = m;
348
+ arr[m.type] = m;
349
+ });
350
+ // Use Object.defineProperty for read-only properties
351
+ Object.defineProperty(arr, 'length', { value: fakeMimeTypes.length, writable: false, enumerable: true });
352
+ Object.defineProperty(arr, 'item', { value: (index) => arr[index] || null, writable: false, enumerable: false });
353
+ Object.defineProperty(arr, 'namedItem', { value: (name) => arr[name] || null, writable: false, enumerable: false });
354
+ return arr;
355
+ };
356
+ safeDefineGetter(navigator, 'mimeTypes', mimeTypesGetter);
296
357
  } catch (e) {}
297
358
  };
298
359
 
@@ -412,28 +473,313 @@ export const createStealthScript = () => {
412
473
  };
413
474
 
414
475
  if (!window.chrome) window.chrome = {};
415
- Object.defineProperty(window.chrome, 'runtime', {
476
+ safeDefineProperty(window.chrome, 'runtime', {
416
477
  value: runtime,
417
- configurable: false,
418
478
  enumerable: true,
419
479
  writable: false
420
480
  });
421
481
  }
422
482
  };
423
483
 
484
+ // 10. Device Memory Spoofing (2024-2025)
485
+ const spoofDeviceMemory = () => {
486
+ const platform = navigator.platform || 'Win32';
487
+
488
+ // Platform-appropriate device memory values
489
+ const memoryConfig = {
490
+ 'Win32': [4, 8, 16], // Most Windows PCs have 4-16GB
491
+ 'MacIntel': [8, 16], // Macs typically have 8-16GB
492
+ 'Linux x86_64': [4, 8, 16]
493
+ };
494
+
495
+ const memories = memoryConfig[platform] || memoryConfig['Win32'];
496
+ // Use session seed for consistency
497
+ const selectedMemory = memories[sessionSeed % memories.length];
498
+
499
+ // Use guard to avoid conflicts with other scripts
500
+ if ('deviceMemory' in navigator) {
501
+ safeDefineGetter(navigator, 'deviceMemory', () => selectedMemory);
502
+ }
503
+ };
504
+
505
+ // 11. PDF Viewer Enabled Spoofing (2024-2025)
506
+ const spoofPdfViewerEnabled = () => {
507
+ // Chrome always has PDF viewer enabled (use guard)
508
+ safeDefineGetter(navigator, 'pdfViewerEnabled', () => true);
509
+ };
510
+
511
+ // 12. Notification Permission Spoofing (2024-2025)
512
+ const spoofNotificationPermission = () => {
513
+ if ('Notification' in window) {
514
+ // Override the permission property to return 'default' (user hasn't been asked) - with guard
515
+ safeDefineGetter(Notification, 'permission', () => 'default');
516
+
517
+ // Override requestPermission to behave normally
518
+ const originalRequestPermission = Notification.requestPermission;
519
+ Notification.requestPermission = function(callback) {
520
+ // Return a promise that resolves to 'default' or 'denied'
521
+ const result = Promise.resolve('default');
522
+ if (callback && typeof callback === 'function') {
523
+ result.then(callback);
524
+ }
525
+ return result;
526
+ };
527
+ }
528
+ };
529
+
530
+ // 13. Bluetooth API Spoofing (2024-2025)
531
+ const spoofBluetoothAPI = () => {
532
+ if ('bluetooth' in navigator) {
533
+ // Make bluetooth appear available but return empty results
534
+ const fakeBluetooth = {
535
+ getAvailability: () => Promise.resolve(true),
536
+ requestDevice: () => Promise.reject(new DOMException('User cancelled the requestDevice() chooser.', 'NotFoundError')),
537
+ getDevices: () => Promise.resolve([]),
538
+ addEventListener: () => {},
539
+ removeEventListener: () => {},
540
+ dispatchEvent: () => true
541
+ };
542
+
543
+ safeDefineGetter(navigator, 'bluetooth', () => fakeBluetooth);
544
+ }
545
+ };
546
+
547
+ // 14. USB API Spoofing (2024-2025)
548
+ const spoofUSBAPI = () => {
549
+ if ('usb' in navigator) {
550
+ const fakeUSB = {
551
+ getDevices: () => Promise.resolve([]),
552
+ requestDevice: () => Promise.reject(new DOMException('No device selected.', 'NotFoundError')),
553
+ addEventListener: () => {},
554
+ removeEventListener: () => {},
555
+ dispatchEvent: () => true,
556
+ onconnect: null,
557
+ ondisconnect: null
558
+ };
559
+
560
+ safeDefineGetter(navigator, 'usb', () => fakeUSB);
561
+ }
562
+ };
563
+
564
+ // 15. Serial API Spoofing (2024-2025)
565
+ const spoofSerialAPI = () => {
566
+ if ('serial' in navigator) {
567
+ const fakeSerial = {
568
+ getPorts: () => Promise.resolve([]),
569
+ requestPort: () => Promise.reject(new DOMException('No port selected.', 'NotFoundError')),
570
+ addEventListener: () => {},
571
+ removeEventListener: () => {},
572
+ dispatchEvent: () => true,
573
+ onconnect: null,
574
+ ondisconnect: null
575
+ };
576
+
577
+ safeDefineGetter(navigator, 'serial', () => fakeSerial);
578
+ }
579
+ };
580
+
581
+ // 16. Speech Synthesis Voices Spoofing (2024-2025)
582
+ const spoofSpeechSynthesis = () => {
583
+ if ('speechSynthesis' in window) {
584
+ const platform = navigator.platform || 'Win32';
585
+
586
+ // Platform-specific voices
587
+ const voiceConfigs = {
588
+ 'Win32': [
589
+ { name: 'Microsoft David - English (United States)', lang: 'en-US', localService: true, default: true },
590
+ { name: 'Microsoft Zira - English (United States)', lang: 'en-US', localService: true, default: false },
591
+ { name: 'Microsoft Mark - English (United States)', lang: 'en-US', localService: true, default: false },
592
+ { name: 'Google US English', lang: 'en-US', localService: false, default: false },
593
+ { name: 'Google UK English Female', lang: 'en-GB', localService: false, default: false },
594
+ { name: 'Google UK English Male', lang: 'en-GB', localService: false, default: false }
595
+ ],
596
+ 'MacIntel': [
597
+ { name: 'Alex', lang: 'en-US', localService: true, default: true },
598
+ { name: 'Samantha', lang: 'en-US', localService: true, default: false },
599
+ { name: 'Daniel', lang: 'en-GB', localService: true, default: false },
600
+ { name: 'Google US English', lang: 'en-US', localService: false, default: false }
601
+ ],
602
+ 'Linux x86_64': [
603
+ { name: 'Google US English', lang: 'en-US', localService: false, default: true },
604
+ { name: 'Google UK English Female', lang: 'en-GB', localService: false, default: false }
605
+ ]
606
+ };
607
+
608
+ const voices = voiceConfigs[platform] || voiceConfigs['Win32'];
609
+
610
+ // Create SpeechSynthesisVoice-like objects
611
+ const fakeVoices = voices.map(v => ({
612
+ voiceURI: v.name,
613
+ name: v.name,
614
+ lang: v.lang,
615
+ localService: v.localService,
616
+ default: v.default
617
+ }));
618
+
619
+ // Override getVoices
620
+ const originalGetVoices = speechSynthesis.getVoices;
621
+ speechSynthesis.getVoices = function() {
622
+ // Return our platform-appropriate voices
623
+ return fakeVoices;
624
+ };
625
+
626
+ // Trigger voiceschanged event after a delay to simulate loading
627
+ setTimeout(() => {
628
+ try {
629
+ const event = new Event('voiceschanged');
630
+ speechSynthesis.dispatchEvent(event);
631
+ } catch (e) {}
632
+ }, 100);
633
+ }
634
+ };
635
+
636
+ // 17. Credentials API Spoofing (2024-2025)
637
+ const spoofCredentialsAPI = () => {
638
+ if ('credentials' in navigator) {
639
+ const originalGet = navigator.credentials.get;
640
+ const originalCreate = navigator.credentials.create;
641
+ const originalStore = navigator.credentials.store;
642
+
643
+ // Make credentials API behave like a normal browser
644
+ navigator.credentials.get = function(options) {
645
+ // For publicKey (WebAuthn), reject like a normal user cancellation
646
+ if (options && options.publicKey) {
647
+ return Promise.reject(new DOMException(
648
+ 'The operation either timed out or was not allowed.',
649
+ 'NotAllowedError'
650
+ ));
651
+ }
652
+ // For password credentials, return null (no saved credentials)
653
+ return Promise.resolve(null);
654
+ };
655
+
656
+ navigator.credentials.create = function(options) {
657
+ if (options && options.publicKey) {
658
+ return Promise.reject(new DOMException(
659
+ 'The operation either timed out or was not allowed.',
660
+ 'NotAllowedError'
661
+ ));
662
+ }
663
+ return originalCreate.apply(this, arguments);
664
+ };
665
+
666
+ navigator.credentials.store = function(credential) {
667
+ // Accept but don't actually store
668
+ return Promise.resolve(credential);
669
+ };
670
+ }
671
+ };
672
+
673
+ // 18. HID API Spoofing (2024-2025)
674
+ const spoofHIDAPI = () => {
675
+ if ('hid' in navigator) {
676
+ const fakeHID = {
677
+ getDevices: () => Promise.resolve([]),
678
+ requestDevice: () => Promise.reject(new DOMException('No device selected.', 'NotFoundError')),
679
+ addEventListener: () => {},
680
+ removeEventListener: () => {},
681
+ dispatchEvent: () => true,
682
+ onconnect: null,
683
+ ondisconnect: null
684
+ };
685
+
686
+ safeDefineGetter(navigator, 'hid', () => fakeHID);
687
+ }
688
+ };
689
+
690
+ // 19. Gamepad API Spoofing (2024-2025)
691
+ const spoofGamepadAPI = () => {
692
+ // Return empty array for getGamepads
693
+ const originalGetGamepads = navigator.getGamepads;
694
+ if (originalGetGamepads) {
695
+ navigator.getGamepads = function() {
696
+ // Return empty array like no gamepads connected
697
+ return [];
698
+ };
699
+ }
700
+ };
701
+
702
+ // 20. Clipboard API Protection (2024-2025)
703
+ const spoofClipboardAPI = () => {
704
+ if (navigator.clipboard) {
705
+ const originalReadText = navigator.clipboard.readText;
706
+ const originalRead = navigator.clipboard.read;
707
+
708
+ // Make clipboard read behave like permission not granted
709
+ navigator.clipboard.readText = function() {
710
+ return Promise.reject(new DOMException(
711
+ 'Read permission denied.',
712
+ 'NotAllowedError'
713
+ ));
714
+ };
715
+
716
+ navigator.clipboard.read = function() {
717
+ return Promise.reject(new DOMException(
718
+ 'Read permission denied.',
719
+ 'NotAllowedError'
720
+ ));
721
+ };
722
+ }
723
+ };
724
+
725
+ // 21. Do Not Track Spoofing (2024-2025)
726
+ const spoofDoNotTrack = () => {
727
+ // Most real users have DNT disabled or not set
728
+ safeDefineGetter(navigator, 'doNotTrack', () => null);
729
+ };
730
+
731
+ // 22. Global Privacy Control Spoofing (2024-2025)
732
+ const spoofGlobalPrivacyControl = () => {
733
+ // Most users don't have GPC enabled
734
+ safeDefineGetter(navigator, 'globalPrivacyControl', () => false);
735
+ };
736
+
424
737
  // Initialize all protections
738
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
739
+ const ERROR_PREFIX = '[CDP-FP-ERROR]';
740
+
741
+ console.log(DEBUG_PREFIX, 'Starting stealth protection injection...');
742
+
743
+ const applyProtection = (name, fn) => {
744
+ try {
745
+ fn();
746
+ console.log(DEBUG_PREFIX, \`✓ Applied \${name}\`);
747
+ return true;
748
+ } catch (e) {
749
+ console.error(ERROR_PREFIX, \`✗ Failed to apply \${name}:\`, e);
750
+ throw e; // Rethrow to make errors visible
751
+ }
752
+ };
753
+
425
754
  try {
426
- hideErrorStack();
427
- patchConsole();
428
- removeAutomationFlags();
429
- preventRuntimeEnableDetection();
430
- spoofPlugins();
431
- spoofPermissions();
432
- spoofBatteryAPI();
433
- spoofConnectionAPI();
434
- spoofChromeRuntime(); // NEW
755
+ applyProtection('Error Stack Hiding', hideErrorStack);
756
+ applyProtection('Console Patching', patchConsole);
757
+ applyProtection('Automation Flags Removal', removeAutomationFlags);
758
+ applyProtection('Runtime.enable Detection Prevention', preventRuntimeEnableDetection);
759
+ applyProtection('Plugin Spoofing', spoofPlugins);
760
+ applyProtection('Permissions API Spoofing', spoofPermissions);
761
+ applyProtection('Battery API Spoofing', spoofBatteryAPI);
762
+ applyProtection('Connection API Spoofing', spoofConnectionAPI);
763
+ applyProtection('Chrome Runtime API Spoofing', spoofChromeRuntime);
764
+ // New 2024-2025 protections
765
+ applyProtection('Device Memory Spoofing', spoofDeviceMemory);
766
+ applyProtection('PDF Viewer Enabled Spoofing', spoofPdfViewerEnabled);
767
+ applyProtection('Notification Permission Spoofing', spoofNotificationPermission);
768
+ applyProtection('Bluetooth API Spoofing', spoofBluetoothAPI);
769
+ applyProtection('USB API Spoofing', spoofUSBAPI);
770
+ applyProtection('Serial API Spoofing', spoofSerialAPI);
771
+ applyProtection('Speech Synthesis Spoofing', spoofSpeechSynthesis);
772
+ applyProtection('Credentials API Spoofing', spoofCredentialsAPI);
773
+ applyProtection('HID API Spoofing', spoofHIDAPI);
774
+ applyProtection('Gamepad API Spoofing', spoofGamepadAPI);
775
+ applyProtection('Clipboard API Protection', spoofClipboardAPI);
776
+ applyProtection('Do Not Track Spoofing', spoofDoNotTrack);
777
+ applyProtection('Global Privacy Control Spoofing', spoofGlobalPrivacyControl);
778
+
779
+ console.log(DEBUG_PREFIX, '✓ All stealth protections applied successfully');
435
780
  } catch (e) {
436
- // Silently fail to avoid detection
781
+ console.error(ERROR_PREFIX, '✗ Failed to apply stealth protections:', e);
782
+ throw e; // Rethrow to make errors visible
437
783
  }
438
784
  })();`;
439
785
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stealth-script.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAW,EAAE;IAC5C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgbL,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"stealth-script.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/stealth-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAW,EAAE;IAC5C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkwBL,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Storage Consistency Spoofing
3
+ * Handles storage-related fingerprinting for 2024-2025
4
+ *
5
+ * Features:
6
+ * - navigator.storage.estimate() with realistic quota values
7
+ * - StorageManager.persist() behavior spoofing
8
+ * - IndexedDB database name consistency
9
+ * - localStorage/sessionStorage quota reporting
10
+ * - CacheStorage.keys() consistent cache names
11
+ */
12
+ export declare const createStorageConsistencyScript: () => string;
13
+ //# sourceMappingURL=storage-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/storage-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,8BAA8B,QAAO,MAmWjD,CAAC"}