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.
- package/CHANGELOG.md +72 -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 +113 -0
- package/dist/agents/adversary/config.d.ts.map +1 -0
- package/dist/agents/adversary/config.js +391 -0
- package/dist/agents/adversary/config.js.map +1 -0
- package/dist/agents/adversary/index.d.ts +41 -0
- package/dist/agents/adversary/index.d.ts.map +1 -0
- package/dist/agents/adversary/index.js +838 -0
- package/dist/agents/adversary/index.js.map +1 -0
- 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 +407 -0
- package/dist/agents/adversary/types.d.ts.map +1 -0
- package/dist/agents/adversary/types.js +12 -0
- package/dist/agents/adversary/types.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.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/consensus.test.js +2 -0
- package/dist/certification/consensus.test.js.map +1 -1
- package/dist/certification/store.d.ts.map +1 -1
- package/dist/certification/store.js +4 -0
- package/dist/certification/store.js.map +1 -1
- package/dist/certification/types.d.ts +3 -3
- package/dist/certification/types.d.ts.map +1 -1
- package/dist/certification/types.js +2 -0
- 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/sbom/provenance.test.js +2 -2
- package/dist/sbom/provenance.test.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/manifest-audit.d.ts.map +1 -1
- package/dist/scanners/agent/manifest-audit.js +30 -18
- package/dist/scanners/agent/manifest-audit.js.map +1 -1
- 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.d.ts.map +1 -1
- package/dist/scanners/dependencies.js +5 -6
- 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 +11 -2
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Types
|
|
3
|
+
*
|
|
4
|
+
* Defines types for tracking certification and scan history over time.
|
|
5
|
+
*
|
|
6
|
+
* @module history/types
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import type { Severity, CertificationLevel, AgentType } from "../certification/types.js";
|
|
10
|
+
import type { ComplianceFramework } from "../compliance/types.js";
|
|
11
|
+
/**
|
|
12
|
+
* History entry type
|
|
13
|
+
*/
|
|
14
|
+
export type HistoryEntryType = "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "compliance_report" | "model_run";
|
|
15
|
+
/**
|
|
16
|
+
* Actor identity for audit trail
|
|
17
|
+
*/
|
|
18
|
+
export interface ActorIdentity {
|
|
19
|
+
/** Actor type */
|
|
20
|
+
type: "user" | "service" | "system";
|
|
21
|
+
/** Unique identifier (user ID, service account name, or "system") */
|
|
22
|
+
id: string;
|
|
23
|
+
/** Email address if available */
|
|
24
|
+
email?: string;
|
|
25
|
+
/** Display name */
|
|
26
|
+
name?: string;
|
|
27
|
+
/** IP address or hostname (for audit purposes) */
|
|
28
|
+
source?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Integrity proof for tamper-evident audit trail
|
|
32
|
+
*/
|
|
33
|
+
export interface IntegrityProof {
|
|
34
|
+
/** SHA-256 hash of this entry (excluding the integrity field itself) */
|
|
35
|
+
hash: string;
|
|
36
|
+
/** SHA-256 hash of the previous entry (forms hash chain) */
|
|
37
|
+
previousHash: string;
|
|
38
|
+
/** Sigstore signature if signing is enabled */
|
|
39
|
+
signature?: string;
|
|
40
|
+
/** Rekor transparency log index if published */
|
|
41
|
+
rekorLogIndex?: number;
|
|
42
|
+
/** Rekor log ID */
|
|
43
|
+
rekorLogId?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Base history entry
|
|
47
|
+
*/
|
|
48
|
+
export interface BaseHistoryEntry {
|
|
49
|
+
id: string;
|
|
50
|
+
timestamp: string;
|
|
51
|
+
type: HistoryEntryType;
|
|
52
|
+
projectPath: string;
|
|
53
|
+
certificationId?: string;
|
|
54
|
+
/** Actor who performed this action (for audit trail) */
|
|
55
|
+
actor?: ActorIdentity;
|
|
56
|
+
/** Integrity proof for tamper-evident audit trail */
|
|
57
|
+
integrity?: IntegrityProof;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Certification started entry
|
|
61
|
+
*/
|
|
62
|
+
export interface CertificationStartedEntry extends BaseHistoryEntry {
|
|
63
|
+
type: "certification_started";
|
|
64
|
+
agents: AgentType[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Certification completed entry
|
|
68
|
+
*/
|
|
69
|
+
export interface CertificationCompletedEntry extends BaseHistoryEntry {
|
|
70
|
+
type: "certification_completed";
|
|
71
|
+
certificationId: string;
|
|
72
|
+
level: CertificationLevel;
|
|
73
|
+
score: number;
|
|
74
|
+
findingsCount: number;
|
|
75
|
+
bySeverity: Record<Severity, number>;
|
|
76
|
+
durationMs: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Scan completed entry
|
|
80
|
+
*/
|
|
81
|
+
export interface ScanCompletedEntry extends BaseHistoryEntry {
|
|
82
|
+
type: "scan_completed";
|
|
83
|
+
scanners: string[];
|
|
84
|
+
findingsCount: number;
|
|
85
|
+
bySeverity: Record<Severity, number>;
|
|
86
|
+
durationMs: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Finding submitted entry
|
|
90
|
+
*/
|
|
91
|
+
export interface FindingSubmittedEntry extends BaseHistoryEntry {
|
|
92
|
+
type: "finding_submitted";
|
|
93
|
+
certificationId: string;
|
|
94
|
+
agent: AgentType;
|
|
95
|
+
findingId: string;
|
|
96
|
+
severity: Severity;
|
|
97
|
+
category: string;
|
|
98
|
+
file: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Finding fixed entry
|
|
102
|
+
*/
|
|
103
|
+
export interface FindingFixedEntry extends BaseHistoryEntry {
|
|
104
|
+
type: "finding_fixed";
|
|
105
|
+
findingId: string;
|
|
106
|
+
severity: Severity;
|
|
107
|
+
fixMethod: "autofix" | "manual";
|
|
108
|
+
pattern?: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Compliance report entry
|
|
112
|
+
*/
|
|
113
|
+
export interface ComplianceReportEntry extends BaseHistoryEntry {
|
|
114
|
+
type: "compliance_report";
|
|
115
|
+
certificationId: string;
|
|
116
|
+
framework: ComplianceFramework;
|
|
117
|
+
complianceScore: number;
|
|
118
|
+
controlsTotal: number;
|
|
119
|
+
controlsCompliant: number;
|
|
120
|
+
controlsAtRisk: number;
|
|
121
|
+
controlsNonCompliant: number;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Model run entry (for multi-model tracking)
|
|
125
|
+
*/
|
|
126
|
+
export interface ModelRunEntry extends BaseHistoryEntry {
|
|
127
|
+
type: "model_run";
|
|
128
|
+
certificationId: string;
|
|
129
|
+
model: string;
|
|
130
|
+
agent: AgentType;
|
|
131
|
+
findingsCount: number;
|
|
132
|
+
inputTokens: number;
|
|
133
|
+
outputTokens: number;
|
|
134
|
+
durationMs: number;
|
|
135
|
+
cost?: number;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Union of all history entry types
|
|
139
|
+
*/
|
|
140
|
+
export type HistoryEntry = CertificationStartedEntry | CertificationCompletedEntry | ScanCompletedEntry | FindingSubmittedEntry | FindingFixedEntry | ComplianceReportEntry | ModelRunEntry;
|
|
141
|
+
/**
|
|
142
|
+
* History query options
|
|
143
|
+
*/
|
|
144
|
+
export interface HistoryQueryOptions {
|
|
145
|
+
/** Filter by entry type */
|
|
146
|
+
type?: HistoryEntryType | HistoryEntryType[];
|
|
147
|
+
/** Filter by project path */
|
|
148
|
+
projectPath?: string;
|
|
149
|
+
/** Filter by certification ID */
|
|
150
|
+
certificationId?: string;
|
|
151
|
+
/** Start date (ISO string) */
|
|
152
|
+
startDate?: string;
|
|
153
|
+
/** End date (ISO string) */
|
|
154
|
+
endDate?: string;
|
|
155
|
+
/** Maximum number of entries to return */
|
|
156
|
+
limit?: number;
|
|
157
|
+
/** Offset for pagination */
|
|
158
|
+
offset?: number;
|
|
159
|
+
/** Sort order */
|
|
160
|
+
order?: "asc" | "desc";
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* History query result
|
|
164
|
+
*/
|
|
165
|
+
export interface HistoryQueryResult {
|
|
166
|
+
entries: HistoryEntry[];
|
|
167
|
+
total: number;
|
|
168
|
+
hasMore: boolean;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Time period for trends
|
|
172
|
+
*/
|
|
173
|
+
export type TrendPeriod = "day" | "week" | "month" | "quarter" | "year";
|
|
174
|
+
/**
|
|
175
|
+
* Trend data point
|
|
176
|
+
*/
|
|
177
|
+
export interface TrendDataPoint {
|
|
178
|
+
period: string;
|
|
179
|
+
startDate: string;
|
|
180
|
+
endDate: string;
|
|
181
|
+
certificationCount: number;
|
|
182
|
+
scanCount: number;
|
|
183
|
+
findingsTotal: number;
|
|
184
|
+
findingsFixed: number;
|
|
185
|
+
avgScore: number;
|
|
186
|
+
bySeverity: Record<Severity, number>;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Trend analysis result
|
|
190
|
+
*/
|
|
191
|
+
export interface TrendAnalysis {
|
|
192
|
+
projectPath: string;
|
|
193
|
+
period: TrendPeriod;
|
|
194
|
+
dataPoints: TrendDataPoint[];
|
|
195
|
+
summary: {
|
|
196
|
+
totalCertifications: number;
|
|
197
|
+
totalScans: number;
|
|
198
|
+
totalFindings: number;
|
|
199
|
+
totalFixed: number;
|
|
200
|
+
avgScore: number;
|
|
201
|
+
scoreChange: number;
|
|
202
|
+
findingsChange: number;
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Zod schemas for validation
|
|
207
|
+
*/
|
|
208
|
+
export declare const HistoryQueryOptionsSchema: z.ZodObject<{
|
|
209
|
+
type: z.ZodOptional<z.ZodUnion<[z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run"]>, z.ZodArray<z.ZodEnum<["certification_started", "certification_completed", "scan_completed", "finding_submitted", "finding_fixed", "compliance_report", "model_run"]>, "many">]>>;
|
|
210
|
+
projectPath: z.ZodOptional<z.ZodString>;
|
|
211
|
+
certificationId: z.ZodOptional<z.ZodString>;
|
|
212
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
213
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
214
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
215
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
216
|
+
order: z.ZodDefault<z.ZodEnum<["asc", "desc"]>>;
|
|
217
|
+
}, "strip", z.ZodTypeAny, {
|
|
218
|
+
order: "asc" | "desc";
|
|
219
|
+
limit: number;
|
|
220
|
+
offset: number;
|
|
221
|
+
projectPath?: string | undefined;
|
|
222
|
+
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run")[] | undefined;
|
|
223
|
+
certificationId?: string | undefined;
|
|
224
|
+
startDate?: string | undefined;
|
|
225
|
+
endDate?: string | undefined;
|
|
226
|
+
}, {
|
|
227
|
+
projectPath?: string | undefined;
|
|
228
|
+
type?: "compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run" | ("compliance_report" | "certification_started" | "certification_completed" | "scan_completed" | "finding_submitted" | "finding_fixed" | "model_run")[] | undefined;
|
|
229
|
+
order?: "asc" | "desc" | undefined;
|
|
230
|
+
certificationId?: string | undefined;
|
|
231
|
+
startDate?: string | undefined;
|
|
232
|
+
endDate?: string | undefined;
|
|
233
|
+
limit?: number | undefined;
|
|
234
|
+
offset?: number | undefined;
|
|
235
|
+
}>;
|
|
236
|
+
/**
|
|
237
|
+
* Integrity verification result for a single entry
|
|
238
|
+
*/
|
|
239
|
+
export interface EntryVerificationResult {
|
|
240
|
+
/** Entry ID */
|
|
241
|
+
entryId: string;
|
|
242
|
+
/** Entry timestamp */
|
|
243
|
+
timestamp: string;
|
|
244
|
+
/** Whether the entry hash is valid */
|
|
245
|
+
hashValid: boolean;
|
|
246
|
+
/** Whether the chain link to previous entry is valid */
|
|
247
|
+
chainValid: boolean;
|
|
248
|
+
/** Whether the signature is valid (if present) */
|
|
249
|
+
signatureValid?: boolean;
|
|
250
|
+
/** Failure reason if any check failed */
|
|
251
|
+
failureReason?: string;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Full history integrity verification result
|
|
255
|
+
*/
|
|
256
|
+
export interface IntegrityVerificationResult {
|
|
257
|
+
/** Project path verified */
|
|
258
|
+
projectPath: string;
|
|
259
|
+
/** When verification was performed */
|
|
260
|
+
verifiedAt: string;
|
|
261
|
+
/** Overall verification status */
|
|
262
|
+
verified: boolean;
|
|
263
|
+
/** Total entries in history */
|
|
264
|
+
totalEntries: number;
|
|
265
|
+
/** Number of entries verified */
|
|
266
|
+
entriesVerified: number;
|
|
267
|
+
/** Number of entries that passed all checks */
|
|
268
|
+
entriesPassed: number;
|
|
269
|
+
/** Number of entries that failed verification */
|
|
270
|
+
entriesFailed: number;
|
|
271
|
+
/** Chain integrity (no gaps, all links valid) */
|
|
272
|
+
chainIntegrity: boolean;
|
|
273
|
+
/** First failure found (if any) */
|
|
274
|
+
firstFailure?: EntryVerificationResult;
|
|
275
|
+
/** All failures (for detailed report) */
|
|
276
|
+
failures: EntryVerificationResult[];
|
|
277
|
+
/** Genesis entry hash (first entry in chain) */
|
|
278
|
+
genesisHash?: string;
|
|
279
|
+
/** Latest entry hash (head of chain) */
|
|
280
|
+
headHash?: string;
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Types
|
|
3
|
+
*
|
|
4
|
+
* Defines types for tracking certification and scan history over time.
|
|
5
|
+
*
|
|
6
|
+
* @module history/types
|
|
7
|
+
*/
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
/**
|
|
10
|
+
* Zod schemas for validation
|
|
11
|
+
*/
|
|
12
|
+
export const HistoryQueryOptionsSchema = z.object({
|
|
13
|
+
type: z.union([
|
|
14
|
+
z.enum([
|
|
15
|
+
"certification_started",
|
|
16
|
+
"certification_completed",
|
|
17
|
+
"scan_completed",
|
|
18
|
+
"finding_submitted",
|
|
19
|
+
"finding_fixed",
|
|
20
|
+
"compliance_report",
|
|
21
|
+
"model_run",
|
|
22
|
+
]),
|
|
23
|
+
z.array(z.enum([
|
|
24
|
+
"certification_started",
|
|
25
|
+
"certification_completed",
|
|
26
|
+
"scan_completed",
|
|
27
|
+
"finding_submitted",
|
|
28
|
+
"finding_fixed",
|
|
29
|
+
"compliance_report",
|
|
30
|
+
"model_run",
|
|
31
|
+
])),
|
|
32
|
+
]).optional(),
|
|
33
|
+
projectPath: z.string().optional(),
|
|
34
|
+
certificationId: z.string().optional(),
|
|
35
|
+
startDate: z.string().optional(),
|
|
36
|
+
endDate: z.string().optional(),
|
|
37
|
+
limit: z.number().int().positive().max(1000).default(100),
|
|
38
|
+
offset: z.number().int().min(0).default(0),
|
|
39
|
+
order: z.enum(["asc", "desc"]).default("desc"),
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/history/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqOxB;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC;YACL,uBAAuB;YACvB,yBAAyB;YACzB,gBAAgB;YAChB,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,WAAW;SACZ,CAAC;QACF,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YACb,uBAAuB;YACvB,yBAAyB;YACzB,gBAAgB;YAChB,mBAAmB;YACnB,eAAe;YACf,mBAAmB;YACnB,WAAW;SACZ,CAAC,CAAC;KACJ,CAAC,CAAC,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Integrity Verification
|
|
3
|
+
*
|
|
4
|
+
* Verifies the tamper-evident audit trail by checking hash chains
|
|
5
|
+
* and optionally validating Sigstore signatures.
|
|
6
|
+
*
|
|
7
|
+
* @module history/verify
|
|
8
|
+
*/
|
|
9
|
+
import type { HistoryEntry, IntegrityVerificationResult, EntryVerificationResult } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Verify the integrity of a single history entry
|
|
12
|
+
*/
|
|
13
|
+
export declare function verifyEntry(entry: HistoryEntry, expectedPreviousHash: string): EntryVerificationResult;
|
|
14
|
+
/**
|
|
15
|
+
* Verify the integrity of the entire history file
|
|
16
|
+
*
|
|
17
|
+
* Checks:
|
|
18
|
+
* 1. Each entry's hash matches its content
|
|
19
|
+
* 2. Each entry's previousHash matches the previous entry's hash
|
|
20
|
+
* 3. The chain is unbroken from genesis to head
|
|
21
|
+
* 4. Optionally verifies Sigstore signatures
|
|
22
|
+
*/
|
|
23
|
+
export declare function verifyHistoryIntegrity(projectPath: string, options?: {
|
|
24
|
+
/** Stop at first failure */
|
|
25
|
+
stopOnFirstFailure?: boolean;
|
|
26
|
+
/** Verify signatures if present */
|
|
27
|
+
verifySignatures?: boolean;
|
|
28
|
+
}): Promise<IntegrityVerificationResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Format verification result as markdown
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatVerificationResultAsMarkdown(result: IntegrityVerificationResult): string;
|
|
33
|
+
/**
|
|
34
|
+
* Get a compact verification summary for API responses
|
|
35
|
+
*/
|
|
36
|
+
export declare function getVerificationSummary(result: IntegrityVerificationResult): {
|
|
37
|
+
verified: boolean;
|
|
38
|
+
totalEntries: number;
|
|
39
|
+
failureCount: number;
|
|
40
|
+
chainIntact: boolean;
|
|
41
|
+
genesisHash?: string;
|
|
42
|
+
headHash?: string;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/history/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,YAAY,EACZ,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,YAAY,EACnB,oBAAoB,EAAE,MAAM,GAC3B,uBAAuB,CAwCzB;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,4BAA4B;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,GACL,OAAO,CAAC,2BAA2B,CAAC,CAyHtC;AAED;;GAEG;AACH,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,2BAA2B,GAClC,MAAM,CAwER;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,2BAA2B,GAClC;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CASA"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Integrity Verification
|
|
3
|
+
*
|
|
4
|
+
* Verifies the tamper-evident audit trail by checking hash chains
|
|
5
|
+
* and optionally validating Sigstore signatures.
|
|
6
|
+
*
|
|
7
|
+
* @module history/verify
|
|
8
|
+
*/
|
|
9
|
+
import { access } from "fs/promises";
|
|
10
|
+
import { join } from "path";
|
|
11
|
+
import { createReadStream } from "fs";
|
|
12
|
+
import { createInterface } from "readline";
|
|
13
|
+
import { logger } from "../logger.js";
|
|
14
|
+
import { calculateEntryHash } from "./store.js";
|
|
15
|
+
const HISTORY_DIR = ".vaspera";
|
|
16
|
+
const HISTORY_FILE = "history.jsonl";
|
|
17
|
+
const GENESIS_HASH = "0000000000000000000000000000000000000000000000000000000000000000";
|
|
18
|
+
/**
|
|
19
|
+
* Verify the integrity of a single history entry
|
|
20
|
+
*/
|
|
21
|
+
export function verifyEntry(entry, expectedPreviousHash) {
|
|
22
|
+
const result = {
|
|
23
|
+
entryId: entry.id,
|
|
24
|
+
timestamp: entry.timestamp,
|
|
25
|
+
hashValid: false,
|
|
26
|
+
chainValid: false,
|
|
27
|
+
};
|
|
28
|
+
// If entry has no integrity proof, it's a legacy entry
|
|
29
|
+
if (!entry.integrity) {
|
|
30
|
+
result.hashValid = true; // Legacy entries don't have hashes to verify
|
|
31
|
+
result.chainValid = true; // Can't verify chain for legacy
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
// Verify the entry hash
|
|
35
|
+
const calculatedHash = calculateEntryHash(entry);
|
|
36
|
+
if (calculatedHash === entry.integrity.hash) {
|
|
37
|
+
result.hashValid = true;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
result.failureReason = `Hash mismatch: expected ${entry.integrity.hash}, got ${calculatedHash}`;
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
// Verify chain link
|
|
44
|
+
if (entry.integrity.previousHash === expectedPreviousHash) {
|
|
45
|
+
result.chainValid = true;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
result.failureReason = `Chain break: expected previous hash ${expectedPreviousHash}, got ${entry.integrity.previousHash}`;
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
// Signature verification would go here if Sigstore integration is active
|
|
52
|
+
if (entry.integrity.signature) {
|
|
53
|
+
// For now, mark as valid if signature exists
|
|
54
|
+
// Full verification would call verifyBlob from src/sbom/signing.ts
|
|
55
|
+
result.signatureValid = true;
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Verify the integrity of the entire history file
|
|
61
|
+
*
|
|
62
|
+
* Checks:
|
|
63
|
+
* 1. Each entry's hash matches its content
|
|
64
|
+
* 2. Each entry's previousHash matches the previous entry's hash
|
|
65
|
+
* 3. The chain is unbroken from genesis to head
|
|
66
|
+
* 4. Optionally verifies Sigstore signatures
|
|
67
|
+
*/
|
|
68
|
+
export async function verifyHistoryIntegrity(projectPath, options = {}) {
|
|
69
|
+
const { stopOnFirstFailure = false } = options;
|
|
70
|
+
const historyFile = join(projectPath, HISTORY_DIR, HISTORY_FILE);
|
|
71
|
+
const verifiedAt = new Date().toISOString();
|
|
72
|
+
const result = {
|
|
73
|
+
projectPath,
|
|
74
|
+
verifiedAt,
|
|
75
|
+
verified: false,
|
|
76
|
+
totalEntries: 0,
|
|
77
|
+
entriesVerified: 0,
|
|
78
|
+
entriesPassed: 0,
|
|
79
|
+
entriesFailed: 0,
|
|
80
|
+
chainIntegrity: true,
|
|
81
|
+
failures: [],
|
|
82
|
+
};
|
|
83
|
+
// Check if history file exists
|
|
84
|
+
try {
|
|
85
|
+
await access(historyFile);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// No history file - nothing to verify
|
|
89
|
+
result.verified = true;
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
// Read all entries
|
|
93
|
+
const entries = [];
|
|
94
|
+
const fileStream = createReadStream(historyFile);
|
|
95
|
+
const rl = createInterface({
|
|
96
|
+
input: fileStream,
|
|
97
|
+
crlfDelay: Infinity,
|
|
98
|
+
});
|
|
99
|
+
for await (const line of rl) {
|
|
100
|
+
if (!line.trim())
|
|
101
|
+
continue;
|
|
102
|
+
try {
|
|
103
|
+
entries.push(JSON.parse(line));
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
logger.warn("history.verify.malformed_line", { line: line.slice(0, 100) });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
result.totalEntries = entries.length;
|
|
110
|
+
if (entries.length === 0) {
|
|
111
|
+
result.verified = true;
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
// Verify each entry in order
|
|
115
|
+
let expectedPreviousHash = GENESIS_HASH;
|
|
116
|
+
let hasIntegrityEntries = false;
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
result.entriesVerified++;
|
|
119
|
+
if (entry.integrity) {
|
|
120
|
+
hasIntegrityEntries = true;
|
|
121
|
+
}
|
|
122
|
+
const entryResult = verifyEntry(entry, expectedPreviousHash);
|
|
123
|
+
if (entryResult.hashValid && entryResult.chainValid) {
|
|
124
|
+
result.entriesPassed++;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
result.entriesFailed++;
|
|
128
|
+
result.chainIntegrity = false;
|
|
129
|
+
result.failures.push(entryResult);
|
|
130
|
+
if (!result.firstFailure) {
|
|
131
|
+
result.firstFailure = entryResult;
|
|
132
|
+
}
|
|
133
|
+
if (stopOnFirstFailure) {
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Update expected previous hash for next entry
|
|
138
|
+
if (entry.integrity?.hash) {
|
|
139
|
+
expectedPreviousHash = entry.integrity.hash;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
// For legacy entries, calculate the hash
|
|
143
|
+
expectedPreviousHash = calculateEntryHash(entry);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Set genesis and head hashes
|
|
147
|
+
const firstEntry = entries[0];
|
|
148
|
+
const lastEntry = entries[entries.length - 1];
|
|
149
|
+
if (firstEntry.integrity?.hash) {
|
|
150
|
+
result.genesisHash = firstEntry.integrity.hash;
|
|
151
|
+
}
|
|
152
|
+
if (lastEntry.integrity?.hash) {
|
|
153
|
+
result.headHash = lastEntry.integrity.hash;
|
|
154
|
+
}
|
|
155
|
+
// Determine overall verification status
|
|
156
|
+
// If there are no integrity entries, we can't verify but there's nothing wrong
|
|
157
|
+
if (!hasIntegrityEntries) {
|
|
158
|
+
result.verified = true;
|
|
159
|
+
result.chainIntegrity = true;
|
|
160
|
+
logger.info("history.verify.legacy_entries", {
|
|
161
|
+
count: entries.length,
|
|
162
|
+
message: "All entries are legacy (no integrity proofs)",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
result.verified = result.entriesFailed === 0 && result.chainIntegrity;
|
|
167
|
+
}
|
|
168
|
+
logger.info("history.verify.complete", {
|
|
169
|
+
verified: result.verified,
|
|
170
|
+
total: result.totalEntries,
|
|
171
|
+
passed: result.entriesPassed,
|
|
172
|
+
failed: result.entriesFailed,
|
|
173
|
+
});
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Format verification result as markdown
|
|
178
|
+
*/
|
|
179
|
+
export function formatVerificationResultAsMarkdown(result) {
|
|
180
|
+
const lines = [
|
|
181
|
+
"# Audit Trail Integrity Verification",
|
|
182
|
+
"",
|
|
183
|
+
`**Project**: ${result.projectPath}`,
|
|
184
|
+
`**Verified At**: ${result.verifiedAt}`,
|
|
185
|
+
"",
|
|
186
|
+
"## Summary",
|
|
187
|
+
"",
|
|
188
|
+
`| Metric | Value |`,
|
|
189
|
+
`|--------|-------|`,
|
|
190
|
+
`| Status | ${result.verified ? "✅ VERIFIED" : "❌ FAILED"} |`,
|
|
191
|
+
`| Total Entries | ${result.totalEntries} |`,
|
|
192
|
+
`| Entries Verified | ${result.entriesVerified} |`,
|
|
193
|
+
`| Entries Passed | ${result.entriesPassed} |`,
|
|
194
|
+
`| Entries Failed | ${result.entriesFailed} |`,
|
|
195
|
+
`| Chain Integrity | ${result.chainIntegrity ? "✅ Intact" : "❌ Broken"} |`,
|
|
196
|
+
];
|
|
197
|
+
if (result.genesisHash) {
|
|
198
|
+
lines.push(`| Genesis Hash | \`${result.genesisHash.slice(0, 16)}...\` |`);
|
|
199
|
+
}
|
|
200
|
+
if (result.headHash) {
|
|
201
|
+
lines.push(`| Head Hash | \`${result.headHash.slice(0, 16)}...\` |`);
|
|
202
|
+
}
|
|
203
|
+
if (result.failures.length > 0) {
|
|
204
|
+
lines.push("", "## Failures", "", "| Entry ID | Timestamp | Hash Valid | Chain Valid | Reason |", "|----------|-----------|------------|-------------|--------|");
|
|
205
|
+
for (const failure of result.failures) {
|
|
206
|
+
lines.push(`| ${failure.entryId} | ${failure.timestamp} | ${failure.hashValid ? "✅" : "❌"} | ${failure.chainValid ? "✅" : "❌"} | ${failure.failureReason || "-"} |`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (result.verified) {
|
|
210
|
+
lines.push("", "## Attestation", "", "This audit trail has been verified as tamper-evident. All entries form", "an unbroken hash chain from genesis to head. Any modification to historical", "entries would break the chain and be detected.", "");
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
lines.push("", "## Warning", "", "⚠️ **AUDIT TRAIL INTEGRITY COMPROMISED**", "", "The hash chain has been broken, indicating potential tampering or corruption.", "Entries after the first failure cannot be trusted as authentic.", "", "Recommended actions:", "1. Investigate the cause of the integrity failure", "2. Review system access logs for unauthorized modifications", "3. Consider restoring from a verified backup if available", "");
|
|
214
|
+
}
|
|
215
|
+
return lines.join("\n");
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Get a compact verification summary for API responses
|
|
219
|
+
*/
|
|
220
|
+
export function getVerificationSummary(result) {
|
|
221
|
+
return {
|
|
222
|
+
verified: result.verified,
|
|
223
|
+
totalEntries: result.totalEntries,
|
|
224
|
+
failureCount: result.entriesFailed,
|
|
225
|
+
chainIntact: result.chainIntegrity,
|
|
226
|
+
genesisHash: result.genesisHash,
|
|
227
|
+
headHash: result.headHash,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/history/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwPpE;;GAEG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM;;;;;EAIjC;AAED;;GAEG;AACH,iBAAS,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;;;;;;EAK/D;AAED;;GAEG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM;;;;;EAIrC;AA+CD,QAAA,MAAM,MAAM,WAGV,CAAC;AAghKH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|