@t402/evm 2.5.0 → 2.6.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 (39) hide show
  1. package/dist/cjs/index-fzI2FyBT.d.ts +122 -0
  2. package/dist/cjs/permit2/client/index.d.ts +81 -0
  3. package/dist/cjs/permit2/client/index.js +150 -0
  4. package/dist/cjs/permit2/client/index.js.map +1 -0
  5. package/dist/cjs/permit2/facilitator/index.d.ts +82 -0
  6. package/dist/cjs/permit2/facilitator/index.js +301 -0
  7. package/dist/cjs/permit2/facilitator/index.js.map +1 -0
  8. package/dist/cjs/permit2/index.d.ts +145 -0
  9. package/dist/cjs/permit2/index.js +1075 -0
  10. package/dist/cjs/permit2/index.js.map +1 -0
  11. package/dist/cjs/permit2/server/index.d.ts +3 -0
  12. package/dist/cjs/permit2/server/index.js +686 -0
  13. package/dist/cjs/permit2/server/index.js.map +1 -0
  14. package/dist/esm/chunk-3KHB6QTD.mjs +112 -0
  15. package/dist/esm/chunk-3KHB6QTD.mjs.map +1 -0
  16. package/dist/esm/{chunk-ZDGWVHD5.mjs → chunk-EEZNFYCW.mjs} +5 -5
  17. package/dist/esm/chunk-MMQSLAA2.mjs +190 -0
  18. package/dist/esm/chunk-MMQSLAA2.mjs.map +1 -0
  19. package/dist/esm/chunk-NIGKNI66.mjs +224 -0
  20. package/dist/esm/chunk-NIGKNI66.mjs.map +1 -0
  21. package/dist/esm/chunk-URG4HEYQ.mjs +74 -0
  22. package/dist/esm/chunk-URG4HEYQ.mjs.map +1 -0
  23. package/dist/esm/index-fzI2FyBT.d.mts +122 -0
  24. package/dist/esm/index.mjs +10 -10
  25. package/dist/esm/permit2/client/index.d.mts +81 -0
  26. package/dist/esm/permit2/client/index.mjs +11 -0
  27. package/dist/esm/permit2/client/index.mjs.map +1 -0
  28. package/dist/esm/permit2/facilitator/index.d.mts +82 -0
  29. package/dist/esm/permit2/facilitator/index.mjs +11 -0
  30. package/dist/esm/permit2/facilitator/index.mjs.map +1 -0
  31. package/dist/esm/permit2/index.d.mts +145 -0
  32. package/dist/esm/permit2/index.mjs +31 -0
  33. package/dist/esm/permit2/index.mjs.map +1 -0
  34. package/dist/esm/permit2/server/index.d.mts +3 -0
  35. package/dist/esm/permit2/server/index.mjs +12 -0
  36. package/dist/esm/permit2/server/index.mjs.map +1 -0
  37. package/dist/esm/upto/index.mjs +2 -2
  38. package/package.json +58 -11
  39. /package/dist/esm/{chunk-ZDGWVHD5.mjs.map → chunk-EEZNFYCW.mjs.map} +0 -0
