shield360 1.1.0 → 1.2.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 (393) hide show
  1. package/README.md +330 -3
  2. package/dist/__tests__/build-info.test.js +8 -1
  3. package/dist/__tests__/build-info.test.js.map +1 -1
  4. package/dist/__tests__/code-location.test.js +1 -1
  5. package/dist/__tests__/masking.test.d.ts +1 -0
  6. package/dist/__tests__/masking.test.js +66 -0
  7. package/dist/__tests__/masking.test.js.map +1 -0
  8. package/dist/__tests__/register.e2e.test.d.ts +1 -0
  9. package/dist/__tests__/register.e2e.test.js +264 -0
  10. package/dist/__tests__/register.e2e.test.js.map +1 -0
  11. package/dist/__tests__/register.test.js +60 -0
  12. package/dist/__tests__/register.test.js.map +1 -1
  13. package/dist/agents/__tests__/agents.test.d.ts +1 -0
  14. package/dist/agents/__tests__/agents.test.js +529 -0
  15. package/dist/agents/__tests__/agents.test.js.map +1 -0
  16. package/dist/agents/index.d.ts +15 -0
  17. package/dist/agents/index.js +25 -0
  18. package/dist/agents/index.js.map +1 -0
  19. package/dist/agents/passport.d.ts +92 -0
  20. package/dist/agents/passport.js +301 -0
  21. package/dist/agents/passport.js.map +1 -0
  22. package/dist/agents/policy.d.ts +24 -0
  23. package/dist/agents/policy.js +93 -0
  24. package/dist/agents/policy.js.map +1 -0
  25. package/dist/agents/replay.d.ts +20 -0
  26. package/dist/agents/replay.js +47 -0
  27. package/dist/agents/replay.js.map +1 -0
  28. package/dist/agents/report.d.ts +30 -0
  29. package/dist/agents/report.js +93 -0
  30. package/dist/agents/report.js.map +1 -0
  31. package/dist/agents/types.d.ts +148 -0
  32. package/dist/agents/types.js +37 -0
  33. package/dist/agents/types.js.map +1 -0
  34. package/dist/agents/verifier.d.ts +33 -0
  35. package/dist/agents/verifier.js +276 -0
  36. package/dist/agents/verifier.js.map +1 -0
  37. package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
  38. package/dist/ai-security/__tests__/bench.test.js +50 -0
  39. package/dist/ai-security/__tests__/bench.test.js.map +1 -0
  40. package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
  41. package/dist/ai-security/__tests__/checks.test.js +248 -0
  42. package/dist/ai-security/__tests__/checks.test.js.map +1 -0
  43. package/dist/ai-security/__tests__/config.test.d.ts +1 -0
  44. package/dist/ai-security/__tests__/config.test.js +164 -0
  45. package/dist/ai-security/__tests__/config.test.js.map +1 -0
  46. package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
  47. package/dist/ai-security/__tests__/detection.test.js +114 -0
  48. package/dist/ai-security/__tests__/detection.test.js.map +1 -0
  49. package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
  50. package/dist/ai-security/__tests__/fixtures.js +30 -0
  51. package/dist/ai-security/__tests__/fixtures.js.map +1 -0
  52. package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
  53. package/dist/ai-security/__tests__/hooks.test.js +174 -0
  54. package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
  55. package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
  56. package/dist/ai-security/__tests__/stream.test.js +85 -0
  57. package/dist/ai-security/__tests__/stream.test.js.map +1 -0
  58. package/dist/ai-security/config.d.ts +94 -0
  59. package/dist/ai-security/config.js +241 -0
  60. package/dist/ai-security/config.js.map +1 -0
  61. package/dist/ai-security/context.d.ts +45 -0
  62. package/dist/ai-security/context.js +108 -0
  63. package/dist/ai-security/context.js.map +1 -0
  64. package/dist/ai-security/custom-kinds.d.ts +23 -0
  65. package/dist/ai-security/custom-kinds.js +97 -0
  66. package/dist/ai-security/custom-kinds.js.map +1 -0
  67. package/dist/ai-security/events.d.ts +77 -0
  68. package/dist/ai-security/events.js +153 -0
  69. package/dist/ai-security/events.js.map +1 -0
  70. package/dist/ai-security/hooks.d.ts +48 -0
  71. package/dist/ai-security/hooks.js +461 -0
  72. package/dist/ai-security/hooks.js.map +1 -0
  73. package/dist/ai-security/index.d.ts +209 -0
  74. package/dist/ai-security/index.js +587 -0
  75. package/dist/ai-security/index.js.map +1 -0
  76. package/dist/ai-security/injection-rules.json +1024 -0
  77. package/dist/ai-security/injection.d.ts +46 -0
  78. package/dist/ai-security/injection.js +635 -0
  79. package/dist/ai-security/injection.js.map +1 -0
  80. package/dist/ai-security/jailbreak.d.ts +38 -0
  81. package/dist/ai-security/jailbreak.js +73 -0
  82. package/dist/ai-security/jailbreak.js.map +1 -0
  83. package/dist/ai-security/limits.d.ts +84 -0
  84. package/dist/ai-security/limits.js +195 -0
  85. package/dist/ai-security/limits.js.map +1 -0
  86. package/dist/ai-security/mcp.d.ts +82 -0
  87. package/dist/ai-security/mcp.js +150 -0
  88. package/dist/ai-security/mcp.js.map +1 -0
  89. package/dist/ai-security/output.d.ts +107 -0
  90. package/dist/ai-security/output.js +390 -0
  91. package/dist/ai-security/output.js.map +1 -0
  92. package/dist/ai-security/policy.d.ts +125 -0
  93. package/dist/ai-security/policy.js +196 -0
  94. package/dist/ai-security/policy.js.map +1 -0
  95. package/dist/ai-security/rag.d.ts +70 -0
  96. package/dist/ai-security/rag.js +174 -0
  97. package/dist/ai-security/rag.js.map +1 -0
  98. package/dist/ai-security/tool-rules.json +203 -0
  99. package/dist/ai-security/tools.d.ts +46 -0
  100. package/dist/ai-security/tools.js +62 -0
  101. package/dist/ai-security/tools.js.map +1 -0
  102. package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
  103. package/dist/budgets/__tests__/budgets.test.js +134 -0
  104. package/dist/budgets/__tests__/budgets.test.js.map +1 -0
  105. package/dist/budgets/auto.d.ts +25 -0
  106. package/dist/budgets/auto.js +63 -0
  107. package/dist/budgets/auto.js.map +1 -0
  108. package/dist/budgets/index.d.ts +110 -0
  109. package/dist/budgets/index.js +239 -0
  110. package/dist/budgets/index.js.map +1 -0
  111. package/dist/customer/__tests__/customer.test.d.ts +1 -0
  112. package/dist/customer/__tests__/customer.test.js +155 -0
  113. package/dist/customer/__tests__/customer.test.js.map +1 -0
  114. package/dist/customer/index.d.ts +48 -0
  115. package/dist/customer/index.js +132 -0
  116. package/dist/customer/index.js.map +1 -0
  117. package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
  118. package/dist/feedback/__tests__/feedback.test.js +80 -0
  119. package/dist/feedback/__tests__/feedback.test.js.map +1 -0
  120. package/dist/feedback/index.d.ts +48 -0
  121. package/dist/feedback/index.js +97 -0
  122. package/dist/feedback/index.js.map +1 -0
  123. package/dist/flags/__tests__/flags.test.d.ts +1 -0
  124. package/dist/flags/__tests__/flags.test.js +301 -0
  125. package/dist/flags/__tests__/flags.test.js.map +1 -0
  126. package/dist/flags/client.d.ts +131 -0
  127. package/dist/flags/client.js +301 -0
  128. package/dist/flags/client.js.map +1 -0
  129. package/dist/flags/engine.d.ts +200 -0
  130. package/dist/flags/engine.js +677 -0
  131. package/dist/flags/engine.js.map +1 -0
  132. package/dist/flags/index.d.ts +4 -0
  133. package/dist/flags/index.js +16 -0
  134. package/dist/flags/index.js.map +1 -0
  135. package/dist/guard/__tests__/findings.test.js +1 -1
  136. package/dist/guard/__tests__/report.test.js +67 -0
  137. package/dist/guard/__tests__/report.test.js.map +1 -1
  138. package/dist/guard/heartbeat.d.ts +34 -0
  139. package/dist/guard/heartbeat.js +83 -0
  140. package/dist/guard/heartbeat.js.map +1 -0
  141. package/dist/guard/integration.d.ts +9 -0
  142. package/dist/guard/integration.js +4 -2
  143. package/dist/guard/integration.js.map +1 -1
  144. package/dist/guard/report.d.ts +24 -1
  145. package/dist/guard/report.js +67 -18
  146. package/dist/guard/report.js.map +1 -1
  147. package/dist/index.d.ts +88 -0
  148. package/dist/index.js +193 -2
  149. package/dist/index.js.map +1 -1
  150. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
  151. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
  152. package/dist/instrumentation/anthropic/wrapper.js +4 -0
  153. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  154. package/dist/instrumentation/openai/wrapper.js +6 -0
  155. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  156. package/dist/masking.d.ts +42 -0
  157. package/dist/masking.js +197 -0
  158. package/dist/masking.js.map +1 -0
  159. package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
  160. package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
  161. package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
  162. package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
  163. package/dist/otel/__tests__/app-logs.test.js +269 -0
  164. package/dist/otel/__tests__/app-logs.test.js.map +1 -0
  165. package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
  166. package/dist/otel/__tests__/log-auto.test.js +125 -0
  167. package/dist/otel/__tests__/log-auto.test.js.map +1 -0
  168. package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
  169. package/dist/otel/__tests__/log-bridges.test.js +170 -0
  170. package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
  171. package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
  172. package/dist/otel/__tests__/system-metrics.test.js +79 -0
  173. package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
  174. package/dist/otel/app-logs.d.ts +80 -0
  175. package/dist/otel/app-logs.js +195 -0
  176. package/dist/otel/app-logs.js.map +1 -0
  177. package/dist/otel/build-info.d.ts +2 -1
  178. package/dist/otel/build-info.js +3 -2
  179. package/dist/otel/build-info.js.map +1 -1
  180. package/dist/otel/events.d.ts +1 -0
  181. package/dist/otel/events.js +21 -12
  182. package/dist/otel/events.js.map +1 -1
  183. package/dist/otel/log-auto.d.ts +44 -0
  184. package/dist/otel/log-auto.js +200 -0
  185. package/dist/otel/log-auto.js.map +1 -0
  186. package/dist/otel/log-bridges.d.ts +54 -0
  187. package/dist/otel/log-bridges.js +307 -0
  188. package/dist/otel/log-bridges.js.map +1 -0
  189. package/dist/otel/system-metrics.d.ts +39 -0
  190. package/dist/otel/system-metrics.js +166 -0
  191. package/dist/otel/system-metrics.js.map +1 -0
  192. package/dist/otel/tracing.js +5 -1
  193. package/dist/otel/tracing.js.map +1 -1
  194. package/dist/protect/__tests__/protect.test.js +4 -0
  195. package/dist/protect/__tests__/protect.test.js.map +1 -1
  196. package/dist/protect/index.js +9 -4
  197. package/dist/protect/index.js.map +1 -1
  198. package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
  199. package/dist/rasp/__tests__/auto-http.test.js +136 -0
  200. package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
  201. package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
  202. package/dist/rasp/__tests__/baseline.test.js +86 -0
  203. package/dist/rasp/__tests__/baseline.test.js.map +1 -0
  204. package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
  205. package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
  206. package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
  207. package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
  208. package/dist/rasp/__tests__/capture-context.test.js +135 -0
  209. package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
  210. package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
  211. package/dist/rasp/__tests__/code-hook.test.js +218 -0
  212. package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
  213. package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
  214. package/dist/rasp/__tests__/config-client.test.js +283 -0
  215. package/dist/rasp/__tests__/config-client.test.js.map +1 -0
  216. package/dist/rasp/__tests__/corpus.d.ts +13 -0
  217. package/dist/rasp/__tests__/corpus.js +111 -0
  218. package/dist/rasp/__tests__/corpus.js.map +1 -0
  219. package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
  220. package/dist/rasp/__tests__/custom-rules.test.js +276 -0
  221. package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
  222. package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
  223. package/dist/rasp/__tests__/db-hook.test.js +438 -0
  224. package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
  225. package/dist/rasp/__tests__/deception.test.d.ts +1 -0
  226. package/dist/rasp/__tests__/deception.test.js +567 -0
  227. package/dist/rasp/__tests__/deception.test.js.map +1 -0
  228. package/dist/rasp/__tests__/detect.test.d.ts +1 -0
  229. package/dist/rasp/__tests__/detect.test.js +276 -0
  230. package/dist/rasp/__tests__/detect.test.js.map +1 -0
  231. package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
  232. package/dist/rasp/__tests__/esm-exports.test.js +20 -0
  233. package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
  234. package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
  235. package/dist/rasp/__tests__/fs-hook.test.js +241 -0
  236. package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
  237. package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
  238. package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
  239. package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
  240. package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
  241. package/dist/rasp/__tests__/hook-kit.js +139 -0
  242. package/dist/rasp/__tests__/hook-kit.js.map +1 -0
  243. package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
  244. package/dist/rasp/__tests__/http-hook.test.js +250 -0
  245. package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
  246. package/dist/rasp/__tests__/iast.test.d.ts +1 -0
  247. package/dist/rasp/__tests__/iast.test.js +361 -0
  248. package/dist/rasp/__tests__/iast.test.js.map +1 -0
  249. package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
  250. package/dist/rasp/__tests__/include-hook.test.js +122 -0
  251. package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
  252. package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
  253. package/dist/rasp/__tests__/middleware.test.js +302 -0
  254. package/dist/rasp/__tests__/middleware.test.js.map +1 -0
  255. package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
  256. package/dist/rasp/__tests__/process-hook.test.js +238 -0
  257. package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
  258. package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
  259. package/dist/rasp/__tests__/reporter.test.js +114 -0
  260. package/dist/rasp/__tests__/reporter.test.js.map +1 -0
  261. package/dist/rasp/__tests__/route.test.d.ts +1 -0
  262. package/dist/rasp/__tests__/route.test.js +46 -0
  263. package/dist/rasp/__tests__/route.test.js.map +1 -0
  264. package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
  265. package/dist/rasp/__tests__/rule-expr.test.js +151 -0
  266. package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
  267. package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
  268. package/dist/rasp/__tests__/rule-phases.test.js +271 -0
  269. package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
  270. package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
  271. package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
  272. package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
  273. package/dist/rasp/__tests__/targets.test.d.ts +1 -0
  274. package/dist/rasp/__tests__/targets.test.js +82 -0
  275. package/dist/rasp/__tests__/targets.test.js.map +1 -0
  276. package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
  277. package/dist/rasp/__tests__/template-hook.test.js +254 -0
  278. package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
  279. package/dist/rasp/__tests__/upload.test.d.ts +1 -0
  280. package/dist/rasp/__tests__/upload.test.js +81 -0
  281. package/dist/rasp/__tests__/upload.test.js.map +1 -0
  282. package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
  283. package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
  284. package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
  285. package/dist/rasp/auto-http.d.ts +6 -0
  286. package/dist/rasp/auto-http.js +194 -0
  287. package/dist/rasp/auto-http.js.map +1 -0
  288. package/dist/rasp/baseline.d.ts +35 -0
  289. package/dist/rasp/baseline.js +91 -0
  290. package/dist/rasp/baseline.js.map +1 -0
  291. package/dist/rasp/capture.d.ts +76 -0
  292. package/dist/rasp/capture.js +304 -0
  293. package/dist/rasp/capture.js.map +1 -0
  294. package/dist/rasp/config-client.d.ts +122 -0
  295. package/dist/rasp/config-client.js +337 -0
  296. package/dist/rasp/config-client.js.map +1 -0
  297. package/dist/rasp/context.d.ts +65 -0
  298. package/dist/rasp/context.js +68 -0
  299. package/dist/rasp/context.js.map +1 -0
  300. package/dist/rasp/custom-rules.d.ts +68 -0
  301. package/dist/rasp/custom-rules.js +222 -0
  302. package/dist/rasp/custom-rules.js.map +1 -0
  303. package/dist/rasp/data/default-rules.json +199 -0
  304. package/dist/rasp/data/default-sinks.json +4 -0
  305. package/dist/rasp/data/dnslog-domains.json +11 -0
  306. package/dist/rasp/deception.d.ts +70 -0
  307. package/dist/rasp/deception.js +220 -0
  308. package/dist/rasp/deception.js.map +1 -0
  309. package/dist/rasp/detect.d.ts +68 -0
  310. package/dist/rasp/detect.js +671 -0
  311. package/dist/rasp/detect.js.map +1 -0
  312. package/dist/rasp/engine.d.ts +107 -0
  313. package/dist/rasp/engine.js +330 -0
  314. package/dist/rasp/engine.js.map +1 -0
  315. package/dist/rasp/hooks/code.d.ts +20 -0
  316. package/dist/rasp/hooks/code.js +334 -0
  317. package/dist/rasp/hooks/code.js.map +1 -0
  318. package/dist/rasp/hooks/db.d.ts +48 -0
  319. package/dist/rasp/hooks/db.js +322 -0
  320. package/dist/rasp/hooks/db.js.map +1 -0
  321. package/dist/rasp/hooks/esm.d.ts +7 -0
  322. package/dist/rasp/hooks/esm.js +18 -0
  323. package/dist/rasp/hooks/esm.js.map +1 -0
  324. package/dist/rasp/hooks/fs.d.ts +3 -0
  325. package/dist/rasp/hooks/fs.js +206 -0
  326. package/dist/rasp/hooks/fs.js.map +1 -0
  327. package/dist/rasp/hooks/http.d.ts +4 -0
  328. package/dist/rasp/hooks/http.js +213 -0
  329. package/dist/rasp/hooks/http.js.map +1 -0
  330. package/dist/rasp/hooks/include.d.ts +9 -0
  331. package/dist/rasp/hooks/include.js +79 -0
  332. package/dist/rasp/hooks/include.js.map +1 -0
  333. package/dist/rasp/hooks/marks.d.ts +2 -0
  334. package/dist/rasp/hooks/marks.js +16 -0
  335. package/dist/rasp/hooks/marks.js.map +1 -0
  336. package/dist/rasp/hooks/process.d.ts +22 -0
  337. package/dist/rasp/hooks/process.js +191 -0
  338. package/dist/rasp/hooks/process.js.map +1 -0
  339. package/dist/rasp/hooks/sinks.d.ts +54 -0
  340. package/dist/rasp/hooks/sinks.js +329 -0
  341. package/dist/rasp/hooks/sinks.js.map +1 -0
  342. package/dist/rasp/hooks/template.d.ts +21 -0
  343. package/dist/rasp/hooks/template.js +152 -0
  344. package/dist/rasp/hooks/template.js.map +1 -0
  345. package/dist/rasp/iast-rules.d.ts +82 -0
  346. package/dist/rasp/iast-rules.js +240 -0
  347. package/dist/rasp/iast-rules.js.map +1 -0
  348. package/dist/rasp/iast-scope.d.ts +29 -0
  349. package/dist/rasp/iast-scope.js +54 -0
  350. package/dist/rasp/iast-scope.js.map +1 -0
  351. package/dist/rasp/iast.d.ts +81 -0
  352. package/dist/rasp/iast.js +272 -0
  353. package/dist/rasp/iast.js.map +1 -0
  354. package/dist/rasp/index.d.ts +52 -0
  355. package/dist/rasp/index.js +280 -0
  356. package/dist/rasp/index.js.map +1 -0
  357. package/dist/rasp/lexers.d.ts +32 -0
  358. package/dist/rasp/lexers.js +444 -0
  359. package/dist/rasp/lexers.js.map +1 -0
  360. package/dist/rasp/middleware.d.ts +155 -0
  361. package/dist/rasp/middleware.js +568 -0
  362. package/dist/rasp/middleware.js.map +1 -0
  363. package/dist/rasp/model-output.d.ts +14 -0
  364. package/dist/rasp/model-output.js +107 -0
  365. package/dist/rasp/model-output.js.map +1 -0
  366. package/dist/rasp/normalize.d.ts +23 -0
  367. package/dist/rasp/normalize.js +140 -0
  368. package/dist/rasp/normalize.js.map +1 -0
  369. package/dist/rasp/reporter.d.ts +60 -0
  370. package/dist/rasp/reporter.js +230 -0
  371. package/dist/rasp/reporter.js.map +1 -0
  372. package/dist/rasp/rule-expr.d.ts +236 -0
  373. package/dist/rasp/rule-expr.js +1253 -0
  374. package/dist/rasp/rule-expr.js.map +1 -0
  375. package/dist/rasp/template.d.ts +53 -0
  376. package/dist/rasp/template.js +336 -0
  377. package/dist/rasp/template.js.map +1 -0
  378. package/dist/rasp/types.d.ts +110 -0
  379. package/dist/rasp/types.js +51 -0
  380. package/dist/rasp/types.js.map +1 -0
  381. package/dist/rasp/vpatch.d.ts +55 -0
  382. package/dist/rasp/vpatch.js +120 -0
  383. package/dist/rasp/vpatch.js.map +1 -0
  384. package/dist/register.js +52 -11
  385. package/dist/register.js.map +1 -1
  386. package/dist/semantic-convention.d.ts +2 -0
  387. package/dist/semantic-convention.js +5 -0
  388. package/dist/semantic-convention.js.map +1 -1
  389. package/dist/types.d.ts +75 -1
  390. package/dist/zero-code.d.ts +8 -0
  391. package/dist/zero-code.js +38 -0
  392. package/dist/zero-code.js.map +1 -0
  393. package/package.json +18 -2
