uvd-x402-sdk 2.0.3 → 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 (56) hide show
  1. package/README.md +282 -15
  2. package/dist/adapters/index.d.mts +139 -0
  3. package/dist/adapters/index.d.ts +139 -0
  4. package/dist/adapters/index.js +724 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/index.mjs +720 -0
  7. package/dist/adapters/index.mjs.map +1 -0
  8. package/dist/{index-MTBgC_SL.d.mts → index-BHwtdJrt.d.mts} +45 -4
  9. package/dist/{index-MTBgC_SL.d.ts → index-BHwtdJrt.d.ts} +45 -4
  10. package/dist/{index-Db8dWNam.d.ts → index-CkDdnSNx.d.mts} +33 -2
  11. package/dist/{index-D0N_SYpK.d.mts → index-UTj85ZDJ.d.ts} +33 -2
  12. package/dist/index.d.mts +2 -2
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.js +210 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/index.mjs +207 -1
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/providers/evm/index.d.mts +19 -3
  19. package/dist/providers/evm/index.d.ts +19 -3
  20. package/dist/providers/evm/index.js +228 -12
  21. package/dist/providers/evm/index.js.map +1 -1
  22. package/dist/providers/evm/index.mjs +228 -12
  23. package/dist/providers/evm/index.mjs.map +1 -1
  24. package/dist/providers/near/index.d.mts +1 -1
  25. package/dist/providers/near/index.d.ts +1 -1
  26. package/dist/providers/near/index.js.map +1 -1
  27. package/dist/providers/near/index.mjs.map +1 -1
  28. package/dist/providers/solana/index.d.mts +1 -1
  29. package/dist/providers/solana/index.d.ts +1 -1
  30. package/dist/providers/solana/index.js +168 -0
  31. package/dist/providers/solana/index.js.map +1 -1
  32. package/dist/providers/solana/index.mjs +168 -0
  33. package/dist/providers/solana/index.mjs.map +1 -1
  34. package/dist/providers/stellar/index.d.mts +1 -1
  35. package/dist/providers/stellar/index.d.ts +1 -1
  36. package/dist/providers/stellar/index.js.map +1 -1
  37. package/dist/providers/stellar/index.mjs.map +1 -1
  38. package/dist/react/index.d.mts +3 -3
  39. package/dist/react/index.d.ts +3 -3
  40. package/dist/react/index.js +168 -0
  41. package/dist/react/index.js.map +1 -1
  42. package/dist/react/index.mjs +168 -0
  43. package/dist/react/index.mjs.map +1 -1
  44. package/dist/utils/index.d.mts +1 -1
  45. package/dist/utils/index.d.ts +1 -1
  46. package/dist/utils/index.js +168 -0
  47. package/dist/utils/index.js.map +1 -1
  48. package/dist/utils/index.mjs +168 -0
  49. package/dist/utils/index.mjs.map +1 -1
  50. package/package.json +10 -2
  51. package/src/adapters/index.ts +13 -0
  52. package/src/adapters/wagmi.ts +294 -0
  53. package/src/chains/index.ts +255 -1
  54. package/src/index.ts +9 -0
  55. package/src/providers/evm/index.ts +64 -16
  56. package/src/types/index.ts +46 -3
@@ -65,6 +65,26 @@ var SUPPORTED_CHAINS = {
65
65
  name: "USD Coin",
66
66
  version: "2"
67
67
  },
