@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
@@ -1,1079 +0,0 @@
1
- import { a as argString, n as argEnum, r as argNumber } from "./parse-args-B4cY5Vx5.mjs";
2
- import "./definitions-DPRpZQ96.mjs";
3
- import { homedir, tmpdir } from "node:os";
4
- import { isAbsolute, resolve } from "node:path";
5
- import { readFile, realpath } from "node:fs/promises";
6
- //#region src/server/domains/encoding/encoding-protobuf.ts
7
- function parseProtobufMessage(buffer, depth, maxDepth) {
8
- const fields = [];
9
- let offset = 0;
10
- let fieldIndex = 0;
11
- while (offset < buffer.length) {
12
- const keyInfo = tryParseVarint(buffer, offset);
13
- if (keyInfo.error) return {
14
- fields,
15
- bytesConsumed: offset,
16
- error: keyInfo.error
17
- };
18
- const keyValue = keyInfo.value;
19
- offset = keyInfo.offset;
20
- const fieldNumber = Number(keyValue >> 3n);
21
- const wireType = Number(keyValue & 7n);
22
- if (fieldNumber <= 0) return {
23
- fields,
24
- bytesConsumed: offset,
25
- error: `Invalid field number ${fieldNumber} at offset ${offset}`
26
- };
27
- if (wireType === 0) {
28
- const varintInfo = tryParseVarint(buffer, offset);
29
- if (varintInfo.error) return {
30
- fields,
31
- bytesConsumed: offset,
32
- error: varintInfo.error
33
- };
34
- offset = varintInfo.offset;
35
- fields.push({
36
- index: fieldIndex,
37
- fieldNumber,
38
- wireType,
39
- wireTypeName: protobufWireTypeName(wireType),
40
- value: bigIntToSafeValue(varintInfo.value)
41
- });
42
- } else if (wireType === 1) {
43
- if (offset + 8 > buffer.length) return {
44
- fields,
45
- bytesConsumed: offset,
46
- error: `Unexpected EOF for fixed64 at offset ${offset}`
47
- };
48
- const raw = buffer.subarray(offset, offset + 8);
49
- const fixed64 = raw.readBigUInt64LE(0);
50
- offset += 8;
51
- fields.push({
52
- index: fieldIndex,
53
- fieldNumber,
54
- wireType,
55
- wireTypeName: protobufWireTypeName(wireType),
56
- value: {
57
- uint64: bigIntToSafeValue(fixed64),
58
- hex: raw.toString("hex")
59
- }
60
- });
61
- } else if (wireType === 2) {
62
- const lengthInfo = tryParseVarint(buffer, offset);
63
- if (lengthInfo.error) return {
64
- fields,
65
- bytesConsumed: offset,
66
- error: lengthInfo.error
67
- };
68
- offset = lengthInfo.offset;
69
- const lengthBigInt = lengthInfo.value;
70
- if (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) return {
71
- fields,
72
- bytesConsumed: offset,
73
- error: `Length-delimited field is too large at offset ${offset}`
74
- };
75
- const length = Number(lengthBigInt);
76
- if (length < 0 || offset + length > buffer.length) return {
77
- fields,
78
- bytesConsumed: offset,
79
- error: `Invalid length-delimited field length=${length} at offset ${offset}`
80
- };
81
- const payload = buffer.subarray(offset, offset + length);
82
- offset += length;
83
- fields.push({
84
- index: fieldIndex,
85
- fieldNumber,
86
- wireType,
87
- wireTypeName: protobufWireTypeName(wireType),
88
- value: decodeLengthDelimited(payload, depth, maxDepth)
89
- });
90
- } else if (wireType === 5) {
91
- if (offset + 4 > buffer.length) return {
92
- fields,
93
- bytesConsumed: offset,
94
- error: `Unexpected EOF for fixed32 at offset ${offset}`
95
- };
96
- const raw = buffer.subarray(offset, offset + 4);
97
- const fixed32 = raw.readUInt32LE(0);
98
- offset += 4;
99
- fields.push({
100
- index: fieldIndex,
101
- fieldNumber,
102
- wireType,
103
- wireTypeName: protobufWireTypeName(wireType),
104
- value: {
105
- uint32: fixed32,
106
- hex: raw.toString("hex")
107
- }
108
- });
109
- } else return {
110
- fields,
111
- bytesConsumed: offset,
112
- error: `Unsupported wire type ${wireType} at offset ${offset}`
113
- };
114
- fieldIndex += 1;
115
- }
116
- return {
117
- fields,
118
- bytesConsumed: offset
119
- };
120
- }
121
- function decodeLengthDelimited(payload, depth, maxDepth) {
122
- if (payload.length === 0) return {
123
- kind: "empty",
124
- length: 0
125
- };
126
- if (depth < maxDepth) {
127
- const nested = parseProtobufMessage(payload, depth + 1, maxDepth);
128
- if (!nested.error && nested.bytesConsumed === payload.length && nested.fields.length > 0) return {
129
- kind: "message",
130
- fields: nested.fields
131
- };
132
- }
133
- const text = toSafeUtf8$1(payload);
134
- if (text !== null && isMostlyPrintableText(text)) return {
135
- kind: "string",
136
- value: text
137
- };
138
- return {
139
- kind: "bytes",
140
- length: payload.length,
141
- hex: payload.toString("hex"),
142
- base64: payload.toString("base64")
143
- };
144
- }
145
- function tryParseVarint(buffer, startOffset) {
146
- let result = 0n;
147
- let shift = 0n;
148
- let offset = startOffset;
149
- for (let index = 0; index < 10; index += 1) {
150
- const current = buffer[offset];
151
- if (current === void 0) return { error: `Unexpected EOF while parsing varint at offset ${offset}` };
152
- const byte = BigInt(current);
153
- result |= (byte & 127n) << shift;
154
- offset += 1;
155
- if ((byte & 128n) === 0n) return {
156
- value: result,
157
- offset
158
- };
159
- shift += 7n;
160
- }
161
- return { error: `Varint exceeds 10 bytes at offset ${startOffset}` };
162
- }
163
- function protobufWireTypeName(wireType) {
164
- if (wireType === 0) return "varint";
165
- if (wireType === 1) return "fixed64";
166
- if (wireType === 2) return "length-delimited";
167
- if (wireType === 5) return "fixed32";
168
- return "unknown";
169
- }
170
- function bigIntToSafeValue(value) {
171
- const max = BigInt(Number.MAX_SAFE_INTEGER);
172
- const min = BigInt(Number.MIN_SAFE_INTEGER);
173
- if (value <= max && value >= min) return Number(value);
174
- return value.toString();
175
- }
176
- function toSafeUtf8$1(buffer) {
177
- const text = buffer.toString("utf8");
178
- if ((text.match(/\uFFFD/g) ?? []).length > 0) return null;
179
- return text;
180
- }
181
- function isMostlyPrintableText(text) {
182
- if (text.length === 0) return true;
183
- let printable = 0;
184
- for (const ch of text) {
185
- const code = ch.charCodeAt(0);
186
- if (code >= 32 && code <= 126 || code === 9 || code === 10 || code === 13) printable += 1;
187
- }
188
- return printable / text.length >= .85;
189
- }
190
- //#endregion
191
- //#region src/server/domains/encoding/encoding-msgpack.ts
192
- function decodeMsgPack(buffer) {
193
- const decoded = decodeMsgPackValue(buffer, 0, 0);
194
- if (decoded.offset !== buffer.length) throw new Error(`MessagePack decode ended early: consumed ${decoded.offset} of ${buffer.length} bytes`);
195
- return decoded.value;
196
- }
197
- function decodeMsgPackValue(buffer, startOffset, depth) {
198
- if (depth > 64) throw new Error("MessagePack decode depth exceeds safety limit");
199
- const prefix = buffer[startOffset];
200
- if (prefix === void 0) throw new Error(`Unexpected EOF at offset ${startOffset}`);
201
- let offset = startOffset + 1;
202
- if (prefix <= 127) return {
203
- value: prefix,
204
- offset
205
- };
206
- if (prefix >= 224) return {
207
- value: prefix - 256,
208
- offset
209
- };
210
- if (prefix >= 160 && prefix <= 191) {
211
- const length = prefix & 31;
212
- ensureRange(buffer, offset, length);
213
- return {
214
- value: buffer.subarray(offset, offset + length).toString("utf8"),
215
- offset: offset + length
216
- };
217
- }
218
- if (prefix >= 144 && prefix <= 159) {
219
- const length = prefix & 15;
220
- return decodeMsgPackArray(buffer, offset, length, depth + 1);
221
- }
222
- if (prefix >= 128 && prefix <= 143) {
223
- const length = prefix & 15;
224
- return decodeMsgPackMap(buffer, offset, length, depth + 1);
225
- }
226
- if (prefix === 192) return {
227
- value: null,
228
- offset
229
- };
230
- if (prefix === 194) return {
231
- value: false,
232
- offset
233
- };
234
- if (prefix === 195) return {
235
- value: true,
236
- offset
237
- };
238
- if (prefix === 204) {
239
- ensureRange(buffer, offset, 1);
240
- return {
241
- value: buffer.readUInt8(offset),
242
- offset: offset + 1
243
- };
244
- }
245
- if (prefix === 205) {
246
- ensureRange(buffer, offset, 2);
247
- return {
248
- value: buffer.readUInt16BE(offset),
249
- offset: offset + 2
250
- };
251
- }
252
- if (prefix === 206) {
253
- ensureRange(buffer, offset, 4);
254
- return {
255
- value: buffer.readUInt32BE(offset),
256
- offset: offset + 4
257
- };
258
- }
259
- if (prefix === 207) {
260
- ensureRange(buffer, offset, 8);
261
- return {
262
- value: bigIntToSafeValue(buffer.readBigUInt64BE(offset)),
263
- offset: offset + 8
264
- };
265
- }
266
- if (prefix === 208) {
267
- ensureRange(buffer, offset, 1);
268
- return {
269
- value: buffer.readInt8(offset),
270
- offset: offset + 1
271
- };
272
- }
273
- if (prefix === 209) {
274
- ensureRange(buffer, offset, 2);
275
- return {
276
- value: buffer.readInt16BE(offset),
277
- offset: offset + 2
278
- };
279
- }
280
- if (prefix === 210) {
281
- ensureRange(buffer, offset, 4);
282
- return {
283
- value: buffer.readInt32BE(offset),
284
- offset: offset + 4
285
- };
286
- }
287
- if (prefix === 211) {
288
- ensureRange(buffer, offset, 8);
289
- return {
290
- value: bigIntToSafeValue(buffer.readBigInt64BE(offset)),
291
- offset: offset + 8
292
- };
293
- }
294
- if (prefix === 202) {
295
- ensureRange(buffer, offset, 4);
296
- return {
297
- value: buffer.readFloatBE(offset),
298
- offset: offset + 4
299
- };
300
- }
301
- if (prefix === 203) {
302
- ensureRange(buffer, offset, 8);
303
- return {
304
- value: buffer.readDoubleBE(offset),
305
- offset: offset + 8
306
- };
307
- }
308
- if (prefix === 217) {
309
- ensureRange(buffer, offset, 1);
310
- const length = buffer.readUInt8(offset);
311
- offset += 1;
312
- ensureRange(buffer, offset, length);
313
- return {
314
- value: buffer.subarray(offset, offset + length).toString("utf8"),
315
- offset: offset + length
316
- };
317
- }
318
- if (prefix === 218) {
319
- ensureRange(buffer, offset, 2);
320
- const length = buffer.readUInt16BE(offset);
321
- offset += 2;
322
- ensureRange(buffer, offset, length);
323
- return {
324
- value: buffer.subarray(offset, offset + length).toString("utf8"),
325
- offset: offset + length
326
- };
327
- }
328
- if (prefix === 219) {
329
- ensureRange(buffer, offset, 4);
330
- const length = buffer.readUInt32BE(offset);
331
- offset += 4;
332
- ensureRange(buffer, offset, length);
333
- return {
334
- value: buffer.subarray(offset, offset + length).toString("utf8"),
335
- offset: offset + length
336
- };
337
- }
338
- if (prefix === 196) {
339
- ensureRange(buffer, offset, 1);
340
- const length = buffer.readUInt8(offset);
341
- offset += 1;
342
- ensureRange(buffer, offset, length);
343
- const payload = buffer.subarray(offset, offset + length);
344
- return {
345
- value: {
346
- type: "bytes",
347
- base64: payload.toString("base64"),
348
- hex: payload.toString("hex")
349
- },
350
- offset: offset + length
351
- };
352
- }
353
- if (prefix === 197) {
354
- ensureRange(buffer, offset, 2);
355
- const length = buffer.readUInt16BE(offset);
356
- offset += 2;
357
- ensureRange(buffer, offset, length);
358
- const payload = buffer.subarray(offset, offset + length);
359
- return {
360
- value: {
361
- type: "bytes",
362
- base64: payload.toString("base64"),
363
- hex: payload.toString("hex")
364
- },
365
- offset: offset + length
366
- };
367
- }
368
- if (prefix === 198) {
369
- ensureRange(buffer, offset, 4);
370
- const length = buffer.readUInt32BE(offset);
371
- offset += 4;
372
- ensureRange(buffer, offset, length);
373
- const payload = buffer.subarray(offset, offset + length);
374
- return {
375
- value: {
376
- type: "bytes",
377
- base64: payload.toString("base64"),
378
- hex: payload.toString("hex")
379
- },
380
- offset: offset + length
381
- };
382
- }
383
- if (prefix === 220) {
384
- ensureRange(buffer, offset, 2);
385
- const length = buffer.readUInt16BE(offset);
386
- offset += 2;
387
- return decodeMsgPackArray(buffer, offset, length, depth + 1);
388
- }
389
- if (prefix === 221) {
390
- ensureRange(buffer, offset, 4);
391
- const length = buffer.readUInt32BE(offset);
392
- offset += 4;
393
- return decodeMsgPackArray(buffer, offset, length, depth + 1);
394
- }
395
- if (prefix === 222) {
396
- ensureRange(buffer, offset, 2);
397
- const length = buffer.readUInt16BE(offset);
398
- offset += 2;
399
- return decodeMsgPackMap(buffer, offset, length, depth + 1);
400
- }
401
- if (prefix === 223) {
402
- ensureRange(buffer, offset, 4);
403
- const length = buffer.readUInt32BE(offset);
404
- offset += 4;
405
- return decodeMsgPackMap(buffer, offset, length, depth + 1);
406
- }
407
- if (prefix >= 212 && prefix <= 216) {
408
- const size = {
409
- 212: 1,
410
- 213: 2,
411
- 214: 4,
412
- 215: 8,
413
- 216: 16
414
- }[prefix];
415
- ensureRange(buffer, offset, 1 + size);
416
- const extType = buffer.readInt8(offset);
417
- const payload = buffer.subarray(offset + 1, offset + 1 + size);
418
- return {
419
- value: {
420
- type: "ext",
421
- extType,
422
- base64: payload.toString("base64"),
423
- hex: payload.toString("hex")
424
- },
425
- offset: offset + 1 + size
426
- };
427
- }
428
- if (prefix === 199 || prefix === 200 || prefix === 201) {
429
- const lengthBytes = prefix === 199 ? 1 : prefix === 200 ? 2 : 4;
430
- ensureRange(buffer, offset, lengthBytes);
431
- const length = lengthBytes === 1 ? buffer.readUInt8(offset) : lengthBytes === 2 ? buffer.readUInt16BE(offset) : buffer.readUInt32BE(offset);
432
- offset += lengthBytes;
433
- ensureRange(buffer, offset, 1 + length);
434
- const extType = buffer.readInt8(offset);
435
- const payload = buffer.subarray(offset + 1, offset + 1 + length);
436
- return {
437
- value: {
438
- type: "ext",
439
- extType,
440
- base64: payload.toString("base64"),
441
- hex: payload.toString("hex")
442
- },
443
- offset: offset + 1 + length
444
- };
445
- }
446
- throw new Error(`Unsupported MessagePack prefix 0x${prefix.toString(16)} at offset ${startOffset}`);
447
- }
448
- function decodeMsgPackArray(buffer, startOffset, length, depth) {
449
- let offset = startOffset;
450
- const values = [];
451
- for (let index = 0; index < length; index += 1) {
452
- const decoded = decodeMsgPackValue(buffer, offset, depth);
453
- values.push(decoded.value);
454
- offset = decoded.offset;
455
- }
456
- return {
457
- value: values,
458
- offset
459
- };
460
- }
461
- function decodeMsgPackMap(buffer, startOffset, length, depth) {
462
- let offset = startOffset;
463
- const mapValue = {};
464
- for (let index = 0; index < length; index += 1) {
465
- const keyDecoded = decodeMsgPackValue(buffer, offset, depth);
466
- offset = keyDecoded.offset;
467
- const valueDecoded = decodeMsgPackValue(buffer, offset, depth);
468
- offset = valueDecoded.offset;
469
- const key = msgPackMapKey(keyDecoded.value);
470
- mapValue[key] = valueDecoded.value;
471
- }
472
- return {
473
- value: mapValue,
474
- offset
475
- };
476
- }
477
- function msgPackMapKey(value) {
478
- if (typeof value === "string") return value;
479
- if (typeof value === "number") return String(value);
480
- if (typeof value === "boolean") return String(value);
481
- if (typeof value === "bigint") return value.toString();
482
- if (value === null) return "null";
483
- try {
484
- return JSON.stringify(value);
485
- } catch {
486
- return String(value);
487
- }
488
- }
489
- function ensureRange(buffer, offset, length) {
490
- if (offset < 0 || length < 0 || offset + length > buffer.length) throw new Error(`Unexpected EOF while reading ${length} bytes at offset ${offset}`);
491
- }
492
- //#endregion
493
- //#region src/server/domains/encoding/handlers/shared.ts
494
- /**
495
- * Encoding domain shared types, constants, and utility functions.
496
- * Extracted from EncodingHandlersBase.
497
- */
498
- const MAGIC_SIGNATURES = [
499
- {
500
- format: "png",
501
- bytes: [
502
- 137,
503
- 80,
504
- 78,
505
- 71
506
- ]
507
- },
508
- {
509
- format: "jpeg",
510
- bytes: [
511
- 255,
512
- 216,
513
- 255
514
- ]
515
- },
516
- {
517
- format: "gif",
518
- bytes: [
519
- 71,
520
- 73,
521
- 70
522
- ]
523
- },
524
- {
525
- format: "wasm",
526
- bytes: [
527
- 0,
528
- 97,
529
- 115,
530
- 109
531
- ]
532
- },
533
- {
534
- format: "zip/apk",
535
- bytes: [
536
- 80,
537
- 75,
538
- 3,
539
- 4
540
- ]
541
- },
542
- {
543
- format: "pdf",
544
- bytes: [
545
- 37,
546
- 80,
547
- 68,
548
- 70
549
- ]
550
- }
551
- ];
552
- const DETECT_SOURCE_SET = new Set([
553
- "base64",
554
- "hex",
555
- "file",
556
- "raw"
557
- ]);
558
- const ENTROPY_SOURCE_SET = new Set([
559
- "base64",
560
- "hex",
561
- "raw",
562
- "file"
563
- ]);
564
- const DECODE_ENCODING_SET = new Set([
565
- "base64",
566
- "hex",
567
- "url",
568
- "protobuf",
569
- "msgpack"
570
- ]);
571
- const OUTPUT_FORMAT_SET = new Set([
572
- "hex",
573
- "utf8",
574
- "json"
575
- ]);
576
- const INPUT_FORMAT_SET = new Set([
577
- "utf8",
578
- "hex",
579
- "json"
580
- ]);
581
- const OUTPUT_ENCODING_SET = new Set([
582
- "base64",
583
- "hex",
584
- "url"
585
- ]);
586
- function ok(payload) {
587
- return { content: [{
588
- type: "text",
589
- text: JSON.stringify(payload, null, 2)
590
- }] };
591
- }
592
- function fail(tool, error) {
593
- return ok({
594
- success: false,
595
- tool,
596
- error: error instanceof Error ? error.message : String(error)
597
- });
598
- }
599
- function decodeHexString(value) {
600
- const cleaned = value.trim().replace(/^0x/i, "").replace(/[\s:,-]/g, "");
601
- if (cleaned.length === 0) return Buffer.alloc(0);
602
- if (cleaned.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(cleaned)) throw new Error("Invalid hex string");
603
- return Buffer.from(cleaned, "hex");
604
- }
605
- function decodeBase64String(value) {
606
- const cleaned = value.trim().replace(/\s+/g, "");
607
- if (cleaned.length === 0) return Buffer.alloc(0);
608
- if (!looksLikeBase64(cleaned)) throw new Error("Invalid base64 string");
609
- return Buffer.from(cleaned, "base64");
610
- }
611
- function decodeBinaryAuto(value) {
612
- const trimmed = value.trim();
613
- if (trimmed.length === 0) return Buffer.alloc(0);
614
- if (looksLikeHex(trimmed)) return decodeHexString(trimmed);
615
- if (looksLikeBase64(trimmed)) return decodeBase64String(trimmed);
616
- return Buffer.from(trimmed, "utf8");
617
- }
618
- function looksLikeHex(value) {
619
- const cleaned = value.trim().replace(/^0x/i, "").replace(/[\s:,-]/g, "");
620
- return cleaned.length > 0 && cleaned.length % 2 === 0 && /^[0-9a-fA-F]+$/.test(cleaned);
621
- }
622
- function looksLikeBase64(value) {
623
- const cleaned = value.trim().replace(/\s+/g, "");
624
- if (cleaned.length === 0 || cleaned.length % 4 !== 0) return false;
625
- if (!/^[A-Za-z0-9+/]*={0,2}$/.test(cleaned)) return false;
626
- try {
627
- const decoded = Buffer.from(cleaned, "base64");
628
- return cleaned.replace(/=+$/, "") === decoded.toString("base64").replace(/=+$/, "");
629
- } catch {
630
- return false;
631
- }
632
- }
633
- function looksLikeUrlEncoded(value) {
634
- return /%[0-9a-fA-F]{2}/.test(value) || /\+/.test(value);
635
- }
636
- function decodeUrl(value) {
637
- return decodeURIComponent(value.replace(/\+/g, "%20"));
638
- }
639
- function encodeUrlBytes(buffer) {
640
- let encoded = "";
641
- for (const value of buffer.values()) encoded += value >= 48 && value <= 57 || value >= 65 && value <= 90 || value >= 97 && value <= 122 || value === 45 || value === 46 || value === 95 || value === 126 ? String.fromCharCode(value) : `%${value.toString(16).toUpperCase().padStart(2, "0")}`;
642
- return encoded;
643
- }
644
- function toSafeUtf8(buffer) {
645
- const text = buffer.toString("utf8");
646
- if ((text.match(/\uFFFD/g) ?? []).length > 0) return null;
647
- return text;
648
- }
649
- function tryParseJson(text) {
650
- try {
651
- return JSON.parse(text);
652
- } catch {
653
- return null;
654
- }
655
- }
656
- function previewHex(buffer, maxBytes) {
657
- return Array.from(buffer.subarray(0, maxBytes).values()).map((v) => v.toString(16).padStart(2, "0")).join(" ");
658
- }
659
- function hexDump(buffer, bytesPerRow = 16) {
660
- const lines = [];
661
- for (let offset = 0; offset < buffer.length; offset += bytesPerRow) {
662
- const row = buffer.subarray(offset, offset + bytesPerRow);
663
- const hex = Array.from(row.values()).map((v) => v.toString(16).padStart(2, "0")).join(" ");
664
- const ascii = Array.from(row.values()).map((v) => v >= 32 && v <= 126 ? String.fromCharCode(v) : ".").join("");
665
- lines.push(`${offset.toString(16).padStart(8, "0")} ${hex.padEnd(47)} |${ascii}|`);
666
- }
667
- return lines.join("\n");
668
- }
669
- function renderDecodedOutput(params) {
670
- const { encoding, outputFormat, buffer, jsonValue } = params;
671
- if (outputFormat === "hex") return ok({
672
- success: true,
673
- encoding,
674
- outputFormat,
675
- byteLength: buffer.length,
676
- result: buffer.toString("hex"),
677
- hexDump: hexDump(buffer)
678
- });
679
- if (outputFormat === "utf8") return ok({
680
- success: true,
681
- encoding,
682
- outputFormat,
683
- byteLength: buffer.length,
684
- result: buffer.toString("utf8")
685
- });
686
- const utf8 = toSafeUtf8(buffer);
687
- const maybeJson = utf8 === null ? null : tryParseJson(utf8);
688
- return ok({
689
- success: true,
690
- encoding,
691
- outputFormat,
692
- byteLength: buffer.length,
693
- result: jsonValue ?? {
694
- parsedJson: maybeJson,
695
- utf8,
696
- hex: buffer.toString("hex")
697
- }
698
- });
699
- }
700
- async function resolveBufferBySource(options) {
701
- const { source, data, filePath, maxBytes } = options;
702
- if (source === "file") {
703
- if (!filePath) throw new Error("filePath is required when source=file");
704
- const real = await realpath(resolve(filePath));
705
- if (!(await Promise.all([
706
- tmpdir(),
707
- homedir(),
708
- process.cwd()
709
- ].map(async (p) => {
710
- const absolute = isAbsolute(p) ? p : resolve(p);
711
- try {
712
- return await realpath(absolute);
713
- } catch {
714
- return absolute;
715
- }
716
- }))).some((root) => real.startsWith(root))) throw new Error(`File access denied: path "${filePath}" is outside allowed directories`);
717
- const fileBuffer = await readFile(real);
718
- return typeof maxBytes === "number" ? fileBuffer.subarray(0, maxBytes) : fileBuffer;
719
- }
720
- if (source === "base64") {
721
- if (!data) throw new Error("data is required for base64 source");
722
- return decodeBase64String(data);
723
- }
724
- if (source === "hex") {
725
- if (!data) throw new Error("data is required for hex source");
726
- return decodeHexString(data);
727
- }
728
- return Buffer.from(data ?? "", "utf8");
729
- }
730
- async function resolveRequestBodyFromActivePage(collector, requestId) {
731
- try {
732
- const result = await (await collector.getActivePage()).evaluate((targetRequestId) => {
733
- const pickBody = (entry) => {
734
- if (!entry || typeof entry !== "object") return null;
735
- const record = entry;
736
- if (record.requestId !== targetRequestId) return null;
737
- if (typeof record.responseBody === "string") return {
738
- body: record.responseBody,
739
- base64Encoded: Boolean(record.base64Encoded)
740
- };
741
- if (typeof record.body === "string") return {
742
- body: record.body,
743
- base64Encoded: Boolean(record.base64Encoded)
744
- };
745
- const response = record.response;
746
- if (response && typeof response === "object") {
747
- const rr = response;
748
- if (typeof rr.body === "string") return {
749
- body: rr.body,
750
- base64Encoded: Boolean(rr.base64Encoded)
751
- };
752
- }
753
- return null;
754
- };
755
- const searchArray = (payload) => {
756
- if (!Array.isArray(payload)) return null;
757
- for (const item of payload) {
758
- const found = pickBody(item);
759
- if (found) return found;
760
- }
761
- return null;
762
- };
763
- const fromMemory = searchArray(window.__capturedAPIs);
764
- if (fromMemory) return fromMemory;
765
- try {
766
- const raw = window.localStorage.getItem("__capturedAPIs");
767
- if (!raw) return null;
768
- return searchArray(JSON.parse(raw));
769
- } catch {
770
- return null;
771
- }
772
- }, requestId);
773
- if (!result || typeof result !== "object") return null;
774
- const payload = result;
775
- if (typeof payload.body !== "string") return null;
776
- if (payload.base64Encoded) return Buffer.from(payload.body, "base64");
777
- const maybeBase64 = payload.body.trim();
778
- if (looksLikeBase64(maybeBase64)) return Buffer.from(maybeBase64, "base64");
779
- return Buffer.from(payload.body, "utf8");
780
- } catch {
781
- return null;
782
- }
783
- }
784
- function detectMagicFormats(buffer) {
785
- const matches = [];
786
- for (const signature of MAGIC_SIGNATURES) {
787
- if (buffer.length < signature.bytes.length) continue;
788
- let matched = true;
789
- for (let i = 0; i < signature.bytes.length; i += 1) if (buffer[i] !== signature.bytes[i]) {
790
- matched = false;
791
- break;
792
- }
793
- if (matched) matches.push(signature.format);
794
- }
795
- return matches;
796
- }
797
- function detectStructuredFormats(buffer) {
798
- const firstByte = buffer[0];
799
- if (firstByte === void 0) return [];
800
- const formats = /* @__PURE__ */ new Set();
801
- if ([
802
- 8,
803
- 16,
804
- 24,
805
- 32
806
- ].includes(firstByte)) formats.add("protobuf");
807
- if (firstByte >= 128 && firstByte <= 143 || firstByte >= 144 && firstByte <= 159 || firstByte >= 160 && firstByte <= 191) formats.add("messagepack");
808
- if (firstByte >= 160 && firstByte <= 191 || firstByte >= 128 && firstByte <= 159) formats.add("cbor");
809
- return Array.from(formats);
810
- }
811
- function detectEncodingSignals(source, data, buffer) {
812
- const encodings = /* @__PURE__ */ new Set();
813
- if (source === "base64" || data && looksLikeBase64(data.trim())) encodings.add("base64");
814
- if (source === "hex" || data && looksLikeHex(data)) encodings.add("hex");
815
- if (data && looksLikeUrlEncoded(data)) encodings.add("url-encoded");
816
- if (buffer.length >= 3) {
817
- const [a, b, c] = buffer;
818
- if (a === 239 && b === 187 && c === 191) encodings.add("utf8-bom");
819
- }
820
- return Array.from(encodings);
821
- }
822
- function calculateShannonEntropy(buffer) {
823
- if (buffer.length === 0) return 0;
824
- const freq = Array.from({ length: 256 }, () => 0);
825
- for (const value of buffer.values()) freq[value] += 1;
826
- let entropy = 0;
827
- for (const count of freq) {
828
- if (count === 0) continue;
829
- const p = count / buffer.length;
830
- entropy -= p * Math.log2(p);
831
- }
832
- return Number(entropy.toFixed(6));
833
- }
834
- function calculateByteFrequency(buffer) {
835
- if (buffer.length === 0) return [];
836
- const freq = Array.from({ length: 256 }, () => 0);
837
- for (const value of buffer.values()) freq[value] += 1;
838
- const entries = [];
839
- for (let v = 0; v < 256; v += 1) {
840
- const count = freq[v];
841
- if (count === 0) continue;
842
- entries.push({
843
- byte: `0x${v.toString(16).padStart(2, "0")}`,
844
- count,
845
- ratio: Number((count / buffer.length).toFixed(6))
846
- });
847
- }
848
- entries.sort((a, b) => b.count - a.count);
849
- return entries;
850
- }
851
- function calculateBlockEntropies(buffer, blockSize) {
852
- if (buffer.length === 0) return [];
853
- const blocks = [];
854
- let index = 0;
855
- for (let start = 0; start < buffer.length; start += blockSize) {
856
- const end = Math.min(start + blockSize, buffer.length);
857
- blocks.push({
858
- index,
859
- start,
860
- end,
861
- entropy: calculateShannonEntropy(buffer.subarray(start, end))
862
- });
863
- index += 1;
864
- }
865
- return blocks;
866
- }
867
- function assessEntropy(entropy, buffer) {
868
- const ratio = printableRatio(buffer);
869
- if (entropy < 3.8 && ratio > .85) return "plaintext";
870
- if (entropy < 5.8) return "encoded";
871
- if (entropy < 7.2) return "compressed";
872
- if (entropy < 7.8) return "encrypted";
873
- return "random";
874
- }
875
- function printableRatio(buffer) {
876
- if (buffer.length === 0) return 1;
877
- let printable = 0;
878
- for (const value of buffer.values()) if (value >= 32 && value <= 126 || value === 9 || value === 10 || value === 13) printable += 1;
879
- return printable / buffer.length;
880
- }
881
- //#endregion
882
- //#region src/server/domains/encoding/handlers.impl.core.runtime.ts
883
- var EncodingToolHandlers = class {
884
- collector;
885
- responseBodyResolver;
886
- constructor(collector, responseBodyResolver) {
887
- this.collector = collector;
888
- this.responseBodyResolver = responseBodyResolver;
889
- }
890
- async resolveCapturedRequestBody(requestId) {
891
- if (this.responseBodyResolver) try {
892
- const payload = await this.responseBodyResolver(requestId);
893
- if (payload && typeof payload.body === "string") {
894
- if (payload.base64Encoded) return Buffer.from(payload.body, "base64");
895
- const maybeBase64 = payload.body.trim();
896
- if (looksLikeBase64(maybeBase64)) return Buffer.from(maybeBase64, "base64");
897
- return Buffer.from(payload.body, "utf8");
898
- }
899
- } catch {}
900
- return resolveRequestBodyFromActivePage(this.collector, requestId);
901
- }
902
- async handleBinaryDetectFormat(args) {
903
- try {
904
- const source = argEnum(args, "source", DETECT_SOURCE_SET, "raw");
905
- const data = argString(args, "data");
906
- const filePath = argString(args, "filePath");
907
- const requestId = argString(args, "requestId");
908
- let buffer = null;
909
- let requestBodyUsed = false;
910
- if (source === "raw" && requestId) {
911
- buffer = await this.resolveCapturedRequestBody(requestId);
912
- requestBodyUsed = buffer !== null;
913
- }
914
- if (!buffer) {
915
- if (source !== "file" && !data) throw new Error("data is required for non-file source when requestId payload is unavailable");
916
- buffer = await resolveBufferBySource({
917
- source,
918
- data,
919
- filePath,
920
- maxBytes: source === "file" ? 512 : void 0
921
- });
922
- }
923
- const entropy = calculateShannonEntropy(buffer);
924
- return ok({
925
- success: true,
926
- source,
927
- requestId: requestId ?? null,
928
- requestBodyUsed,
929
- byteLength: buffer.length,
930
- previewHex: previewHex(buffer, 64),
931
- magicFormats: detectMagicFormats(buffer),
932
- structuredFormats: detectStructuredFormats(buffer),
933
- encodingSignals: detectEncodingSignals(source, data, buffer),
934
- entropy,
935
- assessment: assessEntropy(entropy, buffer),
936
- topBytes: calculateByteFrequency(buffer).slice(0, 8)
937
- });
938
- } catch (error) {
939
- return fail("binary_detect_format", error);
940
- }
941
- }
942
- async handleBinaryDecode(args) {
943
- try {
944
- const data = argString(args, "data", "");
945
- const encoding = argEnum(args, "encoding", DECODE_ENCODING_SET);
946
- const outputFormat = argEnum(args, "outputFormat", OUTPUT_FORMAT_SET, "hex");
947
- if (!data) throw new Error("data is required");
948
- if (!encoding) throw new Error("encoding is required");
949
- if (encoding === "url") {
950
- const decoded = decodeUrl(data);
951
- if (outputFormat === "hex") {
952
- const raw = Buffer.from(decoded, "utf8");
953
- return ok({
954
- success: true,
955
- encoding,
956
- outputFormat,
957
- byteLength: raw.length,
958
- result: raw.toString("hex"),
959
- hexDump: hexDump(raw)
960
- });
961
- }
962
- if (outputFormat === "utf8") return ok({
963
- success: true,
964
- encoding,
965
- outputFormat,
966
- result: decoded
967
- });
968
- return ok({
969
- success: true,
970
- encoding,
971
- outputFormat,
972
- result: tryParseJson(decoded) ?? { text: decoded }
973
- });
974
- }
975
- const rawBuffer = encoding === "base64" ? decodeBase64String(data) : encoding === "hex" ? decodeHexString(data) : decodeBinaryAuto(data);
976
- if (encoding === "protobuf") {
977
- const parsed = parseProtobufMessage(rawBuffer, 0, 5);
978
- return renderDecodedOutput({
979
- encoding,
980
- outputFormat,
981
- buffer: rawBuffer,
982
- jsonValue: {
983
- fields: parsed.fields,
984
- bytesConsumed: parsed.bytesConsumed,
985
- error: parsed.error ?? null
986
- }
987
- });
988
- }
989
- if (encoding === "msgpack") return renderDecodedOutput({
990
- encoding,
991
- outputFormat,
992
- buffer: rawBuffer,
993
- jsonValue: decodeMsgPack(rawBuffer)
994
- });
995
- return renderDecodedOutput({
996
- encoding,
997
- outputFormat,
998
- buffer: rawBuffer
999
- });
1000
- } catch (error) {
1001
- return fail("binary_decode", error);
1002
- }
1003
- }
1004
- async handleBinaryEncode(args) {
1005
- try {
1006
- const data = argString(args, "data", "");
1007
- const inputFormat = argEnum(args, "inputFormat", INPUT_FORMAT_SET, "utf8");
1008
- const outputEncoding = argEnum(args, "outputEncoding", OUTPUT_ENCODING_SET, "base64");
1009
- if (!data) throw new Error("data is required");
1010
- let buffer;
1011
- if (inputFormat === "utf8") buffer = Buffer.from(data, "utf8");
1012
- else if (inputFormat === "hex") buffer = decodeHexString(data);
1013
- else {
1014
- const parsed = JSON.parse(data);
1015
- buffer = Buffer.from(JSON.stringify(parsed), "utf8");
1016
- }
1017
- const output = outputEncoding === "base64" ? buffer.toString("base64") : outputEncoding === "hex" ? buffer.toString("hex") : encodeUrlBytes(buffer);
1018
- return ok({
1019
- success: true,
1020
- inputFormat,
1021
- outputEncoding,
1022
- byteLength: buffer.length,
1023
- output
1024
- });
1025
- } catch (error) {
1026
- return fail("binary_encode", error);
1027
- }
1028
- }
1029
- async handleBinaryEntropyAnalysis(args) {
1030
- try {
1031
- const source = argEnum(args, "source", ENTROPY_SOURCE_SET, "raw");
1032
- const data = argString(args, "data");
1033
- const filePath = argString(args, "filePath");
1034
- if (source !== "file" && !data) throw new Error("data is required for non-file source");
1035
- const blockSizeRaw = argNumber(args, "blockSize", 256);
1036
- const blockSize = Math.max(16, Math.min(8192, Math.trunc(blockSizeRaw || 256)));
1037
- const buffer = await resolveBufferBySource({
1038
- source,
1039
- data,
1040
- filePath
1041
- });
1042
- const overallEntropy = calculateShannonEntropy(buffer);
1043
- return ok({
1044
- success: true,
1045
- source,
1046
- byteLength: buffer.length,
1047
- blockSize,
1048
- overallEntropy,
1049
- blockEntropies: calculateBlockEntropies(buffer, blockSize),
1050
- byteFrequency: calculateByteFrequency(buffer).slice(0, 20),
1051
- assessment: assessEntropy(overallEntropy, buffer)
1052
- });
1053
- } catch (error) {
1054
- return fail("binary_entropy_analysis", error);
1055
- }
1056
- }
1057
- async handleProtobufDecodeRaw(args) {
1058
- try {
1059
- const data = argString(args, "data", "");
1060
- if (!data) throw new Error("data is required");
1061
- const maxDepthRaw = argNumber(args, "maxDepth", 5);
1062
- const maxDepth = Math.max(1, Math.min(20, Math.trunc(maxDepthRaw || 5)));
1063
- const buffer = decodeBase64String(data);
1064
- const parsed = parseProtobufMessage(buffer, 0, maxDepth);
1065
- return ok({
1066
- success: parsed.error === void 0,
1067
- byteLength: buffer.length,
1068
- maxDepth,
1069
- parsedBytes: parsed.bytesConsumed,
1070
- fields: parsed.fields,
1071
- error: parsed.error ?? null
1072
- });
1073
- } catch (error) {
1074
- return fail("protobuf_decode_raw", error);
1075
- }
1076
- }
1077
- };
1078
- //#endregion
1079
- export { EncodingToolHandlers };