uvd-x402-sdk 2.15.2 → 2.16.2

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 (77) hide show
  1. package/README.md +247 -6
  2. package/dist/adapters/index.d.mts +1 -1
  3. package/dist/adapters/index.d.ts +1 -1
  4. package/dist/adapters/index.js +82 -1
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/adapters/index.mjs +82 -1
  7. package/dist/adapters/index.mjs.map +1 -1
  8. package/dist/backend/index.d.mts +1 -1
  9. package/dist/backend/index.d.ts +1 -1
  10. package/dist/backend/index.js +82 -1
  11. package/dist/backend/index.js.map +1 -1
  12. package/dist/backend/index.mjs +82 -1
  13. package/dist/backend/index.mjs.map +1 -1
  14. package/dist/{index-Cwi_VM05.d.ts → index-B2cQzyKa.d.ts} +10 -2
  15. package/dist/{index-BYIugZlE.d.mts → index-BE5cH7oS.d.mts} +48 -5
  16. package/dist/{index-BYIugZlE.d.ts → index-BE5cH7oS.d.ts} +48 -5
  17. package/dist/{index-D3PO3jLW.d.mts → index-oE4dj05k.d.mts} +10 -2
  18. package/dist/index.d.mts +11 -2
  19. package/dist/index.d.ts +11 -2
  20. package/dist/index.js +111 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +110 -3
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/providers/algorand/index.d.mts +1 -1
  25. package/dist/providers/algorand/index.d.ts +1 -1
  26. package/dist/providers/algorand/index.js +95 -2
  27. package/dist/providers/algorand/index.js.map +1 -1
  28. package/dist/providers/algorand/index.mjs +95 -2
  29. package/dist/providers/algorand/index.mjs.map +1 -1
  30. package/dist/providers/evm/index.d.mts +1 -1
  31. package/dist/providers/evm/index.d.ts +1 -1
  32. package/dist/providers/evm/index.js +82 -1
  33. package/dist/providers/evm/index.js.map +1 -1
  34. package/dist/providers/evm/index.mjs +82 -1
  35. package/dist/providers/evm/index.mjs.map +1 -1
  36. package/dist/providers/near/index.d.mts +1 -1
  37. package/dist/providers/near/index.d.ts +1 -1
  38. package/dist/providers/near/index.js +82 -1
  39. package/dist/providers/near/index.js.map +1 -1
  40. package/dist/providers/near/index.mjs +82 -1
  41. package/dist/providers/near/index.mjs.map +1 -1
  42. package/dist/providers/solana/index.d.mts +1 -1
  43. package/dist/providers/solana/index.d.ts +1 -1
  44. package/dist/providers/solana/index.js +82 -1
  45. package/dist/providers/solana/index.js.map +1 -1
  46. package/dist/providers/solana/index.mjs +82 -1
  47. package/dist/providers/solana/index.mjs.map +1 -1
  48. package/dist/providers/stellar/index.d.mts +1 -1
  49. package/dist/providers/stellar/index.d.ts +1 -1
  50. package/dist/providers/stellar/index.js +82 -1
  51. package/dist/providers/stellar/index.js.map +1 -1
  52. package/dist/providers/stellar/index.mjs +82 -1
  53. package/dist/providers/stellar/index.mjs.map +1 -1
  54. package/dist/providers/sui/index.d.mts +105 -0
  55. package/dist/providers/sui/index.d.ts +105 -0
  56. package/dist/providers/sui/index.js +1027 -0
  57. package/dist/providers/sui/index.js.map +1 -0
  58. package/dist/providers/sui/index.mjs +1022 -0
  59. package/dist/providers/sui/index.mjs.map +1 -0
  60. package/dist/react/index.d.mts +3 -3
  61. package/dist/react/index.d.ts +3 -3
  62. package/dist/react/index.js +82 -1
  63. package/dist/react/index.js.map +1 -1
  64. package/dist/react/index.mjs +82 -1
  65. package/dist/react/index.mjs.map +1 -1
  66. package/dist/utils/index.d.mts +1 -1
  67. package/dist/utils/index.d.ts +1 -1
  68. package/dist/utils/index.js +82 -1
  69. package/dist/utils/index.js.map +1 -1
  70. package/dist/utils/index.mjs +82 -1
  71. package/dist/utils/index.mjs.map +1 -1
  72. package/package.json +15 -4
  73. package/src/chains/index.ts +98 -0
  74. package/src/facilitator.ts +18 -0
  75. package/src/index.ts +20 -1
  76. package/src/providers/sui/index.ts +431 -0
  77. package/src/types/index.ts +55 -3
