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.
Files changed (127) 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 +452 -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 +776 -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 +643 -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 +17 -1
  57. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -1
  58. package/dist/fingerprinting/fingerprint-overrides/index.js +21 -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 +153 -90
  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/prototype-integrity.d.ts +13 -0
  78. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
  79. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +355 -0
  80. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
  81. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +12 -3
  82. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -1
  83. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +261 -71
  84. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -1
  85. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
  86. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
  87. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +380 -0
  88. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
  89. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +8 -0
  90. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -1
  91. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +756 -71
  92. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -1
  93. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
  94. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
  95. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +368 -0
  96. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
  97. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
  98. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
  99. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +438 -0
  100. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
  101. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +7 -1
  102. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -1
  103. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +158 -58
  104. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -1
  105. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
  106. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
  107. package/dist/fingerprinting/fingerprint-overrides/utils.js +517 -0
  108. package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
  109. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -1
  110. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +51 -10
  111. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -1
  112. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -1
  113. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +11 -1
  114. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -1
  115. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -1
  116. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +11 -1
  117. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -1
  118. package/dist/page.d.ts +12 -0
  119. package/dist/page.d.ts.map +1 -1
  120. package/dist/page.js +35 -3
  121. package/dist/page.js.map +1 -1
  122. package/dist/tsconfig.build.tsbuildinfo +1 -1
  123. package/package.json +4 -4
  124. package/dist/fingerprinting/canvas-fingerprint.d.ts +0 -4
  125. package/dist/fingerprinting/canvas-fingerprint.d.ts.map +0 -1
  126. package/dist/fingerprinting/canvas-fingerprint.js +0 -60
  127. package/dist/fingerprinting/canvas-fingerprint.js.map +0 -1
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqlCL,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"}
@@ -0,0 +1,368 @@
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 const createStorageConsistencyScript = () => {
13
+ return `
14
+ (() => {
15
+ 'use strict';
16
+
17
+ // Storage Consistency Spoofing for 2024-2025
18
+ const spoofStorageAPIs = () => {
19
+ const platform = navigator.platform || 'Win32';
20
+
21
+ // Generate consistent seed for stable values
22
+ const generateSeed = () => {
23
+ const ua = navigator.userAgent || '';
24
+ const screen = window.screen;
25
+ return (ua.length * 17 + (screen.width || 0) * 31 + (screen.height || 0) * 13) % 1000000;
26
+ };
27
+
28
+ const sessionSeed = generateSeed();
29
+
30
+ // Seeded random for consistent values
31
+ const seededRandom = (seed, min = 0, max = 1) => {
32
+ const x = Math.sin(seed) * 10000;
33
+ const random = x - Math.floor(x);
34
+ return min + random * (max - min);
35
+ };
36
+
37
+ // 1. Override navigator.storage.estimate()
38
+ const spoofStorageEstimate = () => {
39
+ if (navigator.storage && navigator.storage.estimate) {
40
+ const originalEstimate = navigator.storage.estimate;
41
+
42
+ navigator.storage.estimate = function() {
43
+ // Realistic storage values for different platforms
44
+ const storageConfigs = {
45
+ 'Win32': {
46
+ quotaBase: 300 * 1024 * 1024 * 1024, // ~300GB typical Windows
47
+ usageBase: 50 * 1024 * 1024, // ~50MB typical usage
48
+ variance: 0.15
49
+ },
50
+ 'MacIntel': {
51
+ quotaBase: 250 * 1024 * 1024 * 1024, // ~250GB typical Mac
52
+ usageBase: 45 * 1024 * 1024,
53
+ variance: 0.12
54
+ },
55
+ 'Linux x86_64': {
56
+ quotaBase: 200 * 1024 * 1024 * 1024, // ~200GB typical Linux
57
+ usageBase: 40 * 1024 * 1024,
58
+ variance: 0.18
59
+ }
60
+ };
61
+
62
+ const config = storageConfigs[platform] || storageConfigs['Win32'];
63
+
64
+ // Calculate consistent but varied values
65
+ const quotaVariance = seededRandom(sessionSeed, 1 - config.variance, 1 + config.variance);
66
+ const usageVariance = seededRandom(sessionSeed + 1, 0.5, 2);
67
+
68
+ const quota = Math.floor(config.quotaBase * quotaVariance);
69
+ const usage = Math.floor(config.usageBase * usageVariance);
70
+
71
+ return Promise.resolve({
72
+ quota: quota,
73
+ usage: usage,
74
+ usageDetails: {
75
+ indexedDB: Math.floor(usage * 0.6),
76
+ caches: Math.floor(usage * 0.3),
77
+ serviceWorkerRegistrations: Math.floor(usage * 0.1)
78
+ }
79
+ });
80
+ };
81
+ }
82
+ };
83
+
84
+ // 2. Override StorageManager.persist()
85
+ const spoofStoragePersist = () => {
86
+ if (navigator.storage && navigator.storage.persist) {
87
+ navigator.storage.persist = function() {
88
+ // Most browsers return false unless explicitly granted
89
+ return Promise.resolve(false);
90
+ };
91
+ }
92
+
93
+ if (navigator.storage && navigator.storage.persisted) {
94
+ navigator.storage.persisted = function() {
95
+ return Promise.resolve(false);
96
+ };
97
+ }
98
+ };
99
+
100
+ // 3. Protect IndexedDB from fingerprinting
101
+ const spoofIndexedDB = () => {
102
+ if (!window.indexedDB) return;
103
+
104
+ const originalOpen = window.indexedDB.open;
105
+ const originalDatabases = window.indexedDB.databases;
106
+
107
+ // Track opened databases for consistency
108
+ const openedDatabases = new Set();
109
+
110
+ window.indexedDB.open = function(name, version) {
111
+ openedDatabases.add(name);
112
+ return originalOpen.call(this, name, version);
113
+ };
114
+
115
+ // Override databases() to hide fingerprinting attempts
116
+ if (originalDatabases) {
117
+ window.indexedDB.databases = function() {
118
+ // Return only databases that were opened in this session
119
+ return originalDatabases.call(this).then(databases => {
120
+ // Filter to only known databases or return empty for privacy
121
+ return databases.filter(db =>
122
+ openedDatabases.has(db.name) ||
123
+ // Allow common legitimate databases
124
+ db.name.startsWith('firebaseLocalStorage') ||
125
+ db.name === 'localforage'
126
+ );
127
+ });
128
+ };
129
+ }
130
+ };
131
+
132
+ // 4. Override localStorage/sessionStorage quota reporting
133
+ const spoofStorageQuota = () => {
134
+ // Create consistent storage size reporting
135
+ const getStorageSize = (storage) => {
136
+ let totalSize = 0;
137
+ try {
138
+ for (let i = 0; i < storage.length; i++) {
139
+ const key = storage.key(i);
140
+ if (key) {
141
+ totalSize += key.length + (storage.getItem(key) || '').length;
142
+ }
143
+ }
144
+ } catch (e) {}
145
+ return totalSize;
146
+ };
147
+
148
+ // Ensure storage appears normal
149
+ const originalLocalStorageLength = Object.getOwnPropertyDescriptor(Storage.prototype, 'length');
150
+
151
+ if (originalLocalStorageLength) {
152
+ Object.defineProperty(Storage.prototype, 'length', {
153
+ get() {
154
+ // Return actual length but ensure it's reasonable
155
+ const actualLength = originalLocalStorageLength.get.call(this);
156
+ return actualLength;
157
+ },
158
+ configurable: true,
159
+ enumerable: true
160
+ });
161
+ }
162
+ };
163
+
164
+ // 5. Override CacheStorage.keys()
165
+ const spoofCacheStorage = () => {
166
+ if ('caches' in window) {
167
+ const originalKeys = CacheStorage.prototype.keys;
168
+ const originalOpen = CacheStorage.prototype.open;
169
+ const originalHas = CacheStorage.prototype.has;
170
+ const originalDelete = CacheStorage.prototype.delete;
171
+
172
+ // Track caches opened in this session
173
+ const sessionCaches = new Set();
174
+
175
+ CacheStorage.prototype.open = function(cacheName) {
176
+ sessionCaches.add(cacheName);
177
+ return originalOpen.call(this, cacheName);
178
+ };
179
+
180
+ CacheStorage.prototype.keys = function() {
181
+ return originalKeys.call(this).then(keys => {
182
+ // Filter to only return caches that are expected
183
+ return keys.filter(key =>
184
+ sessionCaches.has(key) ||
185
+ // Allow common legitimate cache names
186
+ key.includes('workbox') ||
187
+ key.includes('runtime') ||
188
+ key.includes('precache') ||
189
+ key.includes('sw-') ||
190
+ key.includes('v1') ||
191
+ key.includes('v2')
192
+ );
193
+ });
194
+ };
195
+
196
+ CacheStorage.prototype.has = function(cacheName) {
197
+ // Be honest about caches that exist
198
+ return originalHas.call(this, cacheName);
199
+ };
200
+ }
201
+ };
202
+
203
+ // 6. Protect FileSystem API
204
+ const spoofFileSystemAPI = () => {
205
+ // Protect requestFileSystem if available
206
+ if (window.requestFileSystem || window.webkitRequestFileSystem) {
207
+ const originalRequestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
208
+
209
+ window.requestFileSystem = window.webkitRequestFileSystem = function(type, size, successCallback, errorCallback) {
210
+ // Allow the request but with controlled quota
211
+ const maxSize = 50 * 1024 * 1024; // 50MB max
212
+ const limitedSize = Math.min(size, maxSize);
213
+
214
+ return originalRequestFileSystem.call(
215
+ window,
216
+ type,
217
+ limitedSize,
218
+ successCallback,
219
+ errorCallback
220
+ );
221
+ };
222
+ }
223
+
224
+ // Protect StorageManager quota
225
+ if (navigator.storage && navigator.storage.estimate) {
226
+ // Already handled above
227
+ }
228
+ };
229
+
230
+ // 7. Cookie Store API protection
231
+ const spoofCookieStore = () => {
232
+ if ('cookieStore' in window) {
233
+ const originalGetAll = cookieStore.getAll;
234
+ const originalGet = cookieStore.get;
235
+
236
+ // Filter sensitive or fingerprinting cookies
237
+ const filterCookies = (cookies) => {
238
+ if (!Array.isArray(cookies)) return cookies;
239
+
240
+ return cookies.filter(cookie => {
241
+ // Allow legitimate cookies, filter suspicious ones
242
+ const name = cookie.name || '';
243
+
244
+ // Block known fingerprinting cookie patterns
245
+ if (name.includes('__fingerprint') ||
246
+ name.includes('_fp_') ||
247
+ name.includes('deviceId') ||
248
+ name.includes('browser_id')) {
249
+ return false;
250
+ }
251
+
252
+ return true;
253
+ });
254
+ };
255
+
256
+ cookieStore.getAll = function(options) {
257
+ return originalGetAll.call(this, options).then(filterCookies);
258
+ };
259
+
260
+ cookieStore.get = function(options) {
261
+ return originalGet.call(this, options).then(cookie => {
262
+ if (!cookie) return cookie;
263
+ const filtered = filterCookies([cookie]);
264
+ return filtered.length > 0 ? filtered[0] : null;
265
+ });
266
+ };
267
+ }
268
+ };
269
+
270
+ // 8. Web SQL Database protection (deprecated but still detected)
271
+ const spoofWebSQL = () => {
272
+ if (window.openDatabase) {
273
+ const originalOpenDatabase = window.openDatabase;
274
+ const openedDatabases = new Set();
275
+
276
+ window.openDatabase = function(name, version, displayName, estimatedSize) {
277
+ openedDatabases.add(name);
278
+
279
+ // Limit estimated size to prevent fingerprinting through quota
280
+ const limitedSize = Math.min(estimatedSize || 0, 5 * 1024 * 1024);
281
+
282
+ try {
283
+ return originalOpenDatabase.call(
284
+ window,
285
+ name,
286
+ version,
287
+ displayName,
288
+ limitedSize
289
+ );
290
+ } catch (e) {
291
+ // Web SQL is deprecated, return gracefully
292
+ throw e;
293
+ }
294
+ };
295
+ }
296
+ };
297
+
298
+ // 9. Broadcast Channel API protection
299
+ const spoofBroadcastChannel = () => {
300
+ if (typeof BroadcastChannel !== 'undefined') {
301
+ const OriginalBroadcastChannel = BroadcastChannel;
302
+ const channels = new Map();
303
+
304
+ window.BroadcastChannel = function(name) {
305
+ const channel = new OriginalBroadcastChannel(name);
306
+
307
+ // Track channel usage
308
+ if (!channels.has(name)) {
309
+ channels.set(name, []);
310
+ }
311
+ channels.get(name).push(channel);
312
+
313
+ return channel;
314
+ };
315
+
316
+ // Note: Don't assign to prototype - it may be frozen in modern Chrome
317
+ }
318
+ };
319
+
320
+ // 10. SharedWorker storage protection
321
+ const spoofSharedWorker = () => {
322
+ if (typeof SharedWorker !== 'undefined') {
323
+ const OriginalSharedWorker = SharedWorker;
324
+ const workers = new Set();
325
+
326
+ window.SharedWorker = function(scriptURL, options) {
327
+ const urlString = typeof scriptURL === 'string' ? scriptURL : scriptURL.toString();
328
+ workers.add(urlString);
329
+
330
+ return new OriginalSharedWorker(scriptURL, options);
331
+ };
332
+
333
+ // Note: Don't assign to prototype - it may be frozen in modern Chrome
334
+ }
335
+ };
336
+
337
+ // Initialize all storage protections
338
+ try {
339
+ spoofStorageEstimate();
340
+ spoofStoragePersist();
341
+ spoofIndexedDB();
342
+ spoofStorageQuota();
343
+ spoofCacheStorage();
344
+ spoofFileSystemAPI();
345
+ spoofCookieStore();
346
+ spoofWebSQL();
347
+ spoofBroadcastChannel();
348
+ spoofSharedWorker();
349
+ } catch (e) {
350
+ console.error('[STORAGE-CONSISTENCY] Failed to apply storage consistency:', e);
351
+ throw e; // Rethrow to make errors visible
352
+ }
353
+ };
354
+
355
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
356
+ const ERROR_PREFIX = '[CDP-FP-ERROR]';
357
+
358
+ try {
359
+ console.log(DEBUG_PREFIX, 'Starting storage consistency...');
360
+ spoofStorageAPIs();
361
+ console.log(DEBUG_PREFIX, '✓ Storage consistency applied');
362
+ } catch (e) {
363
+ console.error(ERROR_PREFIX, '✗ Failed to apply storage consistency:', e);
364
+ throw e;
365
+ }
366
+ })();`;
367
+ };
368
+ //# sourceMappingURL=storage-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/storage-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAW,EAAE;IACvD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiWL,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Timing Consistency Module
3
+ * Dedicated timing fingerprint protection for 2024-2025
4
+ *
5
+ * Features:
6
+ * - Consistent Date.now() and performance.now() relationship
7
+ * - PerformanceEntry timing value protection
8
+ * - performance.measureUserAgentSpecificMemory() handling
9
+ * - event.timeStamp consistency in dispatched events
10
+ * - requestAnimationFrame timing patterns
11
+ */
12
+ export declare const createTimingConsistencyScript: () => string;
13
+ //# sourceMappingURL=timing-consistency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/timing-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,6BAA6B,QAAO,MAyahD,CAAC"}