@atrib/verify 0.3.6 → 0.3.7

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/README.md CHANGED
@@ -109,6 +109,65 @@ const result = await verifyRecord(record, {
109
109
 
110
110
  Each pending annotation is its own ADR scope when external consumers need it.
111
111
 
112
+ ### `verifyAp2ViEvidence(...)` and `verifyAp2ViEvidenceAsync(...)`
113
+
114
+ AP2 / Verifiable Intent evidence checking for merchants and auditors. This runs outside the transaction detector path. It does not alter the graph, the settlement calculation, or record validity. It answers a narrower question: did the AP2 receipts and VI mandate chain form a coherent evidence bundle?
115
+
116
+ ```typescript
117
+ import { verifyAp2ViEvidence, verifyAp2ViEvidenceAsync } from '@atrib/verify'
118
+
119
+ const result = verifyAp2ViEvidence({
120
+ trustedIssuerKeys: [issuerJwk],
121
+ ap2: {
122
+ paymentReceipt,
123
+ checkoutReceipt,
124
+ closedPaymentMandate,
125
+ closedCheckoutMandate,
126
+ },
127
+ vi: {
128
+ credentials: [
129
+ { layer: 'L1', sdJwt: issuerCredential },
130
+ { layer: 'L2', sdJwt: userMandate },
131
+ { layer: 'L3_PAYMENT', sdJwt: agentPaymentMandate, parentPresentation },
132
+ { layer: 'L3_CHECKOUT', sdJwt: agentCheckoutMandate, parentPresentation },
133
+ ],
134
+ },
135
+ })
136
+ ```
137
+
138
+ Use the async verifier when AP2 receipts arrive as compact signed JWTs:
139
+
140
+ ```typescript
141
+ const result = await verifyAp2ViEvidenceAsync(
142
+ {
143
+ receiptJwtIssuers: [
144
+ {
145
+ issuer: 'https://verifier.example',
146
+ audience: 'merchant:checkout',
147
+ metadataUrl: 'https://verifier.example/.well-known/ap2',
148
+ },
149
+ ],
150
+ ap2: {
151
+ paymentReceiptJwt,
152
+ closedPaymentMandate,
153
+ },
154
+ },
155
+ { receiptJwtPolicy: 'require' },
156
+ )
157
+ ```
158
+
159
+ Checks performed when evidence is present:
160
+
161
+ - AP2 PaymentReceipt / CheckoutReceipt success, required fields, and `reference` binding to a closed mandate serialization or explicit closed-mandate hash.
162
+ - Compact AP2 receipt JWT verification with `jose`, using trusted local JWKS, `jwksUrl`, or verifier metadata containing inline `jwks` or `jwks_uri`.
163
+ - VI SD-JWT parsing for L1, L2, L3 payment, and L3 checkout credentials.
164
+ - ES256 signatures: L1 via trusted issuer keys, L2 via L1 `cnf.jwk`, L3 via the L2 delegated agent key.
165
+ - `sd_hash` links, disclosure digest links, autonomous L2 `cnf.jwk` consistency, and final checkout/payment binding.
166
+
167
+ The default signature policy is `require`. Missing keys or invalid signatures make `valid` false while still returning a structured result. Use `signaturePolicy: "best-effort"` for structural triage where issuer keys are not yet available.
168
+
169
+ The default receipt JWT policy is also `require`. Invalid receipt JWTs make `valid` false. Use `receiptJwtPolicy: "best-effort"` when decoded receipt objects are already available and JWT verification is an advisory signal.
170
+
112
171
  ### `calculate(options): Promise<RecommendationDocument>`
113
172
 
114
173
  Post-hoc calculation when no agent SDK was present. Always returns a fully-shaped document, unsigned with a warning if the merchant key is missing.
@@ -122,6 +181,8 @@ For advanced use (custom calculators, alternative signing flows), the package al
122
181
  - `isValidPolicy(doc)`: schema check for `PolicyDocument`
123
182
  - `signRecommendation(unsigned, privateKey)`: JCS + Ed25519 signing
124
183
  - `verifyRecommendationSignature(doc, publicKey)`: signature verification
184
+ - `verifyAp2ViEvidence(bundle, options?)`: decoded AP2 / VI receipt and mandate-chain evidence checking
185
+ - `verifyAp2ViEvidenceAsync(bundle, options?)`: compact AP2 receipt JWT verification plus the decoded evidence checks
125
186
  - `recommendationSigningInput(doc)`: the canonical bytes that get signed
126
187
  - `distributionsMatch(a, b)`: float-tolerant equality (within `1e-9` per recipient)
127
188
  - `fetchGraph(endpoint, contextId, treeSize?)`, `fetchSessionPolicyRecord`, `fetchPolicyDocument`
@@ -149,7 +210,7 @@ The merchant's payment pipeline never crashes because of an atrib problem. It ju
149
210
 
150
211
  ## Test coverage
151
212
 
152
- 184 tests across 10 test files covering the [§4.6](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#46-the-calculation-algorithm) calculation algorithm, graph endpoint client, JCS canonicalization, Ed25519 signing, settlement recommendations, policy templates, policy builder, calculation edge cases, property-based testing with fast-check, and full `verify()` / `calculate()` paths including [§5.8](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#58-degradation-contract) degradation.
213
+ 320 tests across 21 test files covering the [§4.6](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#46-the-calculation-algorithm) calculation algorithm, graph endpoint client, JCS canonicalization, Ed25519 signing, settlement recommendations, policy templates, policy builder, calculation edge cases, property-based testing with fast-check, AP2 / VI evidence checking, and full `verify()` / `calculate()` paths including [§5.8](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#58-degradation-contract) degradation.
153
214
 
154
215
  Run them with `pnpm --filter @atrib/verify test`.
155
216
 
@@ -162,6 +223,7 @@ Run them with `pnpm --filter @atrib/verify test`.
162
223
  | [§4.6](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#46-the-calculation-algorithm) | Pure calculation algorithm |
163
224
  | [§4.7](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#47-settlement-recommendation-document) | Recommendation document signing/verification |
164
225
  | [§5.5](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#55-atribverify-merchant-verification-library) | `AtribVerifier` class. `verify()` and `calculate()` |
226
+ | [§5.5.4](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#554-ap2--verifiable-intent-evidence-checks) | AP2 / VI evidence checks |
165
227
  | [§5.8](https://github.com/creatornader/atrib/blob/main/atrib-spec.md#58-degradation-contract) | Degradation contract; failures never break the host |
166
228
 
167
229
  The full protocol spec is at [`atrib-spec.md`](https://github.com/creatornader/atrib/blob/main/atrib-spec.md).
@@ -0,0 +1,96 @@
1
+ export type ViCredentialLayer = 'L1' | 'L2' | 'L3_PAYMENT' | 'L3_CHECKOUT';
2
+ export type ViMode = 'immediate' | 'autonomous' | 'unknown';
3
+ export interface ViCredentialInput {
4
+ layer: ViCredentialLayer;
5
+ sdJwt: string;
6
+ parentPresentation?: string;
7
+ }
8
+ export interface Ap2EvidenceInput {
9
+ paymentReceipt?: unknown;
10
+ checkoutReceipt?: unknown;
11
+ paymentReceiptJwt?: string;
12
+ checkoutReceiptJwt?: string;
13
+ closedPaymentMandate?: string;
14
+ closedCheckoutMandate?: string;
15
+ closedPaymentMandateHash?: string;
16
+ closedCheckoutMandateHash?: string;
17
+ }
18
+ export interface Ap2ReceiptJwtIssuer {
19
+ issuer?: string;
20
+ audience?: string | string[];
21
+ jwks?: JsonWebKey[] | {
22
+ keys: JsonWebKey[];
23
+ };
24
+ jwksUrl?: string;
25
+ metadataUrl?: string;
26
+ }
27
+ export interface Ap2ViEvidenceBundle {
28
+ ap2?: Ap2EvidenceInput;
29
+ vi?: {
30
+ credentials?: ViCredentialInput[];
31
+ };
32
+ trustedIssuerKeys?: JsonWebKey[];
33
+ receiptJwtIssuers?: Ap2ReceiptJwtIssuer[];
34
+ }
35
+ export interface VerifyAp2ViEvidenceOptions {
36
+ trustedIssuerKeys?: JsonWebKey[];
37
+ receiptJwtIssuers?: Ap2ReceiptJwtIssuer[];
38
+ receiptJwtPolicy?: 'require' | 'best-effort';
39
+ signaturePolicy?: 'require' | 'best-effort';
40
+ nowSeconds?: number;
41
+ clockSkewSeconds?: number;
42
+ fetch?: typeof fetch;
43
+ }
44
+ export interface SignatureCheck {
45
+ status: 'verified' | 'invalid' | 'not_checked';
46
+ reason?: string;
47
+ }
48
+ export interface ViCredentialCheck {
49
+ layer: ViCredentialLayer;
50
+ alg: string | null;
51
+ typ: string | null;
52
+ kid: string | null;
53
+ signature: SignatureCheck;
54
+ sdHashOk: boolean | null;
55
+ disclosuresOk: boolean | null;
56
+ mandateVcts: string[];
57
+ }
58
+ export interface Ap2ReceiptCheck {
59
+ present: boolean;
60
+ status: string | null;
61
+ success: boolean;
62
+ reference: string | null;
63
+ referenceOk: boolean | null;
64
+ missingFields: string[];
65
+ jwt?: Ap2ReceiptJwtCheck;
66
+ }
67
+ export interface Ap2ReceiptJwtCheck {
68
+ present: boolean;
69
+ verified: boolean;
70
+ issuer: string | null;
71
+ kid: string | null;
72
+ alg: string | null;
73
+ jwksSource: 'static' | 'jwks_url' | 'metadata' | null;
74
+ error?: string;
75
+ }
76
+ export interface Ap2EvidenceCheck {
77
+ paymentReceipt?: Ap2ReceiptCheck;
78
+ checkoutReceipt?: Ap2ReceiptCheck;
79
+ }
80
+ export interface ViEvidenceCheck {
81
+ mode: ViMode;
82
+ credentials: ViCredentialCheck[];
83
+ delegationOk: boolean | null;
84
+ checkoutPaymentBindingOk: boolean | null;
85
+ }
86
+ export interface Ap2ViEvidenceVerification {
87
+ valid: boolean;
88
+ transactionAccepted: boolean;
89
+ ap2: Ap2EvidenceCheck;
90
+ vi: ViEvidenceCheck;
91
+ errors: string[];
92
+ warnings: string[];
93
+ }
94
+ export declare function verifyAp2ViEvidence(bundle: Ap2ViEvidenceBundle, options?: VerifyAp2ViEvidenceOptions): Ap2ViEvidenceVerification;
95
+ export declare function verifyAp2ViEvidenceAsync(bundle: Ap2ViEvidenceBundle, options?: VerifyAp2ViEvidenceOptions): Promise<Ap2ViEvidenceVerification>;
96
+ //# sourceMappingURL=ap2-vi-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ap2-vi-evidence.d.ts","sourceRoot":"","sources":["../src/ap2-vi-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,586 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ import canonicalize from 'canonicalize';
3
+ import { createPublicKey, verify as verifyEcdsa } from 'node:crypto';
4
+ import { base64urlDecode, base64urlEncode, sha256 } from '@atrib/mcp';
5
+ import { createLocalJWKSet, createRemoteJWKSet, customFetch, decodeJwt, decodeProtectedHeader, jwtVerify, } from 'jose';
6
+ const textEncoder = new TextEncoder();
7
+ const textDecoder = new TextDecoder();
8
+ function isRecord(value) {
9
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
10
+ }
11
+ function isString(value) {
12
+ return typeof value === 'string';
13
+ }
14
+ function isNumber(value) {
15
+ return typeof value === 'number' && Number.isFinite(value);
16
+ }
17
+ function isJsonWebKeySet(value) {
18
+ return (isRecord(value) && Array.isArray(value['keys']) && value['keys'].every((key) => isRecord(key)));
19
+ }
20
+ function hashAscii(value) {
21
+ return base64urlEncode(sha256(textEncoder.encode(value)));
22
+ }
23
+ function decodeBase64urlJson(value) {
24
+ return JSON.parse(textDecoder.decode(base64urlDecode(value)));
25
+ }
26
+ function signatureCheck(status, reason) {
27
+ return reason === undefined ? { status } : { status, reason };
28
+ }
29
+ function collectDelegatePayloadDigests(payload) {
30
+ const digests = new Set();
31
+ const delegatePayload = payload['delegate_payload'];
32
+ if (!Array.isArray(delegatePayload))
33
+ return digests;
34
+ for (const item of delegatePayload) {
35
+ if (isRecord(item) && isString(item['...'])) {
36
+ digests.add(item['...']);
37
+ }
38
+ }
39
+ return digests;
40
+ }
41
+ function disclosureValue(decoded) {
42
+ if (!Array.isArray(decoded))
43
+ return undefined;
44
+ if (decoded.length === 2)
45
+ return decoded[1];
46
+ if (decoded.length >= 3)
47
+ return decoded[2];
48
+ return undefined;
49
+ }
50
+ function parseCredential(input) {
51
+ const [jwt, ...rawDisclosures] = input.sdJwt.split('~');
52
+ if (!jwt)
53
+ throw new Error('vi_jwt_malformed');
54
+ const parts = jwt.split('.');
55
+ if (parts.length !== 3 || !parts[0] || !parts[1] || !parts[2]) {
56
+ throw new Error('vi_jwt_malformed');
57
+ }
58
+ const header = decodeBase64urlJson(parts[0]);
59
+ const payload = decodeBase64urlJson(parts[1]);
60
+ if (!isRecord(header) || !isRecord(payload))
61
+ throw new Error('vi_jwt_malformed');
62
+ const disclosures = rawDisclosures
63
+ .filter((value) => value.length > 0)
64
+ .map((encoded) => {
65
+ const value = disclosureValue(decodeBase64urlJson(encoded));
66
+ return { encoded, digest: hashAscii(encoded), value };
67
+ });
68
+ const mandateValues = disclosures.flatMap((disclosure) => isRecord(disclosure.value) && isString(disclosure.value['vct']) ? [disclosure.value] : []);
69
+ return {
70
+ input,
71
+ jwt,
72
+ header,
73
+ payload,
74
+ signingInput: `${parts[0]}.${parts[1]}`,
75
+ signature: base64urlDecode(parts[2]),
76
+ disclosures,
77
+ mandateValues,
78
+ };
79
+ }
80
+ function getKid(jwk) {
81
+ const kid = jwk ? jwk['kid'] : undefined;
82
+ return isString(kid) ? kid : null;
83
+ }
84
+ function getCnfJwk(record) {
85
+ const cnf = record?.['cnf'];
86
+ if (!isRecord(cnf))
87
+ return undefined;
88
+ const jwk = cnf['jwk'];
89
+ return isRecord(jwk) ? jwk : undefined;
90
+ }
91
+ function canonicalJson(value) {
92
+ const canonical = canonicalize(value);
93
+ return typeof canonical === 'string' ? canonical : null;
94
+ }
95
+ function sameJson(left, right) {
96
+ const leftCanonical = canonicalJson(left);
97
+ const rightCanonical = canonicalJson(right);
98
+ return leftCanonical !== null && leftCanonical === rightCanonical;
99
+ }
100
+ function normalizeJwks(value) {
101
+ const keys = Array.isArray(value) ? value : value.keys;
102
+ return { keys: keys };
103
+ }
104
+ function verifyJwtSignature(parsed, publicJwk) {
105
+ const key = createPublicKey({ key: publicJwk, format: 'jwk' });
106
+ return verifyEcdsa('sha256', Buffer.from(parsed.signingInput, 'ascii'), { key, dsaEncoding: 'ieee-p1363' }, Buffer.from(parsed.signature));
107
+ }
108
+ function findIssuerKey(kid, keys) {
109
+ if (kid === null)
110
+ return keys[0];
111
+ return keys.find((key) => getKid(key) === kid);
112
+ }
113
+ function receiptJwtError(kind, code) {
114
+ return `ap2_${kind}_receipt_jwt_${code}`;
115
+ }
116
+ function addReceiptJwtFailure(verification, kind, code, policy) {
117
+ const error = receiptJwtError(kind, code);
118
+ verification.check.error = error;
119
+ if (policy === 'require')
120
+ verification.errors.push(error);
121
+ else
122
+ verification.warnings.push(error);
123
+ }
124
+ function findReceiptJwtIssuer(issuer, issuers) {
125
+ if (issuer !== null) {
126
+ const exact = issuers.find((candidate) => candidate.issuer === issuer);
127
+ if (exact)
128
+ return exact;
129
+ }
130
+ return issuers.find((candidate) => candidate.issuer === undefined);
131
+ }
132
+ async function fetchJson(url, fetchImpl) {
133
+ const fetchFn = fetchImpl ?? globalThis.fetch;
134
+ if (typeof fetchFn !== 'function')
135
+ throw new Error('fetch_unavailable');
136
+ const response = await fetchFn(url);
137
+ if (!response.ok)
138
+ throw new Error('metadata_fetch_failed');
139
+ return response.json();
140
+ }
141
+ async function resolveReceiptJwtKey(issuer, fetchImpl) {
142
+ const remoteOptions = fetchImpl ? { [customFetch]: fetchImpl } : undefined;
143
+ if (issuer.jwks) {
144
+ return {
145
+ getKey: createLocalJWKSet(normalizeJwks(issuer.jwks)),
146
+ source: 'static',
147
+ };
148
+ }
149
+ if (issuer.jwksUrl) {
150
+ return {
151
+ getKey: createRemoteJWKSet(new URL(issuer.jwksUrl), remoteOptions),
152
+ source: 'jwks_url',
153
+ };
154
+ }
155
+ if (issuer.metadataUrl) {
156
+ const metadata = await fetchJson(issuer.metadataUrl, fetchImpl);
157
+ if (!isRecord(metadata))
158
+ throw new Error('metadata_invalid');
159
+ const inlineJwks = metadata['jwks'];
160
+ if (isJsonWebKeySet(inlineJwks)) {
161
+ return {
162
+ getKey: createLocalJWKSet(normalizeJwks(inlineJwks)),
163
+ source: 'metadata',
164
+ };
165
+ }
166
+ const jwksUri = metadata['jwks_uri'];
167
+ if (isString(jwksUri)) {
168
+ return {
169
+ getKey: createRemoteJWKSet(new URL(jwksUri), remoteOptions),
170
+ source: 'metadata',
171
+ };
172
+ }
173
+ throw new Error('metadata_jwks_missing');
174
+ }
175
+ throw new Error('key_source_missing');
176
+ }
177
+ function expectedTyp(layer, typ) {
178
+ if (layer === 'L1')
179
+ return typ === 'sd+jwt';
180
+ if (layer === 'L2')
181
+ return typ === 'kb-sd-jwt' || typ === 'kb-sd-jwt+kb';
182
+ return typ === 'kb-sd-jwt';
183
+ }
184
+ function disclosureDigestsOk(parsed) {
185
+ if (parsed.disclosures.length === 0)
186
+ return null;
187
+ const sd = parsed.payload['_sd'];
188
+ const sdDigests = new Set(Array.isArray(sd) ? sd.filter(isString) : []);
189
+ const delegateDigests = collectDelegatePayloadDigests(parsed.payload);
190
+ return parsed.disclosures.every((disclosure) => sdDigests.has(disclosure.digest) || delegateDigests.has(disclosure.digest));
191
+ }
192
+ function initialCredentialCheck(parsed) {
193
+ const alg = isString(parsed.header['alg']) ? parsed.header['alg'] : null;
194
+ const typ = isString(parsed.header['typ']) ? parsed.header['typ'] : null;
195
+ const kid = isString(parsed.header['kid']) ? parsed.header['kid'] : null;
196
+ return {
197
+ layer: parsed.input.layer,
198
+ alg,
199
+ typ,
200
+ kid,
201
+ signature: signatureCheck('not_checked'),
202
+ sdHashOk: null,
203
+ disclosuresOk: disclosureDigestsOk(parsed),
204
+ mandateVcts: parsed.mandateValues.map((mandate) => String(mandate['vct'])),
205
+ };
206
+ }
207
+ function checkReceipt(value, requiredFields, expectedReference) {
208
+ if (!isRecord(value)) {
209
+ return {
210
+ present: value !== undefined,
211
+ status: null,
212
+ success: false,
213
+ reference: null,
214
+ referenceOk: null,
215
+ missingFields: ['receipt_object'],
216
+ };
217
+ }
218
+ const status = isString(value['status']) ? value['status'] : null;
219
+ const reference = isString(value['reference']) ? value['reference'] : null;
220
+ const missingFields = requiredFields.filter((field) => !isString(value[field]) && !isNumber(value[field]));
221
+ const success = status === 'Success';
222
+ const referenceOk = expectedReference === undefined ? null : reference === expectedReference;
223
+ return {
224
+ present: true,
225
+ status,
226
+ success,
227
+ reference,
228
+ referenceOk,
229
+ missingFields,
230
+ };
231
+ }
232
+ function emptyJwtReceiptCheck(jwt) {
233
+ return {
234
+ present: true,
235
+ status: null,
236
+ success: false,
237
+ reference: null,
238
+ referenceOk: null,
239
+ missingFields: ['receipt_object'],
240
+ jwt,
241
+ };
242
+ }
243
+ async function verifyReceiptJwt(kind, receiptJwt, issuers, policy, nowSeconds, clockSkewSeconds, fetchImpl) {
244
+ const verification = {
245
+ check: {
246
+ present: true,
247
+ verified: false,
248
+ issuer: null,
249
+ kid: null,
250
+ alg: null,
251
+ jwksSource: null,
252
+ },
253
+ errors: [],
254
+ warnings: [],
255
+ };
256
+ try {
257
+ const header = decodeProtectedHeader(receiptJwt);
258
+ const payload = decodeJwt(receiptJwt);
259
+ const issuer = isString(payload.iss) ? payload.iss : null;
260
+ verification.check.alg = isString(header.alg) ? header.alg : null;
261
+ verification.check.kid = isString(header.kid) ? header.kid : null;
262
+ verification.check.issuer = issuer;
263
+ if (header.alg !== 'ES256') {
264
+ addReceiptJwtFailure(verification, kind, 'alg_unsupported', policy);
265
+ return verification;
266
+ }
267
+ const issuerConfig = findReceiptJwtIssuer(issuer, issuers);
268
+ if (!issuerConfig) {
269
+ addReceiptJwtFailure(verification, kind, 'issuer_untrusted', policy);
270
+ return verification;
271
+ }
272
+ const key = await resolveReceiptJwtKey(issuerConfig, fetchImpl);
273
+ verification.check.jwksSource = key.source;
274
+ const verifyOptions = {
275
+ algorithms: ['ES256'],
276
+ clockTolerance: clockSkewSeconds,
277
+ currentDate: new Date(nowSeconds * 1000),
278
+ };
279
+ if (issuerConfig.audience !== undefined)
280
+ verifyOptions.audience = issuerConfig.audience;
281
+ if (issuerConfig.issuer !== undefined)
282
+ verifyOptions.issuer = issuerConfig.issuer;
283
+ const verified = await jwtVerify(receiptJwt, key.getKey, verifyOptions);
284
+ verification.check.verified = true;
285
+ verification.payload = verified.payload;
286
+ return verification;
287
+ }
288
+ catch (error) {
289
+ const code = error instanceof Error && error.message ? error.message : 'invalid';
290
+ addReceiptJwtFailure(verification, kind, code === 'fetch_unavailable' ? 'metadata_fetch_unavailable' : 'invalid', policy);
291
+ if (code !== 'invalid' && code !== 'fetch_unavailable') {
292
+ verification.warnings.push(`${receiptJwtError(kind, 'detail')}:${code}`);
293
+ }
294
+ return verification;
295
+ }
296
+ }
297
+ function expectedReceiptReference(serialized, explicitHash) {
298
+ if (explicitHash)
299
+ return explicitHash;
300
+ if (serialized)
301
+ return hashAscii(serialized);
302
+ return undefined;
303
+ }
304
+ function findMandates(parsedCredentials, vct) {
305
+ return parsedCredentials.flatMap((parsed) => parsed.mandateValues.filter((mandate) => mandate['vct'] === vct));
306
+ }
307
+ function checkCheckoutHash(mandates, errors) {
308
+ for (const mandate of mandates) {
309
+ const checkoutJwt = mandate['checkout_jwt'];
310
+ const checkoutHash = mandate['checkout_hash'];
311
+ if (!isString(checkoutJwt) || !isString(checkoutHash))
312
+ continue;
313
+ if (hashAscii(checkoutJwt) !== checkoutHash) {
314
+ errors.push('vi_checkout_hash_mismatch');
315
+ }
316
+ }
317
+ }
318
+ function checkPaymentCheckoutBinding(paymentMandates, checkoutMandates, errors) {
319
+ if (paymentMandates.length === 0 || checkoutMandates.length === 0)
320
+ return null;
321
+ const checkoutHashes = new Set(checkoutMandates.map((mandate) => mandate['checkout_hash']).filter(isString));
322
+ const ok = paymentMandates.every((mandate) => isString(mandate['transaction_id']) && checkoutHashes.has(mandate['transaction_id']));
323
+ if (!ok)
324
+ errors.push('vi_checkout_payment_binding_mismatch');
325
+ return ok;
326
+ }
327
+ function checkDelegation(openCheckoutMandates, openPaymentMandates, errors) {
328
+ const jwks = [...openCheckoutMandates, ...openPaymentMandates]
329
+ .map(getCnfJwk)
330
+ .filter((jwk) => jwk !== undefined);
331
+ if (jwks.length === 0)
332
+ return null;
333
+ const first = jwks[0];
334
+ const ok = jwks.every((jwk) => sameJson(jwk, first));
335
+ if (!ok)
336
+ errors.push('vi_l2_cnf_mismatch');
337
+ return ok;
338
+ }
339
+ function verifyCredentialSignatures(parsedCredentials, checks, trustedIssuerKeys, signaturePolicy, errors, warnings) {
340
+ const byLayer = new Map();
341
+ for (const parsed of parsedCredentials)
342
+ byLayer.set(parsed.input.layer, parsed);
343
+ const l1 = byLayer.get('L1');
344
+ const l2 = byLayer.get('L2');
345
+ const l1UserKey = getCnfJwk(l1?.payload);
346
+ const l2AgentKeys = l2?.mandateValues.map(getCnfJwk).filter((jwk) => jwk !== undefined) ?? [];
347
+ for (let index = 0; index < parsedCredentials.length; index += 1) {
348
+ const parsed = parsedCredentials[index];
349
+ const check = checks[index];
350
+ if (check.alg !== 'ES256') {
351
+ check.signature = signatureCheck('invalid', 'alg');
352
+ errors.push('vi_alg_unsupported');
353
+ continue;
354
+ }
355
+ let key;
356
+ if (parsed.input.layer === 'L1') {
357
+ key = findIssuerKey(check.kid, trustedIssuerKeys);
358
+ }
359
+ else if (parsed.input.layer === 'L2') {
360
+ key = l1UserKey;
361
+ if (key && getKid(key) !== null && check.kid !== getKid(key))
362
+ errors.push('vi_l2_kid_mismatch');
363
+ }
364
+ else {
365
+ key = l2AgentKeys.find((candidate) => getKid(candidate) === check.kid);
366
+ }
367
+ if (!key) {
368
+ check.signature = signatureCheck('not_checked', 'missing_key');
369
+ warnings.push(`vi_signature_key_missing:${parsed.input.layer}`);
370
+ if (signaturePolicy === 'require')
371
+ errors.push('vi_signature_key_missing');
372
+ continue;
373
+ }
374
+ try {
375
+ check.signature = verifyJwtSignature(parsed, key)
376
+ ? signatureCheck('verified')
377
+ : signatureCheck('invalid', 'signature');
378
+ if (check.signature.status === 'invalid')
379
+ errors.push('vi_signature_invalid');
380
+ }
381
+ catch {
382
+ check.signature = signatureCheck('invalid', 'signature');
383
+ errors.push('vi_signature_invalid');
384
+ }
385
+ }
386
+ }
387
+ function checkSdHash(parsedCredentials, checks, errors) {
388
+ const byLayer = new Map();
389
+ for (const parsed of parsedCredentials)
390
+ byLayer.set(parsed.input.layer, parsed);
391
+ const l1 = byLayer.get('L1');
392
+ for (let index = 0; index < parsedCredentials.length; index += 1) {
393
+ const parsed = parsedCredentials[index];
394
+ const check = checks[index];
395
+ if (parsed.input.layer === 'L1') {
396
+ check.sdHashOk = parsed.payload['sd_hash'] === undefined;
397
+ continue;
398
+ }
399
+ const sdHash = parsed.payload['sd_hash'];
400
+ if (!isString(sdHash)) {
401
+ check.sdHashOk = false;
402
+ errors.push('vi_sd_hash_missing');
403
+ continue;
404
+ }
405
+ let parentPresentation;
406
+ if (parsed.input.layer === 'L2') {
407
+ parentPresentation = l1?.input.sdJwt;
408
+ }
409
+ else {
410
+ parentPresentation = parsed.input.parentPresentation;
411
+ }
412
+ if (!parentPresentation) {
413
+ check.sdHashOk = null;
414
+ continue;
415
+ }
416
+ check.sdHashOk = hashAscii(parentPresentation) === sdHash;
417
+ if (!check.sdHashOk)
418
+ errors.push('vi_sd_hash_mismatch');
419
+ }
420
+ }
421
+ function checkTimeWindow(parsedCredentials, nowSeconds, clockSkewSeconds, errors) {
422
+ for (const parsed of parsedCredentials) {
423
+ const exp = parsed.payload['exp'];
424
+ if (isNumber(exp) && nowSeconds > exp + clockSkewSeconds)
425
+ errors.push('vi_credential_expired');
426
+ const iat = parsed.payload['iat'];
427
+ if (isNumber(iat) && nowSeconds + clockSkewSeconds < iat)
428
+ errors.push('vi_credential_iat_in_future');
429
+ }
430
+ }
431
+ export function verifyAp2ViEvidence(bundle, options = {}) {
432
+ const errors = [];
433
+ const warnings = [];
434
+ const signaturePolicy = options.signaturePolicy ?? 'require';
435
+ const trustedIssuerKeys = options.trustedIssuerKeys ?? bundle.trustedIssuerKeys ?? [];
436
+ const nowSeconds = options.nowSeconds ?? Math.floor(Date.now() / 1000);
437
+ const clockSkewSeconds = options.clockSkewSeconds ?? 300;
438
+ const parsedCredentials = [];
439
+ const credentialChecks = [];
440
+ for (const credential of bundle.vi?.credentials ?? []) {
441
+ try {
442
+ const parsed = parseCredential(credential);
443
+ const check = initialCredentialCheck(parsed);
444
+ parsedCredentials.push(parsed);
445
+ credentialChecks.push(check);
446
+ if (!expectedTyp(credential.layer, check.typ))
447
+ errors.push('vi_typ_mismatch');
448
+ if (check.disclosuresOk === false)
449
+ errors.push('vi_disclosure_digest_mismatch');
450
+ }
451
+ catch (error) {
452
+ const code = error instanceof Error && error.message ? error.message : 'vi_jwt_malformed';
453
+ errors.push(code);
454
+ credentialChecks.push({
455
+ layer: credential.layer,
456
+ alg: null,
457
+ typ: null,
458
+ kid: null,
459
+ signature: signatureCheck('invalid', 'parse'),
460
+ sdHashOk: null,
461
+ disclosuresOk: null,
462
+ mandateVcts: [],
463
+ });
464
+ }
465
+ }
466
+ checkSdHash(parsedCredentials, credentialChecks, errors);
467
+ checkTimeWindow(parsedCredentials, nowSeconds, clockSkewSeconds, errors);
468
+ verifyCredentialSignatures(parsedCredentials, credentialChecks, trustedIssuerKeys, signaturePolicy, errors, warnings);
469
+ const finalPaymentMandates = findMandates(parsedCredentials, 'mandate.payment.1');
470
+ const finalCheckoutMandates = findMandates(parsedCredentials, 'mandate.checkout.1');
471
+ const openPaymentMandates = findMandates(parsedCredentials, 'mandate.payment.open.1');
472
+ const openCheckoutMandates = findMandates(parsedCredentials, 'mandate.checkout.open.1');
473
+ checkCheckoutHash(finalCheckoutMandates, errors);
474
+ const checkoutPaymentBindingOk = checkPaymentCheckoutBinding(finalPaymentMandates, finalCheckoutMandates, errors);
475
+ const delegationOk = checkDelegation(openCheckoutMandates, openPaymentMandates, errors);
476
+ const mode = openPaymentMandates.length > 0 || openCheckoutMandates.length > 0
477
+ ? 'autonomous'
478
+ : finalPaymentMandates.length > 0 || finalCheckoutMandates.length > 0
479
+ ? 'immediate'
480
+ : 'unknown';
481
+ const ap2 = {};
482
+ const expectedPaymentReference = expectedReceiptReference(bundle.ap2?.closedPaymentMandate, bundle.ap2?.closedPaymentMandateHash);
483
+ const expectedCheckoutReference = expectedReceiptReference(bundle.ap2?.closedCheckoutMandate, bundle.ap2?.closedCheckoutMandateHash);
484
+ if (bundle.ap2?.paymentReceipt !== undefined) {
485
+ ap2.paymentReceipt = checkReceipt(bundle.ap2.paymentReceipt, ['status', 'iss', 'iat', 'reference', 'payment_id'], expectedPaymentReference);
486
+ if (!ap2.paymentReceipt.success)
487
+ errors.push('ap2_payment_receipt_not_success');
488
+ if (ap2.paymentReceipt.missingFields.length > 0)
489
+ errors.push('ap2_payment_receipt_missing_fields');
490
+ if (ap2.paymentReceipt.referenceOk === false)
491
+ errors.push('ap2_payment_receipt_reference_mismatch');
492
+ }
493
+ if (bundle.ap2?.checkoutReceipt !== undefined) {
494
+ ap2.checkoutReceipt = checkReceipt(bundle.ap2.checkoutReceipt, ['status', 'iss', 'iat', 'reference', 'order_id'], expectedCheckoutReference);
495
+ if (!ap2.checkoutReceipt.success)
496
+ errors.push('ap2_checkout_receipt_not_success');
497
+ if (ap2.checkoutReceipt.missingFields.length > 0)
498
+ errors.push('ap2_checkout_receipt_missing_fields');
499
+ if (ap2.checkoutReceipt.referenceOk === false)
500
+ errors.push('ap2_checkout_receipt_reference_mismatch');
501
+ }
502
+ const paymentAccepted = ap2.paymentReceipt?.success === true && ap2.paymentReceipt.referenceOk !== false;
503
+ const checkoutAccepted = ap2.checkoutReceipt?.success === true && ap2.checkoutReceipt.referenceOk !== false;
504
+ const transactionAccepted = paymentAccepted || checkoutAccepted;
505
+ const hasAp2Receipt = ap2.paymentReceipt?.present === true || ap2.checkoutReceipt?.present === true;
506
+ return {
507
+ valid: errors.length === 0 && (!hasAp2Receipt || transactionAccepted),
508
+ transactionAccepted,
509
+ ap2,
510
+ vi: {
511
+ mode,
512
+ credentials: credentialChecks,
513
+ delegationOk,
514
+ checkoutPaymentBindingOk,
515
+ },
516
+ errors: [...new Set(errors)],
517
+ warnings: [...new Set(warnings)],
518
+ };
519
+ }
520
+ export async function verifyAp2ViEvidenceAsync(bundle, options = {}) {
521
+ const ap2 = { ...bundle.ap2 };
522
+ const receiptJwtIssuers = options.receiptJwtIssuers ?? bundle.receiptJwtIssuers ?? [];
523
+ const receiptJwtPolicy = options.receiptJwtPolicy ?? 'require';
524
+ const nowSeconds = options.nowSeconds ?? Math.floor(Date.now() / 1000);
525
+ const clockSkewSeconds = options.clockSkewSeconds ?? 300;
526
+ const jwtErrors = [];
527
+ const jwtWarnings = [];
528
+ const paymentJwt = ap2.paymentReceiptJwt
529
+ ? await verifyReceiptJwt('payment', ap2.paymentReceiptJwt, receiptJwtIssuers, receiptJwtPolicy, nowSeconds, clockSkewSeconds, options.fetch)
530
+ : undefined;
531
+ if (paymentJwt) {
532
+ jwtErrors.push(...paymentJwt.errors);
533
+ jwtWarnings.push(...paymentJwt.warnings);
534
+ if (paymentJwt.payload) {
535
+ if (ap2.paymentReceipt !== undefined && !sameJson(ap2.paymentReceipt, paymentJwt.payload)) {
536
+ const code = receiptJwtError('payment', 'payload_mismatch');
537
+ if (receiptJwtPolicy === 'require')
538
+ jwtErrors.push(code);
539
+ else
540
+ jwtWarnings.push(code);
541
+ }
542
+ ap2.paymentReceipt = paymentJwt.payload;
543
+ }
544
+ }
545
+ const checkoutJwt = ap2.checkoutReceiptJwt
546
+ ? await verifyReceiptJwt('checkout', ap2.checkoutReceiptJwt, receiptJwtIssuers, receiptJwtPolicy, nowSeconds, clockSkewSeconds, options.fetch)
547
+ : undefined;
548
+ if (checkoutJwt) {
549
+ jwtErrors.push(...checkoutJwt.errors);
550
+ jwtWarnings.push(...checkoutJwt.warnings);
551
+ if (checkoutJwt.payload) {
552
+ if (ap2.checkoutReceipt !== undefined &&
553
+ !sameJson(ap2.checkoutReceipt, checkoutJwt.payload)) {
554
+ const code = receiptJwtError('checkout', 'payload_mismatch');
555
+ if (receiptJwtPolicy === 'require')
556
+ jwtErrors.push(code);
557
+ else
558
+ jwtWarnings.push(code);
559
+ }
560
+ ap2.checkoutReceipt = checkoutJwt.payload;
561
+ }
562
+ }
563
+ const result = verifyAp2ViEvidence({ ...bundle, ap2 }, options);
564
+ if (paymentJwt) {
565
+ if (result.ap2.paymentReceipt)
566
+ result.ap2.paymentReceipt.jwt = paymentJwt.check;
567
+ else
568
+ result.ap2.paymentReceipt = emptyJwtReceiptCheck(paymentJwt.check);
569
+ }
570
+ if (checkoutJwt) {
571
+ if (result.ap2.checkoutReceipt)
572
+ result.ap2.checkoutReceipt.jwt = checkoutJwt.check;
573
+ else
574
+ result.ap2.checkoutReceipt = emptyJwtReceiptCheck(checkoutJwt.check);
575
+ }
576
+ const errors = [...new Set([...result.errors, ...jwtErrors])];
577
+ const warnings = [...new Set([...result.warnings, ...jwtWarnings])];
578
+ const hasAp2Receipt = result.ap2.paymentReceipt?.present === true || result.ap2.checkoutReceipt?.present === true;
579
+ return {
580
+ ...result,
581
+ valid: errors.length === 0 && (!hasAp2Receipt || result.transactionAccepted),
582
+ errors,
583
+ warnings,
584
+ };
585
+ }
586
+ //# sourceMappingURL=ap2-vi-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ap2-vi-evidence.js","sourceRoot":"","sources":["../src/ap2-vi-evidence.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,8 +8,10 @@ export { buildPolicy, policyFrom } from './policy-builder.js';
8
8
  export { fetchGraph, fetchSessionPolicyRecord, fetchPolicyDocument } from './graph-fetch.js';
9
9
  export { buildRevocationRegistry, applyRevocation } from './revocations.js';
10
10
  export type { RevocationEntry, RevocationReason, MinimalRecord } from './revocations.js';
11
+ export { verifyAp2ViEvidence, verifyAp2ViEvidenceAsync } from './ap2-vi-evidence.js';
12
+ export type { Ap2EvidenceCheck, Ap2EvidenceInput, Ap2ReceiptJwtCheck, Ap2ReceiptJwtIssuer, Ap2ReceiptCheck, Ap2ViEvidenceBundle, Ap2ViEvidenceVerification, SignatureCheck, VerifyAp2ViEvidenceOptions, ViCredentialCheck, ViCredentialInput, ViCredentialLayer, ViEvidenceCheck, ViMode, } from './ap2-vi-evidence.js';
11
13
  export { resolveIdentity } from './resolve-identity.js';
12
14
  export type { IdentityResolution, IdentityResolutionMethod, KeyRevocationStatus, ResolveIdentityOptions, IdentityClaim, CapabilityEnvelope, } from './resolve-identity.js';
13
- export type { GraphNode, GraphEdge, GraphResponse, EventType, EdgeType, GapNode, VerificationState, PolicyDocument, PolicyConstraints, EdgeWeights, Modifier, DistributionMethod, CreatorPolicySnapshot, CreatorPolicyEntry, SessionPolicyRecord, Distribution, RecommendationDocument, VerificationResult, } from './types.js';
15
+ export type { GraphNode, GraphEdge, GraphResponse, EventType, EdgeType, GapNode, VerificationState, ReferenceStatus, PolicyDocument, PolicyConstraints, EdgeWeights, Modifier, DistributionMethod, CreatorPolicySnapshot, CreatorPolicyEntry, SessionPolicyRecord, Distribution, RecommendationDocument, VerificationResult, } from './types.js';
14
16
  export { graphLabelFromEventTypeUri } from './types.js';
15
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAO3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG5F,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC3E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGxF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,SAAS,EACT,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAO3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGzE,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAG5F,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC3E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAGxF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AACpF,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,MAAM,GACP,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACb,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAG9B,YAAY,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,SAAS,EACT,QAAQ,EACR,OAAO,EACP,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -18,6 +18,8 @@ export { buildPolicy, policyFrom } from './policy-builder.js';
18
18
  export { fetchGraph, fetchSessionPolicyRecord, fetchPolicyDocument } from './graph-fetch.js';
19
19
  // Revocation registry (§1.9)
20
20
  export { buildRevocationRegistry, applyRevocation } from './revocations.js';
21
+ // AP2 / Verifiable Intent evidence checks. Off the settlement critical path.
22
+ export { verifyAp2ViEvidence, verifyAp2ViEvidenceAsync } from './ap2-vi-evidence.js';
21
23
  // Identity resolution (§6.3 9-step verifier consultation)
22
24
  export { resolveIdentity } from './resolve-identity.js';
23
25
  export { graphLabelFromEventTypeUri } from './types.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,+CAA+C;AAE/C,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C,wEAAwE;AACxE,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAOjD,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEzE,sDAAsD;AACtD,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE7D,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,6BAA6B;AAC7B,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG3E,0DAA0D;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AA+BvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,+CAA+C;AAE/C,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG7C,wEAAwE;AACxE,uEAAuE;AACvE,sEAAsE;AACtE,uEAAuE;AACvE,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAOjD,uEAAuE;AACvE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEzE,sDAAsD;AACtD,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAE5B,mDAAmD;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE7D,+BAA+B;AAC/B,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE5F,6BAA6B;AAC7B,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG3E,6EAA6E;AAC7E,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAkBpF,0DAA0D;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAgCvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA"}
package/dist/types.d.ts CHANGED
@@ -20,7 +20,7 @@
20
20
  export type EventType = 'tool_call' | 'transaction' | 'observation' | 'directory_anchor' | 'annotation' | 'revision' | 'gap_node' | 'dangling_node' | 'extension';
21
21
  /**
22
22
  * Map an attribution record's event_type URI to a graph-layer short label.
23
- * Atrib normative URIs map to their canonical short label; everything else
23
+ * atrib normative URIs map to their canonical short label; everything else
24
24
  * collapses to `'extension'` (the graph-layer opaque-typed category).
25
25
  */
26
26
  export declare function graphLabelFromEventTypeUri(uri: string): EventType;
@@ -44,13 +44,30 @@ export type VerificationState = 'unsigned' | 'signature_valid' | 'log_committed'
44
44
  * state when (creator_key, log_index) falls after a key_revocation.
45
45
  */
46
46
  | 'revoked_after_revocation';
47
+ export type ReferenceStatus =
48
+ /**
49
+ * The referenced record exists in the graph service, but it was outside
50
+ * the current response scope.
51
+ */
52
+ 'external'
53
+ /**
54
+ * The graph service could not find the referenced record in its global
55
+ * store.
56
+ */
57
+ | 'missing'
58
+ /**
59
+ * The graph response did not have a global reference resolver available.
60
+ * Older or offline graph builders can only say the target was absent from
61
+ * the resolved set.
62
+ */
63
+ | 'unresolved';
47
64
  /** A node in the attribution graph (§3.5.2). */
48
65
  export interface GraphNode {
49
66
  id: string;
50
67
  event_type: EventType;
51
68
  /**
52
69
  * The original event_type URI from the underlying record (§1.2.4), or
53
- * null for synthetic nodes (gap_node). Atrib normative URIs are present
70
+ * null for synthetic nodes (gap_node). atrib normative URIs are present
54
71
  * as their canonical strings; extension URIs are preserved verbatim.
55
72
  * Graph clients that need to filter by URI rather than short label use
56
73
  * this field.
@@ -64,6 +81,22 @@ export interface GraphNode {
64
81
  log_index: number | null;
65
82
  verification_state: VerificationState;
66
83
  is_genesis: boolean;
84
+ /**
85
+ * Present on synthetic reference placeholders. `external` means the target
86
+ * exists globally but was outside the current response scope; `missing`
87
+ * means the graph service could not find the target globally.
88
+ */
89
+ reference_status?: ReferenceStatus;
90
+ /** Full record hash for a synthetic reference placeholder when available. */
91
+ reference_hash?: string;
92
+ /** Provenance token for a synthetic provenance placeholder when available. */
93
+ reference_token?: string;
94
+ /** Context id of the referenced record when `reference_status` is external. */
95
+ reference_context_id?: string | null;
96
+ /** Event type of the referenced record when `reference_status` is external. */
97
+ reference_event_type?: EventType | null;
98
+ /** Log index of the referenced record when `reference_status` is external. */
99
+ reference_log_index?: number | null;
67
100
  }
68
101
  /** An edge in the attribution graph (§3.5.3). */
69
102
  export interface GraphEdge {
@@ -77,9 +110,24 @@ export interface GraphEdge {
77
110
  * record in the resolved set. Per spec §3.2.4 steps 6 + 7, dangling
78
111
  * references MUST be surfaced as edges (not silently dropped) so verifiers
79
112
  * can see what the agent claimed even when the upstream isn't accessible.
80
- * Only INFORMED_BY and PROVENANCE_OF edges can be dangling.
113
+ * INFORMED_BY, PROVENANCE_OF, ANNOTATES, and REVISES edges can be dangling.
81
114
  */
82
115
  dangling?: boolean;
116
+ /**
117
+ * Classification for a dangling edge target. Older graph builders may omit
118
+ * this and only set `dangling: true`.
119
+ */
120
+ reference_status?: ReferenceStatus;
121
+ /** Full record hash for a dangling record-hash reference when available. */
122
+ reference_hash?: string;
123
+ /** Provenance token for a dangling provenance reference when available. */
124
+ reference_token?: string;
125
+ /** Context id of the referenced record when `reference_status` is external. */
126
+ reference_context_id?: string | null;
127
+ /** Event type of the referenced record when `reference_status` is external. */
128
+ reference_event_type?: EventType | null;
129
+ /** Log index of the referenced record when `reference_status` is external. */
130
+ reference_log_index?: number | null;
83
131
  /**
84
132
  * Optional reason annotation. Currently used by PROVENANCE_OF dangling
85
133
  * edges with the value `"no_token_source_in_record_set"` per spec §3.2.4
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
3
  * Map an attribution record's event_type URI to a graph-layer short label.
4
- * Atrib normative URIs map to their canonical short label; everything else
4
+ * atrib normative URIs map to their canonical short label; everything else
5
5
  * collapses to `'extension'` (the graph-layer opaque-typed category).
6
6
  */
7
7
  export function graphLabelFromEventTypeUri(uri) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atrib/verify",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -30,13 +30,14 @@
30
30
  "@noble/ed25519": "^3.1.0",
31
31
  "@noble/hashes": "^2.2.0",
32
32
  "canonicalize": "^3.0.0",
33
- "@atrib/mcp": "0.11.1"
33
+ "jose": "6.2.3",
34
+ "@atrib/mcp": "0.12.0"
34
35
  },
35
36
  "devDependencies": {
36
- "@types/node": "^25.8.0",
37
+ "@types/node": "^25.9.1",
37
38
  "fast-check": "^4.8.0",
38
39
  "typescript": "^6.0.3",
39
- "vitest": "^4.1.6"
40
+ "vitest": "^4.1.7"
40
41
  },
41
42
  "repository": {
42
43
  "type": "git",