vaspera 2.8.0 → 2.9.2

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 (303) hide show
  1. package/CHANGELOG.md +109 -7
  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 +25 -4
  38. package/dist/agents/adversary/config.d.ts.map +1 -1
  39. package/dist/agents/adversary/config.js +38 -8
  40. package/dist/agents/adversary/config.js.map +1 -1
  41. package/dist/agents/adversary/index.d.ts +7 -0
  42. package/dist/agents/adversary/index.d.ts.map +1 -1
  43. package/dist/agents/adversary/index.js +83 -1
  44. package/dist/agents/adversary/index.js.map +1 -1
  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 +66 -10
  86. package/dist/agents/adversary/types.d.ts.map +1 -1
  87. package/dist/agents/zero-day-hunter.d.ts +1 -1
  88. package/dist/agents/zero-day-hunter.d.ts.map +1 -1
  89. package/dist/analysis/data-flow.d.ts +154 -0
  90. package/dist/analysis/data-flow.d.ts.map +1 -0
  91. package/dist/analysis/data-flow.js +393 -0
  92. package/dist/analysis/data-flow.js.map +1 -0
  93. package/dist/analysis/index.d.ts +9 -0
  94. package/dist/analysis/index.d.ts.map +1 -0
  95. package/dist/analysis/index.js +9 -0
  96. package/dist/analysis/index.js.map +1 -0
  97. package/dist/badge-service/index.d.ts +144 -0
  98. package/dist/badge-service/index.d.ts.map +1 -0
  99. package/dist/badge-service/index.js +206 -0
  100. package/dist/badge-service/index.js.map +1 -0
  101. package/dist/certification/types.d.ts +1 -1
  102. package/dist/certification/types.d.ts.map +1 -1
  103. package/dist/certification/types.js.map +1 -1
  104. package/dist/commands/certification/certify.d.ts.map +1 -1
  105. package/dist/commands/certification/certify.js +18 -4
  106. package/dist/commands/certification/certify.js.map +1 -1
  107. package/dist/compliance/attestation.d.ts +39 -0
  108. package/dist/compliance/attestation.d.ts.map +1 -0
  109. package/dist/compliance/attestation.js +364 -0
  110. package/dist/compliance/attestation.js.map +1 -0
  111. package/dist/compliance/cfr42-part2.d.ts +42 -0
  112. package/dist/compliance/cfr42-part2.d.ts.map +1 -0
  113. package/dist/compliance/cfr42-part2.js +408 -0
  114. package/dist/compliance/cfr42-part2.js.map +1 -0
  115. package/dist/compliance/compliance-bundle.d.ts +100 -0
  116. package/dist/compliance/compliance-bundle.d.ts.map +1 -0
  117. package/dist/compliance/compliance-bundle.js +210 -0
  118. package/dist/compliance/compliance-bundle.js.map +1 -0
  119. package/dist/compliance/healthcare-bundle.d.ts +68 -0
  120. package/dist/compliance/healthcare-bundle.d.ts.map +1 -0
  121. package/dist/compliance/healthcare-bundle.js +104 -0
  122. package/dist/compliance/healthcare-bundle.js.map +1 -0
  123. package/dist/compliance/hipaa.d.ts.map +1 -1
  124. package/dist/compliance/hipaa.js +14 -11
  125. package/dist/compliance/hipaa.js.map +1 -1
  126. package/dist/compliance/index.d.ts +10 -2
  127. package/dist/compliance/index.d.ts.map +1 -1
  128. package/dist/compliance/index.js +9 -3
  129. package/dist/compliance/index.js.map +1 -1
  130. package/dist/compliance/mapper.d.ts.map +1 -1
  131. package/dist/compliance/mapper.js +3 -17
  132. package/dist/compliance/mapper.js.map +1 -1
  133. package/dist/compliance/nist-800-53.d.ts +22 -6
  134. package/dist/compliance/nist-800-53.d.ts.map +1 -1
  135. package/dist/compliance/nist-800-53.js +264 -272
  136. package/dist/compliance/nist-800-53.js.map +1 -1
  137. package/dist/compliance/report.d.ts +31 -2
  138. package/dist/compliance/report.d.ts.map +1 -1
  139. package/dist/compliance/report.js +255 -4
  140. package/dist/compliance/report.js.map +1 -1
  141. package/dist/compliance/types.d.ts +1 -1
  142. package/dist/compliance/types.d.ts.map +1 -1
  143. package/dist/config/flags.d.ts +12 -12
  144. package/dist/cost/index.d.ts +1 -1
  145. package/dist/cost/index.d.ts.map +1 -1
  146. package/dist/cost/index.js +1 -1
  147. package/dist/cost/index.js.map +1 -1
  148. package/dist/cost/tracker.d.ts +64 -0
  149. package/dist/cost/tracker.d.ts.map +1 -1
  150. package/dist/cost/tracker.js +165 -0
  151. package/dist/cost/tracker.js.map +1 -1
  152. package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +28 -0
  153. package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +1 -0
  154. package/dist/eval/fixtures/healthcare/audit-gaps.js +90 -0
  155. package/dist/eval/fixtures/healthcare/audit-gaps.js.map +1 -0
  156. package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +31 -0
  157. package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +1 -0
  158. package/dist/eval/fixtures/healthcare/consent-bypass.js +61 -0
  159. package/dist/eval/fixtures/healthcare/consent-bypass.js.map +1 -0
  160. package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +24 -0
  161. package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +1 -0
  162. package/dist/eval/fixtures/healthcare/phi-in-logs.js +41 -0
  163. package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +1 -0
  164. package/dist/evidence/collector.d.ts +21 -0
  165. package/dist/evidence/collector.d.ts.map +1 -0
  166. package/dist/evidence/collector.js +340 -0
  167. package/dist/evidence/collector.js.map +1 -0
  168. package/dist/evidence/index.d.ts +11 -0
  169. package/dist/evidence/index.d.ts.map +1 -0
  170. package/dist/evidence/index.js +12 -0
  171. package/dist/evidence/index.js.map +1 -0
  172. package/dist/evidence/store.d.ts +39 -0
  173. package/dist/evidence/store.d.ts.map +1 -0
  174. package/dist/evidence/store.js +173 -0
  175. package/dist/evidence/store.js.map +1 -0
  176. package/dist/evidence/types.d.ts +175 -0
  177. package/dist/evidence/types.d.ts.map +1 -0
  178. package/dist/evidence/types.js +9 -0
  179. package/dist/evidence/types.js.map +1 -0
  180. package/dist/exporters/checkmarx.d.ts +18 -0
  181. package/dist/exporters/checkmarx.d.ts.map +1 -0
  182. package/dist/exporters/checkmarx.js +203 -0
  183. package/dist/exporters/checkmarx.js.map +1 -0
  184. package/dist/exporters/index.d.ts +22 -0
  185. package/dist/exporters/index.d.ts.map +1 -0
  186. package/dist/exporters/index.js +41 -0
  187. package/dist/exporters/index.js.map +1 -0
  188. package/dist/exporters/snyk.d.ts +18 -0
  189. package/dist/exporters/snyk.d.ts.map +1 -0
  190. package/dist/exporters/snyk.js +119 -0
  191. package/dist/exporters/snyk.js.map +1 -0
  192. package/dist/exporters/sonarqube.d.ts +18 -0
  193. package/dist/exporters/sonarqube.d.ts.map +1 -0
  194. package/dist/exporters/sonarqube.js +125 -0
  195. package/dist/exporters/sonarqube.js.map +1 -0
  196. package/dist/exporters/types.d.ts +190 -0
  197. package/dist/exporters/types.d.ts.map +1 -0
  198. package/dist/exporters/types.js +9 -0
  199. package/dist/exporters/types.js.map +1 -0
  200. package/dist/frontier/index.d.ts +12 -0
  201. package/dist/frontier/index.d.ts.map +1 -0
  202. package/dist/frontier/index.js +12 -0
  203. package/dist/frontier/index.js.map +1 -0
  204. package/dist/frontier/orchestrator.d.ts +73 -0
  205. package/dist/frontier/orchestrator.d.ts.map +1 -0
  206. package/dist/frontier/orchestrator.js +312 -0
  207. package/dist/frontier/orchestrator.js.map +1 -0
  208. package/dist/frontier/providers/stub.d.ts +32 -0
  209. package/dist/frontier/providers/stub.d.ts.map +1 -0
  210. package/dist/frontier/providers/stub.js +66 -0
  211. package/dist/frontier/providers/stub.js.map +1 -0
  212. package/dist/frontier/types.d.ts +318 -0
  213. package/dist/frontier/types.d.ts.map +1 -0
  214. package/dist/frontier/types.js +27 -0
  215. package/dist/frontier/types.js.map +1 -0
  216. package/dist/history/index.d.ts +13 -0
  217. package/dist/history/index.d.ts.map +1 -0
  218. package/dist/history/index.js +15 -0
  219. package/dist/history/index.js.map +1 -0
  220. package/dist/history/store.d.ts +74 -0
  221. package/dist/history/store.d.ts.map +1 -0
  222. package/dist/history/store.js +399 -0
  223. package/dist/history/store.js.map +1 -0
  224. package/dist/history/types.d.ts +282 -0
  225. package/dist/history/types.d.ts.map +1 -0
  226. package/dist/history/types.js +41 -0
  227. package/dist/history/types.js.map +1 -0
  228. package/dist/history/verify.d.ts +44 -0
  229. package/dist/history/verify.d.ts.map +1 -0
  230. package/dist/history/verify.js +230 -0
  231. package/dist/history/verify.js.map +1 -0
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +515 -19
  234. package/dist/index.js.map +1 -1
  235. package/dist/multimodel/index.d.ts +1 -0
  236. package/dist/multimodel/index.d.ts.map +1 -1
  237. package/dist/multimodel/index.js +2 -0
  238. package/dist/multimodel/index.js.map +1 -1
  239. package/dist/multimodel/leaderboard.d.ts +116 -0
  240. package/dist/multimodel/leaderboard.d.ts.map +1 -0
  241. package/dist/multimodel/leaderboard.js +262 -0
  242. package/dist/multimodel/leaderboard.js.map +1 -0
  243. package/dist/observability/otel.d.ts.map +1 -1
  244. package/dist/observability/otel.js +1 -3
  245. package/dist/observability/otel.js.map +1 -1
  246. package/dist/plugins/loader.js +1 -1
  247. package/dist/plugins/loader.js.map +1 -1
  248. package/dist/scanners/agent/agent-chain-analysis.d.ts +152 -0
  249. package/dist/scanners/agent/agent-chain-analysis.d.ts.map +1 -0
  250. package/dist/scanners/agent/agent-chain-analysis.js +438 -0
  251. package/dist/scanners/agent/agent-chain-analysis.js.map +1 -0
  252. package/dist/scanners/agent/payloads/index.d.ts +2 -1
  253. package/dist/scanners/agent/payloads/index.d.ts.map +1 -1
  254. package/dist/scanners/agent/payloads/index.js +25 -6
  255. package/dist/scanners/agent/payloads/index.js.map +1 -1
  256. package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
  257. package/dist/scanners/agent/prompt-injection-fuzzer.js +14 -0
  258. package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
  259. package/dist/scanners/agent/types.d.ts +5 -5
  260. package/dist/scanners/agent/types.d.ts.map +1 -1
  261. package/dist/scanners/agent/types.js.map +1 -1
  262. package/dist/scanners/cache.d.ts +156 -0
  263. package/dist/scanners/cache.d.ts.map +1 -0
  264. package/dist/scanners/cache.js +462 -0
  265. package/dist/scanners/cache.js.map +1 -0
  266. package/dist/scanners/dependencies.js +4 -4
  267. package/dist/scanners/dependencies.js.map +1 -1
  268. package/dist/scanners/gosec.d.ts.map +1 -1
  269. package/dist/scanners/gosec.js +47 -9
  270. package/dist/scanners/gosec.js.map +1 -1
  271. package/dist/scanners/healthcare.d.ts +29 -0
  272. package/dist/scanners/healthcare.d.ts.map +1 -0
  273. package/dist/scanners/healthcare.js +526 -0
  274. package/dist/scanners/healthcare.js.map +1 -0
  275. package/dist/scanners/index.d.ts +1 -0
  276. package/dist/scanners/index.d.ts.map +1 -1
  277. package/dist/scanners/index.js +33 -0
  278. package/dist/scanners/index.js.map +1 -1
  279. package/dist/scanners/index.test.js +6 -6
  280. package/dist/scanners/index.test.js.map +1 -1
  281. package/dist/scanners/secrets.js +4 -4
  282. package/dist/scanners/secrets.js.map +1 -1
  283. package/dist/scanners/semgrep.js +5 -5
  284. package/dist/scanners/semgrep.js.map +1 -1
  285. package/dist/scanners/types.d.ts +1 -1
  286. package/dist/scanners/types.d.ts.map +1 -1
  287. package/dist/scanners/types.js +1 -0
  288. package/dist/scanners/types.js.map +1 -1
  289. package/dist/scanners/typescript.test.js +1 -1
  290. package/dist/scanners/typescript.test.js.map +1 -1
  291. package/dist/telemetry/index.d.ts +10 -0
  292. package/dist/telemetry/index.d.ts.map +1 -0
  293. package/dist/telemetry/index.js +10 -0
  294. package/dist/telemetry/index.js.map +1 -0
  295. package/dist/telemetry/registry.d.ts +178 -0
  296. package/dist/telemetry/registry.d.ts.map +1 -0
  297. package/dist/telemetry/registry.js +297 -0
  298. package/dist/telemetry/registry.js.map +1 -0
  299. package/dist/telemetry/usage.d.ts +197 -0
  300. package/dist/telemetry/usage.d.ts.map +1 -0
  301. package/dist/telemetry/usage.js +252 -0
  302. package/dist/telemetry/usage.js.map +1 -0
  303. package/package.json +2 -6
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Compliance Bundle Tests
3
+ *
4
+ * Tests for universal audit-defensible compliance assessment.
5
+ *
6
+ * @module __tests__/compliance-bundle
7
+ */
8
+ import { describe, it, expect } from "vitest";
9
+ import { runSingleFrameworkAssessment, runComplianceAssessment, generateComplianceSummary, } from "../compliance/compliance-bundle.js";
10
+ import { formatComplianceReportAsMarkdown, formatMultiFrameworkReportAsMarkdown, generateComplianceReport, generateMultiFrameworkReport, } from "../compliance/index.js";
11
+ import { FRAMEWORK_ATTESTATIONS, getFrameworkAttestation, formatAttestationAsMarkdown, formatMultiFrameworkAttestationAsMarkdown, } from "../compliance/attestation.js";
12
+ // Mock findings for testing
13
+ const createMockFindings = () => [
14
+ {
15
+ id: "test-001",
16
+ severity: "high",
17
+ category: "security",
18
+ description: "Hardcoded credentials found",
19
+ confidence: 95,
20
+ evidence: "API key in source code",
21
+ verifications: [],
22
+ created_at: new Date().toISOString(),
23
+ cwe_ids: ["CWE-798"],
24
+ },
25
+ {
26
+ id: "test-002",
27
+ severity: "medium",
28
+ category: "logging",
29
+ description: "Insufficient audit logging",
30
+ confidence: 80,
31
+ evidence: "Missing audit trail for sensitive operations",
32
+ verifications: [],
33
+ created_at: new Date().toISOString(),
34
+ },
35
+ {
36
+ id: "test-003",
37
+ severity: "low",
38
+ category: "encryption",
39
+ description: "Weak cipher suite",
40
+ confidence: 70,
41
+ evidence: "TLS 1.1 still enabled",
42
+ verifications: [],
43
+ created_at: new Date().toISOString(),
44
+ },
45
+ ];
46
+ describe("Framework Attestations", () => {
47
+ it("should have attestations for all standard frameworks", () => {
48
+ const standardFrameworks = [
49
+ "SOC2",
50
+ "ISO27001",
51
+ "PCI-DSS",
52
+ "HIPAA",
53
+ "42-CFR-PART-2",
54
+ "GDPR",
55
+ "NIST-800-53",
56
+ "CIS",
57
+ ];
58
+ for (const framework of standardFrameworks) {
59
+ const attestation = FRAMEWORK_ATTESTATIONS[framework];
60
+ expect(attestation).toBeDefined();
61
+ expect(attestation.fullName).toBeTruthy();
62
+ expect(attestation.methodology.length).toBeGreaterThan(0);
63
+ expect(attestation.scopeLimitations.length).toBeGreaterThan(0);
64
+ expect(attestation.auditorNote).toBeTruthy();
65
+ }
66
+ });
67
+ it("should have attestations for AI frameworks", () => {
68
+ const aiFrameworks = [
69
+ "OWASP-LLM",
70
+ "NIST-AI-RMF",
71
+ "MITRE-ATLAS",
72
+ "EU-AI-ACT",
73
+ "ISO-42001",
74
+ ];
75
+ for (const framework of aiFrameworks) {
76
+ const attestation = FRAMEWORK_ATTESTATIONS[framework];
77
+ expect(attestation).toBeDefined();
78
+ expect(attestation.fullName).toBeTruthy();
79
+ expect(attestation.methodology.length).toBeGreaterThan(0);
80
+ expect(attestation.scopeLimitations.length).toBeGreaterThan(0);
81
+ expect(attestation.auditorNote).toBeTruthy();
82
+ }
83
+ });
84
+ it("should format single-framework attestation as markdown", () => {
85
+ const markdown = formatAttestationAsMarkdown("SOC2");
86
+ expect(markdown).toContain("## Attestation");
87
+ expect(markdown).toContain("SOC 2 Trust Services Criteria");
88
+ expect(markdown).toContain("### Assessment Methodology");
89
+ expect(markdown).toContain("### Scope Limitations");
90
+ expect(markdown).toContain("### Auditor Note");
91
+ expect(markdown).toContain("licensed CPA firm");
92
+ });
93
+ it("should format multi-framework attestation as markdown", () => {
94
+ const markdown = formatMultiFrameworkAttestationAsMarkdown(["SOC2", "ISO27001"]);
95
+ expect(markdown).toContain("## Attestation");
96
+ expect(markdown).toContain("SOC 2 Trust Services Criteria");
97
+ expect(markdown).toContain("ISO/IEC 27001:2022");
98
+ expect(markdown).toContain("### Framework-Specific Notes");
99
+ });
100
+ });
101
+ describe("Audit-Defensible Report Formatting", () => {
102
+ const mockFindings = createMockFindings();
103
+ it("should format compliance report without audit options (backward compatible)", () => {
104
+ const report = generateComplianceReport(mockFindings, "SOC2", "/test/project");
105
+ const markdown = formatComplianceReportAsMarkdown(report);
106
+ expect(markdown).toContain("# SOC2 Compliance Report");
107
+ expect(markdown).toContain("## Compliance Status");
108
+ // Should NOT have audit sections when no options provided
109
+ expect(markdown).not.toContain("## Audit Trail Integrity");
110
+ expect(markdown).not.toContain("## Evidence Bundle");
111
+ expect(markdown).not.toContain("## Attestation");
112
+ });
113
+ it("should include attestation section when requested", () => {
114
+ const report = generateComplianceReport(mockFindings, "SOC2", "/test/project");
115
+ const options = {
116
+ includeAttestation: true,
117
+ };
118
+ const markdown = formatComplianceReportAsMarkdown(report, options);
119
+ expect(markdown).toContain("## Attestation");
120
+ expect(markdown).toContain("SOC 2 Trust Services Criteria");
121
+ expect(markdown).toContain("### Assessment Methodology");
122
+ expect(markdown).toContain("### Scope Limitations");
123
+ });
124
+ it("should include audit trail section when verification provided", () => {
125
+ const report = generateComplianceReport(mockFindings, "ISO27001", "/test/project");
126
+ const options = {
127
+ auditVerification: {
128
+ projectPath: "/test/project",
129
+ verifiedAt: new Date().toISOString(),
130
+ verified: true,
131
+ totalEntries: 10,
132
+ entriesVerified: 10,
133
+ entriesPassed: 10,
134
+ entriesFailed: 0,
135
+ chainIntegrity: true,
136
+ failures: [],
137
+ genesisHash: "abc123def456789",
138
+ headHash: "xyz789abc123456",
139
+ },
140
+ };
141
+ const markdown = formatComplianceReportAsMarkdown(report, options);
142
+ expect(markdown).toContain("## Audit Trail Integrity");
143
+ expect(markdown).toContain("Verified");
144
+ expect(markdown).toContain("Total Entries | 10");
145
+ expect(markdown).toContain("Chain Integrity | Intact");
146
+ expect(markdown).toContain("Genesis Hash");
147
+ });
148
+ it("should show warning for failed audit verification", () => {
149
+ const report = generateComplianceReport(mockFindings, "PCI-DSS", "/test/project");
150
+ const options = {
151
+ auditVerification: {
152
+ projectPath: "/test/project",
153
+ verifiedAt: new Date().toISOString(),
154
+ verified: false,
155
+ totalEntries: 10,
156
+ entriesVerified: 8,
157
+ entriesPassed: 7,
158
+ entriesFailed: 1,
159
+ chainIntegrity: false,
160
+ failures: [],
161
+ firstFailure: {
162
+ entryId: "entry-008",
163
+ timestamp: new Date().toISOString(),
164
+ hashValid: false,
165
+ chainValid: false,
166
+ failureReason: "Hash mismatch",
167
+ },
168
+ },
169
+ };
170
+ const markdown = formatComplianceReportAsMarkdown(report, options);
171
+ expect(markdown).toContain("INTEGRITY FAILURE");
172
+ expect(markdown).toContain("Chain Integrity | Broken");
173
+ expect(markdown).toContain("Audit trail integrity compromised");
174
+ });
175
+ it("should format multi-framework report with audit options", () => {
176
+ const report = generateMultiFrameworkReport(mockFindings, ["SOC2", "ISO27001"], "/test/project");
177
+ const options = {
178
+ includeAttestation: true,
179
+ };
180
+ const markdown = formatMultiFrameworkReportAsMarkdown(report, options);
181
+ expect(markdown).toContain("# Multi-Framework Compliance Report");
182
+ expect(markdown).toContain("## Attestation");
183
+ expect(markdown).toContain("### Framework-Specific Notes");
184
+ expect(markdown).toContain("SOC2:");
185
+ expect(markdown).toContain("ISO27001:");
186
+ });
187
+ it("should add audit-defensible label to footer when features used", () => {
188
+ const report = generateComplianceReport(mockFindings, "HIPAA", "/test/project");
189
+ const options = {
190
+ auditVerification: {
191
+ projectPath: "/test/project",
192
+ verifiedAt: new Date().toISOString(),
193
+ verified: true,
194
+ totalEntries: 5,
195
+ entriesVerified: 5,
196
+ entriesPassed: 5,
197
+ entriesFailed: 0,
198
+ chainIntegrity: true,
199
+ failures: [],
200
+ },
201
+ };
202
+ const markdown = formatComplianceReportAsMarkdown(report, options);
203
+ expect(markdown).toContain("Audit-Defensible");
204
+ });
205
+ });
206
+ describe("Compliance Assessment Bundle", () => {
207
+ const mockFindings = createMockFindings();
208
+ it("should run single framework assessment without audit features", async () => {
209
+ const result = await runSingleFrameworkAssessment({
210
+ projectPath: "/test/project",
211
+ findings: mockFindings,
212
+ framework: "SOC2",
213
+ collectEvidence: false,
214
+ verifyAuditTrail: false,
215
+ includeAttestation: true,
216
+ });
217
+ expect(result.report).toBeDefined();
218
+ expect(result.report.framework).toBe("SOC2");
219
+ expect(result.markdownReport).toContain("# SOC2 Compliance Report");
220
+ expect(result.markdownReport).toContain("## Attestation");
221
+ expect(result.status).toMatch(/compliant|at_risk|non_compliant/);
222
+ expect(result.evidenceBundle).toBeUndefined();
223
+ expect(result.auditVerification).toBeUndefined();
224
+ });
225
+ it("should run multi-framework assessment", async () => {
226
+ const result = await runComplianceAssessment({
227
+ projectPath: "/test/project",
228
+ findings: mockFindings,
229
+ frameworks: ["SOC2", "ISO27001"],
230
+ collectEvidence: false,
231
+ verifyAuditTrail: false,
232
+ includeAttestation: true,
233
+ });
234
+ expect(result.reports).toBeDefined();
235
+ expect(result.reports["SOC2"]).toBeDefined();
236
+ expect(result.reports["ISO27001"]).toBeDefined();
237
+ expect(result.multiFrameworkReport).toBeDefined();
238
+ expect(result.markdownReport).toContain("# Multi-Framework Compliance Report");
239
+ expect(result.combinedScore).toBeGreaterThanOrEqual(0);
240
+ expect(result.combinedScore).toBeLessThanOrEqual(100);
241
+ expect(result.status).toMatch(/compliant|at_risk|non_compliant/);
242
+ });
243
+ it("should handle single framework in multi-assessment", async () => {
244
+ const result = await runComplianceAssessment({
245
+ projectPath: "/test/project",
246
+ findings: mockFindings,
247
+ frameworks: ["PCI-DSS"],
248
+ collectEvidence: false,
249
+ verifyAuditTrail: false,
250
+ });
251
+ // When single framework, should still work correctly
252
+ expect(result.reports["PCI-DSS"]).toBeDefined();
253
+ expect(result.combinedScore).toBe(result.reports["PCI-DSS"]?.status.complianceScore);
254
+ });
255
+ it("should generate compliance summary", async () => {
256
+ const result = await runComplianceAssessment({
257
+ projectPath: "/test/project",
258
+ findings: mockFindings,
259
+ frameworks: ["SOC2", "HIPAA"],
260
+ collectEvidence: false,
261
+ verifyAuditTrail: false,
262
+ });
263
+ const summary = generateComplianceSummary(result);
264
+ expect(summary).toContain("Compliance:");
265
+ expect(summary).toContain("Frameworks: SOC2, HIPAA");
266
+ expect(summary).toContain("Combined Score:");
267
+ expect(summary).toContain("SOC2:");
268
+ expect(summary).toContain("HIPAA:");
269
+ });
270
+ it("should determine status based on findings severity", async () => {
271
+ const criticalFindings = [
272
+ {
273
+ id: "crit-001",
274
+ severity: "critical",
275
+ category: "security",
276
+ description: "Critical vulnerability",
277
+ confidence: 100,
278
+ evidence: "Test",
279
+ verifications: [],
280
+ created_at: new Date().toISOString(),
281
+ },
282
+ ];
283
+ const result = await runSingleFrameworkAssessment({
284
+ projectPath: "/test/project",
285
+ findings: criticalFindings,
286
+ framework: "GDPR",
287
+ collectEvidence: false,
288
+ verifyAuditTrail: false,
289
+ });
290
+ // Critical findings should result in at_risk or non_compliant status
291
+ expect(["at_risk", "non_compliant"]).toContain(result.status);
292
+ });
293
+ it("should be compliant with no findings", async () => {
294
+ const result = await runSingleFrameworkAssessment({
295
+ projectPath: "/test/project",
296
+ findings: [],
297
+ framework: "CIS",
298
+ collectEvidence: false,
299
+ verifyAuditTrail: false,
300
+ });
301
+ expect(result.status).toBe("compliant");
302
+ expect(result.report.status.complianceScore).toBe(100);
303
+ });
304
+ });
305
+ describe("All Frameworks Support", () => {
306
+ const mockFindings = createMockFindings();
307
+ const allFrameworks = [
308
+ "SOC2",
309
+ "ISO27001",
310
+ "PCI-DSS",
311
+ "HIPAA",
312
+ "42-CFR-PART-2",
313
+ "GDPR",
314
+ "NIST-800-53",
315
+ "CIS",
316
+ "OWASP-LLM",
317
+ "NIST-AI-RMF",
318
+ "MITRE-ATLAS",
319
+ "EU-AI-ACT",
320
+ "ISO-42001",
321
+ ];
322
+ it.each(allFrameworks)("should generate report for %s framework", async (framework) => {
323
+ const result = await runSingleFrameworkAssessment({
324
+ projectPath: "/test/project",
325
+ findings: mockFindings,
326
+ framework,
327
+ collectEvidence: false,
328
+ verifyAuditTrail: false,
329
+ includeAttestation: true,
330
+ });
331
+ expect(result.report).toBeDefined();
332
+ expect(result.report.framework).toBe(framework);
333
+ expect(result.markdownReport).toContain(`# ${framework} Compliance Report`);
334
+ expect(result.markdownReport).toContain("## Attestation");
335
+ });
336
+ it("should generate attestation for all frameworks", () => {
337
+ for (const framework of allFrameworks) {
338
+ const attestation = getFrameworkAttestation(framework);
339
+ expect(attestation).toBeDefined();
340
+ expect(attestation.fullName.length).toBeGreaterThan(0);
341
+ }
342
+ });
343
+ });
344
+ //# sourceMappingURL=compliance-bundle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-bundle.test.js","sourceRoot":"","sources":["../../src/__tests__/compliance-bundle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Healthcare Compliance Tests
3
+ *
4
+ * Integration tests for HIPAA and 42 CFR Part 2 compliance assessment.
5
+ *
6
+ * @module __tests__/healthcare-compliance
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=healthcare-compliance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcare-compliance.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/healthcare-compliance.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Healthcare Compliance Tests
3
+ *
4
+ * Integration tests for HIPAA and 42 CFR Part 2 compliance assessment.
5
+ *
6
+ * @module __tests__/healthcare-compliance
7
+ */
8
+ import { describe, it, expect } from "vitest";
9
+ import { getHIPAAControls, getHIPAACategories, getCFR42Part2Controls, getCFR42Part2Categories, CFR42_TO_HIPAA_MAPPING, mapFindingsToControls, generateComplianceReport, runHealthcareComplianceAssessment, generateHealthcareComplianceSummary, } from "../compliance/index.js";
10
+ describe("HIPAA Controls", () => {
11
+ it("should have at least 15 controls", () => {
12
+ const controls = getHIPAAControls();
13
+ expect(controls.length).toBeGreaterThanOrEqual(15);
14
+ });
15
+ it("should have controls in expected categories", () => {
16
+ const categories = getHIPAACategories();
17
+ expect(categories).toContain("Administrative Safeguards");
18
+ expect(categories).toContain("Technical Safeguards");
19
+ });
20
+ it("should have healthcare-specific finding categories", () => {
21
+ const controls = getHIPAAControls();
22
+ const allCategories = controls.flatMap((c) => c.findingCategories);
23
+ expect(allCategories).toContain("phi-exposure");
24
+ expect(allCategories).toContain("audit-gap");
25
+ expect(allCategories).toContain("consent-bypass");
26
+ });
27
+ it("should map encryption control to CWE-311", () => {
28
+ const controls = getHIPAAControls();
29
+ const encryptionControl = controls.find((c) => c.id === "164.312(a)(2)(iv)");
30
+ expect(encryptionControl).toBeDefined();
31
+ expect(encryptionControl.cweIds).toContain("CWE-311");
32
+ });
33
+ });
34
+ describe("42 CFR Part 2 Controls", () => {
35
+ it("should have at least 15 controls", () => {
36
+ const controls = getCFR42Part2Controls();
37
+ expect(controls.length).toBeGreaterThanOrEqual(15);
38
+ });
39
+ it("should have controls in expected categories", () => {
40
+ const categories = getCFR42Part2Categories();
41
+ expect(categories).toContain("General Provisions");
42
+ expect(categories).toContain("Disclosures With Consent");
43
+ expect(categories).toContain("Security Safeguards");
44
+ });
45
+ it("should have SUD-specific finding categories", () => {
46
+ const controls = getCFR42Part2Controls();
47
+ const allCategories = controls.flatMap((c) => c.findingCategories);
48
+ expect(allCategories).toContain("sud-disclosure");
49
+ expect(allCategories).toContain("consent-bypass");
50
+ expect(allCategories).toContain("redisclosure-violation");
51
+ expect(allCategories).toContain("qsoa-violation");
52
+ });
53
+ it("should have prohibition on disclosure control", () => {
54
+ const controls = getCFR42Part2Controls();
55
+ const prohibition = controls.find((c) => c.id === "2.12");
56
+ expect(prohibition).toBeDefined();
57
+ expect(prohibition.title).toBe("Prohibition on Disclosure");
58
+ expect(prohibition.findingCategories).toContain("sud-disclosure");
59
+ });
60
+ });
61
+ describe("CFR42 to HIPAA Mapping", () => {
62
+ it("should map CFR42 controls to HIPAA controls", () => {
63
+ expect(CFR42_TO_HIPAA_MAPPING["2.12"]).toBeDefined();
64
+ expect(CFR42_TO_HIPAA_MAPPING["2.12"]).toContain("164.308(a)(1)");
65
+ });
66
+ it("should map consent requirements to HIPAA authorization", () => {
67
+ expect(CFR42_TO_HIPAA_MAPPING["2.31"]).toBeDefined();
68
+ expect(CFR42_TO_HIPAA_MAPPING["2.31"]).toContain("164.508");
69
+ });
70
+ });
71
+ describe("Finding to Control Mapping", () => {
72
+ const createFinding = (id, severity, category, description) => ({
73
+ id,
74
+ severity,
75
+ category,
76
+ description,
77
+ confidence: 100,
78
+ evidence: "Test evidence",
79
+ verifications: [],
80
+ created_at: new Date().toISOString(),
81
+ });
82
+ it("should map phi-exposure findings to HIPAA controls", () => {
83
+ const findings = [
84
+ createFinding("phi-001", "critical", "phi-exposure", "SSN found in logs"),
85
+ ];
86
+ const mappings = mapFindingsToControls(findings, "HIPAA");
87
+ const affectedControls = mappings.filter((m) => m.findings.length > 0);
88
+ expect(affectedControls.length).toBeGreaterThan(0);
89
+ expect(affectedControls.some((m) => m.control.id === "164.308(a)(1)")).toBe(true);
90
+ });
91
+ it("should map consent-bypass findings to 42 CFR Part 2 controls", () => {
92
+ const findings = [
93
+ createFinding("consent-001", "high", "consent-bypass", "Consent not validated before data access"),
94
+ ];
95
+ const mappings = mapFindingsToControls(findings, "42-CFR-PART-2");
96
+ const affectedControls = mappings.filter((m) => m.findings.length > 0);
97
+ expect(affectedControls.length).toBeGreaterThan(0);
98
+ expect(affectedControls.some((m) => m.control.id === "2.31")).toBe(true);
99
+ });
100
+ it("should map audit-gap findings to audit controls", () => {
101
+ const findings = [
102
+ createFinding("audit-001", "high", "audit-gap", "PHI access not logged"),
103
+ ];
104
+ const hipaaMapping = mapFindingsToControls(findings, "HIPAA");
105
+ const cfr42Mapping = mapFindingsToControls(findings, "42-CFR-PART-2");
106
+ expect(hipaaMapping.some((m) => m.findings.length > 0 && m.control.id === "164.312(b)")).toBe(true);
107
+ expect(cfr42Mapping.some((m) => m.findings.length > 0 && m.control.id === "2.52")).toBe(true);
108
+ });
109
+ });
110
+ describe("Compliance Report Generation", () => {
111
+ const mockFindings = [
112
+ {
113
+ id: "test-001",
114
+ severity: "high",
115
+ category: "phi-exposure",
116
+ description: "PHI data exposed in API response",
117
+ confidence: 100,
118
+ evidence: "Response contains SSN field",
119
+ verifications: [],
120
+ created_at: new Date().toISOString(),
121
+ },
122
+ {
123
+ id: "test-002",
124
+ severity: "medium",
125
+ category: "audit-gap",
126
+ description: "Missing audit log for patient data access",
127
+ confidence: 80,
128
+ evidence: "No audit log call found",
129
+ verifications: [],
130
+ created_at: new Date().toISOString(),
131
+ },
132
+ ];
133
+ it("should generate HIPAA compliance report", () => {
134
+ const report = generateComplianceReport(mockFindings, "HIPAA", "/test/project");
135
+ expect(report.framework).toBe("HIPAA");
136
+ expect(report.status.totalControls).toBeGreaterThan(0);
137
+ expect(report.nonCompliantControls.length).toBeGreaterThanOrEqual(0);
138
+ });
139
+ it("should generate 42 CFR Part 2 compliance report", () => {
140
+ const report = generateComplianceReport(mockFindings, "42-CFR-PART-2", "/test/project");
141
+ expect(report.framework).toBe("42-CFR-PART-2");
142
+ expect(report.status.totalControls).toBeGreaterThan(0);
143
+ });
144
+ it("should generate recommendations for non-compliant controls", () => {
145
+ const report = generateComplianceReport(mockFindings, "HIPAA", "/test/project");
146
+ if (report.nonCompliantControls.length > 0 || report.atRiskControls.length > 0) {
147
+ expect(report.recommendations.length).toBeGreaterThan(0);
148
+ }
149
+ });
150
+ });
151
+ describe("Healthcare Compliance Assessment", () => {
152
+ const mockFindings = [
153
+ {
154
+ id: "hc-001",
155
+ severity: "critical",
156
+ category: "sud-disclosure",
157
+ description: "SUD patient data shared without consent",
158
+ confidence: 100,
159
+ evidence: "API returns SUD records without authorization check",
160
+ verifications: [],
161
+ created_at: new Date().toISOString(),
162
+ },
163
+ ];
164
+ it("should run combined assessment", async () => {
165
+ const result = await runHealthcareComplianceAssessment({
166
+ projectPath: "/test/project",
167
+ findings: mockFindings,
168
+ collectEvidence: false,
169
+ verifyAuditTrail: false,
170
+ storeEvidence: false,
171
+ });
172
+ expect(result.hipaaReport).toBeDefined();
173
+ expect(result.cfr42Report).toBeDefined();
174
+ expect(result.combinedScore).toBeGreaterThanOrEqual(0);
175
+ expect(result.combinedScore).toBeLessThanOrEqual(100);
176
+ });
177
+ it("should generate markdown report", async () => {
178
+ const result = await runHealthcareComplianceAssessment({
179
+ projectPath: "/test/project",
180
+ findings: mockFindings,
181
+ collectEvidence: false,
182
+ verifyAuditTrail: false,
183
+ storeEvidence: false,
184
+ });
185
+ expect(result.markdownReport).toContain("Healthcare Compliance Assessment");
186
+ expect(result.markdownReport).toContain("HIPAA");
187
+ expect(result.markdownReport).toContain("42 CFR Part 2");
188
+ });
189
+ it("should generate summary", async () => {
190
+ const result = await runHealthcareComplianceAssessment({
191
+ projectPath: "/test/project",
192
+ findings: mockFindings,
193
+ collectEvidence: false,
194
+ verifyAuditTrail: false,
195
+ storeEvidence: false,
196
+ });
197
+ const summary = generateHealthcareComplianceSummary(result);
198
+ expect(summary).toContain("Healthcare Compliance");
199
+ expect(summary).toContain("HIPAA");
200
+ expect(summary).toContain("42 CFR Part 2");
201
+ });
202
+ it("should determine status based on findings", async () => {
203
+ const criticalFindings = [
204
+ {
205
+ id: "crit-001",
206
+ severity: "critical",
207
+ category: "phi-exposure",
208
+ description: "Critical PHI exposure",
209
+ confidence: 100,
210
+ evidence: "Test",
211
+ verifications: [],
212
+ created_at: new Date().toISOString(),
213
+ },
214
+ ];
215
+ const result = await runHealthcareComplianceAssessment({
216
+ projectPath: "/test/project",
217
+ findings: criticalFindings,
218
+ collectEvidence: false,
219
+ verifyAuditTrail: false,
220
+ storeEvidence: false,
221
+ });
222
+ // Critical findings should result in at_risk or non_compliant status
223
+ expect(["at_risk", "non_compliant"]).toContain(result.status);
224
+ });
225
+ });
226
+ describe("Healthcare Scanner Types", () => {
227
+ it("should include healthcare in scanner types", async () => {
228
+ const { toFindingId } = await import("../scanners/types.js");
229
+ const findingId = toFindingId("healthcare", "phi-exposure", 0);
230
+ expect(findingId).toBe("hc-001");
231
+ });
232
+ });
233
+ //# sourceMappingURL=healthcare-compliance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcare-compliance.test.js","sourceRoot":"","sources":["../../src/__tests__/healthcare-compliance.test.ts"],"names":[],"mappings":"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"}