@jshookmcp/jshook 0.3.0 → 0.3.1

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 (321) hide show
  1. package/README.md +25 -50
  2. package/README.zh.md +25 -48
  3. package/dist/AntiCheatDetector-CGVGNfy5.mjs +1 -0
  4. package/dist/CacheAdapters-CdAxBmVW.mjs +1 -0
  5. package/dist/CodeInjector-BlgyqTOk.mjs +1 -0
  6. package/dist/ConsoleMonitor-Dkqc0HNi.mjs +490 -0
  7. package/dist/DOMInspector-BYY_EJ0C.mjs +95 -0
  8. package/dist/DarwinAPI-DC4HGGLl.mjs +1 -0
  9. package/dist/DetailedDataManager-BniBJlVv.mjs +1 -0
  10. package/dist/EventBus-DgciURGg.mjs +1 -0
  11. package/dist/EvidenceGraphBridge-BIfgB7HP.mjs +1 -0
  12. package/dist/ExtensionManager-erMpqcLk.mjs +1 -0
  13. package/dist/FingerprintManager-N7BZqjxP.mjs +1 -0
  14. package/dist/HardwareBreakpoint-OcJqNFVc.mjs +1 -0
  15. package/dist/HeapAnalyzer-CqAxZzeS.mjs +1 -0
  16. package/dist/{HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs → HookGeneratorBuilders.core.generators.storage-Bf1fbrNK.mjs} +66 -101
  17. package/dist/InstrumentationSession-DxXs0sCp.mjs +1 -0
  18. package/dist/MCPServer.search.handlers.domain-DVbWL1bT.mjs +1 -0
  19. package/dist/MemoryController-BaqstM5w.mjs +2 -0
  20. package/dist/MemoryScanSession-CaxAjZJf.mjs +1 -0
  21. package/dist/MemoryScanner-BLYnMJy6.mjs +1 -0
  22. package/dist/NativeMemoryManager.impl-CI554XbY.mjs +1 -0
  23. package/dist/NativeMemoryManager.utils-DM4NC3FE.mjs +1 -0
  24. package/dist/PEAnalyzer-DJyaJTQJ.mjs +1 -0
  25. package/dist/PageController-D9jVkH0i.mjs +1 -0
  26. package/dist/PointerChainEngine-5nF9eNlu.mjs +1 -0
  27. package/dist/PrerequisiteError-Bl3dK8XA.mjs +1 -0
  28. package/dist/ProcessRegistry-Hf12LlR9.mjs +1 -0
  29. package/dist/ResponseBuilder-B2lu4KEl.mjs +1 -0
  30. package/dist/ReverseEvidenceGraph-B931HeoW.mjs +2 -0
  31. package/dist/ScriptManager-fgqiALgj.mjs +7 -0
  32. package/dist/Speedhack-l6s8L2Qw.mjs +1 -0
  33. package/dist/StealthVerifier-Dhbj4B4P.mjs +1 -0
  34. package/dist/StructureAnalyzer-A-WamfYE.mjs +2 -0
  35. package/dist/ToolCatalog-D_IKl1Hu.mjs +1 -0
  36. package/dist/ToolError-DWU_z7gp.mjs +1 -0
  37. package/dist/ToolProbe-xsfALmN3.mjs +1 -0
  38. package/dist/ToolRegistry-B0Zs-phN.mjs +1 -0
  39. package/dist/ToolRouter.policy-CFHoN_Lw.mjs +4 -0
  40. package/dist/TraceRecorder-Dd8jLXpi.mjs +272 -0
  41. package/dist/VersionDetector-DMoUWyNm.mjs +9 -0
  42. package/dist/Win32API-Bhi5xFBe.mjs +1 -0
  43. package/dist/Win32Debug-CQteFL4F.mjs +1 -0
  44. package/dist/WorkflowEngine-CxEp2WXH.mjs +1 -0
  45. package/dist/analysis-BuR-NgX8.mjs +5 -0
  46. package/dist/{antidebug-BRKeyt27.mjs → antidebug-BOTZH6-0.mjs} +8 -259
  47. package/dist/artifactRetention-NBdncOEW.mjs +1 -0
  48. package/dist/artifacts-B5xQuEa_.mjs +1 -0
  49. package/dist/authorization-schema-B40obG1A.mjs +1 -0
  50. package/dist/betterSqlite3-CGaxz4AX.mjs +1 -0
  51. package/dist/binary-instrument-Cf9qqLlM.mjs +7 -0
  52. package/dist/bind-helpers-BlAOQrFQ.mjs +1 -0
  53. package/dist/boringssl-inspector-BST5vtKx.mjs +2 -0
  54. package/dist/browser-C4Le3xqA.mjs +11 -0
  55. package/dist/capabilities-DbYCv-HF.mjs +1 -0
  56. package/dist/chunk-C_pMuVsO.mjs +1 -0
  57. package/dist/collector-CKO8RPK8.mjs +1 -0
  58. package/dist/concurrency-CcK46d0h.mjs +1 -0
  59. package/dist/constants-Cp6hBrrx.mjs +1 -0
  60. package/dist/coordination-BbijHEHH.mjs +1 -0
  61. package/dist/debugger-CRJq_krh.mjs +1 -0
  62. package/dist/definitions-BGobEDQa.mjs +1 -0
  63. package/dist/definitions-BGwNSkVm.mjs +1 -0
  64. package/dist/definitions-BbxOUiP-.mjs +1 -0
  65. package/dist/definitions-CCP9gphV.mjs +1 -0
  66. package/dist/definitions-CIO9O-Sw.mjs +1 -0
  67. package/dist/definitions-CYFbewnd.mjs +1 -0
  68. package/dist/definitions-CdWEuIkI.mjs +1 -0
  69. package/dist/definitions-CoQFbggH.mjs +1 -0
  70. package/dist/definitions-CuJRsJ6N.mjs +1 -0
  71. package/dist/definitions-DI9YXsJk.mjs +1 -0
  72. package/dist/definitions-DJklW2sS.mjs +1 -0
  73. package/dist/definitions-DZ8uKusP.mjs +1 -0
  74. package/dist/definitions-Dds_zrWx.mjs +1 -0
  75. package/dist/definitions-Dgrg7f3D.mjs +1 -0
  76. package/dist/definitions-DtE0XLrT.mjs +1 -0
  77. package/dist/definitions-LaYTuwQd.mjs +26 -0
  78. package/dist/definitions-NoVp_9Pm.mjs +1 -0
  79. package/dist/definitions-OvGsfxdt.mjs +1 -0
  80. package/dist/definitions-jXPaVy4P.mjs +1 -0
  81. package/dist/encoding-DGcr6Aj_.mjs +2 -0
  82. package/dist/ensure-browser-core-Buls24LQ.mjs +1 -0
  83. package/dist/evidence-graph-bridge-B0yhGPcs.mjs +1 -0
  84. package/dist/factory-Cx_1LorX.mjs +1 -0
  85. package/dist/flat-target-session-CO5g78k3.mjs +1 -0
  86. package/dist/formatAddress-C7j2fDlM.mjs +1 -0
  87. package/dist/graphql-HLf3MS8H.mjs +62 -0
  88. package/dist/handlers-BLMa4X7l.mjs +54 -0
  89. package/dist/handlers-BP12ZsWc.mjs +4 -0
  90. package/dist/handlers-BZoPla6E.mjs +1 -0
  91. package/dist/handlers-BggKiVx9.mjs +2 -0
  92. package/dist/handlers-D3iev8g1.mjs +1 -0
  93. package/dist/handlers-D49r1-1P.mjs +1 -0
  94. package/dist/handlers-DCE45Ww8.mjs +2 -0
  95. package/dist/handlers-DW5AbYs5.mjs +5 -0
  96. package/dist/handlers-De5u62Ga2.mjs +1 -0
  97. package/dist/handlers-DmQzIc44.mjs +31 -0
  98. package/dist/handlers-DnJRGp7t.mjs +302 -0
  99. package/dist/handlers-Dv_runVv.mjs +2 -0
  100. package/dist/handlers-S9Ws0IGy.mjs +2 -0
  101. package/dist/{handlers-Dz9PYsCa.mjs → handlers-pVNpaw4A.mjs} +118 -904
  102. package/dist/handlers.impl-CD2_kOcC.mjs +1 -0
  103. package/dist/hooks-DDKppogd.mjs +600 -0
  104. package/dist/index.mjs +12 -5235
  105. package/dist/logger-sBC6IdRT.mjs +1 -0
  106. package/dist/maintenance-CutEO84j.mjs +1 -0
  107. package/dist/manifest-BFGxlDRh.mjs +123 -0
  108. package/dist/manifest-BPuE6oH2.mjs +1 -0
  109. package/dist/manifest-BXry5N09.mjs +1 -0
  110. package/dist/manifest-BeP_zJGb2.mjs +1 -0
  111. package/dist/manifest-C0g67k6U.mjs +1 -0
  112. package/dist/manifest-C1nZkTkO.mjs +1 -0
  113. package/dist/manifest-C7qV1z7F.mjs +1 -0
  114. package/dist/manifest-CDeUZGUZ.mjs +1 -0
  115. package/dist/manifest-CDiCtaQT.mjs +1 -0
  116. package/dist/manifest-CFn0359q2.mjs +1 -0
  117. package/dist/manifest-CGq4NpqH2.mjs +1 -0
  118. package/dist/manifest-CJMGt7Qy.mjs +1 -0
  119. package/dist/manifest-CRIJq4Hs.mjs +1 -0
  120. package/dist/manifest-C_hEIjSx.mjs +1 -0
  121. package/dist/manifest-CeQmtQOY.mjs +1 -0
  122. package/dist/manifest-Cq0j7GZt.mjs +1 -0
  123. package/dist/manifest-CtPmHAdn.mjs +1 -0
  124. package/dist/manifest-Cx2IVMUY.mjs +1 -0
  125. package/dist/manifest-D16xPXro.mjs +1 -0
  126. package/dist/manifest-D44TaRJU.mjs +1 -0
  127. package/dist/manifest-D610kxZr.mjs +2 -0
  128. package/dist/manifest-DC-SMF6b.mjs +1 -0
  129. package/dist/manifest-DD3rtxvV.mjs +1 -0
  130. package/dist/manifest-DKUorv5M.mjs +1 -0
  131. package/dist/manifest-DMJlcsTR.mjs +1 -0
  132. package/dist/manifest-DWUUWBz0.mjs +1 -0
  133. package/dist/manifest-De-6Wf2R.mjs +1 -0
  134. package/dist/manifest-Dgh0uDW-.mjs +1 -0
  135. package/dist/manifest-Dm0o3i2U.mjs +1 -0
  136. package/dist/manifest-DsVh7Y4U.mjs +1 -0
  137. package/dist/manifest-DtEFSRaq.mjs +1 -0
  138. package/dist/manifest-H-EpAyZQ.mjs +1 -0
  139. package/dist/manifest-ais9Afrw.mjs +1 -0
  140. package/dist/manifest-tmb54wmA.mjs +1 -0
  141. package/dist/manifest-yu2xiQqe.mjs +1 -0
  142. package/dist/manifest-zrbrpKCC.mjs +1 -0
  143. package/dist/matchesWildcardPattern-BGqLSmEs.mjs +1 -0
  144. package/dist/modules-p-PUNv9r.mjs +332 -0
  145. package/dist/mojo-ipc-VGlv3Qyp.mjs +9 -0
  146. package/dist/network-BjZ1Y-GB.mjs +7 -0
  147. package/dist/outputPaths-BonGThuc.mjs +2 -0
  148. package/dist/parse-args-Cuk7-xUt.mjs +1 -0
  149. package/dist/platform-C446Lf97.mjs +93 -0
  150. package/dist/playwright-cdp-fallback-BwVR-_T3.mjs +1 -0
  151. package/dist/process-C9f2A5zk.mjs +962 -0
  152. package/dist/proxy-CvRepxgV.mjs +1 -0
  153. package/dist/registry-DUHIPE-v.mjs +1 -0
  154. package/dist/response-C7rKQst4.mjs +1 -0
  155. package/dist/search-defaults-D2bY-rzH.mjs +1 -0
  156. package/dist/server/plugin-api.mjs +1 -293
  157. package/dist/shared-state-board-Cyg-xh_k.mjs +1 -0
  158. package/dist/sourcemap-D6Q1UuAp.mjs +1 -0
  159. package/dist/ssrf-policy-T96MR3r6.mjs +1 -0
  160. package/dist/streaming-CTX58tbb.mjs +1 -0
  161. package/dist/tool-builder-CI9914Tf.mjs +1 -0
  162. package/dist/transform-Cv9P2vVD.mjs +103 -0
  163. package/dist/types-CuyefmGT.mjs +1 -0
  164. package/dist/types-DtThH00r.mjs +1 -0
  165. package/dist/wasm-DaJa8J0V.mjs +174 -0
  166. package/dist/webcrack-CsLLJIs9.mjs +46 -0
  167. package/dist/workflow-CYIXtrWD.mjs +101 -0
  168. package/package.json +50 -78
  169. package/dist/AntiCheatDetector-CqGDXmfc.mjs +0 -350
  170. package/dist/CacheAdapters-jJFy20G-.mjs +0 -80
  171. package/dist/CodeInjector-BdjRfNx7.mjs +0 -150
  172. package/dist/ConsoleMonitor-DykL3IAw.mjs +0 -2269
  173. package/dist/DarwinAPI-ETyy0xyo.mjs +0 -363
  174. package/dist/DetailedDataManager-HT49OrvF.mjs +0 -217
  175. package/dist/EventBus-DFKvADm3.mjs +0 -141
  176. package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +0 -153
  177. package/dist/ExtensionManager-BDMsY2Dz.mjs +0 -721
  178. package/dist/FingerprintManager-BN4UQWnX.mjs +0 -96
  179. package/dist/HardwareBreakpoint-Cc2AFq1Y.mjs +0 -239
  180. package/dist/HeapAnalyzer-DruMgsgj.mjs +0 -284
  181. package/dist/InstrumentationSession-DLH0vd-z.mjs +0 -244
  182. package/dist/MemoryController-CMtviNW_.mjs +0 -167
  183. package/dist/MemoryScanSession-ITgb_NMi.mjs +0 -278
  184. package/dist/MemoryScanner-CiL7Z3ey.mjs +0 -428
  185. package/dist/NativeMemoryManager.impl-D9Lkovvn.mjs +0 -485
  186. package/dist/NativeMemoryManager.utils-BBlAixF5.mjs +0 -165
  187. package/dist/PEAnalyzer-DMQ44gen.mjs +0 -385
  188. package/dist/PageController-BPJNqqBN.mjs +0 -431
  189. package/dist/PointerChainEngine-K7wN8Z-w.mjs +0 -325
  190. package/dist/PrerequisiteError-TuyZIs6n.mjs +0 -20
  191. package/dist/ProcessRegistry-zGg12QbE.mjs +0 -74
  192. package/dist/ResponseBuilder-CJXWmWNw.mjs +0 -143
  193. package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +0 -269
  194. package/dist/ScriptManager-ZuWD-0Jg.mjs +0 -3003
  195. package/dist/Speedhack-D-z0umeT.mjs +0 -156
  196. package/dist/StealthVerifier-BWmPgQsv.mjs +0 -135
  197. package/dist/StructureAnalyzer-Cav5AVSL.mjs +0 -429
  198. package/dist/ToolCatalog-5OJdMiF0.mjs +0 -582
  199. package/dist/ToolError-jh9whhMd.mjs +0 -15
  200. package/dist/ToolProbe-DbCFGyrg.mjs +0 -45
  201. package/dist/ToolRegistry-B9krbTtI.mjs +0 -180
  202. package/dist/ToolRouter.policy-BGDAGyeH.mjs +0 -344
  203. package/dist/TraceRecorder-B41Z5XBj.mjs +0 -1286
  204. package/dist/VersionDetector-K3V4vGsw.mjs +0 -104
  205. package/dist/Win32API-C2kjj0ze.mjs +0 -346
  206. package/dist/Win32Debug-CKrGOTpo.mjs +0 -274
  207. package/dist/WorkflowEngine-DJ6M4opp.mjs +0 -569
  208. package/dist/analysis-BHeJW2Nb.mjs +0 -1234
  209. package/dist/artifactRetention-CPXkUJXp.mjs +0 -598
  210. package/dist/artifacts-DkfosXH3.mjs +0 -59
  211. package/dist/authorization-schema-DRqyJMSk.mjs +0 -31
  212. package/dist/betterSqlite3-DLSBZodi.mjs +0 -74
  213. package/dist/binary-instrument--V3MAhJ4.mjs +0 -971
  214. package/dist/bind-helpers-ClV34xdn.mjs +0 -42
  215. package/dist/boringssl-inspector-Bo_LOLaS.mjs +0 -180
  216. package/dist/browser-Dx3_S2cG.mjs +0 -4369
  217. package/dist/capabilities-CcHlvWgK.mjs +0 -33
  218. package/dist/chunk-CjcI7cDX.mjs +0 -15
  219. package/dist/concurrency-Drev_Vz9.mjs +0 -41
  220. package/dist/constants-CDZLOoVv.mjs +0 -534
  221. package/dist/coordination-DgItD9DL.mjs +0 -259
  222. package/dist/debugger-RS3RSAqs.mjs +0 -1288
  223. package/dist/definitions-BEoYofW5.mjs +0 -47
  224. package/dist/definitions-BRaefg3u.mjs +0 -365
  225. package/dist/definitions-BbkvZkiv.mjs +0 -96
  226. package/dist/definitions-BtWSHJ3o.mjs +0 -17
  227. package/dist/definitions-C1gCHO0i.mjs +0 -43
  228. package/dist/definitions-CDOg_b-l.mjs +0 -138
  229. package/dist/definitions-CVPD9hzZ.mjs +0 -54
  230. package/dist/definitions-Cea8Lgl7.mjs +0 -94
  231. package/dist/definitions-DAgIyjxM.mjs +0 -10
  232. package/dist/definitions-DJA27nsL.mjs +0 -66
  233. package/dist/definitions-DKPFU3LW.mjs +0 -25
  234. package/dist/definitions-DPRpZQ96.mjs +0 -47
  235. package/dist/definitions-DUE5gmdn.mjs +0 -18
  236. package/dist/definitions-DYVjOtxa.mjs +0 -26
  237. package/dist/definitions-DcYLVLCo.mjs +0 -37
  238. package/dist/definitions-Pp5LI2H4.mjs +0 -27
  239. package/dist/definitions-j9KdHVNR.mjs +0 -14
  240. package/dist/definitions-uzkjBwa7.mjs +0 -258
  241. package/dist/definitions-va-AnLuQ.mjs +0 -28
  242. package/dist/encoding-DJeqHmpd.mjs +0 -1079
  243. package/dist/evidence-graph-bridge-DcYizFk2.mjs +0 -136
  244. package/dist/factory-C90tBff6.mjs +0 -575
  245. package/dist/flat-target-session-Dgax2Cy3.mjs +0 -29
  246. package/dist/formatAddress-nnMvEohD.mjs +0 -17
  247. package/dist/graphql-CoHrhweh.mjs +0 -1197
  248. package/dist/handlers-4jmR0nMs.mjs +0 -898
  249. package/dist/handlers-BAHPxcch.mjs +0 -789
  250. package/dist/handlers-BOs9b907.mjs +0 -2600
  251. package/dist/handlers-BWXEy6ef.mjs +0 -917
  252. package/dist/handlers-Bndn6QvE.mjs +0 -111
  253. package/dist/handlers-BqC4bD4s.mjs +0 -681
  254. package/dist/handlers-BtYq60bM2.mjs +0 -276
  255. package/dist/handlers-BzgcB4iv.mjs +0 -799
  256. package/dist/handlers-CRyRWj2b.mjs +0 -859
  257. package/dist/handlers-CVv2H1uq.mjs +0 -592
  258. package/dist/handlers-Dl5a7JS4.mjs +0 -572
  259. package/dist/handlers-Dx2d7jt7.mjs +0 -2537
  260. package/dist/handlers-HujRKC3b.mjs +0 -661
  261. package/dist/handlers.impl-XWXkQfyi.mjs +0 -807
  262. package/dist/hooks-B1B8NRHL.mjs +0 -898
  263. package/dist/logger-Dh_xb7_2.mjs +0 -93
  264. package/dist/maintenance-PRMkLVRW.mjs +0 -835
  265. package/dist/manifest-67Bok-Si.mjs +0 -58
  266. package/dist/manifest-6lNTMZAB2.mjs +0 -87
  267. package/dist/manifest-B2duEHiH.mjs +0 -90
  268. package/dist/manifest-B6EY9Vm8.mjs +0 -57
  269. package/dist/manifest-B6nKSbyY.mjs +0 -95
  270. package/dist/manifest-BL8AQNPF.mjs +0 -106
  271. package/dist/manifest-BSZvJJmV.mjs +0 -47
  272. package/dist/manifest-BU7qzUyX.mjs +0 -418
  273. package/dist/manifest-Bl62e8WK.mjs +0 -49
  274. package/dist/manifest-Bo5cXjdt.mjs +0 -82
  275. package/dist/manifest-BpS4gtUK.mjs +0 -1347
  276. package/dist/manifest-Bv65_e2W.mjs +0 -101
  277. package/dist/manifest-BytNIF4Z.mjs +0 -117
  278. package/dist/manifest-C-xtsjS3.mjs +0 -81
  279. package/dist/manifest-CDYl7OhA.mjs +0 -66
  280. package/dist/manifest-CRZ3xmkD.mjs +0 -61
  281. package/dist/manifest-CoW6u4Tp.mjs +0 -132
  282. package/dist/manifest-Cq5zN_8A.mjs +0 -50
  283. package/dist/manifest-D7YZM_2e.mjs +0 -194
  284. package/dist/manifest-DE_VrAeQ.mjs +0 -314
  285. package/dist/manifest-DGsXSCpT.mjs +0 -39
  286. package/dist/manifest-DJ2vfEuW.mjs +0 -156
  287. package/dist/manifest-DPXDYhEu.mjs +0 -80
  288. package/dist/manifest-Dd4fQb0a.mjs +0 -322
  289. package/dist/manifest-Deq6opGg.mjs +0 -223
  290. package/dist/manifest-DfJTafJK.mjs +0 -37
  291. package/dist/manifest-DgOdgN_j.mjs +0 -50
  292. package/dist/manifest-DlbMW4v4.mjs +0 -47
  293. package/dist/manifest-DmVfbH0w.mjs +0 -374
  294. package/dist/manifest-Dog6Ddjr.mjs +0 -109
  295. package/dist/manifest-DvgU5FWb.mjs +0 -58
  296. package/dist/manifest-HsfDBs7j.mjs +0 -50
  297. package/dist/manifest-I8oQHvCG.mjs +0 -186
  298. package/dist/manifest-NvH_a-av.mjs +0 -786
  299. package/dist/manifest-cEJU1v0Z.mjs +0 -129
  300. package/dist/manifest-wOl5XLB12.mjs +0 -112
  301. package/dist/modules-tZozf0LQ.mjs +0 -10635
  302. package/dist/mojo-ipc-DXNEXEqb.mjs +0 -640
  303. package/dist/network-CPVvwvFg.mjs +0 -3852
  304. package/dist/outputPaths-um7lCRY3.mjs +0 -1141
  305. package/dist/parse-args-B4cY5Vx5.mjs +0 -39
  306. package/dist/platform-CYeFoTWp.mjs +0 -2161
  307. package/dist/process-BTbgcVc6.mjs +0 -1306
  308. package/dist/proxy-r8YN6nP1.mjs +0 -192
  309. package/dist/registry-Bl8ZQW61.mjs +0 -34
  310. package/dist/response-CWhh2aLo.mjs +0 -34
  311. package/dist/shared-state-board-BoZnSoj-.mjs +0 -586
  312. package/dist/sourcemap-BIDHUVXy.mjs +0 -934
  313. package/dist/ssrf-policy-Dsqd-DTX.mjs +0 -166
  314. package/dist/streaming-Dal6utPp.mjs +0 -725
  315. package/dist/tool-builder-BHJp32mV.mjs +0 -186
  316. package/dist/transform-DRVgGG90.mjs +0 -1011
  317. package/dist/types-Bx92KJfT.mjs +0 -4
  318. package/dist/types-DDBWs9UP.mjs +0 -37
  319. package/dist/wasm-BYx5UOeG.mjs +0 -1044
  320. package/dist/webcrack-Be0_FccV.mjs +0 -747
  321. package/dist/workflow-BpuKEtvn.mjs +0 -725
