chit402-verify 0.3.5 → 0.4.1

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 +2086 -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 +98 -0
  100. package/dist/verdict.d.ts.map +1 -0
  101. package/dist/verdict.js +390 -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,23 @@
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
+ /** Failed receipt. amount, payer, and tx stay null. Does not throw. */
12
+ export declare function rejectReceiptVersion(receipt: XFuelReceipt | null | undefined, errors: string[], reason: string): Promise<ReceiptVerification>;
13
+ export declare function verifyV11Receipt(receipt: XFuelReceipt, options?: VerifyReceiptOptions): Promise<ReceiptVerification>;
14
+ /** payment_unbound plus a sub-reason. Chain, tx, payee, payer, and amounts. */
15
+ export declare function paymentBindingErrors(payload: Record<string, unknown>): string[];
16
+ export declare function verifyReceiptUpToV10(receipt: XFuelReceipt, options: VerifyReceiptOptions, full: (receipt: XFuelReceipt, options: VerifyReceiptOptions) => Promise<ReceiptVerification>): Promise<ReceiptVerification>;
17
+ export declare function readOpenFile(spec: string): {
18
+ kind: 'output' | 'accounting' | 'routing' | 'refusal';
19
+ bytes: Buffer;
20
+ text: string;
21
+ };
22
+ export declare function sha256Hex(bytes: Buffer | string): string;
23
+ //# 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":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1F,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,uEAAuE;AACvE,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,EACxC,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAgB9B;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CA0D9B;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,CAU9B;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,368 @@
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.rejectReceiptVersion = rejectReceiptVersion;
8
+ exports.verifyV11Receipt = verifyV11Receipt;
9
+ exports.paymentBindingErrors = paymentBindingErrors;
10
+ exports.verifyReceiptUpToV10 = verifyReceiptUpToV10;
11
+ exports.readOpenFile = readOpenFile;
12
+ exports.sha256Hex = sha256Hex;
13
+ /**
14
+ * v11 receipt checks.
15
+ *
16
+ * Stranger mode: signature, strict field set, 64-hex commitments, payment
17
+ * binding. Holder mode adds `--salt` and `--open`. A malformed salt is
18
+ * rejected and never lowercased or stripped.
19
+ *
20
+ * amount_gross is the quoted price (integer > 0). amount_settled is the
21
+ * amount transferred by the bound payment (integer >= amount_gross). A
22
+ * missing, non-integer, or short settled amount is payment_unbound.
23
+ *
24
+ * verifyReceiptUpToV10 refuses anything outside the legacy 1–10 allowlist
25
+ * before that path runs.
26
+ */
27
+ const node_crypto_1 = require("node:crypto");
28
+ const node_fs_1 = require("node:fs");
29
+ const payer_js_1 = require("./payer.js");
30
+ const receipt_version_js_1 = require("./receipt-version.js");
31
+ exports.V11_SIGNED_FIELDS = [
32
+ 'v',
33
+ 'receipt_id',
34
+ 'iss',
35
+ 'kid',
36
+ 'issued_at',
37
+ 'asset',
38
+ 'chain',
39
+ 'pay_to',
40
+ 'amount_gross',
41
+ 'amount_settled',
42
+ 'payment_tx',
43
+ 'payer',
44
+ 'book_ref',
45
+ 'seq',
46
+ 'request_digest',
47
+ 'output_commitment',
48
+ 'accounting_commitment',
49
+ 'routing_commitment',
50
+ 'product',
51
+ 'proof_tier',
52
+ 'covers',
53
+ ];
54
+ exports.V11_REFUSAL_FIELDS = [
55
+ 'v',
56
+ 'refusal_id',
57
+ 'iss',
58
+ 'kid',
59
+ 'issued_at',
60
+ 'reason',
61
+ 'request_digest',
62
+ 'refusal_commitment',
63
+ ];
64
+ const DISALLOWED = new Set([
65
+ 'internal_breakdown',
66
+ 'provider',
67
+ 'model',
68
+ 'cap',
69
+ 'spent',
70
+ 'prompt_tokens',
71
+ 'completion_tokens',
72
+ 'total_tokens',
73
+ 'output_hash',
74
+ 'claim_id',
75
+ 'book_id',
76
+ 'agent_id',
77
+ ]);
78
+ const HEX64 = /^[0-9a-f]{64}$/;
79
+ function hkdfSubkey(saltHex, label) {
80
+ return Buffer.from((0, node_crypto_1.hkdfSync)('sha256', Buffer.from(saltHex, 'hex'), Buffer.alloc(0), Buffer.from(label, 'utf8'), 32));
81
+ }
82
+ function commitHmac(subkey, message) {
83
+ const bytes = Buffer.isBuffer(message) ? message : Buffer.from(message, 'utf8');
84
+ return (0, node_crypto_1.createHmac)('sha256', subkey).update(bytes).digest('hex');
85
+ }
86
+ /**
87
+ * Distinct rejection reasons. The salt is not lowercased, trimmed, or stripped.
88
+ * @returns null when the salt is 64 lowercase hex chars.
89
+ */
90
+ function v11SaltRejection(salt) {
91
+ if (typeof salt !== 'string')
92
+ return 'salt_length';
93
+ if (salt.startsWith('0x') || salt.startsWith('0X'))
94
+ return 'salt_prefix';
95
+ if (/[A-F]/.test(salt))
96
+ return 'salt_uppercase';
97
+ if (!/^[0-9a-f]{64}$/.test(salt))
98
+ return 'salt_length';
99
+ return null;
100
+ }
101
+ function walkDisallowed(value, errors) {
102
+ if (Array.isArray(value)) {
103
+ for (const item of value)
104
+ walkDisallowed(item, errors);
105
+ return;
106
+ }
107
+ if (!value || typeof value !== 'object') {
108
+ if (typeof value === 'string' && value.includes('ISSUER_PRIVATE_KEY'))
109
+ errors.push('v11_disallowed_field');
110
+ return;
111
+ }
112
+ for (const [key, child] of Object.entries(value)) {
113
+ if (DISALLOWED.has(key) || key === 'salt' || key === 'request_preimage')
114
+ errors.push('v11_disallowed_field');
115
+ else
116
+ walkDisallowed(child, errors);
117
+ }
118
+ }
119
+ function shell(receipt, errors, issuer, lane) {
120
+ const failed = errors.length > 0 || issuer.valid !== true;
121
+ const payload = issuer.payload || {};
122
+ return {
123
+ receipt_id: String(receipt.receipt_id || payload.receipt_id || receipt.task_id || ''),
124
+ binding: {
125
+ verified: issuer.valid === true && !errors.some((e) => e.startsWith('v11_')),
126
+ expected: typeof payload.payment_tx === 'string' ? payload.payment_tx : null,
127
+ recomputed: null,
128
+ matches: issuer.valid === true,
129
+ covers: ['payment'],
130
+ reason: errors[0],
131
+ },
132
+ issuer_signature: issuer,
133
+ payer: {
134
+ checked: false,
135
+ valid: false,
136
+ payer_wallet: typeof payload.payer === 'string' ? payload.payer : null,
137
+ payee: typeof payload.pay_to === 'string' ? payload.pay_to : null,
138
+ asset: typeof payload.asset === 'string' ? payload.asset : null,
139
+ amount: typeof payload.amount_gross === 'string' ? payload.amount_gross : null,
140
+ reason: 'not_checked',
141
+ },
142
+ nullifier: { verified: false, nullifier: null, anchored: null, reason: 'tier1' },
143
+ output_hash: null,
144
+ hub: null,
145
+ model: null,
146
+ amount_usdc: issuer.valid && typeof payload.amount_gross === 'string' ? payload.amount_gross : null,
147
+ tx: issuer.valid && typeof payload.payment_tx === 'string' ? payload.payment_tx : null,
148
+ claim_mismatches: [],
149
+ unsigned_fields: [],
150
+ verified_scope: 'signed_claims',
151
+ claim_id: 'not_present_legacy',
152
+ head_binding: null,
153
+ receipt_lane: lane,
154
+ preimages: { checked: false, ok: true, errors: [], fields: [] },
155
+ issuer_history: {
156
+ checked: false,
157
+ ok: true,
158
+ unreachable: false,
159
+ warning: null,
160
+ reason: null,
161
+ kid: issuer.kid ?? null,
162
+ document: null,
163
+ loaded: false,
164
+ },
165
+ warnings: [],
166
+ overall: failed ? 'failed' : 'verified',
167
+ errors,
168
+ };
169
+ }
170
+ function payloadOf(receipt) {
171
+ if (!receipt?.issuer_signature?.jws)
172
+ return null;
173
+ return (0, payer_js_1.decodeJwsPayload)(receipt.issuer_signature.jws);
174
+ }
175
+ /** Failed receipt. amount, payer, and tx stay null. Does not throw. */
176
+ async function rejectReceiptVersion(receipt, errors, reason) {
177
+ const { receiptLaneFromVerification } = await import('./index.js');
178
+ const doc = (receipt && typeof receipt === 'object' ? receipt : {});
179
+ const lane = receiptLaneFromVerification({
180
+ receipt: doc,
181
+ claims: null,
182
+ issuerValid: false,
183
+ payer: { checked: false, valid: false },
184
+ head: null,
185
+ });
186
+ return shell(doc, errors, {
187
+ checked: true,
188
+ valid: false,
189
+ key_trusted: false,
190
+ reason,
191
+ }, lane);
192
+ }
193
+ async function verifyV11Receipt(receipt, options = {}) {
194
+ const gate = (0, receipt_version_js_1.classifyReceiptDocument)(receipt);
195
+ if (!gate.ok || gate.family !== 'v11') {
196
+ const errors = gate.ok ? ['unsupported_version'] : gate.errors;
197
+ const reason = gate.ok ? 'unsupported_version' : gate.reason;
198
+ return rejectReceiptVersion(receipt, errors, reason);
199
+ }
200
+ const errors = [];
201
+ const { verifyIssuerSignatureWithJwks: verifySig, loadIssuerJwks, receiptLaneFromVerification } = await import('./index.js');
202
+ const loaded = await loadIssuerJwks(receipt, {
203
+ jwks: options.jwks,
204
+ jwksUri: options.jwksUri,
205
+ fetchJwks: options.fetchJwks,
206
+ trustedJwksHosts: options.trustedJwksHosts,
207
+ fetchImpl: options.fetchImpl,
208
+ });
209
+ errors.push(...loaded.errors);
210
+ const issuer = verifySig(receipt, loaded.jwks, { trustedKids: options.trustedKids });
211
+ if (!issuer.valid)
212
+ errors.push(issuer.reason || 'signature_invalid');
213
+ const payload = (issuer.payload || payloadOf(receipt) || {});
214
+ const refusal = payload.reason === 'cap_exceeded' && payload.refusal_id != null;
215
+ const fields = refusal ? exports.V11_REFUSAL_FIELDS : exports.V11_SIGNED_FIELDS;
216
+ const keys = Object.keys(payload);
217
+ if (keys.some((key) => !fields.includes(key)))
218
+ errors.push('v11_disallowed_field');
219
+ for (const key of fields) {
220
+ if (!Object.prototype.hasOwnProperty.call(payload, key))
221
+ errors.push('v11_disallowed_field');
222
+ }
223
+ walkDisallowed(receipt, errors);
224
+ if (!refusal) {
225
+ for (const key of ['output_commitment', 'accounting_commitment', 'routing_commitment', 'request_digest']) {
226
+ if (typeof payload[key] !== 'string' || !HEX64.test(payload[key]))
227
+ errors.push('commitment_malformed');
228
+ }
229
+ if (typeof payload.book_ref !== 'string' || !/^[0-9a-f]{32}$/.test(payload.book_ref))
230
+ errors.push('commitment_malformed');
231
+ errors.push(...paymentBindingErrors(payload));
232
+ }
233
+ else {
234
+ for (const key of ['request_digest', 'refusal_commitment']) {
235
+ if (typeof payload[key] !== 'string' || !HEX64.test(payload[key]))
236
+ errors.push('commitment_malformed');
237
+ }
238
+ if (payload.reason !== 'cap_exceeded')
239
+ errors.push('v11_disallowed_field');
240
+ }
241
+ if (typeof payload.issued_at !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}Z$/.test(payload.issued_at)) {
242
+ errors.push('issued_at_precision');
243
+ }
244
+ if (options.salt != null && options.salt !== '') {
245
+ const saltReason = v11SaltRejection(options.salt);
246
+ if (saltReason)
247
+ errors.push(saltReason);
248
+ else if (options.open)
249
+ openHolder(options.salt, payload, options.open, errors);
250
+ }
251
+ const unique = [...new Set(errors)];
252
+ const lane = receiptLaneFromVerification({
253
+ receipt: receipt,
254
+ claims: null,
255
+ issuerValid: issuer.valid === true,
256
+ payer: { checked: false, valid: false },
257
+ head: null,
258
+ });
259
+ const signed = issuer.valid ? issuer : { ...issuer, payload: (issuer.payload || payload) };
260
+ return shell(receipt, unique, signed, lane);
261
+ }
262
+ const EVM_ADDR = /^0x[0-9a-fA-F]{40}$/;
263
+ const EVM_TX = /^0x[0-9a-fA-F]{64}$/;
264
+ const BASE58 = /^[1-9A-HJ-NP-Za-km-z]+$/;
265
+ function atomicInteger(value) {
266
+ if (typeof value !== 'string' || !/^\d+$/.test(value))
267
+ return null;
268
+ try {
269
+ return BigInt(value);
270
+ }
271
+ catch {
272
+ return null;
273
+ }
274
+ }
275
+ function solanaAccount(value) {
276
+ return typeof value === 'string' && value.length >= 32 && value.length <= 44 && BASE58.test(value);
277
+ }
278
+ function solanaTx(value) {
279
+ return typeof value === 'string' && value.length >= 64 && value.length <= 128 && BASE58.test(value);
280
+ }
281
+ /** payment_unbound plus a sub-reason. Chain, tx, payee, payer, and amounts. */
282
+ function paymentBindingErrors(payload) {
283
+ const errors = [];
284
+ const chain = payload.chain;
285
+ if (chain !== 'base' && chain !== 'solana')
286
+ errors.push('payment_unbound:chain');
287
+ else if (chain === 'base') {
288
+ if (typeof payload.payment_tx !== 'string' || !EVM_TX.test(payload.payment_tx))
289
+ errors.push('payment_unbound:payment_tx');
290
+ if (typeof payload.pay_to !== 'string' || !EVM_ADDR.test(payload.pay_to))
291
+ errors.push('payment_unbound:pay_to');
292
+ if (typeof payload.payer !== 'string' || !EVM_ADDR.test(payload.payer))
293
+ errors.push('payment_unbound:payer');
294
+ }
295
+ else {
296
+ if (!solanaTx(payload.payment_tx))
297
+ errors.push('payment_unbound:payment_tx');
298
+ if (!solanaAccount(payload.pay_to))
299
+ errors.push('payment_unbound:pay_to');
300
+ if (!solanaAccount(payload.payer))
301
+ errors.push('payment_unbound:payer');
302
+ }
303
+ const gross = atomicInteger(payload.amount_gross);
304
+ const settled = atomicInteger(payload.amount_settled);
305
+ if (gross == null || gross <= 0n)
306
+ errors.push('payment_unbound:amount_gross');
307
+ else if (settled == null || settled < gross)
308
+ errors.push('payment_unbound:amount_settled');
309
+ if (errors.length)
310
+ errors.unshift('payment_unbound');
311
+ return errors;
312
+ }
313
+ function openHolder(salt, payload, open, errors) {
314
+ const check = (label, message, field) => {
315
+ const got = commitHmac(hkdfSubkey(salt, label), message);
316
+ if (got !== payload[field])
317
+ errors.push('commitment_mismatch');
318
+ };
319
+ if (open.output != null)
320
+ check('v11/output', open.output, 'output_commitment');
321
+ if (open.accounting != null)
322
+ check('v11/accounting', canonicalJson(open.accounting), 'accounting_commitment');
323
+ if (open.routing != null)
324
+ check('v11/routing', canonicalJson(open.routing), 'routing_commitment');
325
+ if (open.refusal != null)
326
+ check('v11/refusal', canonicalJson(open.refusal), 'refusal_commitment');
327
+ }
328
+ /** RFC 8785 for the small opening objects the holder supplies. */
329
+ function canonicalJson(text) {
330
+ const value = JSON.parse(text);
331
+ return jcs(value);
332
+ }
333
+ function jcs(value) {
334
+ if (value === null || typeof value !== 'object')
335
+ return JSON.stringify(value);
336
+ if (Array.isArray(value))
337
+ return `[${value.map((item) => jcs(item)).join(',')}]`;
338
+ const obj = value;
339
+ const keys = Object.keys(obj).sort();
340
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${jcs(obj[key])}`).join(',')}}`;
341
+ }
342
+ async function verifyReceiptUpToV10(receipt, options, full) {
343
+ const gate = (0, receipt_version_js_1.classifyReceiptDocument)(receipt);
344
+ const legacy = gate.ok && gate.family === 'legacy' && gate.version >= 1 && gate.version <= 10;
345
+ const unsigned = gate.ok && gate.family === 'unsigned';
346
+ if (!legacy && !unsigned) {
347
+ const errors = gate.ok ? ['unsupported_version'] : gate.errors;
348
+ const reason = gate.ok ? 'unsupported_version' : gate.reason;
349
+ return rejectReceiptVersion(receipt, errors, reason);
350
+ }
351
+ return full(receipt, options);
352
+ }
353
+ function readOpenFile(spec) {
354
+ const eq = spec.indexOf('=');
355
+ if (eq < 1)
356
+ throw new Error('--open expects output=<file>, accounting=<file>, routing=<file>, or refusal=<file>');
357
+ const kind = spec.slice(0, eq);
358
+ if (kind !== 'output' && kind !== 'accounting' && kind !== 'routing' && kind !== 'refusal') {
359
+ throw new Error('--open expects output=<file>, accounting=<file>, routing=<file>, or refusal=<file>');
360
+ }
361
+ const file = spec.slice(eq + 1);
362
+ const bytes = (0, node_fs_1.readFileSync)(file);
363
+ return { kind, bytes, text: bytes.toString('utf8') };
364
+ }
365
+ function sha256Hex(bytes) {
366
+ return (0, node_crypto_1.createHash)('sha256').update(bytes).digest('hex');
367
+ }
368
+ //# sourceMappingURL=v11-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v11-receipt.js","sourceRoot":"","sources":["../src/v11-receipt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * @xfuel/verify 0.4 verdict.
3
+ * `verified` is only when every check passed. A failed check is `invalid`
4
+ * even when another check could not be completed. Human lines for
5
+ * COULD_NOT_CHECK do not contain the words invalid or INVALID.
6
+ */
7
+ export type CheckState = 'pass' | 'fail' | 'could_not_check';
8
+ export type VerdictResult = 'verified' | 'invalid' | 'could_not_check';
9
+ export interface VerdictLog {
10
+ leaf_index: number | null;
11
+ tree_size: number | null;
12
+ root: string | null;
13
+ anchors: {
14
+ base: string | null;
15
+ solana: string | null;
16
+ };
17
+ }
18
+ export interface VerifyVerdict {
19
+ result: VerdictResult;
20
+ exit_code: 0 | 1 | 2;
21
+ reason: string | null;
22
+ message: string;
23
+ next_step: string | null;
24
+ receipt_id: string | null;
25
+ display_id: string | null;
26
+ payload_version: number | null;
27
+ checks: {
28
+ signature: CheckState;
29
+ key_window: CheckState;
30
+ payment_binding: CheckState;
31
+ log_inclusion: CheckState;
32
+ anchor: CheckState;
33
+ shape: CheckState;
34
+ };
35
+ history: {
36
+ source: 'file' | 'live' | 'bundled' | null;
37
+ head_hash: string | null;
38
+ entry_count: number | null;
39
+ as_of: string | null;
40
+ };
41
+ log: VerdictLog | null;
42
+ verifier: {
43
+ name: 'chit402-verify';
44
+ version: string;
45
+ };
46
+ }
47
+ export declare function verdictCopy(reason: string | null, result: VerdictResult): {
48
+ message: string;
49
+ next_step: string | null;
50
+ };
51
+ export interface VerdictInput {
52
+ version: string;
53
+ receiptId?: string | null;
54
+ displayId?: string | null;
55
+ payloadVersion?: number | null;
56
+ historySource?: 'file' | 'live' | 'bundled' | null;
57
+ historyHead?: string | null;
58
+ historyCount?: number | null;
59
+ historyAsOf?: string | null;
60
+ signatureValid?: boolean | null;
61
+ signatureChecked?: boolean;
62
+ historyChecked?: boolean;
63
+ historyOk?: boolean;
64
+ historyReason?: string | null;
65
+ /** Resolver found no document that covers this kid. */
66
+ historyMissing?: boolean;
67
+ bindingExpected?: boolean;
68
+ bindingMatches?: boolean | null;
69
+ claimMismatches?: number;
70
+ payerChecked?: boolean;
71
+ payerValid?: boolean;
72
+ errors?: string[];
73
+ /** `unclaimed` is could_not_check: 0.4 never passes a log or anchor it did not fetch. */
74
+ logInclusion?: CheckState | 'unclaimed';
75
+ anchor?: CheckState | 'unclaimed';
76
+ logReason?: string | null;
77
+ log?: VerdictLog | null;
78
+ /**
79
+ * No receipt was loaded. Every check is `could_not_check` and this string
80
+ * is the reason. History and payment defaults must not run.
81
+ */
82
+ absentReason?: string | null;
83
+ }
84
+ export declare function buildVerifyVerdict(input: VerdictInput): VerifyVerdict;
85
+ export declare function overallLine(verdict: VerifyVerdict, legacyOverall?: string | null): string;
86
+ /** Fragment for `https://chit402.com/docs/verify#`. Ids have no spaces. */
87
+ export declare function verdictDocAnchor(reason: string): string;
88
+ /**
89
+ * Human lines. COULD_NOT_CHECK says the receipt could not be checked.
90
+ * The message line is `verdict.message`, the same string `--json` prints.
91
+ */
92
+ export declare function humanVerdictLines(verdict: VerifyVerdict): string[];
93
+ /**
94
+ * Reason ids printed as `https://chit402.com/docs/verify#<reason>`.
95
+ * The public page must have one element id for each.
96
+ */
97
+ export declare const VERDICT_DOC_ANCHORS: readonly ["not_in_log", "signed_receipt_unavailable", "unsupported_version", "kid_not_in_history", "receipt_unavailable", "log_unreachable", "anchor_unreachable", "pending_anchor", "pending", "kid_status_regression", "kid_revoked_before_issuance", "issued_before_not_before", "issued_after_not_after", "issued_at_missing", "not_before_missing", "not_after_invalid", "revoked_at_missing", "issuer_history_invalid", "issuer_history_pin_mismatch", "issuer_history_pin_missing", "issuer_history_version_mismatch", "issuer_history_seq_mismatch", "issuer_history_not_extension", "signature_invalid", "key_untrusted", "key_window", "version_mismatch", "id_mismatch", "id_prefix_version_mismatch", "intent_on_legacy_version", "payment_mismatch", "log_inclusion", "anchor", "invalid", "signature_unchecked", "could_not_check", "prev_hash_mismatch", "entry_hash_mismatch", "head_hash_mismatch", "introduced_key_signature", "inherited_key_window", "head_signature_missing", "head_signature_invalid", "head_claims_mismatch", "head_key_untrusted", "inclusion_failed", "root_mismatch"];
98
+ //# sourceMappingURL=verdict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.d.ts","sourceRoot":"","sources":["../src/verdict.ts"],"names":[],"mappings":"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"}