@onchaindiligence/agent-evidence 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.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/conformance/README.md +31 -0
- package/conformance/duplicate-outer-key.json +1 -0
- package/conformance/manifest.json +74 -0
- package/conformance/missing-parent.json +31 -0
- package/conformance/noncanonical-payload.json +31 -0
- package/conformance/rfc8785-vectors.json +31 -0
- package/conformance/valid-full-graph.json +31 -0
- package/dist/canonical.d.ts +14 -0
- package/dist/canonical.d.ts.map +1 -0
- package/dist/canonical.js +249 -0
- package/dist/canonical.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +9 -0
- package/dist/constants.js.map +1 -0
- package/dist/dsse.d.ts +10 -0
- package/dist/dsse.d.ts.map +1 -0
- package/dist/dsse.js +85 -0
- package/dist/dsse.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +19 -0
- package/dist/errors.js.map +1 -0
- package/dist/graph.d.ts +3 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +227 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/records.d.ts +14 -0
- package/dist/records.d.ts.map +1 -0
- package/dist/records.js +55 -0
- package/dist/records.js.map +1 -0
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +45 -0
- package/dist/schema.js.map +1 -0
- package/dist/trust.d.ts +64 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +254 -0
- package/dist/trust.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/verifier.d.ts +5 -0
- package/dist/verifier.d.ts.map +1 -0
- package/dist/verifier.js +489 -0
- package/dist/verifier.js.map +1 -0
- package/examples/withheld-payment.mjs +67 -0
- package/package.json +65 -0
- package/schemas/attestation-key.schema.json +88 -0
- package/schemas/bundle-payload.schema.json +32 -0
- package/schemas/catalog.json +20 -0
- package/schemas/common.schema.json +35 -0
- package/schemas/dsse-envelope.schema.json +34 -0
- package/schemas/portable-file.schema.json +62 -0
- package/schemas/proof.schema.json +98 -0
- package/schemas/record.schema.json +286 -0
package/dist/graph.js
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { contentId, parseTimestamp } from './canonical.js';
|
|
2
|
+
import { EvidenceValidationError, ParseError, SchemaValidationError } from './errors.js';
|
|
3
|
+
import { validateDocument } from './schema.js';
|
|
4
|
+
function fail(message) {
|
|
5
|
+
throw new EvidenceValidationError(message);
|
|
6
|
+
}
|
|
7
|
+
function requireRecord(byId, recordId, kind, field) {
|
|
8
|
+
if (typeof recordId !== 'string' || !byId.has(recordId))
|
|
9
|
+
fail(`${field} does not resolve in this bundle`);
|
|
10
|
+
const record = byId.get(recordId);
|
|
11
|
+
if (!record || record.kind !== kind)
|
|
12
|
+
fail(`${field} must resolve to a ${kind} record`);
|
|
13
|
+
return record;
|
|
14
|
+
}
|
|
15
|
+
function assertInterval(start, end, label) {
|
|
16
|
+
if (typeof start !== 'string' || typeof end !== 'string')
|
|
17
|
+
return;
|
|
18
|
+
try {
|
|
19
|
+
if (parseTimestamp(end).getTime() < parseTimestamp(start).getTime())
|
|
20
|
+
fail(`${label} end precedes start`);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error instanceof EvidenceValidationError)
|
|
24
|
+
throw error;
|
|
25
|
+
if (error instanceof ParseError)
|
|
26
|
+
fail(`${label} contains an invalid timestamp: ${error.message}`);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function digestValue(value) {
|
|
31
|
+
return contentId(value).slice('sha256:'.length);
|
|
32
|
+
}
|
|
33
|
+
function validateEmbeddedDigests(record) {
|
|
34
|
+
const statement = record.statement;
|
|
35
|
+
if (record.kind === 'evidence') {
|
|
36
|
+
const response = statement.response;
|
|
37
|
+
if (response.mode === 'embedded') {
|
|
38
|
+
const digest = response.digest;
|
|
39
|
+
if (digest.sha256 !== digestValue(response.value))
|
|
40
|
+
fail('embedded evidence response digest does not match value');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (record.kind === 'policy' && Object.hasOwn(statement, 'policy')) {
|
|
44
|
+
const digest = statement.digest;
|
|
45
|
+
if (digest.sha256 !== digestValue(statement.policy))
|
|
46
|
+
fail('embedded policy digest does not match policy value');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function values(record, field) {
|
|
50
|
+
const value = record.statement[field];
|
|
51
|
+
return Array.isArray(value) ? value : [];
|
|
52
|
+
}
|
|
53
|
+
export function validateBundlePayload(input) {
|
|
54
|
+
const payload = input;
|
|
55
|
+
try {
|
|
56
|
+
validateDocument('bundle-payload.schema.json', payload);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof SchemaValidationError)
|
|
60
|
+
throw new EvidenceValidationError(error.message, { cause: error });
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
const records = payload.records;
|
|
64
|
+
const ids = records.map((record) => record.id);
|
|
65
|
+
if (ids.join('\u0000') !== [...ids].sort().join('\u0000'))
|
|
66
|
+
fail('records must be sorted lexicographically by id');
|
|
67
|
+
if (new Set(ids).size !== ids.length)
|
|
68
|
+
fail('record ids must be unique');
|
|
69
|
+
const byId = new Map(records.map((record) => [record.id, record]));
|
|
70
|
+
for (const record of records) {
|
|
71
|
+
const { id, ...body } = record;
|
|
72
|
+
if (contentId(body) !== id)
|
|
73
|
+
fail(`record id mismatch: ${id}`);
|
|
74
|
+
const sortedParents = [...new Set(record.parents)].sort();
|
|
75
|
+
if (record.parents.join('\u0000') !== sortedParents.join('\u0000')) {
|
|
76
|
+
fail(`parents must be sorted and unique: ${id}`);
|
|
77
|
+
}
|
|
78
|
+
for (const parent of record.parents) {
|
|
79
|
+
if (parent === id)
|
|
80
|
+
fail(`record cannot parent itself: ${id}`);
|
|
81
|
+
if (!byId.has(parent))
|
|
82
|
+
fail(`missing parent ${parent} referenced by ${id}`);
|
|
83
|
+
}
|
|
84
|
+
validateEmbeddedDigests(record);
|
|
85
|
+
}
|
|
86
|
+
const runs = records.filter((record) => record.kind === 'run');
|
|
87
|
+
if (runs.length !== 1)
|
|
88
|
+
fail('a v0 bundle must contain exactly one run record');
|
|
89
|
+
if (payload.run_id !== runs[0]?.id)
|
|
90
|
+
fail("run_id must resolve to the bundle's single run record");
|
|
91
|
+
const parentIds = new Set(records.flatMap((record) => record.parents));
|
|
92
|
+
const expectedRoots = ids.filter((id) => !parentIds.has(id)).sort();
|
|
93
|
+
if (payload.root_ids.join('\u0000') !== expectedRoots.join('\u0000')) {
|
|
94
|
+
fail('root_ids must equal the complete sorted set of records with no children');
|
|
95
|
+
}
|
|
96
|
+
const visiting = new Set();
|
|
97
|
+
const visited = new Set();
|
|
98
|
+
const visit = (recordId) => {
|
|
99
|
+
if (visiting.has(recordId))
|
|
100
|
+
fail(`cycle detected at ${recordId}`);
|
|
101
|
+
if (visited.has(recordId))
|
|
102
|
+
return;
|
|
103
|
+
visiting.add(recordId);
|
|
104
|
+
for (const parent of byId.get(recordId)?.parents ?? [])
|
|
105
|
+
visit(parent);
|
|
106
|
+
visiting.delete(recordId);
|
|
107
|
+
visited.add(recordId);
|
|
108
|
+
};
|
|
109
|
+
for (const root of expectedRoots)
|
|
110
|
+
visit(root);
|
|
111
|
+
if (visited.size !== ids.length)
|
|
112
|
+
fail('every record must be reachable from the complete root set');
|
|
113
|
+
for (const record of records) {
|
|
114
|
+
const statement = record.statement;
|
|
115
|
+
const parents = record.parents;
|
|
116
|
+
if (record.kind === 'principal') {
|
|
117
|
+
if (parents.length)
|
|
118
|
+
fail('principal records cannot have parents');
|
|
119
|
+
}
|
|
120
|
+
else if (record.kind === 'agent') {
|
|
121
|
+
const operator = statement.operator_ref;
|
|
122
|
+
if (operator !== undefined) {
|
|
123
|
+
requireRecord(byId, operator, 'principal', 'agent.operator_ref');
|
|
124
|
+
if (!parents.includes(String(operator)))
|
|
125
|
+
fail('agent parents must include operator_ref');
|
|
126
|
+
}
|
|
127
|
+
if (parents.some((parent) => byId.get(parent)?.kind !== 'principal')) {
|
|
128
|
+
fail('agent parents may only be principal records');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (record.kind === 'mandate') {
|
|
132
|
+
const principal = String(statement.principal_ref);
|
|
133
|
+
requireRecord(byId, principal, 'principal', 'mandate.principal_ref');
|
|
134
|
+
if (!parents.includes(principal))
|
|
135
|
+
fail('mandate parents must include principal_ref');
|
|
136
|
+
if (parents.some((parent) => byId.get(parent)?.kind !== 'principal')) {
|
|
137
|
+
fail('mandate parents may only be principal records');
|
|
138
|
+
}
|
|
139
|
+
assertInterval(statement.valid_from, statement.valid_until, 'mandate');
|
|
140
|
+
}
|
|
141
|
+
else if (record.kind === 'run') {
|
|
142
|
+
const agent = String(statement.agent_ref);
|
|
143
|
+
const mandate = String(statement.mandate_ref);
|
|
144
|
+
requireRecord(byId, agent, 'agent', 'run.agent_ref');
|
|
145
|
+
const mandateRecord = requireRecord(byId, mandate, 'mandate', 'run.mandate_ref');
|
|
146
|
+
if (parents.join('\u0000') !== [agent, mandate].sort().join('\u0000')) {
|
|
147
|
+
fail('run parents must be exactly agent_ref and mandate_ref');
|
|
148
|
+
}
|
|
149
|
+
if (statement.ended_at !== undefined)
|
|
150
|
+
assertInterval(statement.started_at, statement.ended_at, 'run');
|
|
151
|
+
const started = parseTimestamp(String(statement.started_at)).getTime();
|
|
152
|
+
const mandateStatement = mandateRecord.statement;
|
|
153
|
+
if (started < parseTimestamp(String(mandateStatement.valid_from)).getTime()
|
|
154
|
+
|| started > parseTimestamp(String(mandateStatement.valid_until)).getTime())
|
|
155
|
+
fail('run.started_at is outside the presented mandate interval');
|
|
156
|
+
}
|
|
157
|
+
else if (record.kind === 'evidence') {
|
|
158
|
+
const runRef = String(statement.run_ref);
|
|
159
|
+
requireRecord(byId, runRef, 'run', 'evidence.run_ref');
|
|
160
|
+
if (!parents.includes(runRef))
|
|
161
|
+
fail('evidence parents must include run_ref');
|
|
162
|
+
if (parents.some((parent) => !['run', 'evidence'].includes(byId.get(parent)?.kind ?? ''))) {
|
|
163
|
+
fail('evidence parents may only be run or evidence records');
|
|
164
|
+
}
|
|
165
|
+
if (statement.expires_at !== null)
|
|
166
|
+
assertInterval(statement.observed_at, statement.expires_at, 'evidence');
|
|
167
|
+
}
|
|
168
|
+
else if (record.kind === 'policy') {
|
|
169
|
+
if (!parents.some((parent) => ['run', 'mandate'].includes(byId.get(parent)?.kind ?? ''))) {
|
|
170
|
+
fail('policy parents must include a run or mandate');
|
|
171
|
+
}
|
|
172
|
+
if (parents.some((parent) => !['run', 'mandate'].includes(byId.get(parent)?.kind ?? ''))) {
|
|
173
|
+
fail('policy parents may only be run or mandate records');
|
|
174
|
+
}
|
|
175
|
+
if (statement.effective_until !== undefined) {
|
|
176
|
+
assertInterval(statement.effective_from, statement.effective_until, 'policy');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else if (record.kind === 'decision') {
|
|
180
|
+
const runRef = String(statement.run_ref);
|
|
181
|
+
const policyRef = String(statement.policy_ref);
|
|
182
|
+
const agentRef = String(statement.agent_ref);
|
|
183
|
+
requireRecord(byId, runRef, 'run', 'decision.run_ref');
|
|
184
|
+
requireRecord(byId, agentRef, 'agent', 'decision.agent_ref');
|
|
185
|
+
const policyRecord = requireRecord(byId, policyRef, 'policy', 'decision.policy_ref');
|
|
186
|
+
for (const evidenceRef of values(record, 'evidence_refs')) {
|
|
187
|
+
requireRecord(byId, evidenceRef, 'evidence', 'decision.evidence_refs');
|
|
188
|
+
}
|
|
189
|
+
const expected = [...new Set([runRef, policyRef, ...values(record, 'evidence_refs')])].sort();
|
|
190
|
+
if (parents.join('\u0000') !== expected.join('\u0000')) {
|
|
191
|
+
fail('decision parents must exactly equal run, policy, and evidence references');
|
|
192
|
+
}
|
|
193
|
+
if (JSON.stringify(statement.policy_digest) !== JSON.stringify(policyRecord.statement.digest)) {
|
|
194
|
+
fail('decision.policy_digest does not match the referenced policy');
|
|
195
|
+
}
|
|
196
|
+
const decidedAt = parseTimestamp(String(statement.decided_at)).getTime();
|
|
197
|
+
const policyStatement = policyRecord.statement;
|
|
198
|
+
if (decidedAt < parseTimestamp(String(policyStatement.effective_from)).getTime()) {
|
|
199
|
+
fail("decision predates the referenced policy's effective interval");
|
|
200
|
+
}
|
|
201
|
+
if (policyStatement.effective_until !== undefined
|
|
202
|
+
&& decidedAt > parseTimestamp(String(policyStatement.effective_until)).getTime())
|
|
203
|
+
fail("decision follows the referenced policy's effective interval");
|
|
204
|
+
}
|
|
205
|
+
else if (record.kind === 'execution') {
|
|
206
|
+
const decisionRef = String(statement.decision_ref);
|
|
207
|
+
requireRecord(byId, decisionRef, 'decision', 'execution.decision_ref');
|
|
208
|
+
if (parents.length !== 1 || parents[0] !== decisionRef) {
|
|
209
|
+
fail('v0 execution parents must contain exactly decision_ref');
|
|
210
|
+
}
|
|
211
|
+
if (String(statement.execution_type).startsWith('onchain')) {
|
|
212
|
+
const missing = ['network', 'transaction_hash', 'transaction_digest']
|
|
213
|
+
.filter((name) => !Object.hasOwn(statement, name));
|
|
214
|
+
if (missing.length)
|
|
215
|
+
fail(`onchain execution is missing: ${missing.join(', ')}`);
|
|
216
|
+
}
|
|
217
|
+
if (statement.confirmed_at !== undefined) {
|
|
218
|
+
assertInterval(statement.submitted_at, statement.confirmed_at, 'execution');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const { bundle_id: _bundleId, ...withoutId } = payload;
|
|
223
|
+
if (payload.bundle_id !== contentId(withoutId)) {
|
|
224
|
+
fail('bundle_id does not match the canonical payload without bundle_id');
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,SAAS,IAAI,CAAC,OAAe;IAC3B,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,aAAa,CACpB,IAAsC,EACtC,QAAiB,EACjB,IAAiC,EACjC,KAAa;IAEb,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAA;IACzG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI;QAAE,IAAI,CAAC,GAAG,KAAK,sBAAsB,IAAI,SAAS,CAAC,CAAA;IACtF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,GAAY,EAAE,KAAa;IACjE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAM;IAChE,IAAI,CAAC;QACH,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE;YAAE,IAAI,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAA;IAC1G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB;YAAE,MAAM,KAAK,CAAA;QACzD,IAAI,KAAK,YAAY,UAAU;YAAE,IAAI,CAAC,GAAG,KAAK,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACjG,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA2B;IAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;IAClC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAsB,CAAA;QACjD,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAoB,CAAA;YAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,wDAAwD,CAAC,CAAA;QACnH,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAoB,CAAA;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,oDAAoD,CAAC,CAAA;IACjH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAA2B,EAAE,KAAa;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAiB,CAAC,CAAC,CAAC,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAA8C;IAClF,MAAM,OAAO,GAAG,KAAsB,CAAA;IACtC,IAAI,CAAC;QACH,gBAAgB,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAA;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,qBAAqB;YAAE,MAAM,IAAI,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9G,MAAM,KAAK,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC9C,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,IAAI,CAAC,gDAAgD,CAAC,CAAA;IACjH,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAElE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAA;QAC9B,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAA;QAC7D,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACzD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAA;QAClD,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,MAAM,KAAK,EAAE;gBAAE,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAA;YAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,kBAAkB,MAAM,kBAAkB,EAAE,EAAE,CAAC,CAAA;QAC7E,CAAC;QACD,uBAAuB,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;IAC9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC9E,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QAAE,IAAI,CAAC,uDAAuD,CAAC,CAAA;IAEjG,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACtE,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,yEAAyE,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAQ,EAAE;QACvC,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAA;QACjE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAM;QACjC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACtB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,EAAE;YAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACrE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvB,CAAC,CAAA;IACD,KAAK,MAAM,IAAI,IAAI,aAAa;QAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM;QAAE,IAAI,CAAC,2DAA2D,CAAC,CAAA;IAElG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM;gBAAE,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACnE,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAA;YACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAA;gBAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAAE,IAAI,CAAC,yCAAyC,CAAC,CAAA;YAC1F,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,6CAA6C,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;YACjD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAA;YACpE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,4CAA4C,CAAC,CAAA;YACpF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,+CAA+C,CAAC,CAAA;YACvD,CAAC;YACD,cAAc,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;QACxE,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YACzC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC7C,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC,CAAA;YACpD,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;YAChF,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,IAAI,CAAC,uDAAuD,CAAC,CAAA;YAC/D,CAAC;YACD,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS;gBAAE,cAAc,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YACrG,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACtE,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAA;YAChD,IACE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE;mBACpE,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE;gBAC3E,IAAI,CAAC,0DAA0D,CAAC,CAAA;QACpE,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACxC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAA;YACtD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,uCAAuC,CAAC,CAAA;YAC5E,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC1F,IAAI,CAAC,sDAAsD,CAAC,CAAA;YAC9D,CAAC;YACD,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI;gBAAE,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAC5G,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,8CAA8C,CAAC,CAAA;YACtD,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,mDAAmD,CAAC,CAAA;YAC3D,CAAC;YACD,IAAI,SAAS,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAC5C,cAAc,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;YAC/E,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;YACxC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YAC5C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAA;YACtD,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAA;YAC5D,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAA;YACpF,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;gBAC1D,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAA;YACxE,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAC7F,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,0EAA0E,CAAC,CAAA;YAClF,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9F,IAAI,CAAC,6DAA6D,CAAC,CAAA;YACrE,CAAC;YACD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;YACxE,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAA;YAC9C,IAAI,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjF,IAAI,CAAC,8DAA8D,CAAC,CAAA;YACtE,CAAC;YACD,IACE,eAAe,CAAC,eAAe,KAAK,SAAS;mBAC1C,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE;gBAChF,IAAI,CAAC,6DAA6D,CAAC,CAAA;QACvE,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YAClD,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,CAAC,CAAA;YACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE,CAAC;gBACvD,IAAI,CAAC,wDAAwD,CAAC,CAAA;YAChE,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3D,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,kBAAkB,EAAE,oBAAoB,CAAC;qBAClE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;gBACpD,IAAI,OAAO,CAAC,MAAM;oBAAE,IAAI,CAAC,iCAAiC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACjF,CAAC;YACD,IAAI,SAAS,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBACzC,cAAc,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,GAAG,OAAO,CAAA;IACtD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,kEAAkE,CAAC,CAAA;IAC1E,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { ATTESTATION_ISSUER, ATTESTATION_PURPOSE, ATTESTATION_V2, BUNDLE_PAYLOAD_TYPE, BUNDLE_VERSION, MEDIA_TYPE, RECORD_VERSION, SPECIFICATION_ID, } from './constants.js';
|
|
2
|
+
export { canonicalize, canonicalizeText, contentId, enforceLimits, formatTimestamp, parseJson, parseTimestamp, } from './canonical.js';
|
|
3
|
+
export { createEd25519Signer, dssePae, sealBundle } from './dsse.js';
|
|
4
|
+
export type { SealBundleOptions } from './dsse.js';
|
|
5
|
+
export { AgentEvidenceError, CanonicalizationError, EvidenceValidationError, ParseError, SchemaValidationError, SigningError, TrustPolicyError, } from './errors.js';
|
|
6
|
+
export { validateBundlePayload } from './graph.js';
|
|
7
|
+
export { createBundlePayload, createRecord } from './records.js';
|
|
8
|
+
export type { CreateBundlePayloadOptions, CreateRecordOptions } from './records.js';
|
|
9
|
+
export { validateDocument } from './schema.js';
|
|
10
|
+
export { AttestationKey, createKeyRecord, deriveKeyId, evaluateKeyLifecycle, loadPublicKey, TrustPolicy, } from './trust.js';
|
|
11
|
+
export type { CreateKeyRecordOptions, TrustPolicyOptions } from './trust.js';
|
|
12
|
+
export { overallState, verifyBundle } from './verifier.js';
|
|
13
|
+
export type { AgentEvidenceRecord, AttestationKeyRecord, BundlePayload, ComponentResult, DsseEnvelope, DsseSignature, Ed25519Signer, JsonObject, JsonPrimitive, JsonValue, KeyInput, PortableBundle, RecordKind, VerificationMaterial, VerificationReport, VerificationState, } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChE,YAAY,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC1D,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,EACR,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { ATTESTATION_ISSUER, ATTESTATION_PURPOSE, ATTESTATION_V2, BUNDLE_PAYLOAD_TYPE, BUNDLE_VERSION, MEDIA_TYPE, RECORD_VERSION, SPECIFICATION_ID, } from './constants.js';
|
|
2
|
+
export { canonicalize, canonicalizeText, contentId, enforceLimits, formatTimestamp, parseJson, parseTimestamp, } from './canonical.js';
|
|
3
|
+
export { createEd25519Signer, dssePae, sealBundle } from './dsse.js';
|
|
4
|
+
export { AgentEvidenceError, CanonicalizationError, EvidenceValidationError, ParseError, SchemaValidationError, SigningError, TrustPolicyError, } from './errors.js';
|
|
5
|
+
export { validateBundlePayload } from './graph.js';
|
|
6
|
+
export { createBundlePayload, createRecord } from './records.js';
|
|
7
|
+
export { validateDocument } from './schema.js';
|
|
8
|
+
export { AttestationKey, createKeyRecord, deriveKeyId, evaluateKeyLifecycle, loadPublicKey, TrustPolicy, } from './trust.js';
|
|
9
|
+
export { overallState, verifyBundle } from './verifier.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,UAAU,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAc,GACf,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAEpE,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EACL,cAAc,EACd,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentEvidenceRecord, BundlePayload, JsonObject, RecordKind } from './types.js';
|
|
2
|
+
export interface CreateRecordOptions {
|
|
3
|
+
parents?: readonly string[];
|
|
4
|
+
proofs?: readonly JsonObject[];
|
|
5
|
+
}
|
|
6
|
+
export declare function createRecord(kind: RecordKind, statement: JsonObject, options?: CreateRecordOptions): AgentEvidenceRecord;
|
|
7
|
+
export interface CreateBundlePayloadOptions {
|
|
8
|
+
createdAt: string | Date;
|
|
9
|
+
runId?: string;
|
|
10
|
+
rootIds?: readonly string[];
|
|
11
|
+
extensions?: JsonObject;
|
|
12
|
+
}
|
|
13
|
+
export declare function createBundlePayload(inputRecords: Iterable<AgentEvidenceRecord>, options: CreateBundlePayloadOptions): BundlePayload;
|
|
14
|
+
//# sourceMappingURL=records.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAa,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvG,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;CAC/B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,EACrB,OAAO,GAAE,mBAAwB,GAChC,mBAAmB,CAgBrB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAC3C,OAAO,EAAE,0BAA0B,GAClC,aAAa,CA4Bf"}
|
package/dist/records.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BUNDLE_VERSION, RECORD_VERSION } from './constants.js';
|
|
2
|
+
import { cloneJson, contentId, formatTimestamp } from './canonical.js';
|
|
3
|
+
import { EvidenceValidationError, SchemaValidationError } from './errors.js';
|
|
4
|
+
import { validateBundlePayload } from './graph.js';
|
|
5
|
+
import { validateDocument } from './schema.js';
|
|
6
|
+
export function createRecord(kind, statement, options = {}) {
|
|
7
|
+
const body = {
|
|
8
|
+
record_version: RECORD_VERSION,
|
|
9
|
+
kind,
|
|
10
|
+
parents: [...new Set(options.parents ?? [])].sort(),
|
|
11
|
+
statement: cloneJson(statement),
|
|
12
|
+
proofs: cloneJson([...(options.proofs ?? [])]),
|
|
13
|
+
};
|
|
14
|
+
const record = { id: contentId(body), ...body };
|
|
15
|
+
try {
|
|
16
|
+
validateDocument('record.schema.json', record);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (error instanceof SchemaValidationError)
|
|
20
|
+
throw new EvidenceValidationError(error.message, { cause: error });
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
return record;
|
|
24
|
+
}
|
|
25
|
+
export function createBundlePayload(inputRecords, options) {
|
|
26
|
+
const records = [...inputRecords].map((record) => cloneJson(record));
|
|
27
|
+
records.sort((left, right) => left.id < right.id ? -1 : left.id > right.id ? 1 : 0);
|
|
28
|
+
const runs = records.filter((record) => record.kind === 'run');
|
|
29
|
+
const runId = options.runId ?? (runs.length === 1 ? runs[0]?.id : undefined);
|
|
30
|
+
if (!runId)
|
|
31
|
+
throw new EvidenceValidationError('run_id can only be inferred when exactly one run exists');
|
|
32
|
+
const parentIds = new Set(records.flatMap((record) => record.parents));
|
|
33
|
+
const computedRoots = records.map((record) => record.id).filter((id) => !parentIds.has(id)).sort();
|
|
34
|
+
const createdAt = options.createdAt instanceof Date ? formatTimestamp(options.createdAt) : options.createdAt;
|
|
35
|
+
const withoutId = {
|
|
36
|
+
bundle_version: BUNDLE_VERSION,
|
|
37
|
+
created_at: createdAt,
|
|
38
|
+
run_id: runId,
|
|
39
|
+
root_ids: [...(options.rootIds ?? computedRoots)],
|
|
40
|
+
records,
|
|
41
|
+
extensions: cloneJson((options.extensions ?? {})),
|
|
42
|
+
};
|
|
43
|
+
const payload = {
|
|
44
|
+
bundle_version: BUNDLE_VERSION,
|
|
45
|
+
bundle_id: contentId(withoutId),
|
|
46
|
+
created_at: createdAt,
|
|
47
|
+
run_id: runId,
|
|
48
|
+
root_ids: withoutId.root_ids,
|
|
49
|
+
records,
|
|
50
|
+
extensions: withoutId.extensions,
|
|
51
|
+
};
|
|
52
|
+
validateBundlePayload(payload);
|
|
53
|
+
return payload;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"records.js","sourceRoot":"","sources":["../src/records.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const SCHEMA_BASE = "https://onchaindiligence.com/schemas/agent-evidence/v0/";
|
|
2
|
+
export declare const SCHEMA_NAMES: readonly ["common.schema.json", "attestation-key.schema.json", "dsse-envelope.schema.json", "proof.schema.json", "record.schema.json", "bundle-payload.schema.json", "portable-file.schema.json"];
|
|
3
|
+
export declare function validateDocument(name: string, value: unknown): void;
|
|
4
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,4DAA4D,CAAA;AACpF,eAAO,MAAM,YAAY,mMAQf,CAAA;AA6BV,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAOnE"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import Ajv2020Import, {} from 'ajv/dist/2020.js';
|
|
3
|
+
import addFormatsImport from 'ajv-formats';
|
|
4
|
+
import { SchemaValidationError } from './errors.js';
|
|
5
|
+
export const SCHEMA_BASE = 'https://onchaindiligence.com/schemas/agent-evidence/v0/';
|
|
6
|
+
export const SCHEMA_NAMES = [
|
|
7
|
+
'common.schema.json',
|
|
8
|
+
'attestation-key.schema.json',
|
|
9
|
+
'dsse-envelope.schema.json',
|
|
10
|
+
'proof.schema.json',
|
|
11
|
+
'record.schema.json',
|
|
12
|
+
'bundle-payload.schema.json',
|
|
13
|
+
'portable-file.schema.json',
|
|
14
|
+
];
|
|
15
|
+
const Ajv2020 = Ajv2020Import;
|
|
16
|
+
const addFormats = addFormatsImport;
|
|
17
|
+
const ajv = new Ajv2020({ allErrors: true, strict: true });
|
|
18
|
+
addFormats(ajv);
|
|
19
|
+
for (const name of SCHEMA_NAMES) {
|
|
20
|
+
const bytes = readFileSync(new URL(`../schemas/${name}`, import.meta.url), 'utf8');
|
|
21
|
+
ajv.addSchema(JSON.parse(bytes));
|
|
22
|
+
}
|
|
23
|
+
function validator(name) {
|
|
24
|
+
if (!SCHEMA_NAMES.includes(name)) {
|
|
25
|
+
throw new RangeError(`unknown Agent Evidence schema: ${name}`);
|
|
26
|
+
}
|
|
27
|
+
const validate = ajv.getSchema(`${SCHEMA_BASE}${name}`);
|
|
28
|
+
if (!validate)
|
|
29
|
+
throw new Error(`packaged Agent Evidence schema did not compile: ${name}`);
|
|
30
|
+
return validate;
|
|
31
|
+
}
|
|
32
|
+
function errorSortKey(error) {
|
|
33
|
+
return `${error.instancePath}\u0000${error.schemaPath}\u0000${error.keyword}`;
|
|
34
|
+
}
|
|
35
|
+
export function validateDocument(name, value) {
|
|
36
|
+
const validate = validator(name);
|
|
37
|
+
if (validate(value))
|
|
38
|
+
return;
|
|
39
|
+
const errors = [...(validate.errors ?? [])].sort((left, right) => errorSortKey(left).localeCompare(errorSortKey(right)));
|
|
40
|
+
const error = errors[0];
|
|
41
|
+
if (!error)
|
|
42
|
+
throw new SchemaValidationError(`${name}/: schema validation failed`);
|
|
43
|
+
throw new SchemaValidationError(`${name}${error.instancePath || '/'}: ${error.message ?? error.keyword}`);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,aAAa,EAAE,EAA2C,MAAM,kBAAkB,CAAA;AACzF,OAAO,gBAAgB,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD,MAAM,CAAC,MAAM,WAAW,GAAG,yDAAyD,CAAA;AACpF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,oBAAoB;IACpB,6BAA6B;IAC7B,2BAA2B;IAC3B,mBAAmB;IACnB,oBAAoB;IACpB,4BAA4B;IAC5B,2BAA2B;CACnB,CAAA;AAOV,MAAM,OAAO,GAAG,aAAgF,CAAA;AAChG,MAAM,UAAU,GAAG,gBAA6D,CAAA;AAChF,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1D,UAAU,CAAC,GAAG,CAAC,CAAA;AACf,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,cAAc,IAAI,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IAClF,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAE,YAAkC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,UAAU,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,WAAW,GAAG,IAAI,EAAE,CAAC,CAAA;IACvD,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,IAAI,EAAE,CAAC,CAAA;IACzF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,YAAY,CAAC,KAAkB;IACtC,OAAO,GAAG,KAAK,CAAC,YAAY,SAAS,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,OAAO,EAAE,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IAC3D,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAM;IAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACxH,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IACvB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAA;IACjF,MAAM,IAAI,qBAAqB,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;AAC3G,CAAC"}
|
package/dist/trust.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { KeyObject } from 'node:crypto';
|
|
2
|
+
import type { AttestationKeyRecord, KeyInput, VerificationState } from './types.js';
|
|
3
|
+
export declare function loadPublicKey(value: KeyInput): KeyObject;
|
|
4
|
+
export declare function deriveKeyId(publicKey: KeyInput): string;
|
|
5
|
+
export declare class AttestationKey {
|
|
6
|
+
#private;
|
|
7
|
+
readonly keyId: string;
|
|
8
|
+
readonly publicKey: KeyObject;
|
|
9
|
+
readonly publicKeyPem: string;
|
|
10
|
+
readonly status: AttestationKeyRecord['status'];
|
|
11
|
+
readonly replacementKeyId: string | null;
|
|
12
|
+
readonly statusReason?: string;
|
|
13
|
+
private constructor();
|
|
14
|
+
get validFrom(): Date | null;
|
|
15
|
+
get validUntil(): Date | null;
|
|
16
|
+
get statusChangedAt(): Date | null;
|
|
17
|
+
get compromisedAt(): Date | null;
|
|
18
|
+
static fromRecord(input: AttestationKeyRecord | Record<string, unknown>): AttestationKey;
|
|
19
|
+
toRecord(): AttestationKeyRecord;
|
|
20
|
+
}
|
|
21
|
+
export interface CreateKeyRecordOptions {
|
|
22
|
+
validFrom: string | Date | null;
|
|
23
|
+
status?: AttestationKeyRecord['status'];
|
|
24
|
+
validUntil?: string | Date | null;
|
|
25
|
+
statusChangedAt?: string | Date | null;
|
|
26
|
+
replacementKeyId?: string | null;
|
|
27
|
+
compromisedAt?: string | Date | null;
|
|
28
|
+
statusReason?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function createKeyRecord(publicKeyInput: KeyInput, options: CreateKeyRecordOptions): AttestationKeyRecord;
|
|
31
|
+
export interface TrustPolicyOptions {
|
|
32
|
+
now?: Date;
|
|
33
|
+
requiredSignatureKeyIds?: Iterable<string>;
|
|
34
|
+
minimumValidSignatures?: number;
|
|
35
|
+
maxFutureSkewMs?: number;
|
|
36
|
+
maxBundleAgeMs?: number | null;
|
|
37
|
+
enforceEvidenceExpiration?: boolean;
|
|
38
|
+
allowDigestOnlyEvidence?: boolean;
|
|
39
|
+
requireVerifiedAnchor?: boolean;
|
|
40
|
+
maxFileSize?: number;
|
|
41
|
+
maxDepth?: number;
|
|
42
|
+
maxStringLength?: number;
|
|
43
|
+
maxArrayLength?: number;
|
|
44
|
+
}
|
|
45
|
+
export declare class TrustPolicy {
|
|
46
|
+
#private;
|
|
47
|
+
readonly minimumValidSignatures: number;
|
|
48
|
+
readonly maxFutureSkewMs: number;
|
|
49
|
+
readonly maxBundleAgeMs: number | null;
|
|
50
|
+
readonly enforceEvidenceExpiration: boolean;
|
|
51
|
+
readonly allowDigestOnlyEvidence: boolean;
|
|
52
|
+
readonly requireVerifiedAnchor: boolean;
|
|
53
|
+
readonly maxFileSize: number;
|
|
54
|
+
readonly maxDepth: number;
|
|
55
|
+
readonly maxStringLength: number;
|
|
56
|
+
readonly maxArrayLength: number;
|
|
57
|
+
private constructor();
|
|
58
|
+
static fromKeyRecords(records: Iterable<AttestationKeyRecord | Record<string, unknown>>, options?: TrustPolicyOptions): TrustPolicy;
|
|
59
|
+
key(keyId: string): AttestationKey | undefined;
|
|
60
|
+
get now(): Date;
|
|
61
|
+
get requiredSignatureKeyIds(): ReadonlySet<string>;
|
|
62
|
+
}
|
|
63
|
+
export declare function evaluateKeyLifecycle(key: AttestationKey, signedAt: Date | null, policy: TrustPolicy): readonly [VerificationState, string, string];
|
|
64
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
|