@xfuel/verify 0.1.1 → 0.2.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.
package/README.md CHANGED
@@ -40,7 +40,7 @@ npx xfuel-verify receipt.json --check-nullifier
40
40
  npx xfuel-verify receipt.json --json
41
41
 
42
42
  # From stdin
43
- curl -s https://api.xfuel.app/receipt/task-123?format=json | npx xfuel-verify -
43
+ curl -s https://api.chit402.com/receipt/task-123?format=json | npx xfuel-verify -
44
44
  ```
45
45
 
46
46
  ## What This Verifies
@@ -48,42 +48,60 @@ curl -s https://api.xfuel.app/receipt/task-123?format=json | npx xfuel-verify -
48
48
  | Check | Requires Network? | Description |
49
49
  |-------|-------------------|-------------|
50
50
  | Payment binding | No | Recompute commitment from receipt fields |
51
- | Issuer signature | No | ES256 verification — pinned `issuer_jwk` on receipt, or JWKS file |
51
+ | Issuer signature | No, unless `--fetch-jwks` | ES256. Trusted only via JWKS (by kid) or a pinned RFC 7638 kid |
52
52
  | Output hash | No | Hash is on the receipt |
53
53
  | On-chain settlement | Yes | Query Base RPC for tx |
54
54
  | Nullifier anchor | Yes | Query ZKVerifierSP1 contract |
55
55
 
56
56
  ## Issuer Signature Verification (ES256)
57
57
 
58
- Receipts include an `issuer_signature` signed with ES256 (P-256). Verify offline:
58
+ Receipts include `issuer_signature.jws` (compact ES256 / P-256). The signature
59
+ counts only when the verifying key is trusted:
59
60
 
60
- ### Pin-first (receipts with `issuer_signature.issuer_jwk`)
61
+ 1. **JWKS by kid** — a key in `--jwks-file`, `--jwks-url`, or `--fetch-jwks`
62
+ (allowlisted host, default `api.chit402.com`) whose `kid` matches the JWS.
63
+ 2. **Pinned thumbprint** — the embedded `issuer_jwk` is used only when its
64
+ RFC 7638 thumbprint equals a trusted kid. The default offline pin is the
65
+ production kid `IvFpmC-vPhkY_v0vidsrWVT9uzlE5XWKZgAEOeJTq1Q`. Override with
66
+ `--trusted-kid`, or disable with `--no-trusted-kid`.
61
67
 
62
- Newer receipts pin the issuer public key directly in the receipt. No JWKS file needed:
68
+ `issuer_jwk` on the receipt is not a trust root. A copy re-signed with an
69
+ arbitrary P-256 key reports `key untrusted` (`issuer_signature.valid === false`),
70
+ including when `--jwks-file` points at the real JWKS.
63
71
 
64
72
  ```bash
65
- # Offline verify — uses pinned issuer_jwk from the receipt
73
+ # Offline: default production pin, no network
66
74
  npx xfuel-verify receipt.json
75
+
76
+ # Trust the published JWKS instead of (or in addition to) the pin
77
+ curl -o issuer-jwks.json https://api.chit402.com/.well-known/jwks.json
78
+ npx xfuel-verify receipt.json --jwks-file issuer-jwks.json --no-trusted-kid
79
+
80
+ # Fetch the issuer JWKS (https://api.chit402.com/.well-known/jwks.json)
81
+ npx xfuel-verify receipt.json --fetch-jwks
67
82
  ```
68
83
 
69
84
  ```typescript
70
85
  import { verifyReceipt } from '@xfuel/verify';
71
86
 
