vaspera 2.8.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.
- package/CHANGELOG.md +55 -0
- package/README.md +111 -7
- package/dist/__tests__/agents/adversary/tactics/api.test.d.ts +5 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.js +369 -0
- package/dist/__tests__/agents/adversary/tactics/api.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts +5 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.js +409 -0
- package/dist/__tests__/agents/adversary/tactics/llm.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts +7 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.js +74 -0
- package/dist/__tests__/agents/adversary/tactics/registry.test.js.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts +7 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.d.ts.map +1 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.js +374 -0
- package/dist/__tests__/agents/adversary/tactics/web-app.test.js.map +1 -0
- package/dist/__tests__/compliance-bundle.test.d.ts +9 -0
- package/dist/__tests__/compliance-bundle.test.d.ts.map +1 -0
- package/dist/__tests__/compliance-bundle.test.js +344 -0
- package/dist/__tests__/compliance-bundle.test.js.map +1 -0
- package/dist/__tests__/healthcare-compliance.test.d.ts +9 -0
- package/dist/__tests__/healthcare-compliance.test.d.ts.map +1 -0
- package/dist/__tests__/healthcare-compliance.test.js +233 -0
- package/dist/__tests__/healthcare-compliance.test.js.map +1 -0
- package/dist/action/diff-mode.d.ts +124 -8
- package/dist/action/diff-mode.d.ts.map +1 -1
- package/dist/action/diff-mode.js +384 -65
- package/dist/action/diff-mode.js.map +1 -1
- package/dist/action/diff-mode.test.js +3 -3
- package/dist/action/diff-mode.test.js.map +1 -1
- package/dist/action/pr-comment.test.js +1 -0
- package/dist/action/pr-comment.test.js.map +1 -1
- package/dist/action/sarif-upload.test.js +1 -0
- package/dist/action/sarif-upload.test.js.map +1 -1
- package/dist/agents/adversary/config.d.ts +25 -4
- package/dist/agents/adversary/config.d.ts.map +1 -1
- package/dist/agents/adversary/config.js +38 -8
- package/dist/agents/adversary/config.js.map +1 -1
- package/dist/agents/adversary/index.d.ts +7 -0
- package/dist/agents/adversary/index.d.ts.map +1 -1
- package/dist/agents/adversary/index.js +83 -1
- package/dist/agents/adversary/index.js.map +1 -1
- package/dist/agents/adversary/reporting/compliance-mapper.d.ts +108 -0
- package/dist/agents/adversary/reporting/compliance-mapper.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/compliance-mapper.js +391 -0
- package/dist/agents/adversary/reporting/compliance-mapper.js.map +1 -0
- package/dist/agents/adversary/reporting/index.d.ts +10 -0
- package/dist/agents/adversary/reporting/index.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/index.js +10 -0
- package/dist/agents/adversary/reporting/index.js.map +1 -0
- package/dist/agents/adversary/reporting/poc-generator.d.ts +44 -0
- package/dist/agents/adversary/reporting/poc-generator.d.ts.map +1 -0
- package/dist/agents/adversary/reporting/poc-generator.js +308 -0
- package/dist/agents/adversary/reporting/poc-generator.js.map +1 -0
- package/dist/agents/adversary/tactics/api.d.ts +13 -0
- package/dist/agents/adversary/tactics/api.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/api.js +815 -0
- package/dist/agents/adversary/tactics/api.js.map +1 -0
- package/dist/agents/adversary/tactics/auth.d.ts +13 -0
- package/dist/agents/adversary/tactics/auth.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/auth.js +676 -0
- package/dist/agents/adversary/tactics/auth.js.map +1 -0
- package/dist/agents/adversary/tactics/index.d.ts +129 -0
- package/dist/agents/adversary/tactics/index.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/index.js +199 -0
- package/dist/agents/adversary/tactics/index.js.map +1 -0
- package/dist/agents/adversary/tactics/infra.d.ts +13 -0
- package/dist/agents/adversary/tactics/infra.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/infra.js +827 -0
- package/dist/agents/adversary/tactics/infra.js.map +1 -0
- package/dist/agents/adversary/tactics/injection.d.ts +12 -0
- package/dist/agents/adversary/tactics/injection.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/injection.js +549 -0
- package/dist/agents/adversary/tactics/injection.js.map +1 -0
- package/dist/agents/adversary/tactics/llm.d.ts +13 -0
- package/dist/agents/adversary/tactics/llm.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/llm.js +767 -0
- package/dist/agents/adversary/tactics/llm.js.map +1 -0
- package/dist/agents/adversary/tactics/web-app.d.ts +13 -0
- package/dist/agents/adversary/tactics/web-app.d.ts.map +1 -0
- package/dist/agents/adversary/tactics/web-app.js +717 -0
- package/dist/agents/adversary/tactics/web-app.js.map +1 -0
- package/dist/agents/adversary/types.d.ts +66 -10
- package/dist/agents/adversary/types.d.ts.map +1 -1
- package/dist/agents/zero-day-hunter.d.ts +1 -1
- package/dist/agents/zero-day-hunter.d.ts.map +1 -1
- package/dist/analysis/data-flow.d.ts +154 -0
- package/dist/analysis/data-flow.d.ts.map +1 -0
- package/dist/analysis/data-flow.js +393 -0
- package/dist/analysis/data-flow.js.map +1 -0
- package/dist/analysis/index.d.ts +9 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +9 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/badge-service/index.d.ts +144 -0
- package/dist/badge-service/index.d.ts.map +1 -0
- package/dist/badge-service/index.js +206 -0
- package/dist/badge-service/index.js.map +1 -0
- package/dist/certification/types.d.ts +1 -1
- package/dist/certification/types.d.ts.map +1 -1
- package/dist/certification/types.js.map +1 -1
- package/dist/commands/certification/certify.d.ts.map +1 -1
- package/dist/commands/certification/certify.js +18 -4
- package/dist/commands/certification/certify.js.map +1 -1
- package/dist/compliance/attestation.d.ts +39 -0
- package/dist/compliance/attestation.d.ts.map +1 -0
- package/dist/compliance/attestation.js +364 -0
- package/dist/compliance/attestation.js.map +1 -0
- package/dist/compliance/cfr42-part2.d.ts +42 -0
- package/dist/compliance/cfr42-part2.d.ts.map +1 -0
- package/dist/compliance/cfr42-part2.js +408 -0
- package/dist/compliance/cfr42-part2.js.map +1 -0
- package/dist/compliance/compliance-bundle.d.ts +100 -0
- package/dist/compliance/compliance-bundle.d.ts.map +1 -0
- package/dist/compliance/compliance-bundle.js +210 -0
- package/dist/compliance/compliance-bundle.js.map +1 -0
- package/dist/compliance/healthcare-bundle.d.ts +68 -0
- package/dist/compliance/healthcare-bundle.d.ts.map +1 -0
- package/dist/compliance/healthcare-bundle.js +104 -0
- package/dist/compliance/healthcare-bundle.js.map +1 -0
- package/dist/compliance/hipaa.d.ts.map +1 -1
- package/dist/compliance/hipaa.js +14 -11
- package/dist/compliance/hipaa.js.map +1 -1
- package/dist/compliance/index.d.ts +10 -2
- package/dist/compliance/index.d.ts.map +1 -1
- package/dist/compliance/index.js +9 -3
- package/dist/compliance/index.js.map +1 -1
- package/dist/compliance/mapper.d.ts.map +1 -1
- package/dist/compliance/mapper.js +3 -17
- package/dist/compliance/mapper.js.map +1 -1
- package/dist/compliance/nist-800-53.d.ts +22 -6
- package/dist/compliance/nist-800-53.d.ts.map +1 -1
- package/dist/compliance/nist-800-53.js +264 -272
- package/dist/compliance/nist-800-53.js.map +1 -1
- package/dist/compliance/report.d.ts +31 -2
- package/dist/compliance/report.d.ts.map +1 -1
- package/dist/compliance/report.js +255 -4
- package/dist/compliance/report.js.map +1 -1
- package/dist/compliance/types.d.ts +1 -1
- package/dist/compliance/types.d.ts.map +1 -1
- package/dist/config/flags.d.ts +12 -12
- package/dist/cost/index.d.ts +1 -1
- package/dist/cost/index.d.ts.map +1 -1
- package/dist/cost/index.js +1 -1
- package/dist/cost/index.js.map +1 -1
- package/dist/cost/tracker.d.ts +64 -0
- package/dist/cost/tracker.d.ts.map +1 -1
- package/dist/cost/tracker.js +165 -0
- package/dist/cost/tracker.js.map +1 -1
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts +28 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.js +90 -0
- package/dist/eval/fixtures/healthcare/audit-gaps.js.map +1 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts +31 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.js +61 -0
- package/dist/eval/fixtures/healthcare/consent-bypass.js.map +1 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts +24 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.d.ts.map +1 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.js +41 -0
- package/dist/eval/fixtures/healthcare/phi-in-logs.js.map +1 -0
- package/dist/evidence/collector.d.ts +21 -0
- package/dist/evidence/collector.d.ts.map +1 -0
- package/dist/evidence/collector.js +340 -0
- package/dist/evidence/collector.js.map +1 -0
- package/dist/evidence/index.d.ts +11 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +12 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/store.d.ts +39 -0
- package/dist/evidence/store.d.ts.map +1 -0
- package/dist/evidence/store.js +173 -0
- package/dist/evidence/store.js.map +1 -0
- package/dist/evidence/types.d.ts +175 -0
- package/dist/evidence/types.d.ts.map +1 -0
- package/dist/evidence/types.js +9 -0
- package/dist/evidence/types.js.map +1 -0
- package/dist/exporters/checkmarx.d.ts +18 -0
- package/dist/exporters/checkmarx.d.ts.map +1 -0
- package/dist/exporters/checkmarx.js +203 -0
- package/dist/exporters/checkmarx.js.map +1 -0
- package/dist/exporters/index.d.ts +22 -0
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +41 -0
- package/dist/exporters/index.js.map +1 -0
- package/dist/exporters/snyk.d.ts +18 -0
- package/dist/exporters/snyk.d.ts.map +1 -0
- package/dist/exporters/snyk.js +119 -0
- package/dist/exporters/snyk.js.map +1 -0
- package/dist/exporters/sonarqube.d.ts +18 -0
- package/dist/exporters/sonarqube.d.ts.map +1 -0
- package/dist/exporters/sonarqube.js +125 -0
- package/dist/exporters/sonarqube.js.map +1 -0
- package/dist/exporters/types.d.ts +190 -0
- package/dist/exporters/types.d.ts.map +1 -0
- package/dist/exporters/types.js +9 -0
- package/dist/exporters/types.js.map +1 -0
- package/dist/frontier/index.d.ts +12 -0
- package/dist/frontier/index.d.ts.map +1 -0
- package/dist/frontier/index.js +12 -0
- package/dist/frontier/index.js.map +1 -0
- package/dist/frontier/orchestrator.d.ts +73 -0
- package/dist/frontier/orchestrator.d.ts.map +1 -0
- package/dist/frontier/orchestrator.js +312 -0
- package/dist/frontier/orchestrator.js.map +1 -0
- package/dist/frontier/providers/stub.d.ts +32 -0
- package/dist/frontier/providers/stub.d.ts.map +1 -0
- package/dist/frontier/providers/stub.js +66 -0
- package/dist/frontier/providers/stub.js.map +1 -0
- package/dist/frontier/types.d.ts +318 -0
- package/dist/frontier/types.d.ts.map +1 -0
- package/dist/frontier/types.js +27 -0
- package/dist/frontier/types.js.map +1 -0
- package/dist/history/index.d.ts +13 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +15 -0
- package/dist/history/index.js.map +1 -0
- package/dist/history/store.d.ts +74 -0
- package/dist/history/store.d.ts.map +1 -0
- package/dist/history/store.js +399 -0
- package/dist/history/store.js.map +1 -0
- package/dist/history/types.d.ts +282 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +41 -0
- package/dist/history/types.js.map +1 -0
- package/dist/history/verify.d.ts +44 -0
- package/dist/history/verify.d.ts.map +1 -0
- package/dist/history/verify.js +230 -0
- package/dist/history/verify.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +431 -18
- package/dist/index.js.map +1 -1
- package/dist/multimodel/index.d.ts +1 -0
- package/dist/multimodel/index.d.ts.map +1 -1
- package/dist/multimodel/index.js +2 -0
- package/dist/multimodel/index.js.map +1 -1
- package/dist/multimodel/leaderboard.d.ts +116 -0
- package/dist/multimodel/leaderboard.d.ts.map +1 -0
- package/dist/multimodel/leaderboard.js +262 -0
- package/dist/multimodel/leaderboard.js.map +1 -0
- package/dist/observability/otel.d.ts.map +1 -1
- package/dist/observability/otel.js +1 -3
- package/dist/observability/otel.js.map +1 -1
- package/dist/plugins/loader.js +1 -1
- package/dist/plugins/loader.js.map +1 -1
- package/dist/scanners/agent/agent-chain-analysis.d.ts +152 -0
- package/dist/scanners/agent/agent-chain-analysis.d.ts.map +1 -0
- package/dist/scanners/agent/agent-chain-analysis.js +438 -0
- package/dist/scanners/agent/agent-chain-analysis.js.map +1 -0
- package/dist/scanners/agent/payloads/index.d.ts +2 -1
- package/dist/scanners/agent/payloads/index.d.ts.map +1 -1
- package/dist/scanners/agent/payloads/index.js +25 -6
- package/dist/scanners/agent/payloads/index.js.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.d.ts.map +1 -1
- package/dist/scanners/agent/prompt-injection-fuzzer.js +14 -0
- package/dist/scanners/agent/prompt-injection-fuzzer.js.map +1 -1
- package/dist/scanners/agent/types.d.ts +5 -5
- package/dist/scanners/agent/types.d.ts.map +1 -1
- package/dist/scanners/agent/types.js.map +1 -1
- package/dist/scanners/cache.d.ts +156 -0
- package/dist/scanners/cache.d.ts.map +1 -0
- package/dist/scanners/cache.js +462 -0
- package/dist/scanners/cache.js.map +1 -0
- package/dist/scanners/dependencies.js +4 -4
- package/dist/scanners/dependencies.js.map +1 -1
- package/dist/scanners/gosec.d.ts.map +1 -1
- package/dist/scanners/gosec.js +47 -9
- package/dist/scanners/gosec.js.map +1 -1
- package/dist/scanners/healthcare.d.ts +29 -0
- package/dist/scanners/healthcare.d.ts.map +1 -0
- package/dist/scanners/healthcare.js +526 -0
- package/dist/scanners/healthcare.js.map +1 -0
- package/dist/scanners/index.d.ts +1 -0
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +33 -0
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/index.test.js +6 -6
- package/dist/scanners/index.test.js.map +1 -1
- package/dist/scanners/secrets.js +4 -4
- package/dist/scanners/secrets.js.map +1 -1
- package/dist/scanners/semgrep.js +5 -5
- package/dist/scanners/semgrep.js.map +1 -1
- package/dist/scanners/types.d.ts +1 -1
- package/dist/scanners/types.d.ts.map +1 -1
- package/dist/scanners/types.js +1 -0
- package/dist/scanners/types.js.map +1 -1
- package/dist/scanners/typescript.test.js +1 -1
- package/dist/scanners/typescript.test.js.map +1 -1
- package/dist/telemetry/index.d.ts +10 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +10 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/registry.d.ts +178 -0
- package/dist/telemetry/registry.d.ts.map +1 -0
- package/dist/telemetry/registry.js +297 -0
- package/dist/telemetry/registry.js.map +1 -0
- package/dist/telemetry/usage.d.ts +197 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +244 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence Collection Types
|
|
3
|
+
*
|
|
4
|
+
* Types for collecting and packaging audit evidence for compliance.
|
|
5
|
+
*
|
|
6
|
+
* @module evidence/types
|
|
7
|
+
*/
|
|
8
|
+
import type { ComplianceFramework } from "../compliance/types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Evidence artifact type
|
|
11
|
+
*/
|
|
12
|
+
export type EvidenceArtifactType = "scan_result" | "compliance_report" | "config_file" | "sbom" | "history_snapshot" | "verification_result" | "certification_result";
|
|
13
|
+
/**
|
|
14
|
+
* Individual evidence artifact
|
|
15
|
+
*/
|
|
16
|
+
export interface EvidenceArtifact {
|
|
17
|
+
/** Artifact type */
|
|
18
|
+
type: EvidenceArtifactType;
|
|
19
|
+
/** Human-readable name */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Description of what this artifact contains */
|
|
22
|
+
description: string;
|
|
23
|
+
/** SHA-256 hash of the artifact content */
|
|
24
|
+
contentDigest: string;
|
|
25
|
+
/** Size in bytes */
|
|
26
|
+
sizeBytes: number;
|
|
27
|
+
/** When the artifact was collected */
|
|
28
|
+
collectedAt: string;
|
|
29
|
+
/** Source path (if file-based) */
|
|
30
|
+
sourcePath?: string;
|
|
31
|
+
/** Inline content (for small artifacts) or path to stored file */
|
|
32
|
+
content?: string;
|
|
33
|
+
/** Path to stored artifact file (for large artifacts) */
|
|
34
|
+
storedPath?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* CI environment metadata
|
|
38
|
+
*/
|
|
39
|
+
export interface CIEnvironment {
|
|
40
|
+
/** CI provider (github, gitlab, jenkins, etc.) */
|
|
41
|
+
provider: string;
|
|
42
|
+
/** Build/workflow ID */
|
|
43
|
+
buildId: string;
|
|
44
|
+
/** Git commit SHA */
|
|
45
|
+
commitSha: string;
|
|
46
|
+
/** Git branch or tag */
|
|
47
|
+
ref?: string;
|
|
48
|
+
/** Actor/user who triggered the build */
|
|
49
|
+
actor?: string;
|
|
50
|
+
/** Run number/ID */
|
|
51
|
+
runId?: string;
|
|
52
|
+
/** Repository information */
|
|
53
|
+
repository?: {
|
|
54
|
+
owner: string;
|
|
55
|
+
name: string;
|
|
56
|
+
url: string;
|
|
57
|
+
};
|
|
58
|
+
/** Pull request information if applicable */
|
|
59
|
+
pullRequest?: {
|
|
60
|
+
number: number;
|
|
61
|
+
title?: string;
|
|
62
|
+
url?: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Runtime environment metadata
|
|
67
|
+
*/
|
|
68
|
+
export interface RuntimeEnvironment {
|
|
69
|
+
/** Operating system */
|
|
70
|
+
os: string;
|
|
71
|
+
/** OS version */
|
|
72
|
+
osVersion: string;
|
|
73
|
+
/** Node.js version */
|
|
74
|
+
nodeVersion: string;
|
|
75
|
+
/** Vaspera version */
|
|
76
|
+
vasperaVersion: string;
|
|
77
|
+
/** Hostname (sanitized for privacy) */
|
|
78
|
+
hostname?: string;
|
|
79
|
+
/** CI environment if running in CI */
|
|
80
|
+
ci?: CIEnvironment;
|
|
81
|
+
/** Timestamp when environment was captured */
|
|
82
|
+
capturedAt: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Evidence bundle
|
|
86
|
+
*/
|
|
87
|
+
export interface EvidenceBundle {
|
|
88
|
+
/** Unique bundle ID */
|
|
89
|
+
id: string;
|
|
90
|
+
/** Associated certification ID */
|
|
91
|
+
certificationId?: string;
|
|
92
|
+
/** When the bundle was created */
|
|
93
|
+
createdAt: string;
|
|
94
|
+
/** Project path */
|
|
95
|
+
projectPath: string;
|
|
96
|
+
/** Compliance frameworks this evidence supports */
|
|
97
|
+
frameworks: ComplianceFramework[];
|
|
98
|
+
/** Runtime environment metadata */
|
|
99
|
+
environment: RuntimeEnvironment;
|
|
100
|
+
/** Collected artifacts */
|
|
101
|
+
artifacts: EvidenceArtifact[];
|
|
102
|
+
/** Overall bundle digest (SHA-256 of all artifact digests) */
|
|
103
|
+
bundleDigest: string;
|
|
104
|
+
/** Sigstore signature of the bundle */
|
|
105
|
+
signature?: {
|
|
106
|
+
/** Base64-encoded signature */
|
|
107
|
+
value: string;
|
|
108
|
+
/** Signing certificate (Base64 PEM) */
|
|
109
|
+
certificate?: string;
|
|
110
|
+
/** Rekor transparency log index */
|
|
111
|
+
rekorLogIndex?: number;
|
|
112
|
+
/** Rekor log ID */
|
|
113
|
+
rekorLogId?: string;
|
|
114
|
+
};
|
|
115
|
+
/** Bundle metadata */
|
|
116
|
+
metadata?: Record<string, unknown>;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Options for collecting evidence
|
|
120
|
+
*/
|
|
121
|
+
export interface CollectEvidenceOptions {
|
|
122
|
+
/** Project path to collect evidence from */
|
|
123
|
+
projectPath: string;
|
|
124
|
+
/** Certification ID to associate with */
|
|
125
|
+
certificationId?: string;
|
|
126
|
+
/** Compliance frameworks to include reports for */
|
|
127
|
+
frameworks?: ComplianceFramework[];
|
|
128
|
+
/** Include SBOM */
|
|
129
|
+
includeSbom?: boolean;
|
|
130
|
+
/** Include history snapshot */
|
|
131
|
+
includeHistory?: boolean;
|
|
132
|
+
/** Include scan results */
|
|
133
|
+
includeScanResults?: boolean;
|
|
134
|
+
/** Include config files (.vaspera/config.json, etc.) */
|
|
135
|
+
includeConfig?: boolean;
|
|
136
|
+
/** Sign the bundle with Sigstore */
|
|
137
|
+
sign?: boolean;
|
|
138
|
+
/** Maximum artifact size to inline (larger artifacts are stored) */
|
|
139
|
+
maxInlineSize?: number;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Evidence collection result
|
|
143
|
+
*/
|
|
144
|
+
export interface CollectEvidenceResult {
|
|
145
|
+
/** Whether collection succeeded */
|
|
146
|
+
success: boolean;
|
|
147
|
+
/** The collected evidence bundle */
|
|
148
|
+
bundle?: EvidenceBundle;
|
|
149
|
+
/** Error message if failed */
|
|
150
|
+
error?: string;
|
|
151
|
+
/** Warnings encountered during collection */
|
|
152
|
+
warnings: string[];
|
|
153
|
+
/** Path where bundle was stored */
|
|
154
|
+
storedPath?: string;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Evidence verification result
|
|
158
|
+
*/
|
|
159
|
+
export interface VerifyEvidenceResult {
|
|
160
|
+
/** Whether verification succeeded */
|
|
161
|
+
verified: boolean;
|
|
162
|
+
/** Bundle ID verified */
|
|
163
|
+
bundleId: string;
|
|
164
|
+
/** Whether all artifact digests match */
|
|
165
|
+
artifactsIntact: boolean;
|
|
166
|
+
/** Whether signature is valid (if present) */
|
|
167
|
+
signatureValid?: boolean;
|
|
168
|
+
/** List of artifacts that failed verification */
|
|
169
|
+
failedArtifacts: string[];
|
|
170
|
+
/** Verification timestamp */
|
|
171
|
+
verifiedAt: string;
|
|
172
|
+
/** Error message if verification failed */
|
|
173
|
+
error?: string;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,mBAAmB,GACnB,aAAa,GACb,MAAM,GACN,kBAAkB,GAClB,qBAAqB,GACrB,sBAAsB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,oBAAoB,CAAC;IAE3B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IAEtB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,wBAAwB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,oBAAoB;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6BAA6B;IAC7B,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IAEF,6CAA6C;IAC7C,WAAW,CAAC,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IAEvB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,EAAE,CAAC,EAAE,aAAa,CAAC;IAEnB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IAEX,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAElB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,mDAAmD;IACnD,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAElC,mCAAmC;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAEhC,0BAA0B;IAC1B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAE9B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IAErB,uCAAuC;IACvC,SAAS,CAAC,EAAE;QACV,+BAA+B;QAC/B,KAAK,EAAE,MAAM,CAAC;QAEd,uCAAuC;QACvC,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB,mCAAmC;QACnC,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB,mBAAmB;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,mDAAmD;IACnD,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAEnC,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,2BAA2B;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,wDAAwD;IACxD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,oCAAoC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IAEjB,oCAAoC;IACpC,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qCAAqC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAElB,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IAEjB,yCAAyC;IACzC,eAAe,EAAE,OAAO,CAAC;IAEzB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,iDAAiD;IACjD,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/evidence/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkmarx Exporter
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to Checkmarx XML format.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters/checkmarx
|
|
7
|
+
*/
|
|
8
|
+
import type { Certification } from "../certification/types.js";
|
|
9
|
+
import type { ExportOptions, ExportResult, Exporter } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Export certification to Checkmarx format
|
|
12
|
+
*/
|
|
13
|
+
export declare function exportToCheckmarx(certification: Certification, options?: ExportOptions): Promise<ExportResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Checkmarx exporter instance
|
|
16
|
+
*/
|
|
17
|
+
export declare const checkmarxExporter: Exporter;
|
|
18
|
+
//# sourceMappingURL=checkmarx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkmarx.d.ts","sourceRoot":"","sources":["../../src/exporters/checkmarx.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EAGT,MAAM,YAAY,CAAC;AA+JpB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAgDvB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAG/B,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checkmarx Exporter
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to Checkmarx XML format.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters/checkmarx
|
|
7
|
+
*/
|
|
8
|
+
import { writeFile } from "fs/promises";
|
|
9
|
+
import { createHash } from "crypto";
|
|
10
|
+
/**
|
|
11
|
+
* Map Vaspera severity to Checkmarx severity
|
|
12
|
+
*/
|
|
13
|
+
const SEVERITY_MAP = {
|
|
14
|
+
critical: "High",
|
|
15
|
+
high: "High",
|
|
16
|
+
medium: "Medium",
|
|
17
|
+
low: "Low",
|
|
18
|
+
info: "Information",
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Map confidence to Checkmarx state
|
|
22
|
+
*/
|
|
23
|
+
function confidenceToState(confidence) {
|
|
24
|
+
if (confidence >= 90)
|
|
25
|
+
return "Confirmed";
|
|
26
|
+
if (confidence >= 70)
|
|
27
|
+
return "Urgent";
|
|
28
|
+
return "To Verify";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Generate a result hash
|
|
32
|
+
*/
|
|
33
|
+
function generateHash(finding) {
|
|
34
|
+
const hashInput = `${finding.file || "unknown"}:${finding.line || 0}:${finding.category}:${finding.description.slice(0, 100)}`;
|
|
35
|
+
return createHash("md5").update(hashInput).digest("hex").slice(0, 16);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Convert a finding to Checkmarx result
|
|
39
|
+
*/
|
|
40
|
+
function findingToResult(finding, projectRoot) {
|
|
41
|
+
let sourceFile = finding.file || "unknown";
|
|
42
|
+
if (projectRoot && sourceFile.startsWith(projectRoot)) {
|
|
43
|
+
sourceFile = sourceFile.slice(projectRoot.length).replace(/^\//, "");
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
queryId: finding.scanner_rule_id || `vaspera-${finding.category}`,
|
|
47
|
+
queryName: finding.category.charAt(0).toUpperCase() + finding.category.slice(1).replace(/-/g, " "),
|
|
48
|
+
queryGroup: getCategoryGroup(finding.category),
|
|
49
|
+
cweId: finding.cwe_ids?.[0],
|
|
50
|
+
severity: SEVERITY_MAP[finding.severity],
|
|
51
|
+
state: confidenceToState(finding.confidence),
|
|
52
|
+
sourceFile,
|
|
53
|
+
sourceLine: finding.line || 1,
|
|
54
|
+
sourceObject: extractObjectName(finding.evidence || finding.description),
|
|
55
|
+
resultHash: generateHash(finding),
|
|
56
|
+
detectionDate: finding.created_at || new Date().toISOString(),
|
|
57
|
+
comment: finding.evidence,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get category group for Checkmarx
|
|
62
|
+
*/
|
|
63
|
+
function getCategoryGroup(category) {
|
|
64
|
+
const groups = {
|
|
65
|
+
injection: "Input Validation",
|
|
66
|
+
xss: "Input Validation",
|
|
67
|
+
authentication: "Authentication",
|
|
68
|
+
authorization: "Authorization",
|
|
69
|
+
cryptography: "Cryptography",
|
|
70
|
+
secrets: "Sensitive Data",
|
|
71
|
+
"api-security": "API Security",
|
|
72
|
+
"error-handling": "Error Handling",
|
|
73
|
+
"type-safety": "Type Safety",
|
|
74
|
+
"null-safety": "Null Safety",
|
|
75
|
+
logging: "Logging",
|
|
76
|
+
performance: "Performance",
|
|
77
|
+
"code-quality": "Code Quality",
|
|
78
|
+
};
|
|
79
|
+
for (const [key, group] of Object.entries(groups)) {
|
|
80
|
+
if (category.toLowerCase().includes(key)) {
|
|
81
|
+
return group;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return "General";
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract object name from code snippet or description
|
|
88
|
+
*/
|
|
89
|
+
function extractObjectName(text) {
|
|
90
|
+
// Try to find function name
|
|
91
|
+
const funcMatch = text.match(/function\s+(\w+)/);
|
|
92
|
+
if (funcMatch)
|
|
93
|
+
return funcMatch[1];
|
|
94
|
+
// Try to find variable name
|
|
95
|
+
const varMatch = text.match(/(?:const|let|var)\s+(\w+)/);
|
|
96
|
+
if (varMatch)
|
|
97
|
+
return varMatch[1];
|
|
98
|
+
// Try to find class/method
|
|
99
|
+
const classMatch = text.match(/(?:class|interface)\s+(\w+)/);
|
|
100
|
+
if (classMatch)
|
|
101
|
+
return classMatch[1];
|
|
102
|
+
return "unknown";
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Convert report to XML string
|
|
106
|
+
*/
|
|
107
|
+
function toXml(report) {
|
|
108
|
+
const escapeXml = (str) => str
|
|
109
|
+
.replace(/&/g, "&")
|
|
110
|
+
.replace(/</g, "<")
|
|
111
|
+
.replace(/>/g, ">")
|
|
112
|
+
.replace(/"/g, """)
|
|
113
|
+
.replace(/'/g, "'");
|
|
114
|
+
const lines = [
|
|
115
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
116
|
+
"<CxXMLResults>",
|
|
117
|
+
` <ProjectName>${escapeXml(report.projectName)}</ProjectName>`,
|
|
118
|
+
` <ProjectId>${escapeXml(report.projectId)}</ProjectId>`,
|
|
119
|
+
` <ScanId>${escapeXml(report.scanId)}</ScanId>`,
|
|
120
|
+
` <ScanDate>${escapeXml(report.scanDate)}</ScanDate>`,
|
|
121
|
+
` <ScanStatus>${escapeXml(report.scanStatus)}</ScanStatus>`,
|
|
122
|
+
` <ResultsCount>${report.resultsCount}</ResultsCount>`,
|
|
123
|
+
" <Results>",
|
|
124
|
+
];
|
|
125
|
+
for (const result of report.results) {
|
|
126
|
+
lines.push(" <Result>");
|
|
127
|
+
lines.push(` <QueryId>${escapeXml(result.queryId)}</QueryId>`);
|
|
128
|
+
lines.push(` <QueryName>${escapeXml(result.queryName)}</QueryName>`);
|
|
129
|
+
lines.push(` <QueryGroup>${escapeXml(result.queryGroup)}</QueryGroup>`);
|
|
130
|
+
if (result.cweId) {
|
|
131
|
+
lines.push(` <CweId>${escapeXml(result.cweId)}</CweId>`);
|
|
132
|
+
}
|
|
133
|
+
lines.push(` <Severity>${escapeXml(result.severity)}</Severity>`);
|
|
134
|
+
lines.push(` <State>${escapeXml(result.state)}</State>`);
|
|
135
|
+
lines.push(` <SourceFile>${escapeXml(result.sourceFile)}</SourceFile>`);
|
|
136
|
+
lines.push(` <SourceLine>${result.sourceLine}</SourceLine>`);
|
|
137
|
+
lines.push(` <SourceObject>${escapeXml(result.sourceObject)}</SourceObject>`);
|
|
138
|
+
if (result.destFile) {
|
|
139
|
+
lines.push(` <DestFile>${escapeXml(result.destFile)}</DestFile>`);
|
|
140
|
+
lines.push(` <DestLine>${result.destLine || 0}</DestLine>`);
|
|
141
|
+
lines.push(` <DestObject>${escapeXml(result.destObject || "")}</DestObject>`);
|
|
142
|
+
}
|
|
143
|
+
lines.push(` <ResultHash>${escapeXml(result.resultHash)}</ResultHash>`);
|
|
144
|
+
lines.push(` <DetectionDate>${escapeXml(result.detectionDate)}</DetectionDate>`);
|
|
145
|
+
if (result.comment) {
|
|
146
|
+
lines.push(` <Comment>${escapeXml(result.comment)}</Comment>`);
|
|
147
|
+
}
|
|
148
|
+
lines.push(" </Result>");
|
|
149
|
+
}
|
|
150
|
+
lines.push(" </Results>");
|
|
151
|
+
lines.push("</CxXMLResults>");
|
|
152
|
+
return lines.join("\n");
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Export certification to Checkmarx format
|
|
156
|
+
*/
|
|
157
|
+
export async function exportToCheckmarx(certification, options = {}) {
|
|
158
|
+
const { outputPath, minSeverity = "info", projectRoot, includeResolved = false } = options;
|
|
159
|
+
const severityOrder = ["critical", "high", "medium", "low", "info"];
|
|
160
|
+
const minIndex = severityOrder.indexOf(minSeverity);
|
|
161
|
+
// Collect all findings
|
|
162
|
+
const allFindings = [];
|
|
163
|
+
for (const [, agentData] of Object.entries(certification.agents)) {
|
|
164
|
+
if (agentData?.findings) {
|
|
165
|
+
allFindings.push(...agentData.findings);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Filter by severity
|
|
169
|
+
const filteredFindings = allFindings.filter((f) => {
|
|
170
|
+
const sevIndex = severityOrder.indexOf(f.severity);
|
|
171
|
+
return sevIndex <= minIndex;
|
|
172
|
+
});
|
|
173
|
+
// Convert to Checkmarx format
|
|
174
|
+
const results = filteredFindings.map((f) => findingToResult(f, projectRoot));
|
|
175
|
+
const report = {
|
|
176
|
+
projectName: certification.metadata.project_name,
|
|
177
|
+
projectId: certification.metadata.id,
|
|
178
|
+
scanId: certification.metadata.id,
|
|
179
|
+
scanDate: certification.metadata.started_at,
|
|
180
|
+
scanStatus: certification.metadata.status === "completed" ? "Finished" : "In Progress",
|
|
181
|
+
resultsCount: results.length,
|
|
182
|
+
results,
|
|
183
|
+
};
|
|
184
|
+
const content = toXml(report);
|
|
185
|
+
// Write to file if path provided
|
|
186
|
+
if (outputPath) {
|
|
187
|
+
await writeFile(outputPath, content, "utf-8");
|
|
188
|
+
}
|
|
189
|
+
return {
|
|
190
|
+
format: "checkmarx",
|
|
191
|
+
outputPath,
|
|
192
|
+
findingsExported: results.length,
|
|
193
|
+
content,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Checkmarx exporter instance
|
|
198
|
+
*/
|
|
199
|
+
export const checkmarxExporter = {
|
|
200
|
+
format: "checkmarx",
|
|
201
|
+
export: exportToCheckmarx,
|
|
202
|
+
};
|
|
203
|
+
//# sourceMappingURL=checkmarx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkmarx.js","sourceRoot":"","sources":["../../src/exporters/checkmarx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exporters Module
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to various security tool formats.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters
|
|
7
|
+
*/
|
|
8
|
+
export type { ExportFormat, ExportOptions, ExportResult, Exporter, SonarQubeReport, SonarQubeIssue, SnykReport, SnykVulnerability, CheckmarxReport, CheckmarxResult, } from "./types.js";
|
|
9
|
+
export { exportToSonarQube, sonarqubeExporter, } from "./sonarqube.js";
|
|
10
|
+
export { exportToSnyk, snykExporter, } from "./snyk.js";
|
|
11
|
+
export { exportToCheckmarx, checkmarxExporter, } from "./checkmarx.js";
|
|
12
|
+
import type { Certification } from "../certification/types.js";
|
|
13
|
+
import type { ExportFormat, ExportOptions, ExportResult } from "./types.js";
|
|
14
|
+
/**
|
|
15
|
+
* Export certification to specified format
|
|
16
|
+
*/
|
|
17
|
+
export declare function exportCertification(certification: Certification, format: ExportFormat, options?: ExportOptions): Promise<ExportResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Get all supported export formats
|
|
20
|
+
*/
|
|
21
|
+
export declare function getSupportedFormats(): ExportFormat[];
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/exporters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK5E;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAcvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,EAAE,CAEpD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exporters Module
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to various security tool formats.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters
|
|
7
|
+
*/
|
|
8
|
+
// SonarQube
|
|
9
|
+
export { exportToSonarQube, sonarqubeExporter, } from "./sonarqube.js";
|
|
10
|
+
// Snyk
|
|
11
|
+
export { exportToSnyk, snykExporter, } from "./snyk.js";
|
|
12
|
+
// Checkmarx
|
|
13
|
+
export { exportToCheckmarx, checkmarxExporter, } from "./checkmarx.js";
|
|
14
|
+
import { exportToSonarQube } from "./sonarqube.js";
|
|
15
|
+
import { exportToSnyk } from "./snyk.js";
|
|
16
|
+
import { exportToCheckmarx } from "./checkmarx.js";
|
|
17
|
+
/**
|
|
18
|
+
* Export certification to specified format
|
|
19
|
+
*/
|
|
20
|
+
export async function exportCertification(certification, format, options = {}) {
|
|
21
|
+
switch (format) {
|
|
22
|
+
case "sonarqube":
|
|
23
|
+
return exportToSonarQube(certification, options);
|
|
24
|
+
case "snyk":
|
|
25
|
+
return exportToSnyk(certification, options);
|
|
26
|
+
case "checkmarx":
|
|
27
|
+
return exportToCheckmarx(certification, options);
|
|
28
|
+
case "sarif":
|
|
29
|
+
// SARIF is handled by the existing certification/sarif.ts module
|
|
30
|
+
throw new Error("SARIF export is handled by certification_sarif tool");
|
|
31
|
+
default:
|
|
32
|
+
throw new Error(`Unsupported export format: ${format}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get all supported export formats
|
|
37
|
+
*/
|
|
38
|
+
export function getSupportedFormats() {
|
|
39
|
+
return ["sarif", "sonarqube", "snyk", "checkmarx"];
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/exporters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO;AACP,OAAO,EACL,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,aAA4B,EAC5B,MAAoB,EACpB,UAAyB,EAAE;IAE3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM;YACT,OAAO,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,OAAO;YACV,iEAAiE;YACjE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE;YACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snyk Exporter
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to Snyk JSON format.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters/snyk
|
|
7
|
+
*/
|
|
8
|
+
import type { Certification } from "../certification/types.js";
|
|
9
|
+
import type { ExportOptions, ExportResult, Exporter } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Export certification to Snyk format
|
|
12
|
+
*/
|
|
13
|
+
export declare function exportToSnyk(certification: Certification, options?: ExportOptions): Promise<ExportResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Snyk exporter instance
|
|
16
|
+
*/
|
|
17
|
+
export declare const snykExporter: Exporter;
|
|
18
|
+
//# sourceMappingURL=snyk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snyk.d.ts","sourceRoot":"","sources":["../../src/exporters/snyk.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,QAAQ,EAGT,MAAM,YAAY,CAAC;AA4DpB;;GAEG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,CA0DvB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,QAG1B,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snyk Exporter
|
|
3
|
+
*
|
|
4
|
+
* Exports findings to Snyk JSON format.
|
|
5
|
+
*
|
|
6
|
+
* @module exporters/snyk
|
|
7
|
+
*/
|
|
8
|
+
import { writeFile } from "fs/promises";
|
|
9
|
+
/**
|
|
10
|
+
* Map Vaspera severity to Snyk severity
|
|
11
|
+
*/
|
|
12
|
+
const SEVERITY_MAP = {
|
|
13
|
+
critical: "critical",
|
|
14
|
+
high: "high",
|
|
15
|
+
medium: "medium",
|
|
16
|
+
low: "low",
|
|
17
|
+
info: "low", // Snyk doesn't have "info", map to low
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Generate a unique vulnerability ID
|
|
21
|
+
*/
|
|
22
|
+
function generateVulnId(finding) {
|
|
23
|
+
const prefix = finding.scanner_rule_id ? finding.scanner_rule_id.toUpperCase().replace(/[^A-Z0-9]/g, "-") : "VASPERA";
|
|
24
|
+
return `${prefix}-${finding.id}`;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert a finding to Snyk vulnerability
|
|
28
|
+
*/
|
|
29
|
+
function findingToVulnerability(finding) {
|
|
30
|
+
const vuln = {
|
|
31
|
+
id: generateVulnId(finding),
|
|
32
|
+
title: finding.category.charAt(0).toUpperCase() + finding.category.slice(1).replace(/-/g, " "),
|
|
33
|
+
description: finding.description,
|
|
34
|
+
severity: SEVERITY_MAP[finding.severity],
|
|
35
|
+
identifiers: {},
|
|
36
|
+
from: [finding.file || "unknown"],
|
|
37
|
+
isPatchable: false,
|
|
38
|
+
isUpgradable: false,
|
|
39
|
+
};
|
|
40
|
+
// Add CWE IDs if available
|
|
41
|
+
if (finding.cwe_ids && finding.cwe_ids.length > 0) {
|
|
42
|
+
vuln.identifiers.CWE = finding.cwe_ids;
|
|
43
|
+
}
|
|
44
|
+
// Add CVE IDs if available
|
|
45
|
+
if (finding.cve_ids && finding.cve_ids.length > 0) {
|
|
46
|
+
vuln.identifiers.CVE = finding.cve_ids;
|
|
47
|
+
}
|
|
48
|
+
// Add line info to description
|
|
49
|
+
if (finding.line) {
|
|
50
|
+
vuln.description = `[Line ${finding.line}] ${vuln.description}`;
|
|
51
|
+
}
|
|
52
|
+
// Map evidence if available (remediation stored in description)
|
|
53
|
+
if (finding.evidence) {
|
|
54
|
+
vuln.upgradePath = [finding.evidence];
|
|
55
|
+
vuln.isUpgradable = true;
|
|
56
|
+
}
|
|
57
|
+
return vuln;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Export certification to Snyk format
|
|
61
|
+
*/
|
|
62
|
+
export async function exportToSnyk(certification, options = {}) {
|
|
63
|
+
const { outputPath, minSeverity = "info", includeResolved = false } = options;
|
|
64
|
+
const severityOrder = ["critical", "high", "medium", "low", "info"];
|
|
65
|
+
const minIndex = severityOrder.indexOf(minSeverity);
|
|
66
|
+
// Collect all findings
|
|
67
|
+
const allFindings = [];
|
|
68
|
+
for (const [, agentData] of Object.entries(certification.agents)) {
|
|
69
|
+
if (agentData?.findings) {
|
|
70
|
+
allFindings.push(...agentData.findings);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Filter by severity
|
|
74
|
+
const filteredFindings = allFindings.filter((f) => {
|
|
75
|
+
const sevIndex = severityOrder.indexOf(f.severity);
|
|
76
|
+
return sevIndex <= minIndex;
|
|
77
|
+
});
|
|
78
|
+
// Convert to Snyk format
|
|
79
|
+
const vulnerabilities = filteredFindings.map(findingToVulnerability);
|
|
80
|
+
// Count by severity
|
|
81
|
+
const bySeverity = {
|
|
82
|
+
critical: vulnerabilities.filter((v) => v.severity === "critical").length,
|
|
83
|
+
high: vulnerabilities.filter((v) => v.severity === "high").length,
|
|
84
|
+
medium: vulnerabilities.filter((v) => v.severity === "medium").length,
|
|
85
|
+
low: vulnerabilities.filter((v) => v.severity === "low").length,
|
|
86
|
+
};
|
|
87
|
+
const report = {
|
|
88
|
+
ok: vulnerabilities.length === 0,
|
|
89
|
+
vulnerabilities,
|
|
90
|
+
dependencyCount: 0,
|
|
91
|
+
org: "vaspera",
|
|
92
|
+
policy: "",
|
|
93
|
+
isPrivate: true,
|
|
94
|
+
licensesPolicy: {},
|
|
95
|
+
packageManager: "unknown",
|
|
96
|
+
projectName: certification.metadata.project_name,
|
|
97
|
+
summary: `Found ${vulnerabilities.length} issues (${bySeverity.critical} critical, ${bySeverity.high} high, ${bySeverity.medium} medium, ${bySeverity.low} low)`,
|
|
98
|
+
filesystemPolicy: false,
|
|
99
|
+
};
|
|
100
|
+
const content = JSON.stringify(report, null, 2);
|
|
101
|
+
// Write to file if path provided
|
|
102
|
+
if (outputPath) {
|
|
103
|
+
await writeFile(outputPath, content, "utf-8");
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
format: "snyk",
|
|
107
|
+
outputPath,
|
|
108
|
+
findingsExported: vulnerabilities.length,
|
|
109
|
+
content,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Snyk exporter instance
|
|
114
|
+
*/
|
|
115
|
+
export const snykExporter = {
|
|
116
|
+
format: "snyk",
|
|
117
|
+
export: exportToSnyk,
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=snyk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snyk.js","sourceRoot":"","sources":["../../src/exporters/snyk.ts"],"names":[],"mappings":"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"}
|