@xfuel/verify 0.3.1 → 0.3.3

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 (56) hide show
  1. package/README.md +16 -6
  2. package/dist/anchor-trust.d.ts +129 -0
  3. package/dist/anchor-trust.d.ts.map +1 -0
  4. package/dist/anchor-trust.js +395 -0
  5. package/dist/anchor-trust.js.map +1 -0
  6. package/dist/anchor-witness.d.ts +114 -4
  7. package/dist/anchor-witness.d.ts.map +1 -1
  8. package/dist/anchor-witness.js +419 -32
  9. package/dist/anchor-witness.js.map +1 -1
  10. package/dist/carry-forward.d.ts +79 -0
  11. package/dist/carry-forward.d.ts.map +1 -0
  12. package/dist/carry-forward.js +184 -0
  13. package/dist/carry-forward.js.map +1 -0
  14. package/dist/cli.js +525 -41
  15. package/dist/cli.js.map +1 -1
  16. package/dist/epoch.d.ts +41 -7
  17. package/dist/epoch.d.ts.map +1 -1
  18. package/dist/epoch.js +143 -0
  19. package/dist/epoch.js.map +1 -1
  20. package/dist/index.d.ts +64 -6
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +338 -96
  23. package/dist/index.js.map +1 -1
  24. package/dist/issuer-history.d.ts +19 -0
  25. package/dist/issuer-history.d.ts.map +1 -1
  26. package/dist/issuer-history.js +131 -75
  27. package/dist/issuer-history.js.map +1 -1
  28. package/dist/issuer-pin.d.ts +126 -0
  29. package/dist/issuer-pin.d.ts.map +1 -0
  30. package/dist/issuer-pin.js +567 -0
  31. package/dist/issuer-pin.js.map +1 -0
  32. package/dist/preimage.d.ts +29 -0
  33. package/dist/preimage.d.ts.map +1 -1
  34. package/dist/preimage.js +162 -2
  35. package/dist/preimage.js.map +1 -1
  36. package/dist/receipt-lane.d.ts +1 -0
  37. package/dist/receipt-lane.d.ts.map +1 -1
  38. package/dist/receipt-lane.js +5 -2
  39. package/dist/receipt-lane.js.map +1 -1
  40. package/dist/refusal.d.ts +5 -2
  41. package/dist/refusal.d.ts.map +1 -1
  42. package/dist/refusal.js +28 -6
  43. package/dist/refusal.js.map +1 -1
  44. package/dist/request-binding.d.ts +7 -0
  45. package/dist/request-binding.d.ts.map +1 -0
  46. package/dist/request-binding.js +26 -0
  47. package/dist/request-binding.js.map +1 -0
  48. package/dist/row-hash.d.ts +22 -0
  49. package/dist/row-hash.d.ts.map +1 -0
  50. package/dist/row-hash.js +26 -0
  51. package/dist/row-hash.js.map +1 -0
  52. package/dist/v11-receipt.d.ts +21 -0
  53. package/dist/v11-receipt.d.ts.map +1 -0
  54. package/dist/v11-receipt.js +351 -0
  55. package/dist/v11-receipt.js.map +1 -0
  56. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.boundRowHash = boundRowHash;