68
+ tokens: {
69
+ usdc: {
70
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
71
+ decimals: 6,
72
+ name: "USD Coin",
73
+ version: "2"
74
+ },
75
+ eurc: {
76
+ address: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42",
77
+ decimals: 6,
78
+ name: "EURC",
79
+ version: "2"
80
+ },
81
+ gho: {
82
+ address: "0x6Bb7a212910682DCFdbd5BCBb3e28FB4E8da10Ee",
83
+ decimals: 18,
84
+ name: "Gho Token",
85
+ version: "1"
86
+ }
87
+ },
68
88
  x402: {
69
89
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
70
90
  enabled: true
@@ -89,6 +109,26 @@ var SUPPORTED_CHAINS = {
89
109
  name: "USD Coin",
90
110
  version: "2"
91
111
  },
112
+ tokens: {
113
+ usdc: {
114
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
115
+ decimals: 6,
116
+ name: "USD Coin",
117
+ version: "2"
118
+ },
119
+ eurc: {
120
+ address: "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD",
121
+ decimals: 6,
122
+ name: "EURC",
123
+ version: "2"
124
+ },
125
+ ausd: {
126
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
127
+ decimals: 6,
128
+ name: "Agora USD",
129
+ version: "1"
130
+ }
131
+ },
92
132
  x402: {
93
133
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
94
134
  enabled: true
@@ -113,6 +153,44 @@ var SUPPORTED_CHAINS = {
113
153
  name: "USD Coin",
114
154
  version: "2"
115
155
  },
156
+ tokens: {
157
+ usdc: {
158
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
159
+ decimals: 6,
160
+ name: "USD Coin",
161
+ version: "2"
162
+ },
163
+ eurc: {
164
+ address: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
165
+ decimals: 6,
166
+ name: "EURC",
167
+ version: "2"
168
+ },
169
+ ausd: {
170
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
171
+ decimals: 6,
172
+ name: "Agora USD",
173
+ version: "1"
174
+ },
175
+ pyusd: {
176
+ address: "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8",
177
+ decimals: 6,
178
+ name: "PayPal USD",
179
+ version: "1"
180
+ },
181
+ gho: {
182
+ address: "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f",
183
+ decimals: 18,
184
+ name: "Gho Token",
185
+ version: "1"
186
+ },
187
+ crvusd: {
188
+ address: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
189
+ decimals: 18,
190
+ name: "Curve.Fi USD Stablecoin",
191
+ version: "1"
192
+ }
193
+ },
116
194
  x402: {
117
195
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
118
196
  enabled: true
@@ -137,6 +215,20 @@ var SUPPORTED_CHAINS = {
137
215
  name: "USD Coin",
138
216
  version: "2"
139
217
  },
218
+ tokens: {
219
+ usdc: {
220
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
221
+ decimals: 6,
222
+ name: "USD Coin",
223
+ version: "2"
224
+ },
225
+ ausd: {
226
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
227
+ decimals: 6,
228
+ name: "Agora USD",
229
+ version: "1"
230
+ }
231
+ },
140
232
  x402: {
141
233
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
142
234
  enabled: true
@@ -161,6 +253,32 @@ var SUPPORTED_CHAINS = {
161
253
  name: "USD Coin",
162
254
  version: "2"
163
255
  },
256
+ tokens: {
257
+ usdc: {
258
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
259
+ decimals: 6,
260
+ name: "USD Coin",
261
+ version: "2"
262
+ },
263
+ ausd: {
264
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
265
+ decimals: 6,
266
+ name: "Agora USD",
267
+ version: "1"
268
+ },
269
+ gho: {
270
+ address: "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33",
271
+ decimals: 18,
272
+ name: "Gho Token",
273
+ version: "1"
274
+ },
275
+ crvusd: {
276
+ address: "0x498Bf2B1e120FeD3ad3D42EA2165E9b73f99C1e5",
277
+ decimals: 18,
278
+ name: "Curve.Fi USD Stablecoin",
279
+ version: "1"
280
+ }
281
+ },
164
282
  x402: {
165
283
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
166
284
  enabled: true
@@ -185,6 +303,14 @@ var SUPPORTED_CHAINS = {
185
303
  name: "USD Coin",
186
304
  version: "2"
187
305
  },
306
+ tokens: {
307
+ usdc: {
308
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
309
+ decimals: 6,
310
+ name: "USD Coin",
311
+ version: "2"
312
+ }
313
+ },
188
314
  x402: {
189
315
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
190
316
  enabled: true
@@ -210,6 +336,15 @@ var SUPPORTED_CHAINS = {
210
336
  // Celo uses "USDC" not "USD Coin" for EIP-712
211
337
  version: "2"
212
338
  },
339
+ tokens: {
340
+ usdc: {
341
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
342
+ decimals: 6,
343
+ name: "USDC",
344
+ // Celo uses "USDC" not "USD Coin" for EIP-712
345
+ version: "2"
346
+ }
347
+ },
213
348
  x402: {
214
349
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
215
350
  enabled: true
@@ -235,6 +370,15 @@ var SUPPORTED_CHAINS = {
235
370
  // HyperEVM uses "USDC" not "USD Coin"
236
371
  version: "2"
237
372
  },
373
+ tokens: {
374
+ usdc: {
375
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
376
+ decimals: 6,
377
+ name: "USDC",
378
+ // HyperEVM uses "USDC" not "USD Coin"
379
+ version: "2"
380
+ }
381
+ },
238
382
  x402: {
239
383
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
240
384
  enabled: true
@@ -260,6 +404,15 @@ var SUPPORTED_CHAINS = {
260
404
  // Unichain uses "USDC" not "USD Coin"
261
405
  version: "2"
262
406
  },
407
+ tokens: {
408
+ usdc: {
409
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
410
+ decimals: 6,
411
+ name: "USDC",
412
+ // Unichain uses "USDC" not "USD Coin"
413
+ version: "2"
414
+ }
415
+ },
263
416
  x402: {
264
417
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
265
418
  enabled: true
@@ -285,6 +438,21 @@ var SUPPORTED_CHAINS = {
285
438
  // Monad uses "USDC" not "USD Coin"
286
439
  version: "2"
287
440
  },
441
+ tokens: {
442
+ usdc: {
443
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
444
+ decimals: 6,
445
+ name: "USDC",
446
+ // Monad uses "USDC" not "USD Coin"
447
+ version: "2"
448
+ },
449
+ ausd: {
450
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
451
+ decimals: 6,
452
+ name: "Agora USD",
453
+ version: "1"
454
+ }
455
+ },
288
456
  x402: {
289
457
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
290
458
  enabled: true
@@ -414,6 +582,17 @@ function getChainById(chainId) {
414
582
  function getChainByName(name) {
415
583
  return SUPPORTED_CHAINS[name.toLowerCase()];
416
584
  }
585
+ function getTokenConfig(chainName, tokenType = "usdc") {
586
+ const chain = getChainByName(chainName);
587
+ if (!chain) return void 0;
588
+ if (chain.tokens && chain.tokens[tokenType]) {
589
+ return chain.tokens[tokenType];
590
+ }
591
+ if (tokenType === "usdc") {
592
+ return chain.usdc;
593
+ }
594
+ return void 0;
595
+ }
417
596
 
418
597
  // src/providers/evm/index.ts
419
598
  var EVMProvider = class {
@@ -545,18 +724,39 @@ var EVMProvider = class {
545
724
  return this.chainName;
546
725
  }
547
726
  /**
548
- * Get USDC balance
727
+ * Get token balance (defaults to USDC for backward compatibility)
728
+ *
729
+ * @param chainConfig - Chain configuration
730
+ * @param tokenType - Token type to check balance for (defaults to 'usdc')
731
+ * @returns Formatted balance string
549
732
  */
550
- async getBalance(chainConfig) {
733
+ async getBalance(chainConfig, tokenType = "usdc") {
551
734
  if (!this.address) {
552
735
  throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
553
736
  }
554
- const publicProvider = new ethers.JsonRpcProvider(chainConfig.rpcUrl);
555
- const usdcAbi = ["function balanceOf(address owner) view returns (uint256)"];
556
- const usdcContract = new ethers.Contract(chainConfig.usdc.address, usdcAbi, publicProvider);
737
+ const tokenConfig = getTokenConfig(chainConfig.name, tokenType);
738
+ if (!tokenConfig) {
739
+ const fallbackConfig = chainConfig.usdc;
740
+ if (!fallbackConfig) {
741
+ throw new X402Error(`Token ${tokenType} not supported on ${chainConfig.name}`, "INVALID_CONFIG");
742
+ }
743
+ return this.getBalanceWithConfig(chainConfig.rpcUrl, fallbackConfig);
744
+ }
745
+ return this.getBalanceWithConfig(chainConfig.rpcUrl, tokenConfig);
746
+ }
747
+ /**
748
+ * Internal helper to get balance using a token config
749
+ */
750
+ async getBalanceWithConfig(rpcUrl, tokenConfig) {
751
+ if (!this.address) {
752
+ return "0.00";
753
+ }
754
+ const publicProvider = new ethers.JsonRpcProvider(rpcUrl);
755
+ const tokenAbi = ["function balanceOf(address owner) view returns (uint256)"];
756
+ const tokenContract = new ethers.Contract(tokenConfig.address, tokenAbi, publicProvider);
557
757
  try {
558
- const balance = await usdcContract.balanceOf(this.address);
559
- const formatted = ethers.formatUnits(balance, chainConfig.usdc.decimals);
758
+ const balance = await tokenContract.balanceOf(this.address);
759
+ const formatted = ethers.formatUnits(balance, tokenConfig.decimals);
560
760
  return parseFloat(formatted).toFixed(2);
561
761
  } catch {
562
762
  return "0.00";
@@ -564,11 +764,27 @@ var EVMProvider = class {
564
764
  }
565
765
  /**
566
766
  * Create EVM payment (EIP-712 TransferWithAuthorization)
767
+ *
768
+ * Supports multi-token payments. If paymentInfo.tokenType is specified,
769
+ * it will use the appropriate token configuration. Defaults to USDC
770
+ * for backward compatibility.
771
+ *
772
+ * @param paymentInfo - Payment details including amount and recipient
773
+ * @param chainConfig - Chain configuration
774
+ * @returns JSON-encoded payment payload
567
775
  */
568
776
  async signPayment(paymentInfo, chainConfig) {
569
777
  if (!this.signer || !this.address) {
570
778
  throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
571
779
  }
780
+ const tokenType = paymentInfo.tokenType || "usdc";
781
+ const tokenConfig = getTokenConfig(chainConfig.name, tokenType);
782
+ if (!tokenConfig) {
783
+ throw new X402Error(
784
+ `Token ${tokenType} not supported on ${chainConfig.name}`,
785
+ "CHAIN_NOT_SUPPORTED"
786
+ );
787
+ }
572
788
  const recipient = paymentInfo.recipients?.evm || paymentInfo.recipient;
573
789
  const nonceBytes = new Uint8Array(32);
574
790
  if (typeof window !== "undefined" && window.crypto) {
@@ -583,10 +799,10 @@ var EVMProvider = class {
583
799
  const validityWindowSeconds = chainConfig.name === "base" ? 300 : 60;
584
800
  const validBefore = Math.floor(Date.now() / 1e3) + validityWindowSeconds;
585
801
  const domain = {
586
- name: chainConfig.usdc.name,
587
- version: chainConfig.usdc.version,
802
+ name: tokenConfig.name,
803
+ version: tokenConfig.version,
588
804
  chainId: chainConfig.chainId,
589
- verifyingContract: chainConfig.usdc.address
805
+ verifyingContract: tokenConfig.address
590
806
  };
591
807
  const types = {
592
808
  TransferWithAuthorization: [
@@ -598,7 +814,7 @@ var EVMProvider = class {
598
814
  { name: "nonce", type: "bytes32" }
599
815
  ]
600
816
  };
601
- const value = ethers.parseUnits(paymentInfo.amount, chainConfig.usdc.decimals);
817
+ const value = ethers.parseUnits(paymentInfo.amount, tokenConfig.decimals);
602
818
  const from = this.address;
603
819
  const to = ethers.getAddress(recipient);
604
820
  const message = {
@@ -634,7 +850,7 @@ var EVMProvider = class {
634
850
  r: sig.r,
635
851
  s: sig.s,
636
852
  chainId: chainConfig.chainId,
637
- token: chainConfig.usdc.address
853
+ token: tokenConfig.address
638
854
  };
639
855
  return JSON.stringify(payload);
640
856
  }