@devlab.group/agent-commerce 2.1.0 → 2.2.0

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 (73) hide show
  1. package/README.md +35 -5
  2. package/dist/ap2.js +3 -3
  3. package/dist/{chunk-SY6GUYSQ.js → chunk-7ZMMXZ4G.js} +3 -3
  4. package/dist/{chunk-SY6GUYSQ.js.map → chunk-7ZMMXZ4G.js.map} +1 -1
  5. package/dist/{chunk-UHMYRV3J.js → chunk-HNRDZLSN.js} +7 -5
  6. package/dist/chunk-HNRDZLSN.js.map +1 -0
  7. package/dist/{chunk-LZS5BL3W.js → chunk-IEW7NSP2.js} +23 -5
  8. package/dist/chunk-IEW7NSP2.js.map +1 -0
  9. package/dist/{chunk-IFGRCXME.js → chunk-Y4RE3XYF.js} +3 -3
  10. package/dist/{chunk-IFGRCXME.js.map → chunk-Y4RE3XYF.js.map} +1 -1
  11. package/dist/cli/ap2-MBMQHFX4.js +678 -0
  12. package/dist/cli/ap2-MBMQHFX4.js.map +1 -0
  13. package/dist/cli/chunk-2ZZOGI5I.js +1352 -0
  14. package/dist/cli/chunk-2ZZOGI5I.js.map +1 -0
  15. package/dist/cli/chunk-3EQBCFZY.js +53 -0
  16. package/dist/cli/chunk-3EQBCFZY.js.map +1 -0
  17. package/dist/cli/chunk-3M6U7ILB.js +8 -0
  18. package/dist/cli/chunk-3M6U7ILB.js.map +1 -0
  19. package/dist/cli/chunk-3MGAJ5FX.js +70 -0
  20. package/dist/cli/chunk-3MGAJ5FX.js.map +1 -0
  21. package/dist/cli/chunk-5K4XEAZV.js +113 -0
  22. package/dist/cli/chunk-5K4XEAZV.js.map +1 -0
  23. package/dist/cli/chunk-7JNYFUT3.js +256 -0
  24. package/dist/cli/chunk-7JNYFUT3.js.map +1 -0
  25. package/dist/cli/chunk-AA3FIEAR.js +27 -0
  26. package/dist/cli/chunk-AA3FIEAR.js.map +1 -0
  27. package/dist/cli/chunk-FHCFR2GS.js +17 -0
  28. package/dist/cli/chunk-FHCFR2GS.js.map +1 -0
  29. package/dist/cli/chunk-FRMLWGSS.js +8 -0
  30. package/dist/cli/chunk-FRMLWGSS.js.map +1 -0
  31. package/dist/cli/chunk-KLX2YZDG.js +1400 -0
  32. package/dist/cli/chunk-KLX2YZDG.js.map +1 -0
  33. package/dist/cli/chunk-NSPPEF5M.js +334 -0
  34. package/dist/cli/chunk-NSPPEF5M.js.map +1 -0
  35. package/dist/cli/chunk-OSTCU6ZK.js +44 -0
  36. package/dist/cli/chunk-OSTCU6ZK.js.map +1 -0
  37. package/dist/cli/chunk-QQ3WY5L3.js +271 -0
  38. package/dist/cli/chunk-QQ3WY5L3.js.map +1 -0
  39. package/dist/cli/chunk-RWVPYAKC.js +1742 -0
  40. package/dist/cli/chunk-RWVPYAKC.js.map +1 -0
  41. package/dist/cli/chunk-SPAYKVUP.js +118 -0
  42. package/dist/cli/chunk-SPAYKVUP.js.map +1 -0
  43. package/dist/cli/chunk-SS3QFF5N.js +614 -0
  44. package/dist/cli/chunk-SS3QFF5N.js.map +1 -0
  45. package/dist/cli/chunk-TPC4EJLT.js +11 -0
  46. package/dist/cli/chunk-TPC4EJLT.js.map +1 -0
  47. package/dist/cli/config-4IBGVFSP.js +11 -0
  48. package/dist/cli/config-4IBGVFSP.js.map +1 -0
  49. package/dist/cli/index.js +150 -3627
  50. package/dist/cli/index.js.map +1 -1
  51. package/dist/cli/mcp-CNWQ2MOE.js +559 -0
  52. package/dist/cli/mcp-CNWQ2MOE.js.map +1 -0
  53. package/dist/cli/near-5AY3HWYF.js +58 -0
  54. package/dist/cli/near-5AY3HWYF.js.map +1 -0
  55. package/dist/cli/provider-4BQDH56Y.js +396 -0
  56. package/dist/cli/provider-4BQDH56Y.js.map +1 -0
  57. package/dist/cli/run-5MB2D45X.js +7286 -0
  58. package/dist/cli/run-5MB2D45X.js.map +1 -0
  59. package/dist/cli/svm-3MMYFPC7.js +33 -0
  60. package/dist/cli/svm-3MMYFPC7.js.map +1 -0
  61. package/dist/cli/x402-NKR3WQDQ.js +96 -0
  62. package/dist/cli/x402-NKR3WQDQ.js.map +1 -0
  63. package/dist/index.d.ts +2 -0
  64. package/dist/index.js +48 -5
  65. package/dist/index.js.map +1 -1
  66. package/dist/mcp.js +6 -16
  67. package/dist/mcp.js.map +1 -1
  68. package/dist/mpp.js +3 -3
  69. package/dist/x402.d.ts +5 -0
  70. package/dist/x402.js +4 -4
  71. package/package.json +2 -2
  72. package/dist/chunk-LZS5BL3W.js.map +0 -1
  73. package/dist/chunk-UHMYRV3J.js.map +0 -1
