uvd-x402-sdk 2.0.1

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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +782 -0
  3. package/dist/index-BrBqP1I8.d.ts +199 -0
  4. package/dist/index-D6Sr4ARD.d.mts +429 -0
  5. package/dist/index-D6Sr4ARD.d.ts +429 -0
  6. package/dist/index-DJ4Cvrev.d.mts +199 -0
  7. package/dist/index.d.mts +3 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.js +1178 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/index.mjs +1146 -0
  12. package/dist/index.mjs.map +1 -0
  13. package/dist/providers/evm/index.d.mts +84 -0
  14. package/dist/providers/evm/index.d.ts +84 -0
  15. package/dist/providers/evm/index.js +740 -0
  16. package/dist/providers/evm/index.js.map +1 -0
  17. package/dist/providers/evm/index.mjs +735 -0
  18. package/dist/providers/evm/index.mjs.map +1 -0
  19. package/dist/providers/near/index.d.mts +99 -0
  20. package/dist/providers/near/index.d.ts +99 -0
  21. package/dist/providers/near/index.js +483 -0
  22. package/dist/providers/near/index.js.map +1 -0
  23. package/dist/providers/near/index.mjs +478 -0
  24. package/dist/providers/near/index.mjs.map +1 -0
  25. package/dist/providers/solana/index.d.mts +115 -0
  26. package/dist/providers/solana/index.d.ts +115 -0
  27. package/dist/providers/solana/index.js +771 -0
  28. package/dist/providers/solana/index.js.map +1 -0
  29. package/dist/providers/solana/index.mjs +765 -0
  30. package/dist/providers/solana/index.mjs.map +1 -0
  31. package/dist/providers/stellar/index.d.mts +67 -0
  32. package/dist/providers/stellar/index.d.ts +67 -0
  33. package/dist/providers/stellar/index.js +306 -0
  34. package/dist/providers/stellar/index.js.map +1 -0
  35. package/dist/providers/stellar/index.mjs +301 -0
  36. package/dist/providers/stellar/index.mjs.map +1 -0
  37. package/dist/react/index.d.mts +73 -0
  38. package/dist/react/index.d.ts +73 -0
  39. package/dist/react/index.js +1218 -0
  40. package/dist/react/index.js.map +1 -0
  41. package/dist/react/index.mjs +1211 -0
  42. package/dist/react/index.mjs.map +1 -0
  43. package/dist/utils/index.d.mts +103 -0
  44. package/dist/utils/index.d.ts +103 -0
  45. package/dist/utils/index.js +575 -0
  46. package/dist/utils/index.js.map +1 -0
  47. package/dist/utils/index.mjs +562 -0
  48. package/dist/utils/index.mjs.map +1 -0
  49. package/package.json +149 -0
  50. package/src/chains/index.ts +539 -0
  51. package/src/client/X402Client.ts +663 -0
  52. package/src/client/index.ts +1 -0
  53. package/src/index.ts +166 -0
  54. package/src/providers/evm/index.ts +394 -0
  55. package/src/providers/near/index.ts +664 -0
  56. package/src/providers/solana/index.ts +489 -0
  57. package/src/providers/stellar/index.ts +376 -0
  58. package/src/react/index.tsx +417 -0
  59. package/src/types/index.ts +561 -0
  60. package/src/utils/index.ts +20 -0
  61. package/src/utils/x402.ts +295 -0
