@atrib/verify 0.3.5 → 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 +63 -1
- package/dist/ap2-vi-evidence.d.ts +96 -0
- package/dist/ap2-vi-evidence.d.ts.map +1 -0
- package/dist/ap2-vi-evidence.js +586 -0
- package/dist/ap2-vi-evidence.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +51 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +5 -4
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
|
-
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
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).
|
|
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
|
-
*
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAMH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,GAAG,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAAG,WAAW,CAAA;AAEjK;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAiBjE;AAED,0FAA0F;AAC1F,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,KAAK,CAAA;CACd;AAED,MAAM,MAAM,QAAQ,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,aAAa,GACb,eAAe,GACf,WAAW,GACX,SAAS,CAAA;AAEb,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,iBAAiB,GACjB,eAAe,GACf,WAAW;AACb;;;;;;;GAOG;GACD,0BAA0B,CAAA;AAE9B,gDAAgD;AAChD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,SAAS,CAAA;IACrB;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,kBAAkB,EAAE,iBAAiB,CAAA;IACrC,UAAU,EAAE,OAAO,CAAA;
|
|
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
|
-
*
|
|
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.
|
|
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
|
-
"
|
|
33
|
+
"jose": "6.2.3",
|
|
34
|
+
"@atrib/mcp": "0.12.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
|
-
"@types/node": "^25.
|
|
37
|
+
"@types/node": "^25.9.1",
|
|
37
38
|
"fast-check": "^4.8.0",
|
|
38
39
|
"typescript": "^6.0.3",
|
|
39
|
-
"vitest": "^4.1.
|
|
40
|
+
"vitest": "^4.1.7"
|
|
40
41
|
},
|
|
41
42
|
"repository": {
|
|
42
43
|
"type": "git",
|