@t402/evm 2.6.1 → 2.7.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 (37) hide show
  1. package/dist/cjs/constants-05D7IZJA.d.ts +136 -0
  2. package/dist/cjs/permit2/index.d.ts +1 -137
  3. package/dist/cjs/permit2-proxy/client/index.d.ts +83 -0
  4. package/dist/cjs/permit2-proxy/client/index.js +182 -0
  5. package/dist/cjs/permit2-proxy/client/index.js.map +1 -0
  6. package/dist/cjs/permit2-proxy/facilitator/index.d.ts +93 -0
  7. package/dist/cjs/permit2-proxy/facilitator/index.js +368 -0
  8. package/dist/cjs/permit2-proxy/facilitator/index.js.map +1 -0
  9. package/dist/cjs/permit2-proxy/index.d.ts +344 -0
  10. package/dist/cjs/permit2-proxy/index.js +1274 -0
  11. package/dist/cjs/permit2-proxy/index.js.map +1 -0
  12. package/dist/cjs/permit2-proxy/server/index.d.ts +130 -0
  13. package/dist/cjs/permit2-proxy/server/index.js +695 -0
  14. package/dist/cjs/permit2-proxy/server/index.js.map +1 -0
  15. package/dist/esm/chunk-A2U6NWHQ.mjs +199 -0
  16. package/dist/esm/chunk-A2U6NWHQ.mjs.map +1 -0
  17. package/dist/esm/chunk-HUUYTNV2.mjs +138 -0
  18. package/dist/esm/chunk-HUUYTNV2.mjs.map +1 -0
  19. package/dist/esm/chunk-THXENBBU.mjs +251 -0
  20. package/dist/esm/chunk-THXENBBU.mjs.map +1 -0
  21. package/dist/esm/chunk-UK2POASM.mjs +204 -0
  22. package/dist/esm/chunk-UK2POASM.mjs.map +1 -0
  23. package/dist/esm/constants-05D7IZJA.d.mts +136 -0
  24. package/dist/esm/permit2/index.d.mts +1 -137
  25. package/dist/esm/permit2-proxy/client/index.d.mts +83 -0
  26. package/dist/esm/permit2-proxy/client/index.mjs +12 -0
  27. package/dist/esm/permit2-proxy/client/index.mjs.map +1 -0
  28. package/dist/esm/permit2-proxy/facilitator/index.d.mts +93 -0
  29. package/dist/esm/permit2-proxy/facilitator/index.mjs +12 -0
  30. package/dist/esm/permit2-proxy/facilitator/index.mjs.map +1 -0
  31. package/dist/esm/permit2-proxy/index.d.mts +344 -0
  32. package/dist/esm/permit2-proxy/index.mjs +45 -0
  33. package/dist/esm/permit2-proxy/index.mjs.map +1 -0
  34. package/dist/esm/permit2-proxy/server/index.d.mts +130 -0
  35. package/dist/esm/permit2-proxy/server/index.mjs +13 -0
  36. package/dist/esm/permit2-proxy/server/index.mjs.map +1 -0
  37. package/package.json +43 -3
