@wtflabs/x402 0.0.1-beta.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 (96) hide show
  1. package/README.md +60 -0
  2. package/dist/cjs/client/index.d.ts +64 -0
  3. package/dist/cjs/client/index.js +832 -0
  4. package/dist/cjs/client/index.js.map +1 -0
  5. package/dist/cjs/config-CFBSAuxW.d.ts +10 -0
  6. package/dist/cjs/config-Dfuvno71.d.ts +19 -0
  7. package/dist/cjs/facilitator/index.d.ts +42 -0
  8. package/dist/cjs/facilitator/index.js +2574 -0
  9. package/dist/cjs/facilitator/index.js.map +1 -0
  10. package/dist/cjs/index.d.ts +16 -0
  11. package/dist/cjs/index.js +2974 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/middleware-6_1ApcJn.d.ts +93 -0
  14. package/dist/cjs/middleware-B_ewwsQp.d.ts +93 -0
  15. package/dist/cjs/middleware-Brgsx32F.d.ts +93 -0
  16. package/dist/cjs/middleware-BwfW7mAs.d.ts +93 -0
  17. package/dist/cjs/middleware-CQb61c1k.d.ts +93 -0
  18. package/dist/cjs/middleware-DB9lqy9f.d.ts +93 -0
  19. package/dist/cjs/middleware-DcHctwQV.d.ts +93 -0
  20. package/dist/cjs/middleware-De0jD3Bp.d.ts +93 -0
  21. package/dist/cjs/middleware-HoFOmpgv.d.ts +93 -0
  22. package/dist/cjs/middleware-Y8AiAfYw.d.ts +93 -0
  23. package/dist/cjs/middleware-pnres9YM.d.ts +93 -0
  24. package/dist/cjs/network-FrFmmiyj.d.ts +11 -0
  25. package/dist/cjs/network-RtNddYQk.d.ts +11 -0
  26. package/dist/cjs/paywall/index.d.ts +30 -0
  27. package/dist/cjs/paywall/index.js +131 -0
  28. package/dist/cjs/paywall/index.js.map +1 -0
  29. package/dist/cjs/rpc-BMvnNNHd.d.ts +35 -0
  30. package/dist/cjs/rpc-Ca8eHCWz.d.ts +35 -0
  31. package/dist/cjs/schemes/index.d.ts +533 -0
  32. package/dist/cjs/schemes/index.js +3144 -0
  33. package/dist/cjs/schemes/index.js.map +1 -0
  34. package/dist/cjs/shared/evm/index.d.ts +71 -0
  35. package/dist/cjs/shared/evm/index.js +947 -0
  36. package/dist/cjs/shared/evm/index.js.map +1 -0
  37. package/dist/cjs/shared/index.d.ts +182 -0
  38. package/dist/cjs/shared/index.js +674 -0
  39. package/dist/cjs/shared/index.js.map +1 -0
  40. package/dist/cjs/types/index.d.ts +1515 -0
  41. package/dist/cjs/types/index.js +1645 -0
  42. package/dist/cjs/types/index.js.map +1 -0
  43. package/dist/cjs/verify/index.d.ts +7 -0
  44. package/dist/cjs/verify/index.js +438 -0
  45. package/dist/cjs/verify/index.js.map +1 -0
  46. package/dist/cjs/wallet-BRWfOM5D.d.ts +153 -0
  47. package/dist/cjs/wallet-BTqCm9Zp.d.ts +27 -0
  48. package/dist/cjs/wallet-BYRAGtOB.d.ts +153 -0
  49. package/dist/cjs/wallet-BmEtlgEf.d.ts +48 -0
  50. package/dist/cjs/wallet-CNOAmyZ6.d.ts +48 -0
  51. package/dist/cjs/wallet-CQ0Fe_M5.d.ts +88 -0
  52. package/dist/cjs/wallet-D1SoxFTw.d.ts +48 -0
  53. package/dist/cjs/wallet-SJ-hbjm9.d.ts +153 -0
  54. package/dist/cjs/wallet-SJKJpUgQ.d.ts +167 -0
  55. package/dist/cjs/wallet-ecnda4Aj.d.ts +48 -0
  56. package/dist/cjs/wallet-gP8Qoi-c.d.ts +74 -0
  57. package/dist/cjs/x402Specs-B7InXo2L.d.ts +1065 -0
  58. package/dist/cjs/x402Specs-BLH3j34O.d.ts +1696 -0
  59. package/dist/cjs/x402Specs-C7LipAZg.d.ts +1715 -0
  60. package/dist/cjs/x402Specs-CYq5tSY1.d.ts +1745 -0
  61. package/dist/cjs/x402Specs-CeajqonG.d.ts +1696 -0
  62. package/dist/cjs/x402Specs-qMujgEV5.d.ts +1715 -0
  63. package/dist/cjs/x402Specs-qUBCpcuz.d.ts +1715 -0
  64. package/dist/esm/chunk-34YNR4LY.mjs +106 -0
  65. package/dist/esm/chunk-34YNR4LY.mjs.map +1 -0
  66. package/dist/esm/chunk-57UEJN5U.mjs +1416 -0
  67. package/dist/esm/chunk-57UEJN5U.mjs.map +1 -0
  68. package/dist/esm/chunk-5LTKIVOA.mjs +858 -0
  69. package/dist/esm/chunk-5LTKIVOA.mjs.map +1 -0
  70. package/dist/esm/chunk-AQQR4PXH.mjs +80 -0
  71. package/dist/esm/chunk-AQQR4PXH.mjs.map +1 -0
  72. package/dist/esm/chunk-LGXWNXCO.mjs +76 -0
  73. package/dist/esm/chunk-LGXWNXCO.mjs.map +1 -0
  74. package/dist/esm/chunk-RX2JKK4O.mjs +349 -0
  75. package/dist/esm/chunk-RX2JKK4O.mjs.map +1 -0
  76. package/dist/esm/chunk-UCBE7FDY.mjs +1041 -0
  77. package/dist/esm/chunk-UCBE7FDY.mjs.map +1 -0
  78. package/dist/esm/client/index.mjs +17 -0
  79. package/dist/esm/client/index.mjs.map +1 -0
  80. package/dist/esm/facilitator/index.mjs +14 -0
  81. package/dist/esm/facilitator/index.mjs.map +1 -0
  82. package/dist/esm/index.mjs +28 -0
  83. package/dist/esm/index.mjs.map +1 -0
  84. package/dist/esm/paywall/index.mjs +46 -0
  85. package/dist/esm/paywall/index.mjs.map +1 -0
  86. package/dist/esm/schemes/index.mjs +16 -0
  87. package/dist/esm/schemes/index.mjs.map +1 -0
  88. package/dist/esm/shared/evm/index.mjs +20 -0
  89. package/dist/esm/shared/evm/index.mjs.map +1 -0
  90. package/dist/esm/shared/index.mjs +31 -0
  91. package/dist/esm/shared/index.mjs.map +1 -0
  92. package/dist/esm/types/index.mjs +87 -0
  93. package/dist/esm/types/index.mjs.map +1 -0
  94. package/dist/esm/verify/index.mjs +105 -0
  95. package/dist/esm/verify/index.mjs.map +1 -0
  96. package/package.json +148 -0