@@ -0,0 +1,568 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lowerHeaders = void 0;
4
+ exports.isRaspBlocked = isRaspBlocked;
5
+ exports.sendBlocked = sendBlocked;
6
+ exports.blockedResponse = blockedResponse;
7
+ exports.sendNotFound = sendNotFound;
8
+ exports.frameworkServes = frameworkServes;
9
+ exports.sendExpressNotFound = sendExpressNotFound;
10
+ exports.raspExpress = raspExpress;
11
+ exports.raspExpressErrorHandler = raspExpressErrorHandler;
12
+ exports.raspFastify = raspFastify;
13
+ exports.raspKoa = raspKoa;
14
+ exports.raspHttp = raspHttp;
15
+ exports.recordRequestBody = recordRequestBody;
16
+ exports.withRasp = withRasp;
17
+ const capture_1 = require("./capture");
18
+ Object.defineProperty(exports, "lowerHeaders", { enumerable: true, get: function () { return capture_1.lowerHeaders; } });
19
+ const context_1 = require("./context");
20
+ const deception_1 = require("./deception");
21
+ const engine_1 = require("./engine");
22
+ const types_1 = require("./types");
23
+ function isRaspBlocked(e) {
24
+ return e instanceof types_1.RaspBlockedError;
25
+ }
26
+ const BLOCK_HEADERS = { 'Content-Type': 'application/json', 'Cache-Control': 'no-store' };
27
+ /** Writes the 403 on a Node response (no-op once the headers are out). */
28
+ function sendBlocked(res, e) {
29
+ try {
30
+ if (res.headersSent || res.writableEnded) {
31
+ if (!res.writableEnded)
32
+ res.end();
33
+ return;
34
+ }
35
+ res.statusCode = 403;
36
+ for (const [k, v] of Object.entries(BLOCK_HEADERS))
37
+ res.setHeader(k, v);
38
+ res.end(JSON.stringify((0, types_1.blockBody)(e)));
39
+ }
40
+ catch {
41
+ // the response is already gone
42
+ }
43
+ }
44
+ /** The 403 as a fetch Response (Next.js and other fetch-style handlers). */
45
+ function blockedResponse(e) {
46
+ return new Response(JSON.stringify((0, types_1.blockBody)(e)), { status: 403, headers: BLOCK_HEADERS });
47
+ }
48
+ /** The client address: the framework's own (Express `req.ip` honors `trust proxy`), else the socket's peer. */
49
+ const ipOf = (own, req) => {
50
+ const v = typeof own === 'string' && own ? own : req?.socket?.remoteAddress;
51
+ return typeof v === 'string' && v ? v : undefined;
52
+ };
53
+ /** Deception, unless the zero-code capture already ran it for this request (it answers decoys itself). */
54
+ function deceive(r) {
55
+ return (0, context_1.currentContext)()?.deception ? {} : (0, deception_1.checkDeception)(r);
56
+ }
57
+ /**
58
+ * The 404 where a framework has no not-found of its own (raw `http`, the
59
+ * zero-code capture): `404 Not Found` as plain text.
60
+ */
61
+ function sendNotFound(res) {
62
+ try {
63
+ if (res.headersSent || res.writableEnded) {
64
+ if (!res.writableEnded)
65
+ res.end();
66
+ return;
67
+ }
68
+ res.statusCode = 404;
69
+ res.setHeader('Content-Type', 'text/plain; charset=utf-8');
70
+ res.setHeader('Content-Length', '9');
71
+ res.end('Not Found');
72
+ }
73
+ catch {
74
+ // the response is already gone
75
+ }
76
+ }
77
+ const FRAMEWORK_SERVER = Symbol.for('shield360.rasp.frameworkServer');
78
+ /** Notes that a framework adapter serves this server, so the zero-code capture leaves deception to it. */
79
+ function markFrameworkServer(server) {
80
+ try {
81
+ if (server && typeof server === 'object' && !server[FRAMEWORK_SERVER]) {
82
+ Object.defineProperty(server, FRAMEWORK_SERVER, { value: true, configurable: true });
83
+ }
84
+ }
85
+ catch {
86
+ // best effort
87
+ }
88
+ }
89
+ const socketServer = (req) => req?.socket?.server;
90
+ /**
91
+ * Whether a server's `request` listener is a framework app, which resolves the
92
+ * client address itself (`trust proxy`) and has its own not-found: an Express
93
+ * 4/5 app (the app function, with `handle`, `use`, `set` and `settings`), Koa's
94
+ * `callback()` (`handleRequest`) or Fastify's router entry (`preRouting`); the
95
+ * last two are bare closures, so only their names tell. A server an adapter
96
+ * already served (`raspFastify` notes its server when registered, the others
97
+ * on their first request) counts too, which covers a renamed or wrapped app.
98
+ */
99
+ function frameworkServes(server) {
100
+ try {
101
+ const s = server;
102
+ if (!s)
103
+ return false;
104
+ if (s[FRAMEWORK_SERVER])
105
+ return true;
106
+ for (const raw of s.rawListeners?.('request') ?? []) {
107
+ // once() listeners are wrapped; the app is the wrapper's `listener`.
108
+ const l = raw.listener ?? raw;
109
+ if (typeof l !== 'function')
110
+ continue;
111
+ const o = l;
112
+ if (typeof o.handle === 'function' && typeof o.use === 'function' && typeof o.set === 'function' && o.settings && typeof o.settings === 'object')
113
+ return true;
114
+ if (l.name === 'handleRequest' || l.name === 'preRouting')
115
+ return true;
116
+ }
117
+ }
118
+ catch {
119
+ // unknown: treat as plain
120
+ }
121
+ return false;
122
+ }
123
+ const contentTypeOf = (h) => {
124
+ const v = h?.['content-type'];
125
+ return typeof v === 'string' ? v : undefined;
126
+ };
127
+ /**
128
+ * Starts a request context. Returns the context, `blocked` with the error
129
+ * when a virtual patch blocks, or undefined when capture failed (fail open).
130
+ * `noBody` says the request has no body at all (its body is known, empty).
131
+ */
132
+ function begin(make, body, noBody) {
133
+ let ctx;
134
+ try {
135
+ ctx = make();
136
+ const b = body();
137
+ if (b && b.body !== undefined && b.body !== null)
138
+ (0, capture_1.captureBody)(ctx, b);
139
+ else {
140
+ // A body that shows up anyway (an adapter that sent no length) is still captured late.
141
+ (0, capture_1.captureLater)(ctx, body);
142
+ if (noBody?.())
143
+ (0, capture_1.captureNoBody)(ctx);
144
+ }
145
+ (0, capture_1.runVirtualPatches)(ctx);
146
+ return { ctx };
147
+ }
148
+ catch (e) {
149
+ if (e instanceof types_1.RaspBlockedError)
150
+ return { blocked: e };
151
+ return { ctx: undefined };
152
+ }
153
+ }
154
+ const URL_UNSAFE = /(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;
155
+ const SURROGATE = /([\uD800-\uDBFF][\uDC00-\uDFFF])|[\uD800-\uDFFF]/g;
156
+ const HTML_ESCAPES = { '"': '&quot;', '&': '&amp;', "'": '&#39;', '<': '&lt;', '>': '&gt;' };
157
+ /**
158
+ * Express's own answer to an unknown path, byte for byte: finalhandler's 404
159
+ * (`Cannot GET /path` in its HTML page, with its security headers), which
160
+ * Express 4 and 5 send when no route matches. It is written here rather than
161
+ * reached with `next('router')`: that only leaves the router the middleware
162
+ * is mounted on, so mounted on a sub-router it would go on to the parent's
163
+ * handlers, and at the app level it skips the app's own 404 middleware just
164
+ * the same. An app with its own 404 page passes `raspExpress({ notFound })`.
165
+ */
166
+ function sendExpressNotFound(req, res) {
167
+ try {
168
+ if (res.headersSent || res.writableEnded) {
169
+ if (!res.writableEnded)
170
+ res.end();
171
+ return;
172
+ }
173
+ // finalhandler: 'Cannot ' + method + ' ' + encodeUrl(pathname of the original URL), HTML-escaped.
174
+ const target = req.originalUrl || req.url || '/';
175
+ const end = target.search(/[?#]/);
176
+ const path = (end >= 0 ? target.slice(0, end) : target).replace(SURROGATE, (_, pair) => pair || '\uFFFD').replace(URL_UNSAFE, encodeURI);
177
+ const message = `Cannot ${req.method} ${path}`
178
+ .replace(/["&'<>]/g, (c) => HTML_ESCAPES[c])
179
+ .replace(/\n/g, '<br>')
180
+ .replace(/ {2}/g, ' &nbsp;');
181
+ const body = `<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>Error</title>\n</head>\n<body>\n<pre>${message}</pre>\n</body>\n</html>\n`;
182
+ res.statusCode = 404;
183
+ if (req.httpVersionMajor < 2)
184
+ res.statusMessage = 'Not Found';
185
+ res.removeHeader('Content-Encoding');
186
+ res.removeHeader('Content-Language');
187
+ res.removeHeader('Content-Range');
188
+ res.setHeader('Content-Security-Policy', "default-src 'none'");
189
+ res.setHeader('X-Content-Type-Options', 'nosniff');
190
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
191
+ res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'));
192
+ if (req.method === 'HEAD')
193
+ res.end();
194
+ else
195
+ res.end(body, 'utf8');
196
+ }
197
+ catch {
198
+ // the response is already gone
199
+ }
200
+ }
201
+ /**
202
+ * Express (4 and 5). Register it after the body parsers so the body is seen
203
+ * before the handler; registered earlier, the body is still captured when a
204
+ * sink first reads the inputs.
205
+ *
206
+ * app.use(express.json());
207
+ * app.use(raspExpress());
208
+ * ...routes...
209
+ * app.use(raspExpressErrorHandler());
210
+ */
211
+ function raspExpress(options = {}) {
212
+ return function shield360Rasp(req, res, next) {
213
+ if (!(0, engine_1.isActive)())
214
+ return next();
215
+ markFrameworkServer(socketServer(req));
216
+ // The full target the client sent (`originalUrl`: a router mount does not strip it).
217
+ const d = deceive({ framework: 'express', method: req.method || 'GET', url: req.originalUrl || req.url || '/', ip: ipOf(req.ip, req) });
218
+ if (d.notFound) {
219
+ try {
220
+ if (options.notFound)
221
+ return options.notFound(req, res);
222
+ }
223
+ catch {
224
+ // the app's page failed: Express's own 404 below
225
+ }
226
+ return sendExpressNotFound(req, res);
227
+ }
228
+ if (d.blocked)
229
+ return sendBlocked(res, d.blocked);
230
+ const r = begin(() => (0, capture_1.captureRequest)({
231
+ framework: 'express',
232
+ method: req.method || 'GET',
233
+ url: req.originalUrl || req.url || '/',
234
+ headers: req.headers,
235
+ query: req.query,
236
+ params: req.params,
237
+ ip: ipOf(req.ip, req),
238
+ }), () => {
239
+ const files = req.files ?? req.file;
240
+ return req.body === undefined && files === undefined ? undefined : { body: req.body ?? {}, contentType: contentTypeOf(req.headers), files };
241
+ }, () => (0, capture_1.bodyAbsent)(req.headers, req.httpVersionMajor));
242
+ if (r.blocked)
243
+ return sendBlocked(res, r.blocked);
244
+ if (!r.ctx)
245
+ return next();
246
+ context_1.storage.run(r.ctx, () => next());
247
+ };
248
+ }
249
+ /** Maps the block error from a handler to the 403; passes every other error on. */
250
+ function raspExpressErrorHandler() {
251
+ return function shield360RaspErrors(err, _req, res, next) {
252
+ if (isRaspBlocked(err))
253
+ return sendBlocked(res, err);
254
+ next(err);
255
+ };
256
+ }
257
+ const FASTIFY_CTX = Symbol('shield360.rasp.context');
258
+ function fastifyBlocked(reply, e) {
259
+ try {
260
+ let r = reply.code(403);
261
+ for (const [k, v] of Object.entries(BLOCK_HEADERS))
262
+ r = r.header(k, v);
263
+ r.send(JSON.stringify((0, types_1.blockBody)(e)));
264
+ }
265
+ catch {
266
+ // the reply is already gone
267
+ }
268
+ }
269
+ /**
270
+ * A decoy gets Fastify's not-found: `reply.callNotFound()` (the app's
271
+ * `setNotFoundHandler`, else Fastify's JSON 404). A decoy that matches no
272
+ * route is already on its way to that handler, so the request just goes on
273
+ * (callNotFound from there would send a bare 404 instead).
274
+ */
275
+ function fastifyNotFound(request, reply, next) {
276
+ if (request.is404)
277
+ return next();
278
+ try {
279
+ if (typeof reply.callNotFound === 'function') {
280
+ reply.callNotFound();
281
+ return;
282
+ }
283
+ reply.code(404).send({ message: `Route ${request.method}:${request.url} not found`, error: 'Not Found', statusCode: 404 });
284
+ }
285
+ catch {
286
+ // the reply is already gone
287
+ }
288
+ }
289
+ function fastifyNoBody(method, headers) {
290
+ const m = method.toUpperCase();
291
+ if (m === 'GET' || m === 'HEAD')
292
+ return true;
293
+ if (!(0, capture_1.bodyAbsent)(headers))
294
+ return false;
295
+ const len = headers['content-length'];
296
+ return headers['content-type'] === undefined || (typeof len === 'string' && len.trim() === '0');
297
+ }
298
+ /**
299
+ * Fastify plugin: `fastify.register(raspFastify)`. Applies to every route
300
+ * (it skips encapsulation, as fastify-plugin would). Inputs are captured in
301
+ * `onRequest`, the body in `preHandler`. A handler that lets the block error
302
+ * through gets a 403 from Fastify's default error handler (`statusCode`).
303
+ */
304
+ function raspFastify(fastify, _opts, done) {
305
+ markFrameworkServer(fastify.server);
306
+ fastify.addHook('onRequest', (request, reply, next) => {
307
+ if (!(0, engine_1.isActive)())
308
+ return next();
309
+ const d = deceive({ framework: 'fastify', method: request.method, url: request.url, ip: ipOf(request.ip) });
310
+ if (d.notFound)
311
+ return fastifyNotFound(request, reply, next);
312
+ if (d.blocked)
313
+ return fastifyBlocked(reply, d.blocked);
314
+ const route = request.routeOptions?.url ?? request.routerPath;
315
+ const r = begin(() => (0, capture_1.captureRequest)({
316
+ framework: 'fastify',
317
+ method: request.method,
318
+ url: request.url,
319
+ headers: request.headers,
320
+ query: request.query,
321
+ params: request.params,
322
+ route: typeof route === 'string' ? route : undefined,
323
+ ip: ipOf(request.ip),
324
+ }), () => undefined,
325
+ // No body as Fastify judges it: it never parses a GET or HEAD body, an explicit
326
+ // Content-Length: 0 carries none whatever the content type, and without a content type
327
+ // it parses nothing when there is neither a length nor chunks.
328
+ () => fastifyNoBody(request.method, request.headers));
329
+ if (r.blocked)
330
+ return fastifyBlocked(reply, r.blocked);
331
+ if (!r.ctx)
332
+ return next();
333
+ r.ctx.late = undefined;
334
+ request[FASTIFY_CTX] = r.ctx;
335
+ context_1.storage.run(r.ctx, () => next());
336
+ });
337
+ fastify.addHook('preHandler', (request, reply, next) => {
338
+ const ctx = request[FASTIFY_CTX];
339
+ if (!ctx || !(0, engine_1.isActive)())
340
+ return next();
341
+ try {
342
+ if (request.body !== undefined && request.body !== null)
343
+ (0, capture_1.captureBody)(ctx, { body: request.body, contentType: contentTypeOf(request.headers) });
344
+ (0, capture_1.runVirtualPatches)(ctx);
345
+ }
346
+ catch (e) {
347
+ if (e instanceof types_1.RaspBlockedError)
348
+ return fastifyBlocked(reply, e);
349
+ }
350
+ context_1.storage.run(ctx, () => next());
351
+ });
352
+ done();
353
+ }
354
+ raspFastify[Symbol.for('skip-override')] = true;
355
+ raspFastify[Symbol.for('fastify.display-name')] = 'shield360-rasp';
356
+ function koaBlocked(k, e) {
357
+ k.status = 403;
358
+ try {
359
+ for (const [h, v] of Object.entries(BLOCK_HEADERS))
360
+ k.set?.(h, v);
361
+ }
362
+ catch {
363
+ // headers are best effort
364
+ }
365
+ k.body = (0, types_1.blockBody)(e);
366
+ }
367
+ /** Koa middleware: `app.use(raspKoa())`, ideally after the body parser. */
368
+ function raspKoa() {
369
+ return async function shield360Rasp(k, next) {
370
+ if (!(0, engine_1.isActive)()) {
371
+ await next();
372
+ return;
373
+ }
374
+ markFrameworkServer(socketServer(k.req));
375
+ const d = deceive({ framework: 'koa', method: k.method, url: k.originalUrl || k.url || '/', ip: ipOf(k.ip) });
376
+ if (d.notFound) {
377
+ // What Koa does with a path nothing answers: status 404 and no body, so Koa sends "Not Found" as text/plain.
378
+ k.status = 404;
379
+ return;
380
+ }
381
+ if (d.blocked)
382
+ return koaBlocked(k, d.blocked);
383
+ const headers = k.headers ?? k.request?.headers ?? {};
384
+ const r = begin(() => (0, capture_1.captureRequest)({
385
+ framework: 'koa',
386
+ method: k.method,
387
+ url: k.originalUrl || k.url || '/',
388
+ headers,
389
+ query: k.query,
390
+ params: k.params,
391
+ route: typeof k._matchedRoute === 'string' ? k._matchedRoute : undefined,
392
+ ip: ipOf(k.ip),
393
+ }), () => (k.request?.body === undefined ? undefined : { body: k.request.body, contentType: contentTypeOf(headers) }), () => (0, capture_1.bodyAbsent)(headers, k.req?.httpVersionMajor));
394
+ if (r.blocked)
395
+ return koaBlocked(k, r.blocked);
396
+ if (!r.ctx) {
397
+ await next();
398
+ return;
399
+ }
400
+ try {
401
+ await context_1.storage.run(r.ctx, () => next());
402
+ }
403
+ catch (e) {
404
+ if (e instanceof types_1.RaspBlockedError)
405
+ return koaBlocked(k, e);
406
+ throw e;
407
+ }
408
+ };
409
+ }
410
+ /**
411
+ * Wraps a raw `http` request handler: `http.createServer(raspHttp(handler))`.
412
+ * The body is the handler's to read; once it has, `recordRequestBody(body)`
413
+ * adds it (and runs the virtual patches that read the body). A `req.body`
414
+ * set by a parser is picked up when a sink first reads the inputs.
415
+ */
416
+ function raspHttp(handler) {
417
+ const wrapped = function (req, res) {
418
+ if (!(0, engine_1.isActive)())
419
+ return handler.call(this, req, res);
420
+ const d = deceive({ framework: 'http', method: req.method || 'GET', url: req.url || '/', ip: ipOf(undefined, req) });
421
+ if (d.notFound)
422
+ return sendNotFound(res);
423
+ if (d.blocked)
424
+ return sendBlocked(res, d.blocked);
425
+ const withBody = req;
426
+ const r = begin(() => (0, capture_1.captureRequest)({ framework: 'http', method: req.method || 'GET', url: req.url || '/', headers: req.headers, ip: ipOf(undefined, req) }), () => (withBody.body === undefined ? undefined : { body: withBody.body, contentType: contentTypeOf(req.headers) }), () => (0, capture_1.bodyAbsent)(req.headers, req.httpVersionMajor));
427
+ if (r.blocked)
428
+ return sendBlocked(res, r.blocked);
429
+ if (!r.ctx)
430
+ return handler.call(this, req, res);
431
+ return context_1.storage.run(r.ctx, () => {
432
+ try {
433
+ const out = handler.call(this, req, res);
434
+ if (out && typeof out.then === 'function') {
435
+ return out.then(undefined, (e) => {
436
+ if (e instanceof types_1.RaspBlockedError)
437
+ return sendBlocked(res, e);
438
+ throw e;
439
+ });
440
+ }
441
+ return out;
442
+ }
443
+ catch (e) {
444
+ if (e instanceof types_1.RaspBlockedError)
445
+ return sendBlocked(res, e);
446
+ throw e;
447
+ }
448
+ });
449
+ };
450
+ return wrapped;
451
+ }
452
+ /**
453
+ * Adds a body the app read itself to the current request's inputs and runs
454
+ * the virtual patches that read the body. Throws the block error when one
455
+ * blocks; otherwise never throws.
456
+ */
457
+ function recordRequestBody(body, contentType) {
458
+ if (!(0, engine_1.isActive)())
459
+ return;
460
+ const ctx = (0, context_1.currentContext)();
461
+ // Once a body was captured; a body the SDK took to be absent is still added.
462
+ if (!ctx?.inRequest || ctx.headInputs !== undefined)
463
+ return;
464
+ try {
465
+ ctx.late = undefined;
466
+ (0, capture_1.captureBody)(ctx, { body, contentType });
467
+ (0, capture_1.runVirtualPatches)(ctx);
468
+ }
469
+ catch (e) {
470
+ if (e instanceof types_1.RaspBlockedError)
471
+ throw e;
472
+ }
473
+ }
474
+ // ---- Next.js route handlers ------------------------------------------------------
475
+ const MAX_READ = 1024 * 1024;
476
+ const BODY_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
477
+ /** Reads at most `max` bytes of a cloned request body as text. */
478
+ async function readCapped(req, max) {
479
+ if (!req.body)
480
+ return undefined;
481
+ const reader = req.body.getReader();
482
+ const chunks = [];
483
+ let total = 0;
484
+ try {
485
+ while (total < max) {
486
+ const { done, value } = await reader.read();
487
+ if (done)
488
+ break;
489
+ chunks.push(value);
490
+ total += value.byteLength;
491
+ }
492
+ }
493
+ finally {
494
+ reader.cancel().catch(() => undefined);
495
+ }
496
+ return Buffer.concat(chunks.map((c) => Buffer.from(c))).subarray(0, max).toString('utf8');
497
+ }
498
+ /**
499
+ * Wraps a Next.js App Router route handler (Node.js runtime):
500
+ *
501
+ * export const POST = withRasp(async (request) => { ... });
502
+ *
503
+ * The body is read from a clone (up to 1 MiB), so the handler can still read it.
504
+ */
505
+ function withRasp(handler) {
506
+ return async function shield360Rasp(request, context) {
507
+ if (!(0, engine_1.isActive)())
508
+ return handler(request, context);
509
+ let url;
510
+ try {
511
+ url = new URL(request.url);
512
+ }
513
+ catch {
514
+ return handler(request, context);
515
+ }
516
+ // Next.js gives only the parsed URL (dot segments already resolved) and no client address, so a hit marks nothing.
517
+ const d = deceive({ framework: 'nextjs', method: request.method, url: url.pathname + url.search });
518
+ // What `notFound()` gives in a route handler: an empty 404.
519
+ if (d.notFound)
520
+ return new Response(null, { status: 404 });
521
+ if (d.blocked)
522
+ return blockedResponse(d.blocked);
523
+ let ctx;
524
+ try {
525
+ const headers = {};
526
+ request.headers.forEach((v, k) => {
527
+ headers[k.toLowerCase()] = v;
528
+ });
529
+ let params;
530
+ try {
531
+ const p = context?.params;
532
+ params = p && typeof p.then === 'function' ? await p : p;
533
+ }
534
+ catch {
535
+ params = undefined;
536
+ }
537
+ ctx = (0, capture_1.captureRequest)({ framework: 'nextjs', method: request.method, url: url.pathname + url.search, headers, params });
538
+ (0, capture_1.runVirtualPatches)(ctx);
539
+ if (!request.body) {
540
+ // No body at all (a GET, an empty POST): the body is known and empty.
541
+ (0, capture_1.captureNoBody)(ctx);
542
+ (0, capture_1.runVirtualPatches)(ctx);
543
+ }
544
+ else if (BODY_METHODS.has(request.method.toUpperCase()) && !request.bodyUsed) {
545
+ const text = await readCapped(request.clone(), MAX_READ);
546
+ if (text !== undefined)
547
+ (0, capture_1.captureBody)(ctx, { body: text, contentType: headers['content-type'] });
548
+ (0, capture_1.runVirtualPatches)(ctx);
549
+ }
550
+ }
551
+ catch (e) {
552
+ if (e instanceof types_1.RaspBlockedError)
553
+ return blockedResponse(e);
554
+ ctx = undefined;
555
+ }
556
+ if (!ctx)
557
+ return handler(request, context);
558
+ try {
559
+ return await context_1.storage.run(ctx, () => handler(request, context));
560
+ }
561
+ catch (e) {
562
+ if (e instanceof types_1.RaspBlockedError)
563
+ return blockedResponse(e);
564
+ throw e;
565
+ }
566
+ };
567
+ }
568
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/rasp/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** Set by the engine: whether model output is recorded at all. */
2
+ export declare function setModelOutputRecording(on: boolean): void;
3
+ export declare function modelOutputRecording(): boolean;
4
+ /** Registers completion text a model returned as untrusted input. Never throws. */
5
+ export declare function recordModelOutput(text: unknown, key?: string): void;
6
+ /** Registers tool-call arguments (a JSON string or an object) as untrusted input. Never throws. */
7
+ export declare function recordToolArguments(args: unknown, toolName?: string): void;
8
+ /**
9
+ * Records a provider response the instrumentation already holds: OpenAI chat
10
+ * completions (`choices[].message`), OpenAI Responses (`output[]`), Anthropic
11
+ * messages (`content[]`). Text becomes completion fragments; tool-call
12
+ * arguments become `model.tool.<name>` inputs. Never throws.
13
+ */
14
+ export declare function recordModelResponse(result: unknown): void;