@@ -0,0 +1,695 @@
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-proxy/server/index.ts
23
+ var server_exports = {};
24
+ __export(server_exports, {
25
+ Permit2ProxyEvmScheme: () => Permit2ProxyEvmScheme,
26
+ registerPermit2ProxyEvmScheme: () => registerPermit2ProxyEvmScheme
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-proxy/constants.ts
510
+ var SCHEME_PERMIT2_PROXY = "permit2-proxy";
511
+ var T402_EXACT_PERMIT2_PROXY = "0x0000000000000000000000000000000000000000";
512
+ var T402_UPTO_PERMIT2_PROXY = "0x0000000000000000000000000000000000000000";
513
+
514
+ // src/permit2-proxy/server/scheme.ts
515
+ var Permit2ProxyEvmScheme = class {
516
+ /**
517
+ * Creates a new Permit2ProxyEvmScheme server instance.
518
+ *
519
+ * @param config - Server configuration options
520
+ */
521
+ constructor(config = {}) {
522
+ __publicField(this, "scheme", SCHEME_PERMIT2_PROXY);
523
+ __publicField(this, "moneyParsers", []);
524
+ __publicField(this, "config");
525
+ this.config = config;
526
+ }
527
+ /**
528
+ * Get the list of supported EVM networks.
529
+ *
530
+ * @returns Array of supported network identifiers
531
+ */
532
+ static getSupportedNetworks() {
533
+ return Object.keys(TOKEN_REGISTRY);
534
+ }
535
+ /**
536
+ * Check if a network is supported.
537
+ *
538
+ * @param network - Network identifier to check
539
+ * @returns Whether the network is supported
540
+ */
541
+ static isNetworkSupported(network) {
542
+ return network in TOKEN_REGISTRY;
543
+ }
544
+ /**
545
+ * Register a custom money parser for price conversion.
546
+ *
547
+ * @param parser - The money parser to register
548
+ * @returns This instance for chaining
549
+ */
550
+ registerMoneyParser(parser) {
551
+ this.moneyParsers.push(parser);
552
+ return this;
553
+ }
554
+ /**
555
+ * Parse a price into an AssetAmount for the given network.
556
+ *
557
+ * @param price - The price to parse
558
+ * @param network - The target network
559
+ * @returns The parsed asset amount
560
+ */
561
+ async parsePrice(price, network) {
562
+ if (typeof price === "object" && price !== null && "amount" in price) {
563
+ if (!price.asset) {
564
+ throw new Error(`Asset address must be specified for AssetAmount on network ${network}`);
565
+ }
566
+ return {
567
+ amount: price.amount,
568
+ asset: price.asset,
569
+ extra: price.extra || {}
570
+ };
571
+ }
572
+ const amount = this.parseMoneyToDecimal(price);
573
+ for (const parser of this.moneyParsers) {
574
+ const result = await parser(amount, network);
575
+ if (result !== null) {
576
+ return result;
577
+ }
578
+ }
579
+ return this.defaultMoneyConversion(amount, network);
580
+ }
581
+ /**
582
+ * Enhance payment requirements with Permit2 Proxy-specific data.
583
+ *
584
+ * @param paymentRequirements - The base payment requirements
585
+ * @param supportedKind - The supported kind metadata
586
+ * @param supportedKind.t402Version - Protocol version
587
+ * @param supportedKind.scheme - Payment scheme
588
+ * @param supportedKind.network - Target network
589
+ * @param supportedKind.extra - Extra metadata
590
+ * @param extensionKeys - Active extension keys
591
+ * @returns Enhanced payment requirements
592
+ */
593
+ enhancePaymentRequirements(paymentRequirements, supportedKind, extensionKeys) {
594
+ void extensionKeys;
595
+ if (!paymentRequirements.extra) {
596
+ paymentRequirements.extra = {};
597
+ }
598
+ paymentRequirements.extra.permit2Address = PERMIT2_ADDRESS;
599
+ paymentRequirements.extra.exactProxyAddress = this.config.exactProxyAddress || T402_EXACT_PERMIT2_PROXY;
600
+ paymentRequirements.extra.uptoProxyAddress = this.config.uptoProxyAddress || T402_UPTO_PERMIT2_PROXY;
601
+ if (supportedKind.extra?.facilitator) {
602
+ paymentRequirements.extra.facilitator = supportedKind.extra.facilitator;
603
+ }
604
+ return Promise.resolve(paymentRequirements);
605
+ }
606
+ /**
607
+ * Parse a money value into a decimal number.
608
+ *
609
+ * @param money - The money value to parse
610
+ * @returns The decimal amount
611
+ */
612
+ parseMoneyToDecimal(money) {
613
+ if (typeof money === "number") {
614
+ if (!Number.isFinite(money)) {
615
+ throw new Error(`Invalid money value: ${money} (must be a finite number)`);
616
+ }
617
+ return money;
618
+ }
619
+ const cleanMoney = money.replace(/^\$/, "").trim();
620
+ const amount = parseFloat(cleanMoney);
621
+ if (!Number.isFinite(amount)) {
622
+ throw new Error(`Invalid money format: ${money}`);
623
+ }
624
+ return amount;
625
+ }
626
+ /**
627
+ * Convert a decimal amount to a token amount using default network token.
628
+ *
629
+ * @param amount - The decimal amount
630
+ * @param network - The target network
631
+ * @returns The asset amount with token details
632
+ */
633
+ defaultMoneyConversion(amount, network) {
634
+ const token = this.getDefaultAsset(network);
635
+ const tokenAmount = this.convertToTokenAmount(amount.toString(), token.decimals);
636
+ return {
637
+ amount: tokenAmount,
638
+ asset: token.address,
639
+ extra: {
640
+ symbol: token.symbol,
641
+ permit2Address: PERMIT2_ADDRESS
642
+ }
643
+ };
644
+ }
645
+ /**
646
+ * Convert a decimal amount string to token smallest units.
647
+ *
648
+ * @param decimalAmount - The decimal amount as a string
649
+ * @param decimals - The token's decimal places
650
+ * @returns The amount in smallest units
651
+ */
652
+ convertToTokenAmount(decimalAmount, decimals) {
653
+ if (!/^-?\d+(\.\d+)?$/.test(decimalAmount)) {
654
+ throw new Error(`Invalid amount format: ${decimalAmount}`);
655
+ }
656
+ const [wholePart, fracPart = ""] = decimalAmount.split(".");
657
+ const paddedFrac = fracPart.padEnd(decimals, "0").slice(0, decimals);
658
+ const combined = wholePart + paddedFrac;
659
+ const result = combined.replace(/^0+/, "") || "0";
660
+ return result;
661
+ }
662
+ /**
663
+ * Get the default token asset for a network.
664
+ *
665
+ * @param network - The target network
666
+ * @returns The token configuration
667
+ */
668
+ getDefaultAsset(network) {
669
+ if (this.config.preferredToken) {
670
+ const preferred = getTokenConfig(network, this.config.preferredToken);
671
+ if (preferred) return preferred;
672
+ }
673
+ const defaultToken = getDefaultToken(network);
674
+ if (defaultToken) return defaultToken;
675
+ throw new Error(`No tokens configured for network ${network}`);
676
+ }
677
+ };
678
+
679
+ // src/permit2-proxy/server/register.ts
680
+ function registerPermit2ProxyEvmScheme(server, config = {}) {
681
+ if (config.networks && config.networks.length > 0) {
682
+ config.networks.forEach((network) => {
683
+ server.register(network, new Permit2ProxyEvmScheme(config.schemeConfig));
684
+ });
685
+ } else {
686
+ server.register("eip155:*", new Permit2ProxyEvmScheme(config.schemeConfig));
687
+ }
688
+ return server;
689
+ }
690
+ // Annotate the CommonJS export names for ESM import in node:
691
+ 0 && (module.exports = {
692
+ Permit2ProxyEvmScheme,
693
+ registerPermit2ProxyEvmScheme
694
+ });
695
+ //# sourceMappingURL=index.js.map