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":"platform-consistency.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,+BAA+B,aAAc,MAAM,oBAAoB,cAAc,KAAG,MA+lBpG,CAAC"}
@@ -0,0 +1,618 @@
1
+ /**
2
+ * Platform Consistency Script
3
+ * Ensures all browser properties match the specified platform (1:1 fingerprinting)
4
+ *
5
+ * 2024-2025 Enhancements:
6
+ * - Screen orientation API consistency
7
+ * - screen.availLeft/availTop for Windows
8
+ * - visualViewport properties consistency
9
+ * - window.outerWidth/outerHeight ratios
10
+ * - window.screenX/screenY typical values
11
+ * - matchMedia() platform-appropriate results
12
+ */
13
+ export const createPlatformConsistencyScript = (platform, fingerprintData) => {
14
+ // Platform-specific configurations for 1:1 consistency
15
+ const platformConfigs = {
16
+ 'Win32': {
17
+ devicePixelRatio: 1.0,
18
+ screenDepth: 24,
19
+ colorDepth: 24,
20
+ hardwareConcurrency: 8,
21
+ maxTouchPoints: 0,
22
+ platform: 'Win32',
23
+ oscpu: 'Windows NT 10.0; Win64; x64',
24
+ vendor: '',
25
+ vendorSub: '',
26
+ productSub: '20030107',
27
+ cookieEnabled: true,
28
+ onLine: true,
29
+ language: 'en-US',
30
+ languages: ['en-US', 'en'],
31
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
32
+ appVersion: '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
33
+ appName: 'Netscape',
34
+ appCodeName: 'Mozilla',
35
+ product: 'Gecko',
36
+ // Chrome 120+ only reports PDF-related plugins (Native Client removed in 2019)
37
+ plugins: [
38
+ { name: 'PDF Viewer', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
39
+ { name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
40
+ { name: 'Chromium PDF Viewer', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
41
+ { name: 'Microsoft Edge PDF Viewer', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
42
+ { name: 'WebKit built-in PDF', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
43
+ ],
44
+ mimeTypes: [
45
+ { type: 'application/pdf', suffixes: 'pdf', description: 'Portable Document Format' },
46
+ { type: 'text/pdf', suffixes: 'pdf', description: 'Portable Document Format' },
47
+ ],
48
+ // Windows-specific connection properties
49
+ connection: {
50
+ downlink: 10,
51
+ effectiveType: '4g',
52
+ onchange: null,
53
+ rtt: 50,
54
+ saveData: false,
55
+ type: 'ethernet',
56
+ },
57
+ },
58
+ 'MacIntel': {
59
+ devicePixelRatio: 2.0,
60
+ screenDepth: 30,
61
+ colorDepth: 30,
62
+ hardwareConcurrency: 8,
63
+ maxTouchPoints: 0,
64
+ platform: 'MacIntel',
65
+ oscpu: undefined,
66
+ vendor: 'Google Inc.',
67
+ vendorSub: '',
68
+ productSub: '20030107',
69
+ cookieEnabled: true,
70
+ onLine: true,
71
+ language: 'en-US',
72
+ languages: ['en-US', 'en'],
73
+ plugins: [
74
+ { name: 'PDF Viewer', filename: 'internal-pdf-viewer' },
75
+ { name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer' },
76
+ { name: 'Chromium PDF Viewer', filename: 'internal-pdf-viewer' },
77
+ { name: 'WebKit built-in PDF', filename: 'internal-pdf-viewer' },
78
+ ],
79
+ },
80
+ 'Linux x86_64': {
81
+ devicePixelRatio: 1.0,
82
+ screenDepth: 24,
83
+ colorDepth: 24,
84
+ hardwareConcurrency: 8,
85
+ maxTouchPoints: 0,
86
+ platform: 'Linux x86_64',
87
+ oscpu: 'Linux x86_64',
88
+ vendor: 'Google Inc.',
89
+ vendorSub: '',
90
+ productSub: '20030107',
91
+ cookieEnabled: true,
92
+ onLine: true,
93
+ language: 'en-US',
94
+ languages: ['en-US', 'en'],
95
+ plugins: [
96
+ { name: 'PDF Viewer', filename: 'internal-pdf-viewer' },
97
+ { name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer' },
98
+ { name: 'Chromium PDF Viewer', filename: 'internal-pdf-viewer' },
99
+ ],
100
+ },
101
+ };
102
+ const defaultConfig = platformConfigs[platform] || platformConfigs['Linux x86_64'];
103
+ // Merge fingerprint data with defaults if provided
104
+ const config = fingerprintData ? {
105
+ ...defaultConfig,
106
+ ...fingerprintData,
107
+ // Ensure platform consistency
108
+ platform: fingerprintData.platform || platform,
109
+ } : defaultConfig;
110
+ return `
111
+ (() => {
112
+ 'use strict';
113
+
114
+ // Platform Consistency for ${platform}
115
+ const config = ${JSON.stringify(config)};
116
+
117
+ // Helper to safely define property with guards
118
+ const safeDefineProperty = (obj, prop, getter) => {
119
+ try {
120
+ const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
121
+ if (descriptor && descriptor.configurable === false) {
122
+ return false; // Property already defined as non-configurable
123
+ }
124
+ Object.defineProperty(obj, prop, {
125
+ get: getter,
126
+ configurable: true, // Allow other scripts to modify if needed
127
+ enumerable: true
128
+ });
129
+ return true;
130
+ } catch (e) {
131
+ return false;
132
+ }
133
+ };
134
+
135
+ // Override navigator properties for platform consistency (with guards)
136
+ safeDefineProperty(navigator, 'platform', () => config.platform);
137
+ safeDefineProperty(navigator, 'vendor', () => config.vendor);
138
+ safeDefineProperty(navigator, 'vendorSub', () => config.vendorSub);
139
+ safeDefineProperty(navigator, 'productSub', () => config.productSub);
140
+ safeDefineProperty(navigator, 'hardwareConcurrency', () => config.hardwareConcurrency);
141
+ safeDefineProperty(navigator, 'maxTouchPoints', () => config.maxTouchPoints);
142
+ safeDefineProperty(navigator, 'cookieEnabled', () => config.cookieEnabled);
143
+ safeDefineProperty(navigator, 'onLine', () => config.onLine);
144
+ safeDefineProperty(navigator, 'language', () => config.language);
145
+ safeDefineProperty(navigator, 'languages', () => config.languages);
146
+
147
+ // Additional navigator properties for Windows consistency
148
+ if (config.userAgent) {
149
+ safeDefineProperty(navigator, 'userAgent', () => config.userAgent);
150
+ }
151
+ if (config.appVersion) {
152
+ safeDefineProperty(navigator, 'appVersion', () => config.appVersion);
153
+ }
154
+ if (config.appName) {
155
+ safeDefineProperty(navigator, 'appName', () => config.appName);
156
+ }
157
+ if (config.appCodeName) {
158
+ safeDefineProperty(navigator, 'appCodeName', () => config.appCodeName);
159
+ }
160
+ if (config.product) {
161
+ safeDefineProperty(navigator, 'product', () => config.product);
162
+ }
163
+ if (config.oscpu !== undefined) {
164
+ safeDefineProperty(navigator, 'oscpu', () => config.oscpu);
165
+ }
166
+
167
+ // Override navigator.plugins for Windows consistency (with guards)
168
+ if (config.plugins) {
169
+ const pluginsGetter = () => {
170
+ const arr = Object.create(PluginArray.prototype);
171
+ config.plugins.forEach((p, i) => {
172
+ const plugin = Object.create(Plugin.prototype);
173
+ // Use Object.defineProperty for read-only properties
174
+ Object.defineProperty(plugin, 'name', { value: p.name, writable: false, enumerable: true });
175
+ Object.defineProperty(plugin, 'filename', { value: p.filename, writable: false, enumerable: true });
176
+ Object.defineProperty(plugin, 'description', { value: p.description, writable: false, enumerable: true });
177
+ Object.defineProperty(plugin, 'length', { value: 1, writable: false, enumerable: true });
178
+ plugin[0] = config.mimeTypes?.[i] || { type: 'application/pdf', suffixes: 'pdf', description: 'Portable Document Format' };
179
+ arr[i] = plugin;
180
+ arr[p.name] = plugin;
181
+ });
182
+ // Use Object.defineProperty for length (PluginArray.prototype.length is read-only)
183
+ Object.defineProperty(arr, 'length', { value: config.plugins.length, writable: false, enumerable: true });
184
+ Object.defineProperty(arr, 'item', { value: (index) => arr[index] || null, writable: false, enumerable: false });
185
+ Object.defineProperty(arr, 'namedItem', { value: (name) => arr[name] || null, writable: false, enumerable: false });
186
+ Object.defineProperty(arr, 'refresh', { value: () => {}, writable: false, enumerable: false });
187
+ return arr;
188
+ };
189
+ safeDefineProperty(navigator, 'plugins', pluginsGetter);
190
+ }
191
+
192
+ // Override navigator.mimeTypes for Windows consistency (with guards)
193
+ if (config.mimeTypes) {
194
+ const mimeTypesGetter = () => {
195
+ const arr = Object.create(MimeTypeArray.prototype);
196
+ config.mimeTypes.forEach((m, i) => {
197
+ const mimeType = Object.create(MimeType.prototype);
198
+ // Use Object.defineProperty for read-only properties
199
+ Object.defineProperty(mimeType, 'type', { value: m.type, writable: false, enumerable: true });
200
+ Object.defineProperty(mimeType, 'suffixes', { value: m.suffixes, writable: false, enumerable: true });
201
+ Object.defineProperty(mimeType, 'description', { value: m.description, writable: false, enumerable: true });
202
+ Object.defineProperty(mimeType, 'enabledPlugin', { value: config.plugins?.[0] || null, writable: false, enumerable: true });
203
+ arr[i] = mimeType;
204
+ arr[m.type] = mimeType;
205
+ });
206
+ // Use Object.defineProperty for length (MimeTypeArray.prototype.length is read-only)
207
+ Object.defineProperty(arr, 'length', { value: config.mimeTypes.length, writable: false, enumerable: true });
208
+ Object.defineProperty(arr, 'item', { value: (index) => arr[index] || null, writable: false, enumerable: false });
209
+ Object.defineProperty(arr, 'namedItem', { value: (name) => arr[name] || null, writable: false, enumerable: false });
210
+ return arr;
211
+ };
212
+ safeDefineProperty(navigator, 'mimeTypes', mimeTypesGetter);
213
+ }
214
+
215
+ // Override navigator.connection for Windows consistency
216
+ // Note: Some connection properties (like downlink, rtt) are non-configurable in Chrome
217
+ if (config.connection && navigator.connection) {
218
+ Object.keys(config.connection).forEach(key => {
219
+ try {
220
+ const descriptor = Object.getOwnPropertyDescriptor(navigator.connection, key);
221
+ if (descriptor && descriptor.configurable === false) {
222
+ // Property is non-configurable, skip it
223
+ return;
224
+ }
225
+ Object.defineProperty(navigator.connection, key, {
226
+ value: config.connection[key],
227
+ writable: false,
228
+ configurable: true
229
+ });
230
+ } catch (e) {
231
+ // Silently ignore non-configurable properties
232
+ }
233
+ });
234
+ }
235
+
236
+ // Override screen properties (with guards)
237
+ safeDefineProperty(window, 'devicePixelRatio', () => config.devicePixelRatio);
238
+ safeDefineProperty(screen, 'colorDepth', () => config.colorDepth);
239
+ safeDefineProperty(screen, 'pixelDepth', () => config.screenDepth || config.colorDepth);
240
+
241
+ // Ensure WebGL returns platform-appropriate values
242
+ const getParameterProto = WebGLRenderingContext.prototype.getParameter;
243
+ WebGLRenderingContext.prototype.getParameter = function(param) {
244
+ if (param === 0x9245 || param === 0x9246) { // UNMASKED_VENDOR_WEBGL / UNMASKED_RENDERER_WEBGL
245
+ // Return platform-appropriate GPU with corrected ANGLE token count
246
+ if (config.platform === 'Win32') {
247
+ return param === 0x9245
248
+ ? 'NVIDIA Corporation'
249
+ : 'ANGLE (NVIDIA, NVIDIA GeForce GTX 1660 Ti Direct3D 11.0)'; // Fixed: fewer tokens
250
+ } else if (config.platform === 'MacIntel') {
251
+ return param === 0x9245 ? 'Apple Inc.' : 'ANGLE (Apple, Apple M1 Pro, OpenGL 4.1)';
252
+ } else {
253
+ return param === 0x9245 ? 'Intel' : 'ANGLE (Intel, Mesa Intel(R) UHD Graphics 630, OpenGL 4.6)';
254
+ }
255
+ }
256
+ return getParameterProto.apply(this, arguments);
257
+ };
258
+
259
+ if (typeof WebGL2RenderingContext !== 'undefined') {
260
+ WebGL2RenderingContext.prototype.getParameter = WebGLRenderingContext.prototype.getParameter;
261
+ }
262
+
263
+ // ========== 2024-2025 Enhanced Platform Consistency ==========
264
+
265
+ // Screen Orientation API Consistency
266
+ const spoofScreenOrientation = () => {
267
+ if (screen.orientation) {
268
+ Object.defineProperty(screen.orientation, 'type', {
269
+ get: () => 'landscape-primary',
270
+ configurable: true,
271
+ enumerable: true
272
+ });
273
+
274
+ Object.defineProperty(screen.orientation, 'angle', {
275
+ get: () => 0,
276
+ configurable: true,
277
+ enumerable: true
278
+ });
279
+ }
280
+ };
281
+
282
+ // Screen availLeft/availTop for Windows (taskbar consideration)
283
+ const spoofScreenAvailability = () => {
284
+ const screenConfig = {
285
+ 'Win32': {
286
+ availLeft: 0,
287
+ availTop: 0,
288
+ availWidth: screen.width || 1920,
289
+ availHeight: (screen.height || 1080) - 40 // Windows taskbar ~40px
290
+ },
291
+ 'MacIntel': {
292
+ availLeft: 0,
293
+ availTop: 25, // macOS menu bar
294
+ availWidth: screen.width || 1920,
295
+ availHeight: (screen.height || 1080) - 25
296
+ },
297
+ 'Linux x86_64': {
298
+ availLeft: 0,
299
+ availTop: 0,
300
+ availWidth: screen.width || 1920,
301
+ availHeight: (screen.height || 1080) - 30 // GNOME panel
302
+ }
303
+ };
304
+
305
+ const screenVals = screenConfig[config.platform] || screenConfig['Win32'];
306
+
307
+ Object.defineProperty(screen, 'availLeft', {
308
+ get: () => screenVals.availLeft,
309
+ configurable: true,
310
+ enumerable: true
311
+ });
312
+
313
+ Object.defineProperty(screen, 'availTop', {
314
+ get: () => screenVals.availTop,
315
+ configurable: true,
316
+ enumerable: true
317
+ });
318
+
319
+ Object.defineProperty(screen, 'availWidth', {
320
+ get: () => screenVals.availWidth,
321
+ configurable: true,
322
+ enumerable: true
323
+ });
324
+
325
+ Object.defineProperty(screen, 'availHeight', {
326
+ get: () => screenVals.availHeight,
327
+ configurable: true,
328
+ enumerable: true
329
+ });
330
+ };
331
+
332
+ // Visual Viewport consistency
333
+ const spoofVisualViewport = () => {
334
+ if (window.visualViewport) {
335
+ const originalViewport = window.visualViewport;
336
+
337
+ // Ensure consistent values
338
+ Object.defineProperty(originalViewport, 'scale', {
339
+ get: () => 1,
340
+ configurable: true
341
+ });
342
+
343
+ Object.defineProperty(originalViewport, 'offsetLeft', {
344
+ get: () => 0,
345
+ configurable: true
346
+ });
347
+
348
+ Object.defineProperty(originalViewport, 'offsetTop', {
349
+ get: () => 0,
350
+ configurable: true
351
+ });
352
+
353
+ Object.defineProperty(originalViewport, 'pageLeft', {
354
+ get: () => window.scrollX || 0,
355
+ configurable: true
356
+ });
357
+
358
+ Object.defineProperty(originalViewport, 'pageTop', {
359
+ get: () => window.scrollY || 0,
360
+ configurable: true
361
+ });
362
+ }
363
+ };
364
+
365
+ // Window outer dimensions (browser chrome size)
366
+ const spoofWindowDimensions = () => {
367
+ const outerConfig = {
368
+ 'Win32': {
369
+ outerWidthOffset: 16, // Windows chrome borders
370
+ outerHeightOffset: 92 // Title bar + tabs + bookmarks
371
+ },
372
+ 'MacIntel': {
373
+ outerWidthOffset: 0, // macOS has no side borders
374
+ outerHeightOffset: 87 // Title bar + tabs
375
+ },
376
+ 'Linux x86_64': {
377
+ outerWidthOffset: 2, // Minimal borders
378
+ outerHeightOffset: 85 // GNOME decorations
379
+ }
380
+ };
381
+
382
+ const dimConfig = outerConfig[config.platform] || outerConfig['Win32'];
383
+
384
+ Object.defineProperty(window, 'outerWidth', {
385
+ get: () => window.innerWidth + dimConfig.outerWidthOffset,
386
+ configurable: true,
387
+ enumerable: true
388
+ });
389
+
390
+ Object.defineProperty(window, 'outerHeight', {
391
+ get: () => window.innerHeight + dimConfig.outerHeightOffset,
392
+ configurable: true,
393
+ enumerable: true
394
+ });
395
+ };
396
+
397
+ // Window screen position
398
+ const spoofWindowPosition = () => {
399
+ const posConfig = {
400
+ 'Win32': { screenX: 0, screenY: 0 },
401
+ 'MacIntel': { screenX: 0, screenY: 25 }, // Below menu bar
402
+ 'Linux x86_64': { screenX: 0, screenY: 0 }
403
+ };
404
+
405
+ const pos = posConfig[config.platform] || posConfig['Win32'];
406
+
407
+ Object.defineProperty(window, 'screenX', {
408
+ get: () => pos.screenX,
409
+ configurable: true,
410
+ enumerable: true
411
+ });
412
+
413
+ Object.defineProperty(window, 'screenY', {
414
+ get: () => pos.screenY,
415
+ configurable: true,
416
+ enumerable: true
417
+ });
418
+
419
+ Object.defineProperty(window, 'screenLeft', {
420
+ get: () => pos.screenX,
421
+ configurable: true,
422
+ enumerable: true
423
+ });
424
+
425
+ Object.defineProperty(window, 'screenTop', {
426
+ get: () => pos.screenY,
427
+ configurable: true,
428
+ enumerable: true
429
+ });
430
+
431
+ // Fix screenX/screenY in MouseEvent for headless/CDP dispatch.
432
+ // In headless mode, CDP-dispatched events have screenY == clientY
433
+ // (no browser chrome offset), which is a detection vector.
434
+ // Real browsers have ~85px chrome offset (title + tab + address bars).
435
+ const chromeOffsets = {
436
+ 'Win32': { x: 0, y: 85 },
437
+ 'MacIntel': { x: 0, y: 75 },
438
+ 'Linux x86_64': { x: 0, y: 85 }
439
+ };
440
+ const chromeOffset = chromeOffsets[config.platform] || chromeOffsets['Win32'];
441
+
442
+ const origScreenYDesc = Object.getOwnPropertyDescriptor(MouseEvent.prototype, 'screenY');
443
+ const origScreenXDesc = Object.getOwnPropertyDescriptor(MouseEvent.prototype, 'screenX');
444
+
445
+ if (origScreenYDesc && origScreenYDesc.get) {
446
+ const origGetScreenY = origScreenYDesc.get;
447
+ Object.defineProperty(MouseEvent.prototype, 'screenY', {
448
+ get() {
449
+ const val = origGetScreenY.call(this);
450
+ // In headless, screenY == clientY (no chrome). Add offset.
451
+ if (val === this.clientY && chromeOffset.y > 0) {
452
+ return val + chromeOffset.y + pos.screenY;
453
+ }
454
+ return val;
455
+ },
456
+ configurable: true,
457
+ enumerable: true
458
+ });
459
+ }
460
+
461
+ if (origScreenXDesc && origScreenXDesc.get) {
462
+ const origGetScreenX = origScreenXDesc.get;
463
+ Object.defineProperty(MouseEvent.prototype, 'screenX', {
464
+ get() {
465
+ const val = origGetScreenX.call(this);
466
+ if (val === this.clientX && chromeOffset.x > 0) {
467
+ return val + chromeOffset.x + pos.screenX;
468
+ }
469
+ return val;
470
+ },
471
+ configurable: true,
472
+ enumerable: true
473
+ });
474
+ }
475
+ };
476
+
477
+ // matchMedia platform-specific behavior
478
+ const spoofMatchMedia = () => {
479
+ const originalMatchMedia = window.matchMedia;
480
+
481
+ window.matchMedia = function(query) {
482
+ const result = originalMatchMedia.call(this, query);
483
+
484
+ // Platform-specific media query handling
485
+ if (query.includes('prefers-color-scheme')) {
486
+ // Default to light mode (most common)
487
+ const isDark = query.includes('dark');
488
+ return new Proxy(result, {
489
+ get(target, prop) {
490
+ if (prop === 'matches') {
491
+ return !isDark; // Most users use light mode
492
+ }
493
+ return target[prop];
494
+ }
495
+ });
496
+ }
497
+
498
+ if (query.includes('prefers-reduced-motion')) {
499
+ // Most users don't have reduced motion
500
+ return new Proxy(result, {
501
+ get(target, prop) {
502
+ if (prop === 'matches') {
503
+ return false;
504
+ }
505
+ return target[prop];
506
+ }
507
+ });
508
+ }
509
+
510
+ if (query.includes('prefers-contrast')) {
511
+ // Most users use default contrast
512
+ return new Proxy(result, {
513
+ get(target, prop) {
514
+ if (prop === 'matches') {
515
+ return query.includes('no-preference');
516
+ }
517
+ return target[prop];
518
+ }
519
+ });
520
+ }
521
+
522
+ if (query.includes('pointer')) {
523
+ // Desktop platforms have fine pointer (mouse)
524
+ const hasFinePointer = config.platform !== 'Android' && config.maxTouchPoints === 0;
525
+ return new Proxy(result, {
526
+ get(target, prop) {
527
+ if (prop === 'matches') {
528
+ if (query.includes('fine')) return hasFinePointer;
529
+ if (query.includes('coarse')) return !hasFinePointer;
530
+ if (query.includes('none')) return false;
531
+ }
532
+ return target[prop];
533
+ }
534
+ });
535
+ }
536
+
537
+ if (query.includes('hover')) {
538
+ // Desktop platforms support hover
539
+ return new Proxy(result, {
540
+ get(target, prop) {
541
+ if (prop === 'matches') {
542
+ return query.includes('hover') && !query.includes('none');
543
+ }
544
+ return target[prop];
545
+ }
546
+ });
547
+ }
548
+
549
+ return result;
550
+ };
551
+ };
552
+
553
+ // ScreenDetails API (multi-monitor detection)
554
+ const spoofScreenDetails = () => {
555
+ if ('getScreenDetails' in window) {
556
+ window.getScreenDetails = function() {
557
+ return Promise.resolve({
558
+ screens: [{
559
+ availHeight: screen.availHeight,
560
+ availWidth: screen.availWidth,
561
+ availLeft: 0,
562
+ availTop: 0,
563
+ colorDepth: config.colorDepth || 24,
564
+ devicePixelRatio: config.devicePixelRatio || 1,
565
+ height: screen.height,
566
+ width: screen.width,
567
+ isExtended: false,
568
+ isPrimary: true,
569
+ label: 'Primary Display',
570
+ left: 0,
571
+ orientation: screen.orientation || { angle: 0, type: 'landscape-primary' },
572
+ pixelDepth: config.screenDepth || 24,
573
+ top: 0
574
+ }],
575
+ currentScreen: null,
576
+ onscreenschange: null,
577
+ oncurrentscreenchange: null,
578
+ addEventListener: () => {},
579
+ removeEventListener: () => {}
580
+ });
581
+ };
582
+ }
583
+ };
584
+
585
+ // Initialize all enhanced spoofing
586
+ const DEBUG_PREFIX = '[CDP-FP-DEBUG]';
587
+ const ERROR_PREFIX = '[CDP-FP-ERROR]';
588
+
589
+ console.log(DEBUG_PREFIX, 'Starting platform consistency overrides for:', config.platform);
590
+
591
+ const applyConsistency = (name, fn) => {
592
+ try {
593
+ fn();
594
+ console.log(DEBUG_PREFIX, \`✓ Applied \${name}\`);
595
+ return true;
596
+ } catch (e) {
597
+ console.error(ERROR_PREFIX, \`✗ Failed to apply \${name}:\`, e);
598
+ throw e; // Rethrow to make errors visible
599
+ }
600
+ };
601
+
602
+ try {
603
+ applyConsistency('Screen Orientation', spoofScreenOrientation);
604
+ applyConsistency('Screen Availability', spoofScreenAvailability);
605
+ applyConsistency('Visual Viewport', spoofVisualViewport);
606
+ applyConsistency('Window Dimensions', spoofWindowDimensions);
607
+ applyConsistency('Window Position', spoofWindowPosition);
608
+ applyConsistency('Match Media', spoofMatchMedia);
609
+ applyConsistency('Screen Details API', spoofScreenDetails);
610
+
611
+ console.log(DEBUG_PREFIX, \`✓ Platform consistency complete for \${config.platform}\`);
612
+ } catch (e) {
613
+ console.error(ERROR_PREFIX, '✗ Failed to apply platform consistency:', e);
614
+ throw e; // Rethrow to make errors visible
615
+ }
616
+ })();`;
617
+ };
618
+ //# sourceMappingURL=platform-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-consistency.js","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/platform-consistency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Prototype Integrity Module
3
+ *
4
+ * Ensures all property overrides are undetectable by:
5
+ * - Making overridden properties appear native (configurable: false)
6
+ * - Hiding modified property descriptors from Object.getOwnPropertyDescriptor
7
+ * - Protecting prototype chains from Object.getPrototypeOf inspection
8
+ * - Masking shadow properties from enumeration
9
+ *
10
+ * This module MUST be injected FIRST, before any other fingerprint overrides.
11
+ */
12
+ export declare const createPrototypeIntegrityScript: () => string;
13
+ //# sourceMappingURL=prototype-integrity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototype-integrity.d.ts","sourceRoot":"","sources":["../../../src/fingerprinting/fingerprint-overrides/prototype-integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,8BAA8B,QAAO,MAuVjD,CAAC"}