vaspera 2.7.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +111 -7
  3. package/dist/__tests__/agents/adversary/tactics/api.test.d.ts +5 -0
  4. package/dist/__tests__/agents/adversary/tactics/api.test.d.ts.map +1 -0
  5. package/dist/__tests__/agents/adversary/tactics/api.test.js +369 -0
  6. package/dist/__tests__/agents/adversary/tactics/api.test.js.map +1 -0
  7. package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts +5 -0
  8. package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts.map +1 -0
  9. package/dist/__tests__/agents/adversary/tactics/llm.test.js +409 -0
  10. package/dist/__tests__/agents/adversary/tactics/llm.test.js.map +1 -0
  11. package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts +7 -0
  12. package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts.map +1 -0
  13. package/dist/__tests__/agents/adversary/tactics/registry.test.js +74 -0
  14. package/dist/__tests__/agents/adversary/tactics/registry.test.js.map +1 -0
  15. package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts +7 -0
  16. package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts.map +1 -0
  17. package/dist/__tests__/agents/adversary/tactics/web-app.test.js +374 -0
  18. package/dist/__tests__/agents/adversary/tactics/web-app.test.js.map +1 -0
  19. package/dist/__tests__/compliance-bundle.test.d.ts +9 -0
  20. package/dist/__tests__/compliance-bundle.test.d.ts.map +1 -0
  21. package/dist/__tests__/compliance-bundle.test.js +344 -0
  22. package/dist/__tests__/compliance-bundle.test.js.map +1 -0
  23. package/dist/__tests__/healthcare-compliance.test.d.ts +9 -0
  24. package/dist/__tests__/healthcare-compliance.test.d.ts.map +1 -0
  25. package/dist/__tests__/healthcare-compliance.test.js +233 -0
  26. package/dist/__tests__/healthcare-compliance.test.js.map +1 -0
  27. package/dist/action/diff-mode.d.ts +124 -8
  28. package/dist/action/diff-mode.d.ts.map +1 -1
  29. package/dist/action/diff-mode.js +384 -65
  30. package/dist/action/diff-mode.js.map +1 -1
  31. package/dist/action/diff-mode.test.js +3 -3
  32. package/dist/action/diff-mode.test.js.map +1 -1
  33. package/dist/action/pr-comment.test.js +1 -0
  34. package/dist/action/pr-comment.test.js.map +1 -1
  35. package/dist/action/sarif-upload.test.js +1 -0
  36. package/dist/action/sarif-upload.test.js.map +1 -1
  37. package/dist/agents/adversary/config.d.ts +113 -0
  38. package/dist/agents/adversary/config.d.ts.map +1 -0
  39. package/dist/agents/adversary/config.js +391 -0
  40. package/dist/agents/adversary/config.js.map +1 -0
  41. package/dist/agents/adversary/index.d.ts +41 -0
  42. package/dist/agents/adversary/index.d.ts.map +1 -0
  43. package/dist/agents/adversary/index.js +838 -0
  44. package/dist/agents/adversary/index.js.map +1 -0
  45. package/dist/agents/adversary/reporting/compliance-mapper.d.ts +108 -0
  46. package/dist/agents/adversary/reporting/compliance-mapper.d.ts.map +1 -0
  47. package/dist/agents/adversary/reporting/compliance-mapper.js +391 -0
  48. package/dist/agents/adversary/reporting/compliance-mapper.js.map +1 -0
  49. package/dist/agents/adversary/reporting/index.d.ts +10 -0
  50. package/dist/agents/adversary/reporting/index.d.ts.map +1 -0
  51. package/dist/agents/adversary/reporting/index.js +10 -0
  52. package/dist/agents/adversary/reporting/index.js.map +1 -0
  53. package/dist/agents/adversary/reporting/poc-generator.d.ts +44 -0
  54. package/dist/agents/adversary/reporting/poc-generator.d.ts.map +1 -0
  55. package/dist/agents/adversary/reporting/poc-generator.js +308 -0
  56. package/dist/agents/adversary/reporting/poc-generator.js.map +1 -0
  57. package/dist/agents/adversary/tactics/api.d.ts +13 -0
  58. package/dist/agents/adversary/tactics/api.d.ts.map +1 -0
  59. package/dist/agents/adversary/tactics/api.js +815 -0
  60. package/dist/agents/adversary/tactics/api.js.map +1 -0
  61. package/dist/agents/adversary/tactics/auth.d.ts +13 -0
  62. package/dist/agents/adversary/tactics/auth.d.ts.map +1 -0
  63. package/dist/agents/adversary/tactics/auth.js +676 -0
  64. package/dist/agents/adversary/tactics/auth.js.map +1 -0
  65. package/dist/agents/adversary/tactics/index.d.ts +129 -0
  66. package/dist/agents/adversary/tactics/index.d.ts.map +1 -0
  67. package/dist/agents/adversary/tactics/index.js +199 -0
  68. package/dist/agents/adversary/tactics/index.js.map +1 -0
  69. package/dist/agents/adversary/tactics/infra.d.ts +13 -0
  70. package/dist/agents/adversary/tactics/infra.d.ts.map +1 -0
  71. package/dist/agents/adversary/tactics/infra.js +827 -0
  72. package/dist/agents/adversary/tactics/infra.js.map +1 -0
  73. package/dist/agents/adversary/tactics/injection.d.ts +12 -0
  74. package/dist/agents/adversary/tactics/injection.d.ts.map +1 -0
  75. package/dist/agents/adversary/tactics/injection.js +549 -0
  76. package/dist/agents/adversary/tactics/injection.js.map +1 -0
  77. package/dist/agents/adversary/tactics/llm.d.ts +13 -0
  78. package/dist/agents/adversary/tactics/llm.d.ts.map +1 -0
  79. package/dist/agents/adversary/tactics/llm.js +767 -0
  80. package/dist/agents/adversary/tactics/llm.js.map +1 -0
  81. package/dist/agents/adversary/tactics/web-app.d.ts +13 -0
  82. package/dist/agents/adversary/tactics/web-app.d.ts.map +1 -0
  83. package/dist/agents/adversary/tactics/web-app.js +717 -0
  84. package/dist/agents/adversary/tactics/web-app.js.map +1 -0
  85. package/dist/agents/adversary/types.d.ts +407 -0
  86. package/dist/agents/adversary/types.d.ts.map +1 -0
  87. package/dist/agents/adversary/types.js +12 -0
  88. package/dist/agents/adversary/types.js.map +1 -0
  89. package/dist/agents/index.d.ts +1 -0
  90. package/dist/agents/index.d.ts.map +1 -1
  91. package/dist/agents/index.js +2 -0
  92. package/dist/agents/index.js.map +1 -1
  93. package/dist/agents/zero-day-hunter.d.ts +1 -1
  94. package/dist/agents/zero-day-hunter.d.ts.map +1 -1
  95. package/dist/analysis/data-flow.d.ts +154 -0
  96. package/dist/analysis/data-flow.d.ts.map +1 -0
  97. package/dist/analysis/data-flow.js +393 -0
  98. package/dist/analysis/data-flow.js.map +1 -0
  99. package/dist/analysis/index.d.ts +9 -0
  100. package/dist/analysis/index.d.ts.map +1 -0
  101. package/dist/analysis/index.js +9 -0
  102. package/dist/analysis/index.js.map +1 -0
  103. package/dist/badge-service/index.d.ts +144 -0
  104. package/dist/badge-service/index.d.ts.map +1 -0
  105. package/dist/badge-service/index.js +206 -0
  106. package/dist/badge-service/index.js.map +1 -0
  107. package/dist/certification/consensus.test.js +2 -0
  108. package/dist/certification/consensus.test.js.map +1 -1
  109. package/dist/certification/store.d.ts.map +1 -1
  110. package/dist/certification/store.js +4 -0
  111. package/dist/certification/store.js.map +1 -1
  112. package/dist/certification/types.d.ts +3 -3
  113. package/dist/certification/types.d.ts.map +1 -1
  114. package/dist/certification/types.js +2 -0
  115. package/dist/certification/types.js.map +1 -1
  116. package/dist/commands/certification/certify.d.ts.map +1 -1
  117. package/dist/commands/certification/certify.js +18 -4
  118. package/dist/commands/certification/certify.js.map +1 -1
  119. package/dist/compliance/attestation.d.ts +39 -0
  120. package/dist/compliance/attestation.d.ts.map +1 -0
  121. package/dist/compliance/attestation.js +364 -0
  122. package/dist/compliance/attestation.js.map +1 -0
  123. package/dist/compliance/cfr42-part2.d.ts +42 -0
  124. package/dist/compliance/cfr42-part2.d.ts.map +1 -0
  125. package/dist/compliance/cfr42-part2.js +408 -0
  126. package/dist/compliance/cfr42-part2.js.map +1 -0
  127. package/dist/compliance/compliance-bundle.d.ts +100 -0
  128. package/dist/compliance/compliance-bundle.d.ts.map +1 -0
  129. package/dist/compliance/compliance-bundle.js +210 -0
  130. package/dist/compliance/compliance-bundle.js.map +1 -0
  131. package/dist/compliance/healthcare-bundle.d.ts +68 -0
  132. package/dist/compliance/healthcare-bundle.d.ts.map +1 -0
  133. package/dist/compliance/healthcare-bundle.js +104 -0
  134. package/dist/compliance/healthcare-bundle.js.map +1 -0
  135. package/dist/compliance/hipaa.d.ts.map +1 -1
  136. package/dist/compliance/hipaa.js +14 -11
  137. package/dist/compliance/hipaa.js.map +1 -1
  138. package/dist/compliance/index.d.ts +10 -2
  139. package/dist/compliance/index.d.ts.map +1 -1
  140. package/dist/compliance/index.js +9 -3
  141. package/dist/compliance/index.js.map +1 -1
  142. package/dist/compliance/mapper.d.ts.map +1 -1
  143. package/dist/compliance/mapper.js +3 -17
  144. package/dist/compliance/mapper.js.map +1 -1
  145. package/dist/compliance/nist-800-53.d.ts +22 -6
  146. package/dist/compliance/nist-800-53.d.ts.map +1 -1
  147. package/dist/compliance/nist-800-53.js +264 -272
  148. package/dist/compliance/nist-800-53.js.map +1 -1
  149. package/dist/compliance/report.d.ts +31 -2
  150. package/dist/compliance/report.d.ts.map +1 -1
  151. package/dist/compliance/report.js +255 -4
  152. package/dist/compliance/report.js.map +1 -1
  153. package/dist/compliance/types.d.ts +1 -1
  154. package/dist/compliance/types.d.ts.map +1 -1
  155. package/dist/config/flags.d.ts +12 -12
  156. package/dist/cost/index.d.ts +1 -1
  157. package/dist/cost/index.d.ts.map +1 -1
  158. package/dist/cost/index.js +1 -1
  159. package/dist/cost/index.js.map +1 -1
  160. package/dist/cost/tracker.d.ts +64 -0
  161. package/dist/cost/tracker.d.ts.map +1 -1
  162. package/dist/cost/tracker.js +165 -0
  163. package/dist/cost/tracker.js.map +1 -1
  164. package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +28 -0
  165. package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +1 -0
  166. package/dist/eval/fixtures/healthcare/audit-gaps.js +90 -0
  167. package/dist/eval/fixtures/healthcare/audit-gaps.js.map +1 -0
  168. package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +31 -0
  169. package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +1 -0
  170. package/dist/eval/fixtures/healthcare/consent-bypass.js +61 -0
  171. package/dist/eval/fixtures/healthcare/consent-bypass.js.map +1 -0
  172. package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +24 -0
  173. package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +1 -0
  174. package/dist/eval/fixtures/healthcare/phi-in-logs.js +41 -0
  175. package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +1 -0
  176. package/dist/evidence/collector.d.ts +21 -0
  177. package/dist/evidence/collector.d.ts.map +1 -0
  178. package/dist/evidence/collector.js +340 -0
  179. package/dist/evidence/collector.js.map +1 -0
  180. package/dist/evidence/index.d.ts +11 -0
  181. package/dist/evidence/index.d.ts.map +1 -0
  182. package/dist/evidence/index.js +12 -0
  183. package/dist/evidence/index.js.map +1 -0
  184. package/dist/evidence/store.d.ts +39 -0
  185. package/dist/evidence/store.d.ts.map +1 -0
  186. package/dist/evidence/store.js +173 -0
  187. package/dist/evidence/store.js.map +1 -0
  188. package/dist/evidence/types.d.ts +175 -0
  189. package/dist/evidence/types.d.ts.map +1 -0
  190. package/dist/evidence/types.js +9 -0
  191. package/dist/evidence/types.js.map +1 -0
  192. package/dist/exporters/checkmarx.d.ts +18 -0
  193. package/dist/exporters/checkmarx.d.ts.map +1 -0
  194. package/dist/exporters/checkmarx.js +203 -0
  195. package/dist/exporters/checkmarx.js.map +1 -0
  196. package/dist/exporters/index.d.ts +22 -0
  197. package/dist/exporters/index.d.ts.map +1 -0
  198. package/dist/exporters/index.js +41 -0
  199. package/dist/exporters/index.js.map +1 -0
  200. package/dist/exporters/snyk.d.ts +18 -0
  201. package/dist/exporters/snyk.d.ts.map +1 -0
  202. package/dist/exporters/snyk.js +119 -0
  203. package/dist/exporters/snyk.js.map +1 -0
  204. package/dist/exporters/sonarqube.d.ts +18 -0
  205. package/dist/exporters/sonarqube.d.ts.map +1 -0
  206. package/dist/exporters/sonarqube.js +125 -0
  207. package/dist/exporters/sonarqube.js.map +1 -0
  208. package/dist/exporters/types.d.ts +190 -0
  209. package/dist/exporters/types.d.ts.map +1 -0
  210. package/dist/exporters/types.js +9 -0
  211. package/dist/exporters/types.js.map +1 -0
  212. package/dist/frontier/index.d.ts +12 -0
  213. package/dist/frontier/index.d.ts.map +1 -0
  214. package/dist/frontier/index.js +12 -0
  215. package/dist/frontier/index.js.map +1 -0
  216. package/dist/frontier/orchestrator.d.ts +73 -0
  217. package/dist/frontier/orchestrator.d.ts.map +1 -0
  218. package/dist/frontier/orchestrator.js +312 -0
  219. package/dist/frontier/orchestrator.js.map +1 -0
  220. package/dist/frontier/providers/stub.d.ts +32 -0
  221. package/dist/frontier/providers/stub.d.ts.map +1 -0
  222. package/dist/frontier/providers/stub.js +66 -0
  223. package/dist/frontier/providers/stub.js.map +1 -0
  224. package/dist/frontier/types.d.ts +318 -0
  225. package/dist/frontier/types.d.ts.map +1 -0
  226. package/dist/frontier/types.js +27 -0
  227. package/dist/frontier/types.js.map +1 -0
  228. package/dist/history/index.d.ts +13 -0
  229. package/dist/history/index.d.ts.map +1 -0
  230. package/dist/history/index.js +15 -0
  231. package/dist/history/index.js.map +1 -0
  232. package/dist/history/store.d.ts +74 -0
  233. package/dist/history/store.d.ts.map +1 -0
  234. package/dist/history/store.js +399 -0
  235. package/dist/history/store.js.map +1 -0
  236. package/dist/history/types.d.ts +282 -0
  237. package/dist/history/types.d.ts.map +1 -0
  238. package/dist/history/types.js +41 -0
  239. package/dist/history/types.js.map +1 -0
  240. package/dist/history/verify.d.ts +44 -0
  241. package/dist/history/verify.d.ts.map +1 -0
  242. package/dist/history/verify.js +230 -0
  243. package/dist/history/verify.js.map +1 -0
  244. package/dist/index.d.ts.map +1 -1
  245. package/dist/index.js +431 -18
  246. package/dist/index.js.map +1 -1
  247. package/dist/multimodel/index.d.ts +1 -0
  248. package/dist/multimodel/index.d.ts.map +1 -1
  249. package/dist/multimodel/index.js +2 -0
  250. package/dist/multimodel/index.js.map +1 -1
  251. package/dist/multimodel/leaderboard.d.ts +116 -0
  252. package/dist/multimodel/leaderboard.d.ts.map +1 -0
  253. package/dist/multimodel/leaderboard.js +262 -0
  254. package/dist/multimodel/leaderboard.js.map +1 -0
  255. package/dist/observability/otel.d.ts.map +1 -1
  256. package/dist/observability/otel.js +1 -3
  257. package/dist/observability/otel.js.map +1 -1
  258. package/dist/plugins/loader.js +1 -1
  259. package/dist/plugins/loader.js.map +1 -1
  260. package/dist/sbom/provenance.test.js +2 -2
  261. package/dist/sbom/provenance.test.js.map +1 -1
  262. package/dist/scanners/agent/agent-chain-analysis.d.ts +152 -0
  263. package/dist/scanners/agent/agent-chain-analysis.d.ts.map +1 -0
  264. package/dist/scanners/agent/agent-chain-analysis.js +438 -0
  265. package/dist/scanners/agent/agent-chain-analysis.js.map +1 -0
  266. package/dist/scanners/agent/manifest-audit.d.ts.map +1 -1
  267. package/dist/scanners/agent/manifest-audit.js +30 -18
  268. package/dist/scanners/agent/manifest-audit.js.map +1 -1
  269. package/dist/scanners/agent/payloads/index.d.ts +2 -1
  270. package/dist/scanners/agent/payloads/index.d.ts.map +1 -1
  271. package/dist/scanners/agent/payloads/index.js +25 -6
  272. package/dist/scanners/agent/payloads/index.js.map +1 -1
  273. package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
  274. package/dist/scanners/agent/prompt-injection-fuzzer.js +14 -0
  275. package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
  276. package/dist/scanners/agent/types.d.ts +5 -5
  277. package/dist/scanners/agent/types.d.ts.map +1 -1
  278. package/dist/scanners/agent/types.js.map +1 -1
  279. package/dist/scanners/cache.d.ts +156 -0
  280. package/dist/scanners/cache.d.ts.map +1 -0
  281. package/dist/scanners/cache.js +462 -0
  282. package/dist/scanners/cache.js.map +1 -0
  283. package/dist/scanners/dependencies.d.ts.map +1 -1
  284. package/dist/scanners/dependencies.js +5 -6
  285. package/dist/scanners/dependencies.js.map +1 -1
  286. package/dist/scanners/gosec.d.ts.map +1 -1
  287. package/dist/scanners/gosec.js +47 -9
  288. package/dist/scanners/gosec.js.map +1 -1
  289. package/dist/scanners/healthcare.d.ts +29 -0
  290. package/dist/scanners/healthcare.d.ts.map +1 -0
  291. package/dist/scanners/healthcare.js +526 -0
  292. package/dist/scanners/healthcare.js.map +1 -0
  293. package/dist/scanners/index.d.ts +1 -0
  294. package/dist/scanners/index.d.ts.map +1 -1
  295. package/dist/scanners/index.js +33 -0
  296. package/dist/scanners/index.js.map +1 -1
  297. package/dist/scanners/index.test.js +6 -6
  298. package/dist/scanners/index.test.js.map +1 -1
  299. package/dist/scanners/secrets.js +4 -4
  300. package/dist/scanners/secrets.js.map +1 -1
  301. package/dist/scanners/semgrep.js +5 -5
  302. package/dist/scanners/semgrep.js.map +1 -1
  303. package/dist/scanners/types.d.ts +1 -1
  304. package/dist/scanners/types.d.ts.map +1 -1
  305. package/dist/scanners/types.js +1 -0
  306. package/dist/scanners/types.js.map +1 -1
  307. package/dist/scanners/typescript.test.js +1 -1
  308. package/dist/scanners/typescript.test.js.map +1 -1
  309. package/dist/telemetry/index.d.ts +10 -0
  310. package/dist/telemetry/index.d.ts.map +1 -0
  311. package/dist/telemetry/index.js +10 -0
  312. package/dist/telemetry/index.js.map +1 -0
  313. package/dist/telemetry/registry.d.ts +178 -0
  314. package/dist/telemetry/registry.d.ts.map +1 -0
  315. package/dist/telemetry/registry.js +297 -0
  316. package/dist/telemetry/registry.js.map +1 -0
  317. package/dist/telemetry/usage.d.ts +197 -0
  318. package/dist/telemetry/usage.d.ts.map +1 -0
  319. package/dist/telemetry/usage.js +244 -0
  320. package/dist/telemetry/usage.js.map +1 -0
  321. package/package.json +11 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-flow.d.ts","sourceRoot":"","sources":["../../src/analysis/data-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Data Flow Analysis Module
