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
|
@@ -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
|
|
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
|
|
559
|
-
|
|
560
|
-
|
|
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
|
|
563
|
-
const formatted = ethers.ethers.formatUnits(balance,
|
|
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:
|
|
591
|
-
version:
|
|
806
|
+
name: tokenConfig.name,
|
|
807
|
+
version: tokenConfig.version,
|
|
592
808
|
chainId: chainConfig.chainId,
|
|
593
|
-
verifyingContract:
|
|
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,
|
|
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:
|
|
857
|
+
token: tokenConfig.address
|
|
642
858
|
};
|
|
643
859
|
return JSON.stringify(payload);
|
|
644
860
|
}
|