@mikeargento/bitgraph-audit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/dist/anchors.d.ts +31 -0
  4. package/dist/anchors.d.ts.map +1 -0
  5. package/dist/anchors.js +116 -0
  6. package/dist/anchors.js.map +1 -0
  7. package/dist/anomalies.d.ts +42 -0
  8. package/dist/anomalies.d.ts.map +1 -0
  9. package/dist/anomalies.js +642 -0
  10. package/dist/anomalies.js.map +1 -0
  11. package/dist/attestation.d.ts +20 -0
  12. package/dist/attestation.d.ts.map +1 -0
  13. package/dist/attestation.js +795 -0
  14. package/dist/attestation.js.map +1 -0
  15. package/dist/audit.d.ts +19 -0
  16. package/dist/audit.d.ts.map +1 -0
  17. package/dist/audit.js +116 -0
  18. package/dist/audit.js.map +1 -0
  19. package/dist/authority.d.ts +37 -0
  20. package/dist/authority.d.ts.map +1 -0
  21. package/dist/authority.js +126 -0
  22. package/dist/authority.js.map +1 -0
  23. package/dist/aws-nitro-root-ca.d.ts +24 -0
  24. package/dist/aws-nitro-root-ca.d.ts.map +1 -0
  25. package/dist/aws-nitro-root-ca.js +44 -0
  26. package/dist/aws-nitro-root-ca.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +257 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/contents-hash.d.ts +30 -0
  32. package/dist/contents-hash.d.ts.map +1 -0
  33. package/dist/contents-hash.js +73 -0
  34. package/dist/contents-hash.js.map +1 -0
  35. package/dist/export.d.ts +64 -0
  36. package/dist/export.d.ts.map +1 -0
  37. package/dist/export.js +192 -0
  38. package/dist/export.js.map +1 -0
  39. package/dist/index.d.ts +31 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +17 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/ingest.d.ts +36 -0
  44. package/dist/ingest.d.ts.map +1 -0
  45. package/dist/ingest.js +828 -0
  46. package/dist/ingest.js.map +1 -0
  47. package/dist/reconstruct.d.ts +40 -0
  48. package/dist/reconstruct.d.ts.map +1 -0
  49. package/dist/reconstruct.js +400 -0
  50. package/dist/reconstruct.js.map +1 -0
  51. package/dist/report-json.d.ts +3 -0
  52. package/dist/report-json.d.ts.map +1 -0
  53. package/dist/report-json.js +290 -0
  54. package/dist/report-json.js.map +1 -0
  55. package/dist/report-md.d.ts +3 -0
  56. package/dist/report-md.d.ts.map +1 -0
  57. package/dist/report-md.js +853 -0
  58. package/dist/report-md.js.map +1 -0
  59. package/dist/rlp.d.ts +37 -0
  60. package/dist/rlp.d.ts.map +1 -0
  61. package/dist/rlp.js +120 -0
  62. package/dist/rlp.js.map +1 -0
  63. package/dist/tar.d.ts +47 -0
  64. package/dist/tar.d.ts.map +1 -0
  65. package/dist/tar.js +483 -0
  66. package/dist/tar.js.map +1 -0
  67. package/dist/temporal.d.ts +55 -0
  68. package/dist/temporal.d.ts.map +1 -0
  69. package/dist/temporal.js +461 -0
  70. package/dist/temporal.js.map +1 -0
  71. package/dist/types.d.ts +1389 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/types.js +3 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/validity.d.ts +21 -0
  76. package/dist/validity.d.ts.map +1 -0
  77. package/dist/validity.js +86 -0
  78. package/dist/validity.js.map +1 -0
  79. package/dist/verify-tiers.d.ts +11 -0
  80. package/dist/verify-tiers.d.ts.map +1 -0
  81. package/dist/verify-tiers.js +120 -0
  82. package/dist/verify-tiers.js.map +1 -0
  83. package/dist/witness.d.ts +25 -0
  84. package/dist/witness.d.ts.map +1 -0
  85. package/dist/witness.js +308 -0
  86. package/dist/witness.js.map +1 -0
  87. package/package.json +42 -0
  88. package/src/anchors.ts +168 -0
  89. package/src/anomalies.ts +773 -0
  90. package/src/attestation.ts +878 -0
  91. package/src/audit.ts +136 -0
  92. package/src/authority.ts +165 -0
  93. package/src/aws-nitro-root-ca.ts +47 -0
  94. package/src/cli.ts +284 -0
  95. package/src/contents-hash.ts +95 -0
  96. package/src/export.ts +278 -0
  97. package/src/index.ts +122 -0
  98. package/src/ingest.ts +967 -0
  99. package/src/reconstruct.ts +491 -0
  100. package/src/report-json.ts +331 -0
  101. package/src/report-md.ts +1067 -0
  102. package/src/rlp.ts +142 -0
  103. package/src/tar.ts +587 -0
  104. package/src/temporal.ts +629 -0
  105. package/src/types.ts +1528 -0
  106. package/src/validity.ts +90 -0
  107. package/src/verify-tiers.ts +137 -0
  108. package/src/witness.ts +407 -0
