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.
Files changed (230) hide show
  1. package/dist/browser-controller.d.ts +22 -3
  2. package/dist/browser-controller.d.ts.map +1 -1
  3. package/dist/browser-controller.js +319 -28
  4. package/dist/browser-controller.js.map +1 -1
  5. package/dist/browser-plugin.d.ts +56 -7
  6. package/dist/browser-plugin.d.ts.map +1 -1
  7. package/dist/browser-plugin.js +268 -56
  8. package/dist/browser-plugin.js.map +1 -1
  9. package/dist/browser-process/browser.d.ts +39 -0
  10. package/dist/browser-process/browser.d.ts.map +1 -1
  11. package/dist/browser-process/browser.js +125 -18
  12. package/dist/browser-process/browser.js.map +1 -1
  13. package/dist/browser-process/process.d.ts +9 -0
  14. package/dist/browser-process/process.d.ts.map +1 -1
  15. package/dist/browser-process/process.js +100 -6
  16. package/dist/browser-process/process.js.map +1 -1
  17. package/dist/browser-profiles/chrome/default.d.ts +116 -0
  18. package/dist/browser-profiles/chrome/default.d.ts.map +1 -1
  19. package/dist/browser-profiles/chrome/default.js +118 -1
  20. package/dist/browser-profiles/chrome/default.js.map +1 -1
  21. package/dist/browser-profiles/chrome/populate-profile.d.ts +76 -0
  22. package/dist/browser-profiles/chrome/populate-profile.d.ts.map +1 -0
  23. package/dist/browser-profiles/chrome/populate-profile.js +300 -0
  24. package/dist/browser-profiles/chrome/populate-profile.js.map +1 -0
  25. package/dist/browser-profiles/index.d.ts +1 -0
  26. package/dist/browser-profiles/index.d.ts.map +1 -1
  27. package/dist/browser-profiles/index.js +2 -0
  28. package/dist/browser-profiles/index.js.map +1 -1
  29. package/dist/crawler.d.ts +81 -9
  30. package/dist/crawler.d.ts.map +1 -1
  31. package/dist/crawler.js +26 -10
  32. package/dist/crawler.js.map +1 -1
  33. package/dist/fingerprinting/all-fingerprint-defender/_locales/en/messages.json +95 -0
  34. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts +2 -0
  35. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.d.ts.map +1 -0
  36. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js +1 -0
  37. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-16ff15da.js.map +1 -0
  38. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts +2 -0
  39. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.d.ts.map +1 -0
  40. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js +1 -0
  41. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-1a1456ec.js.map +1 -0
  42. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts +83 -0
  43. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.d.ts.map +1 -0
  44. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js +1 -0
  45. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-3a7b59dd.js.map +1 -0
  46. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts +2 -0
  47. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.d.ts.map +1 -0
  48. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js +1 -0
  49. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-7ce85519.js.map +1 -0
  50. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts +2 -0
  51. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.d.ts.map +1 -0
  52. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js +1 -0
  53. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-aaea1190.js.map +1 -0
  54. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts +2 -0
  55. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.d.ts.map +1 -0
  56. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js +1 -0
  57. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-b4410958.js.map +1 -0
  58. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts +2 -0
  59. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.d.ts.map +1 -0
  60. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js +1 -0
  61. package/dist/fingerprinting/all-fingerprint-defender/assets/chunk-dfed3562.js.map +1 -0
  62. package/dist/fingerprinting/all-fingerprint-defender/assets/debounce-09920c81.css +1 -0
  63. package/dist/fingerprinting/all-fingerprint-defender/assets/options-fe2fb5aa.css +1 -0
  64. package/dist/fingerprinting/all-fingerprint-defender/assets/popup-1886d2ef.css +1 -0
  65. package/dist/fingerprinting/all-fingerprint-defender/img/icon-128.png +0 -0
  66. package/dist/fingerprinting/all-fingerprint-defender/img/icon-16.png +0 -0
  67. package/dist/fingerprinting/all-fingerprint-defender/img/icon-24.png +0 -0
  68. package/dist/fingerprinting/all-fingerprint-defender/img/icon-32-disabled.png +0 -0
  69. package/dist/fingerprinting/all-fingerprint-defender/img/icon-32.png +0 -0
  70. package/dist/fingerprinting/all-fingerprint-defender/img/icon-48.png +0 -0
  71. package/dist/fingerprinting/all-fingerprint-defender/manifest.json +83 -0
  72. package/dist/fingerprinting/all-fingerprint-defender/options.html +17 -0
  73. package/dist/fingerprinting/all-fingerprint-defender/popup.html +23 -0
  74. package/dist/fingerprinting/anti-webgpu/background.d.ts +2 -0
  75. package/dist/fingerprinting/anti-webgpu/background.d.ts.map +1 -0
  76. package/dist/fingerprinting/anti-webgpu/background.js +4 -0
  77. package/dist/fingerprinting/anti-webgpu/background.js.map +1 -0
  78. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts +2 -0
  79. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.d.ts.map +1 -0
  80. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js +50 -0
  81. package/dist/fingerprinting/anti-webgpu/data/content_script/inject.js.map +1 -0
  82. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts +2 -0
  83. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.d.ts.map +1 -0
  84. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js +172 -0
  85. package/dist/fingerprinting/anti-webgpu/data/content_script/page_context/inject.js.map +1 -0
  86. package/dist/fingerprinting/anti-webgpu/data/icons/128.png +0 -0
  87. package/dist/fingerprinting/anti-webgpu/data/icons/16.png +0 -0
  88. package/dist/fingerprinting/anti-webgpu/data/icons/32.png +0 -0
  89. package/dist/fingerprinting/anti-webgpu/data/icons/48.png +0 -0
  90. package/dist/fingerprinting/anti-webgpu/data/icons/64.png +0 -0
  91. package/dist/fingerprinting/anti-webgpu/data/popup/popup.css +88 -0
  92. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts +2 -0
  93. package/dist/fingerprinting/anti-webgpu/data/popup/popup.d.ts.map +1 -0
  94. package/dist/fingerprinting/anti-webgpu/data/popup/popup.html +58 -0
  95. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js +96 -0
  96. package/dist/fingerprinting/anti-webgpu/data/popup/popup.js.map +1 -0
  97. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts +2 -0
  98. package/dist/fingerprinting/anti-webgpu/lib/chrome.d.ts.map +1 -0
  99. package/dist/fingerprinting/anti-webgpu/lib/chrome.js +249 -0
  100. package/dist/fingerprinting/anti-webgpu/lib/chrome.js.map +1 -0
  101. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts +2 -0
  102. package/dist/fingerprinting/anti-webgpu/lib/common.d.ts.map +1 -0
  103. package/dist/fingerprinting/anti-webgpu/lib/common.js +86 -0
  104. package/dist/fingerprinting/anti-webgpu/lib/common.js.map +1 -0
  105. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts +2 -0
  106. package/dist/fingerprinting/anti-webgpu/lib/config.d.ts.map +1 -0
  107. package/dist/fingerprinting/anti-webgpu/lib/config.js +14 -0
  108. package/dist/fingerprinting/anti-webgpu/lib/config.js.map +1 -0
  109. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts +2 -0
  110. package/dist/fingerprinting/anti-webgpu/lib/runtime.d.ts.map +1 -0
  111. package/dist/fingerprinting/anti-webgpu/lib/runtime.js +107 -0
  112. package/dist/fingerprinting/anti-webgpu/lib/runtime.js.map +1 -0
  113. package/dist/fingerprinting/anti-webgpu/manifest.json +58 -0
  114. package/dist/fingerprinting/custom-fingerprint-injector.d.ts +87 -0
  115. package/dist/fingerprinting/custom-fingerprint-injector.d.ts.map +1 -0
  116. package/dist/fingerprinting/custom-fingerprint-injector.js +342 -0
  117. package/dist/fingerprinting/custom-fingerprint-injector.js.map +1 -0
  118. package/dist/fingerprinting/fingerprint-injector.d.ts +157 -0
  119. package/dist/fingerprinting/fingerprint-injector.d.ts.map +1 -0
  120. package/dist/fingerprinting/fingerprint-injector.js +632 -0
  121. package/dist/fingerprinting/fingerprint-injector.js.map +1 -0
  122. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts +6 -0
  123. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.d.ts.map +1 -0
  124. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js +119 -0
  125. package/dist/fingerprinting/fingerprint-overrides/audio-spoofing.js.map +1 -0
  126. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts +6 -0
  127. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.d.ts.map +1 -0
  128. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js +149 -0
  129. package/dist/fingerprinting/fingerprint-overrides/canvas-protection.js.map +1 -0
  130. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts +14 -0
  131. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.d.ts.map +1 -0
  132. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js +763 -0
  133. package/dist/fingerprinting/fingerprint-overrides/cdp-detection-bypass.js.map +1 -0
  134. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts +6 -0
  135. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.d.ts.map +1 -0
  136. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js +195 -0
  137. package/dist/fingerprinting/fingerprint-overrides/client-rect-spoofing.js.map +1 -0
  138. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts +10 -0
  139. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.d.ts.map +1 -0
  140. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js +195 -0
  141. package/dist/fingerprinting/fingerprint-overrides/coalesced-events-spoofing.js.map +1 -0
  142. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts +28 -0
  143. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.d.ts.map +1 -0
  144. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js +1181 -0
  145. package/dist/fingerprinting/fingerprint-overrides/datadome-bypass.js.map +1 -0
  146. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts +7 -0
  147. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.d.ts.map +1 -0
  148. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js +171 -0
  149. package/dist/fingerprinting/fingerprint-overrides/font-spoofing.js.map +1 -0
  150. package/dist/fingerprinting/fingerprint-overrides/index.d.ts +36 -0
  151. package/dist/fingerprinting/fingerprint-overrides/index.d.ts.map +1 -0
  152. package/dist/fingerprinting/fingerprint-overrides/index.js +40 -0
  153. package/dist/fingerprinting/fingerprint-overrides/index.js.map +1 -0
  154. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts +45 -0
  155. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.d.ts.map +1 -0
  156. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js +268 -0
  157. package/dist/fingerprinting/fingerprint-overrides/keyboard-humanization.js.map +1 -0
  158. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts +6 -0
  159. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.d.ts.map +1 -0
  160. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js +301 -0
  161. package/dist/fingerprinting/fingerprint-overrides/locale-spoofing.js.map +1 -0
  162. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts +7 -0
  163. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.d.ts.map +1 -0
  164. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js +58 -0
  165. package/dist/fingerprinting/fingerprint-overrides/mouse-humanization.js.map +1 -0
  166. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts +6 -0
  167. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.d.ts.map +1 -0
  168. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js +249 -0
  169. package/dist/fingerprinting/fingerprint-overrides/performance-spoofing.js.map +1 -0
  170. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts +33 -0
  171. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.d.ts.map +1 -0
  172. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js +618 -0
  173. package/dist/fingerprinting/fingerprint-overrides/platform-consistency.js.map +1 -0
  174. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts +13 -0
  175. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.d.ts.map +1 -0
  176. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js +356 -0
  177. package/dist/fingerprinting/fingerprint-overrides/prototype-integrity.js.map +1 -0
  178. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts +18 -0
  179. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.d.ts.map +1 -0
  180. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js +171 -0
  181. package/dist/fingerprinting/fingerprint-overrides/runtime-enable-bypass.js.map +1 -0
  182. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts +55 -0
  183. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.d.ts.map +1 -0
  184. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js +244 -0
  185. package/dist/fingerprinting/fingerprint-overrides/scroll-humanization.js.map +1 -0
  186. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts +14 -0
  187. package/dist/fingerprinting/fingerprint-overrides/stealth-script.d.ts.map +1 -0
  188. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js +925 -0
  189. package/dist/fingerprinting/fingerprint-overrides/stealth-script.js.map +1 -0
  190. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts +13 -0
  191. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.d.ts.map +1 -0
  192. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js +346 -0
  193. package/dist/fingerprinting/fingerprint-overrides/storage-consistency.js.map +1 -0
  194. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts +13 -0
  195. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.d.ts.map +1 -0
  196. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js +264 -0
  197. package/dist/fingerprinting/fingerprint-overrides/timing-consistency.js.map +1 -0
  198. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts +27 -0
  199. package/dist/fingerprinting/fingerprint-overrides/ua-ch.d.ts.map +1 -0
  200. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js +213 -0
  201. package/dist/fingerprinting/fingerprint-overrides/ua-ch.js.map +1 -0
  202. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts +12 -0
  203. package/dist/fingerprinting/fingerprint-overrides/utils.d.ts.map +1 -0
  204. package/dist/fingerprinting/fingerprint-overrides/utils.js +517 -0
  205. package/dist/fingerprinting/fingerprint-overrides/utils.js.map +1 -0
  206. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts +12 -0
  207. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.d.ts.map +1 -0
  208. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js +215 -0
  209. package/dist/fingerprinting/fingerprint-overrides/webgl-spoofing.js.map +1 -0
  210. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts +6 -0
  211. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.d.ts.map +1 -0
  212. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js +202 -0
  213. package/dist/fingerprinting/fingerprint-overrides/webgpu-spoofing.js.map +1 -0
  214. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts +6 -0
  215. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.d.ts.map +1 -0
  216. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js +188 -0
  217. package/dist/fingerprinting/fingerprint-overrides/webrtc-spoofing.js.map +1 -0
  218. package/dist/index.d.ts +4 -0
  219. package/dist/index.d.ts.map +1 -1
  220. package/dist/index.js +2 -0
  221. package/dist/index.js.map +1 -1
  222. package/dist/launcher-wrap.d.ts +2 -2
  223. package/dist/launcher-wrap.d.ts.map +1 -1
  224. package/dist/launcher-wrap.js.map +1 -1
  225. package/dist/page.d.ts +161 -7
  226. package/dist/page.d.ts.map +1 -1
  227. package/dist/page.js +1034 -23
  228. package/dist/page.js.map +1 -1
  229. package/dist/tsconfig.build.tsbuildinfo +1 -1
  230. package/package.json +8 -4
