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.
- package/README.md +282 -15
- package/dist/adapters/index.d.mts +1 -1
- package/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +168 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +168 -0
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{index-MTBgC_SL.d.mts → index-BHwtdJrt.d.mts} +45 -4
- package/dist/{index-MTBgC_SL.d.ts → index-BHwtdJrt.d.ts} +45 -4
- package/dist/{index-Db8dWNam.d.ts → index-CkDdnSNx.d.mts} +33 -2
- package/dist/{index-D0N_SYpK.d.mts → index-UTj85ZDJ.d.ts} +33 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +210 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +207 -1
- package/dist/index.mjs.map +1 -1
- package/dist/providers/evm/index.d.mts +19 -3
- package/dist/providers/evm/index.d.ts +19 -3
- package/dist/providers/evm/index.js +228 -12
- package/dist/providers/evm/index.js.map +1 -1
- package/dist/providers/evm/index.mjs +228 -12
- package/dist/providers/evm/index.mjs.map +1 -1
- package/dist/providers/near/index.d.mts +1 -1
- package/dist/providers/near/index.d.ts +1 -1
- package/dist/providers/near/index.js.map +1 -1
- package/dist/providers/near/index.mjs.map +1 -1
- package/dist/providers/solana/index.d.mts +1 -1
- package/dist/providers/solana/index.d.ts +1 -1
- package/dist/providers/solana/index.js +168 -0
- package/dist/providers/solana/index.js.map +1 -1
- package/dist/providers/solana/index.mjs +168 -0
- package/dist/providers/solana/index.mjs.map +1 -1
- package/dist/providers/stellar/index.d.mts +1 -1
- package/dist/providers/stellar/index.d.ts +1 -1
- package/dist/providers/stellar/index.js.map +1 -1
- package/dist/providers/stellar/index.mjs.map +1 -1
- package/dist/react/index.d.mts +3 -3
- package/dist/react/index.d.ts +3 -3
- package/dist/react/index.js +168 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +168 -0
- package/dist/react/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +168 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +168 -0
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +5 -2
- package/src/chains/index.ts +255 -1
- package/src/index.ts +9 -0
- package/src/providers/evm/index.ts +64 -16
- 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
|
|
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
|
|
555
|
-
|
|
556
|
-
|
|
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
|
|
559
|
-
const formatted = ethers.formatUnits(balance,
|
|
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:
|
|
587
|
-
version:
|
|
802
|
+
name: tokenConfig.name,
|
|
803
|
+
version: tokenConfig.version,
|
|
588
804
|
chainId: chainConfig.chainId,
|
|
589
|
-
verifyingContract:
|
|
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,
|
|
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:
|
|
853
|
+
token: tokenConfig.address
|
|
638
854
|
};
|
|
639
855
|
return JSON.stringify(payload);
|
|
640
856
|
}
|