@@ -0,0 +1,1027 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ // src/types/index.ts
6
+ var CAIP2_IDENTIFIERS = {
7
+ // EVM chains
8
+ base: "eip155:8453",
9
+ ethereum: "eip155:1",
10
+ polygon: "eip155:137",
11
+ arbitrum: "eip155:42161",
12
+ optimism: "eip155:10",
13
+ avalanche: "eip155:43114",
14
+ celo: "eip155:42220",
15
+ hyperevm: "eip155:999",
16
+ unichain: "eip155:130",
17
+ monad: "eip155:143",
18
+ // SVM chains
19
+ solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
20
+ fogo: "svm:fogo",
21
+ // Stellar
22
+ stellar: "stellar:pubnet",
23
+ // NEAR
24
+ near: "near:mainnet",
25
+ // Algorand
26
+ algorand: "algorand:mainnet",
27
+ "algorand-testnet": "algorand:testnet",
28
+ // Sui
29
+ sui: "sui:mainnet",
30
+ "sui-testnet": "sui:testnet"
31
+ };
32
+ Object.fromEntries(
33
+ Object.entries(CAIP2_IDENTIFIERS).map(([k, v]) => [v, k])
34
+ );
35
+ var X402Error = class _X402Error extends Error {
36
+ code;
37
+ details;
38
+ constructor(message, code, details) {
39
+ super(message);
40
+ this.name = "X402Error";
41
+ this.code = code;
42
+ this.details = details;
43
+ if (Error.captureStackTrace) {
44
+ Error.captureStackTrace(this, _X402Error);
45
+ }
46
+ }
47
+ };
48
+
49
+ // src/chains/index.ts
50
+ var DEFAULT_FACILITATOR_URL = "https://facilitator.ultravioletadao.xyz";
51
+ var SUPPORTED_CHAINS = {
52
+ // ============================================================================
53
+ // EVM CHAINS (10 networks)
54
+ // ============================================================================
55
+ base: {
56
+ chainId: 8453,
57
+ chainIdHex: "0x2105",
58
+ name: "base",
59
+ displayName: "Base",
60
+ networkType: "evm",
61
+ rpcUrl: "https://mainnet.base.org",
62
+ explorerUrl: "https://basescan.org",
63
+ nativeCurrency: {
64
+ name: "Ethereum",
65
+ symbol: "ETH",
66
+ decimals: 18
67
+ },
68
+ usdc: {
69
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
70
+ decimals: 6,
71
+ name: "USD Coin",
72
+ version: "2"
73
+ },
74
+ tokens: {
75
+ usdc: {
76
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
77
+ decimals: 6,
78
+ name: "USD Coin",
79
+ version: "2"
80
+ },
81
+ eurc: {
82
+ address: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42",
83
+ decimals: 6,
84
+ name: "EURC",
85
+ version: "2"
86
+ }
87
+ },
88
+ x402: {
89
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
90
+ enabled: true
91
+ }
92
+ },
93
+ avalanche: {
94
+ chainId: 43114,
95
+ chainIdHex: "0xa86a",
96
+ name: "avalanche",
97
+ displayName: "Avalanche C-Chain",
98
+ networkType: "evm",
99
+ rpcUrl: "https://avalanche-c-chain-rpc.publicnode.com",
100
+ explorerUrl: "https://snowtrace.io",
101
+ nativeCurrency: {
102
+ name: "Avalanche",
103
+ symbol: "AVAX",
104
+ decimals: 18
105
+ },
106
+ usdc: {
107
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
108
+ decimals: 6,
109
+ name: "USD Coin",
110
+ version: "2"
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 Dollar",
129
+ version: "1"
130
+ }
131
+ },
132
+ x402: {
133
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
134
+ enabled: true
135
+ }
136
+ },
137
+ ethereum: {
138
+ chainId: 1,
139
+ chainIdHex: "0x1",
140
+ name: "ethereum",
141
+ displayName: "Ethereum",
142
+ networkType: "evm",
143
+ rpcUrl: "https://eth.llamarpc.com",
144
+ explorerUrl: "https://etherscan.io",
145
+ nativeCurrency: {
146
+ name: "Ethereum",
147
+ symbol: "ETH",
148
+ decimals: 18
149
+ },
150
+ usdc: {
151
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
152
+ decimals: 6,
153
+ name: "USD Coin",
154
+ version: "2"
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: "Euro Coin",
167
+ version: "2"
168
+ },
169
+ ausd: {
170
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
171
+ decimals: 6,
172
+ name: "Agora Dollar",
173
+ version: "1"
174
+ },
175
+ pyusd: {
176
+ address: "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8",
177
+ decimals: 6,
178
+ name: "PayPal USD",
179
+ version: "1"
180
+ }
181
+ },
182
+ x402: {
183
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
184
+ enabled: true
185
+ }
186
+ },
187
+ polygon: {
188
+ chainId: 137,
189
+ chainIdHex: "0x89",
190
+ name: "polygon",
191
+ displayName: "Polygon",
192
+ networkType: "evm",
193
+ rpcUrl: "https://polygon-rpc.com",
194
+ explorerUrl: "https://polygonscan.com",
195
+ nativeCurrency: {
196
+ name: "Polygon",
197
+ symbol: "POL",
198
+ decimals: 18
199
+ },
200
+ usdc: {
201
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
202
+ decimals: 6,
203
+ name: "USD Coin",
204
+ version: "2"
205
+ },
206
+ tokens: {
207
+ usdc: {
208
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
209
+ decimals: 6,
210
+ name: "USD Coin",
211
+ version: "2"
212
+ },
213
+ ausd: {
214
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
215
+ decimals: 6,
216
+ name: "Agora Dollar",
217
+ version: "1"
218
+ }
219
+ },
220
+ x402: {
221
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
222
+ enabled: true
223
+ }
224
+ },
225
+ arbitrum: {
226
+ chainId: 42161,
227
+ chainIdHex: "0xa4b1",
228
+ name: "arbitrum",
229
+ displayName: "Arbitrum One",
230
+ networkType: "evm",
231
+ rpcUrl: "https://arb1.arbitrum.io/rpc",
232
+ explorerUrl: "https://arbiscan.io",
233
+ nativeCurrency: {
234
+ name: "Ethereum",
235
+ symbol: "ETH",
236
+ decimals: 18
237
+ },
238
+ usdc: {
239
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
240
+ decimals: 6,
241
+ name: "USD Coin",
242
+ version: "2"
243
+ },
244
+ tokens: {
245
+ usdc: {
246
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
247
+ decimals: 6,
248
+ name: "USD Coin",
249
+ version: "2"
250
+ },
251
+ ausd: {
252
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
253
+ decimals: 6,
254
+ name: "Agora Dollar",
255
+ version: "1"
256
+ },
257
+ usdt: {
258
+ address: "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
259
+ decimals: 6,
260
+ name: "USD\u20AE0",
261
+ version: "1"
262
+ }
263
+ },
264
+ x402: {
265
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
266
+ enabled: true
267
+ }
268
+ },
269
+ optimism: {
270
+ chainId: 10,
271
+ chainIdHex: "0xa",
272
+ name: "optimism",
273
+ displayName: "Optimism",
274
+ networkType: "evm",
275
+ rpcUrl: "https://mainnet.optimism.io",
276
+ explorerUrl: "https://optimistic.etherscan.io",
277
+ nativeCurrency: {
278
+ name: "Ethereum",
279
+ symbol: "ETH",
280
+ decimals: 18
281
+ },
282
+ usdc: {
283
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
284
+ decimals: 6,
285
+ name: "USD Coin",
286
+ version: "2"
287
+ },
288
+ tokens: {
289
+ usdc: {
290
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
291
+ decimals: 6,
292
+ name: "USD Coin",
293
+ version: "2"
294
+ },
295
+ usdt: {
296
+ address: "0x01bff41798a0bcf287b996046ca68b395dbc1071",
297
+ decimals: 6,
298
+ name: "USD\u20AE0",
299
+ version: "1"
300
+ }
301
+ },
302
+ x402: {
303
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
304
+ enabled: true
305
+ }
306
+ },
307
+ celo: {
308
+ chainId: 42220,
309
+ chainIdHex: "0xa4ec",
310
+ name: "celo",
311
+ displayName: "Celo",
312
+ networkType: "evm",
313
+ rpcUrl: "https://forno.celo.org",
314
+ explorerUrl: "https://celoscan.io",
315
+ nativeCurrency: {
316
+ name: "Celo",
317
+ symbol: "CELO",
318
+ decimals: 18
319
+ },
320
+ usdc: {
321
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
322
+ decimals: 6,
323
+ name: "USDC",
324
+ // Celo uses "USDC" not "USD Coin" for EIP-712
325
+ version: "2"
326
+ },
327
+ tokens: {
328
+ usdc: {
329
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
330
+ decimals: 6,
331
+ name: "USDC",
332
+ // Celo uses "USDC" not "USD Coin" for EIP-712
333
+ version: "2"
334
+ },
335
+ usdt: {
336
+ address: "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
337
+ decimals: 6,
338
+ name: "Tether USD",
339
+ // Celo USDT uses "Tether USD" for EIP-712
340
+ version: "1"
341
+ }
342
+ },
343
+ x402: {
344
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
345
+ enabled: true
346
+ }
347
+ },
348
+ hyperevm: {
349
+ chainId: 999,
350
+ chainIdHex: "0x3e7",
351
+ name: "hyperevm",
352
+ displayName: "HyperEVM",
353
+ networkType: "evm",
354
+ rpcUrl: "https://rpc.hyperliquid.xyz/evm",
355
+ explorerUrl: "https://hyperevmscan.io",
356
+ nativeCurrency: {
357
+ name: "Ethereum",
358
+ symbol: "ETH",
359
+ decimals: 18
360
+ },
361
+ usdc: {
362
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
363
+ decimals: 6,
364
+ name: "USDC",
365
+ // HyperEVM uses "USDC" not "USD Coin"
366
+ version: "2"
367
+ },
368
+ tokens: {
369
+ usdc: {
370
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
371
+ decimals: 6,
372
+ name: "USDC",
373
+ // HyperEVM uses "USDC" not "USD Coin"
374
+ version: "2"
375
+ }
376
+ },
377
+ x402: {
378
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
379
+ enabled: true
380
+ }
381
+ },
382
+ unichain: {
383
+ chainId: 130,
384
+ chainIdHex: "0x82",
385
+ name: "unichain",
386
+ displayName: "Unichain",
387
+ networkType: "evm",
388
+ rpcUrl: "https://unichain-rpc.publicnode.com",
389
+ explorerUrl: "https://uniscan.xyz",
390
+ nativeCurrency: {
391
+ name: "Ethereum",
392
+ symbol: "ETH",
393
+ decimals: 18
394
+ },
395
+ usdc: {
396
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
397
+ decimals: 6,
398
+ name: "USDC",
399
+ // Unichain uses "USDC" not "USD Coin"
400
+ version: "2"
401
+ },
402
+ tokens: {
403
+ usdc: {
404
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
405
+ decimals: 6,
406
+ name: "USDC",
407
+ // Unichain uses "USDC" not "USD Coin"
408
+ version: "2"
409
+ }
410
+ },
411
+ x402: {
412
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
413
+ enabled: true
414
+ }
415
+ },
416
+ monad: {
417
+ chainId: 143,
418
+ chainIdHex: "0x8f",
419
+ name: "monad",
420
+ displayName: "Monad",
421
+ networkType: "evm",
422
+ rpcUrl: "https://rpc.monad.xyz",
423
+ explorerUrl: "https://monad.socialscan.io",
424
+ nativeCurrency: {
425
+ name: "Monad",
426
+ symbol: "MON",
427
+ decimals: 18
428
+ },
429
+ usdc: {
430
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
431
+ decimals: 6,
432
+ name: "USDC",
433
+ // Monad uses "USDC" not "USD Coin"
434
+ version: "2"
435
+ },
436
+ tokens: {
437
+ usdc: {
438
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
439
+ decimals: 6,
440
+ name: "USDC",
441
+ // Monad uses "USDC" not "USD Coin"
442
+ version: "2"
443
+ },
444
+ ausd: {
445
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
446
+ decimals: 6,
447
+ name: "Agora Dollar",
448
+ version: "1"
449
+ }
450
+ },
451
+ x402: {
452
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
453
+ enabled: true
454
+ }
455
+ },
456
+ // ============================================================================
457
+ // SVM CHAINS (2 networks) - Solana Virtual Machine
458
+ // ============================================================================
459
+ solana: {
460
+ chainId: 0,
461
+ // Non-EVM
462
+ chainIdHex: "0x0",
463
+ name: "solana",
464
+ displayName: "Solana",
465
+ networkType: "svm",
466
+ rpcUrl: "https://api.mainnet-beta.solana.com",
467
+ explorerUrl: "https://solscan.io",
468
+ nativeCurrency: {
469
+ name: "Solana",
470
+ symbol: "SOL",
471
+ decimals: 9
472
+ },
473
+ usdc: {
474
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
475
+ // USDC SPL token mint
476
+ decimals: 6,
477
+ name: "USD Coin",
478
+ version: "1"
479
+ },
480
+ tokens: {
481
+ usdc: {
482
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
483
+ // USDC SPL token mint
484
+ decimals: 6,
485
+ name: "USD Coin",
486
+ version: "1"
487
+ },
488
+ ausd: {
489
+ address: "AUSD1jCcCyPLybk1YnvPWsHQSrZ46dxwoMniN4N2UEB9",
490
+ // AUSD Token2022 mint
491
+ decimals: 6,
492
+ name: "Agora Dollar",
493
+ version: "1"
494
+ }
495
+ },
496
+ x402: {
497
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
498
+ enabled: true
499
+ }
500
+ },
501
+ fogo: {
502
+ chainId: 0,
503
+ // Non-EVM (SVM)
504
+ chainIdHex: "0x0",
505
+ name: "fogo",
506
+ displayName: "Fogo",
507
+ networkType: "svm",
508
+ rpcUrl: "https://rpc.fogo.nightly.app/",
509
+ explorerUrl: "https://explorer.fogo.nightly.app",
510
+ nativeCurrency: {
511
+ name: "Fogo",
512
+ symbol: "FOGO",
513
+ decimals: 9
514
+ },
515
+ usdc: {
516
+ address: "uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG",
517
+ // Fogo USDC mint
518
+ decimals: 6,
519
+ name: "USDC",
520
+ version: "1"
521
+ },
522
+ x402: {
523
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
524
+ enabled: true
525
+ }
526
+ },
527
+ // ============================================================================
528
+ // STELLAR (1 network)
529
+ // ============================================================================
530
+ stellar: {
531
+ chainId: 0,
532
+ // Non-EVM
533
+ chainIdHex: "0x0",
534
+ name: "stellar",
535
+ displayName: "Stellar",
536
+ networkType: "stellar",
537
+ rpcUrl: "https://horizon.stellar.org",
538
+ explorerUrl: "https://stellar.expert/explorer/public",
539
+ nativeCurrency: {
540
+ name: "Lumens",
541
+ symbol: "XLM",
542
+ decimals: 7
543
+ // Stellar uses 7 decimals (stroops)
544
+ },
545
+ usdc: {
546
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
547
+ // Soroban Asset Contract
548
+ decimals: 7,
549
+ // Stellar USDC uses 7 decimals
550
+ name: "USDC",
551
+ version: "1"
552
+ },
553
+ x402: {
554
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
555
+ enabled: true
556
+ }
557
+ },
558
+ // ============================================================================
559
+ // NEAR (1 network) - Uses NEP-366 meta-transactions
560
+ // ============================================================================
561
+ near: {
562
+ chainId: 0,
563
+ // Non-EVM
564
+ chainIdHex: "0x0",
565
+ name: "near",
566
+ displayName: "NEAR Protocol",
567
+ networkType: "near",
568
+ rpcUrl: "https://rpc.mainnet.near.org",
569
+ explorerUrl: "https://nearblocks.io",
570
+ nativeCurrency: {
571
+ name: "NEAR",
572
+ symbol: "NEAR",
573
+ decimals: 24
574
+ // NEAR uses 24 decimals (yoctoNEAR)
575
+ },
576
+ usdc: {
577
+ address: "17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1",
578
+ // Native Circle USDC
579
+ decimals: 6,
580
+ name: "USDC",
581
+ version: "1"
582
+ },
583
+ x402: {
584
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
585
+ enabled: true
586
+ // NEP-366 meta-transactions supported
587
+ }
588
+ },
589
+ // ============================================================================
590
+ // ALGORAND (2 networks) - Uses ASA transfers with atomic transaction groups
591
+ // ============================================================================
592
+ algorand: {
593
+ chainId: 0,
594
+ // Non-EVM (Algorand uses genesis hash for network identification)
595
+ chainIdHex: "0x0",
596
+ name: "algorand",
597
+ displayName: "Algorand",
598
+ networkType: "algorand",
599
+ rpcUrl: "https://mainnet-api.algonode.cloud",
600
+ explorerUrl: "https://allo.info",
601
+ nativeCurrency: {
602
+ name: "Algo",
603
+ symbol: "ALGO",
604
+ decimals: 6
605
+ // Algorand uses 6 decimals (microAlgos)
606
+ },
607
+ usdc: {
608
+ address: "31566704",
609
+ // USDC ASA ID on Algorand mainnet
610
+ decimals: 6,
611
+ name: "USDC",
612
+ version: "1"
613
+ },
614
+ tokens: {
615
+ usdc: {
616
+ address: "31566704",
617
+ // USDC ASA ID on Algorand mainnet
618
+ decimals: 6,
619
+ name: "USDC",
620
+ version: "1"
621
+ }
622
+ },
623
+ x402: {
624
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
625
+ enabled: true
626
+ }
627
+ },
628
+ "algorand-testnet": {
629
+ chainId: 0,
630
+ // Non-EVM
631
+ chainIdHex: "0x0",
632
+ name: "algorand-testnet",
633
+ displayName: "Algorand Testnet",
634
+ networkType: "algorand",
635
+ rpcUrl: "https://testnet-api.algonode.cloud",
636
+ explorerUrl: "https://testnet.allo.info",
637
+ nativeCurrency: {
638
+ name: "Algo",
639
+ symbol: "ALGO",
640
+ decimals: 6
641
+ },
642
+ usdc: {
643
+ address: "10458941",
644
+ // USDC ASA ID on Algorand testnet
645
+ decimals: 6,
646
+ name: "USDC",
647
+ version: "1"
648
+ },
649
+ tokens: {
650
+ usdc: {
651
+ address: "10458941",
652
+ // USDC ASA ID on Algorand testnet
653
+ decimals: 6,
654
+ name: "USDC",
655
+ version: "1"
656
+ }
657
+ },
658
+ x402: {
659
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
660
+ enabled: true
661
+ }
662
+ },
663
+ // ============================================================================
664
+ // SUI (2 networks) - Uses sponsored transactions (facilitator pays gas)
665
+ // ============================================================================
666
+ sui: {
667
+ chainId: 0,
668
+ // Non-EVM
669
+ chainIdHex: "0x0",
670
+ name: "sui",
671
+ displayName: "Sui",
672
+ networkType: "sui",
673
+ rpcUrl: "https://fullnode.mainnet.sui.io:443",
674
+ explorerUrl: "https://suiscan.xyz/mainnet",
675
+ nativeCurrency: {
676
+ name: "Sui",
677
+ symbol: "SUI",
678
+ decimals: 9
679
+ },
680
+ usdc: {
681
+ // USDC coin type on Sui mainnet
682
+ address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
683
+ decimals: 6,
684
+ name: "USDC",
685
+ version: "1"
686
+ },
687
+ tokens: {
688
+ usdc: {
689
+ address: "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
690
+ decimals: 6,
691
+ name: "USDC",
692
+ version: "1"
693
+ },
694
+ ausd: {
695
+ // AUSD (Agora USD) coin type on Sui mainnet
696
+ address: "0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",
697
+ decimals: 6,
698
+ name: "AUSD",
699
+ version: "1"
700
+ }
701
+ },
702
+ x402: {
703
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
704
+ enabled: true
705
+ }
706
+ },
707
+ "sui-testnet": {
708
+ chainId: 0,
709
+ // Non-EVM
710
+ chainIdHex: "0x0",
711
+ name: "sui-testnet",
712
+ displayName: "Sui Testnet",
713
+ networkType: "sui",
714
+ rpcUrl: "https://fullnode.testnet.sui.io:443",
715
+ explorerUrl: "https://suiscan.xyz/testnet",
716
+ nativeCurrency: {
717
+ name: "Sui",
718
+ symbol: "SUI",
719
+ decimals: 9
720
+ },
721
+ usdc: {
722
+ // USDC coin type on Sui testnet
723
+ address: "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC",
724
+ decimals: 6,
725
+ name: "USDC",
726
+ version: "1"
727
+ },
728
+ tokens: {
729
+ usdc: {
730
+ address: "0xa1ec7fc00a6f40db9693ad1415d0c193ad3906494428cf252621037bd7117e29::usdc::USDC",
731
+ decimals: 6,
732
+ name: "USDC",
733
+ version: "1"
734
+ }
735
+ },
736
+ x402: {
737
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
738
+ enabled: true
739
+ }
740
+ }
741
+ };
742
+ function getChainByName(name) {
743
+ return SUPPORTED_CHAINS[name.toLowerCase()];
744
+ }
745
+
746
+ // src/utils/x402.ts
747
+ function chainToCAIP2(chainName) {
748
+ const caip2 = CAIP2_IDENTIFIERS[chainName.toLowerCase()];
749
+ if (caip2) {
750
+ return caip2;
751
+ }
752
+ const chain = getChainByName(chainName);
753
+ if (chain) {
754
+ if (chain.networkType === "evm") {
755
+ return `eip155:${chain.chainId}`;
756
+ }
757
+ return `${chain.networkType}:${chainName}`;
758
+ }
759
+ return chainName;
760
+ }
761
+
762
+ // src/providers/sui/index.ts
763
+ var SuiClient;
764
+ var Transaction;
765
+ async function loadSuiDeps() {
766
+ if (!SuiClient) {
767
+ const clientModule = await import('@mysten/sui/client');
768
+ const txModule = await import('@mysten/sui/transactions');
769
+ SuiClient = clientModule.SuiClient;
770
+ Transaction = txModule.Transaction;
771
+ }
772
+ }
773
+ var SuiProvider = class {
774
+ id = "sui-wallet";
775
+ name = "Sui Wallet";
776
+ networkType = "sui";
777
+ provider = null;
778
+ clients = /* @__PURE__ */ new Map();
779
+ address = null;
780
+ /**
781
+ * Check if Sui wallet is available
782
+ */
783
+ isAvailable() {
784
+ if (typeof window === "undefined") return false;
785
+ const win = window;
786
+ return !!win.suiWallet;
787
+ }
788
+ /**
789
+ * Connect to Sui wallet
790
+ */
791
+ async connect() {
792
+ await loadSuiDeps();
793
+ this.provider = await this.getSuiWalletProvider();
794
+ if (!this.provider) {
795
+ throw new X402Error(
796
+ "Sui wallet not installed. Please install Sui Wallet or Suiet from Chrome Web Store",
797
+ "WALLET_NOT_FOUND"
798
+ );
799
+ }
800
+ try {
801
+ if (this.provider.requestPermissions) {
802
+ await this.provider.requestPermissions();
803
+ }
804
+ const accounts = await this.provider.getAccounts();
805
+ if (!accounts || accounts.length === 0) {
806
+ throw new X402Error("No Sui accounts found", "WALLET_CONNECTION_FAILED");
807
+ }
808
+ this.address = accounts[0];
809
+ return this.address;
810
+ } catch (error) {
811
+ if (error instanceof X402Error) throw error;
812
+ if (error instanceof Error) {
813
+ if (error.message.includes("User rejected") || error.message.includes("rejected")) {
814
+ throw new X402Error("Connection rejected by user", "WALLET_CONNECTION_REJECTED");
815
+ }
816
+ }
817
+ throw new X402Error(
818
+ `Failed to connect Sui wallet: ${error instanceof Error ? error.message : "Unknown error"}`,
819
+ "UNKNOWN_ERROR",
820
+ error
821
+ );
822
+ }
823
+ }
824
+ /**
825
+ * Disconnect from Sui wallet
826
+ */
827
+ async disconnect() {
828
+ this.provider = null;
829
+ this.clients.clear();
830
+ this.address = null;
831
+ }
832
+ /**
833
+ * Get current address
834
+ */
835
+ getAddress() {
836
+ return this.address;
837
+ }
838
+ /**
839
+ * Get USDC balance
840
+ */
841
+ async getBalance(chainConfig) {
842
+ await loadSuiDeps();
843
+ if (!this.address) {
844
+ throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
845
+ }
846
+ const client = await this.getClient(chainConfig);
847
+ try {
848
+ const coins = await client.getCoins({
849
+ owner: this.address,
850
+ coinType: chainConfig.usdc.address
851
+ });
852
+ if (!coins.data || coins.data.length === 0) {
853
+ return "0.00";
854
+ }
855
+ const totalBalance = coins.data.reduce((sum, coin) => {
856
+ return sum + BigInt(coin.balance);
857
+ }, BigInt(0));
858
+ const balance = Number(totalBalance) / Math.pow(10, chainConfig.usdc.decimals);
859
+ return balance.toFixed(2);
860
+ } catch {
861
+ return "0.00";
862
+ }
863
+ }
864
+ /**
865
+ * Create Sui payment (sponsored transaction)
866
+ *
867
+ * Transaction structure:
868
+ * 1. User creates a programmable transaction for USDC transfer
869
+ * 2. Transaction is signed by the user
870
+ * 3. Facilitator sponsors the transaction (pays gas in SUI)
871
+ * 4. Facilitator adds sponsor signature and submits
872
+ *
873
+ * User pays: ZERO SUI
874
+ */
875
+ async signPayment(paymentInfo, chainConfig) {
876
+ await loadSuiDeps();
877
+ if (!this.provider || !this.address) {
878
+ throw new X402Error("Wallet not connected", "WALLET_NOT_CONNECTED");
879
+ }
880
+ const client = await this.getClient(chainConfig);
881
+ const recipient = paymentInfo.recipients?.sui || paymentInfo.recipient;
882
+ const facilitatorAddress = paymentInfo.facilitator;
883
+ if (!facilitatorAddress) {
884
+ throw new X402Error("Facilitator address not provided", "INVALID_CONFIG");
885
+ }
886
+ const amount = BigInt(Math.floor(parseFloat(paymentInfo.amount) * 1e6));
887
+ const usdcCoins = await client.getCoins({
888
+ owner: this.address,
889
+ coinType: chainConfig.usdc.address
890
+ });
891
+ if (!usdcCoins.data || usdcCoins.data.length === 0) {
892
+ throw new X402Error("No USDC coins found in wallet", "INSUFFICIENT_BALANCE");
893
+ }
894
+ const totalBalance = usdcCoins.data.reduce((sum, coin) => sum + BigInt(coin.balance), BigInt(0));
895
+ if (totalBalance < amount) {
896
+ throw new X402Error(
897
+ `Insufficient USDC balance. Have: ${Number(totalBalance) / 1e6}, Need: ${Number(amount) / 1e6}`,
898
+ "INSUFFICIENT_BALANCE"
899
+ );
900
+ }
901
+ const tx = new Transaction();
902
+ tx.setSender(this.address);
903
+ tx.setGasOwner(facilitatorAddress);
904
+ let coinToUse;
905
+ const sufficientCoin = usdcCoins.data.find((c) => BigInt(c.balance) >= amount);
906
+ if (sufficientCoin) {
907
+ coinToUse = sufficientCoin.coinObjectId;
908
+ } else {
909
+ const baseCoin = usdcCoins.data[0];
910
+ coinToUse = baseCoin.coinObjectId;
911
+ const otherCoins = usdcCoins.data.slice(1).map((c) => c.coinObjectId);
912
+ if (otherCoins.length > 0) {
913
+ tx.mergeCoins(tx.object(coinToUse), otherCoins.map((id) => tx.object(id)));
914
+ }
915
+ }
916
+ const [paymentCoin] = tx.splitCoins(tx.object(coinToUse), [amount]);
917
+ tx.transferObjects([paymentCoin], recipient);
918
+ const txBytes = await tx.build({ client });
919
+ let signedTx;
920
+ try {
921
+ if (this.provider.signTransaction) {
922
+ signedTx = await this.provider.signTransaction({
923
+ transaction: txBytes,
924
+ account: this.address,
925
+ chain: chainConfig.name === "sui-testnet" ? "sui:testnet" : "sui:mainnet"
926
+ });
927
+ } else if (this.provider.signTransactionBlock) {
928
+ const result = await this.provider.signTransactionBlock({
929
+ transactionBlock: txBytes,
930
+ account: this.address,
931
+ chain: chainConfig.name === "sui-testnet" ? "sui:testnet" : "sui:mainnet"
932
+ });
933
+ signedTx = {
934
+ signature: result.signature,
935
+ bytes: result.transactionBlockBytes
936
+ };
937
+ } else {
938
+ throw new X402Error("Wallet does not support transaction signing", "WALLET_NOT_SUPPORTED");
939
+ }
940
+ } catch (error) {
941
+ if (error instanceof X402Error) throw error;
942
+ if (error instanceof Error) {
943
+ if (error.message.includes("User rejected") || error.message.includes("rejected")) {
944
+ throw new X402Error("Signature rejected by user", "SIGNATURE_REJECTED");
945
+ }
946
+ }
947
+ throw new X402Error(
948
+ `Failed to sign transaction: ${error instanceof Error ? error.message : "Unknown error"}`,
949
+ "PAYMENT_FAILED",
950
+ error
951
+ );
952
+ }
953
+ const payload = {
954
+ transactionBytes: signedTx.bytes,
955
+ senderSignature: signedTx.signature,
956
+ from: this.address,
957
+ to: recipient,
958
+ amount: amount.toString(),
959
+ coinObjectId: coinToUse
960
+ };
961
+ return JSON.stringify(payload);
962
+ }
963
+ /**
964
+ * Encode Sui payment as X-PAYMENT header
965
+ *
966
+ * @param paymentPayload - JSON-encoded payment payload from signPayment()
967
+ * @param chainConfig - Chain configuration (optional, defaults to 'sui')
968
+ * @param version - x402 protocol version (1 or 2, defaults to 1)
969
+ * @returns Base64-encoded X-PAYMENT header value
970
+ */
971
+ encodePaymentHeader(paymentPayload, chainConfig, version = 1) {
972
+ const payload = JSON.parse(paymentPayload);
973
+ const networkName = chainConfig?.name || "sui";
974
+ const x402Payload = version === 2 ? {
975
+ x402Version: 2,
976
+ scheme: "exact",
977
+ network: chainToCAIP2(networkName),
978
+ // CAIP-2 format for v2
979
+ payload
980
+ } : {
981
+ x402Version: 1,
982
+ scheme: "exact",
983
+ network: networkName,
984
+ // Plain chain name for v1
985
+ payload
986
+ };
987
+ return btoa(JSON.stringify(x402Payload));
988
+ }
989
+ // Private helpers
990
+ async getSuiWalletProvider() {
991
+ if (typeof window === "undefined") return null;
992
+ const win = window;
993
+ if (win.suiWallet) {
994
+ return win.suiWallet;
995
+ }
996
+ for (let i = 0; i < 5; i++) {
997
+ await new Promise((resolve) => setTimeout(resolve, 100));
998
+ if (win.suiWallet) {
999
+ return win.suiWallet;
1000
+ }
1001
+ }
1002
+ return null;
1003
+ }
1004
+ /**
1005
+ * Get or create a Sui client for a specific chain
1006
+ */
1007
+ async getClient(chainConfig) {
1008
+ await loadSuiDeps();
1009
+ const config = chainConfig || getChainByName("sui");
1010
+ if (!config) {
1011
+ throw new X402Error("Chain config not found", "CHAIN_NOT_SUPPORTED");
1012
+ }
1013
+ const cacheKey = config.rpcUrl;
1014
+ if (this.clients.has(cacheKey)) {
1015
+ return this.clients.get(cacheKey);
1016
+ }
1017
+ const client = new SuiClient({ url: config.rpcUrl });
1018
+ this.clients.set(cacheKey, client);
1019
+ return client;
1020
+ }
1021
+ };
1022
+ var sui_default = SuiProvider;
1023
+
1024
+ exports.SuiProvider = SuiProvider;
1025
+ exports.default = sui_default;
1026
+ //# sourceMappingURL=index.js.map
1027
+ //# sourceMappingURL=index.js.map