72
- const result = await verifyReceipt(receipt); // no jwks option required
73
- console.log(result.issuer_signature.valid); // true when signature intact
87
+ const result = await verifyReceipt(receipt);
88
+ console.log(result.issuer_signature.valid); // true only for a trusted key
89
+ console.log(result.issuer_signature.key_trusted);
90
+ console.log(result.amount_usdc); // from verified claims, not the outer copy
91
+ console.log(result.claim_mismatches); // outer payment / caller_binding vs JWS
74
92
  ```
75
93
 
76
- ### Legacy JWKS file (older receipts without pin)
94
+ Amount, payer, payee, asset, and tx are read from the verified JWS claims.
95
+ If the unsigned outer `payment` or `caller_binding` disagrees, verification
96
+ fails. `--check-payer` on Base confirms payer, payee, asset, and amount in the
97
+ USDC `Transfer` log.
77
98
 
78
- ```bash
79
- # Download JWKS once (or obtain from trusted source)
80
- curl -o issuer-jwks.json https://api.chit402.com/.well-known/jwks.json
81
-
82
- # Verify receipt with JWKS file (no network during verification)
83
- npx xfuel-verify receipt.json --jwks-file issuer-jwks.json
84
- ```
99
+ A paid USDC receipt whose signed `binding.expected_commitment` is null is
100
+ reported as “No payment-binding commitment”, not as an unmetered or TFUEL receipt.
85
101
 
86
- The CLI does **not** automatically fetch JWKS to ensure offline verification. For pinned receipts, `--jwks-file` is optional. Exit code 1 (failed) is returned if the signature is invalid or tampered.
102
+ The CLI does **not** fetch JWKS unless `--fetch-jwks` or `--jwks-url` is set.
103
+ Exit code 1 is returned when the key is untrusted, the signature is invalid, or
104
+ a signed claim disagrees with the outer copy.
87
105
 
88
106
  ## Frozen Fields
89
107
 
@@ -17,6 +17,8 @@ export interface BasePayerVerification {
17
17
  valid: boolean;
18
18
  txHash?: string;
19
19
  payerWallet?: string;
20
+ payee?: string;
21
+ asset?: string;
20
22
  expectedAmount?: string;
21
23
  transferredAmount?: string;
22
24
  network?: string;
@@ -37,8 +39,9 @@ export declare function parseBasePaymentRef(paymentRef: string | null | undefine
37
39
  } | null;
38
40
  /**
39
41
  * Sum USDC Transfer amounts from payer in a transaction receipt.
42
+ * When `payee` is set, only transfers to that address are counted.
40
43
  */
41
- export declare function sumUsdcTransfersFromPayer(receipt: TransactionReceipt, payerWallet: string, usdcAddress: string): bigint;
44
+ export declare function sumUsdcTransfersFromPayer(receipt: TransactionReceipt, payerWallet: string, usdcAddress: string, payee?: string): bigint;
42
45
  /**
43
46
  * Default ethers provider fetcher for getTransactionReceipt.
44
47
  */
@@ -47,6 +50,10 @@ export interface VerifyBasePayerInput {
47
50
  paymentRef: string;
48
51
  payerWallet: string;
49
52
  grossAmount: string | number | bigint;
53
+ /** Settlement payee. When set, the USDC Transfer `to` must equal this address. */
54
+ payee?: string;
55
+ /** Token contract. When set, it must be the network USDC and the Transfer log address. */
56
+ asset?: string;
50
57
  network?: string;
51
58
  rpcUrl?: string;
52
59
  fetchReceipt?: BaseReceiptFetcher;
@@ -1 +1 @@
1
- {"version":3,"file":"base-payer.d.ts","sourceRoot":"","sources":["../src/base-payer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE9E,sDAAsD;AACtD,eAAO,MAAM,oBAAoB,uEAAuE,CAAC;AAEzG,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjD,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAMxC;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2B5C;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAMpC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiFjG"}
1
+ {"version":3,"file":"base-payer.d.ts","sourceRoot":"","sources":["../src/base-payer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE9E,sDAAsD;AACtD,eAAO,MAAM,oBAAoB,uEAAuE,CAAC;AAEzG,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKjD,CAAC;AAEF,gCAAgC;AAChC,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;AAMxC;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA2B5C;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAqBR;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAMpC;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,kFAAkF;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwHjG"}
@@ -69,21 +69,28 @@ function parseBasePaymentRef(paymentRef) {
69
69
  }
70
70
  /**
71
71
  * Sum USDC Transfer amounts from payer in a transaction receipt.
72
+ * When `payee` is set, only transfers to that address are counted.
72
73
  */
73
- function sumUsdcTransfersFromPayer(receipt, payerWallet, usdcAddress) {
74
+ function sumUsdcTransfersFromPayer(receipt, payerWallet, usdcAddress, payee) {
74
75
  const expectedFrom = (0, ethers_1.getAddress)(payerWallet).toLowerCase();
76
+ const expectedTo = payee ? (0, ethers_1.getAddress)(payee).toLowerCase() : null;
75
77
  const usdcLower = usdcAddress.toLowerCase();
76
78
  let total = 0n;
77
79
  for (const log of receipt.logs || []) {
78
80
  if (log.address?.toLowerCase() !== usdcLower)
79
81
  continue;
80
- if (log.topics?.[0] !== exports.ERC20_TRANSFER_TOPIC)
82
+ if (log.topics?.[0]?.toLowerCase() !== exports.ERC20_TRANSFER_TOPIC)
81
83
  continue;
82
84
  if ((log.topics?.length || 0) < 3)
83
85
  continue;
84
86
  const from = ('0x' + log.topics[1].slice(26)).toLowerCase();
85
87
  if (from !== expectedFrom)
86
88
  continue;
89
+ if (expectedTo) {
90
+ const to = ('0x' + log.topics[2].slice(26)).toLowerCase();
91
+ if (to !== expectedTo)
92
+ continue;
93
+ }
87
94
  total += BigInt(log.data || '0');
88
95
  }
89
96
  return total;
@@ -114,11 +121,37 @@ async function verifyBasePayer(input) {
114
121
  if (expectedAmount <= 0n) {
115
122
  return { checked: false, valid: false, reason: 'invalid_gross_amount' };
116
123
  }
124
+ let payee;
125
+ if (input.payee != null && input.payee !== '') {
126
+ if (!isEvmAddress(input.payee)) {
127
+ return { checked: false, valid: false, reason: 'invalid_payee' };
128
+ }
129
+ payee = (0, ethers_1.getAddress)(input.payee);
130
+ }
117
131
  const network = (input.network || parsed.network).toLowerCase();
118
132
  const usdcAddress = exports.USDC_ADDRESSES[network];
119
133
  if (!usdcAddress) {
120
134
  return { checked: false, valid: false, reason: `unknown_network: ${network}` };
121
135
  }
136
+ let asset;
137
+ if (input.asset != null && input.asset !== '') {
138
+ if (!isEvmAddress(input.asset)) {
139
+ return { checked: true, valid: false, reason: `asset_mismatch: ${input.asset} is not an EVM token address` };
140
+ }
141
+ asset = (0, ethers_1.getAddress)(input.asset);
142
+ if (asset !== (0, ethers_1.getAddress)(usdcAddress)) {
143
+ return {
144
+ checked: true,
145
+ valid: false,
146
+ payerWallet: (0, ethers_1.getAddress)(payerWallet),
147
+ payee,
148
+ asset,
149
+ expectedAmount: expectedAmount.toString(),
150
+ network,
151
+ reason: `asset_mismatch: ${asset} !== ${(0, ethers_1.getAddress)(usdcAddress)}`,
152
+ };
153
+ }
154
+ }
122
155
  const fetcher = input.fetchReceipt || fetchBaseTransactionReceipt;
123
156
  const rpcUrl = resolveRpcUrl(input.rpcUrl);
124
157
  let receipt;
@@ -136,14 +169,19 @@ async function verifyBasePayer(input) {
136
169
  reason: `rpc_error: ${err.message}`,
137
170
  };
138
171
  }
172
+ const baseFields = {
173
+ txHash: parsed.txHash,
174
+ payerWallet: (0, ethers_1.getAddress)(payerWallet),
175
+ payee,
176
+ asset: asset || (0, ethers_1.getAddress)(usdcAddress),
177
+ expectedAmount: expectedAmount.toString(),
178
+ network,
179
+ };
139
180
  if (!receipt) {
140
181
  return {
141
182
  checked: true,
142
183
  valid: false,
143
- txHash: parsed.txHash,
144
- payerWallet: (0, ethers_1.getAddress)(payerWallet),
145
- expectedAmount: expectedAmount.toString(),
146
- network,
184
+ ...baseFields,
147
185
  reason: 'transaction_not_found',
148
186
  };
149
187
  }
@@ -151,28 +189,34 @@ async function verifyBasePayer(input) {
151
189
  return {
152
190
  checked: true,
153
191
  valid: false,
154
- txHash: parsed.txHash,
155
- payerWallet: (0, ethers_1.getAddress)(payerWallet),
156
- expectedAmount: expectedAmount.toString(),
157
- network,
192
+ ...baseFields,
158
193
  reason: 'transaction_reverted',
159
194
  };
160
195
  }
161
- const transferred = sumUsdcTransfersFromPayer(receipt, payerWallet, usdcAddress);
196
+ const token = asset || usdcAddress;
197
+ const transferred = sumUsdcTransfersFromPayer(receipt, payerWallet, token, payee);
198
+ const fromPayer = payee
199
+ ? sumUsdcTransfersFromPayer(receipt, payerWallet, token)
200
+ : transferred;
162
201
  const valid = transferred >= expectedAmount;
202
+ let reason;
203
+ if (!valid) {
204
+ if (payee && fromPayer > 0n && transferred === 0n) {
205
+ reason = `payee_mismatch: no USDC transfer from ${(0, ethers_1.getAddress)(payerWallet)} to ${payee}`;
206
+ }
207
+ else if (transferred > 0n) {
208
+ reason = `transferred_${transferred}_lt_expected_${expectedAmount}`;
209
+ }
210
+ else {
211
+ reason = `no_usdc_transfer_from_${(0, ethers_1.getAddress)(payerWallet)}`;
212
+ }
213
+ }
163
214
  return {
164
215
  checked: true,
165
216
  valid,
166
- txHash: parsed.txHash,
167
- payerWallet: (0, ethers_1.getAddress)(payerWallet),
168
- expectedAmount: expectedAmount.toString(),
217
+ ...baseFields,
169
218
  transferredAmount: transferred.toString(),
170
- network,
171
- reason: valid
172
- ? undefined
173
- : transferred > 0n
174
- ? `transferred_${transferred}_lt_expected_${expectedAmount}`
175
- : `no_usdc_transfer_from_${(0, ethers_1.getAddress)(payerWallet)}`,
219
+ reason,
176
220
  };
177
221
  }
178
222
  //# sourceMappingURL=base-payer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-payer.js","sourceRoot":"","sources":["../src/base-payer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-payer.js","sourceRoot":"","sources":["../src/base-payer.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -24,16 +24,24 @@ xfuel-verify — Offline verification for Chit402 receipts
24
24
  Usage:
25
25
  xfuel-verify <receipt.json> Verify binding locally
26
26
  xfuel-verify <receipt.json> --jwks-file <jwks.json>
27
- Verify issuer signature with JWKS
28
- xfuel-verify <receipt.json> --check-nullifier
29
- Also verify nullifier on-chain
27
+ Verify issuer signature with a JWKS file
28
+ xfuel-verify <receipt.json> --fetch-jwks
29
+ Fetch JWKS from an allowlisted issuer jwks_uri
30
+ xfuel-verify <receipt.json> --check-payer
31
+ Confirm payer, payee, asset, and amount on-chain
30
32
  xfuel-verify - < receipt.json Read from stdin
31
33
  xfuel-verify --help Show this help
32
34
 
33
35
  Options:
34
- --jwks-file <path> JWKS file for issuer signature verification (no network)
36
+ --jwks-file <path> JWKS file. Keys are trusted and matched by kid (no network)
37
+ --jwks-url <url> Fetch this https JWKS and trust it (explicit; any host)
38
+ --fetch-jwks Fetch receipt verification.jwks_uri when the host is allowlisted
39
+ (default allowlist: api.chit402.com)
40
+ --trusted-kid <kid> Replace the default offline pin with this RFC 7638 kid
41
+ (repeatable). Default pin: ${index_js_1.DEFAULT_TRUSTED_ISSUER_KIDS[0]}
42
+ --no-trusted-kid Do not use the default offline pin (JWKS only)
35
43
  --check-nullifier Query Base RPC for nullifier anchor (requires network)
36
- --check-payer Query Base or Solana RPC to confirm payer_wallet on-chain
44
+ --check-payer Query Base or Solana RPC. Base confirms payer, payee, asset, amount
37
45
  --solana-rpc <url> Solana RPC URL (default: https://api.mainnet-beta.solana.com or SOLANA_RPC_URL)
38
46
  --rpc <url> Custom RPC URL (default: https://mainnet.base.org)
39
47
  --json Output JSON instead of human-readable
@@ -42,18 +50,24 @@ Options:
42
50
  Exit codes:
43
51
  0 = verified
44
52
  1 = verification failed
45
- 2 = partial verification (binding ok, nullifier not checked)
53
+ 2 = partial verification
46
54
  3 = input error
47
55
 
56
+ Trust:
57
+ A signature counts only when the verifying key is trusted. Trust is a JWKS
58
+ entry matched by kid (file, --jwks-url, or --fetch-jwks), or an embedded
59
+ issuer_jwk whose RFC 7638 thumbprint equals a pinned trusted kid. The
60
+ embedded key alone is not a trust root. Untrusted keys report "key untrusted".
61
+
62
+ Amount, payer, payee, and tx are read from verified signed claims. A mismatch
63
+ with the unsigned outer payment / caller_binding copy is a failure.
64
+
48
65
  Network behavior:
49
66
  By default, no network requests are made. Network is only used when:
67
+ - --fetch-jwks or --jwks-url is passed
50
68
  - --check-nullifier is passed (queries Base RPC for on-chain anchor)
51
69
  - --check-payer is passed (queries Base or Solana RPC for USDC settlement)
52
70
 
53
- JWKS must be provided as a local file (--jwks-file) for legacy receipts without
54
- issuer_signature.issuer_jwk. The CLI does not automatically fetch JWKS from a URL.
55
- Pinned receipts (issuer_jwk present) verify offline without --jwks-file.
56
-
57
71
  Solana payer verify uses SOLANA_RPC_URL when set, else the public mainnet RPC.
58
72
 
59
73
  Examples:
@@ -73,6 +87,10 @@ function parseArgs(args) {
73
87
  const result = {
74
88
  file: null,
75
89
  jwksFile: null,
90
+ jwksUrl: null,
91
+ fetchJwks: false,
92
+ trustedKids: null,
93
+ noTrustedKid: false,
76
94
  checkNullifier: false,
77
95
  checkPayer: false,
78
96
  rpcUrl: null,
@@ -95,6 +113,19 @@ function parseArgs(args) {
95
113
  else if (arg === '--jwks-file' && args[i + 1]) {
96
114
  result.jwksFile = args[++i];
97
115
  }
116
+ else if (arg === '--jwks-url' && args[i + 1]) {
117
+ result.jwksUrl = args[++i];
118
+ }
119
+ else if (arg === '--fetch-jwks') {
120
+ result.fetchJwks = true;
121
+ }
122
+ else if (arg === '--trusted-kid' && args[i + 1]) {
123
+ result.trustedKids = result.trustedKids || [];
124
+ result.trustedKids.push(args[++i]);
125
+ }
126
+ else if (arg === '--no-trusted-kid') {
127
+ result.noTrustedKid = true;
128
+ }
98
129
  else if (arg === '--rpc' && args[i + 1]) {
99
130
  result.rpcUrl = args[++i];
100
131
  }
@@ -162,8 +193,14 @@ async function main() {
162
193
  return 3;
163
194
  }
164
195
  }
196
+ const trustedKids = args.noTrustedKid
197
+ ? []
198
+ : (args.trustedKids ?? undefined);
165
199
  const result = await (0, index_js_1.verifyReceipt)(receipt, {
166
200
  jwks,
201
+ jwksUri: args.jwksUrl || undefined,
202
+ fetchJwks: args.fetchJwks,
203
+ trustedKids,
167
204
  checkNullifier: args.checkNullifier,
168
205
  checkPayer: args.checkPayer,
169
206
  rpcUrl: args.rpcUrl || undefined,
@@ -179,7 +216,7 @@ async function main() {
179
216
  console.log(` Receipt ID: ${result.receipt_id}`);
180
217
  console.log(` Hub: ${result.hub || '—'}`);
181
218
  console.log(` Model: ${result.model || '—'}`);
182
- console.log(` Amount: ${formatAmount(result.amount_usdc)}`);
219
+ console.log(` Amount: ${result.issuer_signature.valid ? formatAmount(result.amount_usdc) : '— (not verified)'}`);
183
220
  console.log(` TX: ${result.tx || '—'}`);
184
221
  console.log(` Output Hash: ${result.output_hash ? result.output_hash.slice(0, 18) + '…' : '—'}`);
185
222
  console.log('');
@@ -192,7 +229,7 @@ async function main() {
192
229
  console.log(` Covers: ${result.binding.covers.join(', ')}`);
193
230
  }
194
231
  else {
195
- console.log(` Status: No binding (${result.binding.reason})`);
232
+ console.log(` Status: ${result.binding.reason || 'No payment-binding commitment'}`);
196
233
  }
197
234
  console.log('');
198
235
  console.log(` Issuer Signature`);
@@ -200,17 +237,15 @@ async function main() {
200
237
  if (result.issuer_signature.checked) {
201
238
  console.log(` Kid: ${result.issuer_signature.kid || '—'}`);
202
239
  console.log(` Valid: ${result.issuer_signature.valid ? '✓ YES' : '✗ NO'}`);
240
+ console.log(` Key trusted: ${result.issuer_signature.key_trusted ? '✓ YES' : '✗ NO'}${result.issuer_signature.trust ? ` (${result.issuer_signature.trust})` : ''}`);
203
241
  if (!result.issuer_signature.valid && result.issuer_signature.reason) {
204
242
  console.log(` Reason: ${result.issuer_signature.reason}`);
205
243
  }
206
244
  }
207
245
  else {
208
246
  console.log(` Status: ${result.issuer_signature.reason || 'Not checked'}`);
209
- if (receipt.issuer_signature && !args.jwksFile) {
210
- const hasPin = receipt.issuer_signature.issuer_jwk && receipt.issuer_signature.jws;
211
- console.log(hasPin
212
- ? ` (pinned issuer_jwk on receipt — signature verified offline)`
213
- : ` (receipt has signature — pass --jwks-file to verify)`);
247
+ if (receipt.issuer_signature && !args.jwksFile && !args.fetchJwks && !args.jwksUrl) {
248
+ console.log(` (pass --jwks-file, --fetch-jwks, or rely on the default trusted kid)`);
214
249
  }
215
250
  }
216
251
  console.log('');
@@ -218,6 +253,10 @@ async function main() {
218
253
  console.log(` ─────────────────────────────────────────────────`);
219
254
  if (result.payer.checked) {
220
255
  console.log(` Rail: ${result.payer.rail || '—'}`);
256
+ console.log(` Payer: ${result.payer.payer_wallet || '—'}`);
257
+ console.log(` Payee: ${result.payer.payee || '—'}`);
258
+ console.log(` Asset: ${result.payer.asset || '—'}`);
259
+ console.log(` Amount: ${formatAmount(result.payer.amount || null)}`);
221
260
  console.log(` Valid: ${result.payer.valid ? '✓ YES' : '✗ NO'}`);
222
261
  if (!result.payer.valid && result.payer.reason) {
223
262
  console.log(` Reason: ${result.payer.reason}`);
@@ -225,8 +264,16 @@ async function main() {
225
264
  }
226
265
  else {
227
266
  console.log(` Status: ${result.payer.reason || 'Not checked'}`);
228
- if (receipt.caller_binding?.payer_wallet && receipt.payment?.ref && !args.checkPayer) {
229
- console.log(` (pass --check-payer to verify on-chain)`);
267
+ if (result.issuer_signature.valid && result.payer.payer_wallet && result.tx && !args.checkPayer) {
268
+ console.log(` (pass --check-payer to verify payer, payee, asset, and amount on-chain)`);
269
+ }
270
+ }
271
+ if (result.claim_mismatches.length > 0) {
272
+ console.log('');
273
+ console.log(` Outer / signed mismatches`);
274
+ console.log(` ─────────────────────────────────────────────────`);
275
+ for (const mismatch of result.claim_mismatches) {
276
+ console.log(` ${mismatch.field}: outer ${mismatch.outer} ≠ signed ${mismatch.signed}`);
230
277
  }
231
278
  }
232
279
  console.log('');
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;GAcG;;AAEH,qCAAuC;AACvC,yCAAwF;AAExF,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDZ,CAAC;AAEF,SAAS,SAAS,CAAC,IAAc;IAW/B,MAAM,MAAM,GAAG;QACb,IAAI,EAAE,IAAqB;QAC3B,QAAQ,EAAE,IAAqB;QAC/B,cAAc,EAAE,KAAK;QACrB,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,IAAqB;QAC7B,YAAY,EAAE,IAAqB;QACnC,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,KAAK;KACZ,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACvC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;YACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,OAAe,CAAC;IACpB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,GAAG,IAAA,sBAAY,EAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAoB;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IACvB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACpB,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAsB,CAAC;IAC3B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAS,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAa,EAAC,OAAO,EAAE;QAC1C,IAAI;QACJ,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;QAChC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;KAC7C,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACpF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,gBAAgB,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;YACnF,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,MAAM;oBAChB,CAAC,CAAC,8EAA8E;oBAChF,CAAC,CAAC,uEAAuE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,cAAc,EAAE,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrF,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAC5E,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;YAC9F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,UAAU;YACb,OAAO,CAAC,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,CAAC,CAAC;QACX,KAAK,SAAS;YACZ,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}