@@ -0,0 +1,256 @@
1
+ import { CommerceError } from './chunk-QQ3WY5L3.js';
2
+
3
+ // src/core/execution/settlement-order.ts
4
+ var SETTLE_AFTER_BACKEND_METADATA_KEY = "settleAfterBackend";
5
+ var REUSE_REJECTED_AUTHORIZATION_METADATA_KEY = "reuseRejectedAuthorization";
6
+
7
+ // src/payments/x402/networks.ts
8
+ var LOCAL_CHAIN_ID = 31337;
9
+ var usdc = (address, name) => ({ symbol: "USDC", address, name, version: "2", decimals: 6 });
10
+ var PROFILES = [
11
+ {
12
+ family: "evm",
13
+ id: `eip155:${LOCAL_CHAIN_ID}`,
14
+ chainId: LOCAL_CHAIN_ID,
15
+ displayName: "Local Anvil",
16
+ kind: "testnet",
17
+ local: true
18
+ },
19
+ {
20
+ family: "evm",
21
+ id: "eip155:84532",
22
+ chainId: 84532,
23
+ displayName: "Base Sepolia",
24
+ kind: "testnet",
25
+ canonicalAsset: usdc("0x036CbD53842c5426634e7929541eC2318f3dCF7e", "USDC")
26
+ },
27
+ {
28
+ family: "evm",
29
+ id: "eip155:8453",
30
+ chainId: 8453,
31
+ displayName: "Base",
32
+ kind: "mainnet",
33
+ canonicalAsset: usdc("0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "USD Coin")
34
+ },
35
+ {
36
+ family: "evm",
37
+ id: "eip155:1",
38
+ chainId: 1,
39
+ displayName: "Ethereum",
40
+ kind: "mainnet",
41
+ canonicalAsset: usdc("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "USD Coin")
42
+ },
43
+ {
44
+ family: "evm",
45
+ id: "eip155:137",
46
+ chainId: 137,
47
+ displayName: "Polygon",
48
+ kind: "mainnet",
49
+ canonicalAsset: usdc("0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359", "USD Coin")
50
+ },
51
+ {
52
+ family: "evm",
53
+ id: "eip155:42161",
54
+ chainId: 42161,
55
+ displayName: "Arbitrum One",
56
+ kind: "mainnet",
57
+ canonicalAsset: usdc("0xaf88d065e77c8cC2239327C5EDb3A432268e5831", "USD Coin")
58
+ },
59
+ {
60
+ family: "evm",
61
+ id: "eip155:421614",
62
+ chainId: 421614,
63
+ displayName: "Arbitrum Sepolia",
64
+ kind: "testnet",
65
+ canonicalAsset: usdc("0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d", "USD Coin")
66
+ },
67
+ {
68
+ family: "evm",
69
+ id: "eip155:43114",
70
+ chainId: 43114,
71
+ displayName: "Avalanche C-Chain",
72
+ kind: "mainnet",
73
+ canonicalAsset: usdc("0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", "USD Coin")
74
+ },
75
+ {
76
+ family: "svm",
77
+ id: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
78
+ displayName: "Solana",
79
+ kind: "mainnet",
80
+ canonicalAsset: {
81
+ symbol: "USDC",
82
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
83
+ decimals: 6
84
+ }
85
+ },
86
+ {
87
+ family: "svm",
88
+ id: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
89
+ displayName: "Solana Devnet",
90
+ kind: "testnet",
91
+ canonicalAsset: {
92
+ symbol: "USDC",
93
+ address: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
94
+ decimals: 6
95
+ }
96
+ },
97
+ // NEAR's USDC contracts are implicit accounts: 64 lowercase hex characters
98
+ {
99
+ family: "near",
100
+ id: "near:mainnet",
101
+ displayName: "NEAR",
102
+ kind: "mainnet",
103
+ canonicalAsset: {
104
+ symbol: "USDC",
105
+ address: "17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1",
106
+ decimals: 6
107
+ }
108
+ },
109
+ {
110
+ family: "near",
111
+ id: "near:testnet",
112
+ displayName: "NEAR Testnet",
113
+ kind: "testnet",
114
+ canonicalAsset: {
115
+ symbol: "USDC",
116
+ address: "3e2210e1184b45b64c8a434c0a7e7b23cc04ea7eb7a6c3c32520d03d4afcb8af",
117
+ decimals: 6
118
+ }
119
+ }
120
+ ];
121
+ var BY_ID = new Map(PROFILES.map((profile) => [profile.id, profile]));
122
+ var SUPPORTED_NETWORK_IDS = PROFILES.filter(
123
+ (p) => p.family === "evm"
124
+ ).map((p) => p.id);
125
+ var EVM_NETWORK_ID = /^eip155:([1-9]\d{0,15})$/;
126
+ function invalid(message, path) {
127
+ return new CommerceError("CONFIG_INVALID", message, { details: { path } });
128
+ }
129
+ function findX402Network(id, custom) {
130
+ const builtIn = BY_ID.get(id);
131
+ if (builtIn) return builtIn;
132
+ const declared = custom?.[id];
133
+ const chainId = Number(EVM_NETWORK_ID.exec(id)?.[1]);
134
+ if (!declared || !Number.isSafeInteger(chainId)) return void 0;
135
+ return {
136
+ family: "evm",
137
+ id,
138
+ chainId,
139
+ displayName: declared.displayName,
140
+ kind: declared.kind
141
+ };
142
+ }
143
+ function requireX402Network(id, path, custom) {
144
+ const network = findX402Network(id, custom);
145
+ if (!network) {
146
+ throw new CommerceError(
147
+ "CONFIG_INVALID",
148
+ `${path}: "${id}" is not a known network. Built-in CAIP-2 identifiers: ${PROFILES.map((p) => p.id).join(", ")}. Declare another EVM network under payments.x402.networks with its kind and displayName.`,
149
+ { details: { path, network: id } }
150
+ );
151
+ }
152
+ return network;
153
+ }
154
+ function validateCustomNetworks(custom, path) {
155
+ for (const id of Object.keys(custom)) {
156
+ const at = `${path}.${id}`;
157
+ if (BY_ID.has(id)) {
158
+ throw invalid(
159
+ `${at}: "${id}" is a built-in network and cannot be redeclared; remove this entry`,
160
+ at
161
+ );
162
+ }
163
+ if (!findX402Network(id, custom)) {
164
+ throw invalid(
165
+ `${at}: "${id}" is not an EVM CAIP-2 identifier ("eip155:" followed by a positive chain id below 2^53). Only EVM networks can be declared.`,
166
+ at
167
+ );
168
+ }
169
+ }
170
+ }
171
+ function resolveDeploymentMode(profile) {
172
+ return profile.local ? "local" : profile.kind;
173
+ }
174
+ var LIVE_MAINNET_BANNER = "LIVE MAINNET MODE - REAL FUNDS";
175
+ function describeDeploymentMode(mode) {
176
+ return mode === "mainnet" ? LIVE_MAINNET_BANNER : mode.toUpperCase();
177
+ }
178
+
179
+ // src/payments/x402/addresses.ts
180
+ var EVM_ADDRESS = /^0x[0-9a-fA-F]{40}$/;
181
+ var EVM_ZERO = /^0x0{40}$/i;
182
+ var isEvmAddress = (value) => typeof value === "string" && EVM_ADDRESS.test(value);
183
+ var isEvmZeroAddress = (value) => EVM_ZERO.test(value);
184
+ var BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
185
+ var SOLANA_ADDRESS = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
186
+ var SOLANA_ZERO = "11111111111111111111111111111111";
187
+ var EVM_TRANSACTION_HASH = /^0x[0-9a-fA-F]{64}$/;
188
+ var SOLANA_SIGNATURE = /^[1-9A-HJ-NP-Za-km-z]{64,88}$/;
189
+ var NEAR_ACCOUNT_ID = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;
190
+ var NEAR_TRANSACTION_HASH = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
191
+ function normalizeAddress(network, value) {
192
+ switch (network.family) {
193
+ case "evm":
194
+ return isEvmAddress(value) ? value : void 0;
195
+ case "svm":
196
+ return SOLANA_ADDRESS.test(value) && base58ByteLength(value) === 32 ? value : void 0;
197
+ case "near":
198
+ return value.length >= 2 && value.length <= 64 && NEAR_ACCOUNT_ID.test(value) ? value : void 0;
199
+ }
200
+ }
201
+ function isBurnAddress(network, wireAddress) {
202
+ switch (network.family) {
203
+ case "evm":
204
+ return isEvmZeroAddress(wireAddress);
205
+ case "svm":
206
+ return wireAddress === SOLANA_ZERO;
207
+ case "near":
208
+ return false;
209
+ }
210
+ }
211
+ function sameAddress(network, a, b) {
212
+ return network.family === "evm" ? a.toLowerCase() === b.toLowerCase() : a === b;
213
+ }
214
+ function isTransactionReference(network, value) {
215
+ switch (network.family) {
216
+ case "evm":
217
+ return EVM_TRANSACTION_HASH.test(value);
218
+ case "svm":
219
+ return SOLANA_SIGNATURE.test(value) && base58ByteLength(value) === 64;
220
+ case "near":
221
+ return NEAR_TRANSACTION_HASH.test(value) && base58ByteLength(value) === 32;
222
+ }
223
+ }
224
+ function base58ByteLength(value) {
225
+ let n = 0n;
226
+ for (const char of value) n = n * 58n + BigInt(BASE58_ALPHABET.indexOf(char));
227
+ const leadingZeros = value.length - value.replace(/^1+/, "").length;
228
+ return leadingZeros + (n === 0n ? 0 : Math.ceil(n.toString(16).length / 2));
229
+ }
230
+
231
+ // src/payments/x402/payment-flow.ts
232
+ var X402_PAYMENT_FLOWS = ["authorization", "upfront"];
233
+ var X402_DEFAULT_PAYMENT_FLOW = "authorization";
234
+
235
+ // src/payments/x402/local-chain/accounts.ts
236
+ var ANVIL_WELL_KNOWN_ACCOUNTS = [
237
+ {
238
+ address: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
239
+ privateKey: "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
240
+ },
241
+ {
242
+ address: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
243
+ privateKey: "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"
244
+ },
245
+ {
246
+ address: "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC",
247
+ privateKey: "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a"
248
+ }
249
+ ];
250
+ ANVIL_WELL_KNOWN_ACCOUNTS[0];
251
+ ANVIL_WELL_KNOWN_ACCOUNTS[1];
252
+ ANVIL_WELL_KNOWN_ACCOUNTS[2];
253
+
254
+ export { ANVIL_WELL_KNOWN_ACCOUNTS, LOCAL_CHAIN_ID, REUSE_REJECTED_AUTHORIZATION_METADATA_KEY, SETTLE_AFTER_BACKEND_METADATA_KEY, SUPPORTED_NETWORK_IDS, X402_DEFAULT_PAYMENT_FLOW, X402_PAYMENT_FLOWS, describeDeploymentMode, findX402Network, isBurnAddress, isEvmAddress, isEvmZeroAddress, isTransactionReference, normalizeAddress, requireX402Network, resolveDeploymentMode, sameAddress, validateCustomNetworks };
255
+ //# sourceMappingURL=chunk-7JNYFUT3.js.map
256
+ //# sourceMappingURL=chunk-7JNYFUT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/execution/settlement-order.ts","../../src/payments/x402/networks.ts","../../src/payments/x402/addresses.ts","../../src/payments/x402/payment-flow.ts","../../src/payments/x402/local-chain/accounts.ts"],"names":[],"mappings":";;;AAIO,IAAM,iCAAA,GAAoC;AAQ1C,IAAM,yCAAA,GAA4C;;;ACKlD,IAAM,cAAA,GAAiB;AA0D9B,IAAM,IAAA,GAAO,CAAC,OAAA,EAAiB,IAAA,MAC5B,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,QAAA,EAAU,CAAA,EAAE,CAAA;AAE9D,IAAM,QAAA,GAAmC;AAAA,EACvC;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,UAAU,cAAc,CAAA,CAAA;AAAA,IAC5B,OAAA,EAAS,cAAA;AAAA,IACT,WAAA,EAAa,aAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,cAAA;AAAA,IACJ,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,cAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,MAAM;AAAA,GAC3E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,aAAA;AAAA,IACJ,OAAA,EAAS,IAAA;AAAA,IACT,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,UAAA;AAAA,IACJ,OAAA,EAAS,CAAA;AAAA,IACT,WAAA,EAAa,UAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,YAAA;AAAA,IACJ,OAAA,EAAS,GAAA;AAAA,IACT,WAAA,EAAa,SAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,cAAA;AAAA,IACJ,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,cAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,eAAA;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,WAAA,EAAa,kBAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,cAAA;AAAA,IACJ,OAAA,EAAS,KAAA;AAAA,IACT,WAAA,EAAa,mBAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB,IAAA,CAAK,4CAAA,EAA8C,UAAU;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,yCAAA;AAAA,IACJ,WAAA,EAAa,QAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB;AAAA,MACd,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,8CAAA;AAAA,MACT,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA,EAAI,yCAAA;AAAA,IACJ,WAAA,EAAa,eAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB;AAAA,MACd,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,8CAAA;AAAA,MACT,QAAA,EAAU;AAAA;AACZ,GACF;AAAA;AAAA,EAEA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,EAAA,EAAI,cAAA;AAAA,IACJ,WAAA,EAAa,MAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB;AAAA,MACd,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,kEAAA;AAAA,MACT,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,MAAA;AAAA,IACR,EAAA,EAAI,cAAA;AAAA,IACJ,WAAA,EAAa,cAAA;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,cAAA,EAAgB;AAAA,MACd,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,kEAAA;AAAA,MACT,QAAA,EAAU;AAAA;AACZ;AAEJ,CAAA;AAEA,IAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,OAAA,KAAY,CAAC,OAAA,CAAQ,EAAA,EAAI,OAAO,CAAC,CAAC,CAAA;AAM/D,IAAM,wBAA2C,QAAA,CAAS,MAAA;AAAA,EAC/D,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW;AACtB,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE;AAGjB,IAAM,cAAA,GAAiB,0BAAA;AAEvB,SAAS,OAAA,CAAQ,SAAiB,IAAA,EAA6B;AAC7D,EAAA,OAAO,IAAI,cAAc,gBAAA,EAAkB,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAK,EAAG,CAAA;AAC3E;AASO,SAAS,eAAA,CAAgB,IAAY,MAAA,EAAkD;AAC5F,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA;AAC5B,EAAA,IAAI,SAAS,OAAO,OAAA;AACpB,EAAA,MAAM,QAAA,GAAW,SAAS,EAAE,CAAA;AAC5B,EAAA,MAAM,UAAU,MAAA,CAAO,cAAA,CAAe,KAAK,EAAE,CAAA,GAAI,CAAC,CAAC,CAAA;AACnD,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,OAAO,aAAA,CAAc,OAAO,GAAG,OAAO,MAAA;AACxD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,KAAA;AAAA,IACR,EAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAa,QAAA,CAAS,WAAA;AAAA,IACtB,MAAM,QAAA,CAAS;AAAA,GACjB;AACF;AAEO,SAAS,kBAAA,CAAmB,EAAA,EAAY,IAAA,EAAc,MAAA,EAAsC;AACjG,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,EAAA,EAAI,MAAM,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,EAAE,0DAA0D,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,yFAAA,CAAA;AAAA,MAC7G,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,IAAG;AAAE,KACnC;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,sBAAA,CAAuB,QAAwB,IAAA,EAAoB;AACjF,EAAA,KAAA,MAAW,EAAA,IAAM,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACpC,IAAA,MAAM,EAAA,GAAK,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AACxB,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AACjB,MAAA,MAAM,OAAA;AAAA,QACJ,CAAA,EAAG,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,mEAAA,CAAA;AAAA,QACb;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,eAAA,CAAgB,EAAA,EAAI,MAAM,CAAA,EAAG;AAChC,MAAA,MAAM,OAAA;AAAA,QACJ,CAAA,EAAG,EAAE,CAAA,GAAA,EAAM,EAAE,CAAA,4HAAA,CAAA;AAAA,QACb;AAAA,OACF;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,sBAAsB,OAAA,EAGnB;AACjB,EAAA,OAAO,OAAA,CAAQ,KAAA,GAAQ,OAAA,GAAU,OAAA,CAAQ,IAAA;AAC3C;AAGA,IAAM,mBAAA,GAAsB,gCAAA;AAErB,SAAS,uBAAuB,IAAA,EAA8B;AACnE,EAAA,OAAO,IAAA,KAAS,SAAA,GAAY,mBAAA,GAAsB,IAAA,CAAK,WAAA,EAAY;AACrE;;;AC7QA,IAAM,WAAA,GAAc,qBAAA;AACpB,IAAM,QAAA,GAAW,YAAA;AAGV,IAAM,YAAA,GAAe,CAAC,KAAA,KAC3B,OAAO,UAAU,QAAA,IAAY,WAAA,CAAY,KAAK,KAAK;AAG9C,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAA2B,QAAA,CAAS,KAAK,KAAK;AAE/E,IAAM,eAAA,GAAkB,4DAAA;AAExB,IAAM,cAAA,GAAiB,+BAAA;AAEvB,IAAM,WAAA,GAAc,kCAAA;AACpB,IAAM,oBAAA,GAAuB,qBAAA;AAE7B,IAAM,gBAAA,GAAmB,+BAAA;AAIzB,IAAM,eAAA,GAAkB,uDAAA;AAExB,IAAM,qBAAA,GAAwB,+BAAA;AAMvB,SAAS,gBAAA,CAAiB,SAAsB,KAAA,EAAmC;AACxF,EAAA,QAAQ,QAAQ,MAAA;AAAQ,IACtB,KAAK,KAAA;AACH,MAAA,OAAO,YAAA,CAAa,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAA;AAAA,IACvC,KAAK,KAAA;AACH,MAAA,OAAO,cAAA,CAAe,KAAK,KAAK,CAAA,IAAK,iBAAiB,KAAK,CAAA,KAAM,KAAK,KAAA,GAAQ,MAAA;AAAA,IAChF,KAAK,MAAA;AACH,MAAA,OAAO,KAAA,CAAM,MAAA,IAAU,CAAA,IAAK,KAAA,CAAM,MAAA,IAAU,MAAM,eAAA,CAAgB,IAAA,CAAK,KAAK,CAAA,GACxE,KAAA,GACA,MAAA;AAAA;AAEV;AAMO,SAAS,aAAA,CAAc,SAAsB,WAAA,EAA8B;AAChF,EAAA,QAAQ,QAAQ,MAAA;AAAQ,IACtB,KAAK,KAAA;AACH,MAAA,OAAO,iBAAiB,WAAW,CAAA;AAAA,IACrC,KAAK,KAAA;AACH,MAAA,OAAO,WAAA,KAAgB,WAAA;AAAA,IACzB,KAAK,MAAA;AACH,MAAA,OAAO,KAAA;AAAA;AAEb;AAGO,SAAS,WAAA,CAAY,OAAA,EAAsB,CAAA,EAAW,CAAA,EAAoB;AAC/E,EAAA,OAAO,OAAA,CAAQ,WAAW,KAAA,GAAQ,CAAA,CAAE,aAAY,KAAM,CAAA,CAAE,WAAA,EAAY,GAAI,CAAA,KAAM,CAAA;AAChF;AAMO,SAAS,sBAAA,CAAuB,SAAsB,KAAA,EAAwB;AACnF,EAAA,QAAQ,QAAQ,MAAA;AAAQ,IACtB,KAAK,KAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,KAAK,KAAK,CAAA;AAAA,IACxC,KAAK,KAAA;AACH,MAAA,OAAO,iBAAiB,IAAA,CAAK,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,KAAM,EAAA;AAAA,IACrE,KAAK,MAAA;AACH,MAAA,OAAO,sBAAsB,IAAA,CAAK,KAAK,CAAA,IAAK,gBAAA,CAAiB,KAAK,CAAA,KAAM,EAAA;AAAA;AAE9E;AAEA,SAAS,iBAAiB,KAAA,EAAuB;AAC/C,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,CAAA,GAAI,CAAA,GAAI,MAAM,MAAA,CAAO,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAC,CAAA;AAE5E,EAAA,MAAM,eAAe,KAAA,CAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,MAAA;AAC7D,EAAA,OAAO,YAAA,IAAgB,CAAA,KAAM,EAAA,GAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,CAAA;AAC3E;;;ACvFO,IAAM,kBAAA,GAAqB,CAAC,eAAA,EAAiB,SAAS;AAItD,IAAM,yBAAA,GAA6C;;;ACSnD,IAAM,yBAAA,GAIT;AAAA,EACF;AAAA,IACE,OAAA,EAAS,4CAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,OAAA,EAAS,4CAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA;AAAA,IACE,OAAA,EAAS,4CAAA;AAAA,IACT,UAAA,EAAY;AAAA;AAEhB;AAEyC,0BAA0B,CAAC;AAC9B,0BAA0B,CAAC;AAC9B,0BAA0B,CAAC","file":"chunk-7JNYFUT3.js","sourcesContent":["/**\n * Set on a payment requirement to run the backend before settlement.\n * The pipeline settles first unless this metadata value is `true`.\n */\nexport const SETTLE_AFTER_BACKEND_METADATA_KEY = 'settleAfterBackend';\n\n/**\n * Set to `true` when the rail permits presenting an authorization again after\n * its attempt was rejected, which settled nothing; the chain still spends each\n * nonce once. The pipeline lets retries reclaim the rejected attempt;\n * otherwise, it refuses them as replays.\n */\nexport const REUSE_REJECTED_AUTHORIZATION_METADATA_KEY = 'reuseRejectedAuthorization';\n","/**\n * Network profiles: family, display name, environment, EVM chain ID and\n * default stablecoin. Config load rejects unknown IDs; parsing an EVM chain\n * ID cannot establish whether it is mainnet. Merchants must declare custom\n * EVM networks under `payments.x402.networks`; built-ins cannot be redeclared.\n *\n * Profiles copy SDK asset defaults to keep config load and the CLI SDK-free.\n * Tests compare each profile with the pinned SDK tables.\n *\n * The local Anvil chain has a profile of its own, `eip155:31337` (Anvil's\n * default chain id), so the network alone tells a local deployment from a\n * public one. Local health checks still require an Anvil response, because an\n * RPC endpoint can report any chain id.\n */\nimport { CommerceError } from '../../core';\n\n/** Chain id of the local Anvil dev chain, Anvil's default */\nexport const LOCAL_CHAIN_ID = 31337;\n\nexport type X402NetworkFamily = 'evm' | 'svm' | 'near';\n\nexport type NetworkKind = 'testnet' | 'mainnet';\n\n/** An EVM network the x402 provider can settle on */\nexport interface NetworkProfile {\n /** CAIP-2 identifier, e.g. `eip155:84532` */\n readonly id: string;\n /** Signed into the buyer's EIP-712 domain */\n readonly chainId: number;\n readonly displayName: string;\n readonly kind: NetworkKind;\n /** The local Anvil dev chain, where the in-process facilitator runs */\n readonly local?: boolean;\n /**\n * Default USDC deployment and EIP-712 domain. A public network's offers\n * settle only in it; the local chain has none and names its mock token.\n *\n * `name` is the signed EIP-712 domain name, not the symbol, and deployments\n * differ: `\"USDC\"` on Base Sepolia, `\"USD Coin\"` on Base.\n */\n readonly canonicalAsset?: {\n readonly symbol: string;\n readonly address: string;\n readonly name: string;\n readonly version: string;\n readonly decimals: number;\n };\n}\n\ninterface NonEvmNetwork<F extends X402NetworkFamily> {\n readonly family: F;\n readonly id: string;\n readonly displayName: string;\n readonly kind: NetworkKind;\n /** Solana mint or NEAR NEP-141 contract account, with no EIP-712 domain */\n readonly canonicalAsset: {\n readonly symbol: string;\n readonly address: string;\n readonly decimals: number;\n };\n}\n\nexport type X402Network =\n | (NetworkProfile & { readonly family: 'evm' })\n | NonEvmNetwork<'svm'>\n | NonEvmNetwork<'near'>;\n\n/** A merchant-declared EVM network, from `payments.x402.networks` */\nexport interface CustomNetworkDeclaration {\n readonly kind: NetworkKind;\n readonly displayName: string;\n}\n\nexport type CustomNetworks = Readonly<Record<string, CustomNetworkDeclaration>>;\n\nconst usdc = (address: string, name: string) =>\n ({ symbol: 'USDC', address, name, version: '2', decimals: 6 }) as const;\n\nconst PROFILES: readonly X402Network[] = [\n {\n family: 'evm',\n id: `eip155:${LOCAL_CHAIN_ID}`,\n chainId: LOCAL_CHAIN_ID,\n displayName: 'Local Anvil',\n kind: 'testnet',\n local: true,\n },\n {\n family: 'evm',\n id: 'eip155:84532',\n chainId: 84532,\n displayName: 'Base Sepolia',\n kind: 'testnet',\n canonicalAsset: usdc('0x036CbD53842c5426634e7929541eC2318f3dCF7e', 'USDC'),\n },\n {\n family: 'evm',\n id: 'eip155:8453',\n chainId: 8453,\n displayName: 'Base',\n kind: 'mainnet',\n canonicalAsset: usdc('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', 'USD Coin'),\n },\n {\n family: 'evm',\n id: 'eip155:1',\n chainId: 1,\n displayName: 'Ethereum',\n kind: 'mainnet',\n canonicalAsset: usdc('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 'USD Coin'),\n },\n {\n family: 'evm',\n id: 'eip155:137',\n chainId: 137,\n displayName: 'Polygon',\n kind: 'mainnet',\n canonicalAsset: usdc('0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', 'USD Coin'),\n },\n {\n family: 'evm',\n id: 'eip155:42161',\n chainId: 42161,\n displayName: 'Arbitrum One',\n kind: 'mainnet',\n canonicalAsset: usdc('0xaf88d065e77c8cC2239327C5EDb3A432268e5831', 'USD Coin'),\n },\n {\n family: 'evm',\n id: 'eip155:421614',\n chainId: 421614,\n displayName: 'Arbitrum Sepolia',\n kind: 'testnet',\n canonicalAsset: usdc('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d', 'USD Coin'),\n },\n {\n family: 'evm',\n id: 'eip155:43114',\n chainId: 43114,\n displayName: 'Avalanche C-Chain',\n kind: 'mainnet',\n canonicalAsset: usdc('0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E', 'USD Coin'),\n },\n {\n family: 'svm',\n id: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n displayName: 'Solana',\n kind: 'mainnet',\n canonicalAsset: {\n symbol: 'USDC',\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n decimals: 6,\n },\n },\n {\n family: 'svm',\n id: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n displayName: 'Solana Devnet',\n kind: 'testnet',\n canonicalAsset: {\n symbol: 'USDC',\n address: '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU',\n decimals: 6,\n },\n },\n // NEAR's USDC contracts are implicit accounts: 64 lowercase hex characters\n {\n family: 'near',\n id: 'near:mainnet',\n displayName: 'NEAR',\n kind: 'mainnet',\n canonicalAsset: {\n symbol: 'USDC',\n address: '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1',\n decimals: 6,\n },\n },\n {\n family: 'near',\n id: 'near:testnet',\n displayName: 'NEAR Testnet',\n kind: 'testnet',\n canonicalAsset: {\n symbol: 'USDC',\n address: '3e2210e1184b45b64c8a434c0a7e7b23cc04ea7eb7a6c3c32520d03d4afcb8af',\n decimals: 6,\n },\n },\n];\n\nconst BY_ID = new Map(PROFILES.map((profile) => [profile.id, profile]));\n\n/** Built-in networks of every family, for tests and diagnostics */\nexport const BUILT_IN_NETWORKS: readonly X402Network[] = PROFILES;\n\n/** The built-in EVM networks the x402 provider settles on without a declaration */\nexport const SUPPORTED_NETWORK_IDS: readonly string[] = PROFILES.filter(\n (p) => p.family === 'evm',\n).map((p) => p.id);\n\n// A chain id viem and EIP-712 can carry as a JS number\nconst EVM_NETWORK_ID = /^eip155:([1-9]\\d{0,15})$/;\n\nfunction invalid(message: string, path: string): CommerceError {\n return new CommerceError('CONFIG_INVALID', message, { details: { path } });\n}\n\n/** Built-in EVM profile for callers using the original network interface */\nexport function findNetworkProfile(id: string): NetworkProfile | undefined {\n const profile = BY_ID.get(id);\n return profile?.family === 'evm' ? profile : undefined;\n}\n\n/** A built-in network of any family, or a declared custom EVM network */\nexport function findX402Network(id: string, custom?: CustomNetworks): X402Network | undefined {\n const builtIn = BY_ID.get(id);\n if (builtIn) return builtIn;\n const declared = custom?.[id];\n const chainId = Number(EVM_NETWORK_ID.exec(id)?.[1]);\n if (!declared || !Number.isSafeInteger(chainId)) return undefined;\n return {\n family: 'evm',\n id,\n chainId,\n displayName: declared.displayName,\n kind: declared.kind,\n };\n}\n\nexport function requireX402Network(id: string, path: string, custom?: CustomNetworks): X402Network {\n const network = findX402Network(id, custom);\n if (!network) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `${path}: \"${id}\" is not a known network. Built-in CAIP-2 identifiers: ${PROFILES.map((p) => p.id).join(', ')}. Declare another EVM network under payments.x402.networks with its kind and displayName.`,\n { details: { path, network: id } },\n );\n }\n return network;\n}\n\n/**\n * Allows only new `eip155` networks in `payments.x402.networks`. Redeclaring\n * built-ins could relabel mainnet as testnet; Solana and NEAR IDs are SDK-fixed.\n */\nexport function validateCustomNetworks(custom: CustomNetworks, path: string): void {\n for (const id of Object.keys(custom)) {\n const at = `${path}.${id}`;\n if (BY_ID.has(id)) {\n throw invalid(\n `${at}: \"${id}\" is a built-in network and cannot be redeclared; remove this entry`,\n at,\n );\n }\n if (!findX402Network(id, custom)) {\n throw invalid(\n `${at}: \"${id}\" is not an EVM CAIP-2 identifier (\"eip155:\" followed by a positive chain id below 2^53). Only EVM networks can be declared.`,\n at,\n );\n }\n }\n}\n\n/** What a deployment is: the local dev chain, or a public testnet or mainnet */\nexport type DeploymentMode = 'local' | 'testnet' | 'mainnet';\n\nexport function resolveDeploymentMode(profile: {\n readonly kind: NetworkKind;\n readonly local?: boolean;\n}): DeploymentMode {\n return profile.local ? 'local' : profile.kind;\n}\n\n// The banner an operator must not miss. Printed for mainnet only\nconst LIVE_MAINNET_BANNER = 'LIVE MAINNET MODE - REAL FUNDS';\n\nexport function describeDeploymentMode(mode: DeploymentMode): string {\n return mode === 'mainnet' ? LIVE_MAINNET_BANNER : mode.toUpperCase();\n}\n","/**\n * SDK-free address checks for config load and the CLI. EVM addresses compare\n * without case; Solana keys and NEAR account IDs compare exactly.\n */\nimport type { X402Network } from './networks';\n\n// `0x` + 40 hex characters. Config load cannot check the EIP-55 checksum,\n// which needs keccak-256; the x402 and MPP providers refuse a mixed-case\n// address whose checksum is wrong when they start.\nconst EVM_ADDRESS = /^0x[0-9a-fA-F]{40}$/;\nconst EVM_ZERO = /^0x0{40}$/i;\n\n/** `0x` followed by 40 hex characters, in any case */\nexport const isEvmAddress = (value: unknown): value is `0x${string}` =>\n typeof value === 'string' && EVM_ADDRESS.test(value);\n\n/** The EVM zero address, in any case */\nexport const isEvmZeroAddress = (value: string): boolean => EVM_ZERO.test(value);\n\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\n// A 32-byte key is 32 to 44 base58 characters\nconst SOLANA_ADDRESS = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n// The all-zero key, which is the System Program and owns nothing recoverable\nconst SOLANA_ZERO = '11111111111111111111111111111111';\nconst EVM_TRANSACTION_HASH = /^0x[0-9a-fA-F]{64}$/;\n// A 64-byte Ed25519 signature is at most 88 base58 characters\nconst SOLANA_SIGNATURE = /^[1-9A-HJ-NP-Za-km-z]{64,88}$/;\n\n// nearcore's account ID rule: 2 to 64 characters, lowercase alphanumeric runs\n// joined by single \"-\", \"_\" or \".\"; implicit accounts are 64 hex characters\nconst NEAR_ACCOUNT_ID = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n// A transaction hash: 32 bytes in base58\nconst NEAR_TRANSACTION_HASH = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\n/**\n * Returns the family's wire address or `undefined`. NEAR uses named or\n * implicit account IDs; a `.near` suffix does not identify the network.\n */\nexport function normalizeAddress(network: X402Network, value: string): string | undefined {\n switch (network.family) {\n case 'evm':\n return isEvmAddress(value) ? value : undefined;\n case 'svm':\n return SOLANA_ADDRESS.test(value) && base58ByteLength(value) === 32 ? value : undefined;\n case 'near':\n return value.length >= 2 && value.length <= 64 && NEAR_ACCOUNT_ID.test(value)\n ? value\n : undefined;\n }\n}\n\n/**\n * An address funds cannot be recovered from: the zero address of its family.\n * NEAR has no zero account.\n */\nexport function isBurnAddress(network: X402Network, wireAddress: string): boolean {\n switch (network.family) {\n case 'evm':\n return isEvmZeroAddress(wireAddress);\n case 'svm':\n return wireAddress === SOLANA_ZERO;\n case 'near':\n return false;\n }\n}\n\n/** Compare EVM addresses case-insensitively, Solana keys and NEAR account IDs exactly */\nexport function sameAddress(network: X402Network, a: string, b: string): boolean {\n return network.family === 'evm' ? a.toLowerCase() === b.toLowerCase() : a === b;\n}\n\n/**\n * A settlement reference in its family's form: an EVM transaction hash, a\n * Solana transaction signature or a NEAR transaction hash\n */\nexport function isTransactionReference(network: X402Network, value: string): boolean {\n switch (network.family) {\n case 'evm':\n return EVM_TRANSACTION_HASH.test(value);\n case 'svm':\n return SOLANA_SIGNATURE.test(value) && base58ByteLength(value) === 64;\n case 'near':\n return NEAR_TRANSACTION_HASH.test(value) && base58ByteLength(value) === 32;\n }\n}\n\nfunction base58ByteLength(value: string): number {\n let n = 0n;\n for (const char of value) n = n * 58n + BigInt(BASE58_ALPHABET.indexOf(char));\n // Each leading '1' encodes one leading zero byte\n const leadingZeros = value.length - value.replace(/^1+/, '').length;\n return leadingZeros + (n === 0n ? 0 : Math.ceil(n.toString(16).length / 2));\n}\n","/**\n * x402 exact-scheme flows, shared by the config loader and CLI.\n * The default `authorization` flow settles after a successful backend call;\n * `upfront` settles first.\n */\nexport const X402_PAYMENT_FLOWS = ['authorization', 'upfront'] as const;\n\nexport type X402PaymentFlow = (typeof X402_PAYMENT_FLOWS)[number];\n\nexport const X402_DEFAULT_PAYMENT_FLOW: X402PaymentFlow = 'authorization';\n","/**\n * Anvil's well-known development accounts.\n *\n * LOCAL DEVELOPMENT ONLY - DO NOT FUND. The keys come from Foundry's public\n * default mnemonic (\"test test ... junk\"), so value sent to these addresses on\n * a real network can be taken by anyone.\n *\n * Index layout on the local demo chain:\n * 0 - deployer and local facilitator signer (pays gas, broadcasts settlement)\n * 1 - merchant settlement destination (`payTo`)\n * 2 - buyer (signs EIP-3009 authorizations; never held by the gateway)\n */\nexport interface AnvilWellKnownAccount {\n readonly address: `0x${string}`;\n readonly privateKey: `0x${string}`;\n}\n\n/** A fixed-length tuple, so indexing by the layout above is typed */\nexport const ANVIL_WELL_KNOWN_ACCOUNTS: readonly [\n AnvilWellKnownAccount,\n AnvilWellKnownAccount,\n AnvilWellKnownAccount,\n] = [\n {\n address: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n privateKey: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',\n },\n {\n address: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8',\n privateKey: '0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d',\n },\n {\n address: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',\n privateKey: '0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a',\n },\n];\n\nexport const LOCAL_FACILITATOR_ACCOUNT = ANVIL_WELL_KNOWN_ACCOUNTS[0];\nexport const LOCAL_MERCHANT_ACCOUNT = ANVIL_WELL_KNOWN_ACCOUNTS[1];\nexport const LOCAL_BUYER_ACCOUNT = ANVIL_WELL_KNOWN_ACCOUNTS[2];\n\n/** Label printed wherever a dev key appears in output, logs or manifests */\nexport const DEV_KEY_LABEL = 'LOCAL DEVELOPMENT ONLY - DO NOT FUND';\n"]}
@@ -0,0 +1,27 @@
1
+ // src/payments/mpp/constants.ts
2
+ var MPP_SPEC_COMMIT = "806fdb8b8c92cda5c84b8660558921b6bbeef7e0";
3
+ var MPP_SPEC_DRAFTS = {
4
+ core: "draft-httpauth-payment-01",
5
+ intent: "draft-payment-intent-charge-00",
6
+ method: "draft-evm-charge-00"
7
+ };
8
+ var MPP_MIN_CHALLENGE_SECRET_LENGTH = 32;
9
+ var MPPX_VERSION = "0.13.1";
10
+ var MPP_PROFILE = {
11
+ intent: "charge",
12
+ method: "evm",
13
+ credentialType: "authorization",
14
+ assetSymbol: "USDC",
15
+ assetDecimals: 6
16
+ };
17
+ var MPP_NETWORKS = ["eip155:31337", "eip155:84532", "eip155:8453"];
18
+ var MPP_DEFAULT_NETWORK = "eip155:84532";
19
+ var MPP_DEFAULT_PAYMENT_FLOW = "upfront";
20
+ function isMppNetwork(value) {
21
+ return MPP_NETWORKS.includes(value);
22
+ }
23
+ var MPP_SUPPORTED_SPEC = `mpp/${MPP_SPEC_DRAFTS.core} intent=${MPP_PROFILE.intent} method=${MPP_PROFILE.method}`;
24
+
25
+ export { MPPX_VERSION, MPP_DEFAULT_NETWORK, MPP_DEFAULT_PAYMENT_FLOW, MPP_MIN_CHALLENGE_SECRET_LENGTH, MPP_NETWORKS, MPP_PROFILE, MPP_SPEC_COMMIT, MPP_SPEC_DRAFTS, MPP_SUPPORTED_SPEC, isMppNetwork };
26
+ //# sourceMappingURL=chunk-AA3FIEAR.js.map
27
+ //# sourceMappingURL=chunk-AA3FIEAR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/payments/mpp/constants.ts"],"names":[],"mappings":";AAoBO,IAAM,eAAA,GAAkB;AAGxB,IAAM,eAAA,GAAkB;AAAA,EAC7B,IAAA,EAAM,2BAAA;AAAA,EACN,MAAA,EAAQ,gCAAA;AAAA,EACR,MAAA,EAAQ;AACV;AAMO,IAAM,+BAAA,GAAkC;AAGxC,IAAM,YAAA,GAAe;AAUrB,IAAM,WAAA,GAAc;AAAA,EACzB,MAAA,EAAQ,QAAA;AAAA,EACR,MAAA,EAAQ,KAAA;AAAA,EACR,cAAA,EAAgB,eAAA;AAAA,EAChB,WAAA,EAAa,MAAA;AAAA,EACb,aAAA,EAAe;AACjB;AAGO,IAAM,YAAA,GAAe,CAAC,cAAA,EAAgB,cAAA,EAAgB,aAAa;AAKnE,IAAM,mBAAA,GAAkC;AAOxC,IAAM,wBAAA,GAA4C;AAElD,SAAS,aAAa,KAAA,EAAoC;AAC/D,EAAA,OAAQ,YAAA,CAAmC,SAAS,KAAK,CAAA;AAC3D;AAGO,IAAM,kBAAA,GAAqB,OAAO,eAAA,CAAgB,IAAI,WAAW,WAAA,CAAY,MAAM,CAAA,QAAA,EAAW,WAAA,CAAY,MAAM,CAAA","file":"chunk-AA3FIEAR.js","sourcesContent":["/**\n * The one MPP profile this rail targets.\n *\n * MPP combines a core HTTP authentication layer, an intent, a method and\n * optional extensions. These constants identify the selected combination and\n * the exact specification revision.\n *\n * Importing this metadata does not load `mppx`.\n */\nimport type { X402PaymentFlow } from '../x402/payment-flow';\n\n/** Upstream specification repository the pinned drafts were read from */\nexport const MPP_SPEC_REPOSITORY = 'https://github.com/tempoxyz/mpp-specs';\n\n/**\n * Upstream commit the pinned drafts were read at.\n *\n * A draft's content can change without its `-00` name changing, so the name\n * alone does not identify a document; the commit does.\n */\nexport const MPP_SPEC_COMMIT = '806fdb8b8c92cda5c84b8660558921b6bbeef7e0';\n\n/** The core HTTP authentication draft, the `charge` intent, and its EVM method */\nexport const MPP_SPEC_DRAFTS = {\n core: 'draft-httpauth-payment-01',\n intent: 'draft-payment-intent-charge-00',\n method: 'draft-evm-charge-00',\n} as const;\n\n/**\n * Minimum accepted `challengeSecret.length`. This is a configuration floor,\n * not an entropy check.\n */\nexport const MPP_MIN_CHALLENGE_SECRET_LENGTH = 32;\n\n/** Exact `mppx` release the rail is pinned to */\nexport const MPPX_VERSION = '0.13.1';\n\n/**\n * The pinned profile.\n *\n * `intent`, `method` and `credentialType` copy MPP wire identifiers from\n * `mppx` so this module has no peer import; tests detect drift. `assetSymbol`\n * is the pricing currency an MPP resource must use. EVM charge requests carry a\n * numeric `chainId` and token address instead.\n */\nexport const MPP_PROFILE = {\n intent: 'charge',\n method: 'evm',\n credentialType: 'authorization',\n assetSymbol: 'USDC',\n assetDecimals: 6,\n} as const;\n\n/** Supported CAIP-2 networks; gateway config applies the x402 mainnet guardrails */\nexport const MPP_NETWORKS = ['eip155:31337', 'eip155:84532', 'eip155:8453'] as const;\n\nexport type MppNetwork = (typeof MPP_NETWORKS)[number];\n\n/** Default network: Base Sepolia. The local Anvil chain is `eip155:31337` */\nexport const MPP_DEFAULT_NETWORK: MppNetwork = 'eip155:84532';\n\n/**\n * Default payment flow: `upfront` settles before the backend runs. The\n * `charge` intent counts a backend call made before verification completes as\n * partial access, and EVM charge verification includes the transfer itself.\n */\nexport const MPP_DEFAULT_PAYMENT_FLOW: X402PaymentFlow = 'upfront';\n\nexport function isMppNetwork(value: string): value is MppNetwork {\n return (MPP_NETWORKS as readonly string[]).includes(value);\n}\n\n/** Compact descriptor value naming the core draft, intent and method */\nexport const MPP_SUPPORTED_SPEC = `mpp/${MPP_SPEC_DRAFTS.core} intent=${MPP_PROFILE.intent} method=${MPP_PROFILE.method}`;\n"]}
@@ -0,0 +1,17 @@
1
+ // src/authorization/ap2/constants.ts
2
+ var AP2_SPEC_VERSION = "0.2.0";
3
+ var AP2_MODES = ["direct"];
4
+ var AP2_SIGNING_ALGORITHM = "ES256";
5
+ var AP2_KEY_TYPE = "EC";
6
+ var AP2_JWK_CURVE = "P-256";
7
+ var AP2_JWK_COORDINATE_BYTES = 32;
8
+ var AP2_JWK_MEMBERS = ["kty", "crv", "x", "y", "kid", "alg", "use"];
9
+ var AP2_CHECKOUT_MANDATE_VCT = "mandate.checkout.1";
10
+ var AP2_CHECKOUT_PROFILE = "agent-commerce/ap2/checkout/v1";
11
+ var AP2_DIGEST_ALGORITHM = "sha-256";
12
+ var AP2_DEFAULT_CLOCK_SKEW_SECONDS = 60;
13
+ var AP2_MAX_CLOCK_SKEW_SECONDS = 300;
14
+
15
+ export { AP2_CHECKOUT_MANDATE_VCT, AP2_CHECKOUT_PROFILE, AP2_DEFAULT_CLOCK_SKEW_SECONDS, AP2_DIGEST_ALGORITHM, AP2_JWK_COORDINATE_BYTES, AP2_JWK_CURVE, AP2_JWK_MEMBERS, AP2_KEY_TYPE, AP2_MAX_CLOCK_SKEW_SECONDS, AP2_MODES, AP2_SIGNING_ALGORITHM, AP2_SPEC_VERSION };
16
+ //# sourceMappingURL=chunk-FHCFR2GS.js.map
17
+ //# sourceMappingURL=chunk-FHCFR2GS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/authorization/ap2/constants.ts"],"names":[],"mappings":";AAQO,IAAM,gBAAA,GAAmB;AAOzB,IAAM,SAAA,GAAY,CAAC,QAAQ;AAO3B,IAAM,qBAAA,GAAwB;AAG9B,IAAM,YAAA,GAAe;AACrB,IAAM,aAAA,GAAgB;AAGtB,IAAM,wBAAA,GAA2B;AAOjC,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAO,KAAA,EAAO,KAAK,GAAA,EAAK,KAAA,EAAO,OAAO,KAAK;AAOpE,IAAM,wBAAA,GAA2B;AAQjC,IAAM,oBAAA,GAAuB;AAO7B,IAAM,oBAAA,GAAuB;AAG7B,IAAM,8BAAA,GAAiC;AAMvC,IAAM,0BAAA,GAA6B","file":"chunk-FHCFR2GS.js","sourcesContent":["/**\n * Pinned AP2 identifiers and key policy.\n *\n * AP2 v0.2.0 (2026-04-28, commit b4587ac) is the tagged release this gateway\n * verifies against; unversioned `main` is never implemented against. Config,\n * the verifier and `doctor` all read these, so a bump lands in one place.\n */\n\nexport const AP2_SPEC_VERSION = '0.2.0';\n\n/**\n * Direct only. Autonomous mode needs open mandates, cnf-bound agent keys and\n * constraint evaluation over `checkout.line_items`, none of which is\n * implemented, so it is refused rather than partly served.\n */\nexport const AP2_MODES = ['direct'] as const;\nexport type Ap2Mode = (typeof AP2_MODES)[number];\n\n/**\n * A single algorithm, so `alg=none` and the HMAC family are excluded by\n * construction rather than by a denylist\n */\nexport const AP2_SIGNING_ALGORITHM = 'ES256';\n\n/** The key type and curve ES256 implies. Any other pair is refused at load */\nexport const AP2_KEY_TYPE = 'EC';\nexport const AP2_JWK_CURVE = 'P-256';\n\n/** Byte length of a P-256 coordinate, before base64url encoding */\nexport const AP2_JWK_COORDINATE_BYTES = 32;\n\n/**\n * JWK members a verification key may carry. An allowlist, so private material\n * (`d`) and URL members (`x5u`, `jku`) are refused without the list naming\n * them. Keys are configured inline and never fetched; see docs/security.md.\n */\nexport const AP2_JWK_MEMBERS = ['kty', 'crv', 'x', 'y', 'kid', 'alg', 'use'] as const;\n\n/**\n * Compared against this literal, never as a prefix. `mandate.checkout.open.1`\n * carries spending constraints nothing here evaluates, so accepting it would\n * tell a buyer their limits were checked when nothing read them.\n */\nexport const AP2_CHECKOUT_MANDATE_VCT = 'mandate.checkout.1';\n\n/**\n * Merchant checkout JWTs declare this gateway-specific profile; AP2 leaves\n * the checkout payload out of scope. The identifier is a namespace that\n * clients do not dereference. Merchants sign it into each checkout JWT, so\n * changing the expected value would reject previously signed JWTs.\n */\nexport const AP2_CHECKOUT_PROFILE = 'agent-commerce/ap2/checkout/v1';\n\n/**\n * The only accepted SD-JWT `_sd_alg` (an absent one means sha-256). Any other\n * value is refused rather than hashed as sha-256, which would check a\n * presentation under an algorithm it never claimed.\n */\nexport const AP2_DIGEST_ALGORITHM = 'sha-256';\n\n/** Seconds of clock skew tolerated on mandate and checkout time claims */\nexport const AP2_DEFAULT_CLOCK_SKEW_SECONDS = 60;\n\n/**\n * Skew as wide as a mandate's validity window would stop `exp` rejecting\n * anything. An operator who needs more than five minutes has a clock to fix.\n */\nexport const AP2_MAX_CLOCK_SKEW_SECONDS = 300;\n"]}
@@ -0,0 +1,8 @@
1
+ import 'module';
2
+
3
+ // src/version.ts
4
+ var PACKAGE_VERSION = "2.2.0" ;
5
+
6
+ export { PACKAGE_VERSION };
7
+ //# sourceMappingURL=chunk-FRMLWGSS.js.map
8
+ //# sourceMappingURL=chunk-FRMLWGSS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/version.ts"],"names":[],"mappings":";;;AAsBO,IAAM,eAAA,GACmC,OAAA","file":"chunk-FRMLWGSS.js","sourcesContent":["/**\n * The package version, resolved once for the whole package.\n *\n * The build injects `__OAC_PACKAGE_VERSION__` (tsup.config.ts), because a\n * relative manifest path resolves from the wrong depth once `src/**` is\n * bundled. From source, the root manifest is read instead. `typeof` on an\n * undeclared identifier is safe, so the source path runs without the constant.\n */\nimport { createRequire } from 'node:module';\n\ndeclare const __OAC_PACKAGE_VERSION__: string | undefined;\n\nfunction readFromManifest(): string {\n try {\n const require = createRequire(import.meta.url);\n // src/version.ts -> repository root\n return (require('../package.json') as { version?: string }).version ?? '0.0.0-unknown';\n } catch {\n return '0.0.0-unknown';\n }\n}\n\nexport const PACKAGE_VERSION: string =\n typeof __OAC_PACKAGE_VERSION__ === 'string' ? __OAC_PACKAGE_VERSION__ : readFromManifest();\n"]}