3
+ *
4
+ * Tracks data flow from sources (user input, API responses) to sinks
5
+ * (database writes, command execution) to identify potential vulnerabilities.
6
+ *
7
+ * This module provides the foundation for semantic vulnerability detection
8
+ * by identifying risky data flows that bypass sanitization.
9
+ *
10
+ * @module analysis/data-flow
11
+ */
12
+ import { readFile } from "fs/promises";
13
+ import { join, extname } from "path";
14
+ import { logger } from "../logger.js";
15
+ // ============================================================================
16
+ // Pattern Definitions
17
+ // ============================================================================
18
+ /**
19
+ * Patterns for identifying data sources by language
20
+ */
21
+ const SOURCE_PATTERNS = {
22
+ javascript: [
23
+ // Express.js patterns
24
+ { pattern: /req\.body(?:\.\w+)?/g, type: "user-input", trustLevel: "untrusted" },
25
+ { pattern: /req\.params(?:\.\w+)?/g, type: "url-param", trustLevel: "untrusted" },
26
+ { pattern: /req\.query(?:\.\w+)?/g, type: "url-param", trustLevel: "untrusted" },
27
+ { pattern: /req\.headers(?:\[['"][^'"]+['"]\])?/g, type: "header", trustLevel: "untrusted" },
28
+ { pattern: /req\.cookies(?:\.\w+)?/g, type: "cookie", trustLevel: "untrusted" },
29
+ // Fetch/API responses
30
+ { pattern: /\.json\(\)/g, type: "api-response", trustLevel: "semi-trusted" },
31
+ { pattern: /await\s+fetch\([^)]+\)/g, type: "api-response", trustLevel: "semi-trusted" },
32
+ // Environment variables
33
+ { pattern: /process\.env(?:\.\w+|\[['"][^'"]+['"]\])/g, type: "env-var", trustLevel: "trusted" },
34
+ // File reads
35
+ { pattern: /readFile(?:Sync)?\([^)]+\)/g, type: "file-read", trustLevel: "semi-trusted" },
36
+ { pattern: /fs\.read(?:File)?(?:Sync)?\([^)]+\)/g, type: "file-read", trustLevel: "semi-trusted" },
37
+ ],
38
+ typescript: [], // Same as JavaScript, will extend
39
+ python: [
40
+ // Flask patterns
41
+ { pattern: /request\.(?:form|json|args|data|values)(?:\[['"][^'"]+['"]\])?/g, type: "user-input", trustLevel: "untrusted" },
42
+ { pattern: /request\.headers(?:\[['"][^'"]+['"]\])?/g, type: "header", trustLevel: "untrusted" },
43
+ { pattern: /request\.cookies(?:\[['"][^'"]+['"]\])?/g, type: "cookie", trustLevel: "untrusted" },
44
+ // Django patterns
45
+ { pattern: /request\.(?:GET|POST|FILES)(?:\[['"][^'"]+['"]\])?/g, type: "user-input", trustLevel: "untrusted" },
46
+ // Environment
47
+ { pattern: /os\.(?:getenv|environ)(?:\[['"][^'"]+['"]\]|\(['"][^'"]+['"]\))/g, type: "env-var", trustLevel: "trusted" },
48
+ // File reads
49
+ { pattern: /open\([^)]+\)\.read\(\)/g, type: "file-read", trustLevel: "semi-trusted" },
50
+ ],
51
+ };
52
+ /**
53
+ * Patterns for identifying data sinks by language
54
+ */
55
+ const SINK_PATTERNS = {
56
+ javascript: [
57
+ // SQL
58
+ { pattern: /\.query\([^)]+\)/g, type: "sql-query", riskLevel: "critical", function: "query" },
59
+ { pattern: /\.execute\([^)]+\)/g, type: "sql-query", riskLevel: "critical", function: "execute" },
60
+ { pattern: /\.raw\([^)]+\)/g, type: "sql-query", riskLevel: "critical", function: "raw" },
61
+ // Command execution
62
+ { pattern: /exec\([^)]+\)/g, type: "command-exec", riskLevel: "critical", function: "exec" },
63
+ { pattern: /execSync\([^)]+\)/g, type: "command-exec", riskLevel: "critical", function: "execSync" },
64
+ { pattern: /spawn\([^)]+\)/g, type: "command-exec", riskLevel: "high", function: "spawn" },
65
+ // Eval
66
+ { pattern: /eval\([^)]+\)/g, type: "eval", riskLevel: "critical", function: "eval" },
67
+ { pattern: /Function\([^)]+\)/g, type: "eval", riskLevel: "critical", function: "Function" },
68
+ { pattern: /vm\.runInContext\([^)]+\)/g, type: "eval", riskLevel: "critical", function: "vm.runInContext" },
69
+ // File writes
70
+ { pattern: /writeFile(?:Sync)?\([^)]+\)/g, type: "file-write", riskLevel: "high", function: "writeFile" },
71
+ { pattern: /fs\.write(?:File)?(?:Sync)?\([^)]+\)/g, type: "file-write", riskLevel: "high", function: "fs.writeFile" },
72
+ // HTML rendering
73
+ { pattern: /\.innerHTML\s*=/g, type: "html-render", riskLevel: "high", function: "innerHTML" },
74
+ { pattern: /document\.write\([^)]+\)/g, type: "html-render", riskLevel: "high", function: "document.write" },
75
+ // Redirects
76
+ { pattern: /res\.redirect\([^)]+\)/g, type: "redirect", riskLevel: "medium", function: "res.redirect" },
77
+ { pattern: /location\.href\s*=/g, type: "redirect", riskLevel: "medium", function: "location.href" },
78
+ ],
79
+ typescript: [], // Same as JavaScript
80
+ python: [
81
+ // SQL
82
+ { pattern: /\.execute\([^)]+\)/g, type: "sql-query", riskLevel: "critical", function: "execute" },
83
+ { pattern: /cursor\.execute\([^)]+\)/g, type: "sql-query", riskLevel: "critical", function: "cursor.execute" },
84
+ // Command execution
85
+ { pattern: /os\.system\([^)]+\)/g, type: "command-exec", riskLevel: "critical", function: "os.system" },
86
+ { pattern: /subprocess\.(?:run|call|Popen)\([^)]+\)/g, type: "command-exec", riskLevel: "critical", function: "subprocess" },
87
+ // Eval
88
+ { pattern: /eval\([^)]+\)/g, type: "eval", riskLevel: "critical", function: "eval" },
89
+ { pattern: /exec\([^)]+\)/g, type: "eval", riskLevel: "critical", function: "exec" },
90
+ // File writes
91
+ { pattern: /open\([^,]+,\s*['"]w['"]\)/g, type: "file-write", riskLevel: "high", function: "open(write)" },
92
+ ],
93
+ };
94
+ /**
95
+ * Patterns for identifying sanitizers
96
+ */
97
+ const SANITIZER_PATTERNS = {
98
+ javascript: [
99
+ { pattern: /escape(?:Html)?\(/g, function: "escapeHtml", sanitizesFor: ["html-render"] },
100
+ { pattern: /sanitize(?:Html)?\(/g, function: "sanitizeHtml", sanitizesFor: ["html-render"] },
101
+ { pattern: /DOMPurify\.sanitize\(/g, function: "DOMPurify.sanitize", sanitizesFor: ["html-render"] },
102
+ { pattern: /encodeURIComponent\(/g, function: "encodeURIComponent", sanitizesFor: ["redirect", "url-param"] },
103
+ { pattern: /parameterized|prepared|placeholder/gi, function: "prepared statement", sanitizesFor: ["sql-query"] },
104
+ { pattern: /\$\d+|\?/g, function: "parameterized query", sanitizesFor: ["sql-query"] },
105
+ ],
106
+ python: [
107
+ { pattern: /escape\(/g, function: "escape", sanitizesFor: ["html-render"] },
108
+ { pattern: /bleach\.clean\(/g, function: "bleach.clean", sanitizesFor: ["html-render"] },
109
+ { pattern: /quote\(/g, function: "quote", sanitizesFor: ["sql-query"] },
110
+ { pattern: /%s|:\w+/g, function: "parameterized", sanitizesFor: ["sql-query"] },
111
+ ],
112
+ };
113
+ // Copy JS patterns to TS
114
+ SOURCE_PATTERNS.typescript = SOURCE_PATTERNS.javascript;
115
+ SINK_PATTERNS.typescript = SINK_PATTERNS.javascript;
116
+ SANITIZER_PATTERNS.typescript = SANITIZER_PATTERNS.javascript;
117
+ // ============================================================================
118
+ // Analysis Functions
119
+ // ============================================================================
120
+ /**
121
+ * Get language from file extension
122
+ */
123
+ function getLanguage(filePath) {
124
+ const ext = extname(filePath).toLowerCase();
125
+ const langMap = {
126
+ ".js": "javascript",
127
+ ".mjs": "javascript",
128
+ ".cjs": "javascript",
129
+ ".jsx": "javascript",
130
+ ".ts": "typescript",
131
+ ".tsx": "typescript",
132
+ ".py": "python",
133
+ };
134
+ return langMap[ext] || "unknown";
135
+ }
136
+ /**
137
+ * Generate a unique ID
138
+ */
139
+ function generateId(prefix) {
140
+ return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
141
+ }
142
+ /**
143
+ * Find line number for a match position
144
+ */
145
+ function getLineNumber(content, position) {
146
+ return content.slice(0, position).split("\n").length;
147
+ }
148
+ /**
149
+ * Get code snippet around a position
150
+ */
151
+ function getSnippet(content, line, contextLines = 1) {
152
+ const lines = content.split("\n");
153
+ const start = Math.max(0, line - contextLines - 1);
154
+ const end = Math.min(lines.length, line + contextLines);
155
+ return lines.slice(start, end).join("\n");
156
+ }
157
+ /**
158
+ * Identify data sources in a file
159
+ */
160
+ async function identifySourcesInFile(filePath, content) {
161
+ const language = getLanguage(filePath);
162
+ const patterns = SOURCE_PATTERNS[language] || [];
163
+ const sources = [];
164
+ for (const { pattern, type, trustLevel } of patterns) {
165
+ const regex = new RegExp(pattern.source, pattern.flags);
166
+ let match;
167
+ while ((match = regex.exec(content)) !== null) {
168
+ const line = getLineNumber(content, match.index);
169
+ sources.push({
170
+ id: generateId("src"),
171
+ type,
172
+ location: {
173
+ file: filePath,
174
+ line,
175
+ snippet: getSnippet(content, line),
176
+ },
177
+ variable: match[0],
178
+ trustLevel,
179
+ description: `${type} at ${filePath}:${line}`,
180
+ pattern: pattern.source,
181
+ });
182
+ }
183
+ }
184
+ return sources;
185
+ }
186
+ /**
187
+ * Identify data sinks in a file
188
+ */
189
+ async function identifySinksInFile(filePath, content) {
190
+ const language = getLanguage(filePath);
191
+ const patterns = SINK_PATTERNS[language] || [];
192
+ const sinks = [];
193
+ for (const { pattern, type, riskLevel, function: fn } of patterns) {
194
+ const regex = new RegExp(pattern.source, pattern.flags);
195
+ let match;
196
+ while ((match = regex.exec(content)) !== null) {
197
+ const line = getLineNumber(content, match.index);
198
+ sinks.push({
199
+ id: generateId("sink"),
200
+ type,
201
+ location: {
202
+ file: filePath,
203
+ line,
204
+ snippet: getSnippet(content, line),
205
+ },
206
+ function: fn,
207
+ riskLevel,
208
+ description: `${type} (${fn}) at ${filePath}:${line}`,
209
+ pattern: pattern.source,
210
+ });
211
+ }
212
+ }
213
+ return sinks;
214
+ }
215
+ /**
216
+ * Identify sanitizers in a file
217
+ */
218
+ async function identifySanitizersInFile(filePath, content) {
219
+ const language = getLanguage(filePath);
220
+ const patterns = SANITIZER_PATTERNS[language] || [];
221
+ const sanitizers = [];
222
+ for (const { pattern, function: fn, sanitizesFor } of patterns) {
223
+ const regex = new RegExp(pattern.source, pattern.flags);
224
+ let match;
225
+ while ((match = regex.exec(content)) !== null) {
226
+ const line = getLineNumber(content, match.index);
227
+ sanitizers.push({
228
+ id: generateId("san"),
229
+ function: fn,
230
+ location: {
231
+ file: filePath,
232
+ line,
233
+ snippet: getSnippet(content, line),
234
+ },
235
+ sanitizesFor,
236
+ description: `Sanitizer ${fn} at ${filePath}:${line}`,
237
+ });
238
+ }
239
+ }
240
+ return sanitizers;
241
+ }
242
+ /**
243
+ * Determine if a source-sink pair has a sanitizer between them
244
+ */
245
+ function hasSanitizerBetween(source, sink, sanitizers) {
246
+ // Simple heuristic: check if there's a sanitizer in the same file
247
+ // between the source and sink lines, and if it sanitizes for this sink type
248
+ const relevantSanitizers = sanitizers.filter((s) => s.location.file === source.location.file &&
249
+ s.location.file === sink.location.file &&
250
+ s.location.line > source.location.line &&
251
+ s.location.line < sink.location.line &&
252
+ s.sanitizesFor.includes(sink.type));
253
+ return {
254
+ sanitized: relevantSanitizers.length > 0,
255
+ sanitizerLocations: relevantSanitizers.map((s) => s.location),
256
+ };
257
+ }
258
+ /**
259
+ * Calculate risk level for a flow
260
+ */
261
+ function calculateFlowRisk(source, sink, sanitized) {
262
+ if (sanitized) {
263
+ return "info";
264
+ }
265
+ if (source.trustLevel === "untrusted") {
266
+ if (sink.riskLevel === "critical")
267
+ return "critical";
268
+ if (sink.riskLevel === "high")
269
+ return "high";
270
+ return "medium";
271
+ }
272
+ if (source.trustLevel === "semi-trusted") {
273
+ if (sink.riskLevel === "critical")
274
+ return "high";
275
+ if (sink.riskLevel === "high")
276
+ return "medium";
277
+ return "low";
278
+ }
279
+ return "low";
280
+ }
281
+ /**
282
+ * Identify potential data flows between sources and sinks
283
+ */
284
+ function identifyFlows(sources, sinks, sanitizers) {
285
+ const flows = [];
286
+ // Simple heuristic: match sources and sinks in the same file
287
+ // More sophisticated analysis would use actual data flow tracking
288
+ for (const source of sources) {
289
+ for (const sink of sinks) {
290
+ // Only connect sources and sinks in the same file (simplified)
291
+ if (source.location.file !== sink.location.file) {
292
+ continue;
293
+ }
294
+ // Only connect if sink comes after source
295
+ if (sink.location.line <= source.location.line) {
296
+ continue;
297
+ }
298
+ const { sanitized, sanitizerLocations } = hasSanitizerBetween(source, sink, sanitizers);
299
+ const riskLevel = calculateFlowRisk(source, sink, sanitized);
300
+ flows.push({
301
+ source,
302
+ sink,
303
+ path: [source.location, sink.location],
304
+ passesThroughSanitizer: sanitized,
305
+ sanitizerLocations: sanitized ? sanitizerLocations : undefined,
306
+ riskLevel,
307
+ description: sanitized
308
+ ? `Sanitized flow from ${source.type} to ${sink.type}`
309
+ : `Unsanitized ${source.trustLevel} data flows to ${sink.type}`,
310
+ });
311
+ }
312
+ }
313
+ return flows;
314
+ }
315
+ // ============================================================================
316
+ // Public API
317
+ // ============================================================================
318
+ /**
319
+ * Build data flow context for a project
320
+ */
321
+ export async function buildDataFlowContext(projectPath, files) {
322
+ const allSources = [];
323
+ const allSinks = [];
324
+ const allSanitizers = [];
325
+ // If no files provided, this would scan the project
326
+ // For now, accept a list of files to analyze
327
+ const filesToAnalyze = files || [];
328
+ for (const filePath of filesToAnalyze) {
329
+ try {
330
+ const fullPath = join(projectPath, filePath);
331
+ const content = await readFile(fullPath, "utf-8");
332
+ const sources = await identifySourcesInFile(filePath, content);
333
+ const sinks = await identifySinksInFile(filePath, content);
334
+ const sanitizers = await identifySanitizersInFile(filePath, content);
335
+ allSources.push(...sources);
336
+ allSinks.push(...sinks);
337
+ allSanitizers.push(...sanitizers);
338
+ }
339
+ catch (error) {
340
+ logger.warn("data-flow.file_read_error", {
341
+ file: filePath,
342
+ error: error instanceof Error ? error.message : String(error),
343
+ });
344
+ }
345
+ }
346
+ const flows = identifyFlows(allSources, allSinks, allSanitizers);
347
+ const riskyFlows = flows.filter((f) => !f.passesThroughSanitizer);
348
+ const sanitizedFlows = flows.filter((f) => f.passesThroughSanitizer);
349
+ return {
350
+ sources: allSources,
351
+ sinks: allSinks,
352
+ sanitizers: allSanitizers,
353
+ flows,
354
+ stats: {
355
+ totalSources: allSources.length,
356
+ totalSinks: allSinks.length,
357
+ totalSanitizers: allSanitizers.length,
358
+ totalFlows: flows.length,
359
+ riskyFlows: riskyFlows.length,
360
+ sanitizedFlows: sanitizedFlows.length,
361
+ },
362
+ };
363
+ }
364
+ /**
365
+ * Get only risky (unsanitized) flows
366
+ */
367
+ export function getRiskyFlows(context) {
368
+ return context.flows.filter((f) => !f.passesThroughSanitizer);
369
+ }
370
+ /**
371
+ * Get flows by severity
372
+ */
373
+ export function getFlowsBySeverity(context, severity) {
374
+ return context.flows.filter((f) => f.riskLevel === severity);
375
+ }
376
+ /**
377
+ * Format context for LLM analysis
378
+ */
379
+ export function formatContextForLLM(riskyFlows, maxFlows = 10) {
380
+ const flows = riskyFlows.slice(0, maxFlows);
381
+ let output = "# Risky Data Flows Detected\n\n";
382
+ output += `Found ${riskyFlows.length} unsanitized data flows. Showing top ${flows.length}:\n\n`;
383
+ for (const flow of flows) {
384
+ output += `## ${flow.source.type} → ${flow.sink.type} (${flow.riskLevel})\n\n`;
385
+ output += `**Source:** ${flow.source.location.file}:${flow.source.location.line}\n`;
386
+ output += `\`\`\`\n${flow.source.location.snippet || flow.source.variable}\n\`\`\`\n\n`;
387
+ output += `**Sink:** ${flow.sink.location.file}:${flow.sink.location.line}\n`;
388
+ output += `\`\`\`\n${flow.sink.location.snippet || flow.sink.function}\n\`\`\`\n\n`;
389
+ output += `**Risk:** ${flow.description}\n\n---\n\n`;
390
+ }
391
+ return output;
392
+ }
393
+ //# sourceMappingURL=data-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-flow.js","sourceRoot":"","sources":["../../src/analysis/data-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Analysis Module
3
+ *
4
+ * Advanced code analysis capabilities including data flow tracking.
5
+ *
6
+ * @module analysis
7
+ */
8
+ export * from "./data-flow.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Analysis Module
3
+ *
4
+ * Advanced code analysis capabilities including data flow tracking.
5
+ *
6
+ * @module analysis
7
+ */
8
+ export * from "./data-flow.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analysis/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Badge Service
3
+ *
4
+ * HTTP service for serving certification badges with verification endpoints.
5
+ * Designed for deployment on Vercel/Cloudflare edge with caching.
6
+ *
7
+ * @module badge-service
8
+ */
9
+ import type { CertificationLevel } from "../certification/types.js";
10
+ /**
11
+ * Certification record for badge lookup
12
+ */
13
+ export interface CertificationRecord {
14
+ /** Unique certification ID */
15
+ id: string;
16
+ /** Project identifier (hashed) */
17
+ projectHash: string;
18
+ /** Certification level */
19
+ level: CertificationLevel;
20
+ /** Overall score (0-100) */
21
+ score: number;
22
+ /** When certification was issued */
23
+ issuedAt: string;
24
+ /** Expiration date (30 days from issue) */
25
+ expiresAt: string;
26
+ /** Sigstore bundle for verification */
27
+ sigstoreBundle?: {
28
+ mediaType: string;
29
+ verificationMaterial: Record<string, unknown>;
30
+ messageSignature: Record<string, unknown>;
31
+ };
32
+ /** Rekor transparency log index */
33
+ rekorLogIndex?: number;
34
+ /** Signature URL for verification */
35
+ signatureUrl?: string;
36
+ /** Certificate URL for verification */
37
+ certUrl?: string;
38
+ }
39
+ /**
40
+ * Verification response
41
+ */
42
+ export interface VerificationResponse {
43
+ /** Whether the certification is valid */
44
+ valid: boolean;
45
+ /** Certification ID */
46
+ certificationId: string;
47
+ /** Certification level if valid */
48
+ level?: CertificationLevel;
49
+ /** Score if valid */
50
+ score?: number;
51
+ /** Issue date */
52
+ issuedAt?: string;
53
+ /** Expiration date */
54
+ expiresAt?: string;
55
+ /** Whether it's expired */
56
+ expired?: boolean;
57
+ /** Sigstore bundle if available */
58
+ sigstoreBundle?: CertificationRecord["sigstoreBundle"];
59
+ /** Rekor log index if available */
60
+ rekorLogIndex?: number;
61
+ /** Verification command for CLI */
62
+ verifyCommand?: string;
63
+ /** Error message if invalid */
64
+ error?: string;
65
+ }
66
+ /**
67
+ * Badge embed code formats
68
+ */
69
+ export interface BadgeEmbedCode {
70
+ /** Markdown format */
71
+ markdown: string;
72
+ /** HTML format */
73
+ html: string;
74
+ /** Badge URL */
75
+ url: string;
76
+ /** Verification URL */
77
+ verifyUrl: string;
78
+ }
79
+ /**
80
+ * Interface for certification storage
81
+ */
82
+ export interface CertificationStorage {
83
+ /** Get certification by ID */
84
+ getCertification(id: string): Promise<CertificationRecord | null>;
85
+ /** Store a certification */
86
+ storeCertification(record: CertificationRecord): Promise<void>;
87
+ /** List all certifications */
88
+ listCertifications(): Promise<CertificationRecord[]>;
89
+ }
90
+ /**
91
+ * In-memory storage for development/testing
92
+ */
93
+ export declare class MemoryCertificationStorage implements CertificationStorage {
94
+ private certifications;
95
+ getCertification(id: string): Promise<CertificationRecord | null>;
96
+ storeCertification(record: CertificationRecord): Promise<void>;
97
+ listCertifications(): Promise<CertificationRecord[]>;
98
+ }
99
+ /**
100
+ * Generate an expired/invalid badge SVG
101
+ */
102
+ export declare function generateExpiredBadgeSvg(): string;
103
+ /**
104
+ * Generate a not-found badge SVG
105
+ */
106
+ export declare function generateNotFoundBadgeSvg(): string;
107
+ /**
108
+ * Check if a certification is expired
109
+ */
110
+ export declare function isExpired(cert: CertificationRecord, graceMinutes?: number): boolean;
111
+ /**
112
+ * Add days to a date
113
+ */
114
+ export declare function addDays(dateStr: string, days: number): string;
115
+ /**
116
+ * Generate embed code for a certification badge
117
+ */
118
+ export declare function generateBadgeEmbedCode(certificationId: string, baseUrl?: string): BadgeEmbedCode;
119
+ /**
120
+ * Handle badge SVG request
121
+ */
122
+ export declare function handleBadgeRequest(certId: string, storage: CertificationStorage): Promise<{
123
+ svg: string;
124
+ status: number;
125
+ headers: Record<string, string>;
126
+ }>;
127
+ /**
128
+ * Handle verification request
129
+ */
130
+ export declare function handleVerifyRequest(certId: string, storage: CertificationStorage): Promise<{
131
+ json: VerificationResponse;
132
+ status: number;
133
+ }>;
134
+ /**
135
+ * Handle embed code request
136
+ */
137
+ export declare function handleEmbedRequest(certId: string, storage: CertificationStorage, baseUrl?: string): Promise<{
138
+ json: BadgeEmbedCode | {
139
+ error: string;
140
+ };
141
+ status: number;
142
+ }>;
143
+ export { generateBadgeSvg, generateScoreBadgeSvg, } from "../certification/badge.js";
144
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/badge-service/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAOpE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,0BAA0B;IAC1B,KAAK,EAAE,kBAAkB,CAAC;IAE1B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAElB,uCAAuC;IACvC,cAAc,CAAC,EAAE;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,CAAC;IAEF,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,KAAK,EAAE,OAAO,CAAC;IAEf,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IAExB,mCAAmC;IACnC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAE3B,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,iBAAiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,mCAAmC;IACnC,cAAc,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAEvD,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IAEjB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IAEb,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;IAEZ,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAElE,4BAA4B;IAC5B,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,qBAAa,0BAA2B,YAAW,oBAAoB;IACrE,OAAO,CAAC,cAAc,CAA+C;IAE/D,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAIjE,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;CAG3D;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAyBhD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAyBjD;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE,YAAY,SAAI,GAAG,OAAO,CAK9E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7D;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,EACvB,OAAO,SAA+B,GACrC,cAAc,CAUhB;AAMD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CA6B3E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCzD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,EAC7B,OAAO,SAA+B,GACrC,OAAO,CAAC;IAAE,IAAI,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAcvE;AAMD,OAAO,EACL,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC"}