@jshookmcp/jshook 0.2.8 → 0.3.0

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 (162) hide show
  1. package/README.md +36 -5
  2. package/README.zh.md +36 -5
  3. package/dist/{AntiCheatDetector-S8VRj-dD.mjs → AntiCheatDetector-CqGDXmfc.mjs} +160 -54
  4. package/dist/{CodeInjector-4Z3ngPoX.mjs → CodeInjector-BdjRfNx7.mjs} +5 -5
  5. package/dist/ConsoleMonitor-DykL3IAw.mjs +2269 -0
  6. package/dist/{DarwinAPI-B8hg_yhz.mjs → DarwinAPI-ETyy0xyo.mjs} +1 -1
  7. package/dist/DetailedDataManager-HT49OrvF.mjs +217 -0
  8. package/dist/EventBus-DFKvADm3.mjs +141 -0
  9. package/dist/EvidenceGraphBridge-318Oi0Lf.mjs +153 -0
  10. package/dist/{ExtensionManager-D5-bO9D8.mjs → ExtensionManager-BDMsY2Dz.mjs} +27 -13
  11. package/dist/{FingerprintManager-BVxFJL2-.mjs → FingerprintManager-BN4UQWnX.mjs} +1 -1
  12. package/dist/{HardwareBreakpoint-DK1yjWkV.mjs → HardwareBreakpoint-Cc2AFq1Y.mjs} +3 -3
  13. package/dist/{HeapAnalyzer-CEbo10xU.mjs → HeapAnalyzer-DruMgsgj.mjs} +21 -21
  14. package/dist/HookGeneratorBuilders.core.generators.storage-CTbB4Lcx.mjs +566 -0
  15. package/dist/InstrumentationSession-DLH0vd-z.mjs +244 -0
  16. package/dist/{MemoryController-DdtnBdD4.mjs → MemoryController-CMtviNW_.mjs} +3 -3
  17. package/dist/{MemoryScanSession-RMixN3bX.mjs → MemoryScanSession-ITgb_NMi.mjs} +81 -78
  18. package/dist/{MemoryScanner-QjK4ld0B.mjs → MemoryScanner-CiL7Z3ey.mjs} +50 -21
  19. package/dist/{NativeMemoryManager.impl-CB6gJ0NM.mjs → NativeMemoryManager.impl-D9Lkovvn.mjs} +20 -56
  20. package/dist/{NativeMemoryManager.utils-BML4q1ry.mjs → NativeMemoryManager.utils-BBlAixF5.mjs} +1 -1
  21. package/dist/{PEAnalyzer-CK0xe0Fs.mjs → PEAnalyzer-DMQ44gen.mjs} +16 -16
  22. package/dist/PageController-BPJNqqBN.mjs +431 -0
  23. package/dist/{PointerChainEngine-Cd73qu5b.mjs → PointerChainEngine-K7wN8Z-w.mjs} +10 -7
  24. package/dist/PrerequisiteError-TuyZIs6n.mjs +20 -0
  25. package/dist/ProcessRegistry-zGg12QbE.mjs +74 -0
  26. package/dist/ResponseBuilder-CJXWmWNw.mjs +143 -0
  27. package/dist/ReverseEvidenceGraph-C02-gXOh.mjs +269 -0
  28. package/dist/ScriptManager-ZuWD-0Jg.mjs +3003 -0
  29. package/dist/{Speedhack-CeF0XmEz.mjs → Speedhack-D-z0umeT.mjs} +2 -2
  30. package/dist/{StructureAnalyzer-D4GkMduU.mjs → StructureAnalyzer-Cav5AVSL.mjs} +9 -6
  31. package/dist/ToolCatalog-5OJdMiF0.mjs +582 -0
  32. package/dist/ToolError-jh9whhMd.mjs +15 -0
  33. package/dist/ToolProbe-DbCFGyrg.mjs +45 -0
  34. package/dist/ToolRegistry-B9krbTtI.mjs +180 -0
  35. package/dist/ToolRouter.policy-BGDAGyeH.mjs +344 -0
  36. package/dist/TraceRecorder-B41Z5XBj.mjs +1286 -0
  37. package/dist/{Win32API-Bc0QnQsN.mjs → Win32API-C2kjj0ze.mjs} +19 -13
  38. package/dist/{Win32Debug-DUHt9XUn.mjs → Win32Debug-CKrGOTpo.mjs} +3 -3
  39. package/dist/WorkflowEngine-DJ6M4opp.mjs +569 -0
  40. package/dist/analysis-BHeJW2Nb.mjs +1234 -0
  41. package/dist/antidebug-BRKeyt27.mjs +1081 -0
  42. package/dist/artifactRetention-CPXkUJXp.mjs +598 -0
  43. package/dist/artifacts-DkfosXH3.mjs +59 -0
  44. package/dist/authorization-schema-DRqyJMSk.mjs +31 -0
  45. package/dist/betterSqlite3-DLSBZodi.mjs +74 -0
  46. package/dist/binary-instrument--V3MAhJ4.mjs +971 -0
  47. package/dist/bind-helpers-ClV34xdn.mjs +42 -0
  48. package/dist/boringssl-inspector-Bo_LOLaS.mjs +180 -0
  49. package/dist/browser-Dx3_S2cG.mjs +4369 -0
  50. package/dist/capabilities-CcHlvWgK.mjs +33 -0
  51. package/dist/concurrency-Drev_Vz9.mjs +41 -0
  52. package/dist/{constants-CCvsN80K.mjs → constants-CDZLOoVv.mjs} +105 -48
  53. package/dist/coordination-DgItD9DL.mjs +259 -0
  54. package/dist/debugger-RS3RSAqs.mjs +1288 -0
  55. package/dist/definitions-BEoYofW5.mjs +47 -0
  56. package/dist/definitions-BRaefg3u.mjs +365 -0
  57. package/dist/definitions-BbkvZkiv.mjs +96 -0
  58. package/dist/definitions-BtWSHJ3o.mjs +17 -0
  59. package/dist/definitions-C1gCHO0i.mjs +43 -0
  60. package/dist/definitions-CDOg_b-l.mjs +138 -0
  61. package/dist/definitions-CVPD9hzZ.mjs +54 -0
  62. package/dist/definitions-Cea8Lgl7.mjs +94 -0
  63. package/dist/definitions-DAgIyjxM.mjs +10 -0
  64. package/dist/definitions-DJA27nsL.mjs +66 -0
  65. package/dist/definitions-DKPFU3LW.mjs +25 -0
  66. package/dist/definitions-DPRpZQ96.mjs +47 -0
  67. package/dist/definitions-DUE5gmdn.mjs +18 -0
  68. package/dist/definitions-DYVjOtxa.mjs +26 -0
  69. package/dist/definitions-DcYLVLCo.mjs +37 -0
  70. package/dist/definitions-Pp5LI2H4.mjs +27 -0
  71. package/dist/definitions-j9KdHVNR.mjs +14 -0
  72. package/dist/definitions-uzkjBwa7.mjs +258 -0
  73. package/dist/definitions-va-AnLuQ.mjs +28 -0
  74. package/dist/encoding-DJeqHmpd.mjs +1079 -0
  75. package/dist/evidence-graph-bridge-DcYizFk2.mjs +136 -0
  76. package/dist/{factory-CibqTNC8.mjs → factory-C90tBff6.mjs} +41 -56
  77. package/dist/flat-target-session-Dgax2Cy3.mjs +29 -0
  78. package/dist/graphql-CoHrhweh.mjs +1197 -0
  79. package/dist/handlers-4jmR0nMs.mjs +898 -0
  80. package/dist/handlers-BAHPxcch.mjs +789 -0
  81. package/dist/handlers-BOs9b907.mjs +2600 -0
  82. package/dist/handlers-BWXEy6ef.mjs +917 -0
  83. package/dist/handlers-Bndn6QvE.mjs +111 -0
  84. package/dist/handlers-BqC4bD4s.mjs +681 -0
  85. package/dist/handlers-BtYq60bM2.mjs +276 -0
  86. package/dist/handlers-BzgcB4iv.mjs +799 -0
  87. package/dist/handlers-CRyRWj2b.mjs +859 -0
  88. package/dist/handlers-CVv2H1uq.mjs +592 -0
  89. package/dist/handlers-Dl5a7JS4.mjs +572 -0
  90. package/dist/handlers-Dx2d7jt7.mjs +2537 -0
  91. package/dist/handlers-Dz9PYsCa.mjs +2805 -0
  92. package/dist/handlers-HujRKC3b.mjs +661 -0
  93. package/dist/handlers.impl-XWXkQfyi.mjs +807 -0
  94. package/dist/hooks-B1B8NRHL.mjs +898 -0
  95. package/dist/index.mjs +491 -259
  96. package/dist/{logger-BmWzC2lM.mjs → logger-Dh_xb7_2.mjs} +14 -6
  97. package/dist/maintenance-PRMkLVRW.mjs +835 -0
  98. package/dist/manifest-67Bok-Si.mjs +58 -0
  99. package/dist/manifest-6lNTMZAB2.mjs +87 -0
  100. package/dist/manifest-B2duEHiH.mjs +90 -0
  101. package/dist/manifest-B6EY9Vm8.mjs +57 -0
  102. package/dist/manifest-B6nKSbyY.mjs +95 -0
  103. package/dist/manifest-BL8AQNPF.mjs +106 -0
  104. package/dist/manifest-BSZvJJmV.mjs +47 -0
  105. package/dist/manifest-BU7qzUyX.mjs +418 -0
  106. package/dist/manifest-Bl62e8WK.mjs +49 -0
  107. package/dist/manifest-Bo5cXjdt.mjs +82 -0
  108. package/dist/manifest-BpS4gtUK.mjs +1347 -0
  109. package/dist/manifest-Bv65_e2W.mjs +101 -0
  110. package/dist/manifest-BytNIF4Z.mjs +117 -0
  111. package/dist/manifest-C-xtsjS3.mjs +81 -0
  112. package/dist/manifest-CDYl7OhA.mjs +66 -0
  113. package/dist/manifest-CRZ3xmkD.mjs +61 -0
  114. package/dist/manifest-CoW6u4Tp.mjs +132 -0
  115. package/dist/manifest-Cq5zN_8A.mjs +50 -0
  116. package/dist/manifest-D7YZM_2e.mjs +194 -0
  117. package/dist/manifest-DE_VrAeQ.mjs +314 -0
  118. package/dist/manifest-DGsXSCpT.mjs +39 -0
  119. package/dist/manifest-DJ2vfEuW.mjs +156 -0
  120. package/dist/manifest-DPXDYhEu.mjs +80 -0
  121. package/dist/manifest-Dd4fQb0a.mjs +322 -0
  122. package/dist/manifest-Deq6opGg.mjs +223 -0
  123. package/dist/manifest-DfJTafJK.mjs +37 -0
  124. package/dist/manifest-DgOdgN_j.mjs +50 -0
  125. package/dist/manifest-DlbMW4v4.mjs +47 -0
  126. package/dist/manifest-DmVfbH0w.mjs +374 -0
  127. package/dist/manifest-Dog6Ddjr.mjs +109 -0
  128. package/dist/manifest-DvgU5FWb.mjs +58 -0
  129. package/dist/manifest-HsfDBs7j.mjs +50 -0
  130. package/dist/manifest-I8oQHvCG.mjs +186 -0
  131. package/dist/manifest-NvH_a-av.mjs +786 -0
  132. package/dist/manifest-cEJU1v0Z.mjs +129 -0
  133. package/dist/manifest-wOl5XLB12.mjs +112 -0
  134. package/dist/modules-tZozf0LQ.mjs +10635 -0
  135. package/dist/mojo-ipc-DXNEXEqb.mjs +640 -0
  136. package/dist/network-CPVvwvFg.mjs +3852 -0
  137. package/dist/{artifacts-BbdOMET5.mjs → outputPaths-um7lCRY3.mjs} +219 -216
  138. package/dist/parse-args-B4cY5Vx5.mjs +39 -0
  139. package/dist/platform-CYeFoTWp.mjs +2161 -0
  140. package/dist/process-BTbgcVc6.mjs +1306 -0
  141. package/dist/proxy-r8YN6nP1.mjs +192 -0
  142. package/dist/registry-Bl8ZQW61.mjs +34 -0
  143. package/dist/response-CWhh2aLo.mjs +34 -0
  144. package/dist/server/plugin-api.mjs +2 -2
  145. package/dist/shared-state-board-BoZnSoj-.mjs +586 -0
  146. package/dist/sourcemap-BIDHUVXy.mjs +934 -0
  147. package/dist/ssrf-policy-Dsqd-DTX.mjs +166 -0
  148. package/dist/streaming-Dal6utPp.mjs +725 -0
  149. package/dist/tool-builder-BHJp32mV.mjs +186 -0
  150. package/dist/transform-DRVgGG90.mjs +1011 -0
  151. package/dist/types-Bx92KJfT.mjs +4 -0
  152. package/dist/wasm-BYx5UOeG.mjs +1044 -0
  153. package/dist/webcrack-Be0_FccV.mjs +747 -0
  154. package/dist/workflow-BpuKEtvn.mjs +725 -0
  155. package/package.json +82 -49
  156. package/dist/ExtensionManager-CPTJhHFg.mjs +0 -2
  157. package/dist/ToolCatalog-Bq4V2sbJ.mjs +0 -67201
  158. package/dist/{CacheAdapters-CzFNpD9a.mjs → CacheAdapters-jJFy20G-.mjs} +0 -0
  159. package/dist/{StealthVerifier-BzBCFiwx.mjs → StealthVerifier-BWmPgQsv.mjs} +0 -0
  160. package/dist/{VersionDetector-CNXcvD46.mjs → VersionDetector-K3V4vGsw.mjs} +0 -0
  161. package/dist/{formatAddress-ChCSIRWT.mjs → formatAddress-nnMvEohD.mjs} +0 -0
  162. package/dist/{types-BBjOqye-.mjs → types-DDBWs9UP.mjs} +1 -1