@@ -0,0 +1,674 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/shared/index.ts
21
+ var shared_exports = {};
22
+ __export(shared_exports, {
23
+ Base64EncodedRegex: () => Base64EncodedRegex,
24
+ computeRoutePatterns: () => computeRoutePatterns,
25
+ decodeXPaymentResponse: () => decodeXPaymentResponse,
26
+ findMatchingPaymentRequirements: () => findMatchingPaymentRequirements,
27
+ findMatchingRoute: () => findMatchingRoute,
28
+ getDefaultAsset: () => getDefaultAsset,
29
+ getNetworkId: () => getNetworkId,
30
+ processPriceToAtomicAmount: () => processPriceToAtomicAmount,
31
+ safeBase64Decode: () => safeBase64Decode,
32
+ safeBase64Encode: () => safeBase64Encode,
33
+ svm: () => svm_exports2,
34
+ toJsonSafe: () => toJsonSafe
35
+ });
36
+ module.exports = __toCommonJS(shared_exports);
37
+
38
+ // src/shared/json.ts
39
+ function toJsonSafe(data) {
40
+ if (typeof data !== "object") {
41
+ throw new Error("Data is not an object");
42
+ }
43
+ function convert(value) {
44
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
45
+ return Object.fromEntries(Object.entries(value).map(([key, val]) => [key, convert(val)]));
46
+ }
47
+ if (Array.isArray(value)) {
48
+ return value.map(convert);
49
+ }
50
+ if (typeof value === "bigint") {
51
+ return value.toString();
52
+ }
53
+ return value;
54
+ }
55
+ return convert(data);
56
+ }
57
+
58
+ // src/shared/base64.ts
59
+ var Base64EncodedRegex = /^[A-Za-z0-9+/]*={0,2}$/;
60
+ function safeBase64Encode(data) {
61
+ if (typeof globalThis !== "undefined" && typeof globalThis.btoa === "function") {
62
+ return globalThis.btoa(data);
63
+ }
64
+ return Buffer.from(data).toString("base64");
65
+ }
66
+ function safeBase64Decode(data) {
67
+ if (typeof globalThis !== "undefined" && typeof globalThis.atob === "function") {
68
+ return globalThis.atob(data);
69
+ }
70
+ return Buffer.from(data, "base64").toString("utf-8");
71
+ }
72
+
73
+ // src/types/shared/money.ts
74
+ var import_zod = require("zod");
75
+ var moneySchema = import_zod.z.union([import_zod.z.string().transform((x) => x.replace(/[^0-9.-]+/g, "")), import_zod.z.number()]).pipe(import_zod.z.coerce.number().min(1e-4).max(999999999));
76
+
77
+ // src/types/shared/network.ts
78
+ var import_zod2 = require("zod");
79
+ var NetworkSchema = import_zod2.z.enum([
80
+ "base-sepolia",
81
+ "base",
82
+ "avalanche-fuji",
83
+ "avalanche",
84
+ "iotex",
85
+ "solana-devnet",
86
+ "solana",
87
+ "sei",
88
+ "sei-testnet",
89
+ "polygon",
90
+ "polygon-amoy",
91
+ "peaq",
92
+ "bsc",
93
+ "bsc-testnet"
94
+ ]);
95
+ var SupportedEVMNetworks = [
96
+ "base-sepolia",
97
+ "base",
98
+ "avalanche-fuji",
99
+ "avalanche",
100
+ "iotex",
101
+ "sei",
102
+ "sei-testnet",
103
+ "polygon",
104
+ "polygon-amoy",
105
+ "peaq",
106
+ "bsc",
107
+ "bsc-testnet"
108
+ ];
109
+ var EvmNetworkToChainId = /* @__PURE__ */ new Map([
110
+ ["base-sepolia", 84532],
111
+ ["base", 8453],
112
+ ["avalanche-fuji", 43113],
113
+ ["avalanche", 43114],
114
+ ["iotex", 4689],
115
+ ["sei", 1329],
116
+ ["sei-testnet", 1328],
117
+ ["polygon", 137],
118
+ ["polygon-amoy", 80002],
119
+ ["peaq", 3338],
120
+ ["bsc", 56],
121
+ ["bsc-testnet", 97]
122
+ ]);
123
+ var SupportedSVMNetworks = ["solana-devnet", "solana"];
124
+ var SvmNetworkToChainId = /* @__PURE__ */ new Map([
125
+ ["solana-devnet", 103],
126
+ ["solana", 101]
127
+ ]);
128
+ var ChainIdToNetwork = Object.fromEntries(
129
+ [...SupportedEVMNetworks, ...SupportedSVMNetworks].map((network) => [
130
+ EvmNetworkToChainId.get(network),
131
+ network
132
+ ])
133
+ );
134
+
135
+ // src/types/shared/evm/wallet.ts
136
+ var import_viem = require("viem");
137
+ var import_chains = require("viem/chains");
138
+ var import_accounts = require("viem/accounts");
139
+
140
+ // src/shared/svm/wallet.ts
141
+ var import_kit2 = require("@solana/kit");
142
+ var import_base = require("@scure/base");
143
+
144
+ // src/shared/svm/rpc.ts
145
+ var import_kit = require("@solana/kit");
146
+ var DEVNET_RPC_URL = "https://api.devnet.solana.com";
147
+ var MAINNET_RPC_URL = "https://api.mainnet-beta.solana.com";
148
+ var DEVNET_WS_URL = "wss://api.devnet.solana.com";
149
+ var MAINNET_WS_URL = "wss://api.mainnet-beta.solana.com";
150
+ function createDevnetRpcClient(url) {
151
+ return (0, import_kit.createSolanaRpc)(
152
+ url ? (0, import_kit.devnet)(url) : (0, import_kit.devnet)(DEVNET_RPC_URL)
153
+ );
154
+ }
155
+ function createMainnetRpcClient(url) {
156
+ return (0, import_kit.createSolanaRpc)(
157
+ url ? (0, import_kit.mainnet)(url) : (0, import_kit.mainnet)(MAINNET_RPC_URL)
158
+ );
159
+ }
160
+ function getRpcClient(network, url) {
161
+ if (network === "solana-devnet") {
162
+ return createDevnetRpcClient(url);
163
+ } else if (network === "solana") {
164
+ return createMainnetRpcClient(url);
165
+ } else {
166
+ throw new Error("Invalid network");
167
+ }
168
+ }
169
+ function getRpcSubscriptions(network, url) {
170
+ if (network === "solana-devnet") {
171
+ return (0, import_kit.createSolanaRpcSubscriptions)((0, import_kit.devnet)(url ? httpToWs(url) : DEVNET_WS_URL));
172
+ } else if (network === "solana") {
173
+ return (0, import_kit.createSolanaRpcSubscriptions)((0, import_kit.mainnet)(url ? httpToWs(url) : MAINNET_WS_URL));
174
+ } else {
175
+ throw new Error("Invalid network");
176
+ }
177
+ }
178
+ function httpToWs(url) {
179
+ if (url.startsWith("http")) {
180
+ return url.replace("http", "ws");
181
+ }
182
+ return url;
183
+ }
184
+
185
+ // src/shared/svm/wallet.ts
186
+ function createSvmConnectedClient(network) {
187
+ if (!SupportedSVMNetworks.find((n) => n === network)) {
188
+ throw new Error(`Unsupported SVM network: ${network}`);
189
+ }
190
+ return getRpcClient(network);
191
+ }
192
+ async function createSignerFromBase58(privateKey) {
193
+ const bytes = import_base.base58.decode(privateKey);
194
+ if (bytes.length === 64) {
195
+ return await (0, import_kit2.createKeyPairSignerFromBytes)(bytes);
196
+ }
197
+ if (bytes.length === 32) {
198
+ return await (0, import_kit2.createKeyPairSignerFromPrivateKeyBytes)(bytes);
199
+ }
200
+ throw new Error(`Unexpected key length: ${bytes.length}. Expected 32 or 64 bytes.`);
201
+ }
202
+ function isSignerWallet(wallet) {
203
+ return (0, import_kit2.isKeyPairSigner)(wallet);
204
+ }
205
+
206
+ // src/types/shared/evm/config.ts
207
+ var config = {
208
+ "84532": {
209
+ usdcAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
210
+ usdcName: "USDC"
211
+ },
212
+ "8453": {
213
+ usdcAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
214
+ usdcName: "USD Coin"
215
+ },
216
+ "43113": {
217
+ usdcAddress: "0x5425890298aed601595a70AB815c96711a31Bc65",
218
+ usdcName: "USD Coin"
219
+ },
220
+ "43114": {
221
+ usdcAddress: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
222
+ usdcName: "USD Coin"
223
+ },
224
+ "4689": {
225
+ usdcAddress: "0xcdf79194c6c285077a58da47641d4dbe51f63542",
226
+ usdcName: "Bridged USDC"
227
+ },
228
+ // solana devnet
229
+ "103": {
230
+ usdcAddress: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
231
+ usdcName: "USDC"
232
+ },
233
+ // solana mainnet
234
+ "101": {
235
+ usdcAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
236
+ usdcName: "USDC"
237
+ },
238
+ "1328": {
239
+ usdcAddress: "0x4fcf1784b31630811181f670aea7a7bef803eaed",
240
+ usdcName: "USDC"
241
+ },
242
+ "1329": {
243
+ usdcAddress: "0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392",
244
+ usdcName: "USDC"
245
+ },
246
+ "137": {
247
+ usdcAddress: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
248
+ usdcName: "USD Coin"
249
+ },
250
+ "80002": {
251
+ usdcAddress: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
252
+ usdcName: "USDC"
253
+ },
254
+ "3338": {
255
+ usdcAddress: "0xbbA60da06c2c5424f03f7434542280FCAd453d10",
256
+ usdcName: "USDC"
257
+ },
258
+ "56": {
259
+ usdcAddress: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
260
+ usdcName: "USDC"
261
+ },
262
+ "97": {
263
+ usdcAddress: "0x64544969ed7EBf5f083679233325356EbE738930",
264
+ usdcName: "USDC"
265
+ }
266
+ };
267
+
268
+ // src/types/shared/svm/regex.ts
269
+ var SvmAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
270
+
271
+ // src/shared/network.ts
272
+ function getNetworkId(network) {
273
+ if (EvmNetworkToChainId.has(network)) {
274
+ return EvmNetworkToChainId.get(network);
275
+ }
276
+ if (SvmNetworkToChainId.has(network)) {
277
+ return SvmNetworkToChainId.get(network);
278
+ }
279
+ throw new Error(`Unsupported network: ${network}`);
280
+ }
281
+
282
+ // src/types/verify/x402Specs.ts
283
+ var import_zod3 = require("zod");
284
+ var EvmMaxAtomicUnits = 40;
285
+ var EvmAddressRegex = /^0x[0-9a-fA-F]{40}$/;
286
+ var MixedAddressRegex = /^0x[a-fA-F0-9]{40}|[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$/;
287
+ var HexEncoded64ByteRegex = /^0x[0-9a-fA-F]{64}$/;
288
+ var EvmSignatureRegex = /^0x[0-9a-fA-F]+$/;
289
+ var schemes = ["exact"];
290
+ var x402Versions = [1];
291
+ var ErrorReasons = [
292
+ "insufficient_funds",
293
+ "invalid_exact_evm_payload_authorization_valid_after",
294
+ "invalid_exact_evm_payload_authorization_valid_before",
295
+ "invalid_exact_evm_payload_authorization_value",
296
+ "invalid_exact_evm_payload_signature",
297
+ "invalid_exact_evm_payload_recipient_mismatch",
298
+ "invalid_exact_svm_payload_transaction",
299
+ "invalid_exact_svm_payload_transaction_amount_mismatch",
300
+ "invalid_exact_svm_payload_transaction_create_ata_instruction",
301
+ "invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_payee",
302
+ "invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_asset",
303
+ "invalid_exact_svm_payload_transaction_instructions",
304
+ "invalid_exact_svm_payload_transaction_instructions_length",
305
+ "invalid_exact_svm_payload_transaction_instructions_compute_limit_instruction",
306
+ "invalid_exact_svm_payload_transaction_instructions_compute_price_instruction",
307
+ "invalid_exact_svm_payload_transaction_instructions_compute_price_instruction_too_high",
308
+ "invalid_exact_svm_payload_transaction_instruction_not_spl_token_transfer_checked",
309
+ "invalid_exact_svm_payload_transaction_instruction_not_token_2022_transfer_checked",
310
+ "invalid_exact_svm_payload_transaction_not_a_transfer_instruction",
311
+ "invalid_exact_svm_payload_transaction_receiver_ata_not_found",
312
+ "invalid_exact_svm_payload_transaction_sender_ata_not_found",
313
+ "invalid_exact_svm_payload_transaction_simulation_failed",
314
+ "invalid_exact_svm_payload_transaction_transfer_to_incorrect_ata",
315
+ "invalid_network",
316
+ "invalid_payload",
317
+ "invalid_payment_requirements",
318
+ "invalid_scheme",
319
+ "invalid_payment",
320
+ "payment_expired",
321
+ "unsupported_scheme",
322
+ "invalid_x402_version",
323
+ "invalid_transaction_state",
324
+ "settle_exact_svm_block_height_exceeded",
325
+ "settle_exact_svm_transaction_confirmation_timed_out",
326
+ "unexpected_settle_error",
327
+ "unexpected_verify_error",
328
+ // New error reasons for Permit and Permit2
329
+ "unsupported_authorization_type",
330
+ "invalid_authorization_type",
331
+ "invalid_permit_signature",
332
+ "invalid_permit2_signature",
333
+ "permit_expired",
334
+ "permit2_expired",
335
+ "permit2_not_approved",
336
+ "invalid_token_address",
337
+ "invalid_spender_address",
338
+ "token_mismatch",
339
+ "insufficient_payment_amount",
340
+ "transaction_failed",
341
+ "settlement_failed"
342
+ ];
343
+ var isInteger = (value) => Number.isInteger(Number(value)) && Number(value) >= 0;
344
+ var hasMaxLength = (maxLength) => (value) => value.length <= maxLength;
345
+ var EvmOrSvmAddress = import_zod3.z.string().regex(EvmAddressRegex).or(import_zod3.z.string().regex(SvmAddressRegex));
346
+ var mixedAddressOrSvmAddress = import_zod3.z.string().regex(MixedAddressRegex).or(import_zod3.z.string().regex(SvmAddressRegex));
347
+ var PaymentRequirementsSchema = import_zod3.z.object({
348
+ scheme: import_zod3.z.enum(schemes),
349
+ network: NetworkSchema,
350
+ maxAmountRequired: import_zod3.z.string().refine(isInteger),
351
+ resource: import_zod3.z.string().url(),
352
+ description: import_zod3.z.string(),
353
+ mimeType: import_zod3.z.string(),
354
+ outputSchema: import_zod3.z.record(import_zod3.z.any()).optional(),
355
+ payTo: EvmOrSvmAddress,
356
+ maxTimeoutSeconds: import_zod3.z.number().int(),
357
+ asset: mixedAddressOrSvmAddress,
358
+ paymentType: import_zod3.z.enum(["eip3009", "permit", "permit2"]).optional(),
359
+ extra: import_zod3.z.record(import_zod3.z.any()).optional()
360
+ });
361
+ var ExactEvmPayloadAuthorizationSchema = import_zod3.z.object({
362
+ from: import_zod3.z.string().regex(EvmAddressRegex),
363
+ to: import_zod3.z.string().regex(EvmAddressRegex),
364
+ value: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
365
+ validAfter: import_zod3.z.string().refine(isInteger),
366
+ validBefore: import_zod3.z.string().refine(isInteger),
367
+ nonce: import_zod3.z.string().regex(HexEncoded64ByteRegex)
368
+ });
369
+ var PermitEvmPayloadAuthorizationSchema = import_zod3.z.object({
370
+ owner: import_zod3.z.string().regex(EvmAddressRegex),
371
+ spender: import_zod3.z.string().regex(EvmAddressRegex),
372
+ value: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
373
+ deadline: import_zod3.z.string().refine(isInteger),
374
+ nonce: import_zod3.z.string().refine(isInteger)
375
+ });
376
+ var Permit2EvmPayloadAuthorizationSchema = import_zod3.z.object({
377
+ owner: import_zod3.z.string().regex(EvmAddressRegex),
378
+ spender: import_zod3.z.string().regex(EvmAddressRegex),
379
+ token: import_zod3.z.string().regex(EvmAddressRegex),
380
+ amount: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
381
+ deadline: import_zod3.z.string().refine(isInteger),
382
+ nonce: import_zod3.z.string().refine(isInteger)
383
+ });
384
+ var ExactEvmPayloadSchema = import_zod3.z.discriminatedUnion("authorizationType", [
385
+ import_zod3.z.object({
386
+ authorizationType: import_zod3.z.literal("eip3009"),
387
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
388
+ authorization: ExactEvmPayloadAuthorizationSchema
389
+ }),
390
+ import_zod3.z.object({
391
+ authorizationType: import_zod3.z.literal("permit"),
392
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
393
+ authorization: PermitEvmPayloadAuthorizationSchema
394
+ }),
395
+ import_zod3.z.object({
396
+ authorizationType: import_zod3.z.literal("permit2"),
397
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
398
+ authorization: Permit2EvmPayloadAuthorizationSchema
399
+ })
400
+ ]);
401
+ var ExactSvmPayloadSchema = import_zod3.z.object({
402
+ transaction: import_zod3.z.string().regex(Base64EncodedRegex)
403
+ });
404
+ var PaymentPayloadSchema = import_zod3.z.object({
405
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
406
+ scheme: import_zod3.z.enum(schemes),
407
+ network: NetworkSchema,
408
+ payload: import_zod3.z.union([ExactEvmPayloadSchema, ExactSvmPayloadSchema])
409
+ });
410
+ var x402ResponseSchema = import_zod3.z.object({
411
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
412
+ error: import_zod3.z.enum(ErrorReasons).optional(),
413
+ accepts: import_zod3.z.array(PaymentRequirementsSchema).optional(),
414
+ payer: import_zod3.z.string().regex(MixedAddressRegex).optional()
415
+ });
416
+ var HTTPVerbsSchema = import_zod3.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]);
417
+ var HTTPRequestStructureSchema = import_zod3.z.object({
418
+ type: import_zod3.z.literal("http"),
419
+ method: HTTPVerbsSchema,
420
+ queryParams: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.string()).optional(),
421
+ bodyType: import_zod3.z.enum(["json", "form-data", "multipart-form-data", "text", "binary"]).optional(),
422
+ bodyFields: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.any()).optional(),
423
+ headerFields: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.any()).optional()
424
+ });
425
+ var RequestStructureSchema = import_zod3.z.discriminatedUnion("type", [
426
+ HTTPRequestStructureSchema
427
+ // MCPRequestStructureSchema,
428
+ // OpenAPIRequestStructureSchema,
429
+ ]);
430
+ var DiscoveredResourceSchema = import_zod3.z.object({
431
+ resource: import_zod3.z.string(),
432
+ type: import_zod3.z.enum(["http"]),
433
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
434
+ accepts: import_zod3.z.array(PaymentRequirementsSchema),
435
+ lastUpdated: import_zod3.z.date(),
436
+ metadata: import_zod3.z.record(import_zod3.z.any()).optional()
437
+ });
438
+ var SettleRequestSchema = import_zod3.z.object({
439
+ paymentPayload: PaymentPayloadSchema,
440
+ paymentRequirements: PaymentRequirementsSchema
441
+ });
442
+ var VerifyRequestSchema = import_zod3.z.object({
443
+ paymentPayload: PaymentPayloadSchema,
444
+ paymentRequirements: PaymentRequirementsSchema
445
+ });
446
+ var VerifyResponseSchema = import_zod3.z.object({
447
+ isValid: import_zod3.z.boolean(),
448
+ invalidReason: import_zod3.z.enum(ErrorReasons).optional(),
449
+ payer: EvmOrSvmAddress.optional()
450
+ });
451
+ var SettleResponseSchema = import_zod3.z.object({
452
+ success: import_zod3.z.boolean(),
453
+ errorReason: import_zod3.z.enum(ErrorReasons).optional(),
454
+ payer: EvmOrSvmAddress.optional(),
455
+ transaction: import_zod3.z.string().regex(MixedAddressRegex),
456
+ network: NetworkSchema
457
+ });
458
+ var ListDiscoveryResourcesRequestSchema = import_zod3.z.object({
459
+ type: import_zod3.z.string().optional(),
460
+ limit: import_zod3.z.number().optional(),
461
+ offset: import_zod3.z.number().optional()
462
+ });
463
+ var ListDiscoveryResourcesResponseSchema = import_zod3.z.object({
464
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
465
+ items: import_zod3.z.array(DiscoveredResourceSchema),
466
+ pagination: import_zod3.z.object({
467
+ limit: import_zod3.z.number(),
468
+ offset: import_zod3.z.number(),
469
+ total: import_zod3.z.number()
470
+ })
471
+ });
472
+ var SupportedPaymentKindSchema = import_zod3.z.object({
473
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
474
+ scheme: import_zod3.z.enum(schemes),
475
+ network: NetworkSchema,
476
+ extra: import_zod3.z.record(import_zod3.z.any()).optional()
477
+ });
478
+ var SupportedPaymentKindsResponseSchema = import_zod3.z.object({
479
+ kinds: import_zod3.z.array(SupportedPaymentKindSchema)
480
+ });
481
+
482
+ // src/types/verify/facilitator.ts
483
+ var import_zod4 = require("zod");
484
+ var facilitatorRequestSchema = import_zod4.z.object({
485
+ paymentHeader: import_zod4.z.string(),
486
+ paymentRequirements: PaymentRequirementsSchema
487
+ });
488
+
489
+ // src/shared/evm/usdc.ts
490
+ function getUsdcChainConfigForChain(chainId) {
491
+ return config[chainId.toString()];
492
+ }
493
+
494
+ // src/shared/middleware.ts
495
+ function computeRoutePatterns(routes) {
496
+ const normalizedRoutes = Object.fromEntries(
497
+ Object.entries(routes).map(([pattern, value]) => [
498
+ pattern,
499
+ typeof value === "string" || typeof value === "number" ? { price: value, network: "base-sepolia" } : value
500
+ ])
501
+ );
502
+ return Object.entries(normalizedRoutes).map(([pattern, routeConfig]) => {
503
+ const [verb, path] = pattern.includes(" ") ? pattern.split(/\s+/) : ["*", pattern];
504
+ if (!path) {
505
+ throw new Error(`Invalid route pattern: ${pattern}`);
506
+ }
507
+ return {
508
+ verb: verb.toUpperCase(),
509
+ pattern: new RegExp(
510
+ `^${path.replace(/[$()+.?^{|}]/g, "\\$&").replace(/\*/g, ".*?").replace(/\[([^\]]+)\]/g, "[^/]+").replace(/\//g, "\\/")}$`,
511
+ "i"
512
+ ),
513
+ config: routeConfig
514
+ };
515
+ });
516
+ }
517
+ function findMatchingRoute(routePatterns, path, method) {
518
+ let normalizedPath;
519
+ try {
520
+ const pathWithoutQuery = path.split(/[?#]/)[0];
521
+ const decodedPath = decodeURIComponent(pathWithoutQuery);
522
+ normalizedPath = decodedPath.replace(/\\/g, "/").replace(/\/+/g, "/").replace(/(.+?)\/+$/, "$1");
523
+ } catch {
524
+ return void 0;
525
+ }
526
+ const matchingRoutes = routePatterns.filter(({ pattern, verb }) => {
527
+ const matchesPath = pattern.test(normalizedPath);
528
+ const upperMethod = method.toUpperCase();
529
+ const matchesVerb = verb === "*" || upperMethod === verb;
530
+ const result = matchesPath && matchesVerb;
531
+ return result;
532
+ });
533
+ if (matchingRoutes.length === 0) {
534
+ return void 0;
535
+ }
536
+ const matchingRoute = matchingRoutes.reduce(
537
+ (a, b) => b.pattern.source.length > a.pattern.source.length ? b : a
538
+ );
539
+ return matchingRoute;
540
+ }
541
+ function getDefaultAsset(network) {
542
+ const chainId = getNetworkId(network);
543
+ const usdc = getUsdcChainConfigForChain(chainId);
544
+ if (!usdc) {
545
+ throw new Error(`Unable to get default asset on ${network}`);
546
+ }
547
+ return {
548
+ address: usdc.usdcAddress,
549
+ decimals: 6,
550
+ eip712: {
551
+ name: usdc.usdcName,
552
+ version: "2"
553
+ }
554
+ };
555
+ }
556
+ function processPriceToAtomicAmount(price, network) {
557
+ let maxAmountRequired;
558
+ let asset;
559
+ if (typeof price === "string" || typeof price === "number") {
560
+ const parsedAmount = moneySchema.safeParse(price);
561
+ if (!parsedAmount.success) {
562
+ return {
563
+ error: `Invalid price (price: ${price}). Must be in the form "$3.10", 0.10, "0.001", ${parsedAmount.error}`
564
+ };
565
+ }
566
+ const parsedUsdAmount = parsedAmount.data;
567
+ asset = getDefaultAsset(network);
568
+ maxAmountRequired = (parsedUsdAmount * 10 ** asset.decimals).toString();
569
+ } else {
570
+ maxAmountRequired = price.amount;
571
+ asset = price.asset;
572
+ }
573
+ return {
574
+ maxAmountRequired,
575
+ asset
576
+ };
577
+ }
578
+ function findMatchingPaymentRequirements(paymentRequirements, payment) {
579
+ return paymentRequirements.find((value) => {
580
+ if (value.scheme !== payment.scheme || value.network !== payment.network) {
581
+ return false;
582
+ }
583
+ if (value.paymentType && "authorizationType" in payment.payload) {
584
+ return value.paymentType === payment.payload.authorizationType;
585
+ }
586
+ return true;
587
+ });
588
+ }
589
+ function decodeXPaymentResponse(header) {
590
+ const decoded = safeBase64Decode(header);
591
+ return JSON.parse(decoded);
592
+ }
593
+
594
+ // src/shared/svm/index.ts
595
+ var svm_exports2 = {};
596
+ __export(svm_exports2, {
597
+ createDevnetRpcClient: () => createDevnetRpcClient,
598
+ createMainnetRpcClient: () => createMainnetRpcClient,
599
+ createSignerFromBase58: () => createSignerFromBase58,
600
+ createSvmConnectedClient: () => createSvmConnectedClient,
601
+ decodeTransactionFromPayload: () => decodeTransactionFromPayload,
602
+ getRpcClient: () => getRpcClient,
603
+ getRpcSubscriptions: () => getRpcSubscriptions,
604
+ getTokenPayerFromTransaction: () => getTokenPayerFromTransaction,
605
+ isSignerWallet: () => isSignerWallet,
606
+ signAndSimulateTransaction: () => signAndSimulateTransaction
607
+ });
608
+
609
+ // src/shared/svm/transaction.ts
610
+ var import_kit3 = require("@solana/kit");
611
+ var import_token = require("@solana-program/token");
612
+ var import_token_2022 = require("@solana-program/token-2022");
613
+ function decodeTransactionFromPayload(svmPayload) {
614
+ try {
615
+ const base64Encoder = (0, import_kit3.getBase64Encoder)();
616
+ const transactionBytes = base64Encoder.encode(svmPayload.transaction);
617
+ const transactionDecoder = (0, import_kit3.getTransactionDecoder)();
618
+ return transactionDecoder.decode(transactionBytes);
619
+ } catch (error) {
620
+ console.error("error", error);
621
+ throw new Error("invalid_exact_svm_payload_transaction");
622
+ }
623
+ }
624
+ function getTokenPayerFromTransaction(transaction) {
625
+ const compiled = (0, import_kit3.getCompiledTransactionMessageDecoder)().decode(
626
+ transaction.messageBytes
627
+ );
628
+ const staticAccounts = compiled.staticAccounts ?? [];
629
+ const instructions = compiled.instructions ?? [];
630
+ for (const ix of instructions) {
631
+ const programIndex = ix.programAddressIndex;
632
+ const programAddress = staticAccounts[programIndex].toString();
633
+ if (programAddress === import_token.TOKEN_PROGRAM_ADDRESS.toString() || programAddress === import_token_2022.TOKEN_2022_PROGRAM_ADDRESS.toString()) {
634
+ const accountIndices = ix.accountIndices ?? [];
635
+ if (accountIndices.length >= 4) {
636
+ const ownerIndex = accountIndices[3];
637
+ const ownerAddress = staticAccounts[ownerIndex].toString();
638
+ if (ownerAddress) return ownerAddress;
639
+ }
640
+ }
641
+ }
642
+ return "";
643
+ }
644
+ async function signAndSimulateTransaction(signer, transaction, rpc) {
645
+ const signedTransaction = await (0, import_kit3.partiallySignTransaction)([signer.keyPair], transaction);
646
+ const base64EncodedTransaction = (0, import_kit3.getBase64EncodedWireTransaction)(signedTransaction);
647
+ const simulateTxConfig = {
648
+ sigVerify: true,
649
+ replaceRecentBlockhash: false,
650
+ commitment: "confirmed",
651
+ encoding: "base64",
652
+ accounts: void 0,
653
+ innerInstructions: void 0,
654
+ minContextSlot: void 0
655
+ };
656
+ const simulateResult = await rpc.simulateTransaction(base64EncodedTransaction, simulateTxConfig).send();
657
+ return simulateResult;
658
+ }
659
+ // Annotate the CommonJS export names for ESM import in node:
660
+ 0 && (module.exports = {
661
+ Base64EncodedRegex,
662
+ computeRoutePatterns,
663
+ decodeXPaymentResponse,
664
+ findMatchingPaymentRequirements,
665
+ findMatchingRoute,
666
+ getDefaultAsset,
667
+ getNetworkId,
668
+ processPriceToAtomicAmount,
669
+ safeBase64Decode,
670
+ safeBase64Encode,
671
+ svm,
672
+ toJsonSafe
673
+ });
674
+ //# sourceMappingURL=index.js.map