@jshookmcp/jshook 0.3.0 → 0.3.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 (346) hide show
  1. package/LICENSE +661 -661
  2. package/README.md +32 -49
  3. package/README.zh.md +32 -47
  4. package/dist/AntiCheatDetector-B6d4Qe9D.mjs +1 -0
  5. package/dist/BrowserSessionCoordinator-BJ-HOxo0.mjs +1 -0
  6. package/dist/CacheAdapters-CsNtQIR8.mjs +1 -0
  7. package/dist/CodeInjector-Cll_7bLJ.mjs +1 -0
  8. package/dist/ConsoleMonitor-CxDJV15E.mjs +306 -0
  9. package/dist/DOMInspector-C19J4zeq.mjs +95 -0
  10. package/dist/DarwinAPI-ZfQdpLNI.mjs +1 -0
  11. package/dist/DetailedDataManager-DmQ1LT-W.mjs +1 -0
  12. package/dist/EventBus-DL8iLA09.mjs +1 -0
  13. package/dist/EvidenceGraphBridge-BtbwXsLC.mjs +1 -0
  14. package/dist/ExtensionManager-BD724zkO.mjs +1 -0
  15. package/dist/ExtensionManager.tools-oVMJgPcN.mjs +1 -0
  16. package/dist/FingerprintManager-DT0EAUEo.mjs +1 -0
  17. package/dist/HardwareBreakpoint-BUfPdp0f.mjs +1 -0
  18. package/dist/HeapAnalyzer-B_aqY8oj.mjs +1 -0
  19. package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-DzD6dIJd.mjs} +66 -101
  20. package/dist/InstrumentationSession-D_G1ZPyd.mjs +1 -0
  21. package/dist/MCPServer.search.handlers.domain-BbS-6LnX.mjs +1 -0
  22. package/dist/MemoryController-X1XNSn1n.mjs +2 -0
  23. package/dist/MemoryScanSession-DG_F-PjE.mjs +1 -0
  24. package/dist/MemoryScanner-g1_L1ub5.mjs +1 -0
  25. package/dist/NativeMemoryManager.impl-DniBe2wf.mjs +1 -0
  26. package/dist/NativeMemoryManager.utils-BHy1P_jM.mjs +1 -0
  27. package/dist/NetworkMonitor-B_-au6aV.mjs +185 -0
  28. package/dist/PEAnalyzer-yWQaGrcx.mjs +1 -0
  29. package/dist/PageController-Dfsm1_o7.mjs +1 -0
  30. package/dist/PointerChainEngine-BhCUkmxY.mjs +1 -0
  31. package/dist/PrerequisiteError-BjCQA-gK.mjs +1 -0
  32. package/dist/ProcessRegistry-C-bN48oR.mjs +1 -0
  33. package/dist/ResponseBuilder-BfWP-uaT.mjs +1 -0
  34. package/dist/ReverseEvidenceGraph-BhSYYdiI.mjs +2 -0
  35. package/dist/RingBuffer-Dm54ELKT.mjs +1 -0
  36. package/dist/ScriptManager-LWGPTdvD.mjs +7 -0
  37. package/dist/ServerRuntimeState-D2bWHqEE.mjs +1 -0
  38. package/dist/Speedhack-yseDPSZ9.mjs +1 -0
  39. package/dist/StealthVerifier-BmcxfwSF.mjs +1 -0
  40. package/dist/StructureAnalyzer-C5lpuZkg.mjs +2 -0
  41. package/dist/ToolCatalog-CYdD9F5f.mjs +1 -0
  42. package/dist/ToolError-DWU_z7gp.mjs +1 -0
  43. package/dist/ToolProbe-C7ZU2x7M.mjs +1 -0
  44. package/dist/ToolRegistry-C5oB8KP8.mjs +1 -0
  45. package/dist/ToolRouter.policy-CfhJczkt.mjs +4 -0
  46. package/dist/TraceRecorder-BiJWBXHX.mjs +272 -0
  47. package/dist/VersionDetector-CHT36Az0.mjs +9 -0
  48. package/dist/Win32API-eUCF57l_.mjs +1 -0
  49. package/dist/Win32Debug-CYrIQBvr.mjs +1 -0
  50. package/dist/WorkflowEngine-D876meOO.mjs +1 -0
  51. package/dist/analysis-D4swdMvq.mjs +6 -0
  52. package/dist/{antidebug-BRKeyt27.mjs → antidebug-7L3ygj_9.mjs} +8 -259
  53. package/dist/apk-packer-BqXcInnX.mjs +1 -0
  54. package/dist/artifactRetention-BCPQASm7.mjs +1 -0
  55. package/dist/artifacts-CkodUM4j.mjs +1 -0
  56. package/dist/authorization-schema-BOFwSXUN.mjs +1 -0
  57. package/dist/betterSqlite3-Brtq-SIQ.mjs +1 -0
  58. package/dist/binary-instrument-DU7V6TUM.mjs +7 -0
  59. package/dist/binary-secrets-PdMVoyt0.mjs +1 -0
  60. package/dist/bind-helpers-m2U8glkF.mjs +1 -0
  61. package/dist/boringssl-inspector-BBaJwwkU.mjs +2 -0
  62. package/dist/browser-Qqco2rOT.mjs +11 -0
  63. package/dist/capabilities-CyXuKUl1.mjs +1 -0
  64. package/dist/chunk-C_pMuVsO.mjs +1 -0
  65. package/dist/collector-Bpl6qy2L.mjs +1 -0
  66. package/dist/concurrency-DCr8WQ2M.mjs +1 -0
  67. package/dist/constants-BYj8Xek8.mjs +1 -0
  68. package/dist/coordination-CWXW1o8K.mjs +1 -0
  69. package/dist/dart-inspector-7AkPeZ_Q.mjs +0 -0
  70. package/dist/debugger-DyALjYMk.mjs +1 -0
  71. package/dist/definitions-BWxBke3r.mjs +1 -0
  72. package/dist/definitions-BYwATKc-.mjs +1 -0
  73. package/dist/definitions-B_83XfNQ.mjs +1 -0
  74. package/dist/definitions-Bf3H1EwV.mjs +1 -0
  75. package/dist/definitions-BftdXgXI.mjs +1 -0
  76. package/dist/definitions-Bio5XJYy.mjs +1 -0
  77. package/dist/definitions-C3qNgSn1.mjs +1 -0
  78. package/dist/definitions-CB6vmOer.mjs +1 -0
  79. package/dist/definitions-CMZRSy3k.mjs +1 -0
  80. package/dist/definitions-CQd7yCQH.mjs +1 -0
  81. package/dist/definitions-CT8ln6GQ.mjs +1 -0
  82. package/dist/definitions-Cenu6mxo.mjs +1 -0
  83. package/dist/definitions-D4g-MS10.mjs +1 -0
  84. package/dist/definitions-D5wl_8HN.mjs +1 -0
  85. package/dist/definitions-DAQm1Xar.mjs +1 -0
  86. package/dist/definitions-DP1vgxEY.mjs +1 -0
  87. package/dist/definitions-DxFNRQNK2.mjs +1 -0
  88. package/dist/definitions-Ibci7e_L.mjs +1 -0
  89. package/dist/definitions-OeLvmlQy.mjs +1 -0
  90. package/dist/definitions-RZYGD_Ey.mjs +1 -0
  91. package/dist/definitions-Tls8c0A0.mjs +1 -0
  92. package/dist/definitions-bybDvnG0.mjs +26 -0
  93. package/dist/definitions-l7TjdE6V.mjs +1 -0
  94. package/dist/encoding-ycOaz8Vr.mjs +2 -0
  95. package/dist/ensure-browser-core-DxWC-NTp.mjs +1 -0
  96. package/dist/evidence-graph-bridge-CV_UdYqj.mjs +1 -0
  97. package/dist/factory-CKr4fAE1.mjs +1 -0
  98. package/dist/flat-target-session-DvcQX7J5.mjs +1 -0
  99. package/dist/formatAddress-vLA_hOJt.mjs +1 -0
  100. package/dist/graphql-B2TiPEow.mjs +62 -0
  101. package/dist/handlers-0yKLRIfo.mjs +2 -0
  102. package/dist/handlers-8zN_vBIz.mjs +1 -0
  103. package/dist/handlers-B62K4FTc.mjs +1 -0
  104. package/dist/handlers-BpDlVVVU.mjs +1 -0
  105. package/dist/handlers-CMJK7m1c.mjs +31 -0
  106. package/dist/handlers-D2ZOul9p.mjs +54 -0
  107. package/dist/handlers-D5E40ssn.mjs +5 -0
  108. package/dist/handlers-DGbdQAgD.mjs +4 -0
  109. package/dist/handlers-DHO3rjsW.mjs +1 -0
  110. package/dist/handlers-FJ80VzUI.mjs +2 -0
  111. package/dist/handlers-VHWrxbM_.mjs +1 -0
  112. package/dist/handlers-l8QIKqBj.mjs +2 -0
  113. package/dist/handlers-mPFiNPe8.mjs +302 -0
  114. package/dist/{handlers-Dz9PYsCa.mjs → handlers-yo_xYzT8.mjs} +118 -904
  115. package/dist/handlers.impl-D9Hh8Bgl.mjs +1 -0
  116. package/dist/hooks-D4XLfgtV.mjs +600 -0
  117. package/dist/index.mjs +13 -5240
  118. package/dist/jadx-search-B_Yse0Zh.mjs +5 -0
  119. package/dist/logger-sBC6IdRT.mjs +1 -0
  120. package/dist/maintenance-BUpIukhg.mjs +1 -0
  121. package/dist/manifest-0Jpt_AQa.mjs +1 -0
  122. package/dist/manifest-B3fZbSWR.mjs +1 -0
  123. package/dist/manifest-B7NB2rh2.mjs +1 -0
  124. package/dist/manifest-BDi4nbH1.mjs +1 -0
  125. package/dist/manifest-BLDfkE7n.mjs +1 -0
  126. package/dist/manifest-BcXbB4gf.mjs +1 -0
  127. package/dist/manifest-Bdnc_vrc.mjs +1 -0
  128. package/dist/manifest-BuYKgCnp.mjs +1 -0
  129. package/dist/manifest-CBfNnGPV.mjs +1 -0
  130. package/dist/manifest-CPS1Xv69.mjs +1 -0
  131. package/dist/manifest-CQH9FhwI.mjs +1 -0
  132. package/dist/manifest-CRryuZF4.mjs +1 -0
  133. package/dist/manifest-CctIumog.mjs +1 -0
  134. package/dist/manifest-CvTe5ZGV2.mjs +1 -0
  135. package/dist/manifest-D-5GH0DV.mjs +1 -0
  136. package/dist/manifest-D3Ssf3IC.mjs +1 -0
  137. package/dist/manifest-D5ck3NvC.mjs +1 -0
  138. package/dist/manifest-D9jUUJAu.mjs +1 -0
  139. package/dist/manifest-DCx6w2XV.mjs +1 -0
  140. package/dist/manifest-DG19q-Ld.mjs +1 -0
  141. package/dist/manifest-DLMlD0Zc.mjs +1 -0
  142. package/dist/manifest-DYpn8w_h.mjs +1 -0
  143. package/dist/manifest-DYzWI8Xs.mjs +1 -0
  144. package/dist/manifest-D_obs5F4.mjs +1 -0
  145. package/dist/manifest-DujQqEQR.mjs +2 -0
  146. package/dist/manifest-DwL2ik8P.mjs +1 -0
  147. package/dist/manifest-ItF5P8A12.mjs +1 -0
  148. package/dist/manifest-KZphqIyX.mjs +1 -0
  149. package/dist/manifest-LG42zPLY2.mjs +1 -0
  150. package/dist/manifest-LLdI5m4T.mjs +1 -0
  151. package/dist/manifest-QYbQXJn0.mjs +1 -0
  152. package/dist/manifest-RcpX_MyZ.mjs +123 -0
  153. package/dist/manifest-YgVd8Sgz.mjs +1 -0
  154. package/dist/manifest-Zy7Odg5J.mjs +1 -0
  155. package/dist/manifest-ff1H7Pdp.mjs +1 -0
  156. package/dist/manifest-iuhF6pTL2.mjs +1 -0
  157. package/dist/manifest-nXHmtMSp2.mjs +1 -0
  158. package/dist/manifest-xWfu6iLo.mjs +1 -0
  159. package/dist/manifest-yC16OhL2.mjs +1 -0
  160. package/dist/manifest-ztWJoXy4.mjs +1 -0
  161. package/dist/matchesWildcardPattern-BAG6LvX5.mjs +1 -0
  162. package/dist/modules-BPBcSaM-.mjs +333 -0
  163. package/dist/mojo-ipc-BhwsdVUW.mjs +9 -0
  164. package/dist/native/scripts/linux/enum-windows.sh +12 -12
  165. package/dist/native/scripts/macos/enum-windows.applescript +22 -22
  166. package/dist/native-j8l473zn.mjs +961 -0
  167. package/dist/network-T0VRwNPd.mjs +7 -0
  168. package/dist/outputPaths-B4Ic4RZh.mjs +2 -0
  169. package/dist/parse-args-Bw413PlW.mjs +1 -0
  170. package/dist/platform-CzaQtISh.mjs +93 -0
  171. package/dist/playwright-cdp-fallback-DqFdx9-s.mjs +1 -0
  172. package/dist/process-CWhsCWrf.mjs +2 -0
  173. package/dist/proxy-DZFlDsG3.mjs +2 -0
  174. package/dist/registry-DH4sc1dt.mjs +1 -0
  175. package/dist/renderer-pid-9tJnZ_9N.mjs +1 -0
  176. package/dist/response-C7rKQst4.mjs +1 -0
  177. package/dist/search-defaults-lYBVn_3L.mjs +1 -0
  178. package/dist/server/plugin-api.d.mts +19 -36
  179. package/dist/server/plugin-api.mjs +1 -293
  180. package/dist/shared-state-board-BSjXLUV1.mjs +1 -0
  181. package/dist/sourcemap-Dh3Ai_ur.mjs +1 -0
  182. package/dist/ssrf-policy-CsIJGkpd.mjs +1 -0
  183. package/dist/streaming-BcJ0B6ao.mjs +1 -0
  184. package/dist/tool-builder-qif8M9-K.mjs +1 -0
  185. package/dist/transform-DOxzeWPB.mjs +103 -0
  186. package/dist/types-D9EiE5o9.mjs +1 -0
  187. package/dist/types-Fz69RzbZ.mjs +1 -0
  188. package/dist/wasm-CZ_HTfKR.mjs +174 -0
  189. package/dist/webcrack-C1iYG_EX.mjs +46 -0
  190. package/dist/workflow-BdwQmARn.mjs +101 -0
  191. package/package.json +55 -82
  192. package/src/native/scripts/linux/enum-windows.sh +12 -12
  193. package/src/native/scripts/macos/enum-windows.applescript +22 -22
  194. package/dist/AntiCheatDetector-CqGDXmfc.mjs +0 -350
  195. package/dist/CacheAdapters-jJFy20G-.mjs +0 -80
  196. package/dist/CodeInjector-BdjRfNx7.mjs +0 -150
  197. package/dist/ConsoleMonitor-DykL3IAw.mjs +0 -2269
  198. package/dist/DarwinAPI-ETyy0xyo.mjs +0 -363
  199. package/dist/DetailedDataManager-HT49OrvF.mjs +0 -217
  200. package/dist/EventBus-DFKvADm3.mjs +0 -141
  201. package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +0 -153
  202. package/dist/ExtensionManager-BDMsY2Dz.mjs +0 -721
  203. package/dist/FingerprintManager-BN4UQWnX.mjs +0 -96
  204. package/dist/HardwareBreakpoint-Cc2AFq1Y.mjs +0 -239
  205. package/dist/HeapAnalyzer-DruMgsgj.mjs +0 -284
  206. package/dist/InstrumentationSession-DLH0vd-z.mjs +0 -244
  207. package/dist/MemoryController-CMtviNW_.mjs +0 -167
  208. package/dist/MemoryScanSession-ITgb_NMi.mjs +0 -278
  209. package/dist/MemoryScanner-CiL7Z3ey.mjs +0 -428
  210. package/dist/NativeMemoryManager.impl-D9Lkovvn.mjs +0 -485
  211. package/dist/NativeMemoryManager.utils-BBlAixF5.mjs +0 -165
  212. package/dist/PEAnalyzer-DMQ44gen.mjs +0 -385
  213. package/dist/PageController-BPJNqqBN.mjs +0 -431
  214. package/dist/PointerChainEngine-K7wN8Z-w.mjs +0 -325
  215. package/dist/PrerequisiteError-TuyZIs6n.mjs +0 -20
  216. package/dist/ProcessRegistry-zGg12QbE.mjs +0 -74
  217. package/dist/ResponseBuilder-CJXWmWNw.mjs +0 -143
  218. package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +0 -269
  219. package/dist/ScriptManager-ZuWD-0Jg.mjs +0 -3003
  220. package/dist/Speedhack-D-z0umeT.mjs +0 -156
  221. package/dist/StealthVerifier-BWmPgQsv.mjs +0 -135
  222. package/dist/StructureAnalyzer-Cav5AVSL.mjs +0 -429
  223. package/dist/ToolCatalog-5OJdMiF0.mjs +0 -582
  224. package/dist/ToolError-jh9whhMd.mjs +0 -15
  225. package/dist/ToolProbe-DbCFGyrg.mjs +0 -45
  226. package/dist/ToolRegistry-B9krbTtI.mjs +0 -180
  227. package/dist/ToolRouter.policy-BGDAGyeH.mjs +0 -344
  228. package/dist/TraceRecorder-B41Z5XBj.mjs +0 -1286
  229. package/dist/VersionDetector-K3V4vGsw.mjs +0 -104
  230. package/dist/Win32API-C2kjj0ze.mjs +0 -346
  231. package/dist/Win32Debug-CKrGOTpo.mjs +0 -274
  232. package/dist/WorkflowEngine-DJ6M4opp.mjs +0 -569
  233. package/dist/analysis-BHeJW2Nb.mjs +0 -1234
  234. package/dist/artifactRetention-CPXkUJXp.mjs +0 -598
  235. package/dist/artifacts-DkfosXH3.mjs +0 -59
  236. package/dist/authorization-schema-DRqyJMSk.mjs +0 -31
  237. package/dist/betterSqlite3-DLSBZodi.mjs +0 -74
  238. package/dist/binary-instrument--V3MAhJ4.mjs +0 -971
  239. package/dist/bind-helpers-ClV34xdn.mjs +0 -42
  240. package/dist/boringssl-inspector-Bo_LOLaS.mjs +0 -180
  241. package/dist/browser-Dx3_S2cG.mjs +0 -4369
  242. package/dist/capabilities-CcHlvWgK.mjs +0 -33
  243. package/dist/chunk-CjcI7cDX.mjs +0 -15
  244. package/dist/concurrency-Drev_Vz9.mjs +0 -41
  245. package/dist/constants-CDZLOoVv.mjs +0 -534
  246. package/dist/coordination-DgItD9DL.mjs +0 -259
  247. package/dist/debugger-RS3RSAqs.mjs +0 -1288
  248. package/dist/definitions-BEoYofW5.mjs +0 -47
  249. package/dist/definitions-BRaefg3u.mjs +0 -365
  250. package/dist/definitions-BbkvZkiv.mjs +0 -96
  251. package/dist/definitions-BtWSHJ3o.mjs +0 -17
  252. package/dist/definitions-C1gCHO0i.mjs +0 -43
  253. package/dist/definitions-CDOg_b-l.mjs +0 -138
  254. package/dist/definitions-CVPD9hzZ.mjs +0 -54
  255. package/dist/definitions-Cea8Lgl7.mjs +0 -94
  256. package/dist/definitions-DAgIyjxM.mjs +0 -10
  257. package/dist/definitions-DJA27nsL.mjs +0 -66
  258. package/dist/definitions-DKPFU3LW.mjs +0 -25
  259. package/dist/definitions-DPRpZQ96.mjs +0 -47
  260. package/dist/definitions-DUE5gmdn.mjs +0 -18
  261. package/dist/definitions-DYVjOtxa.mjs +0 -26
  262. package/dist/definitions-DcYLVLCo.mjs +0 -37
  263. package/dist/definitions-Pp5LI2H4.mjs +0 -27
  264. package/dist/definitions-j9KdHVNR.mjs +0 -14
  265. package/dist/definitions-uzkjBwa7.mjs +0 -258
  266. package/dist/definitions-va-AnLuQ.mjs +0 -28
  267. package/dist/encoding-DJeqHmpd.mjs +0 -1079
  268. package/dist/evidence-graph-bridge-DcYizFk2.mjs +0 -136
  269. package/dist/factory-C90tBff6.mjs +0 -575
  270. package/dist/flat-target-session-Dgax2Cy3.mjs +0 -29
  271. package/dist/formatAddress-nnMvEohD.mjs +0 -17
  272. package/dist/graphql-CoHrhweh.mjs +0 -1197
  273. package/dist/handlers-4jmR0nMs.mjs +0 -898
  274. package/dist/handlers-BAHPxcch.mjs +0 -789
  275. package/dist/handlers-BOs9b907.mjs +0 -2600
  276. package/dist/handlers-BWXEy6ef.mjs +0 -917
  277. package/dist/handlers-Bndn6QvE.mjs +0 -111
  278. package/dist/handlers-BqC4bD4s.mjs +0 -681
  279. package/dist/handlers-BtYq60bM2.mjs +0 -276
  280. package/dist/handlers-BzgcB4iv.mjs +0 -799
  281. package/dist/handlers-CRyRWj2b.mjs +0 -859
  282. package/dist/handlers-CVv2H1uq.mjs +0 -592
  283. package/dist/handlers-Dl5a7JS4.mjs +0 -572
  284. package/dist/handlers-Dx2d7jt7.mjs +0 -2537
  285. package/dist/handlers-HujRKC3b.mjs +0 -661
  286. package/dist/handlers.impl-XWXkQfyi.mjs +0 -807
  287. package/dist/hooks-B1B8NRHL.mjs +0 -898
  288. package/dist/logger-Dh_xb7_2.mjs +0 -93
  289. package/dist/maintenance-PRMkLVRW.mjs +0 -835
  290. package/dist/manifest-67Bok-Si.mjs +0 -58
  291. package/dist/manifest-6lNTMZAB2.mjs +0 -87
  292. package/dist/manifest-B2duEHiH.mjs +0 -90
  293. package/dist/manifest-B6EY9Vm8.mjs +0 -57
  294. package/dist/manifest-B6nKSbyY.mjs +0 -95
  295. package/dist/manifest-BL8AQNPF.mjs +0 -106
  296. package/dist/manifest-BSZvJJmV.mjs +0 -47
  297. package/dist/manifest-BU7qzUyX.mjs +0 -418
  298. package/dist/manifest-Bl62e8WK.mjs +0 -49
  299. package/dist/manifest-Bo5cXjdt.mjs +0 -82
  300. package/dist/manifest-BpS4gtUK.mjs +0 -1347
  301. package/dist/manifest-Bv65_e2W.mjs +0 -101
  302. package/dist/manifest-BytNIF4Z.mjs +0 -117
  303. package/dist/manifest-C-xtsjS3.mjs +0 -81
  304. package/dist/manifest-CDYl7OhA.mjs +0 -66
  305. package/dist/manifest-CRZ3xmkD.mjs +0 -61
  306. package/dist/manifest-CoW6u4Tp.mjs +0 -132
  307. package/dist/manifest-Cq5zN_8A.mjs +0 -50
  308. package/dist/manifest-D7YZM_2e.mjs +0 -194
  309. package/dist/manifest-DE_VrAeQ.mjs +0 -314
  310. package/dist/manifest-DGsXSCpT.mjs +0 -39
  311. package/dist/manifest-DJ2vfEuW.mjs +0 -156
  312. package/dist/manifest-DPXDYhEu.mjs +0 -80
  313. package/dist/manifest-Dd4fQb0a.mjs +0 -322
  314. package/dist/manifest-Deq6opGg.mjs +0 -223
  315. package/dist/manifest-DfJTafJK.mjs +0 -37
  316. package/dist/manifest-DgOdgN_j.mjs +0 -50
  317. package/dist/manifest-DlbMW4v4.mjs +0 -47
  318. package/dist/manifest-DmVfbH0w.mjs +0 -374
  319. package/dist/manifest-Dog6Ddjr.mjs +0 -109
  320. package/dist/manifest-DvgU5FWb.mjs +0 -58
  321. package/dist/manifest-HsfDBs7j.mjs +0 -50
  322. package/dist/manifest-I8oQHvCG.mjs +0 -186
  323. package/dist/manifest-NvH_a-av.mjs +0 -786
  324. package/dist/manifest-cEJU1v0Z.mjs +0 -129
  325. package/dist/manifest-wOl5XLB12.mjs +0 -112
  326. package/dist/modules-tZozf0LQ.mjs +0 -10635
  327. package/dist/mojo-ipc-DXNEXEqb.mjs +0 -640
  328. package/dist/network-CPVvwvFg.mjs +0 -3852
  329. package/dist/outputPaths-um7lCRY3.mjs +0 -1141
  330. package/dist/parse-args-B4cY5Vx5.mjs +0 -39
  331. package/dist/platform-CYeFoTWp.mjs +0 -2161
  332. package/dist/process-BTbgcVc6.mjs +0 -1306
  333. package/dist/proxy-r8YN6nP1.mjs +0 -192
  334. package/dist/registry-Bl8ZQW61.mjs +0 -34
  335. package/dist/response-CWhh2aLo.mjs +0 -34
  336. package/dist/shared-state-board-BoZnSoj-.mjs +0 -586
  337. package/dist/sourcemap-BIDHUVXy.mjs +0 -934
  338. package/dist/ssrf-policy-Dsqd-DTX.mjs +0 -166
  339. package/dist/streaming-Dal6utPp.mjs +0 -725
  340. package/dist/tool-builder-BHJp32mV.mjs +0 -186
  341. package/dist/transform-DRVgGG90.mjs +0 -1011
  342. package/dist/types-Bx92KJfT.mjs +0 -4
  343. package/dist/types-DDBWs9UP.mjs +0 -37
  344. package/dist/wasm-BYx5UOeG.mjs +0 -1044
  345. package/dist/webcrack-Be0_FccV.mjs +0 -747
  346. package/dist/workflow-BpuKEtvn.mjs +0 -725
