shield360 1.1.0 → 1.2.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 (400) 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__/destination.test.js +15 -0
  6. package/dist/__tests__/destination.test.js.map +1 -1
  7. package/dist/__tests__/masking.test.d.ts +1 -0
  8. package/dist/__tests__/masking.test.js +66 -0
  9. package/dist/__tests__/masking.test.js.map +1 -0
  10. package/dist/__tests__/register.e2e.test.d.ts +1 -0
  11. package/dist/__tests__/register.e2e.test.js +279 -0
  12. package/dist/__tests__/register.e2e.test.js.map +1 -0
  13. package/dist/__tests__/register.test.js +60 -0
  14. package/dist/__tests__/register.test.js.map +1 -1
  15. package/dist/agents/__tests__/agents.test.d.ts +1 -0
  16. package/dist/agents/__tests__/agents.test.js +529 -0
  17. package/dist/agents/__tests__/agents.test.js.map +1 -0
  18. package/dist/agents/index.d.ts +15 -0
  19. package/dist/agents/index.js +25 -0
  20. package/dist/agents/index.js.map +1 -0
  21. package/dist/agents/passport.d.ts +92 -0
  22. package/dist/agents/passport.js +301 -0
  23. package/dist/agents/passport.js.map +1 -0
  24. package/dist/agents/policy.d.ts +24 -0
  25. package/dist/agents/policy.js +93 -0
  26. package/dist/agents/policy.js.map +1 -0
  27. package/dist/agents/replay.d.ts +20 -0
  28. package/dist/agents/replay.js +47 -0
  29. package/dist/agents/replay.js.map +1 -0
  30. package/dist/agents/report.d.ts +30 -0
  31. package/dist/agents/report.js +93 -0
  32. package/dist/agents/report.js.map +1 -0
  33. package/dist/agents/types.d.ts +148 -0
  34. package/dist/agents/types.js +37 -0
  35. package/dist/agents/types.js.map +1 -0
  36. package/dist/agents/verifier.d.ts +33 -0
  37. package/dist/agents/verifier.js +276 -0
  38. package/dist/agents/verifier.js.map +1 -0
  39. package/dist/ai-security/__tests__/bench.test.d.ts +1 -0
  40. package/dist/ai-security/__tests__/bench.test.js +50 -0
  41. package/dist/ai-security/__tests__/bench.test.js.map +1 -0
  42. package/dist/ai-security/__tests__/checks.test.d.ts +1 -0
  43. package/dist/ai-security/__tests__/checks.test.js +248 -0
  44. package/dist/ai-security/__tests__/checks.test.js.map +1 -0
  45. package/dist/ai-security/__tests__/config.test.d.ts +1 -0
  46. package/dist/ai-security/__tests__/config.test.js +164 -0
  47. package/dist/ai-security/__tests__/config.test.js.map +1 -0
  48. package/dist/ai-security/__tests__/detection.test.d.ts +1 -0
  49. package/dist/ai-security/__tests__/detection.test.js +114 -0
  50. package/dist/ai-security/__tests__/detection.test.js.map +1 -0
  51. package/dist/ai-security/__tests__/fixtures.d.ts +8 -0
  52. package/dist/ai-security/__tests__/fixtures.js +30 -0
  53. package/dist/ai-security/__tests__/fixtures.js.map +1 -0
  54. package/dist/ai-security/__tests__/hooks.test.d.ts +1 -0
  55. package/dist/ai-security/__tests__/hooks.test.js +174 -0
  56. package/dist/ai-security/__tests__/hooks.test.js.map +1 -0
  57. package/dist/ai-security/__tests__/stream.test.d.ts +1 -0
  58. package/dist/ai-security/__tests__/stream.test.js +85 -0
  59. package/dist/ai-security/__tests__/stream.test.js.map +1 -0
  60. package/dist/ai-security/config.d.ts +94 -0
  61. package/dist/ai-security/config.js +241 -0
  62. package/dist/ai-security/config.js.map +1 -0
  63. package/dist/ai-security/context.d.ts +45 -0
  64. package/dist/ai-security/context.js +108 -0
  65. package/dist/ai-security/context.js.map +1 -0
  66. package/dist/ai-security/custom-kinds.d.ts +23 -0
  67. package/dist/ai-security/custom-kinds.js +97 -0
  68. package/dist/ai-security/custom-kinds.js.map +1 -0
  69. package/dist/ai-security/events.d.ts +77 -0
  70. package/dist/ai-security/events.js +153 -0
  71. package/dist/ai-security/events.js.map +1 -0
  72. package/dist/ai-security/hooks.d.ts +48 -0
  73. package/dist/ai-security/hooks.js +461 -0
  74. package/dist/ai-security/hooks.js.map +1 -0
  75. package/dist/ai-security/index.d.ts +209 -0
  76. package/dist/ai-security/index.js +587 -0
  77. package/dist/ai-security/index.js.map +1 -0
  78. package/dist/ai-security/injection-rules.json +1024 -0
  79. package/dist/ai-security/injection.d.ts +46 -0
  80. package/dist/ai-security/injection.js +635 -0
  81. package/dist/ai-security/injection.js.map +1 -0
  82. package/dist/ai-security/jailbreak.d.ts +38 -0
  83. package/dist/ai-security/jailbreak.js +73 -0
  84. package/dist/ai-security/jailbreak.js.map +1 -0
  85. package/dist/ai-security/limits.d.ts +84 -0
  86. package/dist/ai-security/limits.js +195 -0
  87. package/dist/ai-security/limits.js.map +1 -0
  88. package/dist/ai-security/mcp.d.ts +82 -0
  89. package/dist/ai-security/mcp.js +150 -0
  90. package/dist/ai-security/mcp.js.map +1 -0
  91. package/dist/ai-security/output.d.ts +107 -0
  92. package/dist/ai-security/output.js +390 -0
  93. package/dist/ai-security/output.js.map +1 -0
  94. package/dist/ai-security/policy.d.ts +125 -0
  95. package/dist/ai-security/policy.js +196 -0
  96. package/dist/ai-security/policy.js.map +1 -0
  97. package/dist/ai-security/rag.d.ts +70 -0
  98. package/dist/ai-security/rag.js +174 -0
  99. package/dist/ai-security/rag.js.map +1 -0
  100. package/dist/ai-security/tool-rules.json +203 -0
  101. package/dist/ai-security/tools.d.ts +46 -0
  102. package/dist/ai-security/tools.js +62 -0
  103. package/dist/ai-security/tools.js.map +1 -0
  104. package/dist/budgets/__tests__/budgets.test.d.ts +1 -0
  105. package/dist/budgets/__tests__/budgets.test.js +134 -0
  106. package/dist/budgets/__tests__/budgets.test.js.map +1 -0
  107. package/dist/budgets/auto.d.ts +25 -0
  108. package/dist/budgets/auto.js +63 -0
  109. package/dist/budgets/auto.js.map +1 -0
  110. package/dist/budgets/index.d.ts +110 -0
  111. package/dist/budgets/index.js +239 -0
  112. package/dist/budgets/index.js.map +1 -0
  113. package/dist/customer/__tests__/customer.test.d.ts +1 -0
  114. package/dist/customer/__tests__/customer.test.js +155 -0
  115. package/dist/customer/__tests__/customer.test.js.map +1 -0
  116. package/dist/customer/index.d.ts +48 -0
  117. package/dist/customer/index.js +132 -0
  118. package/dist/customer/index.js.map +1 -0
  119. package/dist/destination.d.ts +14 -0
  120. package/dist/destination.js +16 -0
  121. package/dist/destination.js.map +1 -1
  122. package/dist/feedback/__tests__/feedback.test.d.ts +1 -0
  123. package/dist/feedback/__tests__/feedback.test.js +80 -0
  124. package/dist/feedback/__tests__/feedback.test.js.map +1 -0
  125. package/dist/feedback/index.d.ts +48 -0
  126. package/dist/feedback/index.js +97 -0
  127. package/dist/feedback/index.js.map +1 -0
  128. package/dist/flags/__tests__/flags.test.d.ts +1 -0
  129. package/dist/flags/__tests__/flags.test.js +301 -0
  130. package/dist/flags/__tests__/flags.test.js.map +1 -0
  131. package/dist/flags/client.d.ts +131 -0
  132. package/dist/flags/client.js +301 -0
  133. package/dist/flags/client.js.map +1 -0
  134. package/dist/flags/engine.d.ts +200 -0
  135. package/dist/flags/engine.js +677 -0
  136. package/dist/flags/engine.js.map +1 -0
  137. package/dist/flags/index.d.ts +4 -0
  138. package/dist/flags/index.js +16 -0
  139. package/dist/flags/index.js.map +1 -0
  140. package/dist/guard/__tests__/findings.test.js +1 -1
  141. package/dist/guard/__tests__/report.test.js +67 -0
  142. package/dist/guard/__tests__/report.test.js.map +1 -1
  143. package/dist/guard/heartbeat.d.ts +34 -0
  144. package/dist/guard/heartbeat.js +83 -0
  145. package/dist/guard/heartbeat.js.map +1 -0
  146. package/dist/guard/integration.d.ts +9 -0
  147. package/dist/guard/integration.js +4 -2
  148. package/dist/guard/integration.js.map +1 -1
  149. package/dist/guard/report.d.ts +24 -1
  150. package/dist/guard/report.js +67 -18
  151. package/dist/guard/report.js.map +1 -1
  152. package/dist/index.d.ts +88 -0
  153. package/dist/index.js +203 -2
  154. package/dist/index.js.map +1 -1
  155. package/dist/instrumentation/__tests__/langchain-wrapper.test.js +1 -1
  156. package/dist/instrumentation/__tests__/langchain-wrapper.test.js.map +1 -1
  157. package/dist/instrumentation/anthropic/wrapper.js +4 -0
  158. package/dist/instrumentation/anthropic/wrapper.js.map +1 -1
  159. package/dist/instrumentation/openai/wrapper.js +6 -0
  160. package/dist/instrumentation/openai/wrapper.js.map +1 -1
  161. package/dist/masking.d.ts +42 -0
  162. package/dist/masking.js +197 -0
  163. package/dist/masking.js.map +1 -0
  164. package/dist/otel/__tests__/app-logs-safety.test.d.ts +1 -0
  165. package/dist/otel/__tests__/app-logs-safety.test.js +129 -0
  166. package/dist/otel/__tests__/app-logs-safety.test.js.map +1 -0
  167. package/dist/otel/__tests__/app-logs.test.d.ts +1 -0
  168. package/dist/otel/__tests__/app-logs.test.js +269 -0
  169. package/dist/otel/__tests__/app-logs.test.js.map +1 -0
  170. package/dist/otel/__tests__/log-auto.test.d.ts +1 -0
  171. package/dist/otel/__tests__/log-auto.test.js +125 -0
  172. package/dist/otel/__tests__/log-auto.test.js.map +1 -0
  173. package/dist/otel/__tests__/log-bridges.test.d.ts +1 -0
  174. package/dist/otel/__tests__/log-bridges.test.js +170 -0
  175. package/dist/otel/__tests__/log-bridges.test.js.map +1 -0
  176. package/dist/otel/__tests__/system-metrics.test.d.ts +1 -0
  177. package/dist/otel/__tests__/system-metrics.test.js +79 -0
  178. package/dist/otel/__tests__/system-metrics.test.js.map +1 -0
  179. package/dist/otel/app-logs.d.ts +80 -0
  180. package/dist/otel/app-logs.js +195 -0
  181. package/dist/otel/app-logs.js.map +1 -0
  182. package/dist/otel/build-info.d.ts +2 -1
  183. package/dist/otel/build-info.js +3 -2
  184. package/dist/otel/build-info.js.map +1 -1
  185. package/dist/otel/events.d.ts +1 -0
  186. package/dist/otel/events.js +22 -13
  187. package/dist/otel/events.js.map +1 -1
  188. package/dist/otel/log-auto.d.ts +44 -0
  189. package/dist/otel/log-auto.js +200 -0
  190. package/dist/otel/log-auto.js.map +1 -0
  191. package/dist/otel/log-bridges.d.ts +54 -0
  192. package/dist/otel/log-bridges.js +307 -0
  193. package/dist/otel/log-bridges.js.map +1 -0
  194. package/dist/otel/metrics.js +1 -1
  195. package/dist/otel/metrics.js.map +1 -1
  196. package/dist/otel/system-metrics.d.ts +39 -0
  197. package/dist/otel/system-metrics.js +166 -0
  198. package/dist/otel/system-metrics.js.map +1 -0
  199. package/dist/otel/tracing.js +6 -2
  200. package/dist/otel/tracing.js.map +1 -1
  201. package/dist/protect/__tests__/protect.test.js +4 -0
  202. package/dist/protect/__tests__/protect.test.js.map +1 -1
  203. package/dist/protect/index.js +9 -4
  204. package/dist/protect/index.js.map +1 -1
  205. package/dist/rasp/__tests__/auto-http.test.d.ts +1 -0
  206. package/dist/rasp/__tests__/auto-http.test.js +136 -0
  207. package/dist/rasp/__tests__/auto-http.test.js.map +1 -0
  208. package/dist/rasp/__tests__/baseline.test.d.ts +1 -0
  209. package/dist/rasp/__tests__/baseline.test.js +86 -0
  210. package/dist/rasp/__tests__/baseline.test.js.map +1 -0
  211. package/dist/rasp/__tests__/benign-corpus.test.d.ts +1 -0
  212. package/dist/rasp/__tests__/benign-corpus.test.js +68 -0
  213. package/dist/rasp/__tests__/benign-corpus.test.js.map +1 -0
  214. package/dist/rasp/__tests__/capture-context.test.d.ts +1 -0
  215. package/dist/rasp/__tests__/capture-context.test.js +135 -0
  216. package/dist/rasp/__tests__/capture-context.test.js.map +1 -0
  217. package/dist/rasp/__tests__/code-hook.test.d.ts +1 -0
  218. package/dist/rasp/__tests__/code-hook.test.js +218 -0
  219. package/dist/rasp/__tests__/code-hook.test.js.map +1 -0
  220. package/dist/rasp/__tests__/config-client.test.d.ts +1 -0
  221. package/dist/rasp/__tests__/config-client.test.js +283 -0
  222. package/dist/rasp/__tests__/config-client.test.js.map +1 -0
  223. package/dist/rasp/__tests__/corpus.d.ts +13 -0
  224. package/dist/rasp/__tests__/corpus.js +111 -0
  225. package/dist/rasp/__tests__/corpus.js.map +1 -0
  226. package/dist/rasp/__tests__/custom-rules.test.d.ts +1 -0
  227. package/dist/rasp/__tests__/custom-rules.test.js +276 -0
  228. package/dist/rasp/__tests__/custom-rules.test.js.map +1 -0
  229. package/dist/rasp/__tests__/db-hook.test.d.ts +1 -0
  230. package/dist/rasp/__tests__/db-hook.test.js +438 -0
  231. package/dist/rasp/__tests__/db-hook.test.js.map +1 -0
  232. package/dist/rasp/__tests__/deception.test.d.ts +1 -0
  233. package/dist/rasp/__tests__/deception.test.js +567 -0
  234. package/dist/rasp/__tests__/deception.test.js.map +1 -0
  235. package/dist/rasp/__tests__/detect.test.d.ts +1 -0
  236. package/dist/rasp/__tests__/detect.test.js +276 -0
  237. package/dist/rasp/__tests__/detect.test.js.map +1 -0
  238. package/dist/rasp/__tests__/esm-exports.test.d.ts +1 -0
  239. package/dist/rasp/__tests__/esm-exports.test.js +20 -0
  240. package/dist/rasp/__tests__/esm-exports.test.js.map +1 -0
  241. package/dist/rasp/__tests__/fs-hook.test.d.ts +1 -0
  242. package/dist/rasp/__tests__/fs-hook.test.js +241 -0
  243. package/dist/rasp/__tests__/fs-hook.test.js.map +1 -0
  244. package/dist/rasp/__tests__/hook-contracts.test.d.ts +1 -0
  245. package/dist/rasp/__tests__/hook-contracts.test.js +201 -0
  246. package/dist/rasp/__tests__/hook-contracts.test.js.map +1 -0
  247. package/dist/rasp/__tests__/hook-kit.d.ts +42 -0
  248. package/dist/rasp/__tests__/hook-kit.js +139 -0
  249. package/dist/rasp/__tests__/hook-kit.js.map +1 -0
  250. package/dist/rasp/__tests__/http-hook.test.d.ts +1 -0
  251. package/dist/rasp/__tests__/http-hook.test.js +250 -0
  252. package/dist/rasp/__tests__/http-hook.test.js.map +1 -0
  253. package/dist/rasp/__tests__/iast.test.d.ts +1 -0
  254. package/dist/rasp/__tests__/iast.test.js +361 -0
  255. package/dist/rasp/__tests__/iast.test.js.map +1 -0
  256. package/dist/rasp/__tests__/include-hook.test.d.ts +1 -0
  257. package/dist/rasp/__tests__/include-hook.test.js +122 -0
  258. package/dist/rasp/__tests__/include-hook.test.js.map +1 -0
  259. package/dist/rasp/__tests__/middleware.test.d.ts +1 -0
  260. package/dist/rasp/__tests__/middleware.test.js +302 -0
  261. package/dist/rasp/__tests__/middleware.test.js.map +1 -0
  262. package/dist/rasp/__tests__/process-hook.test.d.ts +1 -0
  263. package/dist/rasp/__tests__/process-hook.test.js +238 -0
  264. package/dist/rasp/__tests__/process-hook.test.js.map +1 -0
  265. package/dist/rasp/__tests__/reporter.test.d.ts +1 -0
  266. package/dist/rasp/__tests__/reporter.test.js +114 -0
  267. package/dist/rasp/__tests__/reporter.test.js.map +1 -0
  268. package/dist/rasp/__tests__/route.test.d.ts +1 -0
  269. package/dist/rasp/__tests__/route.test.js +46 -0
  270. package/dist/rasp/__tests__/route.test.js.map +1 -0
  271. package/dist/rasp/__tests__/rule-expr.test.d.ts +1 -0
  272. package/dist/rasp/__tests__/rule-expr.test.js +151 -0
  273. package/dist/rasp/__tests__/rule-expr.test.js.map +1 -0
  274. package/dist/rasp/__tests__/rule-phases.test.d.ts +1 -0
  275. package/dist/rasp/__tests__/rule-phases.test.js +271 -0
  276. package/dist/rasp/__tests__/rule-phases.test.js.map +1 -0
  277. package/dist/rasp/__tests__/sinks-hook.test.d.ts +1 -0
  278. package/dist/rasp/__tests__/sinks-hook.test.js +177 -0
  279. package/dist/rasp/__tests__/sinks-hook.test.js.map +1 -0
  280. package/dist/rasp/__tests__/targets.test.d.ts +1 -0
  281. package/dist/rasp/__tests__/targets.test.js +82 -0
  282. package/dist/rasp/__tests__/targets.test.js.map +1 -0
  283. package/dist/rasp/__tests__/template-hook.test.d.ts +1 -0
  284. package/dist/rasp/__tests__/template-hook.test.js +254 -0
  285. package/dist/rasp/__tests__/template-hook.test.js.map +1 -0
  286. package/dist/rasp/__tests__/upload.test.d.ts +1 -0
  287. package/dist/rasp/__tests__/upload.test.js +81 -0
  288. package/dist/rasp/__tests__/upload.test.js.map +1 -0
  289. package/dist/rasp/__tests__/vpatch-engine.test.d.ts +1 -0
  290. package/dist/rasp/__tests__/vpatch-engine.test.js +177 -0
  291. package/dist/rasp/__tests__/vpatch-engine.test.js.map +1 -0
  292. package/dist/rasp/auto-http.d.ts +6 -0
  293. package/dist/rasp/auto-http.js +194 -0
  294. package/dist/rasp/auto-http.js.map +1 -0
  295. package/dist/rasp/baseline.d.ts +35 -0
  296. package/dist/rasp/baseline.js +91 -0
  297. package/dist/rasp/baseline.js.map +1 -0
  298. package/dist/rasp/capture.d.ts +76 -0
  299. package/dist/rasp/capture.js +304 -0
  300. package/dist/rasp/capture.js.map +1 -0
  301. package/dist/rasp/config-client.d.ts +122 -0
  302. package/dist/rasp/config-client.js +337 -0
  303. package/dist/rasp/config-client.js.map +1 -0
  304. package/dist/rasp/context.d.ts +65 -0
  305. package/dist/rasp/context.js +68 -0
  306. package/dist/rasp/context.js.map +1 -0
  307. package/dist/rasp/custom-rules.d.ts +68 -0
  308. package/dist/rasp/custom-rules.js +222 -0
  309. package/dist/rasp/custom-rules.js.map +1 -0
  310. package/dist/rasp/data/default-rules.json +199 -0
  311. package/dist/rasp/data/default-sinks.json +4 -0
  312. package/dist/rasp/data/dnslog-domains.json +11 -0
  313. package/dist/rasp/deception.d.ts +70 -0
  314. package/dist/rasp/deception.js +220 -0
  315. package/dist/rasp/deception.js.map +1 -0
  316. package/dist/rasp/detect.d.ts +68 -0
  317. package/dist/rasp/detect.js +671 -0
  318. package/dist/rasp/detect.js.map +1 -0
  319. package/dist/rasp/engine.d.ts +107 -0
  320. package/dist/rasp/engine.js +330 -0
  321. package/dist/rasp/engine.js.map +1 -0
  322. package/dist/rasp/hooks/code.d.ts +20 -0
  323. package/dist/rasp/hooks/code.js +334 -0
  324. package/dist/rasp/hooks/code.js.map +1 -0
  325. package/dist/rasp/hooks/db.d.ts +48 -0
  326. package/dist/rasp/hooks/db.js +322 -0
  327. package/dist/rasp/hooks/db.js.map +1 -0
  328. package/dist/rasp/hooks/esm.d.ts +7 -0
  329. package/dist/rasp/hooks/esm.js +18 -0
  330. package/dist/rasp/hooks/esm.js.map +1 -0
  331. package/dist/rasp/hooks/fs.d.ts +3 -0
  332. package/dist/rasp/hooks/fs.js +206 -0
  333. package/dist/rasp/hooks/fs.js.map +1 -0
  334. package/dist/rasp/hooks/http.d.ts +4 -0
  335. package/dist/rasp/hooks/http.js +213 -0
  336. package/dist/rasp/hooks/http.js.map +1 -0
  337. package/dist/rasp/hooks/include.d.ts +9 -0
  338. package/dist/rasp/hooks/include.js +79 -0
  339. package/dist/rasp/hooks/include.js.map +1 -0
  340. package/dist/rasp/hooks/marks.d.ts +2 -0
  341. package/dist/rasp/hooks/marks.js +16 -0
  342. package/dist/rasp/hooks/marks.js.map +1 -0
  343. package/dist/rasp/hooks/process.d.ts +22 -0
  344. package/dist/rasp/hooks/process.js +191 -0
  345. package/dist/rasp/hooks/process.js.map +1 -0
  346. package/dist/rasp/hooks/sinks.d.ts +54 -0
  347. package/dist/rasp/hooks/sinks.js +329 -0
  348. package/dist/rasp/hooks/sinks.js.map +1 -0
  349. package/dist/rasp/hooks/template.d.ts +21 -0
  350. package/dist/rasp/hooks/template.js +152 -0
  351. package/dist/rasp/hooks/template.js.map +1 -0
  352. package/dist/rasp/iast-rules.d.ts +82 -0
  353. package/dist/rasp/iast-rules.js +240 -0
  354. package/dist/rasp/iast-rules.js.map +1 -0
  355. package/dist/rasp/iast-scope.d.ts +29 -0
  356. package/dist/rasp/iast-scope.js +54 -0
  357. package/dist/rasp/iast-scope.js.map +1 -0
  358. package/dist/rasp/iast.d.ts +81 -0
  359. package/dist/rasp/iast.js +272 -0
  360. package/dist/rasp/iast.js.map +1 -0
  361. package/dist/rasp/index.d.ts +52 -0
  362. package/dist/rasp/index.js +280 -0
  363. package/dist/rasp/index.js.map +1 -0
  364. package/dist/rasp/lexers.d.ts +32 -0
  365. package/dist/rasp/lexers.js +444 -0
  366. package/dist/rasp/lexers.js.map +1 -0
  367. package/dist/rasp/middleware.d.ts +155 -0
  368. package/dist/rasp/middleware.js +568 -0
  369. package/dist/rasp/middleware.js.map +1 -0
  370. package/dist/rasp/model-output.d.ts +14 -0
  371. package/dist/rasp/model-output.js +107 -0
  372. package/dist/rasp/model-output.js.map +1 -0
  373. package/dist/rasp/normalize.d.ts +23 -0
  374. package/dist/rasp/normalize.js +140 -0
  375. package/dist/rasp/normalize.js.map +1 -0
  376. package/dist/rasp/reporter.d.ts +60 -0
  377. package/dist/rasp/reporter.js +230 -0
  378. package/dist/rasp/reporter.js.map +1 -0
  379. package/dist/rasp/rule-expr.d.ts +236 -0
  380. package/dist/rasp/rule-expr.js +1253 -0
  381. package/dist/rasp/rule-expr.js.map +1 -0
  382. package/dist/rasp/template.d.ts +53 -0
  383. package/dist/rasp/template.js +336 -0
  384. package/dist/rasp/template.js.map +1 -0
  385. package/dist/rasp/types.d.ts +110 -0
  386. package/dist/rasp/types.js +51 -0
  387. package/dist/rasp/types.js.map +1 -0
  388. package/dist/rasp/vpatch.d.ts +55 -0
  389. package/dist/rasp/vpatch.js +120 -0
  390. package/dist/rasp/vpatch.js.map +1 -0
  391. package/dist/register.js +52 -11
  392. package/dist/register.js.map +1 -1
  393. package/dist/semantic-convention.d.ts +2 -0
  394. package/dist/semantic-convention.js +5 -0
  395. package/dist/semantic-convention.js.map +1 -1
  396. package/dist/types.d.ts +77 -1
  397. package/dist/zero-code.d.ts +8 -0
  398. package/dist/zero-code.js +38 -0
  399. package/dist/zero-code.js.map +1 -0
  400. package/package.json +18 -2
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.iastRouteOf = exports.IAST_DEFAULT_RATE_PRODUCTION = exports.IAST_DEFAULT_RATE = exports.IAST_MAX_FINGERPRINTS = exports.IAST_REPORT_EVERY_MS = exports.RASP_VULNERABILITY = void 0;
4
+ exports.configureIast = configureIast;
5
+ exports.setIastRemote = setIastRemote;
6
+ exports.setIastSink = setIastSink;
7
+ exports.iastEnabled = iastEnabled;
8
+ exports.iastSampleRate = iastSampleRate;
9
+ exports.beginIast = beginIast;
10
+ exports.endIast = endIast;
11
+ exports.vulnFingerprint = vulnFingerprint;
12
+ exports.isAppFrame = isAppFrame;
13
+ exports.codeLocation = codeLocation;
14
+ exports.resetIast = resetIast;
15
+ /**
16
+ * Passive IAST (README "Passive IAST"): while RASP checks its sinks during
17
+ * normal traffic, report the places where a request input reaches a sink
18
+ * verbatim and unparameterized, even when the value is harmless and no
19
+ * attack happened, so developers can fix "route X builds SQL from query.id"
20
+ * before anyone attacks it.
21
+ *
22
+ * Off by default; turned on by the signed config (`iast: "on"`), the local
23
+ * option (`rasp: { iast: true }`) or `SHIELD360_IAST=on`. Never blocks and
24
+ * does not depend on the attack modes. It adds work only to sink checks that
25
+ * already run with request input in scope, and only for sampled checks.
26
+ *
27
+ * Each vulnerability has a fingerprint (route, sink, input key, rule) and is
28
+ * reported at most once per process per hour, with how many times it was
29
+ * seen since the last report. Events name locations, never values, and carry
30
+ * no snippet: the code location (the app's own stack frame, captured once
31
+ * per fingerprint) replaces it.
32
+ */
33
+ const crypto_1 = require("crypto");
34
+ const path_1 = require("path");
35
+ const context_1 = require("./context");
36
+ const iast_scope_1 = require("./iast-scope");
37
+ exports.RASP_VULNERABILITY = 'shield360.rasp.vulnerability';
38
+ /** A fingerprint is reported at most once per this period per process. */
39
+ exports.IAST_REPORT_EVERY_MS = 60 * 60 * 1000;
40
+ /** Fingerprints remembered per process; the oldest is forgotten past this. */
41
+ exports.IAST_MAX_FINGERPRINTS = 10000;
42
+ exports.IAST_DEFAULT_RATE = 1;
43
+ exports.IAST_DEFAULT_RATE_PRODUCTION = 0.1;
44
+ const fresh = () => ({
45
+ env: undefined,
46
+ envRate: undefined,
47
+ local: undefined,
48
+ localRate: undefined,
49
+ remote: undefined,
50
+ remoteRate: undefined,
51
+ configVersion: 'local',
52
+ production: false,
53
+ app: 'default',
54
+ seen: new Map(),
55
+ now: Date.now,
56
+ random: Math.random,
57
+ });
58
+ let state = fresh();
59
+ const PRODUCTION = /^prod(uction)?$/i;
60
+ const asSetting = (v) => {
61
+ const s = typeof v === 'string' ? v.trim().toLowerCase() : typeof v === 'boolean' ? (v ? 'on' : 'off') : '';
62
+ return s === 'on' || s === 'off' ? s : undefined;
63
+ };
64
+ const asRate = (v) => {
65
+ const n = typeof v === 'string' && v.trim() !== '' ? Number(v) : v;
66
+ return typeof n === 'number' && Number.isFinite(n) && n >= 0 && n <= 1 ? n : undefined;
67
+ };
68
+ /** Reads the local option and the environment (`SHIELD360_IAST`, `SHIELD360_IAST_SAMPLE_RATE`). Forgets what was seen. */
69
+ function configureIast(s) {
70
+ const env = s.env ?? process.env;
71
+ const o = s.option;
72
+ state = {
73
+ ...fresh(),
74
+ env: asSetting(env.SHIELD360_IAST),
75
+ envRate: asRate(env.SHIELD360_IAST_SAMPLE_RATE),
76
+ local: typeof o === 'boolean' ? o : o && typeof o === 'object' ? o.enabled !== false : undefined,
77
+ localRate: o && typeof o === 'object' ? asRate(o.sampleRate) : undefined,
78
+ production: [env.NODE_ENV, env.ENVIRONMENT, s.environment].some((v) => PRODUCTION.test((v || '').trim())),
79
+ app: s.applicationName || 'default',
80
+ now: s.now ?? Date.now,
81
+ random: s.random ?? Math.random,
82
+ };
83
+ }
84
+ /** The verified signed config's switch and rate (undefined drops them). */
85
+ function setIastRemote(c) {
86
+ state.remote = asSetting(c?.iast);
87
+ state.remoteRate = asRate(c?.iastSampleRate);
88
+ state.configVersion = c?.version || 'local';
89
+ }
90
+ function setIastSink(sink) {
91
+ state.sink = sink;
92
+ }
93
+ /**
94
+ * Whether passive IAST is on. Order: `SHIELD360_IAST=off` wins; then the
95
+ * signed config's `iast`; then the local option or `SHIELD360_IAST=on`.
96
+ */
97
+ function iastEnabled() {
98
+ if (state.env === 'off')
99
+ return false;
100
+ if (state.remote)
101
+ return state.remote === 'on';
102
+ return state.local === true || state.env === 'on';
103
+ }
104
+ /** The share of checks that run the IAST rules: env, then the signed config, then the option, then 1.0 (0.1 in production). */
105
+ function iastSampleRate() {
106
+ return state.envRate ?? state.remoteRate ?? state.localRate ?? (state.production ? exports.IAST_DEFAULT_RATE_PRODUCTION : exports.IAST_DEFAULT_RATE);
107
+ }
108
+ /**
109
+ * Arms the IAST slot for one check, or returns null: off, not sampled, or
110
+ * no request input in scope. engine.check calls it only while RASP is active.
111
+ */
112
+ function beginIast() {
113
+ try {
114
+ if (!iastEnabled())
115
+ return null;
116
+ const ctx = (0, context_1.currentContext)();
117
+ if (!ctx || (!ctx.inputs.length && !ctx.late))
118
+ return null;
119
+ const rate = iastSampleRate();
120
+ if (rate <= 0 || (rate < 1 && state.random() >= rate))
121
+ return null;
122
+ return (0, iast_scope_1.armIastSlot)();
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Disarms the slot. With a sink (the check found no attack), reports the
130
+ * vulnerability its detectors noted, if any. Never throws.
131
+ */
132
+ function endIast(slot, report) {
133
+ const vuln = (0, iast_scope_1.closeIastSlot)(slot);
134
+ if (!vuln || !report)
135
+ return;
136
+ try {
137
+ reportVulnerability(vuln, report.sink, report.extra ?? {});
138
+ }
139
+ catch {
140
+ // reporting never breaks the call
141
+ }
142
+ }
143
+ // Event attributes must pass the platform's shape checks (lib/security/rasp/vulnerabilities.ts); same shapes as engine.ts.
144
+ const safeKey = (k) => k.replace(/[^A-Za-z0-9_.\-[\]]/g, '_').replace(/^[^A-Za-z0-9_]/, '_').slice(0, 128);
145
+ const safeRoute = (r) => {
146
+ const s = r.replace(/[^\x21\x23-\x26\x28-\x3b\x3d\x3f-\x5b\x5d-\x7e]/g, '_').slice(0, 256);
147
+ return s.startsWith('/') ? s : '';
148
+ };
149
+ const safeMethod = (m) => (m && /^[A-Za-z]{3,10}$/.test(m) ? m.toUpperCase() : '');
150
+ const SINK = /^[A-Za-z_][A-Za-z0-9_]*(?:[.:/][A-Za-z0-9_]+)*$/;
151
+ /** The fingerprint: SHA-256 of route, sink, input key and rule (NUL-separated), first 32 hex. */
152
+ function vulnFingerprint(route, sink, inputKey, rule) {
153
+ return (0, crypto_1.createHash)('sha256').update([route, sink, inputKey, rule].join('\u0000')).digest('hex').slice(0, 32);
154
+ }
155
+ function reportVulnerability(v, sink, extra) {
156
+ if (!SINK.test(sink) || sink.length > 64)
157
+ return;
158
+ const ctx = (0, context_1.currentContext)();
159
+ const path = extra.path ?? ctx?.path;
160
+ const template = extra.route ?? ctx?.route;
161
+ const route = safeRoute(template ?? (path ? (0, context_1.eventRouteOf)(path) : ''));
162
+ const inputKey = safeKey(v.input.key);
163
+ if (!inputKey)
164
+ return;
165
+ const fp = vulnFingerprint(route, sink, inputKey, v.rule);
166
+ const now = state.now();
167
+ let seen = state.seen.get(fp);
168
+ if (seen && now - seen.lastSent < exports.IAST_REPORT_EVERY_MS) {
169
+ seen.pending++;
170
+ return;
171
+ }
172
+ if (!seen) {
173
+ // First sight in this process: the one time the stack is read.
174
+ seen = { lastSent: -Infinity, pending: 0, location: codeLocation() };
175
+ if (state.seen.size >= exports.IAST_MAX_FINGERPRINTS) {
176
+ const oldest = state.seen.keys().next().value;
177
+ if (oldest !== undefined)
178
+ state.seen.delete(oldest);
179
+ }
180
+ state.seen.set(fp, seen);
181
+ }
182
+ const attrs = {
183
+ 'shield360.rasp.kind': 'vulnerability',
184
+ 'shield360.rasp.event_id': (0, crypto_1.randomBytes)(16).toString('hex'),
185
+ 'shield360.rasp.app': state.app,
186
+ 'shield360.rasp.rule': v.rule,
187
+ 'shield360.rasp.sink': sink,
188
+ 'shield360.rasp.source': 'request',
189
+ 'shield360.rasp.input_key': inputKey,
190
+ 'shield360.rasp.config_version': state.configVersion,
191
+ 'shield360.rasp.language': 'node',
192
+ 'shield360.rasp.vuln.fingerprint': fp,
193
+ 'shield360.rasp.vuln.position': v.position,
194
+ 'shield360.rasp.count': String(seen.pending + 1),
195
+ };
196
+ const opt = (k, value) => {
197
+ if (value)
198
+ attrs[k] = value;
199
+ };
200
+ opt('shield360.rasp.route', route);
201
+ opt('shield360.rasp.method', safeMethod(extra.method ?? ctx?.method));
202
+ opt('shield360.rasp.framework', extra.framework ?? ctx?.framework);
203
+ opt('shield360.rasp.vuln.location', seen.location);
204
+ const sinkTo = state.sink;
205
+ // Refused (rate limit, full queue) or nowhere to send: count it, and try again at the next sighting.
206
+ // No fold key: IAST dedupes and counts its own sightings, so a refused report must leave nothing
207
+ // in the reporter that could be sent later behind its back.
208
+ if (!sinkTo || sinkTo.add({ name: exports.RASP_VULNERABILITY, time: new Date(now).toISOString(), attrs }, '') === false) {
209
+ seen.pending++;
210
+ return;
211
+ }
212
+ seen.lastSent = now;
213
+ seen.pending = 0;
214
+ }
215
+ /** The route of a finding whose framework gave no template: the event route (README "Event route"). */
216
+ exports.iastRouteOf = context_1.eventRouteOf;
217
+ // The SDK's own files (src/ or dist/): frames there are not the app's. Its tests are.
218
+ const SDK_ROOT = (0, path_1.resolve)(__dirname, '..');
219
+ const FRAME_TAIL = /:(\d{1,7}):\d{1,7}$/;
220
+ const LOCATION_CHARS = /[^A-Za-z0-9_./@+~-]/g;
221
+ /** Whether a stack frame's file is the app's own code. */
222
+ function isAppFrame(file) {
223
+ const f = file.replace(/\\/g, '/');
224
+ if (!f || f.startsWith('node:') || f.startsWith('internal/') || f.includes('/node_modules/'))
225
+ return false;
226
+ const root = SDK_ROOT.replace(/\\/g, '/');
227
+ if ((f === root || f.startsWith(root + '/')) && !f.includes('/__tests__/'))
228
+ return false;
229
+ return f.startsWith('/') || /^[A-Za-z]:\//.test(f);
230
+ }
231
+ /**
232
+ * The top stack frame in the app's own code (outside node_modules, Node's
233
+ * internals and the SDK), as `path:line` relative to the working directory
234
+ * (only the last three segments when outside it), or '' when there is none.
235
+ */
236
+ function codeLocation(stack) {
237
+ let text = stack;
238
+ if (text === undefined) {
239
+ const limit = Error.stackTraceLimit;
240
+ try {
241
+ Error.stackTraceLimit = 64;
242
+ text = new Error().stack || '';
243
+ }
244
+ finally {
245
+ Error.stackTraceLimit = limit;
246
+ }
247
+ }
248
+ for (const raw of text.split('\n').slice(1)) {
249
+ let line = raw.trim();
250
+ if (!line.startsWith('at '))
251
+ continue;
252
+ line = line.slice(3);
253
+ const open = line.lastIndexOf('(');
254
+ if (open >= 0 && line.endsWith(')'))
255
+ line = line.slice(open + 1, -1);
256
+ const m = FRAME_TAIL.exec(line);
257
+ if (!m)
258
+ continue;
259
+ const file = line.slice(0, m.index).replace(/^file:\/\//, '');
260
+ if (!isAppFrame(file))
261
+ continue;
262
+ const rel = (0, path_1.relative)(process.cwd(), file);
263
+ const shown = rel && !rel.startsWith('..') && !rel.startsWith(path_1.sep) && !/^[A-Za-z]:/.test(rel) ? rel : file.split(/[\\/]/).slice(-3).join('/');
264
+ return `${shown.replace(/\\/g, '/').replace(LOCATION_CHARS, '_').slice(0, 240)}:${m[1]}`;
265
+ }
266
+ return '';
267
+ }
268
+ /** Forgets every fingerprint seen and the configuration (tests, re-init). */
269
+ function resetIast() {
270
+ state = fresh();
271
+ }
272
+ //# sourceMappingURL=iast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iast.js","sourceRoot":"","sources":["../../src/rasp/iast.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { type RaspClaims } from './config-client';
2
+ import { applicationName, setMonitorOnly, type RemoteConfig } from './engine';
3
+ import type { RaspOptions } from './types';
4
+ export type RaspInitContext = {
5
+ applicationName: string;
6
+ environment?: string;
7
+ url?: string;
8
+ apiKey?: string;
9
+ sdkVersion?: string;
10
+ /** The OTLP endpoint the SDK exports to: always allowed outbound, like `url`. */
11
+ otlpEndpoint?: string;
12
+ env?: NodeJS.ProcessEnv;
13
+ fetchImpl?: typeof fetch;
14
+ };
15
+ /** The hosts of the Shield360 URL and the OTLP endpoint (README "SSRF": always allowed). */
16
+ export declare function alwaysAllowedHosts(urls: (string | undefined)[]): string[];
17
+ /**
18
+ * Whether trust on first use is allowed: the explicit opt-in
19
+ * (`allowUnpinnedConfig` or `SHIELD360_CONFIG_TOFU=dev`), never when
20
+ * `NODE_ENV` or `ENVIRONMENT` says production.
21
+ */
22
+ export declare function tofuAllowed(option: boolean | undefined, env?: NodeJS.ProcessEnv): boolean;
23
+ /** Tests only: lets the once-per-process warning fire again. */
24
+ export declare function resetRaspWarnings(): void;
25
+ export declare function toRemote(c: RaspClaims): RemoteConfig;
26
+ /** Normalises `init({ rasp })`: true, false, or options (an object means on unless `enabled: false`). */
27
+ export declare function resolveRaspOptions(option: boolean | RaspOptions | undefined, env?: NodeJS.ProcessEnv): RaspOptions & {
28
+ enabled: boolean;
29
+ };
30
+ /** Stops polling, reporting and the components timer, and removes the sink hooks (tests, re-init). */
31
+ export declare function shutdownRasp(): Promise<void>;
32
+ /**
33
+ * Turns RASP on (or leaves it off) for this process. Returns whether it is
34
+ * on. Never throws.
35
+ */
36
+ export declare function initRasp(option: boolean | RaspOptions | undefined, ctx: RaspInitContext): boolean;
37
+ /** The runtime kill switch: checks return immediately until `enableRasp()`. */
38
+ export declare function disableRasp(): void;
39
+ /** Undoes `disableRasp()`. The env switch and the signed config's kill switch still win. */
40
+ export declare function enableRasp(): void;
41
+ /** Whether RASP checks run right now (on, and no kill switch). */
42
+ export declare function raspActive(): boolean;
43
+ export { applicationName as raspApplicationName, setMonitorOnly };
44
+ export { RaspBlockedError, RaspBlockedError as Shield360RaspBlocked, blockBody, BLOCK_MESSAGE, ATTACK_TYPES } from './types';
45
+ export type { RaspOptions, RaspMode, AttackType, RaspInput, Finding, ConfigPublicKey } from './types';
46
+ export type { RaspExpressOptions } from './middleware';
47
+ export { raspExpress, raspExpressErrorHandler, raspFastify, raspKoa, raspHttp, withRasp, recordRequestBody, isRaspBlocked, sendBlocked, blockedResponse } from './middleware';
48
+ export { recordModelOutput, recordToolArguments } from './model-output';
49
+ export { runInRaspScope, currentContext as currentRaspContext, inputsOf } from './context';
50
+ export { check as raspCheck } from './engine';
51
+ export { compileRuleExpr, evaluateRuleExpr, RULE_EXPR_LIMITS, RULE_FIELDS } from './rule-expr';
52
+ export type { RuleSubject, RuleExprErrorCode } from './rule-expr';
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RULE_FIELDS = exports.RULE_EXPR_LIMITS = exports.evaluateRuleExpr = exports.compileRuleExpr = exports.raspCheck = exports.inputsOf = exports.currentRaspContext = exports.runInRaspScope = exports.recordToolArguments = exports.recordModelOutput = exports.blockedResponse = exports.sendBlocked = exports.isRaspBlocked = exports.recordRequestBody = exports.withRasp = exports.raspHttp = exports.raspKoa = exports.raspFastify = exports.raspExpressErrorHandler = exports.raspExpress = exports.ATTACK_TYPES = exports.BLOCK_MESSAGE = exports.blockBody = exports.Shield360RaspBlocked = exports.RaspBlockedError = exports.setMonitorOnly = exports.raspApplicationName = void 0;
4
+ exports.alwaysAllowedHosts = alwaysAllowedHosts;
5
+ exports.tofuAllowed = tofuAllowed;
6
+ exports.resetRaspWarnings = resetRaspWarnings;
7
+ exports.toRemote = toRemote;
8
+ exports.resolveRaspOptions = resolveRaspOptions;
9
+ exports.shutdownRasp = shutdownRasp;
10
+ exports.initRasp = initRasp;
11
+ exports.disableRasp = disableRasp;
12
+ exports.enableRasp = enableRasp;
13
+ exports.raspActive = raspActive;
14
+ /**
15
+ * Shield360 runtime application self-protection (RASP), opt-in.
16
+ *
17
+ * Shield360.init({ rasp: { enabled: true, configPublicKey: process.env.SHIELD360_CONFIG_PUBLIC_KEY } });
18
+ * app.use(raspExpress());
19
+ *
20
+ * or `SHIELD360_RASP=monitor|block`. `SHIELD360_RASP=off` always wins.
21
+ * sdk/rasp/README.md is the contract. Fail open everywhere: the only error
22
+ * RASP raises on purpose is `RaspBlockedError`, which the middleware turns
23
+ * into a 403.
24
+ *
25
+ * This part covers request capture, model output as input, the detection
26
+ * engine, virtual patches, the signed config, events, and the sink hooks:
27
+ * child_process, fs, outbound HTTP, database drivers, and code,
28
+ * deserialization, XML and HTML responses; and sink rules, which point those
29
+ * checks at further library functions from data (built in, or the signed
30
+ * config).
31
+ */
32
+ const os_1 = require("os");
33
+ const path_1 = require("path");
34
+ const baseline_1 = require("./baseline");
35
+ const deception_1 = require("./deception");
36
+ const config_client_1 = require("./config-client");
37
+ const engine_1 = require("./engine");
38
+ Object.defineProperty(exports, "raspApplicationName", { enumerable: true, get: function () { return engine_1.applicationName; } });
39
+ Object.defineProperty(exports, "setMonitorOnly", { enumerable: true, get: function () { return engine_1.setMonitorOnly; } });
40
+ const code_1 = require("./hooks/code");
41
+ const db_1 = require("./hooks/db");
42
+ const fs_1 = require("./hooks/fs");
43
+ const http_1 = require("./hooks/http");
44
+ const include_1 = require("./hooks/include");
45
+ const process_1 = require("./hooks/process");
46
+ const sinks_1 = require("./hooks/sinks");
47
+ const iast_1 = require("./iast");
48
+ const reporter_1 = require("./reporter");
49
+ const COMPONENTS_EVERY_MS = 24 * 60 * 60 * 1000;
50
+ /** The hosts of the Shield360 URL and the OTLP endpoint (README "SSRF": always allowed). */
51
+ function alwaysAllowedHosts(urls) {
52
+ const hosts = new Set();
53
+ for (const u of urls) {
54
+ try {
55
+ if (u)
56
+ hosts.add(new URL(u).hostname.toLowerCase().replace(/^\[|\]$/g, ''));
57
+ }
58
+ catch {
59
+ // not a URL: nothing to allow
60
+ }
61
+ }
62
+ return [...hosts];
63
+ }
64
+ const PRODUCTION = /^prod(uction)?$/i;
65
+ /**
66
+ * Whether trust on first use is allowed: the explicit opt-in
67
+ * (`allowUnpinnedConfig` or `SHIELD360_CONFIG_TOFU=dev`), never when
68
+ * `NODE_ENV` or `ENVIRONMENT` says production.
69
+ */
70
+ function tofuAllowed(option, env = process.env) {
71
+ const asked = option === true || (env.SHIELD360_CONFIG_TOFU || '').trim().toLowerCase() === 'dev';
72
+ if (!asked)
73
+ return false;
74
+ return ![env.NODE_ENV, env.ENVIRONMENT].some((v) => PRODUCTION.test((v || '').trim()));
75
+ }
76
+ let warnedUnpinned = false;
77
+ /** One log line per process when the config key is not pinned (not a reported event). */
78
+ function warnUnpinnedOnce() {
79
+ if (warnedUnpinned)
80
+ return;
81
+ warnedUnpinned = true;
82
+ console.warn("Shield360 RASP: the signed config key is not pinned, so the signed config is not used and RASP runs its built-in defaults in monitor mode. Set configPublicKey (or SHIELD360_CONFIG_PUBLIC_KEY) to the environment's public key from the app's Runtime protection settings in Shield360.");
83
+ }
84
+ /** Tests only: lets the once-per-process warning fire again. */
85
+ function resetRaspWarnings() {
86
+ warnedUnpinned = false;
87
+ }
88
+ let runtime = {};
89
+ function toRemote(c) {
90
+ return {
91
+ version: c.version,
92
+ exp: c.exp,
93
+ killSwitch: c.killSwitch === true,
94
+ snippets: c.snippets === true,
95
+ reportTargets: c.reportTargets === true,
96
+ mode: c.mode,
97
+ attacks: c.attacks && typeof c.attacks === 'object' ? c.attacks : {},
98
+ allow: c.allow && typeof c.allow === 'object' ? c.allow : undefined,
99
+ rules: Array.isArray(c.rules) ? c.rules : null,
100
+ sinks: Array.isArray(c.sinks) ? c.sinks : null,
101
+ customRules: Array.isArray(c.customRules) ? c.customRules : null,
102
+ deception: (0, deception_1.parseDeception)(c.deception),
103
+ };
104
+ }
105
+ /** Normalises `init({ rasp })`: true, false, or options (an object means on unless `enabled: false`). */
106
+ function resolveRaspOptions(option, env = process.env) {
107
+ const e = (0, engine_1.envSetting)(env);
108
+ const o = typeof option === 'object' && option !== null ? option : {};
109
+ let enabled = option === true || (typeof option === 'object' && option !== null && option.enabled !== false);
110
+ if (option === undefined && (e === 'monitor' || e === 'block'))
111
+ enabled = true;
112
+ if (e === 'off')
113
+ enabled = false;
114
+ return { ...o, enabled };
115
+ }
116
+ /** Stops polling, reporting and the components timer, and removes the sink hooks (tests, re-init). */
117
+ async function shutdownRasp() {
118
+ const r = runtime;
119
+ runtime = {};
120
+ (0, process_1.uninstallProcessHooks)();
121
+ (0, fs_1.uninstallFsHooks)();
122
+ (0, http_1.uninstallHttpHooks)();
123
+ (0, db_1.uninstallDbHooks)();
124
+ (0, code_1.uninstallCodeHooks)();
125
+ (0, sinks_1.uninstallSinkHooks)();
126
+ (0, include_1.uninstallIncludeHooks)();
127
+ r.client?.stop();
128
+ if (r.componentsTimer)
129
+ clearInterval(r.componentsTimer);
130
+ (0, engine_1.setEventSink)(undefined);
131
+ (0, iast_1.setIastSink)(undefined);
132
+ await r.reporter?.stop();
133
+ }
134
+ /**
135
+ * Turns RASP on (or leaves it off) for this process. Returns whether it is
136
+ * on. Never throws.
137
+ */
138
+ function initRasp(option, ctx) {
139
+ try {
140
+ void shutdownRasp();
141
+ const env = ctx.env ?? process.env;
142
+ const o = resolveRaspOptions(option, env);
143
+ const remoteWanted = o.enabled && o.remote !== false && Boolean(ctx.url && ctx.apiKey);
144
+ const pinned = (0, config_client_1.parsePublicKeys)(o.configPublicKey ?? env.SHIELD360_CONFIG_PUBLIC_KEY);
145
+ const tofu = !pinned.length && tofuAllowed(o.allowUnpinnedConfig, env);
146
+ const unpinned = remoteWanted && !pinned.length && !tofu;
147
+ (0, engine_1.configureEngine)({
148
+ enabled: o.enabled,
149
+ applicationName: ctx.applicationName,
150
+ mode: o.mode,
151
+ attacks: o.attacks,
152
+ allow: o.allow,
153
+ modelOutput: o.modelOutput,
154
+ // No pinned key while a remote config was expected: built-in defaults, monitor only.
155
+ monitorOnly: unpinned,
156
+ env,
157
+ });
158
+ (0, iast_1.configureIast)({ option: o.iast, applicationName: ctx.applicationName, environment: ctx.environment, env });
159
+ if (!o.enabled)
160
+ return false;
161
+ (0, process_1.installProcessHooks)();
162
+ (0, fs_1.installFsHooks)();
163
+ (0, http_1.installHttpHooks)({ alwaysAllowedHosts: alwaysAllowedHosts([ctx.url, ctx.otlpEndpoint]) });
164
+ (0, db_1.installDbHooks)();
165
+ (0, code_1.installCodeHooks)();
166
+ (0, sinks_1.installSinkHooks)();
167
+ (0, include_1.installIncludeHooks)();
168
+ let reporter;
169
+ if (ctx.url && ctx.apiKey) {
170
+ reporter = new reporter_1.RaspReporter({
171
+ url: ctx.url,
172
+ apiKey: ctx.apiKey,
173
+ applicationName: ctx.applicationName,
174
+ environment: ctx.environment,
175
+ sdkVersion: ctx.sdkVersion,
176
+ fetchImpl: ctx.fetchImpl,
177
+ });
178
+ reporter.start();
179
+ (0, engine_1.setEventSink)(reporter);
180
+ (0, iast_1.setIastSink)(reporter);
181
+ runtime.reporter = reporter;
182
+ if (o.components !== false) {
183
+ const report = () => {
184
+ try {
185
+ reporter?.reportComponents((0, reporter_1.collectComponents)());
186
+ }
187
+ catch {
188
+ // never
189
+ }
190
+ };
191
+ setImmediate(report).unref?.();
192
+ runtime.componentsTimer = setInterval(report, COMPONENTS_EVERY_MS);
193
+ runtime.componentsTimer.unref?.();
194
+ }
195
+ }
196
+ // Logged, once per reason (the client dedupes); trust on first use was already announced at start.
197
+ const warn = (reason) => {
198
+ if (reason === 'trust_on_first_use')
199
+ return;
200
+ console.warn(`Shield360 RASP: a signed config was refused (${reason}); the last verified config or the local options stay in force.`);
201
+ };
202
+ if (unpinned) {
203
+ warnUnpinnedOnce();
204
+ }
205
+ else if (remoteWanted) {
206
+ if (tofu)
207
+ console.warn('Shield360 RASP: trust on first use is on for the signed config (development only); set configPublicKey before production.');
208
+ const client = new config_client_1.RaspConfigClient({
209
+ url: ctx.url,
210
+ apiKey: ctx.apiKey,
211
+ app: ctx.applicationName,
212
+ pinned,
213
+ allowUnpinned: tofu,
214
+ cacheDir: o.cacheDir || (0, path_1.join)((0, os_1.tmpdir)(), 'shield360-rasp'),
215
+ onConfig: (claims) => {
216
+ const remote = claims ? toRemote(claims) : undefined;
217
+ (0, engine_1.setRemoteConfig)(remote);
218
+ (0, iast_1.setIastRemote)(claims ? { iast: claims.iast, iastSampleRate: claims.iastSampleRate, version: claims.version } : undefined);
219
+ // The platform's sink rules replace the built-in list when present.
220
+ (0, sinks_1.setSinkRules)(remote?.sinks ? (0, sinks_1.parseSinkRules)(remote.sinks) : sinks_1.BUILT_IN_SINKS);
221
+ },
222
+ onWarning: warn,
223
+ fetchImpl: ctx.fetchImpl,
224
+ });
225
+ runtime.client = client;
226
+ client.start();
227
+ }
228
+ // Off the start-up path, once the reporter is in place.
229
+ setImmediate(() => (0, baseline_1.runBaseline)({ environment: ctx.environment, remoteWanted, pinned: pinned.length > 0, env })).unref?.();
230
+ return true;
231
+ }
232
+ catch (e) {
233
+ console.warn(`Shield360 RASP could not start: ${e instanceof Error ? e.name : 'error'}`);
234
+ return false;
235
+ }
236
+ }
237
+ /** The runtime kill switch: checks return immediately until `enableRasp()`. */
238
+ function disableRasp() {
239
+ (0, engine_1.setRuntimeDisabled)(true);
240
+ }
241
+ /** Undoes `disableRasp()`. The env switch and the signed config's kill switch still win. */
242
+ function enableRasp() {
243
+ (0, engine_1.setRuntimeDisabled)(false);
244
+ }
245
+ /** Whether RASP checks run right now (on, and no kill switch). */
246
+ function raspActive() {
247
+ return (0, engine_1.isActive)();
248
+ }
249
+ var types_1 = require("./types");
250
+ Object.defineProperty(exports, "RaspBlockedError", { enumerable: true, get: function () { return types_1.RaspBlockedError; } });
251
+ Object.defineProperty(exports, "Shield360RaspBlocked", { enumerable: true, get: function () { return types_1.RaspBlockedError; } });
252
+ Object.defineProperty(exports, "blockBody", { enumerable: true, get: function () { return types_1.blockBody; } });
253
+ Object.defineProperty(exports, "BLOCK_MESSAGE", { enumerable: true, get: function () { return types_1.BLOCK_MESSAGE; } });
254
+ Object.defineProperty(exports, "ATTACK_TYPES", { enumerable: true, get: function () { return types_1.ATTACK_TYPES; } });
255
+ var middleware_1 = require("./middleware");
256
+ Object.defineProperty(exports, "raspExpress", { enumerable: true, get: function () { return middleware_1.raspExpress; } });
257
+ Object.defineProperty(exports, "raspExpressErrorHandler", { enumerable: true, get: function () { return middleware_1.raspExpressErrorHandler; } });
258
+ Object.defineProperty(exports, "raspFastify", { enumerable: true, get: function () { return middleware_1.raspFastify; } });
259
+ Object.defineProperty(exports, "raspKoa", { enumerable: true, get: function () { return middleware_1.raspKoa; } });
260
+ Object.defineProperty(exports, "raspHttp", { enumerable: true, get: function () { return middleware_1.raspHttp; } });
261
+ Object.defineProperty(exports, "withRasp", { enumerable: true, get: function () { return middleware_1.withRasp; } });
262
+ Object.defineProperty(exports, "recordRequestBody", { enumerable: true, get: function () { return middleware_1.recordRequestBody; } });
263
+ Object.defineProperty(exports, "isRaspBlocked", { enumerable: true, get: function () { return middleware_1.isRaspBlocked; } });
264
+ Object.defineProperty(exports, "sendBlocked", { enumerable: true, get: function () { return middleware_1.sendBlocked; } });
265
+ Object.defineProperty(exports, "blockedResponse", { enumerable: true, get: function () { return middleware_1.blockedResponse; } });
266
+ var model_output_1 = require("./model-output");
267
+ Object.defineProperty(exports, "recordModelOutput", { enumerable: true, get: function () { return model_output_1.recordModelOutput; } });
268
+ Object.defineProperty(exports, "recordToolArguments", { enumerable: true, get: function () { return model_output_1.recordToolArguments; } });
269
+ var context_1 = require("./context");
270
+ Object.defineProperty(exports, "runInRaspScope", { enumerable: true, get: function () { return context_1.runInRaspScope; } });
271
+ Object.defineProperty(exports, "currentRaspContext", { enumerable: true, get: function () { return context_1.currentContext; } });
272
+ Object.defineProperty(exports, "inputsOf", { enumerable: true, get: function () { return context_1.inputsOf; } });
273
+ var engine_2 = require("./engine");
274
+ Object.defineProperty(exports, "raspCheck", { enumerable: true, get: function () { return engine_2.check; } });
275
+ var rule_expr_1 = require("./rule-expr");
276
+ Object.defineProperty(exports, "compileRuleExpr", { enumerable: true, get: function () { return rule_expr_1.compileRuleExpr; } });
277
+ Object.defineProperty(exports, "evaluateRuleExpr", { enumerable: true, get: function () { return rule_expr_1.evaluateRuleExpr; } });
278
+ Object.defineProperty(exports, "RULE_EXPR_LIMITS", { enumerable: true, get: function () { return rule_expr_1.RULE_EXPR_LIMITS; } });
279
+ Object.defineProperty(exports, "RULE_FIELDS", { enumerable: true, get: function () { return rule_expr_1.RULE_FIELDS; } });
280
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rasp/index.ts"],"names":[],"mappings":";;;AA4DA,gDAUC;AASD,kCAIC;AAcD,8CAEC;AAKD,4BAeC;AAGD,gDAOC;AAGD,oCAeC;AAMD,4BA+FC;AAGD,kCAEC;AAGD,gCAEC;AAGD,gCAEC;AAvQD;;;;;;;;;;;;;;;;;GAiBG;AACH,2BAA4B;AAC5B,+BAA4B;AAC5B,yCAAyC;AACzC,2CAA6C;AAC7C,mDAAqF;AACrF,qCAUkB;AAwOU,oGAjP1B,wBAAe,OAiP8B;AAAE,+FA5O/C,uBAAc,OA4O+C;AAvO/D,uCAAoE;AACpE,mCAA8D;AAC9D,mCAA8D;AAC9D,uCAAoE;AACpE,6CAA6E;AAC7E,6CAA6E;AAC7E,yCAAmH;AACnH,iCAAmE;AACnE,yCAA6D;AAG7D,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAchD,4FAA4F;AAC5F,SAAgB,kBAAkB,CAAC,IAA4B;IAC7D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAEtC;;;;GAIG;AACH,SAAgB,WAAW,CAAC,MAA2B,EAAE,MAAyB,OAAO,CAAC,GAAG;IAC3F,MAAM,KAAK,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;IAClG,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,yFAAyF;AACzF,SAAS,gBAAgB;IACvB,IAAI,cAAc;QAAE,OAAO;IAC3B,cAAc,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,IAAI,CACV,0RAA0R,CAC3R,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAgB,iBAAiB;IAC/B,cAAc,GAAG,KAAK,CAAC;AACzB,CAAC;AAGD,IAAI,OAAO,GAAY,EAAE,CAAC;AAE1B,SAAgB,QAAQ,CAAC,CAAa;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,UAAU,EAAE,CAAC,CAAC,UAAU,KAAK,IAAI;QACjC,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI;QAC7B,aAAa,EAAE,CAAC,CAAC,aAAa,KAAK,IAAI;QACvC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACpE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACnE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC9C,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;QAChE,SAAS,EAAE,IAAA,0BAAc,EAAC,CAAC,CAAC,SAAS,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,yGAAyG;AACzG,SAAgB,kBAAkB,CAAC,MAAyC,EAAE,MAAyB,OAAO,CAAC,GAAG;IAChH,MAAM,CAAC,GAAG,IAAA,mBAAU,EAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAgB,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,IAAI,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;IAC7G,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC;IAC/E,IAAI,CAAC,KAAK,KAAK;QAAE,OAAO,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED,sGAAsG;AAC/F,KAAK,UAAU,YAAY;IAChC,MAAM,CAAC,GAAG,OAAO,CAAC;IAClB,OAAO,GAAG,EAAE,CAAC;IACb,IAAA,+BAAqB,GAAE,CAAC;IACxB,IAAA,qBAAgB,GAAE,CAAC;IACnB,IAAA,yBAAkB,GAAE,CAAC;IACrB,IAAA,qBAAgB,GAAE,CAAC;IACnB,IAAA,yBAAkB,GAAE,CAAC;IACrB,IAAA,0BAAkB,GAAE,CAAC;IACrB,IAAA,+BAAqB,GAAE,CAAC;IACxB,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,CAAC,eAAe;QAAE,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACxD,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;IACxB,IAAA,kBAAW,EAAC,SAAS,CAAC,CAAC;IACvB,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,MAAyC,EAAE,GAAoB;IACtF,IAAI,CAAC;QACH,KAAK,YAAY,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;QACnC,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,IAAA,+BAAe,EAAC,CAAC,CAAC,eAAe,IAAI,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC;QACzD,IAAA,wBAAe,EAAC;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,eAAe,EAAE,GAAG,CAAC,eAAe;YACpC,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,qFAAqF;YACrF,WAAW,EAAE,QAAQ;YACrB,GAAG;SACJ,CAAC,CAAC;QACH,IAAA,oBAAa,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC7B,IAAA,6BAAmB,GAAE,CAAC;QACtB,IAAA,mBAAc,GAAE,CAAC;QACjB,IAAA,uBAAgB,EAAC,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1F,IAAA,mBAAc,GAAE,CAAC;QACjB,IAAA,uBAAgB,GAAE,CAAC;QACnB,IAAA,wBAAgB,GAAE,CAAC;QACnB,IAAA,6BAAmB,GAAE,CAAC;QAEtB,IAAI,QAAkC,CAAC;QACvC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAI,uBAAY,CAAC;gBAC1B,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,eAAe,EAAE,GAAG,CAAC,eAAe;gBACpC,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC,CAAC;YACH,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;YACvB,IAAA,kBAAW,EAAC,QAAQ,CAAC,CAAC;YACtB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,CAAC;wBACH,QAAQ,EAAE,gBAAgB,CAAC,IAAA,4BAAiB,GAAE,CAAC,CAAC;oBAClD,CAAC;oBAAC,MAAM,CAAC;wBACP,QAAQ;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC/B,OAAO,CAAC,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACnE,OAAO,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,CAAC;QACH,CAAC;QAED,mGAAmG;QACnG,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,IAAI,MAAM,KAAK,oBAAoB;gBAAE,OAAO;YAC5C,OAAO,CAAC,IAAI,CAAC,gDAAgD,MAAM,iEAAiE,CAAC,CAAC;QACxI,CAAC,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,gBAAgB,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,IAAI,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,2HAA2H,CAAC,CAAC;YACpJ,MAAM,MAAM,GAAG,IAAI,gCAAgB,CAAC;gBAClC,GAAG,EAAE,GAAG,CAAC,GAAa;gBACtB,MAAM,EAAE,GAAG,CAAC,MAAgB;gBAC5B,GAAG,EAAE,GAAG,CAAC,eAAe;gBACxB,MAAM;gBACN,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,gBAAgB,CAAC;gBACxD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;oBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBACrD,IAAA,wBAAe,EAAC,MAAM,CAAC,CAAC;oBACxB,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC1H,oEAAoE;oBACpE,IAAA,oBAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAA,sBAAc,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAc,CAAC,CAAC;gBAC9E,CAAC;gBACD,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC,CAAC;YACH,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,wDAAwD;QACxD,YAAY,CAAC,GAAG,EAAE,CAAC,IAAA,sBAAW,EAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1H,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,SAAgB,WAAW;IACzB,IAAA,2BAAkB,EAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,4FAA4F;AAC5F,SAAgB,UAAU;IACxB,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,kEAAkE;AAClE,SAAgB,UAAU;IACxB,OAAO,IAAA,iBAAQ,GAAE,CAAC;AACpB,CAAC;AAGD,iCAA6H;AAApH,yGAAA,gBAAgB,OAAA;AAAE,6GAAA,gBAAgB,OAAwB;AAAE,kGAAA,SAAS,OAAA;AAAE,sGAAA,aAAa,OAAA;AAAE,qGAAA,YAAY,OAAA;AAG3G,2CAA8K;AAArK,yGAAA,WAAW,OAAA;AAAE,qHAAA,uBAAuB,OAAA;AAAE,yGAAA,WAAW,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,sGAAA,QAAQ,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,yGAAA,WAAW,OAAA;AAAE,6GAAA,eAAe,OAAA;AACvJ,+CAAwE;AAA/D,iHAAA,iBAAiB,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAC/C,qCAA2F;AAAlF,yGAAA,cAAc,OAAA;AAAE,6GAAA,cAAc,OAAsB;AAAE,mGAAA,QAAQ,OAAA;AACvE,mCAA8C;AAArC,mGAAA,KAAK,OAAa;AAC3B,yCAA+F;AAAtF,4GAAA,eAAe,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,wGAAA,WAAW,OAAA"}