@@ -0,0 +1,686 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+
22
+ // src/permit2/server/index.ts
23
+ var server_exports = {};
24
+ __export(server_exports, {
25
+ Permit2EvmScheme: () => Permit2EvmScheme,
26
+ registerPermit2EvmScheme: () => registerPermit2EvmScheme
27
+ });
28
+ module.exports = __toCommonJS(server_exports);
29
+
30
+ // src/tokens.ts
31
+ var USDT0_ADDRESSES = {
32
+ // === Existing Networks ===
33
+ // Ethereum Mainnet - OFT Adapter (bridge endpoint)
34
+ "eip155:1": "0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee",
35
+ // Arbitrum One - Native USDT0
36
+ "eip155:42161": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
37
+ // Ink Mainnet
38
+ "eip155:57073": "0x0200C29006150606B650577BBE7B6248F58470c1",
39
+ // Berachain Mainnet
40
+ "eip155:80094": "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
41
+ // Unichain Mainnet (updated address)
42
+ "eip155:130": "0x9151434b16b9763660705744891fA906F660EcC5",
43
+ // === Phase 1: High Priority Networks ===
44
+ // Polygon PoS
45
+ "eip155:137": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
46
+ // Mantle
47
+ "eip155:5000": "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
48
+ // Optimism
49
+ "eip155:10": "0x01bFF41798a0BcF287b996046Ca68b395DbC1071",
50
+ // Plasma
51
+ "eip155:9745": "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
52
+ // Sei
53
+ "eip155:1329": "0x9151434b16b9763660705744891fA906F660EcC5",
54
+ // Conflux eSpace
55
+ "eip155:1030": "0xaf37E8B6C9ED7f6318979f56Fc287d76c30847ff",
56
+ // Monad
57
+ "eip155:143": "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
58
+ // === Phase 2: Medium Priority Networks ===
59
+ // Rootstock (Bitcoin sidechain)
60
+ "eip155:30": "0x779dED0C9e1022225F8e0630b35A9B54Be713736",
61
+ // XLayer (OKX L2)
62
+ "eip155:196": "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
63
+ // Flare
64
+ "eip155:14": "0xe7cd86e13AC4309349F30B3435a9d337750fC82D",
65
+ // Corn
66
+ "eip155:21000000": "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
67
+ // HyperEVM
68
+ "eip155:999": "0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb",
69
+ // MegaETH
70
+ "eip155:4326": "0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb",
71
+ // Stable
72
+ "eip155:988": "0x779Ded0c9e1022225f8E0630b35a9b54bE713736"
73
+ };
74
+ var USDC_ADDRESSES = {
75
+ // Ethereum Mainnet
76
+ "eip155:1": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
77
+ // Base Mainnet
78
+ "eip155:8453": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
79
+ // Base Sepolia (testnet)
80
+ "eip155:84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
81
+ // Sepolia (testnet)
82
+ "eip155:11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
83
+ // Arbitrum One
84
+ "eip155:42161": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
85
+ // Polygon Mainnet
86
+ "eip155:137": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
87
+ };
88
+ var USAT_ADDRESSES = {
89
+ // Ethereum Mainnet
90
+ "eip155:1": "0x07041776f5007aca2a54844f50503a18a72a8b68"
91
+ };
92
+ var USDT_LEGACY_ADDRESSES = {
93
+ // Ethereum Mainnet
94
+ "eip155:1": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
95
+ // Polygon Mainnet (native USDT, not USDT0)
96
+ "eip155:137": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
97
+ // BNB Chain (BSC) - BEP-20 USDT
98
+ "eip155:56": "0x55d398326f99059fF775485246999027B3197955",
99
+ // Avalanche C-Chain
100
+ "eip155:43114": "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
101
+ // Fantom
102
+ "eip155:250": "0x049d68029688eabf473097a2fc38ef61633a3c7a",
103
+ // Celo
104
+ "eip155:42220": "0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e",
105
+ // Kaia (formerly Klaytn)
106
+ "eip155:8217": "0xcee8faf64bb97a73bb51e115aa89c17ffa8dd167"
107
+ };
108
+ var TOKEN_REGISTRY = {
109
+ // Ethereum Mainnet
110
+ "eip155:1": {
111
+ USDT0: {
112
+ address: USDT0_ADDRESSES["eip155:1"],
113
+ symbol: "USDT0",
114
+ name: "TetherToken",
115
+ version: "1",
116
+ decimals: 6,
117
+ tokenType: "eip3009",
118
+ priority: 1
119
+ },
120
+ USDC: {
121
+ address: USDC_ADDRESSES["eip155:1"],
122
+ symbol: "USDC",
123
+ name: "USD Coin",
124
+ version: "2",
125
+ decimals: 6,
126
+ tokenType: "eip3009",
127
+ priority: 2
128
+ },
129
+ USAT: {
130
+ address: USAT_ADDRESSES["eip155:1"],
131
+ symbol: "USAT",
132
+ name: "Tether America USD",
133
+ version: "1",
134
+ decimals: 6,
135
+ tokenType: "legacy",
136
+ priority: 3
137
+ },
138
+ USDT: {
139
+ address: USDT_LEGACY_ADDRESSES["eip155:1"],
140
+ symbol: "USDT",
141
+ name: "TetherUSD",
142
+ version: "1",
143
+ decimals: 6,
144
+ tokenType: "legacy",
145
+ priority: 10
146
+ // Lower priority due to legacy flow
147
+ }
148
+ },
149
+ // Arbitrum One
150
+ "eip155:42161": {
151
+ USDT0: {
152
+ address: USDT0_ADDRESSES["eip155:42161"],
153
+ symbol: "USDT0",
154
+ name: "TetherToken",
155
+ version: "1",
156
+ decimals: 6,
157
+ tokenType: "eip3009",
158
+ priority: 1
159
+ },
160
+ USDC: {
161
+ address: USDC_ADDRESSES["eip155:42161"],
162
+ symbol: "USDC",
163
+ name: "USD Coin",
164
+ version: "2",
165
+ decimals: 6,
166
+ tokenType: "eip3009",
167
+ priority: 2
168
+ }
169
+ },
170
+ // Ink Mainnet
171
+ "eip155:57073": {
172
+ USDT0: {
173
+ address: USDT0_ADDRESSES["eip155:57073"],
174
+ symbol: "USDT0",
175
+ name: "TetherToken",
176
+ version: "1",
177
+ decimals: 6,
178
+ tokenType: "eip3009",
179
+ priority: 1
180
+ }
181
+ },
182
+ // Berachain Mainnet
183
+ "eip155:80094": {
184
+ USDT0: {
185
+ address: USDT0_ADDRESSES["eip155:80094"],
186
+ symbol: "USDT0",
187
+ name: "TetherToken",
188
+ version: "1",
189
+ decimals: 6,
190
+ tokenType: "eip3009",
191
+ priority: 1
192
+ }
193
+ },
194
+ // Unichain Mainnet
195
+ "eip155:130": {
196
+ USDT0: {
197
+ address: USDT0_ADDRESSES["eip155:130"],
198
+ symbol: "USDT0",
199
+ name: "TetherToken",
200
+ version: "1",
201
+ decimals: 6,
202
+ tokenType: "eip3009",
203
+ priority: 1
204
+ }
205
+ },
206
+ // Base Mainnet
207
+ "eip155:8453": {
208
+ USDC: {
209
+ address: USDC_ADDRESSES["eip155:8453"],
210
+ symbol: "USDC",
211
+ name: "USD Coin",
212
+ version: "2",
213
+ decimals: 6,
214
+ tokenType: "eip3009",
215
+ priority: 2
216
+ }
217
+ },
218
+ // Base Sepolia (testnet)
219
+ "eip155:84532": {
220
+ USDC: {
221
+ address: USDC_ADDRESSES["eip155:84532"],
222
+ symbol: "USDC",
223
+ name: "USDC",
224
+ version: "2",
225
+ decimals: 6,
226
+ tokenType: "eip3009",
227
+ priority: 2
228
+ }
229
+ },
230
+ // Sepolia (testnet)
231
+ "eip155:11155111": {
232
+ USDC: {
233
+ address: USDC_ADDRESSES["eip155:11155111"],
234
+ symbol: "USDC",
235
+ name: "USDC",
236
+ version: "2",
237
+ decimals: 6,
238
+ tokenType: "eip3009",
239
+ priority: 2
240
+ }
241
+ },
242
+ // Polygon Mainnet
243
+ "eip155:137": {
244
+ USDT0: {
245
+ address: USDT0_ADDRESSES["eip155:137"],
246
+ symbol: "USDT0",
247
+ name: "TetherToken",
248
+ version: "1",
249
+ decimals: 6,
250
+ tokenType: "eip3009",
251
+ priority: 1
252
+ },
253
+ USDC: {
254
+ address: USDC_ADDRESSES["eip155:137"],
255
+ symbol: "USDC",
256
+ name: "USD Coin",
257
+ version: "2",
258
+ decimals: 6,
259
+ tokenType: "eip3009",
260
+ priority: 2
261
+ },
262
+ USDT: {
263
+ address: USDT_LEGACY_ADDRESSES["eip155:137"],
264
+ symbol: "USDT",
265
+ name: "TetherUSD",
266
+ version: "1",
267
+ decimals: 6,
268
+ tokenType: "legacy",
269
+ priority: 10
270
+ }
271
+ },
272
+ // === Phase 1: High Priority USDT0 Networks ===
273
+ // Optimism Mainnet
274
+ "eip155:10": {
275
+ USDT0: {
276
+ address: USDT0_ADDRESSES["eip155:10"],
277
+ symbol: "USDT0",
278
+ name: "TetherToken",
279
+ version: "1",
280
+ decimals: 6,
281
+ tokenType: "eip3009",
282
+ priority: 1
283
+ }
284
+ },
285
+ // Mantle Mainnet
286
+ "eip155:5000": {
287
+ USDT0: {
288
+ address: USDT0_ADDRESSES["eip155:5000"],
289
+ symbol: "USDT0",
290
+ name: "TetherToken",
291
+ version: "1",
292
+ decimals: 6,
293
+ tokenType: "eip3009",
294
+ priority: 1
295
+ }
296
+ },
297
+ // Plasma Mainnet
298
+ "eip155:9745": {
299
+ USDT0: {
300
+ address: USDT0_ADDRESSES["eip155:9745"],
301
+ symbol: "USDT0",
302
+ name: "TetherToken",
303
+ version: "1",
304
+ decimals: 6,
305
+ tokenType: "eip3009",
306
+ priority: 1
307
+ }
308
+ },
309
+ // Sei Mainnet
310
+ "eip155:1329": {
311
+ USDT0: {
312
+ address: USDT0_ADDRESSES["eip155:1329"],
313
+ symbol: "USDT0",
314
+ name: "TetherToken",
315
+ version: "1",
316
+ decimals: 6,
317
+ tokenType: "eip3009",
318
+ priority: 1
319
+ }
320
+ },
321
+ // Conflux eSpace Mainnet
322
+ "eip155:1030": {
323
+ USDT0: {
324
+ address: USDT0_ADDRESSES["eip155:1030"],
325
+ symbol: "USDT0",
326
+ name: "TetherToken",
327
+ version: "1",
328
+ decimals: 6,
329
+ tokenType: "eip3009",
330
+ priority: 1
331
+ }
332
+ },
333
+ // Monad Mainnet
334
+ "eip155:143": {
335
+ USDT0: {
336
+ address: USDT0_ADDRESSES["eip155:143"],
337
+ symbol: "USDT0",
338
+ name: "TetherToken",
339
+ version: "1",
340
+ decimals: 6,
341
+ tokenType: "eip3009",
342
+ priority: 1
343
+ }
344
+ },
345
+ // === Phase 2: Medium Priority USDT0 Networks ===
346
+ // Flare Mainnet
347
+ "eip155:14": {
348
+ USDT0: {
349
+ address: USDT0_ADDRESSES["eip155:14"],
350
+ symbol: "USDT0",
351
+ name: "TetherToken",
352
+ version: "1",
353
+ decimals: 6,
354
+ tokenType: "eip3009",
355
+ priority: 1
356
+ }
357
+ },
358
+ // Rootstock Mainnet (Bitcoin sidechain)
359
+ "eip155:30": {
360
+ USDT0: {
361
+ address: USDT0_ADDRESSES["eip155:30"],
362
+ symbol: "USDT0",
363
+ name: "TetherToken",
364
+ version: "1",
365
+ decimals: 6,
366
+ tokenType: "eip3009",
367
+ priority: 1
368
+ }
369
+ },
370
+ // XLayer Mainnet (OKX L2)
371
+ "eip155:196": {
372
+ USDT0: {
373
+ address: USDT0_ADDRESSES["eip155:196"],
374
+ symbol: "USDT0",
375
+ name: "TetherToken",
376
+ version: "1",
377
+ decimals: 6,
378
+ tokenType: "eip3009",
379
+ priority: 1
380
+ }
381
+ },
382
+ // Stable Mainnet
383
+ "eip155:988": {
384
+ USDT0: {
385
+ address: USDT0_ADDRESSES["eip155:988"],
386
+ symbol: "USDT0",
387
+ name: "TetherToken",
388
+ version: "1",
389
+ decimals: 6,
390
+ tokenType: "eip3009",
391
+ priority: 1
392
+ }
393
+ },
394
+ // HyperEVM Mainnet
395
+ "eip155:999": {
396
+ USDT0: {
397
+ address: USDT0_ADDRESSES["eip155:999"],
398
+ symbol: "USDT0",
399
+ name: "TetherToken",
400
+ version: "1",
401
+ decimals: 6,
402
+ tokenType: "eip3009",
403
+ priority: 1
404
+ }
405
+ },
406
+ // MegaETH Mainnet
407
+ "eip155:4326": {
408
+ USDT0: {
409
+ address: USDT0_ADDRESSES["eip155:4326"],
410
+ symbol: "USDT0",
411
+ name: "TetherToken",
412
+ version: "1",
413
+ decimals: 6,
414
+ tokenType: "eip3009",
415
+ priority: 1
416
+ }
417
+ },
418
+ // Corn Mainnet
419
+ "eip155:21000000": {
420
+ USDT0: {
421
+ address: USDT0_ADDRESSES["eip155:21000000"],
422
+ symbol: "USDT0",
423
+ name: "TetherToken",
424
+ version: "1",
425
+ decimals: 6,
426
+ tokenType: "eip3009",
427
+ priority: 1
428
+ }
429
+ },
430
+ // === Legacy USDT Networks (no EIP-3009 support) ===
431
+ // BNB Chain (BSC) - BEP-20 USDT
432
+ "eip155:56": {
433
+ USDT: {
434
+ address: USDT_LEGACY_ADDRESSES["eip155:56"],
435
+ symbol: "USDT",
436
+ name: "Tether USD",
437
+ version: "1",
438
+ decimals: 18,
439
+ // BSC USDT uses 18 decimals
440
+ tokenType: "legacy",
441
+ priority: 10
442
+ }
443
+ },
444
+ // Avalanche C-Chain
445
+ "eip155:43114": {
446
+ USDT: {
447
+ address: USDT_LEGACY_ADDRESSES["eip155:43114"],
448
+ symbol: "USDT",
449
+ name: "TetherToken",
450
+ version: "1",
451
+ decimals: 6,
452
+ tokenType: "legacy",
453
+ priority: 10
454
+ }
455
+ },
456
+ // Fantom
457
+ "eip155:250": {
458
+ USDT: {
459
+ address: USDT_LEGACY_ADDRESSES["eip155:250"],
460
+ symbol: "USDT",
461
+ name: "Frapped USDT",
462
+ version: "1",
463
+ decimals: 6,
464
+ tokenType: "legacy",
465
+ priority: 10
466
+ }
467
+ },
468
+ // Celo
469
+ "eip155:42220": {
470
+ USDT: {
471
+ address: USDT_LEGACY_ADDRESSES["eip155:42220"],
472
+ symbol: "USDT",
473
+ name: "Tether USD",
474
+ version: "1",
475
+ decimals: 18,
476
+ tokenType: "legacy",
477
+ priority: 10
478
+ }
479
+ },
480
+ // Kaia (formerly Klaytn)
481
+ "eip155:8217": {
482
+ USDT: {
483
+ address: USDT_LEGACY_ADDRESSES["eip155:8217"],
484
+ symbol: "USDT",
485
+ name: "Tether USD",
486
+ version: "1",
487
+ decimals: 6,
488
+ tokenType: "legacy",
489
+ priority: 10
490
+ }
491
+ }
492
+ };
493
+ function getTokenConfig(network, symbol) {
494
+ return TOKEN_REGISTRY[network]?.[symbol.toUpperCase()];
495
+ }
496
+ function getNetworkTokens(network) {
497
+ const tokens = TOKEN_REGISTRY[network];
498
+ if (!tokens) return [];
499
+ return Object.values(tokens).sort((a, b) => a.priority - b.priority);
500
+ }
501
+ function getDefaultToken(network) {
502
+ const tokens = getNetworkTokens(network);
503
+ return tokens[0];
504
+ }
505
+
506
+ // src/permit2/constants.ts
507
+ var PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
508
+
509
+ // src/permit2/server/scheme.ts
510
+ var Permit2EvmScheme = class {
511
+ /**
512
+ * Creates a new Permit2EvmScheme server instance.
513
+ *
514
+ * @param config - Server configuration options
515
+ */
516
+ constructor(config = {}) {
517
+ __publicField(this, "scheme", "permit2");
518
+ __publicField(this, "moneyParsers", []);
519
+ __publicField(this, "config");
520
+ this.config = config;
521
+ }
522
+ /**
523
+ * Get the list of supported EVM networks.
524
+ *
525
+ * @returns Array of supported network identifiers
526
+ */
527
+ static getSupportedNetworks() {
528
+ return Object.keys(TOKEN_REGISTRY);
529
+ }
530
+ /**
531
+ * Check if a network is supported.
532
+ *
533
+ * @param network - Network identifier to check
534
+ * @returns Whether the network is supported
535
+ */
536
+ static isNetworkSupported(network) {
537
+ return network in TOKEN_REGISTRY;
538
+ }
539
+ /**
540
+ * Register a custom money parser for price conversion.
541
+ *
542
+ * @param parser - The money parser to register
543
+ * @returns This instance for chaining
544
+ */
545
+ registerMoneyParser(parser) {
546
+ this.moneyParsers.push(parser);
547
+ return this;
548
+ }
549
+ /**
550
+ * Parse a price into an AssetAmount for the given network.
551
+ *
552
+ * @param price - The price to parse
553
+ * @param network - The target network
554
+ * @returns The parsed asset amount
555
+ */
556
+ async parsePrice(price, network) {
557
+ if (typeof price === "object" && price !== null && "amount" in price) {
558
+ if (!price.asset) {
559
+ throw new Error(`Asset address must be specified for AssetAmount on network ${network}`);
560
+ }
561
+ return {
562
+ amount: price.amount,
563
+ asset: price.asset,
564
+ extra: price.extra || {}
565
+ };
566
+ }
567
+ const amount = this.parseMoneyToDecimal(price);
568
+ for (const parser of this.moneyParsers) {
569
+ const result = await parser(amount, network);
570
+ if (result !== null) {
571
+ return result;
572
+ }
573
+ }
574
+ return this.defaultMoneyConversion(amount, network);
575
+ }
576
+ /**
577
+ * Enhance payment requirements with Permit2-specific data.
578
+ *
579
+ * @param paymentRequirements - The base payment requirements
580
+ * @param supportedKind - The supported kind metadata
581
+ * @param supportedKind.t402Version - Protocol version
582
+ * @param supportedKind.scheme - Payment scheme
583
+ * @param supportedKind.network - Target network
584
+ * @param supportedKind.extra - Extra metadata
585
+ * @param extensionKeys - Active extension keys
586
+ * @returns Enhanced payment requirements
587
+ */
588
+ enhancePaymentRequirements(paymentRequirements, supportedKind, extensionKeys) {
589
+ void supportedKind;
590
+ void extensionKeys;
591
+ if (!paymentRequirements.extra) {
592
+ paymentRequirements.extra = {};
593
+ }
594
+ paymentRequirements.extra.permit2Address = PERMIT2_ADDRESS;
595
+ return Promise.resolve(paymentRequirements);
596
+ }
597
+ /**
598
+ * Parse a money value into a decimal number.
599
+ *
600
+ * @param money - The money value to parse
601
+ * @returns The decimal amount
602
+ */
603
+ parseMoneyToDecimal(money) {
604
+ if (typeof money === "number") {
605
+ if (!Number.isFinite(money)) {
606
+ throw new Error(`Invalid money value: ${money} (must be a finite number)`);
607
+ }
608
+ return money;
609
+ }
610
+ const cleanMoney = money.replace(/^\$/, "").trim();
611
+ const amount = parseFloat(cleanMoney);
612
+ if (!Number.isFinite(amount)) {
613
+ throw new Error(`Invalid money format: ${money}`);
614
+ }
615
+ return amount;
616
+ }
617
+ /**
618
+ * Convert a decimal amount to a token amount using default network token.
619
+ *
620
+ * @param amount - The decimal amount
621
+ * @param network - The target network
622
+ * @returns The asset amount with token details
623
+ */
624
+ defaultMoneyConversion(amount, network) {
625
+ const token = this.getDefaultAsset(network);
626
+ const tokenAmount = this.convertToTokenAmount(amount.toString(), token.decimals);
627
+ return {
628
+ amount: tokenAmount,
629
+ asset: token.address,
630
+ extra: {
631
+ symbol: token.symbol,
632
+ permit2Address: PERMIT2_ADDRESS
633
+ }
634
+ };
635
+ }
636
+ /**
637
+ * Convert a decimal amount string to token smallest units.
638
+ *
639
+ * @param decimalAmount - The decimal amount as a string
640
+ * @param decimals - The token's decimal places
641
+ * @returns The amount in smallest units
642
+ */
643
+ convertToTokenAmount(decimalAmount, decimals) {
644
+ if (!/^-?\d+(\.\d+)?$/.test(decimalAmount)) {
645
+ throw new Error(`Invalid amount format: ${decimalAmount}`);
646
+ }
647
+ const [wholePart, fracPart = ""] = decimalAmount.split(".");
648
+ const paddedFrac = fracPart.padEnd(decimals, "0").slice(0, decimals);
649
+ const combined = wholePart + paddedFrac;
650
+ const result = combined.replace(/^0+/, "") || "0";
651
+ return result;
652
+ }
653
+ /**
654
+ * Get the default token asset for a network.
655
+ *
656
+ * @param network - The target network
657
+ * @returns The token configuration
658
+ */
659
+ getDefaultAsset(network) {
660
+ if (this.config.preferredToken) {
661
+ const preferred = getTokenConfig(network, this.config.preferredToken);
662
+ if (preferred) return preferred;
663
+ }
664
+ const defaultToken = getDefaultToken(network);
665
+ if (defaultToken) return defaultToken;
666
+ throw new Error(`No tokens configured for network ${network}`);
667
+ }
668
+ };
669
+
670
+ // src/permit2/server/register.ts
671
+ function registerPermit2EvmScheme(server, config = {}) {
672
+ if (config.networks && config.networks.length > 0) {
673
+ config.networks.forEach((network) => {
674
+ server.register(network, new Permit2EvmScheme());
675
+ });
676
+ } else {
677
+ server.register("eip155:*", new Permit2EvmScheme());
678
+ }
679
+ return server;
680
+ }
681
+ // Annotate the CommonJS export names for ESM import in node:
682
+ 0 && (module.exports = {
683
+ Permit2EvmScheme,
684
+ registerPermit2EvmScheme
685
+ });
686
+ //# sourceMappingURL=index.js.map