@@ -0,0 +1 @@
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA64BL,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,MA6UjD,CAAC"}
@@ -0,0 +1,346 @@
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 PRNG (mulberry32) for consistent values
31
+ const createSeededRNG = (seed) => {
32
+ let s = seed | 0;
33
+ return () => {
34
+ s = s + 0x6D2B79F5 | 0;
35
+ let t = Math.imul(s ^ s >>> 15, 1 | s);
36
+ t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
37
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
38
+ };
39
+ };
40
+ const _rng = createSeededRNG(sessionSeed);
41
+ const seededRandom = (seed, min = 0, max = 1) => {
42
+ const rng = createSeededRNG(seed);
43
+ return min + rng() * (max - min);
44
+ };
45
+
46
+ // 1. Override navigator.storage.estimate()
47
+ const spoofStorageEstimate = () => {
48
+ if (navigator.storage && navigator.storage.estimate) {
49
+ const originalEstimate = navigator.storage.estimate;
50
+
51
+ navigator.storage.estimate = function() {
52
+ // Realistic storage values for different platforms
53
+ const storageConfigs = {
54
+ 'Win32': {
55
+ quotaBase: 300 * 1024 * 1024 * 1024, // ~300GB typical Windows
56
+ usageBase: 50 * 1024 * 1024, // ~50MB typical usage
57
+ variance: 0.15
58
+ },
59
+ 'MacIntel': {
60
+ quotaBase: 250 * 1024 * 1024 * 1024, // ~250GB typical Mac
61
+ usageBase: 45 * 1024 * 1024,
62
+ variance: 0.12
63
+ },
64
+ 'Linux x86_64': {
65
+ quotaBase: 200 * 1024 * 1024 * 1024, // ~200GB typical Linux
66
+ usageBase: 40 * 1024 * 1024,
67
+ variance: 0.18
68
+ }
69
+ };
70
+
71
+ const config = storageConfigs[platform] || storageConfigs['Win32'];
72
+
73
+ // Calculate consistent but varied values
74
+ const quotaVariance = seededRandom(sessionSeed, 1 - config.variance, 1 + config.variance);
75
+ const usageVariance = seededRandom(sessionSeed + 1, 0.5, 2);
76
+
77
+ const quota = Math.floor(config.quotaBase * quotaVariance);
78
+ const usage = Math.floor(config.usageBase * usageVariance);
79
+
80
+ return Promise.resolve({
81
+ quota: quota,
82
+ usage: usage,
83
+ usageDetails: {
84
+ indexedDB: Math.floor(usage * 0.6),
85
+ caches: Math.floor(usage * 0.3),
86
+ serviceWorkerRegistrations: Math.floor(usage * 0.1)
87
+ }
88
+ });
89
+ };
90
+ }
91
+ };
92
+
93
+ // 2. Override StorageManager.persist()
94
+ const spoofStoragePersist = () => {
95
+ if (navigator.storage && navigator.storage.persist) {
96
+ navigator.storage.persist = function() {
97
+ // Most browsers return false unless explicitly granted
98
+ return Promise.resolve(false);
99
+ };
100
+ }
101
+
102
+ if (navigator.storage && navigator.storage.persisted) {
103
+ navigator.storage.persisted = function() {
104
+ return Promise.resolve(false);
105
+ };
106
+ }
107
+ };
108
+
109
+ // 3. Protect IndexedDB from fingerprinting
110
+ const spoofIndexedDB = () => {
111
+ if (!window.indexedDB) return;
112
+
113
+ const originalOpen = window.indexedDB.open;
114
+ const originalDatabases = window.indexedDB.databases;
115
+
116
+ // Track opened databases for consistency
117
+ const openedDatabases = new Set();
118
+
119
+ window.indexedDB.open = function(name, version) {
120
+ openedDatabases.add(name);
121
+ return originalOpen.call(this, name, version);
122
+ };
123
+
124
+ // Override databases() to hide fingerprinting attempts
125
+ if (originalDatabases) {
126
+ window.indexedDB.databases = function() {
127
+ // Return only databases that were opened in this session
128
+ return originalDatabases.call(this).then(databases => {
129
+ // Filter to only known databases or return empty for privacy
130
+ return databases.filter(db =>
131
+ openedDatabases.has(db.name) ||
132
+ // Allow common legitimate databases
133
+ db.name.startsWith('firebaseLocalStorage') ||
134
+ db.name === 'localforage'
135
+ );
136
+ });
137
+ };
138
+ }
139
+ };
140
+
141
+ // 4. Override localStorage/sessionStorage quota reporting
142
+ const spoofStorageQuota = () => {
143
+ // Create consistent storage size reporting
144
+ const getStorageSize = (storage) => {
145
+ let totalSize = 0;
146
+ try {
147
+ for (let i = 0; i < storage.length; i++) {
148
+ const key = storage.key(i);
149
+ if (key) {
150
+ totalSize += key.length + (storage.getItem(key) || '').length;
151
+ }
152
+ }
153
+ } catch (e) {}
154
+ return totalSize;
155
+ };
156
+
157
+ // Ensure storage appears normal
158
+ const originalLocalStorageLength = Object.getOwnPropertyDescriptor(Storage.prototype, 'length');
159
+
160
+ if (originalLocalStorageLength) {
161
+ Object.defineProperty(Storage.prototype, 'length', {
162
+ get() {
163
+ // Return actual length but ensure it's reasonable
164
+ const actualLength = originalLocalStorageLength.get.call(this);
165
+ return actualLength;
166
+ },
167
+ configurable: true,
168
+ enumerable: true
169
+ });
170
+ }
171
+ };
172
+
173
+ // 5. Override CacheStorage.keys()
174
+ const spoofCacheStorage = () => {
175
+ if ('caches' in window) {
176
+ const originalKeys = CacheStorage.prototype.keys;
177
+ const originalOpen = CacheStorage.prototype.open;
178
+ const originalHas = CacheStorage.prototype.has;
179
+ const originalDelete = CacheStorage.prototype.delete;
180
+
181
+ // Track caches opened in this session
182
+ const sessionCaches = new Set();
183
+
184
+ CacheStorage.prototype.open = function(cacheName) {
185
+ sessionCaches.add(cacheName);
186
+ return originalOpen.call(this, cacheName);
187
+ };
188
+
189
+ CacheStorage.prototype.keys = function() {
190
+ return originalKeys.call(this).then(keys => {
191
+ // Filter to only return caches that are expected
192
+ return keys.filter(key =>
193
+ sessionCaches.has(key) ||
194
+ // Allow common legitimate cache names
195
+ key.includes('workbox') ||
196
+ key.includes('runtime') ||
197
+ key.includes('precache') ||
198
+ key.includes('sw-') ||
199
+ key.includes('v1') ||
200
+ key.includes('v2')
201
+ );
202
+ });
203
+ };
204
+
205
+ CacheStorage.prototype.has = function(cacheName) {
206
+ // Be honest about caches that exist
207
+ return originalHas.call(this, cacheName);
208
+ };
209
+ }
210
+ };
211
+
212
+ // 6. Protect FileSystem API
213
+ const spoofFileSystemAPI = () => {
214
+ // Protect requestFileSystem if available
215
+ if (window.requestFileSystem || window.webkitRequestFileSystem) {
216
+ const originalRequestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
217
+
218
+ window.requestFileSystem = window.webkitRequestFileSystem = function(type, size, successCallback, errorCallback) {
219
+ // Allow the request but with controlled quota
220
+ const maxSize = 50 * 1024 * 1024; // 50MB max
221
+ const limitedSize = Math.min(size, maxSize);
222
+
223
+ return originalRequestFileSystem.call(
224
+ window,
225
+ type,
226
+ limitedSize,
227
+ successCallback,
228
+ errorCallback
229
+ );
230
+ };
231
+ }
232
+
233
+ // Protect StorageManager quota
234
+ if (navigator.storage && navigator.storage.estimate) {
235
+ // Already handled above
236
+ }
237
+ };
238
+
239
+ // 7. Cookie Store API protection
240
+ // NOTE: Removed aggressive cookie filtering that blocked cookies containing
241
+ // 'deviceId' or 'browser_id'. This broke legitimate site functionality
242
+ // (many sites use these cookie names for session tracking).
243
+ // Cookie-based fingerprinting is better handled at the network/proxy layer.
244
+ const spoofCookieStore = () => {
245
+ // No-op: cookie filtering removed to avoid breaking sites
246
+ };
247
+
248
+ // 8. Web SQL Database protection (deprecated but still detected)
249
+ const spoofWebSQL = () => {
250
+ if (window.openDatabase) {
251
+ const originalOpenDatabase = window.openDatabase;
252
+ const openedDatabases = new Set();
253
+
254
+ window.openDatabase = function(name, version, displayName, estimatedSize) {
255
+ openedDatabases.add(name);
256
+
257
+ // Limit estimated size to prevent fingerprinting through quota
258
+ const limitedSize = Math.min(estimatedSize || 0, 5 * 1024 * 1024);
259
+
260
+ try {
261
+ return originalOpenDatabase.call(
262
+ window,
263
+ name,
264
+ version,
265
+ displayName,
266
+ limitedSize
267
+ );
268
+ } catch (e) {
269
+ // Web SQL is deprecated, return gracefully
270
+ throw e;
271
+ }
272
+ };
273
+ }
274
+ };
275
+
276
+ // 9. Broadcast Channel API protection
277
+ const spoofBroadcastChannel = () => {
278
+ if (typeof BroadcastChannel !== 'undefined') {
279
+ const OriginalBroadcastChannel = BroadcastChannel;
280
+ const channels = new Map();
281
+
282
+ window.BroadcastChannel = function(name) {
283
+ const channel = new OriginalBroadcastChannel(name);
284
+
285
+ // Track channel usage
286
+ if (!channels.has(name)) {
287
+ channels.set(name, []);
288
+ }
289
+ channels.get(name).push(channel);
290
+
291
+ return channel;
292
+ };
293
+
294
+ // Note: Don't assign to prototype - it may be frozen in modern Chrome
295
+ }
296
+ };
297
+
298
+ // 10. SharedWorker storage protection
299
+ const spoofSharedWorker = () => {
300
+ if (typeof SharedWorker !== 'undefined') {
301
+ const OriginalSharedWorker = SharedWorker;
302
+ const workers = new Set();
303
+
304
+ window.SharedWorker = function(scriptURL, options) {
305
+ const urlString = typeof scriptURL === 'string' ? scriptURL : scriptURL.toString();
306
+ workers.add(urlString);
307
+
308
+ return new OriginalSharedWorker(scriptURL, options);
309
+ };
310
+
311
+ // Note: Don't assign to prototype - it may be frozen in modern Chrome
312
+ }
313
+ };
314
+
315
+ // Initialize all storage protections
316
+ try {
317
+ spoofStorageEstimate();
318
+ spoofStoragePersist();
319
+ spoofIndexedDB();
320
+ spoofStorageQuota();
321
+ spoofCacheStorage();
322
+ spoofFileSystemAPI();
323
+ spoofCookieStore();
324
+ spoofWebSQL();
325
+ spoofBroadcastChannel();
326
+ spoofSharedWorker();
327
+ } catch (e) {
328
+ console.error('[STORAGE-CONSISTENCY] Failed to apply storage consistency:', e);
329
+ throw e; // Rethrow to make errors visible
330
+ }
331
+ };
332
+
333
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
334
+ const ERROR_PREFIX = '[CDP-FP-ERROR]';
335
+
336
+ try {
337
+ console.log(DEBUG_PREFIX, 'Starting storage consistency...');
338
+ spoofStorageAPIs();
339
+ console.log(DEBUG_PREFIX, '✓ Storage consistency applied');
340
+ } catch (e) {
341
+ console.error(ERROR_PREFIX, '✗ Failed to apply storage consistency:', e);
342
+ throw e;
343
+ }
344
+ })();`;
345
+ };
346
+ //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2UL,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,MA2PhD,CAAC"}
@@ -0,0 +1,264 @@
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 const createTimingConsistencyScript = () => {
13
+ return `
14
+ (() => {
15
+ 'use strict';
16
+
17
+ // Timing Consistency for 2024-2025
18
+ const setupTimingConsistency = () => {
19
+ // Base timestamps for consistency
20
+ const pageLoadTime = Date.now();
21
+ const performanceOrigin = performance.timeOrigin || pageLoadTime;
22
+
23
+ // Store original methods
24
+ const originalDateNow = Date.now;
25
+ const originalPerformanceNow = performance.now.bind(performance);
26
+
27
+ // Generate session seed for consistent variations
28
+ const generateSeed = () => {
29
+ const ua = navigator.userAgent || '';
30
+ return ua.length * 17 + (screen.width || 0) * 31;
31
+ };
32
+
33
+ const sessionSeed = generateSeed();
34
+
35
+ // Seeded PRNG (mulberry32) for consistent values
36
+ const seededRandom = (seed) => {
37
+ let s = seed | 0;
38
+ s = s + 0x6D2B79F5 | 0;
39
+ let t = Math.imul(s ^ s >>> 15, 1 | s);
40
+ t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
41
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
42
+ };
43
+
44
+ // 1. Date.now() and performance.now() consistency
45
+ // NOTE: We intentionally do NOT override Date.now() or performance.now() here.
46
+ // Enforcing monotonic increase or adding jitter is itself detectable.
47
+ // The performance-spoofing module handles platform-specific timing characteristics.
48
+ const ensureDatePerformanceConsistency = () => {
49
+ // No-op: timing functions should behave naturally
50
+ };
51
+
52
+ // 2. Protect PerformanceEntry timing values
53
+ const protectPerformanceEntries = () => {
54
+ const originalGetEntries = performance.getEntries.bind(performance);
55
+ const originalGetEntriesByName = performance.getEntriesByName.bind(performance);
56
+ const originalGetEntriesByType = performance.getEntriesByType.bind(performance);
57
+
58
+ // Add consistent variations to timing entries
59
+ const adjustEntry = (entry) => {
60
+ if (!entry) return entry;
61
+
62
+ const timingProps = [
63
+ 'startTime', 'duration', 'fetchStart', 'domainLookupStart',
64
+ 'domainLookupEnd', 'connectStart', 'secureConnectionStart',
65
+ 'connectEnd', 'requestStart', 'responseStart', 'responseEnd',
66
+ 'workerStart', 'redirectStart', 'redirectEnd', 'processingStart',
67
+ 'processingEnd', 'loadEventStart', 'loadEventEnd',
68
+ 'unloadEventStart', 'unloadEventEnd'
69
+ ];
70
+
71
+ const adjusted = {};
72
+
73
+ for (const key of Object.keys(entry)) {
74
+ if (timingProps.includes(key) && typeof entry[key] === 'number' && entry[key] > 0) {
75
+ // Add consistent micro-variation
76
+ const variation = seededRandom(sessionSeed + entry[key]) * 0.001;
77
+ adjusted[key] = entry[key] + variation;
78
+ } else {
79
+ adjusted[key] = entry[key];
80
+ }
81
+ }
82
+
83
+ // Preserve prototype
84
+ Object.setPrototypeOf(adjusted, Object.getPrototypeOf(entry));
85
+
86
+ return adjusted;
87
+ };
88
+
89
+ performance.getEntries = function() {
90
+ return originalGetEntries().map(adjustEntry);
91
+ };
92
+
93
+ performance.getEntriesByName = function(name, type) {
94
+ return originalGetEntriesByName(name, type).map(adjustEntry);
95
+ };
96
+
97
+ performance.getEntriesByType = function(type) {
98
+ return originalGetEntriesByType(type).map(adjustEntry);
99
+ };
100
+ };
101
+
102
+ // 3. Handle performance.measureUserAgentSpecificMemory()
103
+ const protectMemoryMeasurement = () => {
104
+ if (performance.measureUserAgentSpecificMemory) {
105
+ const originalMeasure = performance.measureUserAgentSpecificMemory.bind(performance);
106
+
107
+ performance.measureUserAgentSpecificMemory = function() {
108
+ return originalMeasure().then(result => {
109
+ // Normalize memory values to be less fingerprintable
110
+ const normalizedBytes = Math.round(result.bytes / (1024 * 1024)) * 1024 * 1024;
111
+
112
+ return {
113
+ bytes: normalizedBytes + Math.floor(seededRandom(sessionSeed) * 1024 * 100),
114
+ breakdown: (result.breakdown || []).map(item => ({
115
+ ...item,
116
+ bytes: Math.round(item.bytes / 1024) * 1024
117
+ }))
118
+ };
119
+ }).catch(() => {
120
+ // Return a reasonable default if measurement fails
121
+ return {
122
+ bytes: 30 * 1024 * 1024 + Math.floor(seededRandom(sessionSeed) * 5 * 1024 * 1024),
123
+ breakdown: []
124
+ };
125
+ });
126
+ };
127
+ }
128
+ };
129
+
130
+ // 4. Event timeStamp consistency
131
+ // NOTE: Overriding Event/CustomEvent constructors to force timeStamp breaks
132
+ // trusted event detection (real events have their own timestamps set by the browser).
133
+ // Removed: the original override replaced timeStamp on ALL events which broke timing analysis.
134
+ const ensureEventTimestampConsistency = () => {
135
+ // No-op: event timestamps should come from the browser naturally
136
+ };
137
+
138
+ // 5. requestAnimationFrame timing patterns
139
+ // NOTE: Removed RAF timing modification - adding jitter to rAF timestamps
140
+ // is detectable and breaks animation-dependent code.
141
+ const normalizeRAFTiming = () => {
142
+ // No-op: rAF timestamps should come from the browser naturally
143
+ };
144
+
145
+ // 6. setTimeout/setInterval timing normalization
146
+ // NOTE: Removed timer jitter - modifying setTimeout/setInterval delays breaks
147
+ // timing-dependent code (debouncing, polling, animations) and the consistent
148
+ // seeded offset is itself a fingerprint.
149
+ const normalizeTimerTiming = () => {
150
+ // No-op: timers should behave naturally
151
+ };
152
+
153
+ // 7. Performance Observer timing protection
154
+ // NOTE: Removed - this duplicates the PerformanceObserver override in
155
+ // performance-spoofing.ts. Double-wrapping creates detectable proxy chains.
156
+ const protectPerformanceObserver = () => {
157
+ // No-op: handled by performance-spoofing module
158
+ };
159
+
160
+ // 8. Idle callback timing
161
+ // NOTE: Removed - this duplicates the requestIdleCallback override in
162
+ // performance-spoofing.ts. Double-wrapping is detectable.
163
+ const normalizeIdleCallback = () => {
164
+ // No-op: handled by performance-spoofing module
165
+ };
166
+
167
+ // 9. Navigation Timing API protection
168
+ const protectNavigationTiming = () => {
169
+ if (performance.timing) {
170
+ const originalTiming = performance.timing;
171
+ const timingProxy = {};
172
+
173
+ const timingProps = [
174
+ 'navigationStart', 'unloadEventStart', 'unloadEventEnd',
175
+ 'redirectStart', 'redirectEnd', 'fetchStart',
176
+ 'domainLookupStart', 'domainLookupEnd', 'connectStart',
177
+ 'connectEnd', 'secureConnectionStart', 'requestStart',
178
+ 'responseStart', 'responseEnd', 'domLoading',
179
+ 'domInteractive', 'domContentLoadedEventStart',
180
+ 'domContentLoadedEventEnd', 'domComplete',
181
+ 'loadEventStart', 'loadEventEnd'
182
+ ];
183
+
184
+ timingProps.forEach(prop => {
185
+ const originalValue = originalTiming[prop];
186
+ if (typeof originalValue === 'number' && originalValue > 0) {
187
+ Object.defineProperty(timingProxy, prop, {
188
+ get: () => originalValue + seededRandom(sessionSeed + originalValue) * 0.5,
189
+ configurable: true,
190
+ enumerable: true
191
+ });
192
+ } else {
193
+ Object.defineProperty(timingProxy, prop, {
194
+ get: () => originalValue,
195
+ configurable: true,
196
+ enumerable: true
197
+ });
198
+ }
199
+ });
200
+
201
+ // Add toJSON method
202
+ timingProxy.toJSON = function() {
203
+ const json = {};
204
+ timingProps.forEach(prop => {
205
+ json[prop] = this[prop];
206
+ });
207
+ return json;
208
+ };
209
+
210
+ Object.setPrototypeOf(timingProxy, PerformanceTiming.prototype);
211
+
212
+ Object.defineProperty(performance, 'timing', {
213
+ get: () => timingProxy,
214
+ configurable: true
215
+ });
216
+ }
217
+ };
218
+
219
+ // 10. High Resolution Time protection
220
+ const protectHighResolutionTime = () => {
221
+ // Ensure performance.timeOrigin is consistent
222
+ if (performance.timeOrigin) {
223
+ const originalOrigin = performance.timeOrigin;
224
+ const adjustedOrigin = originalOrigin + seededRandom(sessionSeed) * 0.1;
225
+
226
+ Object.defineProperty(performance, 'timeOrigin', {
227
+ get: () => adjustedOrigin,
228
+ configurable: true
229
+ });
230
+ }
231
+ };
232
+
233
+ // Initialize all timing protections
234
+ try {
235
+ ensureDatePerformanceConsistency();
236
+ protectPerformanceEntries();
237
+ protectMemoryMeasurement();
238
+ ensureEventTimestampConsistency();
239
+ normalizeRAFTiming();
240
+ normalizeTimerTiming();
241
+ protectPerformanceObserver();
242
+ normalizeIdleCallback();
243
+ protectNavigationTiming();
244
+ protectHighResolutionTime();
245
+ } catch (e) {
246
+ console.error('[TIMING-CONSISTENCY] Failed to apply timing consistency:', e);
247
+ throw e; // Rethrow to make errors visible
248
+ }
249
+ };
250
+
251
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
252
+ const ERROR_PREFIX = '[CDP-FP-ERROR]';
253
+
254
+ try {
255
+ console.log(DEBUG_PREFIX, 'Starting timing consistency...');
256
+ setupTimingConsistency();
257
+ console.log(DEBUG_PREFIX, '✓ Timing consistency applied');
258
+ } catch (e) {
259
+ console.error(ERROR_PREFIX, '✗ Failed to apply timing consistency:', e);
260
+ throw e;
261
+ }
262
+ })();`;
263
+ };
264
+ //# sourceMappingURL=timing-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/timing-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAW,EAAE;IACtD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyPL,CAAC;AACP,CAAC,CAAC"}