@xfuel/verify 0.3.1 → 0.3.4

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 (60) 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 +691 -42
  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 +65 -6
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +348 -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/shell.d.ts +65 -0
  53. package/dist/shell.d.ts.map +1 -0
  54. package/dist/shell.js +268 -0
  55. package/dist/shell.js.map +1 -0
  56. package/dist/v11-receipt.d.ts +21 -0
  57. package/dist/v11-receipt.d.ts.map +1 -0
  58. package/dist/v11-receipt.js +351 -0
  59. package/dist/v11-receipt.js.map +1 -0
  60. 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,65 @@
1
+ export declare const SHELL_SCHEMA = "chit402.receipt_shell.v1";
2
+ export declare const INCLUDED_SHELL_LINE = "INCLUDED_SHELL: signature requires owner view";
3
+ export declare function isReceiptShell(doc: unknown): doc is Record<string, unknown>;
4
+ export declare function decodeJwsPayload(jws: unknown): Record<string, unknown> | null;
5
+ /** Project the public shell from a holder receipt. Leaf proof is not invented. */
6
+ export declare function shellFromHolder(receipt: Record<string, unknown>): Record<string, unknown>;
7
+ /**
8
+ * The owner view returns `{ jws, salt, private_fields }`. A saved holder
9
+ * receipt has `issuer_signature`. Either can be the `--jws` file.
10
+ * An `issuer_jwk` on the owner-view body is ignored. Trust is a pinned
11
+ * kid or a JWKS entry, not a key the response carries.
12
+ */
13
+ export declare function holderDocumentFromOwnerView(doc: Record<string, unknown> | string): Record<string, unknown>;
14
+ export interface ShellHolderCheck {
15
+ signatureValid: boolean;
16
+ keyTrusted: boolean;
17
+ signatureReason?: string | null;
18
+ inclusionSupplied: boolean;
19
+ inclusionOk: boolean;
20
+ inclusionReason?: string | null;
21
+ paymentRef?: string | null;
22
+ bindingExpected?: boolean;
23
+ bindingMatches?: boolean;
24
+ shellLeaf?: string | null;
25
+ provedLeaf?: string | null;
26
+ /** The supplied head carries an issuer JWS (checked by verifyReceipt). */
27
+ headSigned?: boolean;
28
+ }
29
+ /**
30
+ * VERIFIED requires a trusted issuer key, a passing inclusion proof, and a
31
+ * signed payment. A shell alone, a missing proof, or a key that only
32
+ * verifies because it is embedded in the holder is not VERIFIED.
33
+ */
34
+ export declare function shellHolderVerdict(check: ShellHolderCheck): {
35
+ verified: boolean;
36
+ reason: string | null;
37
+ };
38
+ /**
39
+ * Expected shell from the signed JWS claims only. Outer holder fields
40
+ * (payment.settled_amount, payment.network, payment_meta, task_id) are
41
+ * not signed and are not used, so they cannot ride along under VERIFIED.
42
+ */
43
+ export declare function signedShellFromHolder(holder: Record<string, unknown> | string): Record<string, unknown>;
44
+ export declare function compareShellToJws(shell: Record<string, unknown>, holder: Record<string, unknown> | string): {
45
+ ok: boolean;
46
+ field?: string;
47
+ };
48
+ /**
49
+ * v11: body_commitment = HMAC-SHA256(salt, raw body),
50
+ * request_digest = SHA-256 of the JCS object
51
+ * {body_commitment, idempotency_key, method, nonce, path}.
52
+ */
53
+ export declare function openV11Commitment(input: {
54
+ payload: Record<string, unknown> | null;
55
+ saltHex: string;
56
+ body: Buffer | string;
57
+ method?: string;
58
+ path?: string;
59
+ nonce?: string;
60
+ idempotencyKey?: string;
61
+ }): {
62
+ ok: boolean;
63
+ reason?: string;
64
+ };
65
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,mBAAmB,kDAAkD,CAAC;AAEnF,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE3E;AAoBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS7E;AAuBD,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqCzF;AAcD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoC1G;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAyBxG;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMvG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAc3I;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBnC"}
package/dist/shell.js ADDED
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.INCLUDED_SHELL_LINE = exports.SHELL_SCHEMA = void 0;
7
+ exports.isReceiptShell = isReceiptShell;
8
+ exports.decodeJwsPayload = decodeJwsPayload;
9
+ exports.shellFromHolder = shellFromHolder;
10
+ exports.holderDocumentFromOwnerView = holderDocumentFromOwnerView;
11
+ exports.shellHolderVerdict = shellHolderVerdict;
12
+ exports.signedShellFromHolder = signedShellFromHolder;
13
+ exports.compareShellToJws = compareShellToJws;
14
+ exports.openV11Commitment = openV11Commitment;
15
+ /**
16
+ * Public receipt shell verdicts.
17
+ * A shell is inclusion and payment facts without the holder signature.
18
+ * INCLUDED_SHELL is never VERIFIED. A gated URL without the holder JWS
19
+ * is owner_proof_required.
20
+ * `--jws` is VERIFIED only when the holder key is trusted, inclusion
21
+ * passed, and the signed payment is present. The key inside the holder
22
+ * is not a trust root.
23
+ */
24
+ const node_crypto_1 = __importDefault(require("node:crypto"));
25
+ exports.SHELL_SCHEMA = 'chit402.receipt_shell.v1';
26
+ exports.INCLUDED_SHELL_LINE = 'INCLUDED_SHELL: signature requires owner view';
27
+ function isReceiptShell(doc) {
28
+ return !!doc && typeof doc === 'object' && doc.schema === exports.SHELL_SCHEMA;
29
+ }
30
+ function jcs(value) {
31
+ return JSON.stringify(canonicalize(value));
32
+ }
33
+ function canonicalize(value) {
34
+ if (Array.isArray(value))
35
+ return value.map(canonicalize);
36
+ if (value && typeof value === 'object') {
37
+ const out = {};
38
+ for (const key of Object.keys(value).sort()) {
39
+ const child = value[key];
40
+ if (child === undefined)
41
+ continue;
42
+ out[key] = canonicalize(child);
43
+ }
44
+ return out;
45
+ }
46
+ return value;
47
+ }
48
+ function decodeJwsPayload(jws) {
49
+ if (typeof jws !== 'string')
50
+ return null;
51
+ const parts = jws.split('.');
52
+ if (parts.length !== 3)
53
+ return null;
54
+ try {
55
+ return JSON.parse(Buffer.from(parts[1], 'base64url').toString('utf8'));
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ function minuteIso(value) {
62
+ if (value == null || value === '')
63
+ return null;
64
+ const ms = typeof value === 'number'
65
+ ? (value < 1e12 ? value * 1000 : value)
66
+ : Date.parse(String(value));
67
+ if (!Number.isFinite(ms))
68
+ return null;
69
+ const date = new Date(ms);
70
+ date.setUTCSeconds(0, 0);
71
+ return date.toISOString();
72
+ }
73
+ function paymentOf(claims, receipt) {
74
+ const payment = (claims?.payment && typeof claims.payment === 'object')
75
+ ? claims.payment
76
+ : {};
77
+ const outer = (receipt.payment && typeof receipt.payment === 'object')
78
+ ? receipt.payment
79
+ : {};
80
+ return { ...outer, ...payment };
81
+ }
82
+ /** Project the public shell from a holder receipt. Leaf proof is not invented. */
83
+ function shellFromHolder(receipt) {
84
+ const issuer = (receipt.issuer_signature && typeof receipt.issuer_signature === 'object')
85
+ ? receipt.issuer_signature
86
+ : {};
87
+ const claims = decodeJwsPayload(issuer.jws) || {};
88
+ const payment = paymentOf(claims, receipt);
89
+ const ref = String(payment.ref || '');
90
+ const prefix = ref.includes(':') ? ref.slice(0, ref.indexOf(':')) : '';
91
+ const network = String(payment.network || receipt.payment_meta?.network || prefix || '');
92
+ const tx = ref.includes(':') ? ref.slice(ref.indexOf(':') + 1) : (ref || null);
93
+ const receiptId = (receipt.task_id || claims.task_id || receipt.receipt_id || null);
94
+ const gross = payment.gross_amount ?? null;
95
+ const settled = payment.settled_amount ?? null;
96
+ const inclusion = (receipt.inclusion && typeof receipt.inclusion === 'object')
97
+ ? receipt.inclusion
98
+ : null;
99
+ return {
100
+ schema: exports.SHELL_SCHEMA,
101
+ unsigned: true,
102
+ receipt_id: receiptId,
103
+ task_id: receiptId,
104
+ payload_version: claims.payload_version ?? issuer.payload_version ?? null,
105
+ asset: payment.asset || 'USDC',
106
+ chain: network || null,
107
+ pay_to: payment.payee ?? null,
108
+ amount_gross: gross == null ? null : String(gross),
109
+ amount_settled: settled == null ? null : String(settled),
110
+ payment_tx: tx,
111
+ issued_at: minuteIso(claims.iat ?? receipt.created_at ?? receipt.issued_at ?? null),
112
+ inclusion: {
113
+ leaf_hash: inclusion?.leaf || inclusion?.leaf_hash || null,
114
+ proof: inclusion?.proof ?? null,
115
+ signed_head: inclusion?.root
116
+ ? { root: inclusion.root, tree_size: inclusion.tree_size ?? null, signature: null }
117
+ : null,
118
+ },
119
+ };
120
+ }
121
+ const COMPARE_FIELDS = [
122
+ 'receipt_id',
123
+ 'payload_version',
124
+ 'asset',
125
+ 'chain',
126
+ 'pay_to',
127
+ 'amount_gross',
128
+ 'amount_settled',
129
+ 'payment_tx',
130
+ 'issued_at',
131
+ ];
132
+ /**
133
+ * The owner view returns `{ jws, salt, private_fields }`. A saved holder
134
+ * receipt has `issuer_signature`. Either can be the `--jws` file.
135
+ * An `issuer_jwk` on the owner-view body is ignored. Trust is a pinned
136
+ * kid or a JWKS entry, not a key the response carries.
137
+ */
138
+ function holderDocumentFromOwnerView(doc) {
139
+ if (typeof doc === 'string') {
140
+ const compact = doc.trim();
141
+ if (compact.split('.').length === 3)
142
+ return holderDocumentFromOwnerView({ jws: compact });
143
+ throw new Error('holder is not a receipt or an owner-view response');
144
+ }
145
+ const signature = doc.issuer_signature;
146
+ if (signature && typeof signature === 'object' && typeof signature.jws === 'string') {
147
+ return doc;
148
+ }
149
+ const jws = typeof doc.jws === 'string' ? doc.jws : null;
150
+ if (!jws || jws.split('.').length !== 3) {
151
+ throw new Error('owner view is missing the holder JWS');
152
+ }
153
+ const claims = decodeJwsPayload(jws) || {};
154
+ let kid;
155
+ try {
156
+ const header = JSON.parse(Buffer.from(jws.split('.')[0], 'base64url').toString('utf8'));
157
+ if (typeof header.kid === 'string')
158
+ kid = header.kid;
159
+ }
160
+ catch {
161
+ kid = undefined;
162
+ }
163
+ // Owner view carries this receipt's own book row hash so the leaf
164
+ // task_id|row_hash can be rebuilt. It is not a signed claim; the leaf
165
+ // still has to be in a signed tree head.
166
+ const rowHash = typeof doc.row_hash === 'string' && /^[0-9a-f]{64}$/i.test(doc.row_hash) ? doc.row_hash : null;
167
+ return {
168
+ ...claims,
169
+ task_id: claims.task_id ?? null,
170
+ ...(rowHash ? { book_chain: { row_hash: rowHash } } : {}),
171
+ issuer_signature: {
172
+ jws,
173
+ kid,
174
+ payload_version: claims.payload_version ?? null,
175
+ },
176
+ };
177
+ }
178
+ /**
179
+ * VERIFIED requires a trusted issuer key, a passing inclusion proof, and a
180
+ * signed payment. A shell alone, a missing proof, or a key that only
181
+ * verifies because it is embedded in the holder is not VERIFIED.
182
+ */
183
+ function shellHolderVerdict(check) {
184
+ if (!check.signatureValid || !check.keyTrusted) {
185
+ return { verified: false, reason: check.signatureReason || 'key untrusted' };
186
+ }
187
+ if (!check.inclusionSupplied || !check.inclusionOk) {
188
+ return { verified: false, reason: check.inclusionReason || 'inclusion_missing' };
189
+ }
190
+ const shellLeaf = check.shellLeaf ? String(check.shellLeaf).replace(/^0x/i, '').toLowerCase() : '';
191
+ const proved = check.provedLeaf ? String(check.provedLeaf).replace(/^0x/i, '').toLowerCase() : '';
192
+ if (shellLeaf && proved && shellLeaf !== proved) {
193
+ return { verified: false, reason: 'inclusion_mismatch' };
194
+ }
195
+ if (shellLeaf && !proved) {
196
+ return { verified: false, reason: 'inclusion_mismatch' };
197
+ }
198
+ // A {root, tree_size} written by hand (or a proof's own root) is not a log.
199
+ if (check.headSigned !== true) {
200
+ return { verified: false, reason: 'head_signature_missing' };
201
+ }
202
+ const ref = check.paymentRef ? String(check.paymentRef) : '';
203
+ if (!ref)
204
+ return { verified: false, reason: 'payment_unchecked' };
205
+ if (check.bindingExpected && !check.bindingMatches) {
206
+ return { verified: false, reason: 'payment_unchecked' };
207
+ }
208
+ return { verified: true, reason: null };
209
+ }
210
+ /**
211
+ * Expected shell from the signed JWS claims only. Outer holder fields
212
+ * (payment.settled_amount, payment.network, payment_meta, task_id) are
213
+ * not signed and are not used, so they cannot ride along under VERIFIED.
214
+ */
215
+ function signedShellFromHolder(holder) {
216
+ const holderDoc = typeof holder === 'string' ? { issuer_signature: { jws: holder } } : holder;
217
+ const sig = (holderDoc.issuer_signature && typeof holderDoc.issuer_signature === 'object')
218
+ ? holderDoc.issuer_signature
219
+ : {};
220
+ return shellFromHolder({ issuer_signature: { jws: typeof sig.jws === 'string' ? sig.jws : null } });
221
+ }
222
+ function compareShellToJws(shell, holder) {
223
+ const holderDoc = typeof holder === 'string' ? { issuer_signature: { jws: holder } } : holder;
224
+ const expected = signedShellFromHolder(holderDoc);
225
+ for (const field of COMPARE_FIELDS) {
226
+ if (String(shell[field] ?? '') !== String(expected[field] ?? '')) {
227
+ return { ok: false, field };
228
+ }
229
+ }
230
+ const shellLeaf = shell.inclusion?.leaf_hash ?? null;
231
+ const expectedLeaf = expected.inclusion?.leaf_hash ?? null;
232
+ if (shellLeaf && expectedLeaf && String(shellLeaf) !== String(expectedLeaf)) {
233
+ return { ok: false, field: 'inclusion.leaf_hash' };
234
+ }
235
+ return { ok: true };
236
+ }
237
+ /**
238
+ * v11: body_commitment = HMAC-SHA256(salt, raw body),
239
+ * request_digest = SHA-256 of the JCS object
240
+ * {body_commitment, idempotency_key, method, nonce, path}.
241
+ */
242
+ function openV11Commitment(input) {
243
+ const payload = input.payload;
244
+ if (!payload || payload.request_digest == null)
245
+ return { ok: false, reason: 'no_v11_commitment' };
246
+ let salt;
247
+ try {
248
+ salt = Buffer.from(input.saltHex, 'hex');
249
+ }
250
+ catch {
251
+ return { ok: false, reason: 'bad_salt' };
252
+ }
253
+ if (salt.length !== 32)
254
+ return { ok: false, reason: 'bad_salt' };
255
+ const body = Buffer.isBuffer(input.body) ? input.body : Buffer.from(input.body);
256
+ const bodyCommitment = node_crypto_1.default.createHmac('sha256', salt).update(body).digest('hex');
257
+ const digest = node_crypto_1.default.createHash('sha256').update(jcs({
258
+ body_commitment: bodyCommitment,
259
+ idempotency_key: input.idempotencyKey ?? payload.idempotency_key ?? null,
260
+ method: input.method ?? payload.method ?? null,
261
+ nonce: input.nonce ?? payload.nonce ?? null,
262
+ path: input.path ?? payload.path ?? null,
263
+ })).digest('hex');
264
+ if (digest !== String(payload.request_digest))
265
+ return { ok: false, reason: 'commitment_mismatch' };
266
+ return { ok: true };
267
+ }
268
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"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"}
@@ -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"}