@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,832 @@
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/client/index.ts
21
+ var client_exports = {};
22
+ __export(client_exports, {
23
+ createPaymentHeader: () => createPaymentHeader3,
24
+ preparePaymentHeader: () => preparePaymentHeader2,
25
+ selectPaymentRequirements: () => selectPaymentRequirements,
26
+ signPaymentHeader: () => signPaymentHeader2
27
+ });
28
+ module.exports = __toCommonJS(client_exports);
29
+
30
+ // src/types/shared/evm/config.ts
31
+ var config = {
32
+ "84532": {
33
+ usdcAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
34
+ usdcName: "USDC"
35
+ },
36
+ "8453": {
37
+ usdcAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
38
+ usdcName: "USD Coin"
39
+ },
40
+ "43113": {
41
+ usdcAddress: "0x5425890298aed601595a70AB815c96711a31Bc65",
42
+ usdcName: "USD Coin"
43
+ },
44
+ "43114": {
45
+ usdcAddress: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
46
+ usdcName: "USD Coin"
47
+ },
48
+ "4689": {
49
+ usdcAddress: "0xcdf79194c6c285077a58da47641d4dbe51f63542",
50
+ usdcName: "Bridged USDC"
51
+ },
52
+ // solana devnet
53
+ "103": {
54
+ usdcAddress: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
55
+ usdcName: "USDC"
56
+ },
57
+ // solana mainnet
58
+ "101": {
59
+ usdcAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
60
+ usdcName: "USDC"
61
+ },
62
+ "1328": {
63
+ usdcAddress: "0x4fcf1784b31630811181f670aea7a7bef803eaed",
64
+ usdcName: "USDC"
65
+ },
66
+ "1329": {
67
+ usdcAddress: "0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392",
68
+ usdcName: "USDC"
69
+ },
70
+ "137": {
71
+ usdcAddress: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
72
+ usdcName: "USD Coin"
73
+ },
74
+ "80002": {
75
+ usdcAddress: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
76
+ usdcName: "USDC"
77
+ },
78
+ "3338": {
79
+ usdcAddress: "0xbbA60da06c2c5424f03f7434542280FCAd453d10",
80
+ usdcName: "USDC"
81
+ },
82
+ "56": {
83
+ usdcAddress: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
84
+ usdcName: "USDC"
85
+ },
86
+ "97": {
87
+ usdcAddress: "0x64544969ed7EBf5f083679233325356EbE738930",
88
+ usdcName: "USDC"
89
+ }
90
+ };
91
+
92
+ // src/types/shared/evm/eip3009.ts
93
+ var authorizationTypes = {
94
+ TransferWithAuthorization: [
95
+ { name: "from", type: "address" },
96
+ { name: "to", type: "address" },
97
+ { name: "value", type: "uint256" },
98
+ { name: "validAfter", type: "uint256" },
99
+ { name: "validBefore", type: "uint256" },
100
+ { name: "nonce", type: "bytes32" }
101
+ ]
102
+ };
103
+
104
+ // src/types/shared/evm/wallet.ts
105
+ var import_viem = require("viem");
106
+ var import_chains = require("viem/chains");
107
+ var import_accounts = require("viem/accounts");
108
+ function isSignerWallet(wallet) {
109
+ return typeof wallet === "object" && wallet !== null && "chain" in wallet && "transport" in wallet;
110
+ }
111
+ function isAccount(wallet) {
112
+ const w = wallet;
113
+ return typeof wallet === "object" && wallet !== null && typeof w.address === "string" && typeof w.type === "string" && // Check for essential signing capabilities
114
+ typeof w.sign === "function" && typeof w.signMessage === "function" && typeof w.signTypedData === "function" && // Check for transaction signing (required by LocalAccount)
115
+ typeof w.signTransaction === "function";
116
+ }
117
+
118
+ // src/schemes/exact/evm/eip3009/sign.ts
119
+ var import_viem2 = require("viem");
120
+
121
+ // src/shared/base64.ts
122
+ var Base64EncodedRegex = /^[A-Za-z0-9+/]*={0,2}$/;
123
+ function safeBase64Encode(data) {
124
+ if (typeof globalThis !== "undefined" && typeof globalThis.btoa === "function") {
125
+ return globalThis.btoa(data);
126
+ }
127
+ return Buffer.from(data).toString("base64");
128
+ }
129
+
130
+ // src/types/shared/money.ts
131
+ var import_zod = require("zod");
132
+ 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));
133
+
134
+ // src/types/shared/network.ts
135
+ var import_zod2 = require("zod");
136
+ var NetworkSchema = import_zod2.z.enum([
137
+ "base-sepolia",
138
+ "base",
139
+ "avalanche-fuji",
140
+ "avalanche",
141
+ "iotex",
142
+ "solana-devnet",
143
+ "solana",
144
+ "sei",
145
+ "sei-testnet",
146
+ "polygon",
147
+ "polygon-amoy",
148
+ "peaq",
149
+ "bsc",
150
+ "bsc-testnet"
151
+ ]);
152
+ var SupportedEVMNetworks = [
153
+ "base-sepolia",
154
+ "base",
155
+ "avalanche-fuji",
156
+ "avalanche",
157
+ "iotex",
158
+ "sei",
159
+ "sei-testnet",
160
+ "polygon",
161
+ "polygon-amoy",
162
+ "peaq",
163
+ "bsc",
164
+ "bsc-testnet"
165
+ ];
166
+ var EvmNetworkToChainId = /* @__PURE__ */ new Map([
167
+ ["base-sepolia", 84532],
168
+ ["base", 8453],
169
+ ["avalanche-fuji", 43113],
170
+ ["avalanche", 43114],
171
+ ["iotex", 4689],
172
+ ["sei", 1329],
173
+ ["sei-testnet", 1328],
174
+ ["polygon", 137],
175
+ ["polygon-amoy", 80002],
176
+ ["peaq", 3338],
177
+ ["bsc", 56],
178
+ ["bsc-testnet", 97]
179
+ ]);
180
+ var SupportedSVMNetworks = ["solana-devnet", "solana"];
181
+ var SvmNetworkToChainId = /* @__PURE__ */ new Map([
182
+ ["solana-devnet", 103],
183
+ ["solana", 101]
184
+ ]);
185
+ var ChainIdToNetwork = Object.fromEntries(
186
+ [...SupportedEVMNetworks, ...SupportedSVMNetworks].map((network) => [
187
+ EvmNetworkToChainId.get(network),
188
+ network
189
+ ])
190
+ );
191
+
192
+ // src/shared/svm/wallet.ts
193
+ var import_kit2 = require("@solana/kit");
194
+ var import_base = require("@scure/base");
195
+
196
+ // src/shared/svm/rpc.ts
197
+ var import_kit = require("@solana/kit");
198
+ var DEVNET_RPC_URL = "https://api.devnet.solana.com";
199
+ var MAINNET_RPC_URL = "https://api.mainnet-beta.solana.com";
200
+ function createDevnetRpcClient(url) {
201
+ return (0, import_kit.createSolanaRpc)(
202
+ url ? (0, import_kit.devnet)(url) : (0, import_kit.devnet)(DEVNET_RPC_URL)
203
+ );
204
+ }
205
+ function createMainnetRpcClient(url) {
206
+ return (0, import_kit.createSolanaRpc)(
207
+ url ? (0, import_kit.mainnet)(url) : (0, import_kit.mainnet)(MAINNET_RPC_URL)
208
+ );
209
+ }
210
+ function getRpcClient(network, url) {
211
+ if (network === "solana-devnet") {
212
+ return createDevnetRpcClient(url);
213
+ } else if (network === "solana") {
214
+ return createMainnetRpcClient(url);
215
+ } else {
216
+ throw new Error("Invalid network");
217
+ }
218
+ }
219
+
220
+ // src/shared/svm/wallet.ts
221
+ function isSignerWallet2(wallet) {
222
+ return (0, import_kit2.isKeyPairSigner)(wallet);
223
+ }
224
+
225
+ // src/types/shared/wallet.ts
226
+ function isEvmSignerWallet(wallet) {
227
+ return isSignerWallet(wallet) || isAccount(wallet);
228
+ }
229
+ function isSvmSignerWallet(wallet) {
230
+ return isSignerWallet2(wallet);
231
+ }
232
+ function isMultiNetworkSigner(wallet) {
233
+ return "evm" in wallet && "svm" in wallet;
234
+ }
235
+
236
+ // src/types/shared/svm/regex.ts
237
+ var SvmAddressRegex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;
238
+
239
+ // src/shared/network.ts
240
+ function getNetworkId(network) {
241
+ if (EvmNetworkToChainId.has(network)) {
242
+ return EvmNetworkToChainId.get(network);
243
+ }
244
+ if (SvmNetworkToChainId.has(network)) {
245
+ return SvmNetworkToChainId.get(network);
246
+ }
247
+ throw new Error(`Unsupported network: ${network}`);
248
+ }
249
+
250
+ // src/types/verify/x402Specs.ts
251
+ var import_zod3 = require("zod");
252
+ var EvmMaxAtomicUnits = 40;
253
+ var EvmAddressRegex = /^0x[0-9a-fA-F]{40}$/;
254
+ var MixedAddressRegex = /^0x[a-fA-F0-9]{40}|[A-Za-z0-9][A-Za-z0-9-]{0,34}[A-Za-z0-9]$/;
255
+ var HexEncoded64ByteRegex = /^0x[0-9a-fA-F]{64}$/;
256
+ var EvmSignatureRegex = /^0x[0-9a-fA-F]+$/;
257
+ var schemes = ["exact"];
258
+ var x402Versions = [1];
259
+ var ErrorReasons = [
260
+ "insufficient_funds",
261
+ "invalid_exact_evm_payload_authorization_valid_after",
262
+ "invalid_exact_evm_payload_authorization_valid_before",
263
+ "invalid_exact_evm_payload_authorization_value",
264
+ "invalid_exact_evm_payload_signature",
265
+ "invalid_exact_evm_payload_recipient_mismatch",
266
+ "invalid_exact_svm_payload_transaction",
267
+ "invalid_exact_svm_payload_transaction_amount_mismatch",
268
+ "invalid_exact_svm_payload_transaction_create_ata_instruction",
269
+ "invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_payee",
270
+ "invalid_exact_svm_payload_transaction_create_ata_instruction_incorrect_asset",
271
+ "invalid_exact_svm_payload_transaction_instructions",
272
+ "invalid_exact_svm_payload_transaction_instructions_length",
273
+ "invalid_exact_svm_payload_transaction_instructions_compute_limit_instruction",
274
+ "invalid_exact_svm_payload_transaction_instructions_compute_price_instruction",
275
+ "invalid_exact_svm_payload_transaction_instructions_compute_price_instruction_too_high",
276
+ "invalid_exact_svm_payload_transaction_instruction_not_spl_token_transfer_checked",
277
+ "invalid_exact_svm_payload_transaction_instruction_not_token_2022_transfer_checked",
278
+ "invalid_exact_svm_payload_transaction_not_a_transfer_instruction",
279
+ "invalid_exact_svm_payload_transaction_receiver_ata_not_found",
280
+ "invalid_exact_svm_payload_transaction_sender_ata_not_found",
281
+ "invalid_exact_svm_payload_transaction_simulation_failed",
282
+ "invalid_exact_svm_payload_transaction_transfer_to_incorrect_ata",
283
+ "invalid_network",
284
+ "invalid_payload",
285
+ "invalid_payment_requirements",
286
+ "invalid_scheme",
287
+ "invalid_payment",
288
+ "payment_expired",
289
+ "unsupported_scheme",
290
+ "invalid_x402_version",
291
+ "invalid_transaction_state",
292
+ "settle_exact_svm_block_height_exceeded",
293
+ "settle_exact_svm_transaction_confirmation_timed_out",
294
+ "unexpected_settle_error",
295
+ "unexpected_verify_error",
296
+ // New error reasons for Permit and Permit2
297
+ "unsupported_authorization_type",
298
+ "invalid_authorization_type",
299
+ "invalid_permit_signature",
300
+ "invalid_permit2_signature",
301
+ "permit_expired",
302
+ "permit2_expired",
303
+ "permit2_not_approved",
304
+ "invalid_token_address",
305
+ "invalid_spender_address",
306
+ "token_mismatch",
307
+ "insufficient_payment_amount",
308
+ "transaction_failed",
309
+ "settlement_failed"
310
+ ];
311
+ var isInteger = (value) => Number.isInteger(Number(value)) && Number(value) >= 0;
312
+ var hasMaxLength = (maxLength) => (value) => value.length <= maxLength;
313
+ var EvmOrSvmAddress = import_zod3.z.string().regex(EvmAddressRegex).or(import_zod3.z.string().regex(SvmAddressRegex));
314
+ var mixedAddressOrSvmAddress = import_zod3.z.string().regex(MixedAddressRegex).or(import_zod3.z.string().regex(SvmAddressRegex));
315
+ var PaymentRequirementsSchema = import_zod3.z.object({
316
+ scheme: import_zod3.z.enum(schemes),
317
+ network: NetworkSchema,
318
+ maxAmountRequired: import_zod3.z.string().refine(isInteger),
319
+ resource: import_zod3.z.string().url(),
320
+ description: import_zod3.z.string(),
321
+ mimeType: import_zod3.z.string(),
322
+ outputSchema: import_zod3.z.record(import_zod3.z.any()).optional(),
323
+ payTo: EvmOrSvmAddress,
324
+ maxTimeoutSeconds: import_zod3.z.number().int(),
325
+ asset: mixedAddressOrSvmAddress,
326
+ paymentType: import_zod3.z.enum(["eip3009", "permit", "permit2"]).optional(),
327
+ extra: import_zod3.z.record(import_zod3.z.any()).optional()
328
+ });
329
+ var ExactEvmPayloadAuthorizationSchema = import_zod3.z.object({
330
+ from: import_zod3.z.string().regex(EvmAddressRegex),
331
+ to: import_zod3.z.string().regex(EvmAddressRegex),
332
+ value: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
333
+ validAfter: import_zod3.z.string().refine(isInteger),
334
+ validBefore: import_zod3.z.string().refine(isInteger),
335
+ nonce: import_zod3.z.string().regex(HexEncoded64ByteRegex)
336
+ });
337
+ var PermitEvmPayloadAuthorizationSchema = import_zod3.z.object({
338
+ owner: import_zod3.z.string().regex(EvmAddressRegex),
339
+ spender: import_zod3.z.string().regex(EvmAddressRegex),
340
+ value: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
341
+ deadline: import_zod3.z.string().refine(isInteger),
342
+ nonce: import_zod3.z.string().refine(isInteger)
343
+ });
344
+ var Permit2EvmPayloadAuthorizationSchema = import_zod3.z.object({
345
+ owner: import_zod3.z.string().regex(EvmAddressRegex),
346
+ spender: import_zod3.z.string().regex(EvmAddressRegex),
347
+ token: import_zod3.z.string().regex(EvmAddressRegex),
348
+ amount: import_zod3.z.string().refine(isInteger).refine(hasMaxLength(EvmMaxAtomicUnits)),
349
+ deadline: import_zod3.z.string().refine(isInteger),
350
+ nonce: import_zod3.z.string().refine(isInteger)
351
+ });
352
+ var ExactEvmPayloadSchema = import_zod3.z.discriminatedUnion("authorizationType", [
353
+ import_zod3.z.object({
354
+ authorizationType: import_zod3.z.literal("eip3009"),
355
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
356
+ authorization: ExactEvmPayloadAuthorizationSchema
357
+ }),
358
+ import_zod3.z.object({
359
+ authorizationType: import_zod3.z.literal("permit"),
360
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
361
+ authorization: PermitEvmPayloadAuthorizationSchema
362
+ }),
363
+ import_zod3.z.object({
364
+ authorizationType: import_zod3.z.literal("permit2"),
365
+ signature: import_zod3.z.string().regex(EvmSignatureRegex),
366
+ authorization: Permit2EvmPayloadAuthorizationSchema
367
+ })
368
+ ]);
369
+ var ExactSvmPayloadSchema = import_zod3.z.object({
370
+ transaction: import_zod3.z.string().regex(Base64EncodedRegex)
371
+ });
372
+ var PaymentPayloadSchema = import_zod3.z.object({
373
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
374
+ scheme: import_zod3.z.enum(schemes),
375
+ network: NetworkSchema,
376
+ payload: import_zod3.z.union([ExactEvmPayloadSchema, ExactSvmPayloadSchema])
377
+ });
378
+ var x402ResponseSchema = import_zod3.z.object({
379
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
380
+ error: import_zod3.z.enum(ErrorReasons).optional(),
381
+ accepts: import_zod3.z.array(PaymentRequirementsSchema).optional(),
382
+ payer: import_zod3.z.string().regex(MixedAddressRegex).optional()
383
+ });
384
+ var HTTPVerbsSchema = import_zod3.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD"]);
385
+ var HTTPRequestStructureSchema = import_zod3.z.object({
386
+ type: import_zod3.z.literal("http"),
387
+ method: HTTPVerbsSchema,
388
+ queryParams: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.string()).optional(),
389
+ bodyType: import_zod3.z.enum(["json", "form-data", "multipart-form-data", "text", "binary"]).optional(),
390
+ bodyFields: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.any()).optional(),
391
+ headerFields: import_zod3.z.record(import_zod3.z.string(), import_zod3.z.any()).optional()
392
+ });
393
+ var RequestStructureSchema = import_zod3.z.discriminatedUnion("type", [
394
+ HTTPRequestStructureSchema
395
+ // MCPRequestStructureSchema,
396
+ // OpenAPIRequestStructureSchema,
397
+ ]);
398
+ var DiscoveredResourceSchema = import_zod3.z.object({
399
+ resource: import_zod3.z.string(),
400
+ type: import_zod3.z.enum(["http"]),
401
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
402
+ accepts: import_zod3.z.array(PaymentRequirementsSchema),
403
+ lastUpdated: import_zod3.z.date(),
404
+ metadata: import_zod3.z.record(import_zod3.z.any()).optional()
405
+ });
406
+ var SettleRequestSchema = import_zod3.z.object({
407
+ paymentPayload: PaymentPayloadSchema,
408
+ paymentRequirements: PaymentRequirementsSchema
409
+ });
410
+ var VerifyRequestSchema = import_zod3.z.object({
411
+ paymentPayload: PaymentPayloadSchema,
412
+ paymentRequirements: PaymentRequirementsSchema
413
+ });
414
+ var VerifyResponseSchema = import_zod3.z.object({
415
+ isValid: import_zod3.z.boolean(),
416
+ invalidReason: import_zod3.z.enum(ErrorReasons).optional(),
417
+ payer: EvmOrSvmAddress.optional()
418
+ });
419
+ var SettleResponseSchema = import_zod3.z.object({
420
+ success: import_zod3.z.boolean(),
421
+ errorReason: import_zod3.z.enum(ErrorReasons).optional(),
422
+ payer: EvmOrSvmAddress.optional(),
423
+ transaction: import_zod3.z.string().regex(MixedAddressRegex),
424
+ network: NetworkSchema
425
+ });
426
+ var ListDiscoveryResourcesRequestSchema = import_zod3.z.object({
427
+ type: import_zod3.z.string().optional(),
428
+ limit: import_zod3.z.number().optional(),
429
+ offset: import_zod3.z.number().optional()
430
+ });
431
+ var ListDiscoveryResourcesResponseSchema = import_zod3.z.object({
432
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
433
+ items: import_zod3.z.array(DiscoveredResourceSchema),
434
+ pagination: import_zod3.z.object({
435
+ limit: import_zod3.z.number(),
436
+ offset: import_zod3.z.number(),
437
+ total: import_zod3.z.number()
438
+ })
439
+ });
440
+ var SupportedPaymentKindSchema = import_zod3.z.object({
441
+ x402Version: import_zod3.z.number().refine((val) => x402Versions.includes(val)),
442
+ scheme: import_zod3.z.enum(schemes),
443
+ network: NetworkSchema,
444
+ extra: import_zod3.z.record(import_zod3.z.any()).optional()
445
+ });
446
+ var SupportedPaymentKindsResponseSchema = import_zod3.z.object({
447
+ kinds: import_zod3.z.array(SupportedPaymentKindSchema)
448
+ });
449
+
450
+ // src/types/verify/facilitator.ts
451
+ var import_zod4 = require("zod");
452
+ var facilitatorRequestSchema = import_zod4.z.object({
453
+ paymentHeader: import_zod4.z.string(),
454
+ paymentRequirements: PaymentRequirementsSchema
455
+ });
456
+
457
+ // src/shared/evm/usdc.ts
458
+ function getUsdcChainConfigForChain(chainId) {
459
+ return config[chainId.toString()];
460
+ }
461
+
462
+ // src/shared/svm/transaction.ts
463
+ var import_kit3 = require("@solana/kit");
464
+ var import_token = require("@solana-program/token");
465
+ var import_token_2022 = require("@solana-program/token-2022");
466
+
467
+ // src/schemes/exact/evm/eip3009/sign.ts
468
+ async function signAuthorization(walletClient, { from, to, value, validAfter, validBefore, nonce }, { asset, network, extra }) {
469
+ const chainId = getNetworkId(network);
470
+ const name = extra?.name;
471
+ const version = extra?.version;
472
+ const data = {
473
+ types: authorizationTypes,
474
+ domain: {
475
+ name,
476
+ version,
477
+ chainId,
478
+ verifyingContract: (0, import_viem2.getAddress)(asset)
479
+ },
480
+ primaryType: "TransferWithAuthorization",
481
+ message: {
482
+ from: (0, import_viem2.getAddress)(from),
483
+ to: (0, import_viem2.getAddress)(to),
484
+ value,
485
+ validAfter,
486
+ validBefore,
487
+ nonce
488
+ }
489
+ };
490
+ if (isSignerWallet(walletClient)) {
491
+ const signature = await walletClient.signTypedData(data);
492
+ return {
493
+ signature
494
+ };
495
+ } else if (isAccount(walletClient) && walletClient.signTypedData) {
496
+ const signature = await walletClient.signTypedData(data);
497
+ return {
498
+ signature
499
+ };
500
+ } else {
501
+ throw new Error("Invalid wallet client provided does not support signTypedData");
502
+ }
503
+ }
504
+ function createNonce() {
505
+ const cryptoObj = typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.getRandomValues === "function" ? globalThis.crypto : (
506
+ // Dynamic require is needed to support node.js
507
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
508
+ require("crypto").webcrypto
509
+ );
510
+ return (0, import_viem2.toHex)(cryptoObj.getRandomValues(new Uint8Array(32)));
511
+ }
512
+
513
+ // src/schemes/exact/evm/utils/paymentUtils.ts
514
+ function encodePayment(payment) {
515
+ let safe;
516
+ if (SupportedEVMNetworks.includes(payment.network)) {
517
+ const evmPayload = payment.payload;
518
+ let processedPayload;
519
+ if (evmPayload.authorizationType === "eip3009") {
520
+ processedPayload = {
521
+ ...evmPayload,
522
+ authorization: {
523
+ ...evmPayload.authorization,
524
+ validAfter: evmPayload.authorization.validAfter.toString(),
525
+ validBefore: evmPayload.authorization.validBefore.toString()
526
+ }
527
+ };
528
+ } else if (evmPayload.authorizationType === "permit") {
529
+ processedPayload = {
530
+ ...evmPayload,
531
+ authorization: {
532
+ ...evmPayload.authorization,
533
+ deadline: evmPayload.authorization.deadline.toString(),
534
+ nonce: evmPayload.authorization.nonce.toString()
535
+ }
536
+ };
537
+ } else {
538
+ processedPayload = {
539
+ ...evmPayload,
540
+ authorization: {
541
+ ...evmPayload.authorization,
542
+ deadline: evmPayload.authorization.deadline.toString(),
543
+ nonce: evmPayload.authorization.nonce.toString()
544
+ }
545
+ };
546
+ }
547
+ safe = {
548
+ ...payment,
549
+ payload: processedPayload
550
+ };
551
+ return safeBase64Encode(JSON.stringify(safe));
552
+ }
553
+ if (SupportedSVMNetworks.includes(payment.network)) {
554
+ safe = { ...payment, payload: payment.payload };
555
+ return safeBase64Encode(JSON.stringify(safe));
556
+ }
557
+ throw new Error("Invalid network");
558
+ }
559
+
560
+ // src/schemes/exact/evm/eip3009/client.ts
561
+ function preparePaymentHeader(from, x402Version, paymentRequirements) {
562
+ const nonce = createNonce();
563
+ const validAfter = BigInt(
564
+ Math.floor(Date.now() / 1e3) - 600
565
+ // 10 minutes before
566
+ ).toString();
567
+ const validBefore = BigInt(
568
+ Math.floor(Date.now() / 1e3 + paymentRequirements.maxTimeoutSeconds)
569
+ ).toString();
570
+ return {
571
+ x402Version,
572
+ scheme: paymentRequirements.scheme,
573
+ network: paymentRequirements.network,
574
+ payload: {
575
+ authorizationType: "eip3009",
576
+ signature: void 0,
577
+ authorization: {
578
+ from,
579
+ to: paymentRequirements.payTo,
580
+ value: paymentRequirements.maxAmountRequired,
581
+ validAfter: validAfter.toString(),
582
+ validBefore: validBefore.toString(),
583
+ nonce
584
+ }
585
+ }
586
+ };
587
+ }
588
+ async function signPaymentHeader(client, paymentRequirements, unsignedPaymentHeader) {
589
+ const { authorization } = unsignedPaymentHeader.payload;
590
+ const { signature } = await signAuthorization(client, authorization, paymentRequirements);
591
+ return {
592
+ ...unsignedPaymentHeader,
593
+ payload: {
594
+ authorizationType: "eip3009",
595
+ signature,
596
+ authorization
597
+ }
598
+ };
599
+ }
600
+ async function createPayment(client, x402Version, paymentRequirements) {
601
+ const from = isSignerWallet(client) ? client.account.address : client.address;
602
+ const unsignedPaymentHeader = preparePaymentHeader(from, x402Version, paymentRequirements);
603
+ return signPaymentHeader(client, paymentRequirements, unsignedPaymentHeader);
604
+ }
605
+ async function createPaymentHeader(client, x402Version, paymentRequirements) {
606
+ const payment = await createPayment(client, x402Version, paymentRequirements);
607
+ return encodePayment(payment);
608
+ }
609
+
610
+ // src/schemes/exact/svm/client.ts
611
+ var import_kit4 = require("@solana/kit");
612
+ var import_token_20222 = require("@solana-program/token-2022");
613
+ var import_token2 = require("@solana-program/token");
614
+ var import_compute_budget = require("@solana-program/compute-budget");
615
+ async function createPaymentHeader2(client, x402Version, paymentRequirements, config2) {
616
+ const paymentPayload = await createAndSignPayment(
617
+ client,
618
+ x402Version,
619
+ paymentRequirements,
620
+ config2
621
+ );
622
+ return encodePayment(paymentPayload);
623
+ }
624
+ async function createAndSignPayment(client, x402Version, paymentRequirements, config2) {
625
+ const transactionMessage = await createTransferTransactionMessage(
626
+ client,
627
+ paymentRequirements,
628
+ config2
629
+ );
630
+ const signedTransaction = await (0, import_kit4.partiallySignTransactionMessageWithSigners)(transactionMessage);
631
+ const base64EncodedWireTransaction = (0, import_kit4.getBase64EncodedWireTransaction)(signedTransaction);
632
+ return {
633
+ scheme: paymentRequirements.scheme,
634
+ network: paymentRequirements.network,
635
+ x402Version,
636
+ payload: {
637
+ transaction: base64EncodedWireTransaction
638
+ }
639
+ };
640
+ }
641
+ async function createTransferTransactionMessage(client, paymentRequirements, config2) {
642
+ const rpc = getRpcClient(paymentRequirements.network, config2?.svmConfig?.rpcUrl);
643
+ const transferInstructions = await createAtaAndTransferInstructions(
644
+ client,
645
+ paymentRequirements,
646
+ config2
647
+ );
648
+ const feePayer = paymentRequirements.extra?.feePayer;
649
+ const txToSimulate = (0, import_kit4.pipe)(
650
+ (0, import_kit4.createTransactionMessage)({ version: 0 }),
651
+ (tx2) => (0, import_compute_budget.setTransactionMessageComputeUnitPrice)(1, tx2),
652
+ // 1 microlamport priority fee
653
+ (tx2) => (0, import_kit4.setTransactionMessageFeePayer)(feePayer, tx2),
654
+ (tx2) => (0, import_kit4.appendTransactionMessageInstructions)(transferInstructions, tx2)
655
+ );
656
+ const estimateComputeUnitLimit = (0, import_compute_budget.estimateComputeUnitLimitFactory)({ rpc });
657
+ const estimatedUnits = await estimateComputeUnitLimit(txToSimulate);
658
+ const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
659
+ const tx = (0, import_kit4.pipe)(
660
+ txToSimulate,
661
+ (tx2) => (0, import_kit4.prependTransactionMessageInstruction)(
662
+ (0, import_compute_budget.getSetComputeUnitLimitInstruction)({ units: estimatedUnits }),
663
+ tx2
664
+ ),
665
+ (tx2) => (0, import_kit4.setTransactionMessageLifetimeUsingBlockhash)(latestBlockhash, tx2)
666
+ );
667
+ return tx;
668
+ }
669
+ async function createAtaAndTransferInstructions(client, paymentRequirements, config2) {
670
+ const { asset } = paymentRequirements;
671
+ const rpc = getRpcClient(paymentRequirements.network, config2?.svmConfig?.rpcUrl);
672
+ const tokenMint = await (0, import_token_20222.fetchMint)(rpc, asset);
673
+ const tokenProgramAddress = tokenMint.programAddress;
674
+ if (tokenProgramAddress.toString() !== import_token2.TOKEN_PROGRAM_ADDRESS.toString() && tokenProgramAddress.toString() !== import_token_20222.TOKEN_2022_PROGRAM_ADDRESS.toString()) {
675
+ throw new Error("Asset was not created by a known token program");
676
+ }
677
+ const instructions = [];
678
+ const createAtaIx = await createAtaInstructionOrUndefined(
679
+ paymentRequirements,
680
+ tokenProgramAddress,
681
+ config2
682
+ );
683
+ if (createAtaIx) {
684
+ instructions.push(createAtaIx);
685
+ }
686
+ const transferIx = await createTransferInstruction(
687
+ client,
688
+ paymentRequirements,
689
+ tokenMint.data.decimals,
690
+ tokenProgramAddress
691
+ );
692
+ instructions.push(transferIx);
693
+ return instructions;
694
+ }
695
+ async function createAtaInstructionOrUndefined(paymentRequirements, tokenProgramAddress, config2) {
696
+ const { asset, payTo, extra } = paymentRequirements;
697
+ const feePayer = extra?.feePayer;
698
+ if (!feePayer) {
699
+ throw new Error(
700
+ "feePayer is required in paymentRequirements.extra in order to set the facilitator as the fee payer for the create associated token account instruction"
701
+ );
702
+ }
703
+ const [destinationATAAddress] = await (0, import_token_20222.findAssociatedTokenPda)({
704
+ mint: asset,
705
+ owner: payTo,
706
+ tokenProgram: tokenProgramAddress
707
+ });
708
+ const rpc = getRpcClient(paymentRequirements.network, config2?.svmConfig?.rpcUrl);
709
+ const maybeAccount = await (0, import_kit4.fetchEncodedAccount)(rpc, destinationATAAddress);
710
+ if (!maybeAccount.exists) {
711
+ return (0, import_token_20222.getCreateAssociatedTokenInstruction)({
712
+ payer: paymentRequirements.extra?.feePayer,
713
+ ata: destinationATAAddress,
714
+ owner: payTo,
715
+ mint: asset,
716
+ tokenProgram: tokenProgramAddress
717
+ });
718
+ }
719
+ return void 0;
720
+ }
721
+ async function createTransferInstruction(client, paymentRequirements, decimals, tokenProgramAddress) {
722
+ const { asset, maxAmountRequired: amount, payTo } = paymentRequirements;
723
+ const [sourceATA] = await (0, import_token_20222.findAssociatedTokenPda)({
724
+ mint: asset,
725
+ owner: client.address,
726
+ tokenProgram: tokenProgramAddress
727
+ });
728
+ const [destinationATA] = await (0, import_token_20222.findAssociatedTokenPda)({
729
+ mint: asset,
730
+ owner: payTo,
731
+ tokenProgram: tokenProgramAddress
732
+ });
733
+ return (0, import_token_20222.getTransferCheckedInstruction)(
734
+ {
735
+ source: sourceATA,
736
+ mint: asset,
737
+ destination: destinationATA,
738
+ authority: client,
739
+ amount: BigInt(amount),
740
+ decimals
741
+ },
742
+ { programAddress: tokenProgramAddress }
743
+ );
744
+ }
745
+
746
+ // src/client/createPaymentHeader.ts
747
+ async function createPaymentHeader3(client, x402Version, paymentRequirements, config2) {
748
+ if (paymentRequirements.scheme === "exact") {
749
+ if (SupportedEVMNetworks.includes(paymentRequirements.network)) {
750
+ const evmClient = isMultiNetworkSigner(client) ? client.evm : client;
751
+ if (!isEvmSignerWallet(evmClient)) {
752
+ throw new Error("Invalid evm wallet client provided");
753
+ }
754
+ return await createPaymentHeader(
755
+ evmClient,
756
+ x402Version,
757
+ paymentRequirements
758
+ );
759
+ }
760
+ if (SupportedSVMNetworks.includes(paymentRequirements.network)) {
761
+ const svmClient = isMultiNetworkSigner(client) ? client.svm : client;
762
+ if (!isSvmSignerWallet(svmClient)) {
763
+ throw new Error("Invalid svm wallet client provided");
764
+ }
765
+ return await createPaymentHeader2(
766
+ svmClient,
767
+ x402Version,
768
+ paymentRequirements,
769
+ config2
770
+ );
771
+ }
772
+ throw new Error("Unsupported network");
773
+ }
774
+ throw new Error("Unsupported scheme");
775
+ }
776
+
777
+ // src/client/preparePaymentHeader.ts
778
+ function preparePaymentHeader2(from, x402Version, paymentRequirements) {
779
+ if (paymentRequirements.scheme === "exact" && SupportedEVMNetworks.includes(paymentRequirements.network)) {
780
+ return preparePaymentHeader(from, x402Version, paymentRequirements);
781
+ }
782
+ throw new Error("Unsupported scheme");
783
+ }
784
+
785
+ // src/client/selectPaymentRequirements.ts
786
+ function selectPaymentRequirements(paymentRequirements, network, scheme) {
787
+ paymentRequirements.sort((a, b) => {
788
+ if (a.network === "base" && b.network !== "base") {
789
+ return -1;
790
+ }
791
+ if (a.network !== "base" && b.network === "base") {
792
+ return 1;
793
+ }
794
+ return 0;
795
+ });
796
+ const broadlyAcceptedPaymentRequirements = paymentRequirements.filter((requirement) => {
797
+ const isExpectedScheme = !scheme || requirement.scheme === scheme;
798
+ const isExpectedChain = !network || (Array.isArray(network) ? network.includes(requirement.network) : network == requirement.network);
799
+ return isExpectedScheme && isExpectedChain;
800
+ });
801
+ const usdcRequirements = broadlyAcceptedPaymentRequirements.filter((requirement) => {
802
+ return requirement.asset === getUsdcChainConfigForChain(getNetworkId(requirement.network))?.usdcAddress;
803
+ });
804
+ if (usdcRequirements.length > 0) {
805
+ return usdcRequirements[0];
806
+ }
807
+ if (broadlyAcceptedPaymentRequirements.length > 0) {
808
+ return broadlyAcceptedPaymentRequirements[0];
809
+ }
810
+ return paymentRequirements[0];
811
+ }
812
+
813
+ // src/client/signPaymentHeader.ts
814
+ async function signPaymentHeader2(client, paymentRequirements, unsignedPaymentHeader) {
815
+ if (paymentRequirements.scheme === "exact" && SupportedEVMNetworks.includes(paymentRequirements.network)) {
816
+ const evmClient = isMultiNetworkSigner(client) ? client.evm : client;
817
+ if (!isEvmSignerWallet(evmClient)) {
818
+ throw new Error("Invalid evm wallet client provided");
819
+ }
820
+ const signedPaymentHeader = await signPaymentHeader(evmClient, paymentRequirements, unsignedPaymentHeader);
821
+ return encodePayment(signedPaymentHeader);
822
+ }
823
+ throw new Error("Unsupported scheme");
824
+ }
825
+ // Annotate the CommonJS export names for ESM import in node:
826
+ 0 && (module.exports = {
827
+ createPaymentHeader,
828
+ preparePaymentHeader,
829
+ selectPaymentRequirements,
830
+ signPaymentHeader
831
+ });
832
+ //# sourceMappingURL=index.js.map