chit402-verify 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +205 -17
  3. package/dist/anchor-trust.d.ts +144 -0
  4. package/dist/anchor-trust.d.ts.map +1 -0
  5. package/dist/anchor-trust.js +441 -0
  6. package/dist/anchor-trust.js.map +1 -0
  7. package/dist/anchor-witness.d.ts +265 -0
  8. package/dist/anchor-witness.d.ts.map +1 -0
  9. package/dist/anchor-witness.js +833 -0
  10. package/dist/anchor-witness.js.map +1 -0
  11. package/dist/base-payer.d.ts +65 -0
  12. package/dist/base-payer.d.ts.map +1 -0
  13. package/dist/base-payer.js +222 -0
  14. package/dist/base-payer.js.map +1 -0
  15. package/dist/binding.d.ts +52 -0
  16. package/dist/binding.d.ts.map +1 -0
  17. package/dist/binding.js +80 -0
  18. package/dist/binding.js.map +1 -0
  19. package/dist/canonical-preimage.d.ts +9 -0
  20. package/dist/canonical-preimage.d.ts.map +1 -0
  21. package/dist/canonical-preimage.js +25 -0
  22. package/dist/canonical-preimage.js.map +1 -0
  23. package/dist/carry-forward.d.ts +79 -0
  24. package/dist/carry-forward.d.ts.map +1 -0
  25. package/dist/carry-forward.js +184 -0
  26. package/dist/carry-forward.js.map +1 -0
  27. package/dist/cli.d.ts +18 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +2090 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/epoch.d.ts +143 -0
  32. package/dist/epoch.d.ts.map +1 -0
  33. package/dist/epoch.js +352 -0
  34. package/dist/epoch.js.map +1 -0
  35. package/dist/head-binding.d.ts +24 -0
  36. package/dist/head-binding.d.ts.map +1 -0
  37. package/dist/head-binding.js +61 -0
  38. package/dist/head-binding.js.map +1 -0
  39. package/dist/index.d.ts +585 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +1648 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/issuer-history.d.ts +151 -0
  44. package/dist/issuer-history.d.ts.map +1 -0
  45. package/dist/issuer-history.js +595 -0
  46. package/dist/issuer-history.js.map +1 -0
  47. package/dist/issuer-pin.d.ts +126 -0
  48. package/dist/issuer-pin.d.ts.map +1 -0
  49. package/dist/issuer-pin.js +567 -0
  50. package/dist/issuer-pin.js.map +1 -0
  51. package/dist/jcs.d.ts +8 -0
  52. package/dist/jcs.d.ts.map +1 -0
  53. package/dist/jcs.js +64 -0
  54. package/dist/jcs.js.map +1 -0
  55. package/dist/jws.d.ts +46 -0
  56. package/dist/jws.d.ts.map +1 -0
  57. package/dist/jws.js +129 -0
  58. package/dist/jws.js.map +1 -0
  59. package/dist/payer.d.ts +65 -0
  60. package/dist/payer.d.ts.map +1 -0
  61. package/dist/payer.js +148 -0
  62. package/dist/payer.js.map +1 -0
  63. package/dist/preimage.d.ts +78 -0
  64. package/dist/preimage.d.ts.map +1 -0
  65. package/dist/preimage.js +363 -0
  66. package/dist/preimage.js.map +1 -0
  67. package/dist/receipt-lane.d.ts +235 -0
  68. package/dist/receipt-lane.d.ts.map +1 -0
  69. package/dist/receipt-lane.js +446 -0
  70. package/dist/receipt-lane.js.map +1 -0
  71. package/dist/receipt-version.d.ts +98 -0
  72. package/dist/receipt-version.d.ts.map +1 -0
  73. package/dist/receipt-version.js +364 -0
  74. package/dist/receipt-version.js.map +1 -0
  75. package/dist/refusal.d.ts +93 -0
  76. package/dist/refusal.d.ts.map +1 -0
  77. package/dist/refusal.js +249 -0
  78. package/dist/refusal.js.map +1 -0
  79. package/dist/request-binding.d.ts +7 -0
  80. package/dist/request-binding.d.ts.map +1 -0
  81. package/dist/request-binding.js +26 -0
  82. package/dist/request-binding.js.map +1 -0
  83. package/dist/row-hash.d.ts +22 -0
  84. package/dist/row-hash.d.ts.map +1 -0
  85. package/dist/row-hash.js +26 -0
  86. package/dist/row-hash.js.map +1 -0
  87. package/dist/shell.d.ts +65 -0
  88. package/dist/shell.d.ts.map +1 -0
  89. package/dist/shell.js +268 -0
  90. package/dist/shell.js.map +1 -0
  91. package/dist/solana-payer.d.ts +99 -0
  92. package/dist/solana-payer.d.ts.map +1 -0
  93. package/dist/solana-payer.js +258 -0
  94. package/dist/solana-payer.js.map +1 -0
  95. package/dist/v11-receipt.d.ts +23 -0
  96. package/dist/v11-receipt.d.ts.map +1 -0
  97. package/dist/v11-receipt.js +368 -0
  98. package/dist/v11-receipt.js.map +1 -0
  99. package/dist/verdict.d.ts +94 -0
  100. package/dist/verdict.d.ts.map +1 -0
  101. package/dist/verdict.js +381 -0
  102. package/dist/verdict.js.map +1 -0
  103. package/issuer-history.snapshot.json +1 -0
  104. package/package.json +32 -22
  105. package/cli.js +0 -42
  106. package/index.cjs +0 -8
  107. package/index.d.ts +0 -5
  108. package/index.js +0 -7
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ /**
3
+ * Exact-type allowlist for receipt versions.
4
+ *
5
+ * The signed JWS payload is the only version that counts. `Number()` and
6
+ * `parseInt` are not used: strings, booleans, arrays, null, and non-integers
7
+ * are unsupported. JSON `11.0` and `1.1e1` are the number 11 after parse.
8
+ *
9
+ * `hmac_attestation.payload_version` is the HMAC field-list version (5 or 8).
10
+ * It is not a copy of the JWS payload version. chit-1ebc5616 is signed
11
+ * payload_version 6 with HMAC 8. That pair still verifies.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.UPGRADE_HINT = exports.INVALID_JWS = exports.VERSION_MISMATCH = exports.UNSUPPORTED_VERSION = exports.VERIFIER_MIN = exports.SUPPORTED_RECEIPT_VERSIONS = exports.REFUSAL_EXACT_VERSIONS = exports.UNVERSIONED_OUTER_VERSIONS = exports.V11_VERSION = exports.ISSUER_ROOT_PAYLOAD_VERSION = exports.LEGACY_PAYLOAD_VERSIONS = void 0;
15
+ exports.isPlainObject = isPlainObject;
16
+ exports.isJsonInteger = isJsonInteger;
17
+ exports.claimsAreUnversionedV4V5 = claimsAreUnversionedV4V5;
18
+ exports.unversionedOuterVersion = unversionedOuterVersion;
19
+ exports.readSignedClaims = readSignedClaims;
20
+ exports.classifySignedClaims = classifySignedClaims;
21
+ exports.signedClaimsOnAllowlist = signedClaimsOnAllowlist;
22
+ exports.legacyIdentityErrors = legacyIdentityErrors;
23
+ exports.classifyReceiptDocument = classifyReceiptDocument;
24
+ exports.classifyShellDocument = classifyShellDocument;
25
+ exports.formatSupportedReceiptVersions = formatSupportedReceiptVersions;
26
+ exports.refusalPayloadVersion = refusalPayloadVersion;
27
+ exports.LEGACY_PAYLOAD_VERSIONS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
28
+ exports.ISSUER_ROOT_PAYLOAD_VERSION = 11;
29
+ exports.V11_VERSION = 11;
30
+ exports.UNVERSIONED_OUTER_VERSIONS = [4, 5];
31
+ exports.REFUSAL_EXACT_VERSIONS = [1, 2, 3];
32
+ exports.SUPPORTED_RECEIPT_VERSIONS = {
33
+ v: [exports.V11_VERSION],
34
+ payload_version: [...exports.LEGACY_PAYLOAD_VERSIONS, exports.ISSUER_ROOT_PAYLOAD_VERSION],
35
+ refusal_payload_version: [...exports.REFUSAL_EXACT_VERSIONS],
36
+ legacy_unversioned_outer: [...exports.UNVERSIONED_OUTER_VERSIONS],
37
+ };
38
+ exports.VERIFIER_MIN = '0.3.5';
39
+ exports.UNSUPPORTED_VERSION = 'unsupported_version';
40
+ exports.VERSION_MISMATCH = 'version_mismatch';
41
+ exports.INVALID_JWS = 'invalid_jws';
42
+ exports.UPGRADE_HINT = 'this receipt requires a verifier newer than @xfuel/verify 0.3.5';
43
+ /** Named claims on the Sep 4–5 object JWS (payload v4/v5), without a signed version. */
44
+ const UNVERSIONED_TOP = new Set([
45
+ 'task_id',
46
+ 'iss',
47
+ 'iat',
48
+ 'payment',
49
+ 'provider_cogs',
50
+ 'route',
51
+ 'output',
52
+ 'binding',
53
+ 'caller_binding',
54
+ ]);
55
+ const UNVERSIONED_PAYMENT = new Set([
56
+ 'rail',
57
+ 'ref',
58
+ 'gross_amount',
59
+ 'net_amount',
60
+ 'fee_amount',
61
+ 'protocol_fee_bps',
62
+ 'platform_fee',
63
+ 'platform_fee_bps',
64
+ 'fee_bps',
65
+ ]);
66
+ const UNVERSIONED_COGS = new Set(['actual']);
67
+ const UNVERSIONED_ROUTE = new Set(['model', 'model_commitment', 'provider']);
68
+ const UNVERSIONED_OUTPUT = new Set(['hash']);
69
+ const UNVERSIONED_BINDING = new Set(['expected_commitment']);
70
+ const UNVERSIONED_CALLER = new Set(['payer_wallet', 'agent_pubkey', 'api_key_hash']);
71
+ function hasOwn(obj, key) {
72
+ return Object.prototype.hasOwnProperty.call(obj, key);
73
+ }
74
+ function isPlainObject(value) {
75
+ return !!value && typeof value === 'object' && !Array.isArray(value);
76
+ }
77
+ /** JSON number that is a whole integer. Rejects strings, booleans, arrays, and floats. */
78
+ function isJsonInteger(value) {
79
+ return typeof value === 'number' && Number.isInteger(value);
80
+ }
81
+ function fail(reason, extra = []) {
82
+ const errors = reason === exports.UNSUPPORTED_VERSION
83
+ ? [exports.UNSUPPORTED_VERSION, ...extra, exports.UPGRADE_HINT]
84
+ : [reason, ...extra];
85
+ return { ok: false, reason, errors };
86
+ }
87
+ function subset(value, allowed) {
88
+ if (value == null)
89
+ return true;
90
+ if (!isPlainObject(value))
91
+ return false;
92
+ return Object.keys(value).every((key) => allowed.has(key));
93
+ }
94
+ /** True when every claim key belongs to the v4/v5 object, before v6 fields existed. */
95
+ function claimsAreUnversionedV4V5(claims) {
96
+ if (!Object.keys(claims).every((key) => UNVERSIONED_TOP.has(key)))
97
+ return false;
98
+ if (!subset(claims.payment, UNVERSIONED_PAYMENT))
99
+ return false;
100
+ if (!subset(claims.provider_cogs, UNVERSIONED_COGS))
101
+ return false;
102
+ if (!subset(claims.route, UNVERSIONED_ROUTE))
103
+ return false;
104
+ if (isPlainObject(claims.route) && claims.route.model_commitment != null && isPlainObject(claims.route.model_commitment)) {
105
+ if (!subset(claims.route.model_commitment, new Set(['commitment'])))
106
+ return false;
107
+ }
108
+ if (!subset(claims.output, UNVERSIONED_OUTPUT))
109
+ return false;
110
+ if (!subset(claims.binding, UNVERSIONED_BINDING))
111
+ return false;
112
+ if (!subset(claims.caller_binding, UNVERSIONED_CALLER))
113
+ return false;
114
+ return true;
115
+ }
116
+ function stamped(container) {
117
+ if (!isPlainObject(container) || !hasOwn(container, 'payload_version')) {
118
+ return { present: false, value: undefined };
119
+ }
120
+ if (container.payload_version == null)
121
+ return { present: false, value: undefined };
122
+ return { present: true, value: container.payload_version };
123
+ }
124
+ /**
125
+ * Outer payload_version slots that may name a v4/v5 receipt whose JWS
126
+ * itself has no version. They must all be the same integer, 4 or 5.
127
+ */
128
+ function unversionedOuterVersion(receipt) {
129
+ const slots = [
130
+ stamped(receipt.issuer_signature),
131
+ stamped(receipt.hmac_attestation),
132
+ stamped(receipt.signature),
133
+ ].filter((slot) => slot.present);
134
+ if (slots.length === 0)
135
+ return null;
136
+ const first = slots[0].value;
137
+ if (!isJsonInteger(first) || (first !== 4 && first !== 5))
138
+ return null;
139
+ for (const slot of slots) {
140
+ if (!Object.is(slot.value, first))
141
+ return null;
142
+ }
143
+ return first;
144
+ }
145
+ function outerV(receipt) {
146
+ if (!hasOwn(receipt, 'v') || receipt.v == null)
147
+ return { present: false, value: undefined };
148
+ return { present: true, value: receipt.v };
149
+ }
150
+ function versionsAgree(signed, outer) {
151
+ if (!outer.present)
152
+ return true;
153
+ if (typeof signed !== typeof outer.value)
154
+ return false;
155
+ return Object.is(signed, outer.value);
156
+ }
157
+ /**
158
+ * Signed `v: 11` agrees with an outer `issuer_signature.payload_version` of
159
+ * the number 11. That is the gateway's non-enumerable v11 stamp. Any other
160
+ * value or type is a mismatch. A missing stamp agrees.
161
+ */
162
+ function v11PayloadStampAgrees(outer) {
163
+ if (!outer.present)
164
+ return true;
165
+ return typeof outer.value === 'number' && outer.value === 11;
166
+ }
167
+ function readSignedClaims(jws) {
168
+ if (typeof jws !== 'string' || jws.length === 0)
169
+ return { ok: false, reason: exports.INVALID_JWS };
170
+ const parts = jws.split('.');
171
+ if (parts.length < 2 || !parts[1])
172
+ return { ok: false, reason: exports.INVALID_JWS };
173
+ let text;
174
+ try {
175
+ text = Buffer.from(parts[1], 'base64url').toString('utf8');
176
+ }
177
+ catch {
178
+ return { ok: false, reason: exports.INVALID_JWS };
179
+ }
180
+ if (!text)
181
+ return { ok: false, reason: exports.INVALID_JWS };
182
+ let parsed;
183
+ try {
184
+ parsed = JSON.parse(text);
185
+ }
186
+ catch {
187
+ return { ok: false, reason: exports.INVALID_JWS };
188
+ }
189
+ if (!isPlainObject(parsed))
190
+ return { ok: false, reason: exports.UNSUPPORTED_VERSION };
191
+ return { ok: true, claims: parsed };
192
+ }
193
+ /**
194
+ * Allowlist on the signed claims. `outer` is the receipt document.
195
+ * Pass null to ignore outer copies (builders, claims-only checks).
196
+ */
197
+ function classifySignedClaims(claims, outer) {
198
+ if (!isPlainObject(claims))
199
+ return fail(exports.UNSUPPORTED_VERSION);
200
+ const hasV = hasOwn(claims, 'v');
201
+ const hasPv = hasOwn(claims, 'payload_version');
202
+ const outerDoc = outer && isPlainObject(outer) ? outer : null;
203
+ const outerVersion = outerDoc ? stamped(outerDoc.issuer_signature) : { present: false, value: undefined };
204
+ const topV = outerDoc ? outerV(outerDoc) : { present: false, value: undefined };
205
+ if (hasV && hasPv) {
206
+ const extra = typeof claims.v === 'number' && claims.v === 11 ? ['v11_disallowed_field'] : [];
207
+ return fail(exports.UNSUPPORTED_VERSION, extra);
208
+ }
209
+ if (hasV) {
210
+ if (!(typeof claims.v === 'number' && claims.v === 11))
211
+ return fail(exports.UNSUPPORTED_VERSION);
212
+ if (outerDoc && !versionsAgree(11, topV))
213
+ return fail(exports.VERSION_MISMATCH);
214
+ if (outerDoc && !v11PayloadStampAgrees(outerVersion))
215
+ return fail(exports.VERSION_MISMATCH);
216
+ return { ok: true, family: 'v11', version: 11, version_source: 'signed' };
217
+ }
218
+ if (hasPv) {
219
+ const version = claims.payload_version;
220
+ const issuerRoot = hasOwn(claims, 'issuer_root')
221
+ && claims.issuer_root != null
222
+ && typeof claims.issuer_root === 'object';
223
+ const legacy = isJsonInteger(version) && exports.LEGACY_PAYLOAD_VERSIONS.includes(version);
224
+ const root = isJsonInteger(version) && version === exports.ISSUER_ROOT_PAYLOAD_VERSION && issuerRoot;
225
+ if (!legacy && !root)
226
+ return fail(exports.UNSUPPORTED_VERSION);
227
+ if (outerDoc && !versionsAgree(version, outerVersion))
228
+ return fail(exports.VERSION_MISMATCH);
229
+ if (outerDoc && topV.present)
230
+ return fail(exports.VERSION_MISMATCH);
231
+ return { ok: true, family: 'legacy', version: version, version_source: 'signed' };
232
+ }
233
+ if (!claimsAreUnversionedV4V5(claims))
234
+ return fail(exports.UNSUPPORTED_VERSION);
235
+ if (!outerDoc)
236
+ return fail(exports.UNSUPPORTED_VERSION);
237
+ if (topV.present)
238
+ return fail(exports.VERSION_MISMATCH);
239
+ const inferred = unversionedOuterVersion(outerDoc);
240
+ if (inferred == null)
241
+ return fail(exports.UNSUPPORTED_VERSION);
242
+ return { ok: true, family: 'legacy', version: inferred, version_source: 'inferred' };
243
+ }
244
+ /** True when the signed claims are on the allowlist. Outer copies are not checked. */
245
+ function signedClaimsOnAllowlist(claims) {
246
+ const decision = classifySignedClaims(claims, null);
247
+ return decision.ok === true;
248
+ }
249
+ const UUID_BODY = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
250
+ /**
251
+ * UUID ids must match the receipt version. Non-uuid task ids are documented
252
+ * legacy formats and are not this check. A wrong prefix is reported even
253
+ * when the version is otherwise unsupported.
254
+ */
255
+ function legacyIdentityErrors(receipt) {
256
+ if (!isPlainObject(receipt))
257
+ return [];
258
+ const signature = receipt.issuer_signature;
259
+ const jws = isPlainObject(signature) ? signature.jws : undefined;
260
+ if (typeof jws !== 'string' || jws.length === 0)
261
+ return [];
262
+ const read = readSignedClaims(jws);
263
+ if (!read.ok)
264
+ return [];
265
+ const claims = read.claims;
266
+ let version = null;
267
+ if (hasOwn(claims, 'v') && isJsonInteger(claims.v))
268
+ version = claims.v;
269
+ else if (hasOwn(claims, 'payload_version') && isJsonInteger(claims.payload_version))
270
+ version = claims.payload_version;
271
+ const legacy = version == null || version <= 11;
272
+ const errors = [];
273
+ for (const id of [claims.task_id, claims.receipt_id]) {
274
+ if (typeof id !== 'string')
275
+ continue;
276
+ const match = /^(chit|xfuel)-(.+)$/i.exec(id);
277
+ if (!match || !UUID_BODY.test(match[2]))
278
+ continue;
279
+ const prefix = match[1].toLowerCase();
280
+ if ((legacy && prefix === 'chit') || (!legacy && prefix === 'xfuel')) {
281
+ errors.push('id_prefix_version_mismatch');
282
+ break;
283
+ }
284
+ }
285
+ if (legacy && hasOwn(claims, 'intent'))
286
+ errors.push('intent_on_legacy_version');
287
+ return errors;
288
+ }
289
+ function classifyReceiptDocument(receipt) {
290
+ if (!isPlainObject(receipt))
291
+ return fail(exports.UNSUPPORTED_VERSION);
292
+ const signature = receipt.issuer_signature;
293
+ const jws = isPlainObject(signature) ? signature.jws : undefined;
294
+ // A jws that is present but not a string is a malformed JWS, not an
295
+ // unsigned receipt. Later code would call .split() on it and throw.
296
+ if (jws != null && typeof jws !== 'string')
297
+ return fail(exports.INVALID_JWS);
298
+ if (typeof jws !== 'string' || jws.length === 0) {
299
+ return { ok: true, family: 'unsigned' };
300
+ }
301
+ const read = readSignedClaims(jws);
302
+ if (!read.ok) {
303
+ return read.reason === exports.UNSUPPORTED_VERSION ? fail(exports.UNSUPPORTED_VERSION) : fail(exports.INVALID_JWS);
304
+ }
305
+ return classifySignedClaims(read.claims, receipt);
306
+ }
307
+ /**
308
+ * Public shell with no holder JWS. Exact types. Unknown versions are not
309
+ * INCLUDED_SHELL. null payload_version is not a version.
310
+ */
311
+ function classifyShellDocument(shell) {
312
+ if (!isPlainObject(shell))
313
+ return fail(exports.UNSUPPORTED_VERSION);
314
+ const hasV = hasOwn(shell, 'v') && shell.v != null;
315
+ const hasPv = hasOwn(shell, 'payload_version') && shell.payload_version != null;
316
+ if (hasV) {
317
+ if (!(typeof shell.v === 'number' && shell.v === 11))
318
+ return fail(exports.UNSUPPORTED_VERSION);
319
+ if (hasPv && !(typeof shell.payload_version === 'number' && shell.payload_version === 11)) {
320
+ return fail(exports.VERSION_MISMATCH);
321
+ }
322
+ return { ok: true };
323
+ }
324
+ if (!hasPv)
325
+ return fail(exports.UNSUPPORTED_VERSION);
326
+ const version = shell.payload_version;
327
+ if (!isJsonInteger(version))
328
+ return fail(exports.UNSUPPORTED_VERSION);
329
+ if (exports.LEGACY_PAYLOAD_VERSIONS.includes(version))
330
+ return { ok: true };
331
+ const root = version === 11 && shell.issuer_root != null && typeof shell.issuer_root === 'object';
332
+ if (root)
333
+ return { ok: true };
334
+ return fail(exports.UNSUPPORTED_VERSION);
335
+ }
336
+ function formatSupportedReceiptVersions() {
337
+ return [
338
+ 'Supported receipt versions (signed payload, exact JSON numbers):',
339
+ ` v: ${exports.SUPPORTED_RECEIPT_VERSIONS.v.join(', ')}`,
340
+ ` payload_version: ${exports.LEGACY_PAYLOAD_VERSIONS.join(', ')}, and 11 only with a signed issuer_root`,
341
+ ` refusal payload_version: ${exports.REFUSAL_EXACT_VERSIONS.join(', ')}`,
342
+ ' unversioned JWS: outer version 4 or 5 and no field introduced at v6 or later (version_source: inferred)',
343
+ 'Unknown versions fail closed: unsupported_version, exit 2.',
344
+ `Receipts issued after 2026-10-08 require chit402-verify >= ${exports.VERIFIER_MIN}.`,
345
+ 'Older verifiers may print VERIFIED for formats they do not understand.',
346
+ ].join('\n');
347
+ }
348
+ /** Legacy refusal versions. Exact integers. v11 refusals use the v: 11 rule. */
349
+ function refusalPayloadVersion(claims) {
350
+ if (!isPlainObject(claims))
351
+ return { ok: false, reason: exports.UNSUPPORTED_VERSION };
352
+ if (hasOwn(claims, 'v')) {
353
+ if (typeof claims.v === 'number' && claims.v === 11 && !hasOwn(claims, 'payload_version')) {
354
+ return { ok: false, reason: exports.UNSUPPORTED_VERSION };
355
+ }
356
+ return { ok: false, reason: exports.UNSUPPORTED_VERSION };
357
+ }
358
+ const version = claims.payload_version;
359
+ if (!isJsonInteger(version) || !exports.REFUSAL_EXACT_VERSIONS.includes(version)) {
360
+ return { ok: false, reason: exports.UNSUPPORTED_VERSION };
361
+ }
362
+ return { ok: true, version: version };
363
+ }
364
+ //# sourceMappingURL=receipt-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-version.js","sourceRoot":"","sources":["../src/receipt-version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Offline check for a chit402.refusal.v1 document.
3
+ *
4
+ * Same ES256 issuer key and JWKS trust rules as a payment receipt.
5
+ * A refusal is not a payment. verifyReceipt refuses to treat one as spend.
6
+ */
7
+ import { type Es256Jwk } from './jws.js';
8
+ import { type RequestBindingStatus } from './request-binding.js';
9
+ export declare const REFUSAL_SCHEMA = "chit402.refusal.v1";
10
+ export declare const REFUSAL_SCHEMA_V2 = "chit402.refusal.v2";
11
+ /** Versions a verifier accepts. Version 1 has no history pin. Version 3 is refusal v2. */
12
+ export declare const REFUSAL_PAYLOAD_VERSIONS: readonly [1, 2, 3];
13
+ /** Current issuance version. Version 1 still verifies. */
14
+ export declare const REFUSAL_PAYLOAD_VERSION = 2;
15
+ export declare const REFUSAL_PROVES: string[];
16
+ export declare const REFUSAL_DOES_NOT_PROVE: string[];
17
+ export interface RefusalJwks {
18
+ keys: Es256Jwk[];
19
+ }
20
+ export interface RefusalAnchor {
21
+ status?: string;
22
+ rail?: string;
23
+ chain_id?: number | null;
24
+ block_number?: string | null;
25
+ block_hash?: string | null;
26
+ state_root?: string | null;
27
+ }
28
+ export interface RefusalBookRow {
29
+ task_id?: string;
30
+ seq?: number;
31
+ prev_hash?: string | null;
32
+ row_hash?: string;
33
+ event?: string;
34
+ }
35
+ export interface RefusalDocument {
36
+ schema?: string;
37
+ payload_version?: number;
38
+ kind?: string;
39
+ refusal_id?: string;
40
+ nonce?: string;
41
+ issued_at?: string;
42
+ refusal_code?: string;
43
+ agent_id?: number;
44
+ book_id?: number;
45
+ task_id?: string;
46
+ amount_requested?: string | null;
47
+ chain_id?: number | null;
48
+ anchor?: RefusalAnchor | null;
49
+ book_row?: RefusalBookRow | null;
50
+ charged?: boolean;
51
+ amount_charged?: string;
52
+ issuer_signature?: {
53
+ jws?: string;
54
+ kid?: string;
55
+ issuer_jwk?: Es256Jwk;
56
+ };
57
+ }
58
+ export interface RefusalVerification {
59
+ schema: typeof REFUSAL_SCHEMA;
60
+ valid: boolean;
61
+ checked: boolean;
62
+ reason?: string;
63
+ kid?: string | null;
64
+ refusal_id?: string | null;
65
+ refusal_code?: string | null;
66
+ nonce?: string | null;
67
+ chain_id?: number | null;
68
+ charged: false;
69
+ proves: string[];
70
+ does_not_prove: string[];
71
+ errors: string[];
72
+ payload_version?: number;
73
+ issuer_history?: {
74
+ hash?: string;
75
+ version?: number;
76
+ seq?: number;
77
+ } | null;
78
+ payload_hash?: string | null;
79
+ request_binding?: RequestBindingStatus | null;
80
+ }
81
+ /** Schema inside the JWS payload. Unverified; callers still check the signature. */
82
+ export declare function jwsPayloadSchema(doc: unknown): string | null;
83
+ export declare function isRefusalDocument(doc: unknown): doc is RefusalDocument;
84
+ /**
85
+ * Verify the issuer signature and that the outer refusal fields match it.
86
+ * Trust is a JWKS key matched by kid, or an embedded key whose thumbprint
87
+ * is a pinned trusted kid. The embedded key alone is not a trust root.
88
+ */
89
+ export declare function verifyRefusal(doc: RefusalDocument, options?: {
90
+ jwks?: RefusalJwks;
91
+ trustedKids?: readonly string[];
92
+ }): RefusalVerification;
93
+ //# sourceMappingURL=refusal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":"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"}