uvd-x402-sdk 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 (54) hide show
  1. package/README.md +282 -15
  2. package/dist/adapters/index.d.mts +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.js +168 -0
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/index.mjs +168 -0
  7. package/dist/adapters/index.mjs.map +1 -1
  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 +5 -2
  51. package/src/chains/index.ts +255 -1
  52. package/src/index.ts +9 -0
  53. package/src/providers/evm/index.ts +64 -16
  54. package/src/types/index.ts +46 -3
@@ -69,6 +69,26 @@ var SUPPORTED_CHAINS = {
69
69
  name: "USD Coin",
70
70
  version: "2"
71
71
  },
72
+ tokens: {
73
+ usdc: {
74
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
75
+ decimals: 6,
76
+ name: "USD Coin",
77
+ version: "2"
78
+ },
79
+ eurc: {
80
+ address: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42",
81
+ decimals: 6,
82
+ name: "EURC",
83
+ version: "2"
84
+ },
85
+ gho: {
86
+ address: "0x6Bb7a212910682DCFdbd5BCBb3e28FB4E8da10Ee",
87
+ decimals: 18,
88
+ name: "Gho Token",
89
+ version: "1"
90
+ }
91
+ },
72
92
  x402: {
73
93
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
74
94
  enabled: true
@@ -93,6 +113,26 @@ var SUPPORTED_CHAINS = {
93
113
  name: "USD Coin",
94
114
  version: "2"
95
115
  },
116
+ tokens: {
117
+ usdc: {
118
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
119
+ decimals: 6,
120
+ name: "USD Coin",
121
+ version: "2"
122
+ },
123
+ eurc: {
124
+ address: "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD",
125
+ decimals: 6,
126
+ name: "EURC",
127
+ version: "2"
128
+ },
129
+ ausd: {
130
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
131
+ decimals: 6,
132
+ name: "Agora USD",
133
+ version: "1"
134
+ }
135
+ },
96
136
  x402: {
97
137
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
98
138
  enabled: true
@@ -117,6 +157,44 @@ var SUPPORTED_CHAINS = {
117
157
  name: "USD Coin",
118
158
  version: "2"
119
159
  },
160
+ tokens: {
161
+ usdc: {
162
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
163
+ decimals: 6,
164
+ name: "USD Coin",
165
+ version: "2"
166
+ },
167
+ eurc: {
168
+ address: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
169
+ decimals: 6,
170
+ name: "EURC",
171
+ version: "2"
172
+ },
173
+ ausd: {
174
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
175
+ decimals: 6,
176
+ name: "Agora USD",
177
+ version: "1"
178
+ },
179
+ pyusd: {
180
+ address: "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8",
181
+ decimals: 6,
182
+ name: "PayPal USD",
183
+ version: "1"
184
+ },
185
+ gho: {
186
+ address: "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f",
187
+ decimals: 18,
188
+ name: "Gho Token",
189
+ version: "1"
190
+ },
191
+ crvusd: {
192
+ address: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
193
+ decimals: 18,
194
+ name: "Curve.Fi USD Stablecoin",
195
+ version: "1"
196
+ }
197
+ },
120
198
  x402: {
121
199
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
122
200
  enabled: true
@@ -141,6 +219,20 @@ var SUPPORTED_CHAINS = {
141
219
  name: "USD Coin",
142
220
  version: "2"
143
221
  },
222
+ tokens: {
223
+ usdc: {
224
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
225
+ decimals: 6,
226
+ name: "USD Coin",
227
+ version: "2"
228
+ },
229
+ ausd: {
230
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
231
+ decimals: 6,
232
+ name: "Agora USD",
233
+ version: "1"
234
+ }
235
+ },
144
236
  x402: {
145
237
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
146
238
  enabled: true
@@ -165,6 +257,32 @@ var SUPPORTED_CHAINS = {
165
257
  name: "USD Coin",
166
258
  version: "2"
167
259
  },
260
+ tokens: {
261
+ usdc: {
262
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
263
+ decimals: 6,
264
+ name: "USD Coin",
265
+ version: "2"
266
+ },
267
+ ausd: {
268
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
269
+ decimals: 6,
270
+ name: "Agora USD",
271
+ version: "1"
272
+ },
273
+ gho: {
274
+ address: "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33",
275
+ decimals: 18,
276
+ name: "Gho Token",
277
+ version: "1"
278
+ },
279
+ crvusd: {
280
+ address: "0x498Bf2B1e120FeD3ad3D42EA2165E9b73f99C1e5",
281
+ decimals: 18,
282
+ name: "Curve.Fi USD Stablecoin",
283
+ version: "1"
284
+ }
285
+ },
168
286
  x402: {
169
287
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
170
288
  enabled: true
@@ -189,6 +307,14 @@ var SUPPORTED_CHAINS = {
189
307
  name: "USD Coin",
190
308
  version: "2"
191
309
  },
310
+ tokens: {
311
+ usdc: {
312
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
313
+ decimals: 6,
314
+ name: "USD Coin",
315
+ version: "2"
316
+ }
317
+ },
192
318
  x402: {
193
319
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
194
320
  enabled: true
@@ -214,6 +340,15 @@ var SUPPORTED_CHAINS = {
214
340
  // Celo uses "USDC" not "USD Coin" for EIP-712
215
341
  version: "2"
216
342
  },
343
+ tokens: {
344
+ usdc: {
345
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
346
+ decimals: 6,
347
+ name: "USDC",
348
+ // Celo uses "USDC" not "USD Coin" for EIP-712
349
+ version: "2"
350
+ }
351
+ },
217
352
  x402: {
218
353
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
219
354
  enabled: true
@@ -239,6 +374,15 @@ var SUPPORTED_CHAINS = {
239
374
  // HyperEVM uses "USDC" not "USD Coin"
240
375
  version: "2"
241
376
  },
377
+ tokens: {
378
+ usdc: {
379
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
380
+ decimals: 6,
381
+ name: "USDC",
382
+ // HyperEVM uses "USDC" not "USD Coin"
383
+ version: "2"
384
+ }
385
+ },
242
386
  x402: {
243
387
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
244
388
  enabled: true
@@ -264,6 +408,15 @@ var SUPPORTED_CHAINS = {
264
408
  // Unichain uses "USDC" not "USD Coin"
265
409
  version: "2"
266
410
  },
411
+ tokens: {
412
+ usdc: {
413
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
414
+ decimals: 6,
415
+ name: "USDC",
416
+ // Unichain uses "USDC" not "USD Coin"
417
+ version: "2"
418
+ }
419
+ },
267
420
  x402: {
268
421
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
269
422
  enabled: true
@@ -289,6 +442,21 @@ var SUPPORTED_CHAINS = {
289
442
  // Monad uses "USDC" not "USD Coin"
290
443
  version: "2"
291
444
  },
445
+ tokens: {
446
+ usdc: {
447
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
448
+ decimals: 6,
449
+ name: "USDC",
450
+ // Monad uses "USDC" not "USD Coin"
451
+ version: "2"
452
+ },
453
+ ausd: {
454
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
455
+ decimals: 6,
456
+ name: "Agora USD",
457
+ version: "1"
458
+ }
459
+ },
292
460
  x402: {
293
461
  facilitatorUrl: DEFAULT_FACILITATOR_URL,
294
462
  enabled: true
@@ -418,6 +586,17 @@ function getChainById(chainId) {
418
586
  function getChainByName(name) {
419
587
  return SUPPORTED_CHAINS[name.toLowerCase()];
420
588
  }
589
+ function getTokenConfig(chainName, tokenType = "usdc") {
590
+ const chain = getChainByName(chainName);
591
+ if (!chain) return void 0;
592
+ if (chain.tokens && chain.tokens[tokenType]) {
593
+ return chain.tokens[tokenType];
594
+ }
595
+ if (tokenType === "usdc") {
596
+ return chain.usdc;
597
+ }
598
+ return void 0;
599
+ }
421
600
 
422
601
  // src/providers/evm/index.ts
423
602
  var EVMProvider = class {
@@ -549,18 +728,39 @@ var EVMProvider = class {
549
728
  return this.chainName;
550
729
  }
551
730
  /**
552
- * Get USDC balance
731
+ * Get token balance (defaults to USDC for backward compatibility)
732
+ *
733
+ * @param chainConfig - Chain configuration
734
+ * @param tokenType - Token type to check balance for (defaults to 'usdc')
735
+ * @returns Formatted balance string
553
736
  */
554
- async getBalance(chainConfig) {
737
+ async getBalance(chainConfig, tokenType = "usdc") {
555
738
  if (!this.address) {
556
739
  throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
557
740
  }
558
- const publicProvider = new ethers.ethers.JsonRpcProvider(chainConfig.rpcUrl);
559
- const usdcAbi = ["function balanceOf(address owner) view returns (uint256)"];
560
- const usdcContract = new ethers.ethers.Contract(chainConfig.usdc.address, usdcAbi, publicProvider);
741
+ const tokenConfig = getTokenConfig(chainConfig.name, tokenType);
742
+ if (!tokenConfig) {
743
+ const fallbackConfig = chainConfig.usdc;
744
+ if (!fallbackConfig) {
745
+ throw new X402Error(`Token ${tokenType} not supported on ${chainConfig.name}`, "INVALID_CONFIG");
746
+ }
747
+ return this.getBalanceWithConfig(chainConfig.rpcUrl, fallbackConfig);
748
+ }
749
+ return this.getBalanceWithConfig(chainConfig.rpcUrl, tokenConfig);
750
+ }
751
+ /**
752
+ * Internal helper to get balance using a token config
753
+ */
754
+ async getBalanceWithConfig(rpcUrl, tokenConfig) {
755
+ if (!this.address) {
756
+ return "0.00";
757
+ }
758
+ const publicProvider = new ethers.ethers.JsonRpcProvider(rpcUrl);
759
+ const tokenAbi = ["function balanceOf(address owner) view returns (uint256)"];
760
+ const tokenContract = new ethers.ethers.Contract(tokenConfig.address, tokenAbi, publicProvider);
561
761
  try {
562
- const balance = await usdcContract.balanceOf(this.address);
563
- const formatted = ethers.ethers.formatUnits(balance, chainConfig.usdc.decimals);
762
+ const balance = await tokenContract.balanceOf(this.address);
763
+ const formatted = ethers.ethers.formatUnits(balance, tokenConfig.decimals);
564
764
  return parseFloat(formatted).toFixed(2);
565
765
  } catch {
566
766
  return "0.00";
@@ -568,11 +768,27 @@ var EVMProvider = class {
568
768
  }
569
769
  /**
570
770
  * Create EVM payment (EIP-712 TransferWithAuthorization)
771
+ *
772
+ * Supports multi-token payments. If paymentInfo.tokenType is specified,
773
+ * it will use the appropriate token configuration. Defaults to USDC
774
+ * for backward compatibility.
775
+ *
776
+ * @param paymentInfo - Payment details including amount and recipient
777
+ * @param chainConfig - Chain configuration
778
+ * @returns JSON-encoded payment payload
571
779
  */
572
780
  async signPayment(paymentInfo, chainConfig) {
573
781
  if (!this.signer || !this.address) {
574
782
  throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
575
783
  }
784
+ const tokenType = paymentInfo.tokenType || "usdc";
785
+ const tokenConfig = getTokenConfig(chainConfig.name, tokenType);
786
+ if (!tokenConfig) {
787
+ throw new X402Error(
788
+ `Token ${tokenType} not supported on ${chainConfig.name}`,
789
+ "CHAIN_NOT_SUPPORTED"
790
+ );
791
+ }
576
792
  const recipient = paymentInfo.recipients?.evm || paymentInfo.recipient;
577
793
  const nonceBytes = new Uint8Array(32);
578
794
  if (typeof window !== "undefined" && window.crypto) {
@@ -587,10 +803,10 @@ var EVMProvider = class {
587
803
  const validityWindowSeconds = chainConfig.name === "base" ? 300 : 60;
588
804
  const validBefore = Math.floor(Date.now() / 1e3) + validityWindowSeconds;
589
805
  const domain = {
590
- name: chainConfig.usdc.name,
591
- version: chainConfig.usdc.version,
806
+ name: tokenConfig.name,
807
+ version: tokenConfig.version,
592
808
  chainId: chainConfig.chainId,
593
- verifyingContract: chainConfig.usdc.address
809
+ verifyingContract: tokenConfig.address
594
810
  };
595
811
  const types = {
596
812
  TransferWithAuthorization: [
@@ -602,7 +818,7 @@ var EVMProvider = class {
602
818
  { name: "nonce", type: "bytes32" }
603
819
  ]
604
820
  };
605
- const value = ethers.ethers.parseUnits(paymentInfo.amount, chainConfig.usdc.decimals);
821
+ const value = ethers.ethers.parseUnits(paymentInfo.amount, tokenConfig.decimals);
606
822
  const from = this.address;
607
823
  const to = ethers.ethers.getAddress(recipient);
608
824
  const message = {
@@ -638,7 +854,7 @@ var EVMProvider = class {
638
854
  r: sig.r,
639
855
  s: sig.s,
640
856
  chainId: chainConfig.chainId,
641
- token: chainConfig.usdc.address
857
+ token: tokenConfig.address
642
858
  };
643
859
  return JSON.stringify(payload);
644
860
  }