4
+ /**
5
+ * Leaf input for `task_id|row_hash`.
6
+ * Same order as verifyAnchoredRoot: top-level row_hash, then book_chain, then
7
+ * the inclusion or carry document. One source is enough. Two or three that
8
+ * differ fail closed. The value used for the leaf is the one they agree on.
9
+ * No string at all is `row: null`. An empty string is a present source.
10
+ */
11
+ function boundRowHash(receipt, extra) {
12
+ const present = [];
13
+ if (typeof receipt.row_hash === 'string')
14
+ present.push(receipt.row_hash);
15
+ if (typeof receipt.book_chain?.row_hash === 'string')
16
+ present.push(receipt.book_chain.row_hash);
17
+ if (typeof extra?.row_hash === 'string')
18
+ present.push(extra.row_hash);
19
+ if (present.length === 0)
20
+ return { ok: true, row: null };
21
+ const agreed = present[0];
22
+ if (present.some((value) => value !== agreed))
23
+ return { ok: false, reason: 'row_hash_mismatch' };
24
+ return { ok: true, row: agreed };
25
+ }
26
+ //# sourceMappingURL=row-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-hash.js","sourceRoot":"","sources":["../src/row-hash.ts"],"names":[],"mappings":";;AAOA,oCAYC;AAnBD;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,OAAuF,EACvF,KAA2C;IAE3C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,IAAI,OAAO,OAAO,CAAC,UAAU,EAAE,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAChG,IAAI,OAAO,KAAK,EAAE,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACjG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ReceiptVerification, VerifyReceiptOptions, XFuelReceipt } from './index.js';
2
+ export declare const V11_SIGNED_FIELDS: readonly ["v", "receipt_id", "iss", "kid", "issued_at", "asset", "chain", "pay_to", "amount_gross", "amount_settled", "payment_tx", "payer", "book_ref", "seq", "request_digest", "output_commitment", "accounting_commitment", "routing_commitment", "product", "proof_tier", "covers"];
3
+ export declare const V11_REFUSAL_FIELDS: readonly ["v", "refusal_id", "iss", "kid", "issued_at", "reason", "request_digest", "refusal_commitment"];
4
+ export declare function hkdfSubkey(saltHex: string, label: string): Buffer;
5
+ export declare function commitHmac(subkey: Buffer, message: Buffer | string): string;
6
+ /**
7
+ * Distinct rejection reasons. The salt is not lowercased, trimmed, or stripped.
8
+ * @returns null when the salt is 64 lowercase hex chars.
9
+ */
10
+ export declare function v11SaltRejection(salt: string): string | null;
11
+ export declare function verifyV11Receipt(receipt: XFuelReceipt, options?: VerifyReceiptOptions): Promise<ReceiptVerification>;
12
+ /** payment_unbound plus a sub-reason. Chain, tx, payee, payer, and amounts. */
13
+ export declare function paymentBindingErrors(payload: Record<string, unknown>): string[];
14
+ export declare function verifyReceiptUpToV10(receipt: XFuelReceipt, options: VerifyReceiptOptions, full: (receipt: XFuelReceipt, options: VerifyReceiptOptions) => Promise<ReceiptVerification>): Promise<ReceiptVerification>;
15
+ export declare function readOpenFile(spec: string): {
16
+ kind: 'output' | 'accounting' | 'routing' | 'refusal';
17
+ bytes: Buffer;
18
+ text: string;
19
+ };
20
+ export declare function sha256Hex(bytes: Buffer | string): string;
21
+ //# sourceMappingURL=v11-receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11-receipt.d.ts","sourceRoot":"","sources":["../src/v11-receipt.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1F,eAAO,MAAM,iBAAiB,0RAsBpB,CAAC;AAEX,eAAO,MAAM,kBAAkB,2GASrB,CAAC;AAmBX,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAG3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM5D;AA+ED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAuBD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAmB/E;AAgCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,mBAAmB,CAAC,GAC3F,OAAO,CAAC,mBAAmB,CAAC,CAoB9B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAUjI;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAExD"}
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.V11_REFUSAL_FIELDS = exports.V11_SIGNED_FIELDS = void 0;
4
+ exports.hkdfSubkey = hkdfSubkey;
5
+ exports.commitHmac = commitHmac;
6
+ exports.v11SaltRejection = v11SaltRejection;
7
+ exports.verifyV11Receipt = verifyV11Receipt;
8
+ exports.paymentBindingErrors = paymentBindingErrors;
9
+ exports.verifyReceiptUpToV10 = verifyReceiptUpToV10;
10
+ exports.readOpenFile = readOpenFile;
11
+ exports.sha256Hex = sha256Hex;
12
+ /**
13
+ * v11 receipt checks.
14
+ *
15
+ * Stranger mode: signature, strict field set, 64-hex commitments, payment
16
+ * binding. Holder mode adds `--salt` and `--open`. A malformed salt is
17
+ * rejected and never lowercased or stripped.
18
+ *
19
+ * amount_gross is the quoted price (integer > 0). amount_settled is the
20
+ * amount transferred by the bound payment (integer >= amount_gross). A
21
+ * missing, non-integer, or short settled amount is payment_unbound.
22
+ *
23
+ * verifyReceiptUpToV10 refuses v >= 11 before that path runs.
24
+ */
25
+ const node_crypto_1 = require("node:crypto");
26
+ const node_fs_1 = require("node:fs");
27
+ const payer_js_1 = require("./payer.js");
28
+ exports.V11_SIGNED_FIELDS = [
29
+ 'v',
30
+ 'receipt_id',
31
+ 'iss',
32
+ 'kid',
33
+ 'issued_at',
34
+ 'asset',
35
+ 'chain',
36
+ 'pay_to',
37
+ 'amount_gross',
38
+ 'amount_settled',
39
+ 'payment_tx',
40
+ 'payer',
41
+ 'book_ref',
42
+ 'seq',
43
+ 'request_digest',
44
+ 'output_commitment',
45
+ 'accounting_commitment',
46
+ 'routing_commitment',
47
+ 'product',
48
+ 'proof_tier',
49
+ 'covers',
50
+ ];
51
+ exports.V11_REFUSAL_FIELDS = [
52
+ 'v',
53
+ 'refusal_id',
54
+ 'iss',
55
+ 'kid',
56
+ 'issued_at',
57
+ 'reason',
58
+ 'request_digest',
59
+ 'refusal_commitment',
60
+ ];
61
+ const DISALLOWED = new Set([
62
+ 'internal_breakdown',
63
+ 'provider',
64
+ 'model',
65
+ 'cap',
66
+ 'spent',
67
+ 'prompt_tokens',
68
+ 'completion_tokens',
69
+ 'total_tokens',
70
+ 'output_hash',
71
+ 'claim_id',
72
+ 'book_id',
73
+ 'agent_id',
74
+ ]);
75
+ const HEX64 = /^[0-9a-f]{64}$/;
76
+ function hkdfSubkey(saltHex, label) {
77
+ return Buffer.from((0, node_crypto_1.hkdfSync)('sha256', Buffer.from(saltHex, 'hex'), Buffer.alloc(0), Buffer.from(label, 'utf8'), 32));
78
+ }
79
+ function commitHmac(subkey, message) {
80
+ const bytes = Buffer.isBuffer(message) ? message : Buffer.from(message, 'utf8');
81
+ return (0, node_crypto_1.createHmac)('sha256', subkey).update(bytes).digest('hex');
82
+ }
83
+ /**
84
+ * Distinct rejection reasons. The salt is not lowercased, trimmed, or stripped.
85
+ * @returns null when the salt is 64 lowercase hex chars.
86
+ */
87
+ function v11SaltRejection(salt) {
88
+ if (typeof salt !== 'string')
89
+ return 'salt_length';
90
+ if (salt.startsWith('0x') || salt.startsWith('0X'))
91
+ return 'salt_prefix';
92
+ if (/[A-F]/.test(salt))
93
+ return 'salt_uppercase';
94
+ if (!/^[0-9a-f]{64}$/.test(salt))
95
+ return 'salt_length';
96
+ return null;
97
+ }
98
+ function walkDisallowed(value, errors) {
99
+ if (Array.isArray(value)) {
100
+ for (const item of value)
101
+ walkDisallowed(item, errors);
102
+ return;
103
+ }
104
+ if (!value || typeof value !== 'object') {
105
+ if (typeof value === 'string' && value.includes('ISSUER_PRIVATE_KEY'))
106
+ errors.push('v11_disallowed_field');
107
+ return;
108
+ }
109
+ for (const [key, child] of Object.entries(value)) {
110
+ if (DISALLOWED.has(key) || key === 'salt' || key === 'request_preimage')
111
+ errors.push('v11_disallowed_field');
112
+ else
113
+ walkDisallowed(child, errors);
114
+ }
115
+ }
116
+ function shell(receipt, errors, issuer, lane) {
117
+ const failed = errors.length > 0 || issuer.valid !== true;
118
+ const payload = issuer.payload || {};
119
+ return {
120
+ receipt_id: String(receipt.receipt_id || payload.receipt_id || receipt.task_id || ''),
121
+ binding: {
122
+ verified: issuer.valid === true && !errors.some((e) => e.startsWith('v11_')),
123
+ expected: typeof payload.payment_tx === 'string' ? payload.payment_tx : null,
124
+ recomputed: null,
125
+ matches: issuer.valid === true,
126
+ covers: ['payment'],
127
+ reason: errors[0],
128
+ },
129
+ issuer_signature: issuer,
130
+ payer: {
131
+ checked: false,
132
+ valid: false,
133
+ payer_wallet: typeof payload.payer === 'string' ? payload.payer : null,
134
+ payee: typeof payload.pay_to === 'string' ? payload.pay_to : null,
135
+ asset: typeof payload.asset === 'string' ? payload.asset : null,
136
+ amount: typeof payload.amount_gross === 'string' ? payload.amount_gross : null,
137
+ reason: 'not_checked',
138
+ },
139
+ nullifier: { verified: false, nullifier: null, anchored: null, reason: 'tier1' },
140
+ output_hash: null,
141
+ hub: null,
142
+ model: null,
143
+ amount_usdc: issuer.valid && typeof payload.amount_gross === 'string' ? payload.amount_gross : null,
144
+ tx: issuer.valid && typeof payload.payment_tx === 'string' ? payload.payment_tx : null,
145
+ claim_mismatches: [],
146
+ unsigned_fields: [],
147
+ verified_scope: 'signed_claims',
148
+ claim_id: 'not_present_legacy',
149
+ head_binding: null,
150
+ receipt_lane: lane,
151
+ preimages: { checked: false, ok: true, errors: [], fields: [] },
152
+ issuer_history: {
153
+ checked: false,
154
+ ok: true,
155
+ unreachable: false,
156
+ warning: null,
157
+ reason: null,
158
+ kid: issuer.kid ?? null,
159
+ document: null,
160
+ loaded: false,
161
+ },
162
+ warnings: [],
163
+ overall: failed ? 'failed' : 'verified',
164
+ errors,
165
+ };
166
+ }
167
+ function payloadOf(receipt) {
168
+ if (!receipt?.issuer_signature?.jws)
169
+ return null;
170
+ return (0, payer_js_1.decodeJwsPayload)(receipt.issuer_signature.jws);
171
+ }
172
+ async function verifyV11Receipt(receipt, options = {}) {
173
+ const errors = [];
174
+ const { verifyIssuerSignatureWithJwks: verifySig, loadIssuerJwks, receiptLaneFromVerification } = await import('./index.js');
175
+ const loaded = await loadIssuerJwks(receipt, {
176
+ jwks: options.jwks,
177
+ jwksUri: options.jwksUri,
178
+ fetchJwks: options.fetchJwks,
179
+ trustedJwksHosts: options.trustedJwksHosts,
180
+ fetchImpl: options.fetchImpl,
181
+ });
182
+ errors.push(...loaded.errors);
183
+ const issuer = verifySig(receipt, loaded.jwks, { trustedKids: options.trustedKids });
184
+ if (!issuer.valid)
185
+ errors.push(issuer.reason || 'signature_invalid');
186
+ const payload = (issuer.payload || payloadOf(receipt) || {});
187
+ const refusal = payload.reason === 'cap_exceeded' && payload.refusal_id != null;
188
+ const fields = refusal ? exports.V11_REFUSAL_FIELDS : exports.V11_SIGNED_FIELDS;
189
+ const keys = Object.keys(payload);
190
+ if (keys.some((key) => !fields.includes(key)))
191
+ errors.push('v11_disallowed_field');
192
+ for (const key of fields) {
193
+ if (!Object.prototype.hasOwnProperty.call(payload, key))
194
+ errors.push('v11_disallowed_field');
195
+ }
196
+ walkDisallowed(receipt, errors);
197
+ if (!refusal) {
198
+ for (const key of ['output_commitment', 'accounting_commitment', 'routing_commitment', 'request_digest']) {
199
+ if (typeof payload[key] !== 'string' || !HEX64.test(payload[key]))
200
+ errors.push('commitment_malformed');
201
+ }
202
+ if (typeof payload.book_ref !== 'string' || !/^[0-9a-f]{32}$/.test(payload.book_ref))
203
+ errors.push('commitment_malformed');
204
+ errors.push(...paymentBindingErrors(payload));
205
+ }
206
+ else {
207
+ for (const key of ['request_digest', 'refusal_commitment']) {
208
+ if (typeof payload[key] !== 'string' || !HEX64.test(payload[key]))
209
+ errors.push('commitment_malformed');
210
+ }
211
+ if (payload.reason !== 'cap_exceeded')
212
+ errors.push('v11_disallowed_field');
213
+ }
214
+ if (typeof payload.issued_at !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z$/.test(payload.issued_at)) {
215
+ errors.push('issued_at_precision');
216
+ }
217
+ if (options.salt != null && options.salt !== '') {
218
+ const saltReason = v11SaltRejection(options.salt);
219
+ if (saltReason)
220
+ errors.push(saltReason);
221
+ else if (options.open)
222
+ openHolder(options.salt, payload, options.open, errors);
223
+ }
224
+ const unique = [...new Set(errors)];
225
+ const lane = receiptLaneFromVerification({
226
+ receipt: receipt,
227
+ claims: null,
228
+ issuerValid: issuer.valid === true,
229
+ payer: { checked: false, valid: false },
230
+ head: null,
231
+ });
232
+ const signed = issuer.valid ? issuer : { ...issuer, payload: (issuer.payload || payload) };
233
+ return shell(receipt, unique, signed, lane);
234
+ }
235
+ const EVM_ADDR = /^0x[0-9a-fA-F]{40}$/;
236
+ const EVM_TX = /^0x[0-9a-fA-F]{64}$/;
237
+ const BASE58 = /^[1-9A-HJ-NP-Za-km-z]+$/;
238
+ function atomicInteger(value) {
239
+ if (typeof value !== 'string' || !/^\d+$/.test(value))
240
+ return null;
241
+ try {
242
+ return BigInt(value);
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ function solanaAccount(value) {
249
+ return typeof value === 'string' && value.length >= 32 && value.length <= 44 && BASE58.test(value);
250
+ }
251
+ function solanaTx(value) {
252
+ return typeof value === 'string' && value.length >= 64 && value.length <= 128 && BASE58.test(value);
253
+ }
254
+ /** payment_unbound plus a sub-reason. Chain, tx, payee, payer, and amounts. */
255
+ function paymentBindingErrors(payload) {
256
+ const errors = [];
257
+ const chain = payload.chain;
258
+ if (chain !== 'base' && chain !== 'solana')
259
+ errors.push('payment_unbound:chain');
260
+ else if (chain === 'base') {
261
+ if (typeof payload.payment_tx !== 'string' || !EVM_TX.test(payload.payment_tx))
262
+ errors.push('payment_unbound:payment_tx');
263
+ if (typeof payload.pay_to !== 'string' || !EVM_ADDR.test(payload.pay_to))
264
+ errors.push('payment_unbound:pay_to');
265
+ if (typeof payload.payer !== 'string' || !EVM_ADDR.test(payload.payer))
266
+ errors.push('payment_unbound:payer');
267
+ }
268
+ else {
269
+ if (!solanaTx(payload.payment_tx))
270
+ errors.push('payment_unbound:payment_tx');
271
+ if (!solanaAccount(payload.pay_to))
272
+ errors.push('payment_unbound:pay_to');
273
+ if (!solanaAccount(payload.payer))
274
+ errors.push('payment_unbound:payer');
275
+ }
276
+ const gross = atomicInteger(payload.amount_gross);
277
+ const settled = atomicInteger(payload.amount_settled);
278
+ if (gross == null || gross <= 0n)
279
+ errors.push('payment_unbound:amount_gross');
280
+ else if (settled == null || settled < gross)
281
+ errors.push('payment_unbound:amount_settled');
282
+ if (errors.length)
283
+ errors.unshift('payment_unbound');
284
+ return errors;
285
+ }
286
+ function openHolder(salt, payload, open, errors) {
287
+ const check = (label, message, field) => {
288
+ const got = commitHmac(hkdfSubkey(salt, label), message);
289
+ if (got !== payload[field])
290
+ errors.push('commitment_mismatch');
291
+ };
292
+ if (open.output != null)
293
+ check('v11/output', open.output, 'output_commitment');
294
+ if (open.accounting != null)
295
+ check('v11/accounting', canonicalJson(open.accounting), 'accounting_commitment');
296
+ if (open.routing != null)
297
+ check('v11/routing', canonicalJson(open.routing), 'routing_commitment');
298
+ if (open.refusal != null)
299
+ check('v11/refusal', canonicalJson(open.refusal), 'refusal_commitment');
300
+ }
301
+ /** RFC 8785 for the small opening objects the holder supplies. */
302
+ function canonicalJson(text) {
303
+ const value = JSON.parse(text);
304
+ return jcs(value);
305
+ }
306
+ function jcs(value) {
307
+ if (value === null || typeof value !== 'object')
308
+ return JSON.stringify(value);
309
+ if (Array.isArray(value))
310
+ return `[${value.map((item) => jcs(item)).join(',')}]`;
311
+ const obj = value;
312
+ const keys = Object.keys(obj).sort();
313
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${jcs(obj[key])}`).join(',')}}`;
314
+ }
315
+ async function verifyReceiptUpToV10(receipt, options, full) {
316
+ const decoded = receipt?.issuer_signature?.jws ? (0, payer_js_1.decodeJwsPayload)(receipt.issuer_signature.jws) : null;
317
+ const version = Number(decoded?.v ?? decoded?.payload_version);
318
+ if (Number.isFinite(version) && version >= 11) {
319
+ const { receiptLaneFromVerification } = await import('./index.js');
320
+ const lane = receiptLaneFromVerification({
321
+ receipt: receipt,
322
+ claims: null,
323
+ issuerValid: false,
324
+ payer: { checked: false, valid: false },
325
+ head: null,
326
+ });
327
+ return shell(receipt, ['unsupported_version'], {
328
+ checked: true,
329
+ valid: false,
330
+ key_trusted: false,
331
+ reason: 'unsupported_version',
332
+ }, lane);
333
+ }
334
+ return full(receipt, options);
335
+ }
336
+ function readOpenFile(spec) {
337
+ const eq = spec.indexOf('=');
338
+ if (eq < 1)
339
+ throw new Error('--open expects output=<file>, accounting=<file>, routing=<file>, or refusal=<file>');
340
+ const kind = spec.slice(0, eq);
341
+ if (kind !== 'output' && kind !== 'accounting' && kind !== 'routing' && kind !== 'refusal') {
342
+ throw new Error('--open expects output=<file>, accounting=<file>, routing=<file>, or refusal=<file>');
343
+ }
344
+ const file = spec.slice(eq + 1);
345
+ const bytes = (0, node_fs_1.readFileSync)(file);
346
+ return { kind, bytes, text: bytes.toString('utf8') };
347
+ }
348
+ function sha256Hex(bytes) {
349
+ return (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex');
350
+ }
351
+ //# sourceMappingURL=v11-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11-receipt.js","sourceRoot":"","sources":["../src/v11-receipt.ts"],"names":[],"mappings":";;;AAsEA,gCAEC;AAED,gCAGC;AAMD,4CAMC;AA+ED,4CAuDC;AAwBD,oDAmBC;AAgCD,oDAwBC;AAED,oCAUC;AAED,8BAEC;AAlVD;;;;;;;;;;;;GAYG;AACH,6CAA+D;AAC/D,qCAAuC;AAEvC,yCAA8C;AAEjC,QAAA,iBAAiB,GAAG;IAC/B,GAAG;IACH,YAAY;IACZ,KAAK;IACL,KAAK;IACL,WAAW;IACX,OAAO;IACP,OAAO;IACP,QAAQ;IACR,cAAc;IACd,gBAAgB;IAChB,YAAY;IACZ,OAAO;IACP,UAAU;IACV,KAAK;IACL,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;IACvB,oBAAoB;IACpB,SAAS;IACT,YAAY;IACZ,QAAQ;CACA,CAAC;AAEE,QAAA,kBAAkB,GAAG;IAChC,GAAG;IACH,YAAY;IACZ,KAAK;IACL,KAAK;IACL,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;CACZ,CAAC;AAEX,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,oBAAoB;IACpB,UAAU;IACV,OAAO;IACP,KAAK;IACL,OAAO;IACP,eAAe;IACf,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,UAAU;IACV,SAAS;IACT,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAE/B,SAAgB,UAAU,CAAC,OAAe,EAAE,KAAa;IACvD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAA,sBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc,EAAE,OAAwB;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChF,OAAO,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC;IACnD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IACzE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAC;IAChD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,MAAgB;IACtD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC3G,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,kBAAkB;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;;YACxG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CACZ,OAAqB,EACrB,MAAgB,EAChB,MAA+C,EAC/C,IAAyC;IAEzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,OAAO;QACL,UAAU,EAAE,MAAM,CAAE,OAAmC,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAClH,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5E,QAAQ,EAAE,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YAC5E,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;YAC9B,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;SAClB;QACD,gBAAgB,EAAE,MAAM;QACxB,KAAK,EAAE;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACtE,KAAK,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACjE,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC/D,MAAM,EAAE,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;YAC9E,MAAM,EAAE,aAAa;SACtB;QACD,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAChF,WAAW,EAAE,IAAI;QACjB,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACnG,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;QACtF,gBAAgB,EAAE,EAAE;QACpB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,eAAe;QAC/B,QAAQ,EAAE,oBAAoB;QAC9B,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/D,cAAc,EAAE;YACd,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,KAAK;YAClB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,IAAI;YACvB,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,KAAK;SACd;QACD,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QACvC,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,OAAqB;IACtC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,IAAA,2BAAgB,EAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,OAAqB,EACrB,UAAgC,EAAE;IAElC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,6BAA6B,EAAE,SAAS,EAAE,cAAc,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE;QAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAChF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,0BAAkB,CAAC,CAAC,CAAC,yBAAiB,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAY,CAAC,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC5F,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC/F,CAAC;IACD,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACzG,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC1H,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAW,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACzG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,UAAU;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACnC,IAAI,OAAO,CAAC,IAAI;YAAE,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,2BAA2B,CAAC;QACvC,OAAO,EAAE,OAAgB;QACzB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI;QAClC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QACvC,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAuD,EAAE,CAAC;IACjJ,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC;AACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEzC,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtG,CAAC;AAED,+EAA+E;AAC/E,SAAgB,oBAAoB,CAAC,OAAgC;IACnE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SAC5E,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC1B,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1H,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAChH,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC/G,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC7E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;SACzE,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,MAAM;QAAE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CACjB,IAAY,EACZ,OAAgC,EAChC,IAA+C,EAC/C,MAAgB;IAEhB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,OAAwB,EAAE,KAAa,EAAE,EAAE;QACvE,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC,CAAC;IACF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;QAAE,KAAK,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAC9G,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAClG,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACpG,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IAC1C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,GAAG,CAAC,KAAc;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACjF,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACvF,CAAC;AAEM,KAAK,UAAU,oBAAoB,CACxC,OAAqB,EACrB,OAA6B,EAC7B,IAA4F;IAE5F,MAAM,OAAO,GAAG,OAAO,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC,IAAA,2BAAgB,EAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,eAAe,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,2BAA2B,CAAC;YACvC,OAAO,EAAE,OAAgB;YACzB,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YACvC,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC,EAAE;YAC7C,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,qBAAqB;SAC9B,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IAClH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3F,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,SAAgB,SAAS,CAAC,KAAsB;IAC9C,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xfuel/verify",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Offline verification for Chit402 receipts — verify payment binding and output hash without calling the API",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",