@@ -0,0 +1,575 @@
1
+ 'use strict';
2
+
3
+ // src/types/index.ts
4
+ var CAIP2_IDENTIFIERS = {
5
+ // EVM chains
6
+ base: "eip155:8453",
7
+ ethereum: "eip155:1",
8
+ polygon: "eip155:137",
9
+ arbitrum: "eip155:42161",
10
+ optimism: "eip155:10",
11
+ avalanche: "eip155:43114",
12
+ celo: "eip155:42220",
13
+ hyperevm: "eip155:999",
14
+ unichain: "eip155:130",
15
+ monad: "eip155:143",
16
+ bsc: "eip155:56",
17
+ // SVM chains
18
+ solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
19
+ fogo: "svm:fogo",
20
+ // Stellar
21
+ stellar: "stellar:pubnet",
22
+ // NEAR
23
+ near: "near:mainnet"
24
+ };
25
+ var CAIP2_TO_CHAIN = Object.fromEntries(
26
+ Object.entries(CAIP2_IDENTIFIERS).map(([k, v]) => [v, k])
27
+ );
28
+
29
+ // src/chains/index.ts
30
+ var DEFAULT_FACILITATOR_URL = "https://facilitator.ultravioletadao.xyz";
31
+ var SUPPORTED_CHAINS = {
32
+ // ============================================================================
33
+ // EVM CHAINS (11 networks)
34
+ // ============================================================================
35
+ base: {
36
+ chainId: 8453,
37
+ chainIdHex: "0x2105",
38
+ name: "base",
39
+ displayName: "Base",
40
+ networkType: "evm",
41
+ rpcUrl: "https://mainnet.base.org",
42
+ explorerUrl: "https://basescan.org",
43
+ nativeCurrency: {
44
+ name: "Ethereum",
45
+ symbol: "ETH",
46
+ decimals: 18
47
+ },
48
+ usdc: {
49
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
50
+ decimals: 6,
51
+ name: "USD Coin",
52
+ version: "2"
53
+ },
54
+ x402: {
55
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
56
+ enabled: true
57
+ }
58
+ },
59
+ avalanche: {
60
+ chainId: 43114,
61
+ chainIdHex: "0xa86a",
62
+ name: "avalanche",
63
+ displayName: "Avalanche C-Chain",
64
+ networkType: "evm",
65
+ rpcUrl: "https://avalanche-c-chain-rpc.publicnode.com",
66
+ explorerUrl: "https://snowtrace.io",
67
+ nativeCurrency: {
68
+ name: "Avalanche",
69
+ symbol: "AVAX",
70
+ decimals: 18
71
+ },
72
+ usdc: {
73
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
74
+ decimals: 6,
75
+ name: "USD Coin",
76
+ version: "2"
77
+ },
78
+ x402: {
79
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
80
+ enabled: true
81
+ }
82
+ },
83
+ ethereum: {
84
+ chainId: 1,
85
+ chainIdHex: "0x1",
86
+ name: "ethereum",
87
+ displayName: "Ethereum",
88
+ networkType: "evm",
89
+ rpcUrl: "https://eth.llamarpc.com",
90
+ explorerUrl: "https://etherscan.io",
91
+ nativeCurrency: {
92
+ name: "Ethereum",
93
+ symbol: "ETH",
94
+ decimals: 18
95
+ },
96
+ usdc: {
97
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
98
+ decimals: 6,
99
+ name: "USD Coin",
100
+ version: "2"
101
+ },
102
+ x402: {
103
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
104
+ enabled: true
105
+ }
106
+ },
107
+ polygon: {
108
+ chainId: 137,
109
+ chainIdHex: "0x89",
110
+ name: "polygon",
111
+ displayName: "Polygon",
112
+ networkType: "evm",
113
+ rpcUrl: "https://polygon-rpc.com",
114
+ explorerUrl: "https://polygonscan.com",
115
+ nativeCurrency: {
116
+ name: "Polygon",
117
+ symbol: "POL",
118
+ decimals: 18
119
+ },
120
+ usdc: {
121
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
122
+ decimals: 6,
123
+ name: "USD Coin",
124
+ version: "2"
125
+ },
126
+ x402: {
127
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
128
+ enabled: true
129
+ }
130
+ },
131
+ arbitrum: {
132
+ chainId: 42161,
133
+ chainIdHex: "0xa4b1",
134
+ name: "arbitrum",
135
+ displayName: "Arbitrum One",
136
+ networkType: "evm",
137
+ rpcUrl: "https://arb1.arbitrum.io/rpc",
138
+ explorerUrl: "https://arbiscan.io",
139
+ nativeCurrency: {
140
+ name: "Ethereum",
141
+ symbol: "ETH",
142
+ decimals: 18
143
+ },
144
+ usdc: {
145
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
146
+ decimals: 6,
147
+ name: "USD Coin",
148
+ version: "2"
149
+ },
150
+ x402: {
151
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
152
+ enabled: true
153
+ }
154
+ },
155
+ optimism: {
156
+ chainId: 10,
157
+ chainIdHex: "0xa",
158
+ name: "optimism",
159
+ displayName: "Optimism",
160
+ networkType: "evm",
161
+ rpcUrl: "https://mainnet.optimism.io",
162
+ explorerUrl: "https://optimistic.etherscan.io",
163
+ nativeCurrency: {
164
+ name: "Ethereum",
165
+ symbol: "ETH",
166
+ decimals: 18
167
+ },
168
+ usdc: {
169
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
170
+ decimals: 6,
171
+ name: "USD Coin",
172
+ version: "2"
173
+ },
174
+ x402: {
175
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
176
+ enabled: true
177
+ }
178
+ },
179
+ celo: {
180
+ chainId: 42220,
181
+ chainIdHex: "0xa4ec",
182
+ name: "celo",
183
+ displayName: "Celo",
184
+ networkType: "evm",
185
+ rpcUrl: "https://forno.celo.org",
186
+ explorerUrl: "https://celoscan.io",
187
+ nativeCurrency: {
188
+ name: "Celo",
189
+ symbol: "CELO",
190
+ decimals: 18
191
+ },
192
+ usdc: {
193
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
194
+ decimals: 6,
195
+ name: "USDC",
196
+ // Celo uses "USDC" not "USD Coin" for EIP-712
197
+ version: "2"
198
+ },
199
+ x402: {
200
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
201
+ enabled: true
202
+ }
203
+ },
204
+ hyperevm: {
205
+ chainId: 999,
206
+ chainIdHex: "0x3e7",
207
+ name: "hyperevm",
208
+ displayName: "HyperEVM",
209
+ networkType: "evm",
210
+ rpcUrl: "https://rpc.hyperliquid.xyz/evm",
211
+ explorerUrl: "https://hyperevmscan.io",
212
+ nativeCurrency: {
213
+ name: "Ethereum",
214
+ symbol: "ETH",
215
+ decimals: 18
216
+ },
217
+ usdc: {
218
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
219
+ decimals: 6,
220
+ name: "USDC",
221
+ // HyperEVM uses "USDC" not "USD Coin"
222
+ version: "2"
223
+ },
224
+ x402: {
225
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
226
+ enabled: true
227
+ }
228
+ },
229
+ unichain: {
230
+ chainId: 130,
231
+ chainIdHex: "0x82",
232
+ name: "unichain",
233
+ displayName: "Unichain",
234
+ networkType: "evm",
235
+ rpcUrl: "https://unichain-rpc.publicnode.com",
236
+ explorerUrl: "https://uniscan.xyz",
237
+ nativeCurrency: {
238
+ name: "Ethereum",
239
+ symbol: "ETH",
240
+ decimals: 18
241
+ },
242
+ usdc: {
243
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
244
+ decimals: 6,
245
+ name: "USDC",
246
+ // Unichain uses "USDC" not "USD Coin"
247
+ version: "2"
248
+ },
249
+ x402: {
250
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
251
+ enabled: true
252
+ }
253
+ },
254
+ monad: {
255
+ chainId: 143,
256
+ chainIdHex: "0x8f",
257
+ name: "monad",
258
+ displayName: "Monad",
259
+ networkType: "evm",
260
+ rpcUrl: "https://rpc.monad.xyz",
261
+ explorerUrl: "https://monad.socialscan.io",
262
+ nativeCurrency: {
263
+ name: "Monad",
264
+ symbol: "MON",
265
+ decimals: 18
266
+ },
267
+ usdc: {
268
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
269
+ decimals: 6,
270
+ name: "USDC",
271
+ // Monad uses "USDC" not "USD Coin"
272
+ version: "2"
273
+ },
274
+ x402: {
275
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
276
+ enabled: true
277
+ }
278
+ },
279
+ // BSC disabled: USDC doesn't support ERC-3009 transferWithAuthorization
280
+ bsc: {
281
+ chainId: 56,
282
+ chainIdHex: "0x38",
283
+ name: "bsc",
284
+ displayName: "BNB Smart Chain",
285
+ networkType: "evm",
286
+ rpcUrl: "https://binance.llamarpc.com",
287
+ explorerUrl: "https://bscscan.com",
288
+ nativeCurrency: {
289
+ name: "Binance Coin",
290
+ symbol: "BNB",
291
+ decimals: 18
292
+ },
293
+ usdc: {
294
+ address: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
295
+ decimals: 18,
296
+ // BSC USDC uses 18 decimals
297
+ name: "USD Coin",
298
+ version: "2"
299
+ },
300
+ x402: {
301
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
302
+ enabled: false
303
+ // Disabled: BSC USDC doesn't support ERC-3009
304
+ }
305
+ },
306
+ // ============================================================================
307
+ // SVM CHAINS (2 networks) - Solana Virtual Machine
308
+ // ============================================================================
309
+ solana: {
310
+ chainId: 0,
311
+ // Non-EVM
312
+ chainIdHex: "0x0",
313
+ name: "solana",
314
+ displayName: "Solana",
315
+ networkType: "svm",
316
+ rpcUrl: "https://api.mainnet-beta.solana.com",
317
+ explorerUrl: "https://solscan.io",
318
+ nativeCurrency: {
319
+ name: "Solana",
320
+ symbol: "SOL",
321
+ decimals: 9
322
+ },
323
+ usdc: {
324
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
325
+ // USDC SPL token mint
326
+ decimals: 6,
327
+ name: "USD Coin",
328
+ version: "1"
329
+ },
330
+ x402: {
331
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
332
+ enabled: true
333
+ }
334
+ },
335
+ fogo: {
336
+ chainId: 0,
337
+ // Non-EVM (SVM)
338
+ chainIdHex: "0x0",
339
+ name: "fogo",
340
+ displayName: "Fogo",
341
+ networkType: "svm",
342
+ rpcUrl: "https://rpc.fogo.nightly.app/",
343
+ explorerUrl: "https://explorer.fogo.nightly.app",
344
+ nativeCurrency: {
345
+ name: "Fogo",
346
+ symbol: "FOGO",
347
+ decimals: 9
348
+ },
349
+ usdc: {
350
+ address: "uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG",
351
+ // Fogo USDC mint
352
+ decimals: 6,
353
+ name: "USDC",
354
+ version: "1"
355
+ },
356
+ x402: {
357
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
358
+ enabled: true
359
+ }
360
+ },
361
+ // ============================================================================
362
+ // STELLAR (1 network)
363
+ // ============================================================================
364
+ stellar: {
365
+ chainId: 0,
366
+ // Non-EVM
367
+ chainIdHex: "0x0",
368
+ name: "stellar",
369
+ displayName: "Stellar",
370
+ networkType: "stellar",
371
+ rpcUrl: "https://horizon.stellar.org",
372
+ explorerUrl: "https://stellar.expert/explorer/public",
373
+ nativeCurrency: {
374
+ name: "Lumens",
375
+ symbol: "XLM",
376
+ decimals: 7
377
+ // Stellar uses 7 decimals (stroops)
378
+ },
379
+ usdc: {
380
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
381
+ // Soroban Asset Contract
382
+ decimals: 7,
383
+ // Stellar USDC uses 7 decimals
384
+ name: "USDC",
385
+ version: "1"
386
+ },
387
+ x402: {
388
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
389
+ enabled: true
390
+ }
391
+ },
392
+ // ============================================================================
393
+ // NEAR (1 network) - Uses NEP-366 meta-transactions
394
+ // ============================================================================
395
+ near: {
396
+ chainId: 0,
397
+ // Non-EVM
398
+ chainIdHex: "0x0",
399
+ name: "near",
400
+ displayName: "NEAR Protocol",
401
+ networkType: "near",
402
+ rpcUrl: "https://rpc.mainnet.near.org",
403
+ explorerUrl: "https://nearblocks.io",
404
+ nativeCurrency: {
405
+ name: "NEAR",
406
+ symbol: "NEAR",
407
+ decimals: 24
408
+ // NEAR uses 24 decimals (yoctoNEAR)
409
+ },
410
+ usdc: {
411
+ address: "17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1",
412
+ // Native Circle USDC
413
+ decimals: 6,
414
+ name: "USDC",
415
+ version: "1"
416
+ },
417
+ x402: {
418
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
419
+ enabled: true
420
+ // NEP-366 meta-transactions supported
421
+ }
422
+ }
423
+ };
424
+ function getChainByName(name) {
425
+ return SUPPORTED_CHAINS[name.toLowerCase()];
426
+ }
427
+
428
+ // src/utils/x402.ts
429
+ function detectX402Version(data) {
430
+ if (typeof data !== "object" || data === null) {
431
+ return 1;
432
+ }
433
+ const obj = data;
434
+ if (obj.x402Version === 2) {
435
+ return 2;
436
+ }
437
+ if (obj.accepts && Array.isArray(obj.accepts)) {
438
+ return 2;
439
+ }
440
+ if (typeof obj.network === "string") {
441
+ if (obj.network.includes(":")) {
442
+ return 2;
443
+ }
444
+ }
445
+ return 1;
446
+ }
447
+ function chainToCAIP2(chainName) {
448
+ const caip2 = CAIP2_IDENTIFIERS[chainName.toLowerCase()];
449
+ if (caip2) {
450
+ return caip2;
451
+ }
452
+ const chain = getChainByName(chainName);
453
+ if (chain) {
454
+ if (chain.networkType === "evm") {
455
+ return `eip155:${chain.chainId}`;
456
+ }
457
+ return `${chain.networkType}:${chainName}`;
458
+ }
459
+ return chainName;
460
+ }
461
+ function caip2ToChain(caip2) {
462
+ if (CAIP2_TO_CHAIN[caip2]) {
463
+ return CAIP2_TO_CHAIN[caip2];
464
+ }
465
+ const match = caip2.match(/^eip155:(\d+)$/);
466
+ if (match) {
467
+ const chainId = parseInt(match[1], 10);
468
+ for (const [name, _config] of Object.entries(CAIP2_IDENTIFIERS)) {
469
+ const chain = getChainByName(name);
470
+ if (chain?.chainId === chainId) {
471
+ return name;
472
+ }
473
+ }
474
+ }
475
+ const parts = caip2.split(":");
476
+ if (parts.length === 2) {
477
+ const networkName = parts[1];
478
+ if (getChainByName(networkName)) {
479
+ return networkName;
480
+ }
481
+ }
482
+ return null;
483
+ }
484
+ function parseNetworkIdentifier(network) {
485
+ if (network.includes(":")) {
486
+ return caip2ToChain(network) || network;
487
+ }
488
+ return network.toLowerCase();
489
+ }
490
+ function encodeX402Header(header) {
491
+ return btoa(JSON.stringify(header));
492
+ }
493
+ function decodeX402Header(encoded) {
494
+ const json = atob(encoded);
495
+ return JSON.parse(json);
496
+ }
497
+ function createX402V1Header(network, payload) {
498
+ return {
499
+ x402Version: 1,
500
+ scheme: "exact",
501
+ network,
502
+ payload
503
+ };
504
+ }
505
+ function createX402V2Header(network, payload, accepts) {
506
+ const header = {
507
+ x402Version: 2,
508
+ scheme: "exact",
509
+ network: network.includes(":") ? network : chainToCAIP2(network),
510
+ payload
511
+ };
512
+ if (accepts && accepts.length > 0) {
513
+ header.accepts = accepts;
514
+ }
515
+ return header;
516
+ }
517
+ function createX402Header(chainConfig, payload, version = "auto") {
518
+ const effectiveVersion = version === "auto" ? 1 : version;
519
+ if (effectiveVersion === 2) {
520
+ return createX402V2Header(chainConfig.name, payload);
521
+ }
522
+ return createX402V1Header(chainConfig.name, payload);
523
+ }
524
+ function generatePaymentOptions(chainConfigs, amount, facilitator) {
525
+ return chainConfigs.filter((chain) => chain.x402.enabled).map((chain) => {
526
+ const atomicAmount = Math.floor(
527
+ parseFloat(amount) * Math.pow(10, chain.usdc.decimals)
528
+ ).toString();
529
+ return {
530
+ network: chainToCAIP2(chain.name),
531
+ asset: chain.usdc.address,
532
+ amount: atomicAmount,
533
+ facilitator: facilitator || chain.x402.facilitatorUrl
534
+ };
535
+ });
536
+ }
537
+ function isCAIP2Format(network) {
538
+ return network.includes(":");
539
+ }
540
+ function convertX402Header(header, targetVersion) {
541
+ if (header.x402Version === targetVersion) {
542
+ return header;
543
+ }
544
+ if (targetVersion === 2) {
545
+ return {
546
+ x402Version: 2,
547
+ scheme: "exact",
548
+ network: chainToCAIP2(header.network),
549
+ payload: header.payload
550
+ };
551
+ } else {
552
+ const chainName = isCAIP2Format(header.network) ? caip2ToChain(header.network) || header.network : header.network;
553
+ return {
554
+ x402Version: 1,
555
+ scheme: "exact",
556
+ network: chainName,
557
+ payload: header.payload
558
+ };
559
+ }
560
+ }
561
+
562
+ exports.caip2ToChain = caip2ToChain;
563
+ exports.chainToCAIP2 = chainToCAIP2;
564
+ exports.convertX402Header = convertX402Header;
565
+ exports.createX402Header = createX402Header;
566
+ exports.createX402V1Header = createX402V1Header;
567
+ exports.createX402V2Header = createX402V2Header;
568
+ exports.decodeX402Header = decodeX402Header;
569
+ exports.detectX402Version = detectX402Version;
570
+ exports.encodeX402Header = encodeX402Header;
571
+ exports.generatePaymentOptions = generatePaymentOptions;
572
+ exports.isCAIP2Format = isCAIP2Format;
573
+ exports.parseNetworkIdentifier = parseNetworkIdentifier;
574
+ //# sourceMappingURL=index.js.map
575
+ //# sourceMappingURL=index.js.map