@xfuel/verify 0.2.1 → 0.3.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 (46) hide show
  1. package/README.md +41 -3
  2. package/dist/anchor-witness.d.ts +155 -0
  3. package/dist/anchor-witness.d.ts.map +1 -0
  4. package/dist/anchor-witness.js +431 -0
  5. package/dist/anchor-witness.js.map +1 -0
  6. package/dist/canonical-preimage.d.ts +9 -0
  7. package/dist/canonical-preimage.d.ts.map +1 -0
  8. package/dist/canonical-preimage.js +25 -0
  9. package/dist/canonical-preimage.js.map +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +527 -15
  13. package/dist/cli.js.map +1 -1
  14. package/dist/epoch.d.ts +109 -0
  15. package/dist/epoch.d.ts.map +1 -0
  16. package/dist/epoch.js +209 -0
  17. package/dist/epoch.js.map +1 -0
  18. package/dist/head-binding.d.ts +24 -0
  19. package/dist/head-binding.d.ts.map +1 -0
  20. package/dist/head-binding.js +61 -0
  21. package/dist/head-binding.js.map +1 -0
  22. package/dist/index.d.ts +146 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +305 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/issuer-history.d.ts +91 -0
  27. package/dist/issuer-history.d.ts.map +1 -0
  28. package/dist/issuer-history.js +292 -0
  29. package/dist/issuer-history.js.map +1 -0
  30. package/dist/jcs.d.ts +8 -0
  31. package/dist/jcs.d.ts.map +1 -0
  32. package/dist/jcs.js +64 -0
  33. package/dist/jcs.js.map +1 -0
  34. package/dist/preimage.d.ts +49 -0
  35. package/dist/preimage.d.ts.map +1 -0
  36. package/dist/preimage.js +203 -0
  37. package/dist/preimage.js.map +1 -0
  38. package/dist/receipt-lane.d.ts +234 -0
  39. package/dist/receipt-lane.d.ts.map +1 -0
  40. package/dist/receipt-lane.js +443 -0
  41. package/dist/receipt-lane.js.map +1 -0
  42. package/dist/refusal.d.ts +90 -0
  43. package/dist/refusal.d.ts.map +1 -0
  44. package/dist/refusal.js +226 -0
  45. package/dist/refusal.js.map +1 -0
  46. package/package.json +6 -4
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REFUSAL_DOES_NOT_PROVE = exports.REFUSAL_PROVES = exports.REFUSAL_PAYLOAD_VERSION = exports.REFUSAL_PAYLOAD_VERSIONS = exports.REFUSAL_SCHEMA = void 0;
4
+ exports.jwsPayloadSchema = jwsPayloadSchema;
5
+ exports.isRefusalDocument = isRefusalDocument;
6
+ exports.verifyRefusal = verifyRefusal;
7
+ /**
8
+ * Offline check for a chit402.refusal.v1 document.
9
+ *
10
+ * Same ES256 issuer key and JWKS trust rules as a payment receipt.
11
+ * A refusal is not a payment. verifyReceipt refuses to treat one as spend.
12
+ */
13
+ const jws_js_1 = require("./jws.js");
14
+ exports.REFUSAL_SCHEMA = 'chit402.refusal.v1';
15
+ /** Versions a verifier accepts. Version 1 has no history pin. */
16
+ exports.REFUSAL_PAYLOAD_VERSIONS = [1, 2];
17
+ /** Current issuance version. Version 1 still verifies. */
18
+ exports.REFUSAL_PAYLOAD_VERSION = 2;
19
+ exports.REFUSAL_PROVES = [
20
+ 'The issuer signed that it refused this spend.',
21
+ 'refusal_code is the code the issuer recorded.',
22
+ 'nonce identifies this refusal document.',
23
+ 'chain_id and anchor are the Base observation at refusal time. status UNAVAILABLE means the issuer had no block.',
24
+ 'When status is observed, block_number and block_hash are that block. state_root is copied only when the RPC returned one; otherwise it is null.',
25
+ 'book_row.seq, task_id, and row_hash name the policy_blocked row this refusal joins.',
26
+ 'charged is false and amount_charged is 0. This refusal took no USDC.',
27
+ ];
28
+ exports.REFUSAL_DOES_NOT_PROVE = [
29
+ 'It does not prove a payment, a settlement, or a balance change.',
30
+ 'It does not prove the refused spend would have landed in that block.',
31
+ 'It does not prove a later reorg left the block hash or state root in place.',
32
+ 'UNAVAILABLE means the issuer did not have a block. It does not mean the chain was empty.',
33
+ 'It does not prove the policy rule was the right rule. It proves the issuer refused under that code.',
34
+ 'It does not prove amount_requested would have been the settled price.',
35
+ 'It is not a payment receipt. A payment verifier must not treat it as proof of spend.',
36
+ 'verify_url is not inside the signature.',
37
+ ];
38
+ /** Schema inside the JWS payload. Unverified; callers still check the signature. */
39
+ function jwsPayloadSchema(doc) {
40
+ if (!doc || typeof doc !== 'object')
41
+ return null;
42
+ const jws = doc.issuer_signature?.jws;
43
+ if (!jws || typeof jws !== 'string')
44
+ return null;
45
+ const payloadB64 = jws.split('.')[1];
46
+ if (!payloadB64)
47
+ return null;
48
+ try {
49
+ const payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString('utf8'));
50
+ return typeof payload.schema === 'string' ? payload.schema : null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function isRefusalDocument(doc) {
57
+ if (!doc || typeof doc !== 'object')
58
+ return false;
59
+ if (doc.schema === exports.REFUSAL_SCHEMA)
60
+ return true;
61
+ return jwsPayloadSchema(doc) === exports.REFUSAL_SCHEMA;
62
+ }
63
+ function jwksCandidates(jwks, kid) {
64
+ if (!jwks?.keys?.length)
65
+ return [];
66
+ const es256 = jwks.keys.filter((key) => key.kty === 'EC' && key.crv === 'P-256' && key.x && key.y);
67
+ if (!kid)
68
+ return es256;
69
+ return es256.filter((key) => key.kid === kid);
70
+ }
71
+ function same(left, right) {
72
+ return left === right;
73
+ }
74
+ function anchorSame(outer, signed) {
75
+ if (!outer || !signed)
76
+ return false;
77
+ return same(outer.status, signed.status)
78
+ && same(outer.rail, signed.rail)
79
+ && same(outer.chain_id ?? null, signed.chain_id ?? null)
80
+ && same(outer.block_number ?? null, signed.block_number ?? null)
81
+ && same(outer.block_hash ?? null, signed.block_hash ?? null)
82
+ && same(outer.state_root ?? null, signed.state_root ?? null);
83
+ }
84
+ function bookRowSame(outer, signed) {
85
+ if (!outer || !signed)
86
+ return false;
87
+ return same(outer.task_id, signed.task_id)
88
+ && Number(outer.seq) === Number(signed.seq)
89
+ && same(outer.prev_hash || null, signed.prev_hash || null)
90
+ && same(outer.row_hash, signed.row_hash)
91
+ && same(outer.event, signed.event);
92
+ }
93
+ function failed(reason, extra = {}) {
94
+ return {
95
+ schema: exports.REFUSAL_SCHEMA,
96
+ checked: extra.checked ?? true,
97
+ reason,
98
+ charged: false,
99
+ proves: exports.REFUSAL_PROVES,
100
+ does_not_prove: exports.REFUSAL_DOES_NOT_PROVE,
101
+ errors: [reason],
102
+ kid: extra.kid,
103
+ valid: false,
104
+ };
105
+ }
106
+ /**
107
+ * Verify the issuer signature and that the outer refusal fields match it.
108
+ * Trust is a JWKS key matched by kid, or an embedded key whose thumbprint
109
+ * is a pinned trusted kid. The embedded key alone is not a trust root.
110
+ */
111
+ function verifyRefusal(doc, options = {}) {
112
+ if (!isRefusalDocument(doc)) {
113
+ return failed('not_a_refusal', { checked: false });
114
+ }
115
+ const jws = doc.issuer_signature?.jws;
116
+ if (!jws)
117
+ return failed('no_signature', { checked: false });
118
+ const trustedKids = options.trustedKids ?? jws_js_1.DEFAULT_TRUSTED_ISSUER_KIDS;
119
+ const header = (0, jws_js_1.readJwsHeader)(jws);
120
+ const kid = header?.kid || doc.issuer_signature?.kid;
121
+ const embedded = (0, jws_js_1.resolvePinnedIssuerJwk)(doc);
122
+ const pinned = !!(embedded && (0, jws_js_1.isPinnedTrustedJwk)(embedded, trustedKids));
123
+ const fromJwks = jwksCandidates(options.jwks, kid);
124
+ let payload = null;
125
+ let trusted = false;
126
+ let reason = 'signature_invalid';
127
+ for (const jwk of fromJwks) {
128
+ const result = (0, jws_js_1.verifyIssuerJws)(jws, jwk);
129
+ if (result.valid && result.payload) {
130
+ payload = result.payload;
131
+ trusted = true;
132
+ break;
133
+ }
134
+ reason = result.reason || 'signature_invalid';
135
+ }
136
+ if (!payload && pinned && embedded) {
137
+ const result = (0, jws_js_1.verifyIssuerJws)(jws, embedded);
138
+ if (result.valid && result.payload) {
139
+ payload = result.payload;
140
+ trusted = true;
141
+ }
142
+ else {
143
+ reason = result.reason || 'signature_invalid';
144
+ }
145
+ }
146
+ if (!payload && embedded && (0, jws_js_1.verifyIssuerJws)(jws, embedded).valid && !pinned && fromJwks.length === 0) {
147
+ return failed(jws_js_1.KEY_UNTRUSTED, { kid: kid || null });
148
+ }
149
+ if (!payload) {
150
+ if (fromJwks.length === 0 && !pinned)
151
+ return failed(jws_js_1.KEY_UNTRUSTED, { kid: kid || null });
152
+ return failed(reason, { kid: kid || null });
153
+ }
154
+ if (!trusted)
155
+ return failed(jws_js_1.KEY_UNTRUSTED, { kid: kid || null });
156
+ const signed = payload;
157
+ if (signed.schema !== exports.REFUSAL_SCHEMA)
158
+ return failed('schema_mismatch', { kid });
159
+ // The outer schema is unsigned. A present value that disagrees with the
160
+ // signed schema fails. An omitted outer schema still follows the JWS.
161
+ if (doc.schema != null && doc.schema !== signed.schema)
162
+ return failed('schema_mismatch', { kid });
163
+ const version = Number(signed.payload_version);
164
+ if (!exports.REFUSAL_PAYLOAD_VERSIONS.includes(version)) {
165
+ return failed('payload_version_mismatch', { kid });
166
+ }
167
+ if (doc.payload_version != null && Number(doc.payload_version) !== version) {
168
+ return failed('payload_version_mismatch', { kid });
169
+ }
170
+ if (version >= 2) {
171
+ const pin = signed.issuer_history;
172
+ if (!pin || typeof pin.hash !== 'string' || pin.version == null || pin.seq == null) {
173
+ return failed('issuer_history_pin_missing', { kid });
174
+ }
175
+ const payloadHash = signed.payload_hash;
176
+ if (typeof payloadHash !== 'string' || !/^[0-9a-f]{64}$/.test(payloadHash)) {
177
+ return failed('payload_hash_missing', { kid });
178
+ }
179
+ }
180
+ if (signed.kind !== 'refusal')
181
+ return failed('kind_mismatch', { kid });
182
+ if (signed.charged !== false || signed.amount_charged !== '0'
183
+ || doc.charged !== false || doc.amount_charged !== '0') {
184
+ return failed('charged_not_zero', { kid });
185
+ }
186
+ if (!same(doc.refusal_code, signed.refusal_code))
187
+ return failed('refusal_code_mismatch', { kid });
188
+ if (!same(doc.nonce, signed.nonce))
189
+ return failed('nonce_mismatch', { kid });
190
+ if (!same(doc.refusal_id, signed.refusal_id))
191
+ return failed('refusal_id_mismatch', { kid });
192
+ if (!same(doc.chain_id ?? null, signed.chain_id ?? null))
193
+ return failed('chain_id_mismatch', { kid });
194
+ if (!same(doc.task_id, signed.task_id)
195
+ || Number(doc.agent_id) !== Number(signed.agent_id)
196
+ || Number(doc.book_id) !== Number(signed.book_id)) {
197
+ return failed('identity_mismatch', { kid });
198
+ }
199
+ if (!same(doc.issued_at, signed.issued_at))
200
+ return failed('issued_at_mismatch', { kid });
201
+ if (!same(doc.amount_requested ?? null, signed.amount_requested ?? null)) {
202
+ return failed('amount_mismatch', { kid });
203
+ }
204
+ if (!anchorSame(doc.anchor, signed.anchor))
205
+ return failed('anchor_mismatch', { kid });
206
+ if (!bookRowSame(doc.book_row, signed.book_row))
207
+ return failed('book_row_mismatch', { kid });
208
+ return {
209
+ schema: exports.REFUSAL_SCHEMA,
210
+ valid: true,
211
+ checked: true,
212
+ kid: kid || null,
213
+ refusal_id: signed.refusal_id || null,
214
+ refusal_code: signed.refusal_code || null,
215
+ nonce: signed.nonce || null,
216
+ chain_id: signed.chain_id ?? null,
217
+ charged: false,
218
+ proves: exports.REFUSAL_PROVES,
219
+ does_not_prove: exports.REFUSAL_DOES_NOT_PROVE,
220
+ errors: [],
221
+ payload_version: version,
222
+ issuer_history: signed.issuer_history ?? null,
223
+ payload_hash: signed.payload_hash ?? null,
224
+ };
225
+ }
226
+ //# sourceMappingURL=refusal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refusal.js","sourceRoot":"","sources":["../src/refusal.ts"],"names":[],"mappings":";;;AA4GA,4CAYC;AAED,8CAIC;AAmDD,sCA2GC;AA5RD;;;;;GAKG;AACH,qCAQkB;AAEL,QAAA,cAAc,GAAG,oBAAoB,CAAC;AACnD,iEAAiE;AACpD,QAAA,wBAAwB,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC;AACxD,0DAA0D;AAC7C,QAAA,uBAAuB,GAAG,CAAC,CAAC;AAE5B,QAAA,cAAc,GAAG;IAC5B,+CAA+C;IAC/C,+CAA+C;IAC/C,yCAAyC;IACzC,iHAAiH;IACjH,iJAAiJ;IACjJ,qFAAqF;IACrF,sEAAsE;CACvE,CAAC;AAEW,QAAA,sBAAsB,GAAG;IACpC,iEAAiE;IACjE,sEAAsE;IACtE,6EAA6E;IAC7E,0FAA0F;IAC1F,qGAAqG;IACrG,uEAAuE;IACvE,sFAAsF;IACtF,yCAAyC;CAC1C,CAAC;AAkEF,oFAAoF;AACpF,SAAgB,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,GAAG,GAAI,GAAuB,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAC3D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAyB,CAAC;QAC1G,OAAO,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClD,IAAK,GAA4B,CAAC,MAAM,KAAK,sBAAc;QAAE,OAAO,IAAI,CAAC;IACzE,OAAO,gBAAgB,CAAC,GAAG,CAAC,KAAK,sBAAc,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,IAA6B,EAAE,GAAuB;IAC5E,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,IAAI,CAAC,IAAa,EAAE,KAAc;IACzC,OAAO,IAAI,KAAK,KAAK,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAuC,EAAE,MAAwC;IACnG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;WACnC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC;WAC7B,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;WACrD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;WAC7D,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;WACzD,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,KAAwC,EAAE,MAAyC;IACtG,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;WACrC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;WACxC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC;WACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;WACrC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,MAAM,CAAC,MAAc,EAAE,QAAsC,EAAE;IACtE,OAAO;QACL,MAAM,EAAE,sBAAc;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAC9B,MAAM;QACN,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,sBAAc;QACtB,cAAc,EAAE,8BAAsB;QACtC,MAAM,EAAE,CAAC,MAAM,CAAC;QAChB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,KAAK,EAAE,KAAK;KACb,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAC3B,GAAoB,EACpB,UAAmE,EAAE;IAErE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,MAAM,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAE5D,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oCAA2B,CAAC;IACvE,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAA,+BAAsB,EAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAA,2BAAkB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEnD,IAAI,OAAO,GAAmC,IAAI,CAAC;IACnD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAM,GAAG,mBAAmB,CAAC;IACjC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAA,wBAAe,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YACzB,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,wBAAe,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YACzB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,mBAAmB,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,IAAA,wBAAe,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrG,OAAO,MAAM,CAAC,sBAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC,sBAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,sBAAa,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;IAEjE,MAAM,MAAM,GAAG,OAAqC,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,sBAAc;QAAE,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAChF,wEAAwE;IACxE,sEAAsE;IACtE,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAAC,gCAAwB,CAAC,QAAQ,CAAC,OAAgB,CAAC,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,GAAG,CAAC,eAAe,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE,CAAC;QAC3E,OAAO,MAAM,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,GAAG,GAAI,MAAoF,CAAC,cAAc,CAAC;QACjH,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YACnF,OAAO,MAAM,CAAC,4BAA4B,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,WAAW,GAAI,MAAqC,CAAC,YAAY,CAAC;QACxE,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3E,OAAO,MAAM,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,cAAc,KAAK,GAAG;WACxD,GAAG,CAAC,OAAO,KAAK,KAAK,IAAI,GAAG,CAAC,cAAc,KAAK,GAAG,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAClG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,gBAAgB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO,MAAM,CAAC,qBAAqB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACtG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;WACjC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;WAChD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;QAAE,OAAO,MAAM,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAuB,CAAC;QAAE,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACvG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,QAA0B,CAAC;QAAE,OAAO,MAAM,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAE/G,OAAO;QACL,MAAM,EAAE,sBAAc;QACtB,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,GAAG,IAAI,IAAI;QAChB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACrC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;QACzC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;QAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,sBAAc;QACtB,cAAc,EAAE,8BAAsB;QACtC,MAAM,EAAE,EAAE;QACV,eAAe,EAAE,OAAO;QACxB,cAAc,EAAG,MAAqE,CAAC,cAAc,IAAI,IAAI;QAC7G,YAAY,EAAG,MAA2C,CAAC,YAAY,IAAI,IAAI;KAChF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@xfuel/verify",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
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",
7
7
  "bin": {
8
- "xfuel-verify": "./dist/cli.js"
8
+ "xfuel-verify": "dist/cli.js"
9
9
  },
10
10
  "exports": {
11
11
  ".": {
@@ -34,7 +34,9 @@
34
34
  },
35
35
  "scripts": {
36
36
  "build": "tsc",
37
- "test": "node --test test/*.test.mjs",
37
+ "digest": "node scripts/build-digest.mjs",
38
+ "test": "npm run build && node --test --test-concurrency=1 test/*.test.mjs",
39
+ "prepack": "npm run build",
38
40
  "prepublishOnly": "npm run build && npm test"
39
41
  },
40
42
  "keywords": [
@@ -52,7 +54,7 @@
52
54
  "license": "Apache-2.0",
53
55
  "repository": {
54
56
  "type": "git",
55
- "url": "https://github.com/XFuel-Lab/chit402.git",
57
+ "url": "git+https://github.com/XFuel-Lab/chit402.git",
56
58
  "directory": "packages/verify"
57
59
  },
58
60
  "dependencies": {