@@ -0,0 +1,290 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * JSON report builder: turns an AuditResult into the audit-report.json
4
+ * object (schema "bitgraph-audit-report/1").
5
+ *
6
+ * Contract for machine consumers: every classification is a stable code
7
+ * or typed field; prose (message, claim, explanation fields) is
8
+ * supplementary and never needs parsing. The report is deterministic
9
+ * given the same bundle except for the runMetadata block, which is
10
+ * explicitly flagged as the only nondeterministic section.
11
+ *
12
+ * Ordering: objects are built in fixed key order; arrays are either
13
+ * sorted here by stable keys (proofs by canonical hash, rejected inputs
14
+ * by path, unordered epoch pairs by epochId) or carry the producing
15
+ * stage's documented deterministic order (partitions, components,
16
+ * anomalies, divergences, witness outcomes, temporal segments).
17
+ *
18
+ * Read-only over the AuditResult. The raw parsed proof objects retained
19
+ * on ObservedProof records are never serialized; per-proof records carry
20
+ * the compact metadata fields only.
21
+ */
22
+ import { computeExitFlags } from "./audit.js";
23
+ // ---------------------------------------------------------------------------
24
+ // Public API
25
+ // ---------------------------------------------------------------------------
26
+ export function buildJsonReport(result) {
27
+ const proofs = buildProofRecords(result);
28
+ const unsupportedVersions = [...result.ingest.unsupportedVersions].sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
29
+ const partitions = buildPartitions(result);
30
+ const anomalies = buildUnifiedAnomalies(result);
31
+ const unorderedPairs = buildUnorderedEpochPairs(result);
32
+ const summary = buildSummary(result, partitions, anomalies);
33
+ return {
34
+ reportSchemaVersion: "bitgraph-audit-report/1",
35
+ toolVersion: result.runMetadata.toolVersion,
36
+ runMetadata: {
37
+ nondeterministic: true,
38
+ note: "This block is the only nondeterministic section of the report. " +
39
+ "startedAt is the wall-clock start time of the audit run; every " +
40
+ "other value in this report is a pure function of the bundle " +
41
+ "contents and the tool version.",
42
+ toolVersion: result.runMetadata.toolVersion,
43
+ startedAt: result.runMetadata.startedAt,
44
+ bundlePath: result.runMetadata.bundlePath,
45
+ container: result.runMetadata.container,
46
+ },
47
+ input: {
48
+ container: result.ingest.container,
49
+ entriesScanned: result.ingest.entriesScanned,
50
+ ...(result.ingest.strippedRootPrefix !== undefined
51
+ ? { strippedRootPrefix: result.ingest.strippedRootPrefix }
52
+ : {}),
53
+ computedContentsHashB64: result.ingest.computedContentsHashB64,
54
+ ...(result.ingest.manifest !== undefined ? { manifest: result.ingest.manifest } : {}),
55
+ counts: {
56
+ observed: result.ingest.counts.observed,
57
+ proofFiles: result.ingest.counts.proofFiles,
58
+ exactDuplicates: result.ingest.counts.exactDuplicates,
59
+ semanticDuplicates: result.ingest.counts.semanticDuplicates,
60
+ unsupportedVersion: result.ingest.counts.unsupportedVersion,
61
+ verified: result.verification.verified,
62
+ failed: result.verification.failed,
63
+ artifactUnavailable: result.verification.artifactUnavailable,
64
+ chainless: result.verification.chainless,
65
+ artifacts: result.ingest.counts.artifacts,
66
+ witnesses: result.ingest.counts.witnesses,
67
+ skippedUnsafePaths: result.ingest.counts.skippedUnsafePaths,
68
+ },
69
+ },
70
+ proofs,
71
+ unsupportedVersions,
72
+ partitions,
73
+ unchainedProofHashes: result.reconstruction.unchainedProofHashes,
74
+ unpartitionedProofHashes: result.reconstruction.unpartitionedProofHashes,
75
+ epochRelationships: {
76
+ epochs: result.reconstruction.epochRelationships.epochs,
77
+ lineageEdges: result.reconstruction.epochRelationships.edges,
78
+ orderedPairs: result.reconstruction.epochRelationships.orderedPairs,
79
+ anchorOrderedPairs: result.temporal.anchorOrderedPairs,
80
+ unorderedPairs,
81
+ },
82
+ anomalies,
83
+ divergences: result.anomalies.divergences,
84
+ authorities: {
85
+ groups: result.authorities.groups,
86
+ sharedSignersAcrossEpochs: result.authorities.sharedSignersAcrossEpochs,
87
+ },
88
+ attestations: {
89
+ records: result.attestations.records,
90
+ counts: result.attestations.counts,
91
+ },
92
+ anchors: {
93
+ records: result.anchors.anchors,
94
+ metadataOnlyProofHashes: result.anchors.metadataOnlyProofHashes,
95
+ },
96
+ witnesses: {
97
+ outcomes: result.witnesses.outcomes,
98
+ },
99
+ temporal: {
100
+ segments: result.temporal.segments,
101
+ verifiedAnchorProofHashes: result.temporal.verifiedAnchorProofHashes,
102
+ unverifiedAnchorProofHashes: result.temporal.unverifiedAnchorProofHashes,
103
+ },
104
+ summary,
105
+ };
106
+ }
107
+ // ---------------------------------------------------------------------------
108
+ // Per-proof records
109
+ // ---------------------------------------------------------------------------
110
+ function buildProofRecords(result) {
111
+ const records = result.ingest.proofs.map((proof) => toProofRecord(proof));
112
+ records.sort((a, b) => (a.proofHash < b.proofHash ? -1 : a.proofHash > b.proofHash ? 1 : 0));
113
+ return records;
114
+ }
115
+ function toProofRecord(proof) {
116
+ const v = proof.verification;
117
+ return {
118
+ proofHash: proof.proofHash,
119
+ sources: proof.sources,
120
+ ...(v !== undefined ? { verificationTier: v.tier, verificationStatus: v.status } : {}),
121
+ ...(v?.reason !== undefined ? { verificationReason: v.reason } : {}),
122
+ ...(v?.artifactPath !== undefined ? { artifactPath: v.artifactPath } : {}),
123
+ embeddedProofHash: proof.embeddedProofHash,
124
+ ...(proof.counter !== undefined ? { counter: proof.counter } : {}),
125
+ ...(proof.slotCounter !== undefined ? { slotCounter: proof.slotCounter } : {}),
126
+ ...(proof.prevB64 !== undefined ? { prevB64: proof.prevB64 } : {}),
127
+ ...(proof.epochId !== undefined ? { epochId: proof.epochId } : {}),
128
+ chainId: proof.chainId,
129
+ ...(proof.publicKeyB64 !== undefined ? { publicKeyB64: proof.publicKeyB64 } : {}),
130
+ ...(proof.measurement !== undefined ? { measurement: proof.measurement } : {}),
131
+ ...(proof.enforcement !== undefined ? { enforcement: proof.enforcement } : {}),
132
+ chainless: proof.chainless,
133
+ hasSlotAllocation: proof.hasSlotAllocation,
134
+ hasAttestation: proof.hasAttestation,
135
+ hasAgency: proof.hasAgency,
136
+ hasEpochLink: proof.hasEpochLink,
137
+ };
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Partitions with intactness
141
+ // ---------------------------------------------------------------------------
142
+ function partitionKeyId(key) {
143
+ return `${key.publicKeyB64}\u0000${key.epochId ?? ""}\u0000${key.chainId}`;
144
+ }
145
+ function buildPartitions(result) {
146
+ const anomalousPartitions = new Set();
147
+ for (const anomaly of result.anomalies.anomalies) {
148
+ if (anomaly.partition !== undefined)
149
+ anomalousPartitions.add(partitionKeyId(anomaly.partition));
150
+ }
151
+ for (const divergence of result.anomalies.divergences) {
152
+ if (divergence.partition !== undefined) {
153
+ anomalousPartitions.add(partitionKeyId(divergence.partition));
154
+ }
155
+ }
156
+ return result.reconstruction.partitions.map((partition) => ({
157
+ key: partition.key,
158
+ memberProofHashes: partition.memberProofHashes,
159
+ components: partition.components,
160
+ intact: partition.components.length === 1 && !anomalousPartitions.has(partitionKeyId(partition.key)),
161
+ }));
162
+ }
163
+ // ---------------------------------------------------------------------------
164
+ // Unified anomaly list
165
+ // ---------------------------------------------------------------------------
166
+ function fromFinding(stage, finding) {
167
+ return {
168
+ stage,
169
+ code: finding.code,
170
+ message: finding.message,
171
+ ...(finding.path !== undefined ? { path: finding.path } : {}),
172
+ ...(finding.details !== undefined ? { details: finding.details } : {}),
173
+ };
174
+ }
175
+ function fromChainAnomaly(stage, anomaly) {
176
+ return {
177
+ stage,
178
+ code: anomaly.code,
179
+ message: anomaly.message,
180
+ ...(anomaly.partition !== undefined ? { partition: anomaly.partition } : {}),
181
+ proofHashes: anomaly.proofHashes,
182
+ ...(anomaly.details !== undefined ? { details: anomaly.details } : {}),
183
+ };
184
+ }
185
+ function buildUnifiedAnomalies(result) {
186
+ const out = [];
187
+ for (const finding of result.ingest.findings)
188
+ out.push(fromFinding("ingest", finding));
189
+ for (const anomaly of result.anomalies.anomalies)
190
+ out.push(fromChainAnomaly("chain", anomaly));
191
+ for (const anomaly of result.authorities.anomalies) {
192
+ out.push(fromChainAnomaly("authority", anomaly));
193
+ }
194
+ for (const finding of result.anchors.findings)
195
+ out.push(fromFinding("anchor", finding));
196
+ for (const finding of result.witnesses.findings)
197
+ out.push(fromFinding("witness", finding));
198
+ for (const finding of result.attestations.findings) {
199
+ out.push(fromFinding("attestation", finding));
200
+ }
201
+ return out;
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // Epoch pairs without ordering evidence
205
+ // ---------------------------------------------------------------------------
206
+ function buildUnorderedEpochPairs(result) {
207
+ const epochIds = result.reconstruction.epochRelationships.epochs.map((e) => e.epochId);
208
+ const ordered = new Set();
209
+ const mark = (a, b) => {
210
+ ordered.add(`${a}\u0000${b}`);
211
+ ordered.add(`${b}\u0000${a}`);
212
+ };
213
+ for (const pair of result.reconstruction.epochRelationships.orderedPairs) {
214
+ mark(pair.beforeEpochId, pair.afterEpochId);
215
+ }
216
+ for (const pair of result.temporal.anchorOrderedPairs) {
217
+ mark(pair.beforeEpochId, pair.afterEpochId);
218
+ }
219
+ const out = [];
220
+ for (let i = 0; i < epochIds.length; i++) {
221
+ for (let j = i + 1; j < epochIds.length; j++) {
222
+ const a = epochIds[i];
223
+ const b = epochIds[j];
224
+ if (!ordered.has(`${a}\u0000${b}`))
225
+ out.push({ epochIdA: a, epochIdB: b });
226
+ }
227
+ }
228
+ return out;
229
+ }
230
+ // ---------------------------------------------------------------------------
231
+ // Summary statistics
232
+ // ---------------------------------------------------------------------------
233
+ function buildSummary(result, partitions, anomalies) {
234
+ const countsByCode = new Map();
235
+ for (const anomaly of anomalies) {
236
+ countsByCode.set(anomaly.code, (countsByCode.get(anomaly.code) ?? 0) + 1);
237
+ }
238
+ const anomalyCountsByCode = Object.fromEntries([...countsByCode.entries()].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0)));
239
+ const signers = new Set();
240
+ const measurements = new Set();
241
+ for (const proof of result.ingest.proofs) {
242
+ if (proof.publicKeyB64 !== undefined)
243
+ signers.add(proof.publicKeyB64);
244
+ if (proof.measurement !== undefined)
245
+ measurements.add(proof.measurement);
246
+ }
247
+ const segmentCount = (status) => result.temporal.segments.filter((s) => s.status === status).length;
248
+ const partitionsIntact = partitions.filter((p) => p.intact).length;
249
+ const exit = computeExitFlags(result);
250
+ return {
251
+ proofsObserved: result.ingest.counts.observed,
252
+ fullyVerified: result.verification.verified,
253
+ failed: result.verification.failed,
254
+ artifactUnavailable: result.verification.artifactUnavailable,
255
+ unsupportedVersion: result.ingest.counts.unsupportedVersion,
256
+ chainless: result.verification.chainless,
257
+ exactDuplicates: result.ingest.counts.exactDuplicates,
258
+ semanticDuplicates: result.ingest.counts.semanticDuplicates,
259
+ partitions: partitions.length,
260
+ partitionsIntact,
261
+ chainIntact: partitionsIntact === partitions.length &&
262
+ result.anomalies.anomalies.length === 0 &&
263
+ result.authorities.anomalies.length === 0 &&
264
+ result.anomalies.divergences.length === 0,
265
+ epochsObserved: result.reconstruction.epochRelationships.epochs.length,
266
+ anomalyCountsByCode,
267
+ divergenceCount: result.anomalies.divergences.length,
268
+ authorityGroupCount: result.authorities.groups.length,
269
+ distinctSignerCount: signers.size,
270
+ distinctDeclaredMeasurementCount: measurements.size,
271
+ attestation: {
272
+ declaredMeasurementPresent: result.attestations.counts.proofsWithDeclaredMeasurement,
273
+ documentsPresent: result.attestations.counts.proofsWithDocument,
274
+ documentsValidated: result.attestations.counts.documentsValidated,
275
+ pcr0MatchesDeclared: result.attestations.counts.pcr0Matches,
276
+ userDataBound: result.attestations.counts.userDataBound,
277
+ },
278
+ temporal: {
279
+ anchorsIdentified: result.anchors.anchors.length,
280
+ anchorsWithVerifiedWitness: result.temporal.verifiedAnchorProofHashes.length,
281
+ segments: result.temporal.segments.length,
282
+ segmentsBracketed: segmentCount("bracketed"),
283
+ segmentsLowerBounded: segmentCount("lower-bounded"),
284
+ segmentsUpperBounded: segmentCount("upper-bounded"),
285
+ segmentsUnanchored: segmentCount("ordered-but-unanchored"),
286
+ },
287
+ exit,
288
+ };
289
+ }
290
+ //# sourceMappingURL=report-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-json.js","sourceRoot":"","sources":["../src/report-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AuditResult } from "./types.js";
2
+ export declare function buildMarkdownReport(result: AuditResult): string;
3
+ //# sourceMappingURL=report-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-md.d.ts","sourceRoot":"","sources":["../src/report-md.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAGV,WAAW,EAOZ,MAAM,YAAY,CAAC;AAQpB,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAW/D"}