uvd-x402-sdk 2.0.3 → 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 (56) hide show
  1. package/README.md +282 -15
  2. package/dist/adapters/index.d.mts +139 -0
  3. package/dist/adapters/index.d.ts +139 -0
  4. package/dist/adapters/index.js +724 -0
  5. package/dist/adapters/index.js.map +1 -0
  6. package/dist/adapters/index.mjs +720 -0
  7. package/dist/adapters/index.mjs.map +1 -0
  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 +10 -2
  51. package/src/adapters/index.ts +13 -0
  52. package/src/adapters/wagmi.ts +294 -0
  53. package/src/chains/index.ts +255 -1
  54. package/src/index.ts +9 -0
  55. package/src/providers/evm/index.ts +64 -16
  56. package/src/types/index.ts +46 -3
@@ -0,0 +1,720 @@
1
+ // src/chains/index.ts
2
+ var DEFAULT_FACILITATOR_URL = "https://facilitator.ultravioletadao.xyz";
3
+ var SUPPORTED_CHAINS = {
4
+ // ============================================================================
5
+ // EVM CHAINS (10 networks)
6
+ // ============================================================================
7
+ base: {
8
+ chainId: 8453,
9
+ chainIdHex: "0x2105",
10
+ name: "base",
11
+ displayName: "Base",
12
+ networkType: "evm",
13
+ rpcUrl: "https://mainnet.base.org",
14
+ explorerUrl: "https://basescan.org",
15
+ nativeCurrency: {
16
+ name: "Ethereum",
17
+ symbol: "ETH",
18
+ decimals: 18
19
+ },
20
+ usdc: {
21
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
22
+ decimals: 6,
23
+ name: "USD Coin",
24
+ version: "2"
25
+ },
26
+ tokens: {
27
+ usdc: {
28
+ address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
29
+ decimals: 6,
30
+ name: "USD Coin",
31
+ version: "2"
32
+ },
33
+ eurc: {
34
+ address: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42",
35
+ decimals: 6,
36
+ name: "EURC",
37
+ version: "2"
38
+ },
39
+ gho: {
40
+ address: "0x6Bb7a212910682DCFdbd5BCBb3e28FB4E8da10Ee",
41
+ decimals: 18,
42
+ name: "Gho Token",
43
+ version: "1"
44
+ }
45
+ },
46
+ x402: {
47
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
48
+ enabled: true
49
+ }
50
+ },
51
+ avalanche: {
52
+ chainId: 43114,
53
+ chainIdHex: "0xa86a",
54
+ name: "avalanche",
55
+ displayName: "Avalanche C-Chain",
56
+ networkType: "evm",
57
+ rpcUrl: "https://avalanche-c-chain-rpc.publicnode.com",
58
+ explorerUrl: "https://snowtrace.io",
59
+ nativeCurrency: {
60
+ name: "Avalanche",
61
+ symbol: "AVAX",
62
+ decimals: 18
63
+ },
64
+ usdc: {
65
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
66
+ decimals: 6,
67
+ name: "USD Coin",
68
+ version: "2"
69
+ },
70
+ tokens: {
71
+ usdc: {
72
+ address: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
73
+ decimals: 6,
74
+ name: "USD Coin",
75
+ version: "2"
76
+ },
77
+ eurc: {
78
+ address: "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD",
79
+ decimals: 6,
80
+ name: "EURC",
81
+ version: "2"
82
+ },
83
+ ausd: {
84
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
85
+ decimals: 6,
86
+ name: "Agora USD",
87
+ version: "1"
88
+ }
89
+ },
90
+ x402: {
91
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
92
+ enabled: true
93
+ }
94
+ },
95
+ ethereum: {
96
+ chainId: 1,
97
+ chainIdHex: "0x1",
98
+ name: "ethereum",
99
+ displayName: "Ethereum",
100
+ networkType: "evm",
101
+ rpcUrl: "https://eth.llamarpc.com",
102
+ explorerUrl: "https://etherscan.io",
103
+ nativeCurrency: {
104
+ name: "Ethereum",
105
+ symbol: "ETH",
106
+ decimals: 18
107
+ },
108
+ usdc: {
109
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
110
+ decimals: 6,
111
+ name: "USD Coin",
112
+ version: "2"
113
+ },
114
+ tokens: {
115
+ usdc: {
116
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
117
+ decimals: 6,
118
+ name: "USD Coin",
119
+ version: "2"
120
+ },
121
+ eurc: {
122
+ address: "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c",
123
+ decimals: 6,
124
+ name: "EURC",
125
+ version: "2"
126
+ },
127
+ ausd: {
128
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
129
+ decimals: 6,
130
+ name: "Agora USD",
131
+ version: "1"
132
+ },
133
+ pyusd: {
134
+ address: "0x6c3ea9036406852006290770BEdFcAbA0e23A0e8",
135
+ decimals: 6,
136
+ name: "PayPal USD",
137
+ version: "1"
138
+ },
139
+ gho: {
140
+ address: "0x40D16FC0246aD3160Ccc09B8D0D3A2cD28aE6C2f",
141
+ decimals: 18,
142
+ name: "Gho Token",
143
+ version: "1"
144
+ },
145
+ crvusd: {
146
+ address: "0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E",
147
+ decimals: 18,
148
+ name: "Curve.Fi USD Stablecoin",
149
+ version: "1"
150
+ }
151
+ },
152
+ x402: {
153
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
154
+ enabled: true
155
+ }
156
+ },
157
+ polygon: {
158
+ chainId: 137,
159
+ chainIdHex: "0x89",
160
+ name: "polygon",
161
+ displayName: "Polygon",
162
+ networkType: "evm",
163
+ rpcUrl: "https://polygon-rpc.com",
164
+ explorerUrl: "https://polygonscan.com",
165
+ nativeCurrency: {
166
+ name: "Polygon",
167
+ symbol: "POL",
168
+ decimals: 18
169
+ },
170
+ usdc: {
171
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
172
+ decimals: 6,
173
+ name: "USD Coin",
174
+ version: "2"
175
+ },
176
+ tokens: {
177
+ usdc: {
178
+ address: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
179
+ decimals: 6,
180
+ name: "USD Coin",
181
+ version: "2"
182
+ },
183
+ ausd: {
184
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
185
+ decimals: 6,
186
+ name: "Agora USD",
187
+ version: "1"
188
+ }
189
+ },
190
+ x402: {
191
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
192
+ enabled: true
193
+ }
194
+ },
195
+ arbitrum: {
196
+ chainId: 42161,
197
+ chainIdHex: "0xa4b1",
198
+ name: "arbitrum",
199
+ displayName: "Arbitrum One",
200
+ networkType: "evm",
201
+ rpcUrl: "https://arb1.arbitrum.io/rpc",
202
+ explorerUrl: "https://arbiscan.io",
203
+ nativeCurrency: {
204
+ name: "Ethereum",
205
+ symbol: "ETH",
206
+ decimals: 18
207
+ },
208
+ usdc: {
209
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
210
+ decimals: 6,
211
+ name: "USD Coin",
212
+ version: "2"
213
+ },
214
+ tokens: {
215
+ usdc: {
216
+ address: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
217
+ decimals: 6,
218
+ name: "USD Coin",
219
+ version: "2"
220
+ },
221
+ ausd: {
222
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
223
+ decimals: 6,
224
+ name: "Agora USD",
225
+ version: "1"
226
+ },
227
+ gho: {
228
+ address: "0x7dfF72693f6A4149b17e7C6314655f6A9F7c8B33",
229
+ decimals: 18,
230
+ name: "Gho Token",
231
+ version: "1"
232
+ },
233
+ crvusd: {
234
+ address: "0x498Bf2B1e120FeD3ad3D42EA2165E9b73f99C1e5",
235
+ decimals: 18,
236
+ name: "Curve.Fi USD Stablecoin",
237
+ version: "1"
238
+ }
239
+ },
240
+ x402: {
241
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
242
+ enabled: true
243
+ }
244
+ },
245
+ optimism: {
246
+ chainId: 10,
247
+ chainIdHex: "0xa",
248
+ name: "optimism",
249
+ displayName: "Optimism",
250
+ networkType: "evm",
251
+ rpcUrl: "https://mainnet.optimism.io",
252
+ explorerUrl: "https://optimistic.etherscan.io",
253
+ nativeCurrency: {
254
+ name: "Ethereum",
255
+ symbol: "ETH",
256
+ decimals: 18
257
+ },
258
+ usdc: {
259
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
260
+ decimals: 6,
261
+ name: "USD Coin",
262
+ version: "2"
263
+ },
264
+ tokens: {
265
+ usdc: {
266
+ address: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85",
267
+ decimals: 6,
268
+ name: "USD Coin",
269
+ version: "2"
270
+ }
271
+ },
272
+ x402: {
273
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
274
+ enabled: true
275
+ }
276
+ },
277
+ celo: {
278
+ chainId: 42220,
279
+ chainIdHex: "0xa4ec",
280
+ name: "celo",
281
+ displayName: "Celo",
282
+ networkType: "evm",
283
+ rpcUrl: "https://forno.celo.org",
284
+ explorerUrl: "https://celoscan.io",
285
+ nativeCurrency: {
286
+ name: "Celo",
287
+ symbol: "CELO",
288
+ decimals: 18
289
+ },
290
+ usdc: {
291
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
292
+ decimals: 6,
293
+ name: "USDC",
294
+ // Celo uses "USDC" not "USD Coin" for EIP-712
295
+ version: "2"
296
+ },
297
+ tokens: {
298
+ usdc: {
299
+ address: "0xcebA9300f2b948710d2653dD7B07f33A8B32118C",
300
+ decimals: 6,
301
+ name: "USDC",
302
+ // Celo uses "USDC" not "USD Coin" for EIP-712
303
+ version: "2"
304
+ }
305
+ },
306
+ x402: {
307
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
308
+ enabled: true
309
+ }
310
+ },
311
+ hyperevm: {
312
+ chainId: 999,
313
+ chainIdHex: "0x3e7",
314
+ name: "hyperevm",
315
+ displayName: "HyperEVM",
316
+ networkType: "evm",
317
+ rpcUrl: "https://rpc.hyperliquid.xyz/evm",
318
+ explorerUrl: "https://hyperevmscan.io",
319
+ nativeCurrency: {
320
+ name: "Ethereum",
321
+ symbol: "ETH",
322
+ decimals: 18
323
+ },
324
+ usdc: {
325
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
326
+ decimals: 6,
327
+ name: "USDC",
328
+ // HyperEVM uses "USDC" not "USD Coin"
329
+ version: "2"
330
+ },
331
+ tokens: {
332
+ usdc: {
333
+ address: "0xb88339CB7199b77E23DB6E890353E22632Ba630f",
334
+ decimals: 6,
335
+ name: "USDC",
336
+ // HyperEVM uses "USDC" not "USD Coin"
337
+ version: "2"
338
+ }
339
+ },
340
+ x402: {
341
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
342
+ enabled: true
343
+ }
344
+ },
345
+ unichain: {
346
+ chainId: 130,
347
+ chainIdHex: "0x82",
348
+ name: "unichain",
349
+ displayName: "Unichain",
350
+ networkType: "evm",
351
+ rpcUrl: "https://unichain-rpc.publicnode.com",
352
+ explorerUrl: "https://uniscan.xyz",
353
+ nativeCurrency: {
354
+ name: "Ethereum",
355
+ symbol: "ETH",
356
+ decimals: 18
357
+ },
358
+ usdc: {
359
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
360
+ decimals: 6,
361
+ name: "USDC",
362
+ // Unichain uses "USDC" not "USD Coin"
363
+ version: "2"
364
+ },
365
+ tokens: {
366
+ usdc: {
367
+ address: "0x078d782b760474a361dda0af3839290b0ef57ad6",
368
+ decimals: 6,
369
+ name: "USDC",
370
+ // Unichain uses "USDC" not "USD Coin"
371
+ version: "2"
372
+ }
373
+ },
374
+ x402: {
375
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
376
+ enabled: true
377
+ }
378
+ },
379
+ monad: {
380
+ chainId: 143,
381
+ chainIdHex: "0x8f",
382
+ name: "monad",
383
+ displayName: "Monad",
384
+ networkType: "evm",
385
+ rpcUrl: "https://rpc.monad.xyz",
386
+ explorerUrl: "https://monad.socialscan.io",
387
+ nativeCurrency: {
388
+ name: "Monad",
389
+ symbol: "MON",
390
+ decimals: 18
391
+ },
392
+ usdc: {
393
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
394
+ decimals: 6,
395
+ name: "USDC",
396
+ // Monad uses "USDC" not "USD Coin"
397
+ version: "2"
398
+ },
399
+ tokens: {
400
+ usdc: {
401
+ address: "0x754704bc059f8c67012fed69bc8a327a5aafb603",
402
+ decimals: 6,
403
+ name: "USDC",
404
+ // Monad uses "USDC" not "USD Coin"
405
+ version: "2"
406
+ },
407
+ ausd: {
408
+ address: "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
409
+ decimals: 6,
410
+ name: "Agora USD",
411
+ version: "1"
412
+ }
413
+ },
414
+ x402: {
415
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
416
+ enabled: true
417
+ }
418
+ },
419
+ // ============================================================================
420
+ // SVM CHAINS (2 networks) - Solana Virtual Machine
421
+ // ============================================================================
422
+ solana: {
423
+ chainId: 0,
424
+ // Non-EVM
425
+ chainIdHex: "0x0",
426
+ name: "solana",
427
+ displayName: "Solana",
428
+ networkType: "svm",
429
+ rpcUrl: "https://api.mainnet-beta.solana.com",
430
+ explorerUrl: "https://solscan.io",
431
+ nativeCurrency: {
432
+ name: "Solana",
433
+ symbol: "SOL",
434
+ decimals: 9
435
+ },
436
+ usdc: {
437
+ address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
438
+ // USDC SPL token mint
439
+ decimals: 6,
440
+ name: "USD Coin",
441
+ version: "1"
442
+ },
443
+ x402: {
444
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
445
+ enabled: true
446
+ }
447
+ },
448
+ fogo: {
449
+ chainId: 0,
450
+ // Non-EVM (SVM)
451
+ chainIdHex: "0x0",
452
+ name: "fogo",
453
+ displayName: "Fogo",
454
+ networkType: "svm",
455
+ rpcUrl: "https://rpc.fogo.nightly.app/",
456
+ explorerUrl: "https://explorer.fogo.nightly.app",
457
+ nativeCurrency: {
458
+ name: "Fogo",
459
+ symbol: "FOGO",
460
+ decimals: 9
461
+ },
462
+ usdc: {
463
+ address: "uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG",
464
+ // Fogo USDC mint
465
+ decimals: 6,
466
+ name: "USDC",
467
+ version: "1"
468
+ },
469
+ x402: {
470
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
471
+ enabled: true
472
+ }
473
+ },
474
+ // ============================================================================
475
+ // STELLAR (1 network)
476
+ // ============================================================================
477
+ stellar: {
478
+ chainId: 0,
479
+ // Non-EVM
480
+ chainIdHex: "0x0",
481
+ name: "stellar",
482
+ displayName: "Stellar",
483
+ networkType: "stellar",
484
+ rpcUrl: "https://horizon.stellar.org",
485
+ explorerUrl: "https://stellar.expert/explorer/public",
486
+ nativeCurrency: {
487
+ name: "Lumens",
488
+ symbol: "XLM",
489
+ decimals: 7
490
+ // Stellar uses 7 decimals (stroops)
491
+ },
492
+ usdc: {
493
+ address: "CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75",
494
+ // Soroban Asset Contract
495
+ decimals: 7,
496
+ // Stellar USDC uses 7 decimals
497
+ name: "USDC",
498
+ version: "1"
499
+ },
500
+ x402: {
501
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
502
+ enabled: true
503
+ }
504
+ },
505
+ // ============================================================================
506
+ // NEAR (1 network) - Uses NEP-366 meta-transactions
507
+ // ============================================================================
508
+ near: {
509
+ chainId: 0,
510
+ // Non-EVM
511
+ chainIdHex: "0x0",
512
+ name: "near",
513
+ displayName: "NEAR Protocol",
514
+ networkType: "near",
515
+ rpcUrl: "https://rpc.mainnet.near.org",
516
+ explorerUrl: "https://nearblocks.io",
517
+ nativeCurrency: {
518
+ name: "NEAR",
519
+ symbol: "NEAR",
520
+ decimals: 24
521
+ // NEAR uses 24 decimals (yoctoNEAR)
522
+ },
523
+ usdc: {
524
+ address: "17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1",
525
+ // Native Circle USDC
526
+ decimals: 6,
527
+ name: "USDC",
528
+ version: "1"
529
+ },
530
+ x402: {
531
+ facilitatorUrl: DEFAULT_FACILITATOR_URL,
532
+ enabled: true
533
+ // NEP-366 meta-transactions supported
534
+ }
535
+ }
536
+ };
537
+ function getChainByName(name) {
538
+ return SUPPORTED_CHAINS[name.toLowerCase()];
539
+ }
540
+
541
+ // src/types/index.ts
542
+ var CAIP2_IDENTIFIERS = {
543
+ // EVM chains
544
+ base: "eip155:8453",
545
+ ethereum: "eip155:1",
546
+ polygon: "eip155:137",
547
+ arbitrum: "eip155:42161",
548
+ optimism: "eip155:10",
549
+ avalanche: "eip155:43114",
550
+ celo: "eip155:42220",
551
+ hyperevm: "eip155:999",
552
+ unichain: "eip155:130",
553
+ monad: "eip155:143",
554
+ // SVM chains
555
+ solana: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
556
+ fogo: "svm:fogo",
557
+ // Stellar
558
+ stellar: "stellar:pubnet",
559
+ // NEAR
560
+ near: "near:mainnet"
561
+ };
562
+ Object.fromEntries(
563
+ Object.entries(CAIP2_IDENTIFIERS).map(([k, v]) => [v, k])
564
+ );
565
+ var X402Error = class _X402Error extends Error {
566
+ code;
567
+ details;
568
+ constructor(message, code, details) {
569
+ super(message);
570
+ this.name = "X402Error";
571
+ this.code = code;
572
+ this.details = details;
573
+ if (Error.captureStackTrace) {
574
+ Error.captureStackTrace(this, _X402Error);
575
+ }
576
+ }
577
+ };
578
+
579
+ // src/utils/x402.ts
580
+ function encodeX402Header(header) {
581
+ return btoa(JSON.stringify(header));
582
+ }
583
+ function createX402V1Header(network, payload) {
584
+ return {
585
+ x402Version: 1,
586
+ scheme: "exact",
587
+ network,
588
+ payload
589
+ };
590
+ }
591
+
592
+ // src/adapters/wagmi.ts
593
+ function generateNonce() {
594
+ const bytes = new Uint8Array(32);
595
+ if (typeof globalThis !== "undefined" && globalThis.crypto?.getRandomValues) {
596
+ globalThis.crypto.getRandomValues(bytes);
597
+ } else if (typeof window !== "undefined" && window.crypto?.getRandomValues) {
598
+ window.crypto.getRandomValues(bytes);
599
+ } else {
600
+ for (let i = 0; i < 32; i++) {
601
+ bytes[i] = Math.floor(Math.random() * 256);
602
+ }
603
+ }
604
+ return "0x" + Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
605
+ }
606
+ function parseUnits(amount, decimals) {
607
+ const [integer, fraction = ""] = amount.split(".");
608
+ const paddedFraction = fraction.padEnd(decimals, "0").slice(0, decimals);
609
+ return BigInt(integer + paddedFraction);
610
+ }
611
+ async function createPaymentFromWalletClient(walletClient, options) {
612
+ if (!walletClient) {
613
+ throw new X402Error("WalletClient is not available. Make sure wallet is connected.", "WALLET_NOT_CONNECTED");
614
+ }
615
+ const {
616
+ recipient,
617
+ amount,
618
+ chainName = "base",
619
+ validitySeconds = 300
620
+ } = options;
621
+ const chain = getChainByName(chainName);
622
+ if (!chain) {
623
+ throw new X402Error(`Unsupported chain: ${chainName}`, "CHAIN_NOT_SUPPORTED");
624
+ }
625
+ if (chain.networkType !== "evm") {
626
+ throw new X402Error(
627
+ `wagmi adapter only supports EVM chains. For ${chain.networkType}, use the appropriate provider.`,
628
+ "CHAIN_NOT_SUPPORTED"
629
+ );
630
+ }
631
+ const from = walletClient.account.address;
632
+ const to = recipient;
633
+ const nonce = generateNonce();
634
+ const validAfter = 0;
635
+ const validBefore = Math.floor(Date.now() / 1e3) + validitySeconds;
636
+ const value = parseUnits(amount, chain.usdc.decimals);
637
+ const domain = {
638
+ name: chain.usdc.name,
639
+ version: chain.usdc.version,
640
+ chainId: chain.chainId,
641
+ verifyingContract: chain.usdc.address
642
+ };
643
+ const types = {
644
+ TransferWithAuthorization: [
645
+ { name: "from", type: "address" },
646
+ { name: "to", type: "address" },
647
+ { name: "value", type: "uint256" },
648
+ { name: "validAfter", type: "uint256" },
649
+ { name: "validBefore", type: "uint256" },
650
+ { name: "nonce", type: "bytes32" }
651
+ ]
652
+ };
653
+ const message = {
654
+ from,
655
+ to,
656
+ value,
657
+ validAfter: BigInt(validAfter),
658
+ validBefore: BigInt(validBefore),
659
+ nonce
660
+ };
661
+ let signature;
662
+ try {
663
+ signature = await walletClient.signTypedData({
664
+ domain,
665
+ types,
666
+ primaryType: "TransferWithAuthorization",
667
+ message
668
+ });
669
+ } catch (error) {
670
+ if (error instanceof Error) {
671
+ if (error.message.includes("User rejected") || error.message.includes("denied")) {
672
+ throw new X402Error("Signature rejected by user", "SIGNATURE_REJECTED");
673
+ }
674
+ }
675
+ throw new X402Error(
676
+ `Failed to sign payment: ${error instanceof Error ? error.message : "Unknown error"}`,
677
+ "PAYMENT_FAILED",
678
+ error
679
+ );
680
+ }
681
+ const header = createX402V1Header(chainName, {
682
+ signature,
683
+ authorization: {
684
+ from,
685
+ to: recipient,
686
+ value: value.toString(),
687
+ validAfter: validAfter.toString(),
688
+ validBefore: validBefore.toString(),
689
+ nonce
690
+ }
691
+ });
692
+ return encodeX402Header(header);
693
+ }
694
+ async function createPaymentWithResult(walletClient, options) {
695
+ const paymentHeader = await createPaymentFromWalletClient(walletClient, options);
696
+ return {
697
+ success: true,
698
+ paymentHeader,
699
+ network: options.chainName || "base",
700
+ payer: walletClient?.account.address
701
+ };
702
+ }
703
+ function useX402Wagmi(walletClient) {
704
+ const isReady = !!walletClient;
705
+ const createPayment = async (options) => {
706
+ return createPaymentFromWalletClient(walletClient, options);
707
+ };
708
+ const createPaymentFull = async (options) => {
709
+ return createPaymentWithResult(walletClient, options);
710
+ };
711
+ return {
712
+ isReady,
713
+ createPayment,
714
+ createPaymentFull
715
+ };
716
+ }
717
+
718
+ export { createPaymentFromWalletClient, createPaymentWithResult, useX402Wagmi };
719
+ //# sourceMappingURL=index.mjs.map
720
+ //# sourceMappingURL=index.mjs.map