@@ -0,0 +1,306 @@
1
+ import{t as e}from"./logger-sBC6IdRT.mjs";import{t}from"./PrerequisiteError-BjCQA-gK.mjs";import{t as n}from"./NetworkMonitor-B_-au6aV.mjs";import{randomUUID as r}from"node:crypto";var i=class{page;networkEnabled=!1;requests=new Map;responses=new Map;MAX_NETWORK_RECORDS=500;MAX_INJECTED_RECORDS=500;requestCounter=0;responseBodyCache=new Map;MAX_BODY_CACHE_ENTRIES=200;requestIdMap=new WeakMap;boundOnRequest=null;boundOnResponse=null;constructor(e){this.page=e}setPage(e){if(this.page===e)return;let t=this.page,n=this.networkEnabled,r=this.boundOnRequest,i=this.boundOnResponse;if(n&&t&&r)try{t.off(`request`,r)}catch{}if(n&&t&&i)try{t.off(`response`,i)}catch{}if(this.page=e,!n||!this.page){this.page||(this.networkEnabled=!1);return}r&&this.page.on(`request`,r),i&&this.page.on(`response`,i)}getPageOrThrow(){if(!this.page)throw Error(`Playwright page not initialized`);return this.page}async evaluateInPage(e){let t=this.getPageOrThrow();if(!t.evaluate)throw Error(`Playwright page.evaluate is not available`);return t.evaluate(e)}async evaluateOnNewDocumentInPage(e){let t=this.getPageOrThrow();if(!t.evaluateOnNewDocument)throw Error(`Playwright page.evaluateOnNewDocument is not available`);return t.evaluateOnNewDocument(e)}isUnknownArray(e){return Array.isArray(e)}isClearedBuffersResult(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.xhrCleared==`number`&&typeof t.fetchCleared==`number`}isResetInterceptorsResult(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.xhrReset==`boolean`&&typeof t.fetchReset==`boolean`}isPlaywrightLikeRequest(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.url==`function`&&typeof t.method==`function`&&typeof t.headers==`function`&&typeof t.postData==`function`&&typeof t.resourceType==`function`}isPlaywrightLikeResponse(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.request==`function`&&typeof t.url==`function`&&typeof t.status==`function`&&typeof t.statusText==`function`&&typeof t.headers==`function`}normalizeHttpVersion(e){if(typeof e!=`string`)return;let t=e.trim().toLowerCase();if(t===`http/1.0`||t===`1.0`)return`1.0`;if(t===`http/1.1`||t===`1.1`)return`1.1`;if(t===`http/2`||t===`2`||t===`2.0`||t===`h2`)return`h2`;if(t===`http/3`||t===`3`||t===`3.0`||t===`h3`)return`h3`}detectHttpVersion(e){let t=typeof e.httpVersion==`function`?e.httpVersion():void 0,n=this.normalizeHttpVersion(t);if(n)return n;let r=typeof e.protocol==`function`?e.protocol():void 0;return this.normalizeHttpVersion(r)}async enable(){if(this.networkEnabled){e.warn(`PlaywrightNetworkMonitor already enabled`);return}this.boundOnRequest=e=>{if(!this.isPlaywrightLikeRequest(e))return;let t=`pw-${++this.requestCounter}`;this.requestIdMap.set(e,t);let n={requestId:t,url:e.url(),method:e.method(),headers:e.headers(),postData:e.postData()??void 0,timestamp:Date.now(),type:e.resourceType()};if(this.requests.set(t,n),this.requests.size>this.MAX_NETWORK_RECORDS){let e=this.requests.keys().next().value;e&&this.requests.delete(e)}},this.boundOnResponse=t=>{if(!this.isPlaywrightLikeResponse(t))return;let n=t.request(),r=`pw-res-${Date.now()}-${Math.random()}`,i=this.isPlaywrightLikeRequest(n)?this.requestIdMap.get(n)??r:r,a=this.detectHttpVersion(t),o=this.requests.get(i);o&&a&&(o.httpVersion=a);let s={requestId:i,url:t.url(),status:t.status(),statusText:t.statusText(),headers:t.headers(),mimeType:t.headers()[`content-type`]??`unknown`,timestamp:Date.now()};if(this.responses.set(i,s),this.responses.size>this.MAX_NETWORK_RECORDS){let e=this.responses.keys().next().value;e&&this.responses.delete(e)}if(typeof t.body==`function`){let n=i;t.body().then(t=>{if(t.length>1048576){e.debug(`[PW-BodyCache] Skipping oversized body for ${n} (${t.length} bytes)`);return}if(this.responseBodyCache.size>=this.MAX_BODY_CACHE_ENTRIES){let e=this.responseBodyCache.keys().next().value;e&&this.responseBodyCache.delete(e)}/^(text\/|application\/(json|javascript|xml|x-www-form-urlencoded))/i.test(s.mimeType)?this.responseBodyCache.set(n,{body:t.toString(`utf-8`),base64Encoded:!1}):this.responseBodyCache.set(n,{body:t.toString(`base64`),base64Encoded:!0}),e.debug(`[PW-BodyCache] Cached body for ${n} (${t.length} bytes)`)}).catch(t=>{e.debug(`[PW-BodyCache] Could not capture body for ${n}: ${t instanceof Error?t.message:String(t)}`)})}};let t=this.getPageOrThrow();t.on(`request`,this.boundOnRequest),t.on(`response`,this.boundOnResponse),this.networkEnabled=!0,e.info(`PlaywrightNetworkMonitor enabled`)}async disable(){let t=this.getPageOrThrow();if(this.boundOnRequest){try{t.off(`request`,this.boundOnRequest)}catch{}this.boundOnRequest=null}if(this.boundOnResponse){try{t.off(`response`,this.boundOnResponse)}catch{}this.boundOnResponse=null}this.networkEnabled=!1,e.info(`PlaywrightNetworkMonitor disabled`)}isEnabled(){return this.networkEnabled}getRequests(e){let t=Array.from(this.requests.values());return e?.url&&(t=t.filter(t=>t.url.includes(e.url))),e?.method&&(t=t.filter(t=>t.method.toUpperCase()===e.method.toUpperCase())),e?.limit&&(t=t.slice(-e.limit)),t}getResponses(e){let t=Array.from(this.responses.values());return e?.url&&(t=t.filter(t=>t.url.includes(e.url))),e?.status&&(t=t.filter(t=>t.status===e.status)),e?.limit&&(t=t.slice(-e.limit)),t}getStatus(){return{enabled:this.networkEnabled,requestCount:this.requests.size,responseCount:this.responses.size,listenerCount:this.networkEnabled?2:0,cdpSessionActive:!1}}getActivity(e){return{request:this.requests.get(e),response:this.responses.get(e)}}clearRecords(){this.requests.clear(),this.responses.clear(),this.responseBodyCache.clear()}getStats(){let e=Array.from(this.requests.values()),t=Array.from(this.responses.values()),n={};e.forEach(e=>{n[e.method]=(n[e.method]||0)+1});let r={};t.forEach(e=>{r[e.status]=(r[e.status]||0)+1});let i={};return e.forEach(e=>{let t=e.type||`unknown`;i[t]=(i[t]||0)+1}),{totalRequests:e.length,totalResponses:t.length,byMethod:n,byStatus:r,byType:i}}async getResponseBody(t){let n=this.responseBodyCache.get(t);return n?(this.responseBodyCache.delete(t),this.responseBodyCache.set(t,n),e.debug(`[PW-BodyCache] Cache hit for ${t}`),n):(e.warn(`getResponseBody: no cached body for ${t} in Playwright mode`),null)}async injectScript(e){await this.evaluateInPage(e)}async injectXHRInterceptor(e){let t=`
2
+ (function() {
3
+ if (window.__xhrInterceptorInjected) return;
4
+ window.__xhrInterceptorInjected = true;
5
+ const maxRecords = ${this.MAX_INJECTED_RECORDS};
6
+ const OrigXHR = window.__pwOriginalXMLHttpRequest || window.XMLHttpRequest;
7
+ window.__pwOriginalXMLHttpRequest = OrigXHR;
8
+ if (!window.__xhrRequests) window.__xhrRequests = [];
9
+ window.XMLHttpRequest = function() {
10
+ const xhr = new OrigXHR();
11
+ const origOpen = xhr.open.bind(xhr);
12
+ const origSend = xhr.send.bind(xhr);
13
+ xhr.open = function(method, url, ...rest) {
14
+ xhr.__hookMeta = { method, url, timestamp: Date.now() };
15
+ return origOpen(method, url, ...rest);
16
+ };
17
+ xhr.send = function(body) {
18
+ xhr.addEventListener('load', function() {
19
+ window.__xhrRequests.push({
20
+ ...xhr.__hookMeta, body: body ? String(body).slice(0, 2048) : null,
21
+ status: xhr.status, response: xhr.responseText.slice(0, 2048),
22
+ });
23
+ if (window.__xhrRequests.length > maxRecords) {
24
+ window.__xhrRequests.splice(0, window.__xhrRequests.length - maxRecords);
25
+ }
26
+ });
27
+ return origSend(body);
28
+ };
29
+ return xhr;
30
+ };
31
+ console.log('[PlaywrightXHR] XHR interceptor injected');
32
+ })();
33
+ `;e?.persistent?await this.evaluateOnNewDocumentInPage(t):await this.evaluateInPage(t)}async injectFetchInterceptor(e){let t=`
34
+ (function() {
35
+ if (window.__fetchInterceptorInjected) return;
36
+ window.__fetchInterceptorInjected = true;
37
+ const maxRecords = ${this.MAX_INJECTED_RECORDS};
38
+ const origFetch = window.__pwOriginalFetch || window.fetch;
39
+ window.__pwOriginalFetch = origFetch;
40
+ if (!window.__fetchRequests) window.__fetchRequests = [];
41
+ const normalizeHeaders = (value) => {
42
+ if (!value) return {};
43
+ try {
44
+ if (typeof Headers !== 'undefined' && value instanceof Headers) {
45
+ return Object.fromEntries(value.entries());
46
+ }
47
+ } catch {}
48
+ if (Array.isArray(value)) {
49
+ try {
50
+ return Object.fromEntries(value);
51
+ } catch {
52
+ return {};
53
+ }
54
+ }
55
+ return typeof value === 'object' ? value : {};
56
+ };
57
+ window.fetch = function(...args) {
58
+ const [resource, opts = {}] = args;
59
+ const requestLike = resource && typeof resource === 'object' ? resource : null;
60
+ const url =
61
+ typeof resource === 'string'
62
+ ? resource
63
+ : typeof resource?.url === 'string'
64
+ ? resource.url
65
+ : String(resource);
66
+ const method = opts?.method || requestLike?.method || 'GET';
67
+ const headers = normalizeHeaders(opts?.headers || requestLike?.headers);
68
+ const bodySource = opts?.body;
69
+ const body =
70
+ bodySource === undefined || bodySource === null
71
+ ? null
72
+ : String(bodySource).slice(0, 2048);
73
+ const entry = {
74
+ url,
75
+ method,
76
+ headers,
77
+ body,
78
+ timestamp: Date.now(),
79
+ response: null,
80
+ status: 0,
81
+ };
82
+ return origFetch.apply(this, args).then(res => {
83
+ entry.status = res.status;
84
+ return res.clone().text().then(
85
+ (text) => {
86
+ entry.response = text.slice(0, 2048);
87
+ return res;
88
+ },
89
+ () => {
90
+ entry.response = '[Unable to read response]';
91
+ return res;
92
+ },
93
+ ).then((response) => {
94
+ window.__fetchRequests.push(entry);
95
+ if (window.__fetchRequests.length > maxRecords) {
96
+ window.__fetchRequests.splice(0, window.__fetchRequests.length - maxRecords);
97
+ }
98
+ // Auto-persist compact summary so data survives context compression
99
+ try {
100
+ const s = { url: entry.url, method: entry.method, status: entry.status, ts: entry.timestamp };
101
+ const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
102
+ prev.push(s);
103
+ if (prev.length > 500) prev.splice(0, prev.length - 500);
104
+ localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
105
+ } catch(e) {}
106
+ return response;
107
+ });
108
+ });
109
+ };
110
+ console.log('[PlaywrightFetch] Fetch interceptor injected');
111
+ })();
112
+ `;e?.persistent?await this.evaluateOnNewDocumentInPage(t):await this.evaluateInPage(t)}async getXHRRequests(){try{let e=await this.evaluateInPage(()=>window.__xhrRequests??[]);return this.isUnknownArray(e)?e:[]}catch(t){return e.warn(`[PW] Failed to get XHR requests: ${t instanceof Error?t.message:String(t)}`),[]}}async getFetchRequests(){try{let e=await this.evaluateInPage(()=>window.__fetchRequests??[]);return this.isUnknownArray(e)?e:[]}catch(t){return e.warn(`[PW] Failed to get fetch requests: ${t instanceof Error?t.message:String(t)}`),[]}}async clearInjectedBuffers(){try{let e=await this.evaluateInPage(()=>{let e=window,t=e.__xhrRequests,n=e.__fetchRequests,r=Array.isArray(t)?t.length:0,i=Array.isArray(n)?n.length:0;return Array.isArray(t)&&(t.length=0),Array.isArray(n)&&(n.length=0),{xhrCleared:r,fetchCleared:i}});return this.isClearedBuffersResult(e)?e:{xhrCleared:0,fetchCleared:0}}catch(t){return e.warn(`[PW] Failed to clear injected buffers: ${t instanceof Error?t.message:String(t)}`),{xhrCleared:0,fetchCleared:0}}}async resetInjectedInterceptors(){try{let e=await this.evaluateInPage(()=>{let e=window,t=!1,n=!1;return e.__pwOriginalXMLHttpRequest&&(e.XMLHttpRequest=e.__pwOriginalXMLHttpRequest,t=!0),e.__pwOriginalFetch&&(e.fetch=e.__pwOriginalFetch,n=!0),Array.isArray(e.__xhrRequests)&&(e.__xhrRequests.length=0),Array.isArray(e.__fetchRequests)&&(e.__fetchRequests.length=0),e.__xhrInterceptorInjected=!1,e.__fetchInterceptorInjected=!1,{xhrReset:t,fetchReset:n}});return this.isResetInterceptorsResult(e)?e:{xhrReset:!1,fetchReset:!1}}catch(t){return e.warn(`[PW] Failed to reset interceptors: ${t instanceof Error?t.message:String(t)}`),{xhrReset:!1,fetchReset:!1}}}async getAllJavaScriptResponses(){return Array.from(this.responses.values()).filter(e=>e.mimeType.includes(`javascript`))}},a=class{cdpSession;rules=new Map;enabled=!1;eventHandler=null;compiledPatterns=new Map;constructor(e){this.cdpSession=e}async enable(t){let n=[];for(let e of t){let t=this.createRule(e);this.rules.set(t.id,t),this.compiledPatterns.set(t.id,this.compilePattern(t)),n.push(t)}return await this.applyRules(),this.eventHandler||(this.eventHandler=e=>{this.handleRequestPaused(e)},this.cdpSession.on(`Fetch.requestPaused`,this.eventHandler)),this.enabled=!0,e.info(`FetchInterceptor enabled with ${this.rules.size} rule(s)`),n}async disable(){let t=this.rules.size;if(this.eventHandler){try{this.cdpSession.off(`Fetch.requestPaused`,this.eventHandler)}catch{}this.eventHandler=null}try{await this.cdpSession.send(`Fetch.disable`)}catch(t){e.warn(`Fetch.disable failed:`,t)}return this.rules.clear(),this.compiledPatterns.clear(),this.enabled=!1,e.info(`FetchInterceptor disabled, removed ${t} rule(s)`),{removedRules:t}}async removeRule(e){let t=this.rules.delete(e);return this.compiledPatterns.delete(e),t&&(this.rules.size===0?await this.disable():await this.applyRules()),t}listRules(){let e=Array.from(this.rules.values());return{enabled:this.enabled,rules:e,totalHits:e.reduce((e,t)=>e+t.hitCount,0)}}isEnabled(){return this.enabled}createRule(e){let t=[];if(e.responseHeaders)for(let[n,r]of Object.entries(e.responseHeaders))t.push({name:n,value:r});return{id:r().slice(0,8),urlPattern:e.urlPattern,urlPatternType:e.urlPatternType??`glob`,stage:e.stage??`Response`,interceptAction:e.interceptAction??`fulfill`,responseCode:e.responseCode??200,responseHeaders:t,responseBody:e.responseBody??``,hitCount:0,createdAt:Date.now()}}compilePattern(e){if(e.urlPatternType===`regex`)try{return new RegExp(e.urlPattern,`i`)}catch{return new RegExp(e.urlPattern.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),`i`)}let t=e.urlPattern.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`⟨GLOBSTAR⟩`).replace(/\*/g,`[^/]*`).replace(/⟨GLOBSTAR⟩/g,`.*`);return new RegExp(t,`i`)}async applyRules(){let t=[];for(let e of this.rules.values())t.push({urlPattern:e.urlPatternType===`glob`?e.urlPattern:`*`,requestStage:e.stage});if(t.length!==0)try{try{await this.cdpSession.send(`Fetch.disable`)}catch{}await this.cdpSession.send(`Fetch.enable`,{patterns:t.length>0?t:[{urlPattern:`*`,requestStage:`Response`}],handleAuthRequests:!1})}catch(t){throw e.error(`Failed to apply Fetch interception rules:`,t),t}}async handleRequestPaused(t){let n=t.request.url;for(let[r,i]of this.rules){let a=this.compiledPatterns.get(r);if(a&&a.test(n)&&(i.hitCount++,e.info(`[FetchInterceptor] Rule "${i.urlPattern}" matched: ${n}`),await this.applyMatchedRule(i,t,n)))return}await this.continueOriginalRequest(t,n)}async applyMatchedRule(t,n,r){try{switch(t.interceptAction){case`continue`:return await this.continuePausedRequest(n),!0;case`abort`:return await this.cdpSession.send(`Fetch.failRequest`,{requestId:n.requestId,errorReason:`Failed`}),!0;case`fulfill`:return await this.cdpSession.send(`Fetch.fulfillRequest`,{requestId:n.requestId,responseCode:t.responseCode,responseHeaders:this.buildFulfillHeaders(t),body:Buffer.from(t.responseBody,`utf-8`).toString(`base64`)}),!0}}catch(n){return e.error(`[FetchInterceptor] ${t.interceptAction} failed for ${r}:`,n),!1}}buildFulfillHeaders(e){let t=[...e.responseHeaders];return t.some(e=>e.name.toLowerCase()===`content-type`)||(e.responseBody.startsWith(`{`)||e.responseBody.startsWith(`[`)?t.push({name:`Content-Type`,value:`application/json`}):t.push({name:`Content-Type`,value:`text/plain`})),t.some(e=>e.name.toLowerCase()===`access-control-allow-origin`)||t.push({name:`Access-Control-Allow-Origin`,value:`*`}),t}async continuePausedRequest(e){if(e.responseStatusCode!==void 0){await this.cdpSession.send(`Fetch.continueResponse`,{requestId:e.requestId});return}await this.cdpSession.send(`Fetch.continueRequest`,{requestId:e.requestId})}async continueOriginalRequest(t,n){try{await this.continuePausedRequest(t)}catch(t){e.warn(`[FetchInterceptor] continue failed for ${n}:`,t)}}};function o(e){return e}function s(t,n){let r=o(t);if(r.contextSwitchPending)return[];let i=r.messages;n?.type&&(i=i.filter(e=>e.type===n.type));let a=n?.since;return a!==void 0&&(i=i.filter(e=>e.timestamp>=a)),n?.limit&&(i=i.slice(-n.limit)),e.debug(`getLogs: ${i.length} messages`),i}function c(t){let n=o(t);n.messages=[],e.info(`Console logs cleared`)}function l(e){let t=o(e);if(t.contextSwitchPending)return{totalMessages:0,byType:{}};let n={};for(let e of t.messages)n[e.type]=(n[e.type]||0)+1;return{totalMessages:t.messages.length,byType:n}}function u(e,t){let n=o(e);if(n.contextSwitchPending)return[];let r=n.exceptions;t?.url&&(r=r.filter(e=>e.url?.includes(t.url)));let i=t?.since;return i!==void 0&&(r=r.filter(e=>e.timestamp>=i)),t?.limit&&(r=r.slice(-t.limit)),r}function d(t){let n=o(t);n.exceptions=[],e.info(`Exceptions cleared`)}function f(e){return e}function p(e){return e.contextSwitchPending===!0}function m(e){let t=f(e);return p(t)?!1:(t.networkMonitor?.isEnabled()??!1)||(t.playwrightNetworkMonitor?.isEnabled()??!1)}function h(e){let t=f(e);return p(t)?{enabled:!1,requestCount:0,responseCount:0,listenerCount:0,cdpSessionActive:!1}:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getStatus():t.networkMonitor?t.networkMonitor.getStatus():{enabled:!1,requestCount:0,responseCount:0,listenerCount:0,cdpSessionActive:t.cdpSession!==null}}function g(e,t){let n=f(e);return p(n)?[]:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getRequests(t):n.networkMonitor?.getRequests(t)??[]}function _(e,t){let n=f(e);return p(n)?[]:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getResponses(t):n.networkMonitor?.getResponses(t)??[]}function v(e,t){let n=f(e);return p(n)?{}:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getActivity(t):n.networkMonitor?.getActivity(t)??{}}async function y(t,n){let r=f(t);return p(r)?null:r.playwrightNetworkMonitor?r.playwrightNetworkMonitor.getResponseBody(n):r.networkMonitor?r.networkMonitor.getResponseBody(n):(e.error(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`),null)}async function b(e){let t=f(e);return p(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getAllJavaScriptResponses():t.networkMonitor?t.networkMonitor.getAllJavaScriptResponses():[]}function x(e){let t=f(e);t.networkMonitor?.clearRecords(),t.playwrightNetworkMonitor?.clearRecords()}async function S(e){let t=f(e);if(t.playwrightNetworkMonitor)return{...await t.playwrightNetworkMonitor.clearInjectedBuffers(),dynamicScriptsCleared:0};let n=t.networkMonitor?await t.networkMonitor.clearInjectedBuffers():{xhrCleared:0,fetchCleared:0},r=await t.clearDynamicScriptBuffer();return{...n,...r}}async function C(e){let t=f(e);if(t.playwrightNetworkMonitor)return{...await t.playwrightNetworkMonitor.resetInjectedInterceptors(),scriptMonitorReset:!1};let n=t.networkMonitor?await t.networkMonitor.resetInjectedInterceptors():{xhrReset:!1,fetchReset:!1},r=await t.resetDynamicScriptMonitoring();return{...n,...r}}function w(e){let t=f(e);return p(t)?{totalRequests:0,totalResponses:0,byMethod:{},byStatus:{},byType:{}}:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getStats():t.networkMonitor?.getStats()??{totalRequests:0,totalResponses:0,byMethod:{},byStatus:{},byType:{}}}async function T(e,n){let r=f(e);if(p(r))throw new t(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`);if(r.playwrightNetworkMonitor)return r.playwrightNetworkMonitor.injectXHRInterceptor(n);if(!r.networkMonitor)throw new t(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`);return r.networkMonitor.injectXHRInterceptor(n)}async function E(e,n){let r=f(e);if(p(r))throw new t(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`);if(r.playwrightNetworkMonitor)return r.playwrightNetworkMonitor.injectFetchInterceptor(n);if(!r.networkMonitor)throw new t(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`);return r.networkMonitor.injectFetchInterceptor(n)}async function D(e){let t=f(e);return p(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getXHRRequests():t.networkMonitor?t.networkMonitor.getXHRRequests():[]}async function O(e){let t=f(e);return p(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getFetchRequests():t.networkMonitor?t.networkMonitor.getFetchRequests():[]}async function k(t,n){let r=t;if(await r.ensureSession(),!r.cdpSession)throw Error(`CDP session not available after reconnect attempt`);if(r.objectCache.has(n)){let e=r.objectCache.get(n);if(e!==void 0)return e}try{let t=await r.cdpSession.send(`Runtime.getProperties`,{objectId:n,ownProperties:!0,accessorPropertiesOnly:!1,generatePreview:!0}),i={};for(let e of t.result){if(!e.value)continue;let t=e.value;i[e.name]={value:r.extractValue(t),type:t.type,objectId:t.objectId,description:t.description}}if(!r.objectCache.has(n))for(;r.objectCache.size>=r.MAX_OBJECT_CACHE_SIZE;){let e=r.objectCache.keys().next().value;if(e===void 0)break;r.objectCache.delete(e)}return r.objectCache.set(n,i),e.info(`Object inspected: ${n}`,{propertyCount:Object.keys(i).length}),i}catch(t){throw e.error(`Failed to inspect object:`,t),t}}function A(t){t.objectCache.clear(),e.info(`Object cache cleared`)}function j(e){return e}async function M(n,r){let i=j(n);if(await i.ensureSession(),!i.cdpSession)throw new t(`CDP session not available after reconnect attempt`);let a=`
113
+ (function() {
114
+ if (window.__dynamicScriptMonitorInstalled) {
115
+ console.log('[ScriptMonitor] Already installed');
116
+ return;
117
+ }
118
+ window.__dynamicScriptMonitorInstalled = true;
119
+
120
+ const maxRecords = ${i.MAX_INJECTED_DYNAMIC_SCRIPTS};
121
+ if (!window.__dynamicScripts) {
122
+ window.__dynamicScripts = [];
123
+ }
124
+ const dynamicScripts = window.__dynamicScripts;
125
+ const state = window.__dynamicScriptMonitorState || {};
126
+ if (!state.originalCreateElement) state.originalCreateElement = document.createElement;
127
+ if (!state.originalEval) state.originalEval = window.eval;
128
+ if (!state.originalFunction) state.originalFunction = window.Function;
129
+ window.__dynamicScriptMonitorState = state;
130
+
131
+ const observer = new MutationObserver((mutations) => {
132
+ mutations.forEach((mutation) => {
133
+ mutation.addedNodes.forEach((node) => {
134
+ if (node.nodeName === 'SCRIPT') {
135
+ const script = node;
136
+ const info = {
137
+ type: 'dynamic',
138
+ src: script.src || '(inline)',
139
+ content: script.src ? null : script.textContent,
140
+ timestamp: Date.now(),
141
+ async: script.async,
142
+ defer: script.defer,
143
+ };
144
+
145
+ dynamicScripts.push(info);
146
+ if (dynamicScripts.length > maxRecords) {
147
+ dynamicScripts.splice(0, dynamicScripts.length - maxRecords);
148
+ }
149
+ console.log('[ScriptMonitor] Dynamic script added:', info);
150
+ }
151
+ });
152
+ });
153
+ });
154
+
155
+ observer.observe(document.documentElement, {
156
+ childList: true,
157
+ subtree: true,
158
+ });
159
+ state.observer = observer;
160
+
161
+ const originalCreateElement = state.originalCreateElement;
162
+ document.createElement = function(tagName) {
163
+ const element = originalCreateElement.call(document, tagName);
164
+
165
+ if (tagName.toLowerCase() === 'script') {
166
+ console.log('[ScriptMonitor] Script element created via createElement');
167
+
168
+ const originalSetAttribute = element.setAttribute;
169
+ element.setAttribute = function(name, value) {
170
+ if (name === 'src') {
171
+ console.log('[ScriptMonitor] Script src set to:', value);
172
+ }
173
+ return originalSetAttribute.call(element, name, value);
174
+ };
175
+ }
176
+
177
+ return element;
178
+ };
179
+
180
+ const originalEval = state.originalEval;
181
+ window.eval = function(code) {
182
+ console.log('[ScriptMonitor] eval() called with code:',
183
+ typeof code === 'string' ? code.substring(0, 100) + '...' : code);
184
+ return originalEval.call(window, code);
185
+ };
186
+
187
+ const originalFunction = state.originalFunction;
188
+ window.Function = function(...args) {
189
+ console.log('[ScriptMonitor] Function() constructor called with args:', args);
190
+ return originalFunction.apply(this, args);
191
+ };
192
+
193
+ window.__getDynamicScripts = function() {
194
+ return dynamicScripts;
195
+ };
196
+
197
+ console.log('[ScriptMonitor] Dynamic script monitoring enabled');
198
+ })();
199
+ `;r?.persistent?(await i.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:a}),e.info(`Dynamic script monitoring enabled (persistent)`)):(await i.cdpSession.send(`Runtime.evaluate`,{expression:a}),e.info(`Dynamic script monitoring enabled`))}async function N(t){let n=j(t);if(!n.cdpSession)return{dynamicScriptsCleared:0};try{let e=(await n.cdpSession.send(`Runtime.evaluate`,{expression:`
200
+ (() => {
201
+ const store = Array.isArray(window.__dynamicScripts)
202
+ ? window.__dynamicScripts
203
+ : (typeof window.__getDynamicScripts === 'function'
204
+ ? window.__getDynamicScripts()
205
+ : null);
206
+ const dynamicScriptsCleared = Array.isArray(store) ? store.length : 0;
207
+ if (Array.isArray(store)) {
208
+ store.length = 0;
209
+ }
210
+ return { dynamicScriptsCleared };
211
+ })()
212
+ `,returnByValue:!0})).result?.value;return typeof e==`object`&&e&&`dynamicScriptsCleared`in e&&typeof e.dynamicScriptsCleared==`number`?e:{dynamicScriptsCleared:0}}catch(t){return e.error(`Failed to clear dynamic script buffer:`,t),{dynamicScriptsCleared:0}}}async function P(t){let n=j(t);if(!n.cdpSession)return{scriptMonitorReset:!1};try{let e=(await n.cdpSession.send(`Runtime.evaluate`,{expression:`
213
+ (() => {
214
+ const state = window.__dynamicScriptMonitorState;
215
+ let scriptMonitorReset = false;
216
+
217
+ try {
218
+ if (state && state.observer && typeof state.observer.disconnect === 'function') {
219
+ state.observer.disconnect();
220
+ state.observer = null;
221
+ scriptMonitorReset = true;
222
+ }
223
+ } catch (_) {}
224
+
225
+ try {
226
+ if (state && state.originalCreateElement) {
227
+ document.createElement = state.originalCreateElement;
228
+ scriptMonitorReset = true;
229
+ }
230
+ } catch (_) {}
231
+
232
+ try {
233
+ if (state && state.originalEval) {
234
+ window.eval = state.originalEval;
235
+ scriptMonitorReset = true;
236
+ }
237
+ } catch (_) {}
238
+
239
+ try {
240
+ if (state && state.originalFunction) {
241
+ window.Function = state.originalFunction;
242
+ scriptMonitorReset = true;
243
+ }
244
+ } catch (_) {}
245
+
246
+ if (Array.isArray(window.__dynamicScripts)) {
247
+ window.__dynamicScripts.length = 0;
248
+ }
249
+ delete window.__getDynamicScripts;
250
+ window.__dynamicScriptMonitorInstalled = false;
251
+
252
+ return { scriptMonitorReset };
253
+ })()
254
+ `,returnByValue:!0})).result?.value;return typeof e==`object`&&e&&`scriptMonitorReset`in e&&typeof e.scriptMonitorReset==`boolean`?e:{scriptMonitorReset:!1}}catch(t){return e.error(`Failed to reset dynamic script monitoring:`,t),{scriptMonitorReset:!1}}}async function F(n){let r=j(n);if(!r.cdpSession)throw new t(`CDP session not initialized`);try{let e=(await r.cdpSession.send(`Runtime.evaluate`,{expression:`window.__getDynamicScripts ? window.__getDynamicScripts() : []`,returnByValue:!0})).result?.value;return Array.isArray(e)?e:[]}catch(t){return e.error(`Failed to get dynamic scripts:`,t),[]}}async function I(n,r,i){let a=j(n);if(!a.cdpSession)throw new t(`CDP session not initialized`);let o=`
255
+ (function() {
256
+ const originalFunc = window.${r};
257
+ if (typeof originalFunc !== 'function') {
258
+ console.error('[Tracer] ${r} is not a function');
259
+ return;
260
+ }
261
+
262
+ window.${r} = new Proxy(originalFunc, {
263
+ apply: function(target, thisArg, args) {
264
+ console.log('[Tracer] ${r} called with args:', args);
265
+ const startTime = performance.now();
266
+
267
+ try {
268
+ const result = target.apply(thisArg, args);
269
+ const endTime = performance.now();
270
+ console.log('[Tracer] ${r} returned:', result, 'Time:', (endTime - startTime).toFixed(2), 'ms');
271
+ return result;
272
+ } catch (error) {
273
+ console.error('[Tracer] ${r} threw error:', error);
274
+ throw error;
275
+ }
276
+ }
277
+ });
278
+
279
+ console.log('[Tracer] ${r} is now being traced');
280
+ })();
281
+ `;i?.persistent?(await a.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:o}),e.info(`Function tracer injected for: ${r} (persistent)`)):(await a.cdpSession.send(`Runtime.evaluate`,{expression:o}),e.info(`Function tracer injected for: ${r}`))}async function L(n,r,i,a){let o=j(n);if(!o.cdpSession)throw new t(`CDP session not initialized`);let s=`
282
+ (function() {
283
+ const obj = ${r};
284
+ if (!obj) {
285
+ console.error('[Watcher] Object not found: ${r}');
286
+ return;
287
+ }
288
+
289
+ let value = obj.${i};
290
+
291
+ Object.defineProperty(obj, '${i}', {
292
+ get: function() {
293
+ console.log('[Watcher] ${r}.${i} accessed, value:', value);
294
+ return value;
295
+ },
296
+ set: function(newValue) {
297
+ console.log('[Watcher] ${r}.${i} changed from', value, 'to', newValue);
298
+ value = newValue;
299
+ },
300
+ enumerable: true,
301
+ configurable: true
302
+ });
303
+
304
+ console.log('[Watcher] Property watcher installed for ${r}.${i}');
305
+ })();
306
+ `;a?.persistent?(await o.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:s}),e.info(`Property watcher injected for: ${r}.${i} (persistent)`)):(await o.cdpSession.send(`Runtime.evaluate`,{expression:s}),e.info(`Property watcher injected for: ${r}.${i}`))}function R(e){return e}async function z(t,r,i,a){let o=R(t);o.cdpSession=r,o.usingManagedTargetSession=i,o.lastEnableOptions={...a},o.cdpSession.on(`disconnected`,()=>{e.warn(`ConsoleMonitor CDP session disconnected`),o.cdpSession=null,o.networkMonitor=null,o.usingManagedTargetSession=!1}),await H(o.cdpSession,`Runtime.enable`,{},5e3),await H(o.cdpSession,`Console.enable`,{},5e3),o.cdpSession.on(`Runtime.consoleAPICalled`,t=>{let n=t.stackTrace?.callFrames?.map(e=>({functionName:e.functionName||`(anonymous)`,url:e.url,lineNumber:e.lineNumber,columnNumber:e.columnNumber}))||[],r={type:t.type,text:t.args.map(e=>o.formatRemoteObject(e)).join(` `),args:t.args.map(e=>o.extractValue(e)),timestamp:t.timestamp,stackTrace:n,url:n[0]?.url,lineNumber:n[0]?.lineNumber,columnNumber:n[0]?.columnNumber};o.messages.push(r),o.messages.length>o.MAX_MESSAGES&&(o.messages=o.messages.slice(-Math.floor(o.MAX_MESSAGES/2))),e.debug(`Console ${t.type}: ${r.text}`)}),o.cdpSession.on(`Console.messageAdded`,e=>{let t=e.message,n={type:t.level||`log`,text:t.text,timestamp:Date.now(),url:t.url,lineNumber:t.line,columnNumber:t.column};o.messages.push(n),o.messages.length>o.MAX_MESSAGES&&(o.messages=o.messages.slice(-Math.floor(o.MAX_MESSAGES/2)))}),a?.enableExceptions!==!1&&o.cdpSession.on(`Runtime.exceptionThrown`,t=>{let n=t.exceptionDetails,r=n.stackTrace?.callFrames?.map(e=>({functionName:e.functionName||`(anonymous)`,url:e.url,lineNumber:e.lineNumber,columnNumber:e.columnNumber}))||[],i={text:n.exception?.description||n.text,exceptionId:n.exceptionId,timestamp:Date.now(),stackTrace:r,url:n.url,lineNumber:n.lineNumber,columnNumber:n.columnNumber,scriptId:n.scriptId};o.exceptions.push(i),o.exceptions.length>o.MAX_EXCEPTIONS&&(o.exceptions=o.exceptions.slice(-Math.floor(o.MAX_EXCEPTIONS/2))),e.error(`Exception thrown: ${i.text}`,{url:i.url,line:i.lineNumber})}),a?.enableNetwork&&(o.networkMonitor=o.getManagedTargetNetworkMonitor?.()??new n(o.cdpSession),await o.networkMonitor.enable()),e.info(`ConsoleMonitor enabled`,{network:a?.enableNetwork||!1,exceptions:a?.enableExceptions!==!1})}async function B(t,n){let r=R(t);if(r.playwrightConsoleHandler){n?.enableNetwork&&!r.playwrightNetworkMonitor&&(r.playwrightNetworkMonitor=new i(r.playwrightPage),await r.playwrightNetworkMonitor.enable(),e.info(`Network monitoring added to existing ConsoleMonitor Playwright session`));return}let a=r.playwrightPage;r.playwrightConsoleHandler=e=>{let t={type:e.type()||`log`,text:e.text(),timestamp:Date.now()};r.messages.push(t),r.messages.length>r.MAX_MESSAGES&&(r.messages=r.messages.slice(-Math.floor(r.MAX_MESSAGES/2)))},a.on(`console`,r.playwrightConsoleHandler),n?.enableExceptions!==!1&&(r.playwrightErrorHandler=e=>{let t={text:e.message,exceptionId:Date.now(),timestamp:Date.now()};r.exceptions.push(t),r.exceptions.length>r.MAX_EXCEPTIONS&&(r.exceptions=r.exceptions.slice(-Math.floor(r.MAX_EXCEPTIONS/2)))},a.on(`pageerror`,r.playwrightErrorHandler)),n?.enableNetwork&&(r.playwrightNetworkMonitor=new i(r.playwrightPage),await r.playwrightNetworkMonitor.enable()),e.info(`ConsoleMonitor enabled (Playwright/camoufox mode)`,{network:n?.enableNetwork||!1})}async function V(t){let n=R(t);if(n.playwrightPage){let e=n.playwrightPage;if(n.playwrightConsoleHandler){try{e.off(`console`,n.playwrightConsoleHandler)}catch{}n.playwrightConsoleHandler=null}if(n.playwrightErrorHandler){try{e.off(`pageerror`,n.playwrightErrorHandler)}catch{}n.playwrightErrorHandler=null}}if(n.playwrightNetworkMonitor&&=(await n.playwrightNetworkMonitor.disable(),null),n.cdpSession){n.networkMonitor&&=(await n.networkMonitor.disable(),null);try{await n.cdpSession.send(`Console.disable`)}catch(t){e.warn(`Failed to disable Console domain:`,t)}try{await n.cdpSession.send(`Runtime.disable`)}catch(t){e.warn(`Failed to disable Runtime domain:`,t)}if(n.usingManagedTargetSession)e.debug(`ConsoleMonitor released managed target session without detaching target`);else try{await n.cdpSession.detach()}catch(t){e.warn(`Failed to detach ConsoleMonitor CDP session:`,t)}n.cdpSession=null,n.usingManagedTargetSession=!1,e.info(`ConsoleMonitor disabled`)}}async function H(e,t,n,r=3e4){return Promise.race([e.send(t,n),new Promise((e,n)=>setTimeout(()=>n(Error(`CDP ${t} timed out after ${r}ms`)),r))])}var U=class{collector;cdpSession=null;networkMonitor=null;fetchInterceptor=null;playwrightNetworkMonitor=null;playwrightPage=null;usingManagedTargetSession=!1;contextSwitchPending=!1;playwrightConsoleHandler=null;playwrightErrorHandler=null;messages=[];MAX_MESSAGES=1e3;exceptions=[];MAX_EXCEPTIONS=500;MAX_INJECTED_DYNAMIC_SCRIPTS=500;MAX_OBJECT_CACHE_SIZE=1e3;objectCache=new Map;initPromise;lastEnableOptions={};constructor(e){this.collector=e,this.touchSplitMembersForTypeCheck()}touchSplitMembersForTypeCheck(){this.MAX_INJECTED_DYNAMIC_SCRIPTS,this.MAX_OBJECT_CACHE_SIZE,this.clearDynamicScriptBuffer,this.resetDynamicScriptMonitoring,this.usingManagedTargetSession,this.playwrightErrorHandler,this.messages,this.MAX_MESSAGES,this.exceptions,this.MAX_EXCEPTIONS,this.formatRemoteObject,this.extractValue}setPlaywrightPage(e){this.playwrightPage=e,this.playwrightNetworkMonitor?.setPage(e)}clearPlaywrightPage(){this.playwrightPage=null,this.contextSwitchPending=!1,this.playwrightConsoleHandler=null,this.playwrightErrorHandler=null,this.playwrightNetworkMonitor?.setPage(null),this.playwrightNetworkMonitor=null}getManagedTargetSession(){return this.collector.getAttachedTargetSession?.()??null}getManagedTargetNetworkMonitor(){return this.collector.getBrowserTargetSessionManager?.()??null}async createCdpSession(){let e=this.getManagedTargetSession();if(e)return{session:e,managed:!0};let t=await this.collector.getActivePage();return{session:await Promise.race([t.createCDPSession(),new Promise((e,t)=>setTimeout(()=>t(Error(`cdp_session_timeout`)),500))]),managed:!1}}markContextChanged(){!this.cdpSession&&!this.playwrightPage&&!this.networkMonitor&&!this.playwrightNetworkMonitor&&!this.fetchInterceptor||(this.contextSwitchPending=!0,this.clearLogs(),this.clearExceptions(),this.networkMonitor?.persistsAcrossContextSwitches?.()||this.clearNetworkRecords(),this.clearObjectCache(),e.info(`ConsoleMonitor marked stale after active context switch`))}async enable(e){if(this.contextSwitchPending&&await this.disable(),this.initPromise){await this.initPromise,await this.applyPostEnableOptions(e);return}this.initPromise=this.doEnable(e);try{await this.initPromise}finally{this.initPromise=void 0}}async doEnable(t){if(this.playwrightPage)return this.lastEnableOptions={...t},B(this,t);if(this.cdpSession){t?.enableNetwork&&!this.networkMonitor&&(this.networkMonitor=this.getManagedTargetNetworkMonitor()??new n(this.cdpSession),await this.networkMonitor.enable(),e.info(`Network monitoring added to existing ConsoleMonitor session`));return}let{session:r,managed:i}=await this.createCdpSession();await z(this,r,i,t)}async applyPostEnableOptions(t){if(t?.enableNetwork){if(this.lastEnableOptions={...this.lastEnableOptions,...t},this.playwrightPage&&this.playwrightConsoleHandler&&!this.playwrightNetworkMonitor){await B(this,t);return}this.cdpSession&&!this.networkMonitor&&(this.networkMonitor=this.getManagedTargetNetworkMonitor()??new n(this.cdpSession),await this.networkMonitor.enable(),e.info(`Network monitoring added to existing ConsoleMonitor session`))}}async disable(){try{this.cdpSession&&this.fetchInterceptor&&(await this.fetchInterceptor.disable(),this.fetchInterceptor=null),await V(this)}finally{this.fetchInterceptor=null,this.initPromise=void 0,this.contextSwitchPending=!1,this.objectCache.clear()}}async ensureSession(){if(this.contextSwitchPending){e.info(`ConsoleMonitor context switched, rebinding on demand...`);let t={...this.lastEnableOptions};await this.disable(),await this.enable(t);return}if(!this.cdpSession&&!this.playwrightPage){e.info(`ConsoleMonitor CDP session lost, reinitializing...`),await this.enable(this.lastEnableOptions);return}if(this.cdpSession)try{await Promise.race([this.cdpSession.send(`Runtime.evaluate`,{expression:`1`,returnByValue:!0}),new Promise((e,t)=>setTimeout(()=>t(Error(`session_unreachable`)),3e3))]);return}catch{e.warn(`ConsoleMonitor CDP session unresponsive (zombie), reinitializing...`),this.cdpSession=null,this.networkMonitor=null,this.fetchInterceptor=null,this.usingManagedTargetSession=!1,await this.enable(this.lastEnableOptions)}}isSessionActive(){return!this.contextSwitchPending&&(this.cdpSession!==null||this.playwrightPage!==null)}getLogs(e){return s(this,e)}async execute(t){await this.ensureSession();try{let n=await H(this.cdpSession,`Runtime.evaluate`,{expression:t,returnByValue:!0});if(n.exceptionDetails)throw e.error(`Console execute error:`,n.exceptionDetails),Error(n.exceptionDetails.text);return e.info(`Console expression executed`),n.result.value}catch(t){throw e.error(`Console execute failed:`,t),t}}clearLogs(){c(this)}getStats(){return l(this)}async close(){try{await this.disable()}finally{this.initPromise=void 0,this.objectCache.clear()}}isNetworkEnabled(){return m(this)}getNetworkStatus(){return h(this)}getNetworkRequests(e){return g(this,e)}getNetworkResponses(e){return _(this,e)}getNetworkActivity(e){return v(this,e)}async getResponseBody(e){return y(this,e)}async getAllJavaScriptResponses(){return b(this)}clearNetworkRecords(){x(this)}async clearInjectedBuffers(){return S(this)}async resetInjectedInterceptors(){return C(this)}getNetworkStats(){return w(this)}async injectXHRInterceptor(e){return T(this,e)}async injectFetchInterceptor(e){return E(this,e)}async getXHRRequests(){return D(this)}async getFetchRequests(){return O(this)}getExceptions(e){return u(this,e)}clearExceptions(){d(this)}async inspectObject(e){return k(this,e)}clearObjectCache(){A(this)}async enableDynamicScriptMonitoring(e){return M(this,e)}async clearDynamicScriptBuffer(){return N(this)}async resetDynamicScriptMonitoring(){return P(this)}async getDynamicScripts(){return F(this)}async injectFunctionTracer(e,t){return I(this,e,t)}async injectPropertyWatcher(e,t,n){return L(this,e,t,n)}async enableFetchIntercept(e){if(await this.ensureSession(),!this.cdpSession)throw Error(`No CDP session available for Fetch interception`);return this.fetchInterceptor||=new a(this.cdpSession),this.fetchInterceptor.enable(e)}async disableFetchIntercept(){if(!this.fetchInterceptor)return{removedRules:0};let e=await this.fetchInterceptor.disable();return this.fetchInterceptor=null,e}async removeFetchInterceptRule(e){if(!this.fetchInterceptor)return!1;let t=await this.fetchInterceptor.removeRule(e);return this.fetchInterceptor.isEnabled()||(this.fetchInterceptor=null),t}getFetchInterceptStatus(){return this.fetchInterceptor?this.fetchInterceptor.listRules():{enabled:!1,rules:[],totalHits:0}}formatRemoteObject(e){return e.value===void 0?e.description?e.description:e.type===`undefined`?`undefined`:e.type===`object`&&e.subtype===`null`?`null`:`[${e.type}]`:String(e.value)}extractValue(e){if(e.value!==void 0)return e.value;if(e.type!==`undefined`)return e.type===`object`&&e.subtype===`null`?null:e.objectId?{__objectId:e.objectId,__type:e.type,__description:e.description}:e.description||`[${e.type}]`}};export{U as ConsoleMonitor};
@@ -0,0 +1,95 @@
1
+ import{t as e}from"./logger-sBC6IdRT.mjs";import{nt as t,rt as n}from"./constants-BYj8Xek8.mjs";import{t as r}from"./outputPaths-B4Ic4RZh.mjs";import{t as i}from"./PrerequisiteError-BjCQA-gK.mjs";import{n as a,r as o,t as s}from"./NetworkMonitor-B_-au6aV.mjs";import{l as c}from"./PageController-Dfsm1_o7.mjs";import{n as l,t as u}from"./flat-target-session-DvcQX7J5.mjs";import{t as d}from"./matchesWildcardPattern-BAG6LvX5.mjs";import{t as f}from"./playwright-cdp-fallback-DqFdx9-s.mjs";import{existsSync as p}from"fs";import m,{join as h}from"path";import g,{createHash as ee}from"crypto";import{promisify as _}from"util";import v,{readFile as te}from"fs/promises";import{gunzip as ne,gzip as y}from"zlib";import{homedir as b}from"os";var x=class t{cacheDir;maxAge;maxSize;memoryCache=new Map;MAX_MEMORY_CACHE_SIZE=100;writesSinceCleanup=0;static CLEANUP_INTERVAL=20;constructor(e={}){this.cacheDir=e.cacheDir||r(),this.maxAge=e.maxAge||1440*60*1e3,this.maxSize=e.maxSize||100*1024*1024}async init(){try{await v.mkdir(this.cacheDir,{recursive:!0}),e.debug(`Cache directory initialized: ${this.cacheDir}`)}catch(t){e.error(`Failed to initialize cache directory:`,t)}}generateKey(e,t){let n=JSON.stringify({url:e,options:t});return g.createHash(`md5`).update(n).digest(`hex`)}getCachePath(e){return m.join(this.cacheDir,`${e}.json`)}getDependenciesOrEmpty(e){return e??{nodes:[],edges:[]}}isExpired(e){return Date.now()-e.timestamp>this.maxAge}async get(t,n){let r=this.generateKey(t,n);if(this.memoryCache.has(r)){let n=this.memoryCache.get(r);if(this.isExpired(n))this.memoryCache.delete(r);else return e.debug(`Cache hit (memory): ${t}`),{files:n.files,dependencies:this.getDependenciesOrEmpty(n.dependencies),totalSize:n.totalSize,collectTime:n.collectTime,summaries:n.summaries}}try{let n=this.getCachePath(r),i=await v.readFile(n,`utf-8`),a=JSON.parse(i);return this.isExpired(a)?(e.debug(`Cache expired: ${t}`),await v.unlink(n),null):(this.memoryCache.set(r,a),e.debug(`Cache hit (disk): ${t}`),{files:a.files,dependencies:this.getDependenciesOrEmpty(a.dependencies),totalSize:a.totalSize,collectTime:a.collectTime,summaries:a.summaries})}catch(n){return e.warn(`Cache read failed for ${t}: ${n instanceof Error?n.message:String(n)}`),null}}async set(n,r,i){let a=this.generateKey(n,i),o=g.createHash(`md5`).update(JSON.stringify(r.files)).digest(`hex`),s={url:n,files:r.files,dependencies:r.dependencies,totalSize:r.totalSize,collectTime:r.collectTime,summaries:r.summaries,timestamp:Date.now(),hash:o};if(this.memoryCache.set(a,s),this.memoryCache.size>this.MAX_MEMORY_CACHE_SIZE){let t=this.memoryCache.keys().next().value;t&&(this.memoryCache.delete(t),e.debug(`Memory cache evicted: ${t}`))}try{let t=this.getCachePath(a);await v.mkdir(this.cacheDir,{recursive:!0}),await v.writeFile(t,JSON.stringify(s,null,2),`utf-8`),e.debug(`Cache saved: ${n} (${(r.totalSize/1024).toFixed(2)} KB)`)}catch(t){e.error(`Failed to save cache:`,t)}++this.writesSinceCleanup>=t.CLEANUP_INTERVAL&&(this.writesSinceCleanup=0,this.cleanup())}async cleanup(){try{let t=await v.readdir(this.cacheDir),n=0,r=[];for(let e of t){if(!e.endsWith(`.json`))continue;let t=m.join(this.cacheDir,e),i=await v.stat(t);n+=i.size,r.push({file:t,mtime:i.mtime,size:i.size})}if(n>this.maxSize){r.sort((e,t)=>e.mtime.getTime()-t.mtime.getTime());let t=0;for(let i of r){if(n-t<=this.maxSize*.8)break;await v.unlink(i.file),t+=i.size,e.debug(`Removed old cache: ${i.file}`)}e.info(`Cache cleanup: removed ${t} bytes`)}}catch(t){e.error(`Failed to cleanup cache:`,t)}}async clear(){try{this.memoryCache.clear();let t=await v.readdir(this.cacheDir);for(let e of t)e.endsWith(`.json`)&&await v.unlink(m.join(this.cacheDir,e));e.info(`All cache cleared`)}catch(t){if(t.code===`ENOENT`)return;e.error(`Failed to clear cache:`,t)}}async getStats(){try{let e=await v.readdir(this.cacheDir),t=0,n=0;for(let r of e){if(!r.endsWith(`.json`))continue;let e=m.join(this.cacheDir,r),i=await v.stat(e);t+=i.size,n++}return{memoryEntries:this.memoryCache.size,diskEntries:n,totalSize:t}}catch(t){return e.error(`Failed to get cache stats:`,t),{memoryEntries:this.memoryCache.size,diskEntries:0,totalSize:0}}}async warmup(t){e.info(`Warming up cache for ${t.length} URLs...`);for(let e of t)await this.get(e);e.info(`Cache warmup completed`)}},re=class{DEFAULT_MAX_TOTAL_SIZE=512*1024;DEFAULT_MAX_FILE_SIZE=100*1024;PREVIEW_LINES=50;async smartCollect(t,n,r){switch(e.info(`Smart code collection mode: ${r.mode}`),r.mode){case`summary`:return this.collectSummaries(n);case`priority`:return this.collectByPriority(n,r);case`incremental`:return this.collectIncremental(n,r);default:return this.collectWithLimit(n,r)}}async collectSummaries(t){return e.info(`Generating code summaries...`),t.map(e=>{let t=e.content.split(`
2
+ `).slice(0,this.PREVIEW_LINES).join(`
3
+ `);return{url:e.url,size:e.size,type:e.type,hasEncryption:this.detectEncryption(e.content),hasAPI:this.detectAPI(e.content),hasObfuscation:this.detectObfuscation(e.content),functions:this.extractFunctions(e.content),imports:this.extractImports(e.content),preview:t}})}collectByPriority(t,n){let r=n.maxTotalSize||this.DEFAULT_MAX_TOTAL_SIZE,i=n.maxFileSize||this.DEFAULT_MAX_FILE_SIZE,a=t.map(e=>({file:e,score:this.calculatePriority(e,n.priorities||[])}));a.sort((e,t)=>t.score-e.score);let o=[],s=0;for(let{file:t}of a){let a=t.content,c=!1;if(t.size>i&&(a=a.substring(0,i),c=!0),s+a.length>r){e.warn(`Reached max total size limit (${r} bytes), stopping collection`);break}o.push({...t,content:a,size:a.length,metadata:{...t.metadata,truncated:c,originalSize:t.size,priorityScore:this.calculatePriority(t,n.priorities||[])}}),s+=a.length}return e.info(`Collected ${o.length}/${t.length} files by priority (${(s/1024).toFixed(2)} KB)`),o}collectIncremental(t,n){let r=n.includePatterns||[],i=n.excludePatterns||[],a=t.filter(e=>i.some(t=>new RegExp(t).test(e.url))?!1:r.length===0?!0:r.some(t=>new RegExp(t).test(e.url)));return e.info(`Incremental collection: ${a.length}/${t.length} files matched`),this.collectWithLimit(a,n)}collectWithLimit(t,n){let r=n.maxTotalSize||this.DEFAULT_MAX_TOTAL_SIZE,i=n.maxFileSize||this.DEFAULT_MAX_FILE_SIZE,a=[],o=0;for(let n of t){let s=n.content,c=!1;if(n.size>i&&(s=s.substring(0,i),c=!0),o+s.length>r){e.warn(`Reached max total size limit, collected ${a.length}/${t.length} files`);break}a.push({...n,content:s,size:s.length,metadata:{...n.metadata,truncated:c,originalSize:n.size}}),o+=s.length}return a}calculatePriority(e,t){let n=0;e.type===`inline`&&(n+=10),e.type===`external`&&(n+=5);for(let r=0;r<t.length;r++){let i=t[r];i&&new RegExp(i).test(e.url)&&(n+=(t.length-r)*20)}return this.detectEncryption(e.content)&&(n+=50),this.detectAPI(e.content)&&(n+=30),this.detectObfuscation(e.content)&&(n+=20),e.size<10*1024?n+=10:e.size>500*1024&&(n-=20),n}detectEncryption(e){return[/crypto|encrypt|decrypt|cipher|aes|rsa|md5|sha/i,/CryptoJS|forge|sjcl/i,/btoa|atob/i].some(t=>t.test(e))}detectAPI(e){return[/fetch\s*\(/,/XMLHttpRequest/,/axios|request|ajax/i,/\.get\(|\.post\(/].some(t=>t.test(e))}detectObfuscation(e){let t=e.split(`
4
+ `);return!!(e.length/t.length>200||/\\x[0-9a-f]{2}/i.test(e)||/\\u[0-9a-f]{4}/i.test(e)||/eval\s*\(/i.test(e))}extractFunctions(e){let t=[];for(let n of[/function\s+([a-zA-Z_$][a-zA-Z0-9_$]*)/g,/const\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\s*=\s*function/g,/([a-zA-Z_$][a-zA-Z0-9_$]*)\s*:\s*function/g]){let r;for(;(r=n.exec(e))!==null;)r[1]&&!t.includes(r[1])&&t.push(r[1])}return t.slice(0,20)}extractImports(e){let t=[];for(let n of[/import\s+.*?from\s+['"]([^'"]+)['"]/g,/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g]){let r;for(;(r=n.exec(e))!==null;)r[1]&&!t.includes(r[1])&&t.push(r[1])}return t}};const ie=_(y),ae=_(ne);var oe=class{DEFAULT_LEVEL=6;DEFAULT_CHUNK_SIZE=100*1024;DEFAULT_CONCURRENCY=5;DEFAULT_MAX_RETRIES=3;CACHE_MAX_SIZE=100;CACHE_TTL=3600*1e3;cache=new Map;stats={totalCompressed:0,totalOriginalSize:0,totalCompressedSize:0,averageRatio:0,cacheHits:0,cacheMisses:0,totalTime:0};async compress(t,n={}){let r=Date.now(),i=n.level??this.DEFAULT_LEVEL,a=n.useCache??!0,o=n.maxRetries??this.DEFAULT_MAX_RETRIES,s=this.generateCacheKey(t,i);if(a&&this.cache.has(s)){let n=this.cache.get(s);if(Date.now()-n.timestamp<this.CACHE_TTL)return this.stats.cacheHits++,e.debug(`Cache hit for compression (${t.length} bytes)`),{compressed:n.compressed,originalSize:n.originalSize,compressedSize:n.compressedSize,compressionRatio:n.compressionRatio,level:i};this.cache.delete(s)}this.stats.cacheMisses++;let c=null;for(let n=0;n<o;n++)try{let n=Buffer.from(t,`utf-8`),o=await ie(n,{level:i}),c=o.toString(`base64`),l=n.length,u=o.length,d=(1-u/l)*100,f=Date.now()-r;this.stats.totalCompressed++,this.stats.totalOriginalSize+=l,this.stats.totalCompressedSize+=u,this.stats.averageRatio=(1-this.stats.totalCompressedSize/this.stats.totalOriginalSize)*100,this.stats.totalTime+=f;let p={compressed:c,originalSize:l,compressedSize:u,compressionRatio:d,level:i,metadata:{hash:s,timestamp:Date.now(),compressionTime:f}};return a&&this.addToCache(s,{compressed:c,originalSize:l,compressedSize:u,compressionRatio:d,timestamp:Date.now()}),e.debug(`Compressed code: ${l} -> ${u} bytes (${d.toFixed(1)}% reduction, level ${i}, ${f}ms)`),p}catch(t){c=t,e.warn(`Compression attempt ${n+1}/${o} failed:`,t),n<o-1&&await new Promise(e=>setTimeout(e,100*(n+1)))}throw e.error(`Failed to compress code after retries:`,c),c||Error(`Compression failed`)}async decompress(t,n=3){let r=null;for(let i=0;i<n;i++)try{return(await ae(Buffer.from(t,`base64`))).toString(`utf-8`)}catch(t){r=t,e.warn(`Decompression attempt ${i+1}/${n} failed:`,t),i<n-1&&await new Promise(e=>setTimeout(e,100*(i+1)))}throw e.error(`Failed to decompress code after retries:`,r),r||Error(`Decompression failed`)}async compressBatch(t,n={}){let r=n.concurrency??this.DEFAULT_CONCURRENCY,i=[];for(let a=0;a<t.length;a+=r){let o=t.slice(a,a+r),s=await Promise.all(o.map(async t=>{try{let e=await this.compress(t.content,n);return n.onFileProgress&&n.onFileProgress(t.url,100),{url:t.url,compressed:e.compressed,originalSize:e.originalSize,compressedSize:e.compressedSize,compressionRatio:e.compressionRatio}}catch(n){return e.error(`Failed to compress ${t.url}:`,n),{url:t.url,compressed:Buffer.from(t.content).toString(`base64`),originalSize:t.content.length,compressedSize:t.content.length,compressionRatio:0}}}));i.push(...s),n.onProgress&&n.onProgress(i.length/t.length*100)}let a=i.reduce((e,t)=>e+t.originalSize,0),o=i.reduce((e,t)=>e+t.compressedSize,0),s=a>0?(1-o/a)*100:0;return e.info(`Batch compression: ${i.length} files, ${(a/1024).toFixed(2)} KB -> ${(o/1024).toFixed(2)} KB (${s.toFixed(1)}% reduction)`),i}shouldCompress(e,t=1024){return e.length>t}selectCompressionLevel(e){return e<10*1024?1:e<100*1024?6:e<1024*1024?9:6}async compressStream(t,n={}){let r=n.chunkSize??this.DEFAULT_CHUNK_SIZE;if(t.length<=r)return this.compress(t,n);let i=Date.now(),a=[];for(let e=0;e<t.length;e+=r){let i=t.substring(e,e+r),o=await this.compress(i,{...n,useCache:!1});a.push(o.compressed),n.onProgress&&n.onProgress(e/t.length*100)}let o=JSON.stringify(a),s=Buffer.from(o).toString(`base64`),c=t.length,l=s.length,u=(1-l/c)*100,d=Date.now()-i;return e.info(`Stream compression: ${a.length} chunks, ${(c/1024).toFixed(2)} KB -> ${(l/1024).toFixed(2)} KB (${u.toFixed(1)}% reduction, ${d}ms)`),{compressed:s,originalSize:c,compressedSize:l,compressionRatio:u,chunks:a.length,metadata:{hash:this.generateCacheKey(t,n.level??this.DEFAULT_LEVEL),timestamp:Date.now(),compressionTime:d}}}getStats(){return{...this.stats}}resetStats(){this.stats={totalCompressed:0,totalOriginalSize:0,totalCompressedSize:0,averageRatio:0,cacheHits:0,cacheMisses:0,totalTime:0}}clearCache(){this.cache.clear(),e.info(`Compression cache cleared`)}getCacheSize(){return this.cache.size}generateCacheKey(e,t){return`${ee(`md5`).update(e).digest(`hex`)}-${t}`}addToCache(e,t){if(this.cache.size>=this.CACHE_MAX_SIZE){let e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(e,t)}};const S=new Set([`page`,`iframe`]),C=[`page`,`iframe`];function w(e,t){return!t||t.length===0?S.has(e):t.includes(e)}function se(e,t){return w(e.type,t.targetTypes)}function ce(e,t){return!(t.type&&e.type!==t.type||t.types?.length&&!t.types.includes(e.type)||t.targetId&&e.targetId!==t.targetId||t.attachedOnly&&!e.attached||t.urlPattern&&!e.url.includes(t.urlPattern)||t.titlePattern&&!e.title.includes(t.titlePattern))}function T(e){let t=typeof e.targetId==`string`?e.targetId:null,n=typeof e.type==`string`?e.type:null,r=typeof e.title==`string`?e.title:``,i=typeof e.url==`string`?e.url:``;return!t||!n?null:{targetId:t,type:n,title:r,url:i,attached:!!e.attached,openerId:typeof e.openerId==`string`?e.openerId:void 0,canAccessOpener:typeof e.canAccessOpener==`boolean`?e.canAccessOpener:void 0,openerFrameId:typeof e.openerFrameId==`string`?e.openerFrameId:void 0,browserContextId:typeof e.browserContextId==`string`?e.browserContextId:void 0,subtype:typeof e.subtype==`string`?e.subtype:void 0}}function E(e){if(!e||typeof e!=`object`)return null;let t=e.sessionId;return typeof t==`string`&&t.length>0?t:null}function D(e){if(!e||typeof e!=`object`)return null;let t=e.sessionId;return typeof t==`string`&&t.length>0?t:null}function O(e){if(!e||typeof e!=`object`)return null;let t=e.targetInfo;return t&&typeof t==`object`?t:null}var k=class{getBrowser;browserSession=null;attachedTargetSession=null;attachedTargetInfo=null;attachedTargetBorrowedFromManaged=!1;autoAttachEnabled=!1;targetListenersBound=!1;aggregatedNetworkEnabled=!1;managedSessions=new Map;targetIdToSessionId=new Map;persistentScripts=new Map;persistentScriptCounter=0;browserSessionListeners={};constructor(e){this.getBrowser=e}async listTargets(e={}){let t=await this.ensureBrowserSession();e.discoverOOPIF!==!1&&await this.ensureAutoAttachEnabled(t);let n=await t.send(`Target.getTargets`),r=new Set(this.targetIdToSessionId.keys());return this.attachedTargetInfo?.targetId&&r.add(this.attachedTargetInfo.targetId),(Array.isArray(n.targetInfos)?n.targetInfos.map(e=>this.normalizeTargetInfo(e)).filter(e=>e!==null).map(e=>({...e,attached:e.attached||r.has(e.targetId)})):[]).filter(t=>this.matchesFilters(t,e))}async attach(e){let t=this.attachedTargetInfo;if(t?.targetId===e&&this.attachedTargetSession)return t;let n=(await this.listTargets()).find(t=>t.targetId===e);if(!n)throw Error(`CDP target not found: ${e}`);await this.detach();let r=this.getManagedSessionByTargetId(e);if(r)return this.attachedTargetSession=r.session,this.attachedTargetInfo=r.targetInfo,this.attachedTargetBorrowedFromManaged=!0,r.targetInfo;let i=await this.ensureBrowserSession();this.attachedTargetSession=await u(i,e),this.attachedTargetInfo=n,this.attachedTargetBorrowedFromManaged=!1;let a=this.attachedTargetSession.id?.();return a&&(this.managedSessions.set(a,{sessionId:a,session:this.attachedTargetSession,targetInfo:n,networkMonitor:null,managedByAutoAttach:!1,appliedPersistentScripts:new Map}),this.targetIdToSessionId.set(n.targetId,a),this.aggregatedNetworkEnabled&&this.shouldManageTargetType(n.type)&&await this.ensureSessionNetworkMonitor(this.managedSessions.get(a)),await this.applyPersistentScriptsToEntry(this.managedSessions.get(a))),n}async detach(){if(!this.attachedTargetSession)return this.attachedTargetInfo=null,this.attachedTargetBorrowedFromManaged=!1,!1;let e=this.attachedTargetSession,t=this.attachedTargetInfo;if(this.attachedTargetBorrowedFromManaged)return this.attachedTargetSession=null,this.attachedTargetInfo=null,this.attachedTargetBorrowedFromManaged=!1,!0;if(!this.browserSession)throw Error(`Browser CDP session unavailable for target detach`);await l(this.browserSession,e),this.attachedTargetSession=null,this.attachedTargetInfo=null,this.attachedTargetBorrowedFromManaged=!1;let n=e.id?.()??(t?.targetId?this.targetIdToSessionId.get(t.targetId)??null:null);if(n){let e=this.managedSessions.get(n);e&&!e.managedByAutoAttach&&(await this.disableEntryNetworkMonitor(e),this.managedSessions.delete(n))}return t?.targetId&&this.targetIdToSessionId.delete(t.targetId),!0}getAttachedTargetSession(){return this.attachedTargetSession}getAttachedTargetInfo(){return this.attachedTargetInfo}async evaluate(e,t={}){let n=await this.requireAttachedTargetSession().send(`Runtime.evaluate`,{expression:e,returnByValue:t.returnByValue??!0,awaitPromise:t.awaitPromise??!0});if(n.exceptionDetails){let e=n.exceptionDetails;throw Error(e.exception?.description||e.text||`Runtime.evaluate failed in attached target`)}return t.returnByValue===!1?n.result??null:n.result?.value??null}async captureScreenshot(e){let t=this.requireAttachedTargetSession();try{await t.send(`Page.enable`,{})}catch{}let n={format:e?.format??`png`};e?.quality!==void 0&&(n.quality=e.quality),e?.clip&&(n.clip={x:e.clip.x,y:e.clip.y,width:e.clip.width,height:e.clip.height,scale:1});let r=await Promise.race([t.send(`Page.captureScreenshot`,n),new Promise((e,t)=>setTimeout(()=>t(Error(`Page.captureScreenshot timed out after 30s`)),3e4))]);if(!r?.data)throw Error(`Page.captureScreenshot returned no data`);return Buffer.from(r.data,`base64`)}async addScriptToEvaluateOnNewDocument(e){return this.registerPersistentScript(e,{evaluateNow:!0,targetTypes:C})}async registerPersistentScript(t,n){let r=n?.id??`managed-script-${++this.persistentScriptCounter}`,i={id:r,source:t,targetTypes:n?.targetTypes?.length?[...n.targetTypes]:void 0};this.persistentScripts.set(r,i);let a=await this.ensureBrowserSession();await this.ensureAutoAttachEnabled(a),await this.bootstrapManagedTargets({targetTypes:i.targetTypes});let o=0;for(let r of this.managedSessions.values())this.matchesScriptTarget(r.targetInfo,i)&&(await this.applyPersistentScriptToEntry(r,i),n?.evaluateNow&&await this.evaluateExpressionInEntry(r,t).catch(t=>{e.debug(`[BrowserTargetSessionManager] Immediate script evaluate failed for ${r.targetInfo.targetId}: ${t instanceof Error?t.message:String(t)}`)}),o+=1);return{identifier:r,appliedTargets:o}}async evaluateInManagedTargets(t,n){let r=await this.ensureBrowserSession();await this.ensureAutoAttachEnabled(r);let i=0;for(let r of this.managedSessions.values())this.matchesTargetTypes(r.targetInfo.type,n?.targetTypes)&&(await this.evaluateExpressionInEntry(r,t).catch(t=>{e.debug(`[BrowserTargetSessionManager] evaluateInManagedTargets failed for ${r.targetInfo.targetId}: ${t instanceof Error?t.message:String(t)}`)}),i+=1);return i}async enable(){let e=await this.ensureBrowserSession();await this.ensureAutoAttachEnabled(e),await this.bootstrapManagedTargets(),this.aggregatedNetworkEnabled=!0;for(let e of this.managedSessions.values())this.shouldManageTargetType(e.targetInfo.type)&&await this.ensureSessionNetworkMonitor(e)}async disable(){this.aggregatedNetworkEnabled=!1;for(let e of this.managedSessions.values())await this.disableEntryNetworkMonitor(e)}isEnabled(){return this.aggregatedNetworkEnabled}getStatus(){let e=0,t=0,n=this.targetListenersBound?3:0;for(let r of this.managedSessions.values()){if(!r.networkMonitor)continue;let i=r.networkMonitor.getStatus();e+=i.requestCount,t+=i.responseCount,n+=i.listenerCount}return{enabled:this.aggregatedNetworkEnabled,requestCount:e,responseCount:t,listenerCount:n,cdpSessionActive:this.browserSession!==null}}getRequests(e){let t=Array.from(this.managedSessions.values()).flatMap(e=>e.networkMonitor?.getRequests()??[]);t.sort((e,t)=>(e.timestamp??0)-(t.timestamp??0));let n=e?.url;typeof n==`string`&&n.length>0&&(t=t.filter(e=>e.url.includes(n)));let r=e?.method;return typeof r==`string`&&r.length>0&&(t=t.filter(e=>e.method===r)),typeof e?.limit==`number`&&Number.isFinite(e.limit)&&(t=t.slice(-e.limit)),t}getResponses(e){let t=Array.from(this.managedSessions.values()).flatMap(e=>e.networkMonitor?.getResponses()??[]);t.sort((e,t)=>(e.timestamp??0)-(t.timestamp??0));let n=e?.url;return typeof n==`string`&&n.length>0&&(t=t.filter(e=>e.url.includes(n))),typeof e?.status==`number`&&(t=t.filter(t=>t.status===e.status)),typeof e?.limit==`number`&&Number.isFinite(e.limit)&&(t=t.slice(-e.limit)),t}getActivity(e){for(let t of this.managedSessions.values()){if(!t.networkMonitor)continue;let n=t.networkMonitor.getActivity(e);if(n.request||n.response)return n}return{}}async getResponseBody(e){for(let t of this.managedSessions.values()){if(!t.networkMonitor)continue;let n=t.networkMonitor.getActivity(e);if(!(!n.request&&!n.response))return t.networkMonitor.getResponseBody(e)}return null}async getAllJavaScriptResponses(){return(await Promise.all(Array.from(this.managedSessions.values()).map(async e=>e.networkMonitor?await e.networkMonitor.getAllJavaScriptResponses():[]))).flat()}clearRecords(){for(let e of this.managedSessions.values())e.networkMonitor?.clearRecords()}async clearInjectedBuffers(){let e=0,t=0;for(let n of this.managedSessions.values()){if(!n.networkMonitor)continue;let r=await n.networkMonitor.clearInjectedBuffers();e+=r.xhrCleared,t+=r.fetchCleared}return{xhrCleared:e,fetchCleared:t}}async resetInjectedInterceptors(){let e=!1,t=!1;for(let n of this.managedSessions.values()){if(!n.networkMonitor)continue;let r=await n.networkMonitor.resetInjectedInterceptors();e||=r.xhrReset,t||=r.fetchReset}return{xhrReset:e,fetchReset:t}}getStats(){let e={},t={},n={},r=0,i=0;for(let a of this.managedSessions.values()){let o=a.networkMonitor?.getStats();if(o){r+=o.totalRequests,i+=o.totalResponses;for(let[t,n]of Object.entries(o.byMethod))e[t]=(e[t]||0)+n;for(let[e,n]of Object.entries(o.byStatus))t[e]=(t[e]||0)+n;for(let[e,t]of Object.entries(o.byType))n[e]=(n[e]||0)+t}}return{totalRequests:r,totalResponses:i,byMethod:e,byStatus:t,byType:n}}async injectXHRInterceptor(t){let n=o(500);if(t?.persistent){await this.registerPersistentScript(n,{id:`network-xhr-interceptor`,evaluateNow:!0,targetTypes:C}),e.info(`XHR interceptor injected (persistent)`);return}await this.evaluateInManagedTargets(n,{targetTypes:C}),e.info(`XHR interceptor injected`)}async injectFetchInterceptor(t){let n=a(500);if(t?.persistent){await this.registerPersistentScript(n,{id:`network-fetch-interceptor`,evaluateNow:!0,targetTypes:C}),e.info(`Fetch interceptor injected (persistent)`);return}await this.evaluateInManagedTargets(n,{targetTypes:C}),e.info(`Fetch interceptor injected`)}async getXHRRequests(){return(await Promise.all(Array.from(this.managedSessions.values()).map(e=>this.getEntryInjectedRequests(e,`xhr`)))).flat()}async getFetchRequests(){return(await Promise.all(Array.from(this.managedSessions.values()).map(e=>this.getEntryInjectedRequests(e,`fetch`)))).flat()}persistsAcrossContextSwitches(){return this.aggregatedNetworkEnabled}async dispose(){try{if(await this.detach(),await this.disable(),this.persistentScripts.clear(),this.browserSession){this.unbindBrowserSessionListeners(this.browserSession);try{await this.browserSession.detach()}catch{}}}finally{this.managedSessions.clear(),this.targetIdToSessionId.clear(),this.browserSession=null,this.autoAttachEnabled=!1,this.targetListenersBound=!1}}requireAttachedTargetSession(){if(!this.attachedTargetSession)throw Error(`No CDP target is currently attached`);return this.attachedTargetSession}async ensureBrowserSession(){if(this.browserSession)return this.browserSession;let e=this.getBrowser();if(!e)throw Error(`Browser not connected`);return this.browserSession=await e.target().createCDPSession(),this.browserSession}async ensureAutoAttachEnabled(e){if(this.targetListenersBound||this.bindBrowserSessionListeners(e),!this.autoAttachEnabled)try{await e.send(`Target.setAutoAttach`,{autoAttach:!0,waitForDebuggerOnStart:!1,flatten:!0}),await e.send(`Target.setDiscoverTargets`,{discover:!0}),this.autoAttachEnabled=!0}catch{}}bindBrowserSessionListeners(e){this.targetListenersBound||=(this.browserSessionListeners.attachedToTarget=e=>{this.handleAttachedToTarget(e)},this.browserSessionListeners.detachedFromTarget=e=>{this.handleDetachedFromTarget(e)},this.browserSessionListeners.targetInfoChanged=e=>{this.handleTargetInfoChanged(e)},e.on(`Target.attachedToTarget`,this.browserSessionListeners.attachedToTarget),e.on(`Target.detachedFromTarget`,this.browserSessionListeners.detachedFromTarget),e.on(`Target.targetInfoChanged`,this.browserSessionListeners.targetInfoChanged),!0)}unbindBrowserSessionListeners(e){this.targetListenersBound&&=(this.browserSessionListeners.attachedToTarget&&e.off(`Target.attachedToTarget`,this.browserSessionListeners.attachedToTarget),this.browserSessionListeners.detachedFromTarget&&e.off(`Target.detachedFromTarget`,this.browserSessionListeners.detachedFromTarget),this.browserSessionListeners.targetInfoChanged&&e.off(`Target.targetInfoChanged`,this.browserSessionListeners.targetInfoChanged),this.browserSessionListeners={},!1)}async handleAttachedToTarget(t){let n=this.readAttachedSessionId(t),r=this.readTargetInfoRecord(t),i=r?this.normalizeTargetInfo(r):null;if(!n||!i||!this.shouldManageTargetType(i.type))return;let a=this.browserSession,o=await this.lookupChildSession(a,n);if(!o){e.debug(`[BrowserTargetSessionManager] Auto-attached child session ${n} unavailable for ${i.targetId}`);return}let s=this.managedSessions.get(n);if(s){s.targetInfo=i,this.targetIdToSessionId.set(i.targetId,n),this.attachedTargetInfo?.targetId===i.targetId&&this.attachedTargetBorrowedFromManaged&&(this.attachedTargetInfo=i);return}let c=this.targetIdToSessionId.get(i.targetId);if(c&&c!==n){let e=this.managedSessions.get(c);e&&!e.managedByAutoAttach&&(await this.disableEntryNetworkMonitor(e),this.managedSessions.delete(c))}let l={sessionId:n,session:o,targetInfo:i,networkMonitor:null,managedByAutoAttach:!0,appliedPersistentScripts:new Map};this.managedSessions.set(n,l),this.targetIdToSessionId.set(i.targetId,n),this.aggregatedNetworkEnabled&&await this.ensureSessionNetworkMonitor(l),await this.applyPersistentScriptsToEntry(l),!this.attachedTargetSession&&this.attachedTargetInfo?.targetId===i.targetId&&(this.attachedTargetSession=o,this.attachedTargetBorrowedFromManaged=!0)}async bootstrapManagedTargets(e){let t=await this.listTargets({discoverOOPIF:!1});for(let n of t)this.shouldManageTargetType(n.type)&&this.matchesTargetTypes(n.type,e?.targetTypes)&&await this.ensureManagedTargetSession(n)}async ensureManagedTargetSession(e){if(this.getManagedSessionByTargetId(e.targetId))return;let t=await u(await this.ensureBrowserSession(),e.targetId),n=t.id?.();if(!n)throw Error(`Managed target session id unavailable for ${e.targetId}`);let r=this.managedSessions.get(n);if(r){r.targetInfo=e,this.targetIdToSessionId.set(e.targetId,n);return}let i={sessionId:n,session:t,targetInfo:e,networkMonitor:null,managedByAutoAttach:!1,appliedPersistentScripts:new Map};this.managedSessions.set(n,i),this.targetIdToSessionId.set(e.targetId,n),this.aggregatedNetworkEnabled&&await this.ensureSessionNetworkMonitor(i)}async handleDetachedFromTarget(e){let t=this.readDetachedSessionId(e)??this.readAttachedSessionId(e)??null;if(!t)return;let n=this.managedSessions.get(t);n&&(await this.disableEntryNetworkMonitor(n),this.managedSessions.delete(t),this.targetIdToSessionId.get(n.targetInfo.targetId)===t&&this.targetIdToSessionId.delete(n.targetInfo.targetId),this.attachedTargetSession===n.session&&this.attachedTargetBorrowedFromManaged&&(this.attachedTargetSession=null,this.attachedTargetInfo=null,this.attachedTargetBorrowedFromManaged=!1))}handleTargetInfoChanged(e){let t=this.readTargetInfoRecord(e),n=t?this.normalizeTargetInfo(t):null;if(!n)return;let r=this.targetIdToSessionId.get(n.targetId);if(r){let e=this.managedSessions.get(r);e&&(e.targetInfo=n)}this.attachedTargetInfo?.targetId===n.targetId&&(this.attachedTargetInfo=n)}async ensureSessionNetworkMonitor(e){e.networkMonitor||!this.aggregatedNetworkEnabled||(e.networkMonitor=new s(e.session,{sessionId:e.sessionId,targetId:e.targetInfo.targetId,targetType:e.targetInfo.type,requestIdPrefix:e.targetInfo.targetId}),await e.networkMonitor.enable())}async disableEntryNetworkMonitor(t){if(t.networkMonitor)try{await t.networkMonitor.disable()}catch(n){e.debug(`[BrowserTargetSessionManager] Failed to disable network monitor for ${t.targetInfo.targetId}: ${n instanceof Error?n.message:String(n)}`)}finally{t.networkMonitor=null}}async applyPersistentScriptsToEntry(e){for(let t of this.persistentScripts.values())this.matchesScriptTarget(e.targetInfo,t)&&await this.applyPersistentScriptToEntry(e,t)}async applyPersistentScriptToEntry(t,n){if(t.appliedPersistentScripts.get(n.id)!==n.source)try{await t.session.send(`Page.addScriptToEvaluateOnNewDocument`,{source:n.source}),t.appliedPersistentScripts.set(n.id,n.source)}catch(r){e.debug(`[BrowserTargetSessionManager] Failed to register preload script ${n.id} on ${t.targetInfo.targetId}: ${r instanceof Error?r.message:String(r)}`)}}async evaluateExpressionInEntry(e,t){await e.session.send(`Runtime.evaluate`,{expression:t,returnByValue:!1,awaitPromise:!0})}async getEntryInjectedRequests(e,t){return e.networkMonitor?(t===`xhr`?await e.networkMonitor.getXHRRequests():await e.networkMonitor.getFetchRequests()).map((n,r)=>({...n,sessionId:e.sessionId,targetId:e.targetInfo.targetId,targetType:e.targetInfo.type,requestId:typeof n.requestId==`string`&&n.requestId.length>0?n.requestId:`${e.targetInfo.targetId}:${t}-injected-${r}`})):[]}getManagedSessionByTargetId(e){let t=this.targetIdToSessionId.get(e);return t?this.managedSessions.get(t)??null:null}async lookupChildSession(e,t){for(let n=0;n<5;n+=1){let r=e?.connection?.()?.session(t)??null;if(r)return r;n<4&&await this.delay(25)}return null}async delay(e){await new Promise(t=>{setTimeout(t,e)})}shouldManageTargetType(e){return S.has(e)}matchesScriptTarget(e,t){return se(e,t)}matchesTargetTypes(e,t){return w(e,t)}matchesFilters(e,t){return ce(e,t)}normalizeTargetInfo(e){return T(e)}readAttachedSessionId(e){return E(e)}readDetachedSessionId(e){return D(e)}readTargetInfoRecord(e){return O(e)}};const A=[`CHROME_PATH`,`PUPPETEER_EXECUTABLE_PATH`,`BROWSER_EXECUTABLE_PATH`];let j=null;function M(){for(let e of A){let t=process.env[e]?.trim();if(t&&p(t))return t}}let N=null;async function P(){try{N||=(await import(`rebrowser-puppeteer-core`)).executablePath;let e=N(`chrome`);if(e&&p(e))return e}catch{}}function F(){if(j!==null){if(!j||p(j))return j;j=null}return j=M(),j??void 0}async function I(){return F()||(j=await P()??void 0,j||=void 0,j)}async function L(e){await e.evaluateOnNewDocument(()=>{let e=window,t=e.Worker;if(typeof t!=`function`)return;let n=Array.isArray(e.__workerUrls)?e.__workerUrls:[];e.Worker=new Proxy(t,{construct(t,r,i){let a=Reflect.construct(t,r,i),[o]=r;return typeof o==`string`?(n.push(o),e.__workerUrls=n):o instanceof URL&&(n.push(o.toString()),e.__workerUrls=n),a}})})}async function R(t,n,r){let i=await t.evaluate(e=>Array.from(document.querySelectorAll(`script`)).filter(e=>!e.src&&e.textContent).map((t,n)=>{let r=t.textContent||``,i=r.length,a=!1;return r.length>e&&(r=r.substring(0,e),a=!0),{url:`inline-script-${n}`,content:r,size:r.length,type:`inline`,metadata:{scriptType:t.type||`text/javascript`,async:t.async,defer:t.defer,integrity:t.integrity||void 0,truncated:a,originalSize:a?i:void 0}}}),n),a=i.slice(0,r);i.length>a.length&&e.warn(`Found ${i.length} inline scripts, limiting to ${r}`);let o=a.filter(e=>e.metadata?.truncated).length;return o>0&&e.warn(`${o} inline scripts were truncated due to size limits`),e.debug(`Collected ${a.length} inline scripts`),a}async function z(t,n=()=>!0){try{let r=await t.evaluate(async()=>{if(!(`serviceWorker`in navigator))return[];let e=await navigator.serviceWorker.getRegistrations(),t=[];for(let n of e){let e=n.active||n.installing||n.waiting;e&&e.scriptURL&&t.push({url:e.scriptURL,scope:n.scope,state:e.state})}return t}),i=[];for(let a of r)if(n(a.url))try{let n=await t.evaluate(async e=>await(await fetch(e)).text(),a.url);n&&(i.push({url:a.url,content:n,size:n.length,type:`service-worker`}),e.debug(`Collected Service Worker: ${a.url}`))}catch(t){e.warn(`Failed to collect Service Worker: ${a.url}`,t)}return i}catch(t){return e.warn(`Service Worker collection failed`,t),[]}}async function B(t,n=()=>!0){try{let r=await t.evaluate(()=>{let e=window;return Array.isArray(e.__workerUrls)?e.__workerUrls:[]}),i=[];for(let a of r)try{let r=new URL(a,t.url()).href;if(!n(r))continue;let o=await t.evaluate(async e=>await(await fetch(e)).text(),r);o&&(i.push({url:r,content:o,size:o.length,type:`web-worker`}),e.debug(`Collected Web Worker: ${r}`))}catch(t){e.warn(`Failed to collect Web Worker: ${a}`,t)}return i}catch(t){return e.warn(`Web Worker collection failed`,t),[]}}function V(t){let n=[],r=[];return t.forEach(e=>{n.push({id:e.url,url:e.url,type:e.type})}),t.forEach(e=>{H(e.content).forEach(n=>{let i=t.find(e=>e.url.includes(n)||e.url.endsWith(n)||e.url.endsWith(`${n}.js`));i&&r.push({from:e.url,to:i.url,type:`import`})})}),e.debug(`Dependency graph: ${n.length} nodes, ${r.length} edges`),{nodes:n,edges:r}}function H(e){let t=[],n=/import\s+.*?\s+from\s+['"]([^'"]+)['"]/g,r;for(;(r=n.exec(e))!==null;)r[1]&&t.push(r[1]);let i=/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=i.exec(e))!==null;)r[1]&&t.push(r[1]);let a=/import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;for(;(r=a.exec(e))!==null;)r[1]&&t.push(r[1]);return[...new Set(t)]}function U(e){let t=0;e.type===`inline`?t+=10:e.type===`external`&&(t+=5),e.size<10*1024?t+=15:e.size<50*1024?t+=10:e.size>200*1024&&(t-=10);let n=e.url.toLowerCase();return(n.includes(`main`)||n.includes(`index`)||n.includes(`app`))&&(t+=20),(n.includes(`crypto`)||n.includes(`encrypt`)||n.includes(`sign`))&&(t+=30),(n.includes(`api`)||n.includes(`request`)||n.includes(`ajax`))&&(t+=25),(n.includes(`core`)||n.includes(`common`)||n.includes(`util`))&&(t+=15),(n.includes(`vendor`)||n.includes(`lib`)||n.includes(`jquery`)||n.includes(`react`))&&(t-=20),(n.includes(`node_modules`)||n.includes(`bundle`))&&(t-=30),t}function W(e){return typeof e==`object`&&!!e}function G(e){return W(e)?e:void 0}function le(e){return!W(e)||!W(e.response)?!1:typeof e.response.url==`string`&&typeof e.requestId==`string`}function ue(e){return W(e)?typeof e.url==`string`&&typeof e.size==`number`&&typeof e.type==`string`&&typeof e.hasEncryption==`boolean`&&typeof e.hasAPI==`boolean`&&typeof e.hasObfuscation==`boolean`&&Array.isArray(e.functions)&&Array.isArray(e.imports)&&typeof e.preview==`string`:!1}function de(e){return W(e)?typeof e.url==`string`&&typeof e.content==`string`&&typeof e.size==`number`&&typeof e.type==`string`:!1}function fe(e){if(!W(e)||typeof e.init!=`function`||typeof e.applyAntiDetection!=`function`||typeof e.shouldCollectUrl!=`function`)throw Error(`Invalid collector context`)}async function pe(t,n){fe(t);let r=Date.now();e.info(`Collecting code from: ${n.url}`);let i=G(n);if(t.cacheEnabled){let r=await t.cache.get(n.url,i);if(r)return e.info(` Cache hit for: ${n.url}`),r}if(await t.init(),!t.browser)throw Error(`Browser not initialized`);let a=null,o=(typeof t.listPages==`function`?await t.listPages().catch(()=>[]):[]).length>0&&typeof t.getActivePage==`function`?await t.getActivePage().then(e=>e.browserContext()).catch(t=>(e.debug(`Failed to resolve active browser context before code collection:`,t),null)):null,s=o===null&&typeof t.browser.createBrowserContext==`function`?await t.browser.createBrowserContext():null;if((o!==null||!s)&&typeof t.getActivePageIndex==`function`)try{a=await t.getActivePageIndex()}catch(t){e.debug(`Failed to capture active page index before code collection:`,t)}let l=o===null?s?await s.newPage():await t.browser.newPage():await o.newPage();try{let a=n.timeout??t.config.timeout??3e4;l.setDefaultTimeout(a),await l.setUserAgent(t.userAgent),await t.applyAntiDetection(l),n.includeWebWorker!==!1&&await L(l);let o=[],s=(n,r)=>{let i=t.MAX_FILES_PER_COLLECT-o.length;if(i<=0){e.warn(`Reached max files limit (${t.MAX_FILES_PER_COLLECT}), skipping ${r}`);return}n.length>i&&e.warn(`Collected ${n.length} ${r}, limiting to remaining ${i} files`),o.push(...n.slice(0,i))};t.cdpSession=await l.createCDPSession(),await t.cdpSession.send(`Network.enable`),await t.cdpSession.send(`Runtime.enable`),t.cdpListeners.responseReceived=async r=>{if(!le(r))return;let{response:i,requestId:a,type:c}=r,l=i.url;if(o.length>=t.MAX_FILES_PER_COLLECT){o.length===t.MAX_FILES_PER_COLLECT&&e.warn(`Reached max files limit (${t.MAX_FILES_PER_COLLECT}), will skip remaining files`);return}if(t.cleanupCollectedUrls(),c===`Script`||i.mimeType?.includes(`javascript`)||l.endsWith(`.js`)){if(n.includeExternal===!1||!t.shouldCollectUrl(l,n.filterRules))return;try{let n=await t.cdpSession.send(`Network.getResponseBody`,{requestId:a});if(typeof n.body!=`string`)return;let r=n.base64Encoded?Buffer.from(n.body,`base64`).toString(`utf-8`):n.body,i=r.length,c=r,u=!1;if(i>t.MAX_SINGLE_FILE_SIZE&&(c=r.substring(0,t.MAX_SINGLE_FILE_SIZE),u=!0,e.warn(`[CDP] Large file truncated: ${l} (${(i/1024).toFixed(2)} KB -> ${(t.MAX_SINGLE_FILE_SIZE/1024).toFixed(2)} KB)`)),!t.collectedUrls.has(l)){t.collectedUrls.add(l);let n={url:l,content:c,size:c.length,type:`external`,metadata:u?{truncated:!0,originalSize:i,truncatedSize:c.length}:void 0},r=o.length;s([n],`external scripts`),o.length>r&&(t.collectedFilesCache.set(l,n),e.debug(`[CDP] Collected (${o.length}/${t.MAX_FILES_PER_COLLECT}): ${l} (${(c.length/1024).toFixed(2)} KB)${u?` [TRUNCATED]`:``}`))}}catch(t){e.warn(`[CDP] Failed to get response body for: ${l}`,t)}}},t.cdpSession.on(`Network.responseReceived`,t.cdpListeners.responseReceived),e.info(`Navigating to: ${n.url}`),await l.goto(n.url,{waitUntil:c(),timeout:n.timeout||t.config.timeout}),n.includeInline!==!1&&(e.info(`Collecting inline scripts...`),s(await R(l,t.MAX_SINGLE_FILE_SIZE,t.MAX_FILES_PER_COLLECT),`inline scripts`)),n.includeServiceWorker!==!1&&(e.info(`Collecting Service Workers...`),s(await z(l,e=>t.shouldCollectUrl(e,n.filterRules)),`service workers`)),n.includeWebWorker!==!1&&(e.info(`Collecting Web Workers...`),s(await B(l,e=>t.shouldCollectUrl(e,n.filterRules)),`web workers`)),n.includeDynamic&&(e.info(`Waiting for dynamic scripts...`),await new Promise(e=>setTimeout(e,3e3))),t.cdpSession&&(t.cdpListeners.responseReceived&&t.cdpSession.off(`Network.responseReceived`,t.cdpListeners.responseReceived),await t.cdpSession.detach(),t.cdpSession=null,t.cdpListeners={});let u=Date.now()-r,d=o.filter(e=>e.metadata?.truncated);d.length>0&&(e.warn(`${d.length} files were truncated due to size limits`),d.forEach(t=>{let n=typeof t.metadata?.originalSize==`number`?t.metadata.originalSize:t.size;e.warn(` - ${t.url}: ${(n/1024).toFixed(2)} KB -> ${(t.size/1024).toFixed(2)} KB`)}));let f=o;if(n.smartMode&&n.smartMode!==`full`)try{e.info(` Applying smart collection mode: ${n.smartMode}`);let i={mode:n.smartMode,maxTotalSize:n.maxTotalSize,maxFileSize:n.maxFileSize,priorities:n.priorities},a=await t.smartCollector.smartCollect(l,o,i);if(n.smartMode===`summary`&&(e.info(` Returning ${a.length} code summaries`),Array.isArray(a)&&a.every(e=>ue(e))))return{files:[],summaries:a,dependencies:{nodes:[],edges:[]},totalSize:0,collectTime:Date.now()-r};Array.isArray(a)&&a.every(e=>de(e))?f=a:(e.warn(`Smart collection returned unexpected type, using original files`),f=o)}catch(t){e.error(`Smart collection failed, using original files:`,t),f=o}if(n.compress)try{e.info(`Compressing ${f.length} files with enhanced compressor...`);let n=f.filter(e=>t.compressor.shouldCompress(e.content)).map(e=>({url:e.url,content:e.content}));if(n.length===0)e.info(`No files need compression (all below threshold)`);else{let r=await t.compressor.compressBatch(n,{level:void 0,useCache:!0,maxRetries:3,concurrency:5,onProgress:t=>{t%25==0&&e.debug(`Compression progress: ${t.toFixed(0)}%`)}}),i=new Map(r.map(e=>[e.url,e]));for(let e of f){let t=i.get(e.url);t&&(e.metadata={...e.metadata,compressed:!0,originalSize:t.originalSize,compressedSize:t.compressedSize,compressionRatio:t.compressionRatio})}let a=t.compressor.getStats();e.info(` Compressed ${r.length}/${f.length} files`),e.info(` Compression stats: ${(a.totalOriginalSize/1024).toFixed(2)} KB -> ${(a.totalCompressedSize/1024).toFixed(2)} KB (${a.averageRatio.toFixed(1)}% reduction)`),e.info(` Cache: ${a.cacheHits} hits, ${a.cacheMisses} misses (${a.cacheHits>0?(a.cacheHits/(a.cacheHits+a.cacheMisses)*100).toFixed(1):0}% hit rate)`)}}catch(t){e.error(`Compression failed:`,t)}let p=V(f),m=f.reduce((e,t)=>e+t.size,0);e.success(`Collected ${f.length} files (${(m/1024).toFixed(2)} KB) in ${u}ms`);let h={files:f,dependencies:p,totalSize:m,collectTime:u};return t.cacheEnabled&&(await t.cache.set(n.url,h,i),e.debug(` Saved to cache: ${n.url}`)),h}catch(t){throw e.error(`Code collection failed`,t),t}finally{if(t.cdpSession){try{t.cdpListeners.responseReceived&&t.cdpSession.off(`Network.responseReceived`,t.cdpListeners.responseReceived),await t.cdpSession.detach()}catch{}t.cdpSession=null,t.cdpListeners={}}if(s)try{await s.close()}catch(t){e.debug(`Failed to close temporary browser context after code collection:`,t)}else if(await l.close(),a!==null&&typeof t.selectPage==`function`)try{await t.selectPage(a)}catch(t){e.debug(`Failed to restore active page after code collection:`,t)}}}function me(e,t){if(!t||t.length===0)return!0;for(let n of t)if(d(e,n))return!0;return!1}async function he(t,n,r,i=3){let a=null;for(let o=0;o<i;o++)try{await t.goto(n,r);return}catch(t){a=t,e.warn(`Navigation attempt ${o+1}/${i} failed: ${t}`),o<i-1&&await new Promise(e=>setTimeout(e,1e3*(o+1)))}throw a||Error(`Navigation failed after retries`)}async function ge(t){try{return await t.evaluate(()=>{let e=performance.getEntriesByType(`navigation`)[0];return{domContentLoaded:e.domContentLoadedEventEnd-e.domContentLoadedEventStart,loadComplete:e.loadEventEnd-e.loadEventStart,domInteractive:e.domInteractive-e.fetchStart,totalTime:e.loadEventEnd-e.fetchStart}})}catch(t){return e.warn(`Failed to get performance metrics`,t),{}}}async function _e(t){try{return await t.evaluate(()=>({title:document.title,url:window.location.href,userAgent:navigator.userAgent,viewport:{width:window.innerWidth,height:window.innerHeight},cookies:document.cookie,localStorage:Object.keys(localStorage).length,sessionStorage:Object.keys(sessionStorage).length}))}catch(t){return e.warn(`Failed to collect page metadata`,t),{}}}function ve(e=`stable`){let t=b();if(process.platform===`win32`){let n=process.env.LOCALAPPDATA??h(t,`AppData`,`Local`);switch(e){case`beta`:return h(n,`Google`,`Chrome Beta`,`User Data`);case`dev`:return h(n,`Google`,`Chrome Dev`,`User Data`);case`canary`:return h(n,`Google`,`Chrome SxS`,`User Data`);default:return h(n,`Google`,`Chrome`,`User Data`)}}if(process.platform===`darwin`){let n=h(t,`Library`,`Application Support`);switch(e){case`beta`:return h(n,`Google`,`Chrome Beta`);case`dev`:return h(n,`Google`,`Chrome Dev`);case`canary`:return h(n,`Google`,`Chrome Canary`);default:return h(n,`Google`,`Chrome`)}}let n=process.env.XDG_CONFIG_HOME??h(t,`.config`);switch(e){case`beta`:return h(n,`google-chrome-beta`);case`dev`:return h(n,`google-chrome-unstable`);case`canary`:return h(n,`google-chrome-canary`);default:return h(n,`google-chrome`)}}async function ye(e){let t=e.channel??`stable`,n=h(e.userDataDir??ve(t),`DevToolsActivePort`),r;try{r=await te(n,`utf8`)}catch(e){throw Error(`Could not read DevToolsActivePort from "${n}". Check if Chrome is running from this profile and remote debugging is enabled at chrome://inspect/#remote-debugging.`,{cause:e})}let[i,a]=r.split(/\r?\n/u).map(e=>e.trim()).filter(Boolean);if(!i||!a)throw Error(`Invalid DevToolsActivePort contents found in "${n}".`);let o=Number.parseInt(i,10);if(!Number.isInteger(o)||o<=0||o>65535)throw Error(`Invalid remote debugging port "${i}" in "${n}".`);return`ws://127.0.0.1:${o}${a}`}async function be(e){if(typeof e==`string`){let t=e.trim();if(!t)throw Error(`Connection endpoint cannot be empty.`);return t.startsWith(`ws://`)||t.startsWith(`wss://`)?{browserWSEndpoint:t}:{browserURL:t}}if(e.wsEndpoint)return{browserWSEndpoint:e.wsEndpoint};if(e.browserURL)return{browserURL:e.browserURL};if(e.autoConnect||e.userDataDir||e.channel)return{browserWSEndpoint:await ye(e)};throw Error(`browserURL, wsEndpoint, autoConnect, userDataDir, or channel is required to connect to an existing browser.`)}function K(e){return typeof e!=`string`&&!!(e.autoConnect||e.userDataDir||e.channel)}function q(e){if(e instanceof Error)return e.message;if(typeof e==`object`&&e){let t=`message`in e&&typeof e.message==`string`?e.message.trim():``;if(t)return t;let n=`error`in e?e.error:void 0;if(n instanceof Error&&n.message)return n.message;if(typeof n==`object`&&n){let e=`message`in n&&typeof n.message==`string`?n.message.trim():``;if(e)return e}let r=JSON.stringify(e);if(r&&r!==`{}`)return r}return String(e)}function xe(e,t,n){let r=q(e);return K(n)&&/ECONNREFUSED/i.test(r)?Error(`Failed to connect to existing browser: ${r}. Chrome is not currently listening at ${t}. DevToolsActivePort may be stale after a browser restart. Re-open Chrome, confirm remote debugging is enabled at chrome://inspect/#remote-debugging, click Allow if prompted, and retry.`):e instanceof Error?e:Error(`Failed to connect to existing browser: ${r}`)}function Se(e,t,n){let r=`Timed out after ${n}ms while connecting to existing browser: ${e}. The CDP handshake did not complete in time.`;return K(t)?Error(`${r} If Chrome prompted for remote debugging approval, click Allow in Chrome and then retry the tool call.`):Error(`${r} Verify that the browser debugging endpoint is reachable and retry.`)}function Ce(e){let t=q(e);return/ECONNREFUSED|ENOTFOUND|404|stale/i.test(t)?!1:/timed out|handshake|Protocol error|Target closed|ECONNRESET|socket hang up|WebSocket/i.test(t)}async function we(t,n,r){let i=t.browserWSEndpoint??t.browserURL;if(!i)throw n instanceof Error?n:Error(String(n));e.warn(`[connect-fallback] Rebrowser connect failed. Falling back to Playwright CDP compatibility mode for ${i}.`);try{return await f(i,r)}catch(e){let t=q(n),r=q(e);throw Error(`Failed to connect to existing browser via both rebrowser-puppeteer and Playwright CDP compatibility fallback. Primary error: ${t}. Fallback error: ${r}.`,{cause:e})}}async function Te(e,t,n,r,i){let a=++i.current,{connect:o}=await import(`rebrowser-puppeteer-core`);try{return await new Promise((s,c)=>{let l=!1,u=setTimeout(()=>{l=!0,i.current===a&&(i.current+=1),c(Se(t,n,r))},r);o({...e,defaultViewport:null}).then(async e=>{if(l||i.current!==a){try{await e.disconnect()}catch{}return}l=!0,clearTimeout(u),s(e)}).catch(e=>{l||i.current!==a||(l=!0,clearTimeout(u),c(xe(e,t,n)))})})}catch(t){if(!Ce(t))throw t;return await we(e,t,r)}}function Ee(t){let n=Array.from(t.values()).map(e=>({url:e.url,size:e.size,type:e.type,truncated:typeof e.metadata?.truncated==`boolean`?e.metadata.truncated:void 0,originalSize:typeof e.metadata?.originalSize==`number`?e.metadata.originalSize:void 0}));return e.info(`Returning summary of ${n.length} collected files`),n}function De(t,n){let r=t.get(n);return r?(e.info(`Returning file: ${n} (${(r.size/1024).toFixed(2)} KB)`),r):(e.warn(`File not found: ${n}`),null)}function Oe(t,n,r,i){let a=new RegExp(n),o=[];for(let e of t.values())a.test(e.url)&&o.push(e);let s=[],c=0,l=!1;for(let e=0;e<o.length&&e<r;e++){let t=o[e];if(t&&c+t.size<=i)s.push(t),c+=t.size;else{l=!0;break}}return(l||o.length>r)&&e.warn(`Pattern "${n}" matched ${o.length} files, returning ${s.length} (limited by size/count)`),e.info(` Pattern "${n}": matched ${o.length}, returning ${s.length} files (${(c/1024).toFixed(2)} KB)`),{files:s,totalSize:c,matched:o.length,returned:s.length,truncated:l}}function ke(t,n,r){let i=Array.from(t.values()),a=i.map(e=>({file:e,score:U(e)}));a.sort((e,t)=>t.score-e.score);let o=[],s=0;for(let e=0;e<Math.min(n,a.length);e++){let t=a[e];if(t?.file&&s+t.file.size<=r)o.push(t.file),s+=t.file.size;else break}return e.info(`Returning top ${o.length}/${i.length} priority files (${(s/1024).toFixed(2)} KB)`),{files:o,totalSize:s,totalFiles:i.length}}const Ae=[`--no-sandbox`,`--disable-setuid-sandbox`,`--disable-dev-shm-usage`,`--disable-blink-features=AutomationControlled`,`--disable-extensions`,`--disable-component-extensions-with-background-pages`,`--disable-web-security`,`--disable-features=IsolateOrigins,site-per-process`,`--ignore-certificate-errors`];function J(e){return Array.isArray(e)?e.map(e=>e.trim()).filter(e=>e.length>0):[]}function Y(e){return e.split(/\s+/u).map(e=>e.trim()).filter(e=>e.length>0)}function X(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function je(e,t){let n=[],r=[];for(let t=0;t<e.length;t+=1){let i=e[t];if(i){if(i===`--js-flags`){let n=e[t+1];if(typeof n==`string`){r.push(...Y(n)),t+=1;continue}}if(i.startsWith(`--js-flags=`)){r.push(...Y(i.slice(11)));continue}n.push(i)}}let i=X(r),a=`--allow-natives-syntax`;t!==!1&&!i.includes(a)&&i.push(a);let o=t===!1?i.filter(e=>e!==a):i;return{args:o.length>0?[...X(n),`--js-flags=${o.join(` `)}`]:X(n),v8NativeSyntaxEnabled:o.includes(a)}}function Me(e,t,n,r){let i=je([...J(e.args),...J(t?.args),...Ae,`--window-size=${r.width},${r.height}`],t?.enableV8NativesSyntax);return{headless:t?.headless??e.headless,args:i.args,executablePath:n,v8NativeSyntaxEnabled:i.v8NativeSyntaxEnabled}}function Ne(e,t){return!e||e.headless!==t.headless||e.executablePath!==t.executablePath||e.v8NativeSyntaxEnabled!==t.v8NativeSyntaxEnabled||e.args.length!==t.args.length?!1:e.args.every((e,n)=>e===t.args[n])}var Pe=class t{config;browser=null;collectedUrls=new Set;initPromise=null;collectLock=null;connectAttemptRef={current:0};MAX_COLLECTED_URLS;MAX_FILES_PER_COLLECT;MAX_RESPONSE_SIZE;MAX_SINGLE_FILE_SIZE;CONNECT_TIMEOUT_MS;viewport;userAgent;collectedFilesCache=new Map;cache;cacheEnabled=!0;smartCollector;compressor;cdpSession=null;browserTargetSessionManager=null;cdpListeners={};activePageIndex=null;cachedActivePage=null;currentHeadless=null;currentLaunchOptions=null;explicitlyClosed=!1;connectedToExistingBrowser=!1;chromePid=null;static BROWSER_CLOSE_TIMEOUT_MS=5e3;constructor(t){this.config=t,this.MAX_COLLECTED_URLS=t.maxCollectedUrls??1e4,this.MAX_FILES_PER_COLLECT=t.maxFilesPerCollect??200,this.MAX_RESPONSE_SIZE=t.maxTotalContentSize??512*1024,this.MAX_SINGLE_FILE_SIZE=t.maxSingleFileSize??200*1024,this.CONNECT_TIMEOUT_MS=Number(process.env.JSHOOK_CONNECT_TIMEOUT_MS)||6e4,this.viewport=t.viewport??{width:1920,height:1080},this.userAgent=t.userAgent??`Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`,this.cache=new x,this.smartCollector=new re,this.compressor=new oe,e.info(` CodeCollector limits: maxCollect=${this.MAX_FILES_PER_COLLECT} files, maxResponse=${(this.MAX_RESPONSE_SIZE/1024).toFixed(0)}KB, maxSingle=${(this.MAX_SINGLE_FILE_SIZE/1024).toFixed(0)}KB`),e.info(` Strategy: Collect ALL files -> Cache -> Return summary/partial data to fit MCP limits`)}setCacheEnabled(t){this.cacheEnabled=t,e.info(`Code cache ${t?`enabled`:`disabled`}`)}async clearFileCache(){await this.cache.clear()}async getFileCacheStats(){return await this.cache.getStats()}async clearAllData(){e.info(`Clearing all collected data...`),await this.cache.clear(),this.compressor.clearCache(),this.compressor.resetStats(),this.collectedUrls.clear(),this.collectedFilesCache.clear(),e.success(`All data cleared`)}async getAllStats(){return{cache:await this.cache.getStats(),compression:{...this.compressor.getStats(),cacheSize:this.compressor.getCacheSize()},collector:{collectedUrls:this.collectedUrls.size,maxCollectedUrls:this.MAX_COLLECTED_URLS}}}getCache(){return this.cache}getCompressor(){return this.compressor}cleanupCollectedUrls(){if(this.collectedUrls.size>this.MAX_COLLECTED_URLS){e.warn(`Collected URLs exceeded ${this.MAX_COLLECTED_URLS}, clearing...`);let t=Array.from(this.collectedUrls);this.collectedUrls.clear(),t.slice(-Math.floor(this.MAX_COLLECTED_URLS/2)).forEach(e=>this.collectedUrls.add(e))}}initGuard=null;async init(e){if(this.initGuard)return this.initGuard;this.initGuard=this.initInner(e);try{await this.initGuard}finally{this.initGuard=null}}async initInner(e){await this.launch(e===void 0?void 0:{headless:e})}async launch(e){this.initPromise&&await this.initPromise;let t=await this.resolveExecutablePath(),n=Me(this.config,e,t,this.viewport);if(this.browser&&e===void 0)return this.explicitlyClosed=!1,{action:`reused`,launchOptions:this.currentLaunchOptions??n};if(this.browser&&!this.connectedToExistingBrowser&&Ne(this.currentLaunchOptions,n))return this.explicitlyClosed=!1,{action:`reused`,launchOptions:n};let r=this.browser?`relaunched`:`launched`,i=this.browser?this.connectedToExistingBrowser?`replacing-existing-browser-connection`:`launch-options-changed`:void 0;this.explicitlyClosed=!1,this.initPromise=this.launchInner(n);try{await this.initPromise}finally{this.initPromise=null}return{action:r,launchOptions:n,...i?{reason:i}:{}}}async launchInner(t){this.browser&&await this.disposeCurrentBrowser(!1);let n={headless:t.headless,args:t.args,defaultViewport:this.viewport,protocolTimeout:6e4};t.executablePath&&(n.executablePath=t.executablePath),e.info(`Initializing browser with anti-detection...`);let r=await import(`rebrowser-puppeteer-core`),i=r.default?.launch??r.launch;this.browser=await i(n),this.connectedToExistingBrowser=!1,this.chromePid=this.browser.process()?.pid??null,this.chromePid&&e.debug(`Chrome child process PID: ${this.chromePid}`),this.currentHeadless=t.headless,this.currentLaunchOptions=t,this.browser.on(`disconnected`,()=>{this.handleBrowserDisconnected()}),e.success(`Browser initialized with enhanced anti-detection`)}async resolveExecutablePath(){let t=this.config.executablePath?.trim();if(t){if(p(t))return t;throw Error(`Configured browser executable was not found: ${t}. Set a valid executablePath or configure CHROME_PATH / PUPPETEER_EXECUTABLE_PATH / BROWSER_EXECUTABLE_PATH.`)}let n=await I();if(n)return n;e.info(`No explicit browser executable configured. Falling back to Puppeteer-managed browser resolution.`)}handleBrowserDisconnected(){e.warn(`Browser disconnected`),this.browser=null,this.currentHeadless=null,this.currentLaunchOptions=null,this.connectedToExistingBrowser=!1,this.chromePid=null,this.activePageIndex=null,this.cachedActivePage=null,this.browserTargetSessionManager?.dispose(),this.browserTargetSessionManager=null,this.cdpSession&&(this.cdpSession=null,this.cdpListeners={})}async disposeCurrentBrowser(e){await this.clearAllData(),this.explicitlyClosed=e,this.activePageIndex=null,this.cachedActivePage=null;let t=this.browser,n=this.connectedToExistingBrowser,r=this.chromePid;this.browser=null,this.currentHeadless=null,this.currentLaunchOptions=null,this.connectedToExistingBrowser=!1,this.chromePid=null,await this.browserTargetSessionManager?.dispose(),this.browserTargetSessionManager=null,this.cdpSession&&(this.cdpSession=null,this.cdpListeners={}),t&&(n?await t.disconnect():await this.closeBrowserWithForceKill(t,r))}async close(){await this.disposeCurrentBrowser(!0),e.info(`Browser closed and all data cleared`)}async closeBrowserWithForceKill(n,r){try{await Promise.race([n.close(),new Promise((e,n)=>setTimeout(()=>n(Error(`browser.close() timed out`)),t.BROWSER_CLOSE_TIMEOUT_MS))])}catch(n){e.warn(`browser.close() failed or timed out, attempting force-kill:`,n),t.forceKillPid(r)}}static forceKillPid(t){if(t)try{process.kill(t,`SIGKILL`),e.info(`Force-killed Chrome process PID ${t}`)}catch(n){n.code!==`ESRCH`&&e.warn(`Failed to force-kill Chrome PID ${t}:`,n)}}getChromePid(){return this.chromePid}getPageTargets(){return this.browser?this.browser.targets().filter(e=>e.type()===`page`):[]}async resolvePageTargetHandle(e,t=5e3){let n=await Promise.race([e.page(),new Promise((e,n)=>{setTimeout(()=>{n(new i(`Timed out after ${t}ms while resolving a Puppeteer Page handle from the attached Chrome target.`))},t)})]);if(!n)throw new i(`Attached browser target does not expose a Puppeteer Page handle in the current Chrome remote debugging mode.`);return n}isExistingBrowserConnection(){return this.connectedToExistingBrowser}async getActivePage(){if(this.cachedActivePage)return this.cachedActivePage;if(!this.browser){if(this.explicitlyClosed)throw new i(`Browser was explicitly closed. Call browser_launch or browser_attach first.`);try{await this.init()}catch(e){throw new i(`Browser not available: ${e instanceof Error?e.message:String(e)}`)}}let e=this.getPageTargets();if(e.length===0)return await this.browser.newPage();if(this.activePageIndex!==null&&this.activePageIndex<e.length)return await this.resolvePageTargetHandle(e[this.activePageIndex]);let t=e[e.length-1];if(!t)throw Error(`Failed to get active page`);return await this.resolvePageTargetHandle(t)}async getActivePageIndex(){let e=await this.getActivePage(),t=await this.listResolvedPages(),n=t.find(t=>t.page===e);if(n)return n.index;let r=e.url();return t.find(e=>e.url===r)?.index??null}async listPages(){return this.browser?this.getPageTargets().map((e,t)=>({index:t,url:e.url(),title:``})):[]}async listResolvedPages(e=1500){if(!this.browser)return[];let t=this.getPageTargets();return(await Promise.all(t.map(async(t,n)=>{try{let r=await this.resolvePageTargetHandle(t,e),i=``;try{i=await Promise.race([r.title(),new Promise(t=>{setTimeout(()=>t(``),e)})])}catch{i=``}return{index:n,url:t.url(),title:i,page:r}}catch{return null}}))).filter(e=>e!==null)}async selectResolvedPageByTargetId(e){if(!this.browser)return null;let t=this.getPageTargets();for(let n of t){let t=null;try{t=await n.createCDPSession();let{targetInfo:r}=await t.send(`Target.getTargetInfo`);if(r.targetId===e){let e=(await this.listResolvedPages()).find(e=>e.url===n.url())??null;return e?(this.activePageIndex=e.index,this.cachedActivePage=e.page,e):null}}catch{continue}finally{if(t)try{await t.detach()}catch{}}}return null}async selectPage(t){if(!this.browser)throw Error(`Browser not connected`);let n=await this.listPages();if(t<0||t>=n.length)throw Error(`Page index ${t} out of range (0-${n.length-1})`);this.activePageIndex=t;try{let r=this.getPageTargets();this.cachedActivePage=await this.resolvePageTargetHandle(r[t],8e3),e.info(`Active page index set to ${t}: ${n[t].url} (cached)`)}catch(n){this.cachedActivePage=null,e.warn(`Failed to cache page handle for index ${t}: ${n instanceof Error?n.message:String(n)}. Falling back to lazy resolve on next use.`)}}async createPage(t){this.browser||await this.init();let n=await this.browser.newPage();return await n.setUserAgent(this.userAgent),await this.applyAntiDetection(n),t&&await n.goto(t,{waitUntil:c(),timeout:this.config.timeout}),e.info(`New page created${t?`: ${t}`:``}`),n}async applyAntiDetection(e){await e.evaluateOnNewDocument(()=>{Object.defineProperty(navigator,`webdriver`,{get:()=>!1}),Object.defineProperty(navigator,`plugins`,{get:()=>[1,2,3,4,5]}),Object.defineProperty(navigator,`languages`,{get:()=>[`en-US`,`en`]});let e=window;e.chrome||={runtime:{},loadTimes:function(){},csi:function(){},app:{}};let t=window.navigator.permissions.query;window.navigator.permissions.query=e=>e.name===`notifications`?Promise.resolve({state:`denied`}):t(e)})}async getStatus(){if(!this.browser)return{running:!1,pagesCount:0};try{let e=await this.browser.version();return{running:!0,pagesCount:this.getPageTargets().length,version:e,effectiveHeadless:this.currentHeadless??void 0,launchSource:this.connectedToExistingBrowser?`attached`:`launched`,v8NativeSyntaxEnabled:this.currentLaunchOptions?.v8NativeSyntaxEnabled,launchArgs:this.currentLaunchOptions?.args?[...this.currentLaunchOptions.args]:[]}}catch(t){return e.debug(`Browser not running or disconnected:`,t),{running:!1,pagesCount:0}}}async collect(e){for(;this.collectLock;)try{await this.collectLock}catch{}let t,n;this.collectLock=new Promise((e,r)=>{t=e,n=r});try{let n=await this.collectInner(e);return t(n),n}catch(e){throw n(e),e}finally{this.collectLock=null}}async collectInner(e){return pe(this,e)}shouldCollectUrl(e,t){return me(e,t)}async navigateWithRetry(e,t,n,r=3){return he(e,t,n,r)}async getPerformanceMetrics(e){return ge(e)}async collectPageMetadata(e){return _e(e)}async resolveConnectOptions(e){return be(e)}async connectWithTimeout(e,t,n){return Te(e,t,n,this.CONNECT_TIMEOUT_MS,this.connectAttemptRef)}async connect(t){this.explicitlyClosed=!1,(this.browser||this.browserTargetSessionManager||this.cdpSession)&&await this.disposeCurrentBrowser(!1);let n=await this.resolveConnectOptions(t),r=n.browserWSEndpoint??n.browserURL??`auto-detected Chrome debugging endpoint`;e.info(`Connecting to existing browser: ${r}`),this.browser=await this.connectWithTimeout(n,r,t),this.connectedToExistingBrowser=!0,this.currentLaunchOptions=null,this.browser.on(`disconnected`,()=>{this.handleBrowserDisconnected()}),e.success(`Connected to existing browser successfully`)}getBrowser(){return this.browser}getBrowserTargetSessionManager(){return this.browserTargetSessionManager||=new k(()=>this.browser),this.browserTargetSessionManager}async listCdpTargets(e){return await this.getBrowserTargetSessionManager().listTargets(e)}async attachCdpTarget(e){return await this.getBrowserTargetSessionManager().attach(e)}async detachCdpTarget(){return await this.getBrowserTargetSessionManager().detach()}getAttachedTargetSession(){return this.browserTargetSessionManager?.getAttachedTargetSession()??null}getAttachedTargetInfo(){return this.browserTargetSessionManager?.getAttachedTargetInfo()??null}getCollectionStats(){return{totalCollected:this.collectedUrls.size,uniqueUrls:this.collectedUrls.size}}clearCache(){this.collectedUrls.clear(),e.info(`Collection cache cleared`)}getCollectedFilesSummary(){return Ee(this.collectedFilesCache)}getFileByUrl(e){return De(this.collectedFilesCache,e)}getFilesByPattern(e,t=20,n=this.MAX_RESPONSE_SIZE){return Oe(this.collectedFilesCache,e,t,n)}getTopPriorityFiles(e=10,t=this.MAX_RESPONSE_SIZE){return ke(this.collectedFilesCache,e,t)}clearCollectedFilesCache(){let t=this.collectedFilesCache.size;this.collectedFilesCache.clear(),e.info(`Cleared collected files cache (${t} files)`)}};const Z=e=>e===void 0?`undefined`:JSON.stringify(e),Q=`const walkShadowRoots = () => {
5
+ const roots = [document];
6
+ const queue = [document];
7
+ let shadowRootCount = 0;
8
+ while (queue.length > 0) {
9
+ const root = queue.shift();
10
+ if (!root) continue;
11
+ for (const element of Array.from(root.querySelectorAll('*'))) {
12
+ const shadowRoot = element.shadowRoot;
13
+ if (shadowRoot) {
14
+ roots.push(shadowRoot);
15
+ queue.push(shadowRoot);
16
+ shadowRootCount += 1;
17
+ }
18
+ }
19
+ }
20
+ return { roots, shadowRootCount };
21
+ };`;function $(e,t){return`
22
+ ${Q}
23
+ const selector = ${Z(e)};
24
+ const maxLimit = ${Z(t)};
25
+ const { roots, shadowRootCount } = walkShadowRoots();
26
+ const seen = new Set();
27
+ const results = [];
28
+ let totalMatches = 0;
29
+ for (const root of roots) {
30
+ const nodeList = Array.from(root.querySelectorAll(selector));
31
+ totalMatches += nodeList.length;
32
+ for (const element of nodeList) {
33
+ if (seen.has(element)) continue;
34
+ seen.add(element);
35
+ const attributes = {};
36
+ for (const attr of Array.from(element.attributes)) {
37
+ attributes[attr.name] = attr.value;
38
+ }
39
+ const rect = element.getBoundingClientRect();
40
+ const style = window.getComputedStyle(element);
41
+ const textContent = element.textContent?.trim() || '';
42
+ results.push({
43
+ found: true,
44
+ nodeName: element.nodeName,
45
+ attributes,
46
+ textContent: textContent.length > 500 ? textContent.substring(0, 500) + '...[truncated]' : textContent,
47
+ boundingBox: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
48
+ visible: style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0',
49
+ });
50
+ if (results.length >= maxLimit) break;
51
+ }
52
+ if (results.length >= maxLimit) break;
53
+ }
54
+ if (totalMatches > maxLimit) {
55
+ console.warn('[DOMInspector] Found ' + totalMatches + ' elements for "' + selector + '", limiting to ' + maxLimit);
56
+ }
57
+ return { elements: results, diagnostics: { readyState: document.readyState, shadowRootCount } };
58
+ `.trim()}function Fe(e){return`
59
+ ${Q}
60
+ const filter = ${Z(e)};
61
+ const normalizedFilter = filter?.toLowerCase();
62
+ const { roots, shadowRootCount } = walkShadowRoots();
63
+ const results = [];
64
+ const seen = new Set();
65
+ const appendClickable = (element, type, fallbackSelector) => {
66
+ if (seen.has(element)) return;
67
+ seen.add(element);
68
+ const text = element.textContent?.trim() || (element.value ?? '').trim() || '';
69
+ if (normalizedFilter && !text.toLowerCase().includes(normalizedFilter)) return;
70
+ const rect = element.getBoundingClientRect();
71
+ const style = window.getComputedStyle(element);
72
+ let selector = fallbackSelector;
73
+ if (element.id) selector = '#' + element.id;
74
+ else if (element.className) selector = fallbackSelector + '.' + element.className.split(' ')[0];
75
+ results.push({
76
+ selector,
77
+ text,
78
+ type,
79
+ visible:
80
+ style.display !== 'none' &&
81
+ style.visibility !== 'hidden' &&
82
+ style.opacity !== '0' &&
83
+ rect.width > 0 &&
84
+ rect.height > 0,
85
+ boundingBox: { x: rect.x, y: rect.y, width: rect.width, height: rect.height },
86
+ });
87
+ };
88
+ for (const root of roots) {
89
+ root
90
+ .querySelectorAll('button, input[type="button"], input[type="submit"], input[type="reset"]')
91
+ .forEach((button) => appendClickable(button, 'button', button.tagName.toLowerCase()));
92
+ root.querySelectorAll('a[href]').forEach((link) => appendClickable(link, 'link', 'a'));
93
+ }
94
+ return { elements: results, diagnostics: { readyState: document.readyState, shadowRootCount } };
95
+ `.trim()}function Ie(e){let t=document.querySelector(e);if(!t)return{found:!1};let n={};for(let e of Array.from(t.attributes))n[e.name]=e.value;let r=t.getBoundingClientRect(),i=window.getComputedStyle(t);return{found:!0,nodeName:t.nodeName,attributes:n,textContent:t.textContent?.trim()||``,boundingBox:{x:r.x,y:r.y,width:r.width,height:r.height},visible:i.display!==`none`&&i.visibility!==`hidden`&&i.opacity!==`0`}}function Le(e,t){let n=(r,i)=>{if(i>e)return null;let a={tag:r.tagName,id:r.id||void 0,class:r.className||void 0};t&&r.childNodes.length===1&&r.childNodes[0]?.nodeType===3&&(a.text=r.textContent?.trim());let o=Array.from(r.children).map(e=>n(e,i+1)).filter(e=>e!==null);return o.length>0&&(a.children=o),a};return n(document.body,0)}function Re(e){let t=document.querySelector(e);if(!t)return null;let n=window.getComputedStyle(t),r={};for(let e of[`display`,`visibility`,`opacity`,`position`,`zIndex`,`width`,`height`,`top`,`left`,`right`,`bottom`,`color`,`backgroundColor`,`fontSize`,`fontFamily`,`border`,`padding`,`margin`,`overflow`])r[e]=n.getPropertyValue(e);return r}function ze(e){let t=e.selector?document.querySelector(e.selector):document.body;if(!t){console.error(`Target node not found for MutationObserver`);return}let n=new MutationObserver(e=>{e.forEach(e=>{console.warn(`[DOM Change]`,{type:e.type,target:e.target,addedNodes:e.addedNodes.length,removedNodes:e.removedNodes.length,attributeName:e.attributeName})})});n.observe(t,{childList:e.childList!==!1,attributes:e.attributes!==!1,characterData:e.characterData!==!1,subtree:e.subtree!==!1}),window.__domObserver=n}function Be(){let e=window;e.__domObserver&&(e.__domObserver.disconnect(),delete e.__domObserver)}function Ve(e,t){let n=t?`//${t}[contains(text(), "${e}")]`:`//*[contains(text(), "${e}")]`,r=document.evaluate(n,document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),i=[];for(let e=0;e<Math.min(r.snapshotLength,100);e++){let t=r.snapshotItem(e);if(!t)continue;let n=t.getBoundingClientRect(),a=window.getComputedStyle(t),o=t.tagName.toLowerCase();if(t.id)o=`#${t.id}`;else if(t.className){let e=t.className.split(` `).filter(Boolean);e.length>0&&(o=`${t.tagName.toLowerCase()}.${e[0]}`)}i.push({found:!0,nodeName:t.tagName,textContent:t.textContent?.trim(),selector:o,boundingBox:{x:n.x,y:n.y,width:n.width,height:n.height},visible:a.display!==`none`&&a.visibility!==`hidden`&&a.opacity!==`0`})}return i}function He(e){let t=document.querySelector(e);if(!t)return null;let n=[],r=t;for(;r&&r!==document.body&&r!==document.documentElement;){if(r.id)return n.unshift(`//*[@id="${r.id}"]`),n.join(``);let e=0,t=r.parentElement?.children;if(t)for(let n=0;n<t.length;n++){let i=t[n];if(i){if(i===r)break;i.tagName===r.tagName&&(e+=1)}}n.unshift(`/${r.tagName.toLowerCase()}[${e+1}]`),r=r.parentElement}return`/html/body`+n.join(``)}function Ue(e){let t=document.querySelector(e);if(!t)return!1;let n=t.getBoundingClientRect();return n.top>=0&&n.left>=0&&n.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&n.right<=(window.innerWidth||document.documentElement.clientWidth)}var We=class{collector;cdpSession=null;constructor(e){this.collector=e}async waitForReadyState(e,t=3e3){let n=Date.now()+t,r=!1,i=`unknown`;for(;Date.now()<=n&&(i=await e.evaluate(()=>document.readyState).catch(()=>`unknown`),i!==`complete`);)r=!0,await new Promise(e=>setTimeout(e,100));return{readyState:i,waitedForReadyState:r,frameCount:typeof e.frames==`function`?e.frames().length:1}}async querySelector(t,n=!0){try{let n=await(await this.collector.getActivePage()).evaluate(Ie,t);return e.info(`querySelector: ${t} - ${n.found?`found`:`not found`}`),n}catch(n){return e.error(`querySelector failed for ${t}:`,n),{found:!1}}}async querySelectorAll(n,r=t){try{let t=await this.collector.getActivePage(),i=await this.waitForReadyState(t),a=async()=>t.evaluate(Function($(n,r))),o=await a(),s=!1;o.elements.length===0&&o.diagnostics.readyState===`complete`&&(s=!0,await new Promise(e=>setTimeout(e,500)),o=await a());let c={readyState:o.diagnostics.readyState??i.readyState,frameCount:i.frameCount,shadowRootCount:o.diagnostics.shadowRootCount??0,retried:s,waitedForReadyState:i.waitedForReadyState};return e.info(`querySelectorAll: ${n} - found ${o.elements.length} elements (limit: ${r}, readyState: ${c.readyState}, shadowRoots: ${c.shadowRootCount}, retried: ${s})`),{elements:o.elements,diagnostics:c}}catch(t){return e.error(`querySelectorAll failed for ${n}:`,t),{elements:[],diagnostics:{readyState:`error`,frameCount:0,shadowRootCount:0,retried:!1,waitedForReadyState:!1}}}}async getStructure(t=3,n=!0){try{let r=await(await this.collector.getActivePage()).evaluate(Le,t,n);return e.info(`DOM structure retrieved`),r}catch(t){return e.error(`getStructure failed:`,t),null}}async findClickable(t){try{let n=await this.collector.getActivePage(),r=await this.waitForReadyState(n),i=async()=>n.evaluate(Function(Fe(t))),a=await i(),o=!1;a.elements.length===0&&a.diagnostics.readyState===`complete`&&(o=!0,await new Promise(e=>setTimeout(e,500)),a=await i());let s={readyState:a.diagnostics.readyState??r.readyState,frameCount:r.frameCount,shadowRootCount:a.diagnostics.shadowRootCount??0,retried:o,waitedForReadyState:r.waitedForReadyState};return e.info(`findClickable: found ${a.elements.length} elements${t?` (filtered by: ${t})`:``} (readyState: ${s.readyState}, shadowRoots: ${s.shadowRootCount}, retried: ${o})`),{elements:a.elements,diagnostics:s}}catch(t){return e.error(`findClickable failed:`,t),{elements:[],diagnostics:{readyState:`error`,frameCount:0,shadowRootCount:0,retried:!1,waitedForReadyState:!1}}}}async getComputedStyle(t){try{let n=await(await this.collector.getActivePage()).evaluate(Re,t);return e.info(`getComputedStyle: ${t} - ${n?`found`:`not found`}`),n}catch(n){return e.error(`getComputedStyle failed for ${t}:`,n),null}}async waitForElement(t,r=n){try{return await(await this.collector.getActivePage()).waitForSelector(t,{timeout:r}),await this.querySelector(t)}catch(n){return e.error(`waitForElement timeout for ${t}:`,n),null}}async observeDOMChanges(t={}){await(await this.collector.getActivePage()).evaluate(ze,t),e.info(`DOM change observer started`)}async stopObservingDOM(){await(await this.collector.getActivePage()).evaluate(Be),e.info(`DOM change observer stopped`)}async findByText(t,n){try{let r=await(await this.collector.getActivePage()).evaluate(Ve,t,n);return e.info(`findByText: "${t}" - found ${r.length} elements`),r}catch(n){return e.error(`findByText failed for "${t}":`,n),[]}}async getXPath(t){try{let n=await(await this.collector.getActivePage()).evaluate(He,t);return e.info(`getXPath: ${t} -> ${n}`),n}catch(n){return e.error(`getXPath failed for ${t}:`,n),null}}async isInViewport(t){try{let n=await(await this.collector.getActivePage()).evaluate(Ue,t);return e.info(`isInViewport: ${t} - ${n}`),n}catch(n){return e.error(`isInViewport failed for ${t}:`,n),!1}}async close(){this.cdpSession&&(await this.cdpSession.detach(),this.cdpSession=null,e.info(`DOM Inspector CDP session closed`))}};export{Pe as n,We as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./chunk-C_pMuVsO.mjs";import{t}from"./logger-sBC6IdRT.mjs";import n from"koffi";var r=e({KERN:()=>i,SM:()=>l,VM_FLAGS:()=>c,VM_PROT:()=>s,VM_REGION_BASIC_INFO_64:()=>9,VM_REGION_BASIC_INFO_COUNT_64:()=>9,dyldGetImageHeader:()=>O,dyldGetImageName:()=>D,dyldImageCount:()=>E,isDarwin:()=>f,isKoffiAvailableOnDarwin:()=>p,kernReturnName:()=>o,machPortDeallocate:()=>_,machTaskSelf:()=>h,machVmAllocate:()=>S,machVmDeallocate:()=>C,machVmProtect:()=>x,machVmReadOverwrite:()=>v,machVmRegion:()=>b,machVmWrite:()=>y,taskForPid:()=>g,taskResume:()=>T,taskSuspend:()=>w});const i={SUCCESS:0,INVALID_ADDRESS:1,PROTECTION_FAILURE:2,NO_SPACE:3,INVALID_ARGUMENT:4,FAILURE:5,RESOURCE_SHORTAGE:6,NOT_RECEIVER:7,NO_ACCESS:8,MEMORY_FAILURE:9,MEMORY_ERROR:10,ALREADY_IN_SET:11,NOT_IN_SET:12,NAME_EXISTS:13,ABORTED:14,INVALID_NAME:15,INVALID_TASK:16,INVALID_RIGHT:17,INVALID_VALUE:18,UREFS_OVERFLOW:19,INVALID_CAPABILITY:20,RIGHT_EXISTS:21,INVALID_HOST:22,MEMORY_PRESENT:23,MEMORY_DATA_MOVED:24,MEMORY_RESTART_COPY:25,INVALID_PROCESSOR_SET:26,POLICY_LIMIT:27,INVALID_POLICY:28,INVALID_OBJECT:29,ALREADY_WAITING:30,DEFAULT_SET:31,EXCEPTION_PROTECTED:32,INVALID_LEDGER:33,INVALID_MEMORY_CONTROL:34,INVALID_SECURITY:35,NOT_DEPRESSED:36,TERMINATED:37,LOCK_SET_DESTROYED:38,LOCK_UNSTABLE:39,LOCK_OWNED:40,LOCK_OWNED_SELF:41,SEMAPHORE_DESTROYED:42,RPC_SERVER_TERMINATED:43,RPC_TERMINATE_ORPHAN:44,RPC_CONTINUE_ORPHAN:45,NOT_SUPPORTED:46,NODE_DOWN:47,NOT_WAITING:48,OPERATION_TIMED_OUT:49,CODESIGN_ERROR:50,POLICY_STATIC:51},a={[i.SUCCESS]:`KERN_SUCCESS`,[i.INVALID_ADDRESS]:`KERN_INVALID_ADDRESS`,[i.PROTECTION_FAILURE]:`KERN_PROTECTION_FAILURE`,[i.NO_SPACE]:`KERN_NO_SPACE`,[i.INVALID_ARGUMENT]:`KERN_INVALID_ARGUMENT`,[i.FAILURE]:`KERN_FAILURE`,[i.NO_ACCESS]:`KERN_NO_ACCESS`,[i.INVALID_TASK]:`KERN_INVALID_TASK`,[i.INVALID_RIGHT]:`KERN_INVALID_RIGHT`,[i.CODESIGN_ERROR]:`KERN_CODESIGN_ERROR`};function o(e){return a[e]??`KERN_UNKNOWN(${e})`}const s={NONE:0,READ:1,WRITE:2,EXECUTE:4,ALL:7},c={FIXED:0,ANYWHERE:1,PURGABLE:2,RANDOM_ADDR:8,OVERWRITE:16384},l={COW:1,PRIVATE:2,EMPTY:3,SHARED:4,TRUESHARED:5,PRIVATE_ALIASED:6,SHARED_ALIASED:7,LARGE_PAGE:8};let u=null,d=null;function f(){return process.platform===`darwin`}function p(){if(d!==null)return d;try{return n.load(`/usr/lib/libSystem.B.dylib`).unload(),d=!0,!0}catch{return d=!1,!1}}function m(){return u||(u=n.load(`/usr/lib/libSystem.B.dylib`),t.debug(`Loaded libSystem.B.dylib via koffi`)),u}function h(){return m().func(`uint32 mach_task_self()`)()}function g(e,t){let n=m().func(`int32 task_for_pid(uint32, int32, _Out_ uint32 *)`),r=Buffer.alloc(4);return{kr:n(e,t,r),task:r.readUInt32LE(0)}}function _(e,t){return m().func(`int32 mach_port_deallocate(uint32, uint32)`)(e,t)}function v(e,t,n){let r=m().func(`int32 mach_vm_read_overwrite(uint32, uint64, uint64, _Out_ uint8_t *, uint64, _Out_ uint64 *)`),i=Buffer.alloc(n),a=Buffer.alloc(8);return{kr:r(e,t,BigInt(n),i,BigInt(n),a),data:i,outsize:a.readBigUInt64LE(0)}}function y(e,t,n){return m().func(`int32 mach_vm_write(uint32, uint64, uint8_t *, uint32)`)(e,t,n,n.length)}function b(e,t){let n=m().func(`int32 mach_vm_region(uint32, _Inout_ uint64 *, _Out_ uint64 *, int32, _Out_ uint8_t *, _Inout_ uint32 *, _Out_ uint32 *)`),r=Buffer.alloc(8);r.writeBigUInt64LE(t);let i=Buffer.alloc(8),a=Buffer.alloc(36),o=Buffer.alloc(4);o.writeUInt32LE(9);let s=n(e,r,i,9,a,o,Buffer.alloc(4)),c={protection:a.readUInt32LE(0),max_protection:a.readUInt32LE(4),inheritance:a.readUInt32LE(8),shared:a.readUInt32LE(12)!==0,reserved:a.readUInt32LE(16)!==0,offset:a.readBigUInt64LE(20),behavior:a.readUInt32LE(28),user_wired_count:a.readUInt32LE(32)};return{kr:s,address:r.readBigUInt64LE(0),size:i.readBigUInt64LE(0),info:c}}function x(e,t,n,r,i){return m().func(`int32 mach_vm_protect(uint32, uint64, uint64, int32, int32)`)(e,t,n,+!!r,i)}function S(e,t,n){let r=m().func(`int32 mach_vm_allocate(uint32, _Inout_ uint64 *, uint64, int32)`),i=Buffer.alloc(8);return i.writeBigUInt64LE(0n),{kr:r(e,i,t,n),address:i.readBigUInt64LE(0)}}function C(e,t,n){return m().func(`int32 mach_vm_deallocate(uint32, uint64, uint64)`)(e,t,n)}function w(e){return m().func(`int32 task_suspend(uint32)`)(e)}function T(e){return m().func(`int32 task_resume(uint32)`)(e)}function E(){return m().func(`uint32 _dyld_image_count()`)()}function D(e){let t=m().func(`const char * _dyld_get_image_name(uint32)`)(e);return t?String(t):``}function O(e){let t=m().func(`void * _dyld_get_image_header(uint32)`);return BigInt(t(e))}export{v as _,s as a,g as b,E as c,o as d,_ as f,x as g,C as h,c as i,f as l,S as m,i as n,O as o,h as p,l as r,D as s,r as t,p as u,b as v,y};