@@ -0,0 +1,490 @@
1
+ import{t as e}from"./logger-sBC6IdRT.mjs";import{t}from"./PrerequisiteError-Bl3dK8XA.mjs";import{randomUUID as n}from"node:crypto";function r(e){return`
2
+ (function() {
3
+ if (window.__xhrInterceptorInstalled) {
4
+ console.log('[XHRInterceptor] Already installed');
5
+ return;
6
+ }
7
+ window.__xhrInterceptorInstalled = true;
8
+
9
+ const originalXHR = window.__originalXMLHttpRequestForHook || window.XMLHttpRequest;
10
+ window.__originalXMLHttpRequestForHook = originalXHR;
11
+ if (!window.__xhrRequests) {
12
+ window.__xhrRequests = [];
13
+ }
14
+ const xhrRequests = window.__xhrRequests;
15
+
16
+ window.XMLHttpRequest = function() {
17
+ const xhr = new originalXHR();
18
+ const requestInfo = {
19
+ method: '',
20
+ url: '',
21
+ requestHeaders: {},
22
+ responseHeaders: {},
23
+ status: 0,
24
+ response: null,
25
+ timestamp: Date.now(),
26
+ };
27
+
28
+ const originalOpen = xhr.open;
29
+ xhr.open = function(method, url, ...args) {
30
+ requestInfo.method = method;
31
+ requestInfo.url = url;
32
+ console.log('[XHRInterceptor] XHR opened:', method, url);
33
+ return originalOpen.call(xhr, method, url, ...args);
34
+ };
35
+
36
+ const originalSetRequestHeader = xhr.setRequestHeader;
37
+ xhr.setRequestHeader = function(header, value) {
38
+ requestInfo.requestHeaders[header] = value;
39
+ return originalSetRequestHeader.call(xhr, header, value);
40
+ };
41
+
42
+ const originalSend = xhr.send;
43
+ xhr.send = function(body) {
44
+ let bodySize = 0;
45
+ try {
46
+ if (typeof body === 'string') bodySize = body.length;
47
+ else if (body && typeof body.byteLength === 'number') bodySize = body.byteLength;
48
+ else if (body && typeof body.size === 'number') bodySize = body.size;
49
+ } catch {}
50
+ console.log('[XHRInterceptor] XHR sent:', requestInfo.url, 'BodySize:', bodySize);
51
+
52
+ xhr.addEventListener('load', function() {
53
+ requestInfo.status = xhr.status;
54
+ requestInfo.response = xhr.response;
55
+ requestInfo.responseHeaders = xhr.getAllResponseHeaders();
56
+
57
+ xhrRequests.push(requestInfo);
58
+ if (xhrRequests.length > ${e}) {
59
+ xhrRequests.splice(0, xhrRequests.length - ${e});
60
+ }
61
+ console.log('[XHRInterceptor] XHR completed:', requestInfo.url, 'Status:', xhr.status);
62
+ });
63
+
64
+ return originalSend.call(xhr, body);
65
+ };
66
+
67
+ return xhr;
68
+ };
69
+
70
+ window.__getXHRRequests = function() {
71
+ return window.__xhrRequests || [];
72
+ };
73
+
74
+ console.log('[XHRInterceptor] XHR interceptor installed');
75
+ })();
76
+ `}function i(e){return`
77
+ (function() {
78
+ if (window.__fetchInterceptorInstalled) {
79
+ console.log('[FetchInterceptor] Already installed');
80
+ return;
81
+ }
82
+ window.__fetchInterceptorInstalled = true;
83
+
84
+ const originalFetch = window.__originalFetchForHook || window.fetch;
85
+ window.__originalFetchForHook = originalFetch;
86
+ if (!window.__fetchRequests) {
87
+ window.__fetchRequests = [];
88
+ }
89
+ const fetchRequests = window.__fetchRequests;
90
+
91
+ window.fetch = function(url, options = {}) {
92
+ const requestInfo = {
93
+ url: typeof url === 'string' ? url : url.url,
94
+ method: options.method || 'GET',
95
+ headers: options.headers || {},
96
+ body: options.body,
97
+ timestamp: Date.now(),
98
+ response: null,
99
+ status: 0,
100
+ };
101
+
102
+ console.log('[FetchInterceptor] Fetch called:', requestInfo.method, requestInfo.url);
103
+
104
+ return originalFetch.call(window, url, options).then(async (response) => {
105
+ requestInfo.status = response.status;
106
+
107
+ const clonedResponse = response.clone();
108
+ try {
109
+ requestInfo.response = await clonedResponse.text();
110
+ } catch (e) {
111
+ requestInfo.response = '[Unable to read response]';
112
+ }
113
+
114
+ fetchRequests.push(requestInfo);
115
+ if (fetchRequests.length > ${e}) {
116
+ fetchRequests.splice(0, fetchRequests.length - ${e});
117
+ }
118
+ // Auto-persist compact summary to localStorage so data survives context compression
119
+ try {
120
+ const summary = { url: requestInfo.url, method: requestInfo.method, status: requestInfo.status, ts: requestInfo.timestamp };
121
+ const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
122
+ prev.push(summary);
123
+ if (prev.length > 500) prev.splice(0, prev.length - 500);
124
+ localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
125
+ } catch(e) {
126
+ // best-effort persistence only; ignore quota or serialization failures
127
+ }
128
+ console.log('[FetchInterceptor] Fetch completed:', requestInfo.url, 'Status:', response.status);
129
+
130
+ return response;
131
+ }).catch((error) => {
132
+ console.error('[FetchInterceptor] Fetch failed:', requestInfo.url, error);
133
+ throw error;
134
+ });
135
+ };
136
+
137
+ window.__getFetchRequests = function() {
138
+ return window.__fetchRequests || [];
139
+ };
140
+
141
+ console.log('[FetchInterceptor] Fetch interceptor installed');
142
+ })();
143
+ `}const a=e=>typeof e==`object`&&!!e,o=e=>!a(e)||typeof e.requestId!=`string`||!a(e.request)||typeof e.request.url!=`string`||typeof e.request.method!=`string`||e.request.postData!==void 0&&typeof e.request.postData!=`string`?!1:typeof e.timestamp==`number`,s=e=>!a(e)||typeof e.requestId!=`string`||!a(e.response)||typeof e.response.url!=`string`||typeof e.response.status!=`number`||typeof e.response.statusText!=`string`||typeof e.response.mimeType!=`string`?!1:typeof e.timestamp==`number`,c=e=>a(e)&&typeof e.requestId==`string`,l=e=>a(e)&&typeof e.body==`string`&&typeof e.base64Encoded==`boolean`,u=e=>a(e)?e:{},d=e=>{if(!a(e))return;let t=e.result;if(a(t))return t.value},f=(e,t=0)=>typeof e==`number`&&Number.isFinite(e)?e:t,p=(e,t)=>typeof e==`boolean`?e:t;var m=class{cdpSession;networkEnabled=!1;requests=new Map;responses=new Map;MAX_NETWORK_RECORDS=500;MAX_INJECTED_RECORDS=500;JS_RESPONSE_CONCURRENCY=6;responseBodyCache=new Map;MAX_BODY_CACHE_ENTRIES=200;networkListeners={};constructor(t){this.cdpSession=t,this.cdpSession.on(`disconnected`,()=>{e.warn(`NetworkMonitor: CDP session disconnected`),this.networkEnabled=!1,this.networkListeners={}})}async enable(){if(!this.cdpSession)throw Error(`CDP session not initialized`);if(this.networkEnabled){e.warn(`Network monitoring already enabled`);return}try{await this.cdpSession.send(`Network.enable`,{maxTotalBufferSize:1e7,maxResourceBufferSize:5e6,maxPostDataSize:65536}),e.info(`Network domain enabled`),this.networkListeners.requestWillBeSent=t=>{if(!o(t)){e.debug(`Skipping malformed Network.requestWillBeSent payload`);return}let n={requestId:t.requestId,url:t.request.url,method:t.request.method,headers:u(t.request.headers),postData:t.request.postData,timestamp:t.timestamp,type:t.type,httpVersion:t.request.httpVersion,initiator:t.initiator};if(this.requests.set(t.requestId,n),this.requests.size>this.MAX_NETWORK_RECORDS){let e=this.requests.keys().next().value;e&&this.requests.delete(e)}e.debug(`Network request captured: ${t.request.method} ${t.request.url}`)},this.networkListeners.responseReceived=t=>{if(!s(t)){e.debug(`Skipping malformed Network.responseReceived payload`);return}let n={requestId:t.requestId,url:t.response.url,status:t.response.status,statusText:t.response.statusText,headers:u(t.response.headers),mimeType:t.response.mimeType,timestamp:t.timestamp,fromCache:t.response.fromDiskCache||t.response.fromServiceWorker,timing:t.response.timing};if(this.responses.set(t.requestId,n),this.responses.size>this.MAX_NETWORK_RECORDS){let e=this.responses.keys().next().value;e&&this.responses.delete(e)}e.debug(`Network response captured: ${t.response.status} ${t.response.url}`)},this.networkListeners.loadingFinished=t=>{if(!c(t)){e.debug(`Skipping malformed Network.loadingFinished payload`);return}e.debug(`Network loading finished: ${t.requestId}`),this.captureResponseBody(t.requestId).catch(n=>{e.debug(`[BodyCache] Auto-capture failed for ${t.requestId}: ${n instanceof Error?n.message:String(n)}`)})},this.cdpSession.on(`Network.requestWillBeSent`,this.networkListeners.requestWillBeSent),this.cdpSession.on(`Network.responseReceived`,this.networkListeners.responseReceived),this.cdpSession.on(`Network.loadingFinished`,this.networkListeners.loadingFinished),this.networkEnabled=!0,e.info(` Network monitoring enabled successfully`,{requestListeners:!!this.networkListeners.requestWillBeSent,responseListeners:!!this.networkListeners.responseReceived,loadingListeners:!!this.networkListeners.loadingFinished})}catch(t){throw e.error(` Failed to enable network monitoring:`,t),this.networkEnabled=!1,t}}async captureResponseBody(t){if(this.responseBodyCache.has(t))return;let n=this.responses.get(t);if(n&&!n.fromCache)try{let r=await this.cdpSession.send(`Network.getResponseBody`,{requestId:t});if(!l(r))return;if(r.body.length>1048576){e.debug(`[BodyCache] Skipping oversized body for ${t} (${r.body.length} chars)`);return}if(this.responseBodyCache.size>=this.MAX_BODY_CACHE_ENTRIES){let e=this.responseBodyCache.keys().next().value;e&&this.responseBodyCache.delete(e)}this.responseBodyCache.set(t,{body:r.body,base64Encoded:r.base64Encoded}),e.debug(`[BodyCache] Cached body for ${t} (${r.body.length} chars, url=${n.url})`)}catch(n){e.debug(`[BodyCache] Could not capture body for ${t}: ${n instanceof Error?n.message:String(n)}`)}}async disable(){if(this.networkEnabled){this.networkListeners.requestWillBeSent&&this.cdpSession.off(`Network.requestWillBeSent`,this.networkListeners.requestWillBeSent),this.networkListeners.responseReceived&&this.cdpSession.off(`Network.responseReceived`,this.networkListeners.responseReceived),this.networkListeners.loadingFinished&&this.cdpSession.off(`Network.loadingFinished`,this.networkListeners.loadingFinished);try{await this.cdpSession.send(`Network.disable`)}catch(t){e.warn(`Failed to disable Network domain:`,t)}this.networkListeners={},this.networkEnabled=!1,e.info(`Network monitoring disabled`)}}isEnabled(){return this.networkEnabled}getStatus(){return{enabled:this.networkEnabled,requestCount:this.requests.size,responseCount:this.responses.size,listenerCount:Object.keys(this.networkListeners).filter(e=>this.networkListeners[e]!==void 0).length,cdpSessionActive:!0}}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===e.method)),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}getActivity(e){return{request:this.requests.get(e),response:this.responses.get(e)}}async getResponseBody(t){if(!this.cdpSession)throw Error(`CDP session not initialized`);if(!this.networkEnabled)return e.error(`Network monitoring is not enabled. Call enable() with enableNetwork: true first.`),null;let n=this.responseBodyCache.get(t);if(n)return this.responseBodyCache.delete(t),this.responseBodyCache.set(t,n),e.debug(`[BodyCache] Cache hit for ${t}`),n;let r=this.requests.get(t),i=this.responses.get(t);if(!r)return e.error(`Request not found: ${t}. Make sure network monitoring was enabled before the request.`),null;if(!i)return e.warn(`Response not yet received for request: ${t}. The request may still be pending.`),null;try{let n=await this.cdpSession.send(`Network.getResponseBody`,{requestId:t});return l(n)?(e.info(`Response body retrieved for request: ${t}`,{url:i.url,status:i.status,size:n.body.length,base64:n.base64Encoded}),{body:n.body,base64Encoded:n.base64Encoded}):(e.error(`Unexpected response body payload for ${t}`),null)}catch(n){let r=n instanceof Error?n.message:String(n);return e.error(`Failed to get response body for ${t}:`,{url:i.url,status:i.status,error:r,hint:`The response body may not be available for this request type (e.g., cached, redirected, or failed requests)`}),null}}async getAllJavaScriptResponses(){let t=Array.from(this.responses.entries()).filter(([,e])=>e.mimeType.includes(`javascript`)||e.url.endsWith(`.js`)||e.url.includes(`.js?`)),n=[];for(let e=0;e<t.length;e+=this.JS_RESPONSE_CONCURRENCY){let r=t.slice(e,e+this.JS_RESPONSE_CONCURRENCY),i=await Promise.all(r.map(async([e,t])=>{let n=await this.getResponseBody(e);if(!n)return null;let r=n.base64Encoded?Buffer.from(n.body,`base64`).toString(`utf-8`):n.body;return{url:t.url,content:r,size:r.length,requestId:e}}));n.push(...i.filter(e=>e!==null))}return e.info(`Collected ${n.length} JavaScript responses`),n}clearRecords(){this.requests.clear(),this.responses.clear(),this.responseBodyCache.clear(),e.info(`Network records cleared`)}getStats(){let e={},t={},n={};for(let t of this.requests.values())e[t.method]=(e[t.method]||0)+1,t.type&&(n[t.type]=(n[t.type]||0)+1);for(let e of this.responses.values())t[e.status]=(t[e.status]||0)+1;return{totalRequests:this.requests.size,totalResponses:this.responses.size,byMethod:e,byStatus:t,byType:n}}async injectXHRInterceptor(t){if(!this.cdpSession)throw Error(`CDP session not initialized`);let n=r(this.MAX_INJECTED_RECORDS);t?.persistent?(await this.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:n}),e.info(`XHR interceptor injected (persistent)`)):(await this.cdpSession.send(`Runtime.evaluate`,{expression:n}),e.info(`XHR interceptor injected`))}async injectFetchInterceptor(t){if(!this.cdpSession)throw Error(`CDP session not initialized`);let n=i(this.MAX_INJECTED_RECORDS);t?.persistent?(await this.cdpSession.send(`Page.addScriptToEvaluateOnNewDocument`,{source:n}),e.info(`Fetch interceptor injected (persistent)`)):(await this.cdpSession.send(`Runtime.evaluate`,{expression:n}),e.info(`Fetch interceptor injected`))}async getXHRRequests(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=d(await this.cdpSession.send(`Runtime.evaluate`,{expression:`window.__getXHRRequests ? window.__getXHRRequests() : []`,returnByValue:!0}));return Array.isArray(e)?e.filter(e=>a(e)):[]}catch(t){return e.error(`Failed to get XHR requests:`,t),[]}}async getFetchRequests(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=d(await this.cdpSession.send(`Runtime.evaluate`,{expression:`window.__getFetchRequests ? window.__getFetchRequests() : []`,returnByValue:!0}));return Array.isArray(e)?e.filter(e=>a(e)):[]}catch(t){return e.error(`Failed to get Fetch requests:`,t),[]}}async clearInjectedBuffers(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=d(await this.cdpSession.send(`Runtime.evaluate`,{expression:`
144
+ (() => {
145
+ const xhrStore = Array.isArray(window.__xhrRequests)
146
+ ? window.__xhrRequests
147
+ : (typeof window.__getXHRRequests === 'function' ? window.__getXHRRequests() : null);
148
+ const fetchStore = Array.isArray(window.__fetchRequests)
149
+ ? window.__fetchRequests
150
+ : (typeof window.__getFetchRequests === 'function' ? window.__getFetchRequests() : null);
151
+
152
+ const xhrCleared = Array.isArray(xhrStore) ? xhrStore.length : 0;
153
+ const fetchCleared = Array.isArray(fetchStore) ? fetchStore.length : 0;
154
+
155
+ if (Array.isArray(xhrStore)) xhrStore.length = 0;
156
+ if (Array.isArray(fetchStore)) fetchStore.length = 0;
157
+
158
+ return { xhrCleared, fetchCleared };
159
+ })()
160
+ `,returnByValue:!0}));return a(e)?{xhrCleared:f(e.xhrCleared),fetchCleared:f(e.fetchCleared)}:{xhrCleared:0,fetchCleared:0}}catch(t){return e.error(`Failed to clear injected network buffers:`,t),{xhrCleared:0,fetchCleared:0}}}async resetInjectedInterceptors(){if(!this.cdpSession)throw Error(`CDP session not initialized`);try{let e=d(await this.cdpSession.send(`Runtime.evaluate`,{expression:`
161
+ (() => {
162
+ let xhrReset = false;
163
+ let fetchReset = false;
164
+
165
+ if (window.__originalXMLHttpRequestForHook) {
166
+ window.XMLHttpRequest = window.__originalXMLHttpRequestForHook;
167
+ xhrReset = true;
168
+ }
169
+
170
+ if (window.__originalFetchForHook) {
171
+ window.fetch = window.__originalFetchForHook;
172
+ fetchReset = true;
173
+ }
174
+
175
+ if (Array.isArray(window.__xhrRequests)) window.__xhrRequests.length = 0;
176
+ if (Array.isArray(window.__fetchRequests)) window.__fetchRequests.length = 0;
177
+
178
+ window.__xhrInterceptorInstalled = false;
179
+ window.__fetchInterceptorInstalled = false;
180
+ delete window.__getXHRRequests;
181
+ delete window.__getFetchRequests;
182
+
183
+ return { xhrReset, fetchReset };
184
+ })()
185
+ `,returnByValue:!0}));return a(e)?{xhrReset:p(e.xhrReset,!1),fetchReset:p(e.fetchReset,!1)}:{xhrReset:!1,fetchReset:!1}}catch(t){return e.error(`Failed to reset injected network interceptors:`,t),{xhrReset:!1,fetchReset:!1}}}},h=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=`
186
+ (function() {
187
+ if (window.__xhrInterceptorInjected) return;
188
+ window.__xhrInterceptorInjected = true;
189
+ const maxRecords = ${this.MAX_INJECTED_RECORDS};
190
+ const OrigXHR = window.__pwOriginalXMLHttpRequest || window.XMLHttpRequest;
191
+ window.__pwOriginalXMLHttpRequest = OrigXHR;
192
+ if (!window.__xhrRequests) window.__xhrRequests = [];
193
+ window.XMLHttpRequest = function() {
194
+ const xhr = new OrigXHR();
195
+ const origOpen = xhr.open.bind(xhr);
196
+ const origSend = xhr.send.bind(xhr);
197
+ xhr.open = function(method, url, ...rest) {
198
+ xhr.__hookMeta = { method, url, timestamp: Date.now() };
199
+ return origOpen(method, url, ...rest);
200
+ };
201
+ xhr.send = function(body) {
202
+ xhr.addEventListener('load', function() {
203
+ window.__xhrRequests.push({
204
+ ...xhr.__hookMeta, body: body ? String(body).slice(0, 2048) : null,
205
+ status: xhr.status, response: xhr.responseText.slice(0, 2048),
206
+ });
207
+ if (window.__xhrRequests.length > maxRecords) {
208
+ window.__xhrRequests.splice(0, window.__xhrRequests.length - maxRecords);
209
+ }
210
+ });
211
+ return origSend(body);
212
+ };
213
+ return xhr;
214
+ };
215
+ console.log('[PlaywrightXHR] XHR interceptor injected');
216
+ })();
217
+ `;e?.persistent?await this.evaluateOnNewDocumentInPage(t):await this.evaluateInPage(t)}async injectFetchInterceptor(e){let t=`
218
+ (function() {
219
+ if (window.__fetchInterceptorInjected) return;
220
+ window.__fetchInterceptorInjected = true;
221
+ const maxRecords = ${this.MAX_INJECTED_RECORDS};
222
+ const origFetch = window.__pwOriginalFetch || window.fetch;
223
+ window.__pwOriginalFetch = origFetch;
224
+ if (!window.__fetchRequests) window.__fetchRequests = [];
225
+ const normalizeHeaders = (value) => {
226
+ if (!value) return {};
227
+ try {
228
+ if (typeof Headers !== 'undefined' && value instanceof Headers) {
229
+ return Object.fromEntries(value.entries());
230
+ }
231
+ } catch {}
232
+ if (Array.isArray(value)) {
233
+ try {
234
+ return Object.fromEntries(value);
235
+ } catch {
236
+ return {};
237
+ }
238
+ }
239
+ return typeof value === 'object' ? value : {};
240
+ };
241
+ window.fetch = function(...args) {
242
+ const [resource, opts = {}] = args;
243
+ const requestLike = resource && typeof resource === 'object' ? resource : null;
244
+ const url =
245
+ typeof resource === 'string'
246
+ ? resource
247
+ : typeof resource?.url === 'string'
248
+ ? resource.url
249
+ : String(resource);
250
+ const method = opts?.method || requestLike?.method || 'GET';
251
+ const headers = normalizeHeaders(opts?.headers || requestLike?.headers);
252
+ const bodySource = opts?.body;
253
+ const body =
254
+ bodySource === undefined || bodySource === null
255
+ ? null
256
+ : String(bodySource).slice(0, 2048);
257
+ const entry = {
258
+ url,
259
+ method,
260
+ headers,
261
+ body,
262
+ timestamp: Date.now(),
263
+ response: null,
264
+ status: 0,
265
+ };
266
+ return origFetch.apply(this, args).then(res => {
267
+ entry.status = res.status;
268
+ return res.clone().text().then(
269
+ (text) => {
270
+ entry.response = text.slice(0, 2048);
271
+ return res;
272
+ },
273
+ () => {
274
+ entry.response = '[Unable to read response]';
275
+ return res;
276
+ },
277
+ ).then((response) => {
278
+ window.__fetchRequests.push(entry);
279
+ if (window.__fetchRequests.length > maxRecords) {
280
+ window.__fetchRequests.splice(0, window.__fetchRequests.length - maxRecords);
281
+ }
282
+ // Auto-persist compact summary so data survives context compression
283
+ try {
284
+ const s = { url: entry.url, method: entry.method, status: entry.status, ts: entry.timestamp };
285
+ const prev = JSON.parse(localStorage.getItem('__capturedAPIs') || '[]');
286
+ prev.push(s);
287
+ if (prev.length > 500) prev.splice(0, prev.length - 500);
288
+ localStorage.setItem('__capturedAPIs', JSON.stringify(prev));
289
+ } catch(e) {}
290
+ return response;
291
+ });
292
+ });
293
+ };
294
+ console.log('[PlaywrightFetch] Fetch interceptor injected');
295
+ })();
296
+ `;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`))}},g=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:n().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 _(e){return e}function v(t,n){let r=_(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 y(t){let n=_(t);n.messages=[],e.info(`Console logs cleared`)}function b(e){let t=_(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 x(e,t){let n=_(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 S(t){let n=_(t);n.exceptions=[],e.info(`Exceptions cleared`)}function C(e){return e}function w(e){return e.contextSwitchPending===!0}function T(e){let t=C(e);return w(t)?!1:(t.networkMonitor?.isEnabled()??!1)||(t.playwrightNetworkMonitor?.isEnabled()??!1)}function E(e){let t=C(e);return w(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 D(e,t){let n=C(e);return w(n)?[]:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getRequests(t):n.networkMonitor?.getRequests(t)??[]}function O(e,t){let n=C(e);return w(n)?[]:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getResponses(t):n.networkMonitor?.getResponses(t)??[]}function k(e,t){let n=C(e);return w(n)?{}:n.playwrightNetworkMonitor?n.playwrightNetworkMonitor.getActivity(t):n.networkMonitor?.getActivity(t)??{}}async function A(t,n){let r=C(t);return w(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 j(e){let t=C(e);return w(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getAllJavaScriptResponses():t.networkMonitor?t.networkMonitor.getAllJavaScriptResponses():[]}function M(e){let t=C(e);t.networkMonitor?.clearRecords(),t.playwrightNetworkMonitor?.clearRecords()}async function N(e){let t=C(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 P(e){let t=C(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 F(e){let t=C(e);return w(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 I(e,n){let r=C(e);if(w(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 L(e,n){let r=C(e);if(w(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 R(e){let t=C(e);return w(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getXHRRequests():t.networkMonitor?t.networkMonitor.getXHRRequests():[]}async function z(e){let t=C(e);return w(t)?[]:t.playwrightNetworkMonitor?t.playwrightNetworkMonitor.getFetchRequests():t.networkMonitor?t.networkMonitor.getFetchRequests():[]}async function B(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 V(t){t.objectCache.clear(),e.info(`Object cache cleared`)}function H(e){return e}async function U(n,r){let i=H(n);if(await i.ensureSession(),!i.cdpSession)throw new t(`CDP session not available after reconnect attempt`);let a=`
297
+ (function() {
298
+ if (window.__dynamicScriptMonitorInstalled) {
299
+ console.log('[ScriptMonitor] Already installed');
300
+ return;
301
+ }
302
+ window.__dynamicScriptMonitorInstalled = true;
303
+
304
+ const maxRecords = ${i.MAX_INJECTED_DYNAMIC_SCRIPTS};
305
+ if (!window.__dynamicScripts) {
306
+ window.__dynamicScripts = [];
307
+ }
308
+ const dynamicScripts = window.__dynamicScripts;
309
+ const state = window.__dynamicScriptMonitorState || {};
310
+ if (!state.originalCreateElement) state.originalCreateElement = document.createElement;
311
+ if (!state.originalEval) state.originalEval = window.eval;
312
+ if (!state.originalFunction) state.originalFunction = window.Function;
313
+ window.__dynamicScriptMonitorState = state;
314
+
315
+ const observer = new MutationObserver((mutations) => {
316
+ mutations.forEach((mutation) => {
317
+ mutation.addedNodes.forEach((node) => {
318
+ if (node.nodeName === 'SCRIPT') {
319
+ const script = node;
320
+ const info = {
321
+ type: 'dynamic',
322
+ src: script.src || '(inline)',
323
+ content: script.src ? null : script.textContent,
324
+ timestamp: Date.now(),
325
+ async: script.async,
326
+ defer: script.defer,
327
+ };
328
+
329
+ dynamicScripts.push(info);
330
+ if (dynamicScripts.length > maxRecords) {
331
+ dynamicScripts.splice(0, dynamicScripts.length - maxRecords);
332
+ }
333
+ console.log('[ScriptMonitor] Dynamic script added:', info);
334
+ }
335
+ });
336
+ });
337
+ });
338
+
339
+ observer.observe(document.documentElement, {
340
+ childList: true,
341
+ subtree: true,
342
+ });
343
+ state.observer = observer;
344
+
345
+ const originalCreateElement = state.originalCreateElement;
346
+ document.createElement = function(tagName) {
347
+ const element = originalCreateElement.call(document, tagName);
348
+
349
+ if (tagName.toLowerCase() === 'script') {
350
+ console.log('[ScriptMonitor] Script element created via createElement');
351
+
352
+ const originalSetAttribute = element.setAttribute;
353
+ element.setAttribute = function(name, value) {
354
+ if (name === 'src') {
355
+ console.log('[ScriptMonitor] Script src set to:', value);
356
+ }
357
+ return originalSetAttribute.call(element, name, value);
358
+ };
359
+ }
360
+
361
+ return element;
362
+ };
363
+
364
+ const originalEval = state.originalEval;
365
+ window.eval = function(code) {
366
+ console.log('[ScriptMonitor] eval() called with code:',
367
+ typeof code === 'string' ? code.substring(0, 100) + '...' : code);
368
+ return originalEval.call(window, code);
369
+ };
370
+
371
+ const originalFunction = state.originalFunction;
372
+ window.Function = function(...args) {
373
+ console.log('[ScriptMonitor] Function() constructor called with args:', args);
374
+ return originalFunction.apply(this, args);
375
+ };
376
+
377
+ window.__getDynamicScripts = function() {
378
+ return dynamicScripts;
379
+ };
380
+
381
+ console.log('[ScriptMonitor] Dynamic script monitoring enabled');
382
+ })();
383
+ `;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 W(t){let n=H(t);if(!n.cdpSession)return{dynamicScriptsCleared:0};try{let e=(await n.cdpSession.send(`Runtime.evaluate`,{expression:`
384
+ (() => {
385
+ const store = Array.isArray(window.__dynamicScripts)
386
+ ? window.__dynamicScripts
387
+ : (typeof window.__getDynamicScripts === 'function'
388
+ ? window.__getDynamicScripts()
389
+ : null);
390
+ const dynamicScriptsCleared = Array.isArray(store) ? store.length : 0;
391
+ if (Array.isArray(store)) {
392
+ store.length = 0;
393
+ }
394
+ return { dynamicScriptsCleared };
395
+ })()
396
+ `,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 G(t){let n=H(t);if(!n.cdpSession)return{scriptMonitorReset:!1};try{let e=(await n.cdpSession.send(`Runtime.evaluate`,{expression:`
397
+ (() => {
398
+ const state = window.__dynamicScriptMonitorState;
399
+ let scriptMonitorReset = false;
400
+
401
+ try {
402
+ if (state && state.observer && typeof state.observer.disconnect === 'function') {
403
+ state.observer.disconnect();
404
+ state.observer = null;
405
+ scriptMonitorReset = true;
406
+ }
407
+ } catch (_) {}
408
+
409
+ try {
410
+ if (state && state.originalCreateElement) {
411
+ document.createElement = state.originalCreateElement;
412
+ scriptMonitorReset = true;
413
+ }
414
+ } catch (_) {}
415
+
416
+ try {
417
+ if (state && state.originalEval) {
418
+ window.eval = state.originalEval;
419
+ scriptMonitorReset = true;
420
+ }
421
+ } catch (_) {}
422
+
423
+ try {
424
+ if (state && state.originalFunction) {
425
+ window.Function = state.originalFunction;
426
+ scriptMonitorReset = true;
427
+ }
428
+ } catch (_) {}
429
+
430
+ if (Array.isArray(window.__dynamicScripts)) {
431
+ window.__dynamicScripts.length = 0;
432
+ }
433
+ delete window.__getDynamicScripts;
434
+ window.__dynamicScriptMonitorInstalled = false;
435
+
436
+ return { scriptMonitorReset };
437
+ })()
438
+ `,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 K(n){let r=H(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 q(n,r,i){let a=H(n);if(!a.cdpSession)throw new t(`CDP session not initialized`);let o=`
439
+ (function() {
440
+ const originalFunc = window.${r};
441
+ if (typeof originalFunc !== 'function') {
442
+ console.error('[Tracer] ${r} is not a function');
443
+ return;
444
+ }
445
+
446
+ window.${r} = new Proxy(originalFunc, {
447
+ apply: function(target, thisArg, args) {
448
+ console.log('[Tracer] ${r} called with args:', args);
449
+ const startTime = performance.now();
450
+
451
+ try {
452
+ const result = target.apply(thisArg, args);
453
+ const endTime = performance.now();
454
+ console.log('[Tracer] ${r} returned:', result, 'Time:', (endTime - startTime).toFixed(2), 'ms');
455
+ return result;
456
+ } catch (error) {
457
+ console.error('[Tracer] ${r} threw error:', error);
458
+ throw error;
459
+ }
460
+ }
461
+ });
462
+
463
+ console.log('[Tracer] ${r} is now being traced');
464
+ })();
465
+ `;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 J(n,r,i,a){let o=H(n);if(!o.cdpSession)throw new t(`CDP session not initialized`);let s=`
466
+ (function() {
467
+ const obj = ${r};
468
+ if (!obj) {
469
+ console.error('[Watcher] Object not found: ${r}');
470
+ return;
471
+ }
472
+
473
+ let value = obj.${i};
474
+
475
+ Object.defineProperty(obj, '${i}', {
476
+ get: function() {
477
+ console.log('[Watcher] ${r}.${i} accessed, value:', value);
478
+ return value;
479
+ },
480
+ set: function(newValue) {
481
+ console.log('[Watcher] ${r}.${i} changed from', value, 'to', newValue);
482
+ value = newValue;
483
+ },
484
+ enumerable: true,
485
+ configurable: true
486
+ });
487
+
488
+ console.log('[Watcher] Property watcher installed for ${r}.${i}');
489
+ })();
490
+ `;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 Y(e){return e}async function X(t,n,r,i){let a=Y(t);a.cdpSession=n,a.usingManagedTargetSession=r,a.lastEnableOptions={...i},a.cdpSession.on(`disconnected`,()=>{e.warn(`ConsoleMonitor CDP session disconnected`),a.cdpSession=null,a.networkMonitor=null,a.usingManagedTargetSession=!1}),await $(a.cdpSession,`Runtime.enable`,{},5e3),await $(a.cdpSession,`Console.enable`,{},5e3),a.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=>a.formatRemoteObject(e)).join(` `),args:t.args.map(e=>a.extractValue(e)),timestamp:t.timestamp,stackTrace:n,url:n[0]?.url,lineNumber:n[0]?.lineNumber,columnNumber:n[0]?.columnNumber};a.messages.push(r),a.messages.length>a.MAX_MESSAGES&&(a.messages=a.messages.slice(-Math.floor(a.MAX_MESSAGES/2))),e.debug(`Console ${t.type}: ${r.text}`)}),a.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};a.messages.push(n),a.messages.length>a.MAX_MESSAGES&&(a.messages=a.messages.slice(-Math.floor(a.MAX_MESSAGES/2)))}),i?.enableExceptions!==!1&&a.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};a.exceptions.push(i),a.exceptions.length>a.MAX_EXCEPTIONS&&(a.exceptions=a.exceptions.slice(-Math.floor(a.MAX_EXCEPTIONS/2))),e.error(`Exception thrown: ${i.text}`,{url:i.url,line:i.lineNumber})}),i?.enableNetwork&&(a.networkMonitor=new m(a.cdpSession),await a.networkMonitor.enable()),e.info(`ConsoleMonitor enabled`,{network:i?.enableNetwork||!1,exceptions:i?.enableExceptions!==!1})}async function Z(t,n){let r=Y(t);if(r.playwrightConsoleHandler){n?.enableNetwork&&!r.playwrightNetworkMonitor&&(r.playwrightNetworkMonitor=new h(r.playwrightPage),await r.playwrightNetworkMonitor.enable(),e.info(`Network monitoring added to existing ConsoleMonitor Playwright session`));return}let i=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)))},i.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)))},i.on(`pageerror`,r.playwrightErrorHandler)),n?.enableNetwork&&(r.playwrightNetworkMonitor=new h(r.playwrightPage),await r.playwrightNetworkMonitor.enable()),e.info(`ConsoleMonitor enabled (Playwright/camoufox mode)`,{network:n?.enableNetwork||!1})}async function Q(t){let n=Y(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 $(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 ee=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}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.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},Z(this,t);if(this.cdpSession){t?.enableNetwork&&!this.networkMonitor&&(this.networkMonitor=new m(this.cdpSession),await this.networkMonitor.enable(),e.info(`Network monitoring added to existing ConsoleMonitor session`));return}let{session:n,managed:r}=await this.createCdpSession();await X(this,n,r,t)}async applyPostEnableOptions(t){if(t?.enableNetwork){if(this.lastEnableOptions={...this.lastEnableOptions,...t},this.playwrightPage&&this.playwrightConsoleHandler&&!this.playwrightNetworkMonitor){await Z(this,t);return}this.cdpSession&&!this.networkMonitor&&(this.networkMonitor=new m(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 Q(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 v(this,e)}async execute(t){await this.ensureSession();try{let n=await $(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(){y(this)}getStats(){return b(this)}async close(){try{await this.disable()}finally{this.initPromise=void 0,this.objectCache.clear()}}isNetworkEnabled(){return T(this)}getNetworkStatus(){return E(this)}getNetworkRequests(e){return D(this,e)}getNetworkResponses(e){return O(this,e)}getNetworkActivity(e){return k(this,e)}async getResponseBody(e){return A(this,e)}async getAllJavaScriptResponses(){return j(this)}clearNetworkRecords(){M(this)}async clearInjectedBuffers(){return N(this)}async resetInjectedInterceptors(){return P(this)}getNetworkStats(){return F(this)}async injectXHRInterceptor(e){return I(this,e)}async injectFetchInterceptor(e){return L(this,e)}async getXHRRequests(){return R(this)}async getFetchRequests(){return z(this)}getExceptions(e){return x(this,e)}clearExceptions(){S(this)}async inspectObject(e){return B(this,e)}clearObjectCache(){V(this)}async enableDynamicScriptMonitoring(e){return U(this,e)}async clearDynamicScriptBuffer(){return W(this)}async resetDynamicScriptMonitoring(){return G(this)}async getDynamicScripts(){return K(this)}async injectFunctionTracer(e,t){return q(this,e,t)}async injectPropertyWatcher(e,t,n){return J(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 g(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{ee as ConsoleMonitor};