@@ -0,0 +1,166 @@
1
+ import { BlockList, isIP } from "node:net";
2
+ import { lookup } from "node:dns/promises";
3
+ //#region src/server/domains/network/ssrf-policy.ts
4
+ const RESTRICTED_IPV4_BLOCKLIST = new BlockList();
5
+ const RESTRICTED_IPV6_BLOCKLIST = new BlockList();
6
+ const RESTRICTED_IPV4_SUBNETS = [
7
+ ["0.0.0.0", 8],
8
+ ["10.0.0.0", 8],
9
+ ["100.64.0.0", 10],
10
+ ["127.0.0.0", 8],
11
+ ["169.254.0.0", 16],
12
+ ["172.16.0.0", 12],
13
+ ["192.168.0.0", 16]
14
+ ];
15
+ const RESTRICTED_IPV6_SUBNETS = [
16
+ ["::", 128],
17
+ ["::1", 128],
18
+ ["::ffff:0:0", 96],
19
+ ["::ffff:0:0:0", 96],
20
+ ["64:ff9b::", 96],
21
+ ["100::", 64],
22
+ ["fc00::", 7],
23
+ ["fe80::", 10]
24
+ ];
25
+ for (const [address, prefix] of RESTRICTED_IPV4_SUBNETS) RESTRICTED_IPV4_BLOCKLIST.addSubnet(address, prefix, "ipv4");
26
+ for (const [address, prefix] of RESTRICTED_IPV6_SUBNETS) RESTRICTED_IPV6_BLOCKLIST.addSubnet(address, prefix, "ipv6");
27
+ function normalizeHost(host) {
28
+ return host.trim().replace(/^\[|\]$/g, "").toLowerCase();
29
+ }
30
+ function getHostAddressFamily(host) {
31
+ const family = isIP(host);
32
+ if (family === 4) return "ipv4";
33
+ if (family === 6) return "ipv6";
34
+ return null;
35
+ }
36
+ function parsePolicyExpiry(expiresAt) {
37
+ if (typeof expiresAt !== "string") return {
38
+ expiresAt: null,
39
+ expiresAtMs: null
40
+ };
41
+ const trimmed = expiresAt.trim();
42
+ if (trimmed.length === 0) return {
43
+ expiresAt: null,
44
+ expiresAtMs: null
45
+ };
46
+ const parsed = Date.parse(trimmed);
47
+ if (!Number.isFinite(parsed)) throw new Error(`Invalid authorization expiry "${expiresAt}"`);
48
+ return {
49
+ expiresAt: trimmed,
50
+ expiresAtMs: parsed
51
+ };
52
+ }
53
+ function addAuthorizedCidrs(allowedCidrs, ipv4AllowBlockList, ipv6AllowBlockList) {
54
+ const normalizedCidrs = [];
55
+ for (const rawCidr of allowedCidrs) {
56
+ const trimmed = rawCidr.trim();
57
+ if (trimmed.length === 0) continue;
58
+ const slashIndex = trimmed.lastIndexOf("/");
59
+ if (slashIndex <= 0 || slashIndex === trimmed.length - 1) throw new Error(`Invalid authorization CIDR "${rawCidr}"`);
60
+ const address = trimmed.slice(0, slashIndex).trim();
61
+ const prefixText = trimmed.slice(slashIndex + 1).trim();
62
+ const prefix = Number(prefixText);
63
+ const family = getHostAddressFamily(address);
64
+ if (!Number.isInteger(prefix) || !family) throw new Error(`Invalid authorization CIDR "${rawCidr}"`);
65
+ if (family === "ipv4" && (prefix < 0 || prefix > 32)) throw new Error(`Invalid authorization CIDR "${rawCidr}"`);
66
+ if (family === "ipv6" && (prefix < 0 || prefix > 128)) throw new Error(`Invalid authorization CIDR "${rawCidr}"`);
67
+ if (family === "ipv4") ipv4AllowBlockList.addSubnet(address, prefix, family);
68
+ else ipv6AllowBlockList.addSubnet(address, prefix, family);
69
+ normalizedCidrs.push(`${normalizeHost(address)}/${prefix}`);
70
+ }
71
+ return normalizedCidrs;
72
+ }
73
+ function isAddressAuthorized(policy, address) {
74
+ if (!policy || !address) return false;
75
+ const normalized = normalizeHost(address);
76
+ if (policy.allowedHosts.has(normalized)) return true;
77
+ const family = getHostAddressFamily(normalized);
78
+ if (!family) return false;
79
+ return family === "ipv4" ? policy.ipv4AllowBlockList.check(normalized, family) : policy.ipv6AllowBlockList.check(normalized, family);
80
+ }
81
+ function isLocalSsrfBypassEnabled() {
82
+ return process.env.ALLOW_LOCAL_SSRF === "true";
83
+ }
84
+ function isLoopbackHost(host) {
85
+ const normalized = normalizeHost(host);
86
+ return normalized === "localhost" || normalized === "127.0.0.1" || normalized === "::1";
87
+ }
88
+ function isPrivateHost(host) {
89
+ const normalized = normalizeHost(host);
90
+ if (normalized === "localhost") return true;
91
+ const family = getHostAddressFamily(normalized);
92
+ if (!family) return false;
93
+ return family === "ipv4" ? RESTRICTED_IPV4_BLOCKLIST.check(normalized, family) : RESTRICTED_IPV6_BLOCKLIST.check(normalized, family);
94
+ }
95
+ function createNetworkAuthorizationPolicy(input) {
96
+ if (!input) return;
97
+ const allowedHosts = new Set((input.allowedHosts ?? []).map((host) => normalizeHost(host)).filter((host) => host.length > 0));
98
+ const ipv4AllowBlockList = new BlockList();
99
+ const ipv6AllowBlockList = new BlockList();
100
+ const normalizedCidrs = addAuthorizedCidrs(input.allowedCidrs ?? [], ipv4AllowBlockList, ipv6AllowBlockList);
101
+ const { expiresAt, expiresAtMs } = parsePolicyExpiry(input.expiresAt);
102
+ const reason = typeof input.reason === "string" ? input.reason.trim() : "";
103
+ return {
104
+ allowedHosts,
105
+ allowedCidrs: normalizedCidrs,
106
+ allowPrivateNetwork: input.allowPrivateNetwork === true,
107
+ allowInsecureHttp: input.allowInsecureHttp === true,
108
+ expiresAt,
109
+ expiresAtMs,
110
+ reason: reason.length > 0 ? reason : null,
111
+ ipv4AllowBlockList,
112
+ ipv6AllowBlockList
113
+ };
114
+ }
115
+ function hasAuthorizedTargets(policy) {
116
+ if (!policy) return false;
117
+ return policy.allowedHosts.size > 0 || policy.allowedCidrs.length > 0;
118
+ }
119
+ function isNetworkAuthorizationExpired(policy, now = Date.now()) {
120
+ if (!policy || policy.expiresAtMs === null) return false;
121
+ return now > policy.expiresAtMs;
122
+ }
123
+ async function resolveNetworkTarget(url) {
124
+ const parsedUrl = new URL(url);
125
+ const hostname = normalizeHost(parsedUrl.hostname);
126
+ const isIpLiteral = getHostAddressFamily(hostname) !== null;
127
+ if (isIpLiteral) return {
128
+ parsedUrl,
129
+ hostname,
130
+ resolvedAddress: hostname,
131
+ isIpLiteral
132
+ };
133
+ if (hostname === "localhost") return {
134
+ parsedUrl,
135
+ hostname,
136
+ resolvedAddress: "127.0.0.1",
137
+ isIpLiteral
138
+ };
139
+ const { address } = await lookup(hostname);
140
+ return {
141
+ parsedUrl,
142
+ hostname,
143
+ resolvedAddress: normalizeHost(address),
144
+ isIpLiteral
145
+ };
146
+ }
147
+ function isAuthorizedNetworkTarget(policy, target) {
148
+ if (!policy) return false;
149
+ return isAddressAuthorized(policy, target.hostname) || isAddressAuthorized(policy, target.resolvedAddress);
150
+ }
151
+ async function isSsrfTarget(url, authorization) {
152
+ try {
153
+ const policy = createNetworkAuthorizationPolicy(authorization);
154
+ if (isNetworkAuthorizationExpired(policy)) return true;
155
+ const parsed = new URL(url);
156
+ if (!policy && isLocalSsrfBypassEnabled()) return false;
157
+ const target = await resolveNetworkTarget(parsed.toString());
158
+ if (!(isPrivateHost(target.hostname) || isPrivateHost(target.resolvedAddress ?? ""))) return false;
159
+ if (!policy?.allowPrivateNetwork) return true;
160
+ return !isAuthorizedNetworkTarget(policy, target);
161
+ } catch {
162
+ return true;
163
+ }
164
+ }
165
+ //#endregion
166
+ export { isLoopbackHost as a, isSsrfTarget as c, isLocalSsrfBypassEnabled as i, resolveNetworkTarget as l, hasAuthorizedTargets as n, isNetworkAuthorizationExpired as o, isAuthorizedNetworkTarget as r, isPrivateHost as s, createNetworkAuthorizationPolicy as t };