@kya-os/mcp 1.10.1 → 1.11.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/AUDITABILITY.md +441 -0
- package/CHANGELOG.md +88 -0
- package/CONFORMANCE.md +598 -0
- package/README.md +67 -4
- package/SPEC.md +1827 -0
- package/dist/audit/adapters/legacy-audit-log.d.ts +20 -0
- package/dist/audit/adapters/legacy-audit-log.d.ts.map +1 -0
- package/dist/audit/adapters/legacy-audit-log.js +56 -0
- package/dist/audit/adapters/legacy-audit-log.js.map +1 -0
- package/dist/audit/adapters/mcp.d.ts +105 -0
- package/dist/audit/adapters/mcp.d.ts.map +1 -0
- package/dist/audit/adapters/mcp.js +213 -0
- package/dist/audit/adapters/mcp.js.map +1 -0
- package/dist/audit/assurance.d.ts +22 -0
- package/dist/audit/assurance.d.ts.map +1 -0
- package/dist/audit/assurance.js +39 -0
- package/dist/audit/assurance.js.map +1 -0
- package/dist/audit/checkpoint-coordinator.d.ts +51 -0
- package/dist/audit/checkpoint-coordinator.d.ts.map +1 -0
- package/dist/audit/checkpoint-coordinator.js +112 -0
- package/dist/audit/checkpoint-coordinator.js.map +1 -0
- package/dist/audit/checkpoint.d.ts +59 -0
- package/dist/audit/checkpoint.d.ts.map +1 -0
- package/dist/audit/checkpoint.js +219 -0
- package/dist/audit/checkpoint.js.map +1 -0
- package/dist/audit/cli.d.ts +8 -0
- package/dist/audit/cli.d.ts.map +1 -0
- package/dist/audit/cli.js +85 -0
- package/dist/audit/cli.js.map +1 -0
- package/dist/audit/crypto.d.ts +37 -0
- package/dist/audit/crypto.d.ts.map +1 -0
- package/dist/audit/crypto.js +68 -0
- package/dist/audit/crypto.js.map +1 -0
- package/dist/audit/errors.d.ts +29 -0
- package/dist/audit/errors.d.ts.map +1 -0
- package/dist/audit/errors.js +33 -0
- package/dist/audit/errors.js.map +1 -0
- package/dist/audit/evidence.d.ts +45 -0
- package/dist/audit/evidence.d.ts.map +1 -0
- package/dist/audit/evidence.js +151 -0
- package/dist/audit/evidence.js.map +1 -0
- package/dist/audit/index.d.ts +27 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +27 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/integrity.d.ts +19 -0
- package/dist/audit/integrity.d.ts.map +1 -0
- package/dist/audit/integrity.js +64 -0
- package/dist/audit/integrity.js.map +1 -0
- package/dist/audit/merkle.d.ts +31 -0
- package/dist/audit/merkle.d.ts.map +1 -0
- package/dist/audit/merkle.js +195 -0
- package/dist/audit/merkle.js.map +1 -0
- package/dist/audit/mirror-service.d.ts +19 -0
- package/dist/audit/mirror-service.d.ts.map +1 -0
- package/dist/audit/mirror-service.js +54 -0
- package/dist/audit/mirror-service.js.map +1 -0
- package/dist/audit/projection.d.ts +90 -0
- package/dist/audit/projection.d.ts.map +1 -0
- package/dist/audit/projection.js +142 -0
- package/dist/audit/projection.js.map +1 -0
- package/dist/audit/providers/anchor.d.ts +23 -0
- package/dist/audit/providers/anchor.d.ts.map +1 -0
- package/dist/audit/providers/anchor.js +25 -0
- package/dist/audit/providers/anchor.js.map +1 -0
- package/dist/audit/providers/evidence.d.ts +36 -0
- package/dist/audit/providers/evidence.d.ts.map +1 -0
- package/dist/audit/providers/evidence.js +2 -0
- package/dist/audit/providers/evidence.js.map +1 -0
- package/dist/audit/providers/journal.d.ts +35 -0
- package/dist/audit/providers/journal.d.ts.map +1 -0
- package/dist/audit/providers/journal.js +2 -0
- package/dist/audit/providers/journal.js.map +1 -0
- package/dist/audit/providers/memory-journal.d.ts +24 -0
- package/dist/audit/providers/memory-journal.d.ts.map +1 -0
- package/dist/audit/providers/memory-journal.js +73 -0
- package/dist/audit/providers/memory-journal.js.map +1 -0
- package/dist/audit/providers/observer.d.ts +30 -0
- package/dist/audit/providers/observer.d.ts.map +1 -0
- package/dist/audit/providers/observer.js +100 -0
- package/dist/audit/providers/observer.js.map +1 -0
- package/dist/audit/providers/outbox.d.ts +37 -0
- package/dist/audit/providers/outbox.d.ts.map +1 -0
- package/dist/audit/providers/outbox.js +52 -0
- package/dist/audit/providers/outbox.js.map +1 -0
- package/dist/audit/providers/recorder-client.d.ts +22 -0
- package/dist/audit/providers/recorder-client.d.ts.map +1 -0
- package/dist/audit/providers/recorder-client.js +17 -0
- package/dist/audit/providers/recorder-client.js.map +1 -0
- package/dist/audit/providers/source-state.d.ts +37 -0
- package/dist/audit/providers/source-state.d.ts.map +1 -0
- package/dist/audit/providers/source-state.js +94 -0
- package/dist/audit/providers/source-state.js.map +1 -0
- package/dist/audit/recorder-service.d.ts +78 -0
- package/dist/audit/recorder-service.d.ts.map +1 -0
- package/dist/audit/recorder-service.js +331 -0
- package/dist/audit/recorder-service.js.map +1 -0
- package/dist/audit/replay-bundle.d.ts +52 -0
- package/dist/audit/replay-bundle.d.ts.map +1 -0
- package/dist/audit/replay-bundle.js +551 -0
- package/dist/audit/replay-bundle.js.map +1 -0
- package/dist/audit/schemas.d.ts +1144 -0
- package/dist/audit/schemas.d.ts.map +1 -0
- package/dist/audit/schemas.js +483 -0
- package/dist/audit/schemas.js.map +1 -0
- package/dist/audit/service.d.ts +91 -0
- package/dist/audit/service.d.ts.map +1 -0
- package/dist/audit/service.js +222 -0
- package/dist/audit/service.js.map +1 -0
- package/dist/audit/testing/index.d.ts +2 -0
- package/dist/audit/testing/index.d.ts.map +1 -0
- package/dist/audit/testing/index.js +2 -0
- package/dist/audit/testing/index.js.map +1 -0
- package/dist/audit/testing/provider-contracts.d.ts +51 -0
- package/dist/audit/testing/provider-contracts.d.ts.map +1 -0
- package/dist/audit/testing/provider-contracts.js +391 -0
- package/dist/audit/testing/provider-contracts.js.map +1 -0
- package/dist/audit/types.d.ts +356 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +49 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/verifier.d.ts +73 -0
- package/dist/audit/verifier.d.ts.map +1 -0
- package/dist/audit/verifier.js +322 -0
- package/dist/audit/verifier.js.map +1 -0
- package/dist/card/proof/canonical.d.ts.map +1 -1
- package/dist/card/proof/canonical.js +19 -1
- package/dist/card/proof/canonical.js.map +1 -1
- package/dist/delegation/delegation-graph.d.ts +4 -0
- package/dist/delegation/delegation-graph.d.ts.map +1 -1
- package/dist/delegation/delegation-graph.js +28 -2
- package/dist/delegation/delegation-graph.js.map +1 -1
- package/dist/delegation/statuslist-manager.d.ts +5 -0
- package/dist/delegation/statuslist-manager.d.ts.map +1 -1
- package/dist/delegation/statuslist-manager.js.map +1 -1
- package/dist/delegation/storage/memory-graph-storage.d.ts +4 -2
- package/dist/delegation/storage/memory-graph-storage.d.ts.map +1 -1
- package/dist/delegation/storage/memory-graph-storage.js +18 -0
- package/dist/delegation/storage/memory-graph-storage.js.map +1 -1
- package/dist/delegation/storage/memory-statuslist-storage.d.ts +5 -2
- package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +1 -1
- package/dist/delegation/storage/memory-statuslist-storage.js +21 -2
- package/dist/delegation/storage/memory-statuslist-storage.js.map +1 -1
- package/dist/delegation/utils.d.ts.map +1 -1
- package/dist/delegation/utils.js +2 -42
- package/dist/delegation/utils.js.map +1 -1
- package/dist/delegation/vc-verifier.d.ts +4 -0
- package/dist/delegation/vc-verifier.d.ts.map +1 -1
- package/dist/delegation/vc-verifier.js +44 -13
- package/dist/delegation/vc-verifier.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/kya-os-transport.d.ts.map +1 -1
- package/dist/middleware/kya-os-transport.js +10 -3
- package/dist/middleware/kya-os-transport.js.map +1 -1
- package/dist/middleware/with-kya-os-server.d.ts +6 -0
- package/dist/middleware/with-kya-os-server.d.ts.map +1 -1
- package/dist/middleware/with-kya-os-server.js +2 -0
- package/dist/middleware/with-kya-os-server.js.map +1 -1
- package/dist/middleware/with-kya-os.config-types.d.ts +15 -0
- package/dist/middleware/with-kya-os.config-types.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.config-types.js.map +1 -1
- package/dist/middleware/with-kya-os.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.delegation-gate.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.delegation-gate.js +96 -3
- package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
- package/dist/middleware/with-kya-os.deps.d.ts +2 -0
- package/dist/middleware/with-kya-os.deps.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.js +23 -0
- package/dist/middleware/with-kya-os.js.map +1 -1
- package/dist/middleware/with-kya-os.policy-gate.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.policy-gate.js +29 -4
- package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
- package/dist/middleware/with-kya-os.protocol.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.protocol.js +10 -0
- package/dist/middleware/with-kya-os.protocol.js.map +1 -1
- package/dist/middleware/with-kya-os.session.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.session.js +208 -2
- package/dist/middleware/with-kya-os.session.js.map +1 -1
- package/dist/middleware/with-kya-os.types.d.ts +6 -0
- package/dist/middleware/with-kya-os.types.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.types.js.map +1 -1
- package/dist/proof/generator.d.ts.map +1 -1
- package/dist/proof/generator.js +6 -5
- package/dist/proof/generator.js.map +1 -1
- package/dist/proof/verifier.d.ts +12 -0
- package/dist/proof/verifier.d.ts.map +1 -1
- package/dist/proof/verifier.js +35 -4
- package/dist/proof/verifier.js.map +1 -1
- package/dist/session/manager.js +1 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/utils/canonical-json.d.ts +15 -0
- package/dist/utils/canonical-json.d.ts.map +1 -0
- package/dist/utils/canonical-json.js +109 -0
- package/dist/utils/canonical-json.js.map +1 -0
- package/dist/utils/crypto-service.d.ts.map +1 -1
- package/dist/utils/crypto-service.js +5 -0
- package/dist/utils/crypto-service.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +29 -11
- package/schemas/README.md +27 -1
- package/schemas/audit-anchor-receipt.schema.json +16 -0
- package/schemas/audit-bundle-manifest.schema.json +71 -0
- package/schemas/audit-checkpoint.schema.json +37 -0
- package/schemas/audit-consistency-proof.schema.json +17 -0
- package/schemas/audit-entry.schema.json +33 -0
- package/schemas/audit-event.schema.json +168 -0
- package/schemas/audit-inclusion-proof.schema.json +17 -0
- package/schemas/audit-observation.schema.json +40 -0
- package/schemas/audit-receipt.schema.json +32 -0
- package/schemas/audit-verification-policy.schema.json +71 -0
- package/schemas/audit-verification-report.schema.json +29 -0
- package/schemas/well-known-mcpi.json +17 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { canonicalizeJson } from '../utils/canonical-json.js';
|
|
2
|
+
import { assertAuditCapabilities } from './assurance.js';
|
|
3
|
+
import { AuditProtocolError, AUDIT_ERROR_CODES } from './errors.js';
|
|
4
|
+
import { collectAuditEvidenceRefs, digestAuditEvent } from './integrity.js';
|
|
5
|
+
import { parseAuditProducerEvent } from './schemas.js';
|
|
6
|
+
/** Producer-side service: creates frozen events and applies declared delivery semantics. */
|
|
7
|
+
export class AuditTrailService {
|
|
8
|
+
configuration;
|
|
9
|
+
idCounter = 0n;
|
|
10
|
+
sourceState;
|
|
11
|
+
sourceConstructionTail = Promise.resolve();
|
|
12
|
+
get auditProfile() {
|
|
13
|
+
return this.configuration.capabilities?.profile ?? 'AAP-0';
|
|
14
|
+
}
|
|
15
|
+
get capabilities() {
|
|
16
|
+
return this.configuration.capabilities;
|
|
17
|
+
}
|
|
18
|
+
constructor(configuration) {
|
|
19
|
+
if (configuration.delivery === 'buffered' &&
|
|
20
|
+
configuration.outbox?.capabilities.durability !== 'durable') {
|
|
21
|
+
throw new AuditProtocolError(AUDIT_ERROR_CODES.INVALID_CONFIGURATION, 'Buffered audit delivery requires a durable outbox provider');
|
|
22
|
+
}
|
|
23
|
+
if (configuration.capabilities !== undefined) {
|
|
24
|
+
if (configuration.capabilities.delivery !== configuration.delivery) {
|
|
25
|
+
throw new AuditProtocolError(AUDIT_ERROR_CODES.INVALID_CONFIGURATION, 'Advertised audit delivery does not match the trail delivery mode');
|
|
26
|
+
}
|
|
27
|
+
assertAuditCapabilities(configuration.capabilities);
|
|
28
|
+
if (configuration.capabilities.sourceHighWater &&
|
|
29
|
+
configuration.sourceState.capabilities.durability !== 'durable') {
|
|
30
|
+
throw new AuditProtocolError(AUDIT_ERROR_CODES.INVALID_CONFIGURATION, 'Advertised source high-water support requires durable source state');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
this.configuration = Object.freeze({ ...configuration });
|
|
34
|
+
this.sourceState = configuration.sourceState;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A direct-mode retry is idempotent only when it rebuilds the identical frozen
|
|
38
|
+
* event: callers retrying with a stable `eventId` must also pin `occurredAt`,
|
|
39
|
+
* otherwise the recorder correctly rejects the divergent content as an
|
|
40
|
+
* event-identity conflict. Buffered redelivery is always byte-stable.
|
|
41
|
+
*/
|
|
42
|
+
async record(input, options = {}) {
|
|
43
|
+
const eventId = input.eventId ?? this.nextEventId();
|
|
44
|
+
const encryptedEvidence = options.encryptedEvidence ?? [];
|
|
45
|
+
const buffered = this.configuration.delivery === 'buffered';
|
|
46
|
+
const { event, submission } = await this.withSourceConstruction(async () => {
|
|
47
|
+
const builtEvent = await this.buildAndLinkEvent(input, eventId);
|
|
48
|
+
this.assertEvidenceIsReferenced(builtEvent, encryptedEvidence);
|
|
49
|
+
const frozenSubmission = Object.freeze({
|
|
50
|
+
ledgerId: this.configuration.ledgerId,
|
|
51
|
+
// Buffered submissions are never epoch-pinned: a durable outbox item may
|
|
52
|
+
// be redelivered after an epoch rollover, where logical-ledger
|
|
53
|
+
// idempotency (not epoch pinning) carries the retry guarantee.
|
|
54
|
+
...(buffered || this.configuration.expectedLedgerEpochId === undefined
|
|
55
|
+
? {}
|
|
56
|
+
: { expectedLedgerEpochId: this.configuration.expectedLedgerEpochId }),
|
|
57
|
+
producerEvent: builtEvent,
|
|
58
|
+
encryptedEvidence: Object.freeze([...encryptedEvidence]),
|
|
59
|
+
});
|
|
60
|
+
if (buffered) {
|
|
61
|
+
// Enqueued inside the source-construction lock so items commit to the
|
|
62
|
+
// outbox in claimed source-sequence order for FIFO providers.
|
|
63
|
+
await this.configuration.outbox.enqueue(Object.freeze({
|
|
64
|
+
eventId: builtEvent.eventId,
|
|
65
|
+
submission: frozenSubmission,
|
|
66
|
+
enqueuedAt: this.configuration.clock.now(),
|
|
67
|
+
attempts: 0,
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
return { event: builtEvent, submission: frozenSubmission };
|
|
71
|
+
});
|
|
72
|
+
if (buffered)
|
|
73
|
+
return { status: 'pending', event };
|
|
74
|
+
let entry;
|
|
75
|
+
try {
|
|
76
|
+
entry = await this.submitAndValidate(submission);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.configuration.onDeliveryFailure?.(error, event);
|
|
80
|
+
if (this.configuration.delivery === 'required')
|
|
81
|
+
throw error;
|
|
82
|
+
return { status: 'failed', event, error };
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await this.sourceState.markReceipted(this.configuration.sourceId, event.source.sourceSequence, entry.entryDigest);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
// The recorder commit is authoritative and must not be reported as
|
|
89
|
+
// failed: doing so encourages a caller to emit a new event identity.
|
|
90
|
+
this.configuration.onSourceStateFailure?.(error, event);
|
|
91
|
+
}
|
|
92
|
+
return { status: 'recorded', event, entry };
|
|
93
|
+
}
|
|
94
|
+
async flush(limit) {
|
|
95
|
+
if (this.configuration.delivery !== 'buffered')
|
|
96
|
+
return { delivered: 0, failed: 0 };
|
|
97
|
+
let delivered = 0;
|
|
98
|
+
let failed = 0;
|
|
99
|
+
const blockedSources = new Set();
|
|
100
|
+
for await (const item of this.configuration.outbox.pending(limit)) {
|
|
101
|
+
const sourceId = item.submission.producerEvent.source.sourceId;
|
|
102
|
+
if (blockedSources.has(sourceId))
|
|
103
|
+
continue;
|
|
104
|
+
try {
|
|
105
|
+
const entry = await this.submitAndValidate(item.submission);
|
|
106
|
+
try {
|
|
107
|
+
await this.sourceState.markReceipted(sourceId, item.submission.producerEvent.source.sourceSequence, entry.entryDigest);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
this.configuration.onSourceStateFailure?.(error, item.submission.producerEvent);
|
|
111
|
+
}
|
|
112
|
+
await this.configuration.outbox.markDelivered(item.eventId);
|
|
113
|
+
delivered += 1;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
await this.configuration.outbox.markFailed(item.eventId, error);
|
|
117
|
+
this.configuration.onDeliveryFailure?.(error, item.submission.producerEvent);
|
|
118
|
+
blockedSources.add(sourceId);
|
|
119
|
+
failed += 1;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { delivered, failed };
|
|
123
|
+
}
|
|
124
|
+
async getSourceState() {
|
|
125
|
+
return this.sourceState.getState(this.configuration.sourceId);
|
|
126
|
+
}
|
|
127
|
+
/** Emits the producer's declared high-water mark as an ordinary chained event. */
|
|
128
|
+
async recordSourceHighWater(input = {}) {
|
|
129
|
+
const state = await this.getSourceState();
|
|
130
|
+
return this.record({
|
|
131
|
+
...(input.eventId === undefined ? {} : { eventId: input.eventId }),
|
|
132
|
+
eventType: 'audit.source_high_water',
|
|
133
|
+
action: { category: 'audit.source_high_water' },
|
|
134
|
+
outcome: 'succeeded',
|
|
135
|
+
evidence: [],
|
|
136
|
+
details: {
|
|
137
|
+
family: 'administration',
|
|
138
|
+
phase: 'source_high_water',
|
|
139
|
+
sourceSequence: state.highestEmitted,
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async withSourceConstruction(operation) {
|
|
144
|
+
const previous = this.sourceConstructionTail;
|
|
145
|
+
let release;
|
|
146
|
+
this.sourceConstructionTail = new Promise((resolve) => {
|
|
147
|
+
release = resolve;
|
|
148
|
+
});
|
|
149
|
+
await previous;
|
|
150
|
+
try {
|
|
151
|
+
return await operation();
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
release();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async buildAndLinkEvent(input, eventId) {
|
|
158
|
+
const claim = await this.sourceState.claimEvent(this.configuration.sourceId, eventId);
|
|
159
|
+
const event = this.buildEvent(input, eventId, claim);
|
|
160
|
+
const eventDigest = await digestAuditEvent(this.configuration.hasher, event);
|
|
161
|
+
await this.sourceState.markEmitted(this.configuration.sourceId, eventId, claim.sequence, eventDigest);
|
|
162
|
+
return event;
|
|
163
|
+
}
|
|
164
|
+
buildEvent(input, eventId, sourceClaim) {
|
|
165
|
+
return parseAuditProducerEvent({
|
|
166
|
+
...input,
|
|
167
|
+
schema: 'https://schema.kya-os.org/v1/protocol/audit/event/v1.0.0',
|
|
168
|
+
eventId,
|
|
169
|
+
eventVersion: '1.0.0',
|
|
170
|
+
binding: this.configuration.binding,
|
|
171
|
+
occurredAt: input.occurredAt ?? this.configuration.clock.now(),
|
|
172
|
+
tenantRef: this.configuration.tenantRef,
|
|
173
|
+
source: {
|
|
174
|
+
producer: this.configuration.producer,
|
|
175
|
+
sourceId: this.configuration.sourceId,
|
|
176
|
+
sourceSequence: sourceClaim.sequence,
|
|
177
|
+
...(sourceClaim.previousSourceEventDigest === undefined
|
|
178
|
+
? {}
|
|
179
|
+
: { previousSourceEventDigest: sourceClaim.previousSourceEventDigest }),
|
|
180
|
+
},
|
|
181
|
+
privacy: input.privacy ?? this.configuration.privacy,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
nextEventId() {
|
|
185
|
+
if (this.configuration.eventIdFactory !== undefined) {
|
|
186
|
+
return this.configuration.eventIdFactory();
|
|
187
|
+
}
|
|
188
|
+
this.idCounter += 1n;
|
|
189
|
+
return `audit_${this.configuration.clock.now()}_${this.idCounter}`;
|
|
190
|
+
}
|
|
191
|
+
assertEvidenceIsReferenced(event, encryptedEvidence) {
|
|
192
|
+
const refs = new Map(collectAuditEvidenceRefs(event).map((ref) => [ref.objectId, ref]));
|
|
193
|
+
const submittedIds = new Set();
|
|
194
|
+
for (const item of encryptedEvidence) {
|
|
195
|
+
const referenced = refs.get(item.ref.objectId);
|
|
196
|
+
if (submittedIds.has(item.ref.objectId) || referenced === undefined ||
|
|
197
|
+
canonicalizeJson(referenced) !== canonicalizeJson(item.ref)) {
|
|
198
|
+
throw new AuditProtocolError(AUDIT_ERROR_CODES.EVIDENCE_FAILURE, 'Encrypted evidence must exactly match one unique reference in the frozen event', { objectId: item.ref.objectId });
|
|
199
|
+
}
|
|
200
|
+
submittedIds.add(item.ref.objectId);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async submitAndValidate(submission) {
|
|
204
|
+
const entry = await this.configuration.recorder.submit(submission);
|
|
205
|
+
const eventDigest = await digestAuditEvent(this.configuration.hasher, submission.producerEvent);
|
|
206
|
+
// The binding is content-scoped: an entry from an earlier retained epoch is a
|
|
207
|
+
// legitimate logical-ledger duplicate. Epoch placement of new appends is the
|
|
208
|
+
// recorder's envelope guarantee, and epoch claims are recorder-signed and
|
|
209
|
+
// independently verifiable against checkpoints and mirrors.
|
|
210
|
+
if (entry.core.ledgerId !== submission.ledgerId ||
|
|
211
|
+
entry.eventDigest !== eventDigest ||
|
|
212
|
+
entry.core.eventDigest !== eventDigest ||
|
|
213
|
+
canonicalizeJson(entry.core.event) !== canonicalizeJson(submission.producerEvent)) {
|
|
214
|
+
throw new AuditProtocolError(AUDIT_ERROR_CODES.JOURNAL_FAILURE, 'Recorder response does not bind the submitted frozen producer event');
|
|
215
|
+
}
|
|
216
|
+
return entry;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function createAuditTrail(configuration) {
|
|
220
|
+
return new AuditTrailService(configuration);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/audit/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/audit/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/audit/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AuditHasher } from '../crypto.js';
|
|
2
|
+
import type { AuditAnchorProvider } from '../providers/anchor.js';
|
|
3
|
+
import type { AuditEvidenceProvider } from '../providers/evidence.js';
|
|
4
|
+
import type { AuditJournalProvider } from '../providers/journal.js';
|
|
5
|
+
import type { AuditCheckpointObserverProvider } from '../providers/observer.js';
|
|
6
|
+
import type { AuditOutboxProvider } from '../providers/outbox.js';
|
|
7
|
+
import type { SignedAuditCheckpointV1 } from '../types.js';
|
|
8
|
+
export interface AuditProviderContractCheck {
|
|
9
|
+
name: string;
|
|
10
|
+
passed: boolean;
|
|
11
|
+
error?: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface AuditProviderContractReport {
|
|
14
|
+
providerKind: 'journal' | 'evidence' | 'observer' | 'anchor' | 'outbox';
|
|
15
|
+
passed: boolean;
|
|
16
|
+
checks: AuditProviderContractCheck[];
|
|
17
|
+
}
|
|
18
|
+
export declare function assertAuditProviderContract(value: AuditProviderContractReport): void;
|
|
19
|
+
/** Framework-neutral executable contract for authoritative journal adapters. */
|
|
20
|
+
export declare function evaluateAuditJournalProviderContract(createProvider: () => AuditJournalProvider | Promise<AuditJournalProvider>): Promise<AuditProviderContractReport>;
|
|
21
|
+
/** Executable contract for encrypted evidence/retention adapters. */
|
|
22
|
+
export declare function evaluateAuditEvidenceProviderContract(input: {
|
|
23
|
+
createProvider(): AuditEvidenceProvider | Promise<AuditEvidenceProvider>;
|
|
24
|
+
hasher: AuditHasher;
|
|
25
|
+
}): Promise<AuditProviderContractReport>;
|
|
26
|
+
export interface AuditCheckpointProviderContractFixtures {
|
|
27
|
+
first: SignedAuditCheckpointV1;
|
|
28
|
+
next: SignedAuditCheckpointV1;
|
|
29
|
+
conflict: SignedAuditCheckpointV1;
|
|
30
|
+
rollback: SignedAuditCheckpointV1;
|
|
31
|
+
/**
|
|
32
|
+
* A larger checkpoint that does NOT directly link `first` but consistently
|
|
33
|
+
* extends its tree; when provided, the observer must accept it as catch-up
|
|
34
|
+
* after a missed publication.
|
|
35
|
+
*/
|
|
36
|
+
gapped?: SignedAuditCheckpointV1;
|
|
37
|
+
}
|
|
38
|
+
/** Executable monotonicity/split-view contract for independent observers. */
|
|
39
|
+
export declare function evaluateAuditObserverProviderContract(input: {
|
|
40
|
+
createProvider(): AuditCheckpointObserverProvider | Promise<AuditCheckpointObserverProvider>;
|
|
41
|
+
fixtures: AuditCheckpointProviderContractFixtures;
|
|
42
|
+
}): Promise<AuditProviderContractReport>;
|
|
43
|
+
/** Executable role-separation and binding contract for supporting anchors. */
|
|
44
|
+
export declare function evaluateAuditAnchorProviderContract(input: {
|
|
45
|
+
createProvider(): AuditAnchorProvider | Promise<AuditAnchorProvider>;
|
|
46
|
+
checkpoint: SignedAuditCheckpointV1;
|
|
47
|
+
otherCheckpoint: SignedAuditCheckpointV1;
|
|
48
|
+
}): Promise<AuditProviderContractReport>;
|
|
49
|
+
/** Executable FIFO, retry-accounting, and acknowledgement contract for outboxes. */
|
|
50
|
+
export declare function evaluateAuditOutboxProviderContract(createProvider: () => AuditOutboxProvider | Promise<AuditOutboxProvider>): Promise<AuditProviderContractReport>;
|
|
51
|
+
//# sourceMappingURL=provider-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-contracts.d.ts","sourceRoot":"","sources":["../../../src/audit/testing/provider-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAmB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,KAAK,EAIV,uBAAuB,EAExB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,0BAA0B,EAAE,CAAC;CACtC;AAkCD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAQpF;AAsED,gFAAgF;AAChF,wBAAsB,oCAAoC,CACxD,cAAc,EAAE,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GACzE,OAAO,CAAC,2BAA2B,CAAC,CA6HtC;AAmBD,qEAAqE;AACrE,wBAAsB,qCAAqC,CAAC,KAAK,EAAE;IACjE,cAAc,IAAI,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzE,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAmEvC;AAED,MAAM,WAAW,uCAAuC;IACtD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,QAAQ,EAAE,uBAAuB,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,6EAA6E;AAC7E,wBAAsB,qCAAqC,CAAC,KAAK,EAAE;IACjE,cAAc,IAAI,+BAA+B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7F,QAAQ,EAAE,uCAAuC,CAAC;CACnD,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAkDvC;AAED,8EAA8E;AAC9E,wBAAsB,mCAAmC,CAAC,KAAK,EAAE;IAC/D,cAAc,IAAI,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrE,UAAU,EAAE,uBAAuB,CAAC;IACpC,eAAe,EAAE,uBAAuB,CAAC;CAC1C,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAevC;AAED,oFAAoF;AACpF,wBAAsB,mCAAmC,CACvD,cAAc,EAAE,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,GACvE,OAAO,CAAC,2BAA2B,CAAC,CA0EtC"}
|