@t402/evm 2.0.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.
- package/README.md +183 -0
- package/dist/cjs/exact/client/index.d.ts +53 -0
- package/dist/cjs/exact/client/index.js +270 -0
- package/dist/cjs/exact/client/index.js.map +1 -0
- package/dist/cjs/exact/facilitator/index.d.ts +118 -0
- package/dist/cjs/exact/facilitator/index.js +735 -0
- package/dist/cjs/exact/facilitator/index.js.map +1 -0
- package/dist/cjs/exact/server/index.d.ts +36 -0
- package/dist/cjs/exact/server/index.js +438 -0
- package/dist/cjs/exact/server/index.js.map +1 -0
- package/dist/cjs/exact/v1/client/index.d.ts +37 -0
- package/dist/cjs/exact/v1/client/index.js +147 -0
- package/dist/cjs/exact/v1/client/index.js.map +1 -0
- package/dist/cjs/exact/v1/facilitator/index.d.ts +62 -0
- package/dist/cjs/exact/v1/facilitator/index.js +401 -0
- package/dist/cjs/exact/v1/facilitator/index.js.map +1 -0
- package/dist/cjs/index.d.ts +1537 -0
- package/dist/cjs/index.js +2368 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/scheme-C6uD7PdY.d.ts +130 -0
- package/dist/cjs/scheme-OojTBKAz.d.ts +35 -0
- package/dist/cjs/scheme-yqGaK9rK.d.ts +130 -0
- package/dist/cjs/signer-BkcAzwYi.d.ts +79 -0
- package/dist/cjs/v1/index.d.ts +7 -0
- package/dist/cjs/v1/index.js +171 -0
- package/dist/cjs/v1/index.js.map +1 -0
- package/dist/esm/chunk-ACDQ5QNT.mjs +305 -0
- package/dist/esm/chunk-ACDQ5QNT.mjs.map +1 -0
- package/dist/esm/chunk-JBWWBRYY.mjs +92 -0
- package/dist/esm/chunk-JBWWBRYY.mjs.map +1 -0
- package/dist/esm/chunk-LGSG73NJ.mjs +88 -0
- package/dist/esm/chunk-LGSG73NJ.mjs.map +1 -0
- package/dist/esm/chunk-OEXW2OK2.mjs +251 -0
- package/dist/esm/chunk-OEXW2OK2.mjs.map +1 -0
- package/dist/esm/chunk-QLXM7BIB.mjs +23 -0
- package/dist/esm/chunk-QLXM7BIB.mjs.map +1 -0
- package/dist/esm/chunk-XYKAO6KJ.mjs +141 -0
- package/dist/esm/chunk-XYKAO6KJ.mjs.map +1 -0
- package/dist/esm/exact/client/index.d.mts +53 -0
- package/dist/esm/exact/client/index.mjs +36 -0
- package/dist/esm/exact/client/index.mjs.map +1 -0
- package/dist/esm/exact/facilitator/index.d.mts +118 -0
- package/dist/esm/exact/facilitator/index.mjs +324 -0
- package/dist/esm/exact/facilitator/index.mjs.map +1 -0
- package/dist/esm/exact/server/index.d.mts +36 -0
- package/dist/esm/exact/server/index.mjs +218 -0
- package/dist/esm/exact/server/index.mjs.map +1 -0
- package/dist/esm/exact/v1/client/index.d.mts +37 -0
- package/dist/esm/exact/v1/client/index.mjs +8 -0
- package/dist/esm/exact/v1/client/index.mjs.map +1 -0
- package/dist/esm/exact/v1/facilitator/index.d.mts +62 -0
- package/dist/esm/exact/v1/facilitator/index.mjs +8 -0
- package/dist/esm/exact/v1/facilitator/index.mjs.map +1 -0
- package/dist/esm/index.d.mts +1537 -0
- package/dist/esm/index.mjs +1875 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/scheme-D4mOqq9l.d.mts +35 -0
- package/dist/esm/scheme-yqGaK9rK.d.mts +130 -0
- package/dist/esm/signer-BkcAzwYi.d.mts +79 -0
- package/dist/esm/v1/index.d.mts +7 -0
- package/dist/esm/v1/index.mjs +13 -0
- package/dist/esm/v1/index.mjs.map +1 -0
- package/package.json +127 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
// src/tokens.ts
|
|
2
|
+
var USDT0_ADDRESSES = {
|
|
3
|
+
// Ethereum Mainnet - OFT Adapter (bridge endpoint)
|
|
4
|
+
"eip155:1": "0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee",
|
|
5
|
+
// Arbitrum One - Native USDT0
|
|
6
|
+
"eip155:42161": "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9",
|
|
7
|
+
// Ink Mainnet
|
|
8
|
+
"eip155:57073": "0x0200C29006150606B650577BBE7B6248F58470c1",
|
|
9
|
+
// Berachain Mainnet
|
|
10
|
+
"eip155:80094": "0x779Ded0c9e1022225f8E0630b35a9b54bE713736",
|
|
11
|
+
// Unichain Mainnet
|
|
12
|
+
"eip155:130": "0x588ce4F028D8e7B53B687865d6A67b3A54C75518"
|
|
13
|
+
};
|
|
14
|
+
var USDC_ADDRESSES = {
|
|
15
|
+
// Ethereum Mainnet
|
|
16
|
+
"eip155:1": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
|
|
17
|
+
// Base Mainnet
|
|
18
|
+
"eip155:8453": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
|
|
19
|
+
// Base Sepolia (testnet)
|
|
20
|
+
"eip155:84532": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
|
|
21
|
+
// Sepolia (testnet)
|
|
22
|
+
"eip155:11155111": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
|
|
23
|
+
// Arbitrum One
|
|
24
|
+
"eip155:42161": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
25
|
+
// Polygon Mainnet
|
|
26
|
+
"eip155:137": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
|
|
27
|
+
};
|
|
28
|
+
var USDT_LEGACY_ADDRESSES = {
|
|
29
|
+
// Ethereum Mainnet
|
|
30
|
+
"eip155:1": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
|
|
31
|
+
// Polygon Mainnet
|
|
32
|
+
"eip155:137": "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"
|
|
33
|
+
};
|
|
34
|
+
var TOKEN_REGISTRY = {
|
|
35
|
+
// Ethereum Mainnet
|
|
36
|
+
"eip155:1": {
|
|
37
|
+
USDT0: {
|
|
38
|
+
address: USDT0_ADDRESSES["eip155:1"],
|
|
39
|
+
symbol: "USDT0",
|
|
40
|
+
name: "TetherToken",
|
|
41
|
+
version: "1",
|
|
42
|
+
decimals: 6,
|
|
43
|
+
tokenType: "eip3009",
|
|
44
|
+
priority: 1
|
|
45
|
+
},
|
|
46
|
+
USDC: {
|
|
47
|
+
address: USDC_ADDRESSES["eip155:1"],
|
|
48
|
+
symbol: "USDC",
|
|
49
|
+
name: "USD Coin",
|
|
50
|
+
version: "2",
|
|
51
|
+
decimals: 6,
|
|
52
|
+
tokenType: "eip3009",
|
|
53
|
+
priority: 2
|
|
54
|
+
},
|
|
55
|
+
USDT: {
|
|
56
|
+
address: USDT_LEGACY_ADDRESSES["eip155:1"],
|
|
57
|
+
symbol: "USDT",
|
|
58
|
+
name: "TetherUSD",
|
|
59
|
+
version: "1",
|
|
60
|
+
decimals: 6,
|
|
61
|
+
tokenType: "legacy",
|
|
62
|
+
priority: 10
|
|
63
|
+
// Lower priority due to legacy flow
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
// Arbitrum One
|
|
67
|
+
"eip155:42161": {
|
|
68
|
+
USDT0: {
|
|
69
|
+
address: USDT0_ADDRESSES["eip155:42161"],
|
|
70
|
+
symbol: "USDT0",
|
|
71
|
+
name: "TetherToken",
|
|
72
|
+
version: "1",
|
|
73
|
+
decimals: 6,
|
|
74
|
+
tokenType: "eip3009",
|
|
75
|
+
priority: 1
|
|
76
|
+
},
|
|
77
|
+
USDC: {
|
|
78
|
+
address: USDC_ADDRESSES["eip155:42161"],
|
|
79
|
+
symbol: "USDC",
|
|
80
|
+
name: "USD Coin",
|
|
81
|
+
version: "2",
|
|
82
|
+
decimals: 6,
|
|
83
|
+
tokenType: "eip3009",
|
|
84
|
+
priority: 2
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
// Ink Mainnet
|
|
88
|
+
"eip155:57073": {
|
|
89
|
+
USDT0: {
|
|
90
|
+
address: USDT0_ADDRESSES["eip155:57073"],
|
|
91
|
+
symbol: "USDT0",
|
|
92
|
+
name: "TetherToken",
|
|
93
|
+
version: "1",
|
|
94
|
+
decimals: 6,
|
|
95
|
+
tokenType: "eip3009",
|
|
96
|
+
priority: 1
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
// Berachain Mainnet
|
|
100
|
+
"eip155:80094": {
|
|
101
|
+
USDT0: {
|
|
102
|
+
address: USDT0_ADDRESSES["eip155:80094"],
|
|
103
|
+
symbol: "USDT0",
|
|
104
|
+
name: "TetherToken",
|
|
105
|
+
version: "1",
|
|
106
|
+
decimals: 6,
|
|
107
|
+
tokenType: "eip3009",
|
|
108
|
+
priority: 1
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
// Unichain Mainnet
|
|
112
|
+
"eip155:130": {
|
|
113
|
+
USDT0: {
|
|
114
|
+
address: USDT0_ADDRESSES["eip155:130"],
|
|
115
|
+
symbol: "USDT0",
|
|
116
|
+
name: "TetherToken",
|
|
117
|
+
version: "1",
|
|
118
|
+
decimals: 6,
|
|
119
|
+
tokenType: "eip3009",
|
|
120
|
+
priority: 1
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
// Base Mainnet
|
|
124
|
+
"eip155:8453": {
|
|
125
|
+
USDC: {
|
|
126
|
+
address: USDC_ADDRESSES["eip155:8453"],
|
|
127
|
+
symbol: "USDC",
|
|
128
|
+
name: "USD Coin",
|
|
129
|
+
version: "2",
|
|
130
|
+
decimals: 6,
|
|
131
|
+
tokenType: "eip3009",
|
|
132
|
+
priority: 2
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
// Base Sepolia (testnet)
|
|
136
|
+
"eip155:84532": {
|
|
137
|
+
USDC: {
|
|
138
|
+
address: USDC_ADDRESSES["eip155:84532"],
|
|
139
|
+
symbol: "USDC",
|
|
140
|
+
name: "USDC",
|
|
141
|
+
version: "2",
|
|
142
|
+
decimals: 6,
|
|
143
|
+
tokenType: "eip3009",
|
|
144
|
+
priority: 2
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
// Sepolia (testnet)
|
|
148
|
+
"eip155:11155111": {
|
|
149
|
+
USDC: {
|
|
150
|
+
address: USDC_ADDRESSES["eip155:11155111"],
|
|
151
|
+
symbol: "USDC",
|
|
152
|
+
name: "USDC",
|
|
153
|
+
version: "2",
|
|
154
|
+
decimals: 6,
|
|
155
|
+
tokenType: "eip3009",
|
|
156
|
+
priority: 2
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
// Polygon Mainnet
|
|
160
|
+
"eip155:137": {
|
|
161
|
+
USDC: {
|
|
162
|
+
address: USDC_ADDRESSES["eip155:137"],
|
|
163
|
+
symbol: "USDC",
|
|
164
|
+
name: "USD Coin",
|
|
165
|
+
version: "2",
|
|
166
|
+
decimals: 6,
|
|
167
|
+
tokenType: "eip3009",
|
|
168
|
+
priority: 2
|
|
169
|
+
},
|
|
170
|
+
USDT: {
|
|
171
|
+
address: USDT_LEGACY_ADDRESSES["eip155:137"],
|
|
172
|
+
symbol: "USDT",
|
|
173
|
+
name: "TetherUSD",
|
|
174
|
+
version: "1",
|
|
175
|
+
decimals: 6,
|
|
176
|
+
tokenType: "legacy",
|
|
177
|
+
priority: 10
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
var TOKEN_PRIORITY = {
|
|
182
|
+
USDT0: 1,
|
|
183
|
+
// Highest priority - gasless, cross-chain
|
|
184
|
+
USDC: 2,
|
|
185
|
+
// Second - wide support, EIP-3009
|
|
186
|
+
USDT: 10,
|
|
187
|
+
// Lower - requires approval transaction
|
|
188
|
+
DAI: 5
|
|
189
|
+
// Medium - good support
|
|
190
|
+
};
|
|
191
|
+
function getTokenConfig(network, symbol) {
|
|
192
|
+
return TOKEN_REGISTRY[network]?.[symbol.toUpperCase()];
|
|
193
|
+
}
|
|
194
|
+
function getNetworkTokens(network) {
|
|
195
|
+
const tokens = TOKEN_REGISTRY[network];
|
|
196
|
+
if (!tokens) return [];
|
|
197
|
+
return Object.values(tokens).sort((a, b) => a.priority - b.priority);
|
|
198
|
+
}
|
|
199
|
+
function getDefaultToken(network) {
|
|
200
|
+
const tokens = getNetworkTokens(network);
|
|
201
|
+
return tokens[0];
|
|
202
|
+
}
|
|
203
|
+
function getTokenByAddress(network, address) {
|
|
204
|
+
const tokens = TOKEN_REGISTRY[network];
|
|
205
|
+
if (!tokens) return void 0;
|
|
206
|
+
const lowerAddress = address.toLowerCase();
|
|
207
|
+
return Object.values(tokens).find((t) => t.address.toLowerCase() === lowerAddress);
|
|
208
|
+
}
|
|
209
|
+
function supportsEIP3009(network, symbol) {
|
|
210
|
+
const config = getTokenConfig(network, symbol);
|
|
211
|
+
return config?.tokenType === "eip3009";
|
|
212
|
+
}
|
|
213
|
+
function getNetworksForToken(symbol) {
|
|
214
|
+
const networks = [];
|
|
215
|
+
for (const [network, tokens] of Object.entries(TOKEN_REGISTRY)) {
|
|
216
|
+
if (tokens[symbol.toUpperCase()]) {
|
|
217
|
+
networks.push(network);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return networks;
|
|
221
|
+
}
|
|
222
|
+
function getUsdt0Networks() {
|
|
223
|
+
return getNetworksForToken("USDT0");
|
|
224
|
+
}
|
|
225
|
+
function getEIP712Domain(network, tokenAddress, chainId) {
|
|
226
|
+
const token = getTokenByAddress(network, tokenAddress);
|
|
227
|
+
if (!token) return void 0;
|
|
228
|
+
return {
|
|
229
|
+
name: token.name,
|
|
230
|
+
version: token.version,
|
|
231
|
+
chainId,
|
|
232
|
+
verifyingContract: token.address
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export {
|
|
237
|
+
USDT0_ADDRESSES,
|
|
238
|
+
USDC_ADDRESSES,
|
|
239
|
+
USDT_LEGACY_ADDRESSES,
|
|
240
|
+
TOKEN_REGISTRY,
|
|
241
|
+
TOKEN_PRIORITY,
|
|
242
|
+
getTokenConfig,
|
|
243
|
+
getNetworkTokens,
|
|
244
|
+
getDefaultToken,
|
|
245
|
+
getTokenByAddress,
|
|
246
|
+
supportsEIP3009,
|
|
247
|
+
getNetworksForToken,
|
|
248
|
+
getUsdt0Networks,
|
|
249
|
+
getEIP712Domain
|
|
250
|
+
};
|
|
251
|
+
//# sourceMappingURL=chunk-OEXW2OK2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/tokens.ts"],"sourcesContent":["/**\n * Token configuration for T402 EVM payments\n *\n * This module provides comprehensive token definitions including:\n * - USDT0 (Tether's new omnichain token with EIP-3009 support)\n * - USDC (USD Coin with EIP-3009 support)\n * - Legacy tokens configuration\n */\n\nimport type { Address } from \"viem\";\n\n/**\n * Token type classification for payment scheme selection\n */\nexport type TokenType = \"eip3009\" | \"legacy\";\n\n/**\n * Token configuration with EIP-712 domain parameters\n */\nexport interface TokenConfig {\n /** Token contract address */\n address: Address;\n /** Token symbol (e.g., \"USDT0\", \"USDC\") */\n symbol: string;\n /** EIP-712 domain name for signing */\n name: string;\n /** EIP-712 domain version for signing */\n version: string;\n /** Number of decimal places */\n decimals: number;\n /** Token type for scheme selection */\n tokenType: TokenType;\n /** Payment priority (lower = higher priority) */\n priority: number;\n}\n\n/**\n * Network token registry mapping network -> symbol -> config\n */\nexport type NetworkTokenRegistry = Record<string, Record<string, TokenConfig>>;\n\n/**\n * USDT0 Contract Addresses by Network\n * Source: https://docs.tether.io/usdt0/integration-guide/deployed-contracts\n *\n * USDT0 is Tether's new omnichain token using LayerZero OFT standard.\n * Key features:\n * - Supports EIP-3009 transferWithAuthorization (gasless transfers)\n * - Supports EIP-2612 permit\n * - Native cross-chain via LayerZero\n */\nexport const USDT0_ADDRESSES: Record<string, Address> = {\n // Ethereum Mainnet - OFT Adapter (bridge endpoint)\n \"eip155:1\": \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n // Arbitrum One - Native USDT0\n \"eip155:42161\": \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n // Ink Mainnet\n \"eip155:57073\": \"0x0200C29006150606B650577BBE7B6248F58470c1\",\n // Berachain Mainnet\n \"eip155:80094\": \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n // Unichain Mainnet\n \"eip155:130\": \"0x588ce4F028D8e7B53B687865d6A67b3A54C75518\",\n};\n\n/**\n * USDC Contract Addresses by Network\n * Native USDC with EIP-3009 support\n */\nexport const USDC_ADDRESSES: Record<string, Address> = {\n // Ethereum Mainnet\n \"eip155:1\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n // Base Mainnet\n \"eip155:8453\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n // Base Sepolia (testnet)\n \"eip155:84532\": \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n // Sepolia (testnet)\n \"eip155:11155111\": \"0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238\",\n // Arbitrum One\n \"eip155:42161\": \"0xaf88d065e77c8cC2239327C5EDb3A432268e5831\",\n // Polygon Mainnet\n \"eip155:137\": \"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\n};\n\n/**\n * Traditional USDT Addresses (Legacy - no EIP-3009 support)\n * These require the approve + transferFrom pattern\n */\nexport const USDT_LEGACY_ADDRESSES: Record<string, Address> = {\n // Ethereum Mainnet\n \"eip155:1\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n // Polygon Mainnet\n \"eip155:137\": \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n};\n\n/**\n * Complete token registry with all supported tokens per network\n */\nexport const TOKEN_REGISTRY: NetworkTokenRegistry = {\n // Ethereum Mainnet\n \"eip155:1\": {\n USDT0: {\n address: USDT0_ADDRESSES[\"eip155:1\"],\n symbol: \"USDT0\",\n name: \"TetherToken\",\n version: \"1\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 1,\n },\n USDC: {\n address: USDC_ADDRESSES[\"eip155:1\"],\n symbol: \"USDC\",\n name: \"USD Coin\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n USDT: {\n address: USDT_LEGACY_ADDRESSES[\"eip155:1\"],\n symbol: \"USDT\",\n name: \"TetherUSD\",\n version: \"1\",\n decimals: 6,\n tokenType: \"legacy\",\n priority: 10, // Lower priority due to legacy flow\n },\n },\n\n // Arbitrum One\n \"eip155:42161\": {\n USDT0: {\n address: USDT0_ADDRESSES[\"eip155:42161\"],\n symbol: \"USDT0\",\n name: \"TetherToken\",\n version: \"1\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 1,\n },\n USDC: {\n address: USDC_ADDRESSES[\"eip155:42161\"],\n symbol: \"USDC\",\n name: \"USD Coin\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n },\n\n // Ink Mainnet\n \"eip155:57073\": {\n USDT0: {\n address: USDT0_ADDRESSES[\"eip155:57073\"],\n symbol: \"USDT0\",\n name: \"TetherToken\",\n version: \"1\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 1,\n },\n },\n\n // Berachain Mainnet\n \"eip155:80094\": {\n USDT0: {\n address: USDT0_ADDRESSES[\"eip155:80094\"],\n symbol: \"USDT0\",\n name: \"TetherToken\",\n version: \"1\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 1,\n },\n },\n\n // Unichain Mainnet\n \"eip155:130\": {\n USDT0: {\n address: USDT0_ADDRESSES[\"eip155:130\"],\n symbol: \"USDT0\",\n name: \"TetherToken\",\n version: \"1\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 1,\n },\n },\n\n // Base Mainnet\n \"eip155:8453\": {\n USDC: {\n address: USDC_ADDRESSES[\"eip155:8453\"],\n symbol: \"USDC\",\n name: \"USD Coin\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n },\n\n // Base Sepolia (testnet)\n \"eip155:84532\": {\n USDC: {\n address: USDC_ADDRESSES[\"eip155:84532\"],\n symbol: \"USDC\",\n name: \"USDC\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n },\n\n // Sepolia (testnet)\n \"eip155:11155111\": {\n USDC: {\n address: USDC_ADDRESSES[\"eip155:11155111\"],\n symbol: \"USDC\",\n name: \"USDC\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n },\n\n // Polygon Mainnet\n \"eip155:137\": {\n USDC: {\n address: USDC_ADDRESSES[\"eip155:137\"],\n symbol: \"USDC\",\n name: \"USD Coin\",\n version: \"2\",\n decimals: 6,\n tokenType: \"eip3009\",\n priority: 2,\n },\n USDT: {\n address: USDT_LEGACY_ADDRESSES[\"eip155:137\"],\n symbol: \"USDT\",\n name: \"TetherUSD\",\n version: \"1\",\n decimals: 6,\n tokenType: \"legacy\",\n priority: 10,\n },\n },\n};\n\n/**\n * Token priority for payment method selection\n * Lower number = higher priority\n */\nexport const TOKEN_PRIORITY: Record<string, number> = {\n USDT0: 1, // Highest priority - gasless, cross-chain\n USDC: 2, // Second - wide support, EIP-3009\n USDT: 10, // Lower - requires approval transaction\n DAI: 5, // Medium - good support\n};\n\n/**\n * Get token configuration for a specific token on a network\n */\nexport function getTokenConfig(network: string, symbol: string): TokenConfig | undefined {\n return TOKEN_REGISTRY[network]?.[symbol.toUpperCase()];\n}\n\n/**\n * Get all tokens available on a network\n */\nexport function getNetworkTokens(network: string): TokenConfig[] {\n const tokens = TOKEN_REGISTRY[network];\n if (!tokens) return [];\n return Object.values(tokens).sort((a, b) => a.priority - b.priority);\n}\n\n/**\n * Get the default/preferred token for a network\n * Prefers USDT0 > USDC > others based on priority\n */\nexport function getDefaultToken(network: string): TokenConfig | undefined {\n const tokens = getNetworkTokens(network);\n return tokens[0]; // Already sorted by priority\n}\n\n/**\n * Get token by contract address on a network\n */\nexport function getTokenByAddress(network: string, address: Address): TokenConfig | undefined {\n const tokens = TOKEN_REGISTRY[network];\n if (!tokens) return undefined;\n\n const lowerAddress = address.toLowerCase();\n return Object.values(tokens).find((t) => t.address.toLowerCase() === lowerAddress);\n}\n\n/**\n * Check if a token supports EIP-3009 (gasless transfers)\n */\nexport function supportsEIP3009(network: string, symbol: string): boolean {\n const config = getTokenConfig(network, symbol);\n return config?.tokenType === \"eip3009\";\n}\n\n/**\n * Get all networks that support a specific token\n */\nexport function getNetworksForToken(symbol: string): string[] {\n const networks: string[] = [];\n for (const [network, tokens] of Object.entries(TOKEN_REGISTRY)) {\n if (tokens[symbol.toUpperCase()]) {\n networks.push(network);\n }\n }\n return networks;\n}\n\n/**\n * Get USDT0 networks (primary T402 token)\n */\nexport function getUsdt0Networks(): string[] {\n return getNetworksForToken(\"USDT0\");\n}\n\n/**\n * EIP-712 domain configuration for a token\n */\nexport function getEIP712Domain(\n network: string,\n tokenAddress: Address,\n chainId: number,\n): { name: string; version: string; chainId: number; verifyingContract: Address } | undefined {\n const token = getTokenByAddress(network, tokenAddress);\n if (!token) return undefined;\n\n return {\n name: token.name,\n version: token.version,\n chainId,\n verifyingContract: token.address,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/v1/index.ts
|
|
2
|
+
var NETWORKS = [
|
|
3
|
+
"abstract",
|
|
4
|
+
"abstract-testnet",
|
|
5
|
+
"base-sepolia",
|
|
6
|
+
"base",
|
|
7
|
+
"avalanche-fuji",
|
|
8
|
+
"avalanche",
|
|
9
|
+
"iotex",
|
|
10
|
+
"sei",
|
|
11
|
+
"sei-testnet",
|
|
12
|
+
"polygon",
|
|
13
|
+
"polygon-amoy",
|
|
14
|
+
"peaq",
|
|
15
|
+
"story",
|
|
16
|
+
"educhain",
|
|
17
|
+
"skale-base-sepolia"
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
NETWORKS
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-QLXM7BIB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/v1/index.ts"],"sourcesContent":["export { ExactEvmSchemeV1 } from \"../exact/v1\";\n\nexport const NETWORKS: string[] = [\n \"abstract\",\n \"abstract-testnet\",\n \"base-sepolia\",\n \"base\",\n \"avalanche-fuji\",\n \"avalanche\",\n \"iotex\",\n \"sei\",\n \"sei-testnet\",\n \"polygon\",\n \"polygon-amoy\",\n \"peaq\",\n \"story\",\n \"educhain\",\n \"skale-base-sepolia\",\n];\n"],"mappings":";AAEO,IAAM,WAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// src/constants.ts
|
|
2
|
+
var authorizationTypes = {
|
|
3
|
+
TransferWithAuthorization: [
|
|
4
|
+
{ name: "from", type: "address" },
|
|
5
|
+
{ name: "to", type: "address" },
|
|
6
|
+
{ name: "value", type: "uint256" },
|
|
7
|
+
{ name: "validAfter", type: "uint256" },
|
|
8
|
+
{ name: "validBefore", type: "uint256" },
|
|
9
|
+
{ name: "nonce", type: "bytes32" }
|
|
10
|
+
]
|
|
11
|
+
};
|
|
12
|
+
var legacyAuthorizationTypes = {
|
|
13
|
+
LegacyTransferAuthorization: [
|
|
14
|
+
{ name: "from", type: "address" },
|
|
15
|
+
{ name: "to", type: "address" },
|
|
16
|
+
{ name: "value", type: "uint256" },
|
|
17
|
+
{ name: "validAfter", type: "uint256" },
|
|
18
|
+
{ name: "validBefore", type: "uint256" },
|
|
19
|
+
{ name: "nonce", type: "bytes32" },
|
|
20
|
+
{ name: "spender", type: "address" }
|
|
21
|
+
]
|
|
22
|
+
};
|
|
23
|
+
var eip3009ABI = [
|
|
24
|
+
{
|
|
25
|
+
inputs: [
|
|
26
|
+
{ name: "from", type: "address" },
|
|
27
|
+
{ name: "to", type: "address" },
|
|
28
|
+
{ name: "value", type: "uint256" },
|
|
29
|
+
{ name: "validAfter", type: "uint256" },
|
|
30
|
+
{ name: "validBefore", type: "uint256" },
|
|
31
|
+
{ name: "nonce", type: "bytes32" },
|
|
32
|
+
{ name: "v", type: "uint8" },
|
|
33
|
+
{ name: "r", type: "bytes32" },
|
|
34
|
+
{ name: "s", type: "bytes32" }
|
|
35
|
+
],
|
|
36
|
+
name: "transferWithAuthorization",
|
|
37
|
+
outputs: [],
|
|
38
|
+
stateMutability: "nonpayable",
|
|
39
|
+
type: "function"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
inputs: [
|
|
43
|
+
{ name: "from", type: "address" },
|
|
44
|
+
{ name: "to", type: "address" },
|
|
45
|
+
{ name: "value", type: "uint256" },
|
|
46
|
+
{ name: "validAfter", type: "uint256" },
|
|
47
|
+
{ name: "validBefore", type: "uint256" },
|
|
48
|
+
{ name: "nonce", type: "bytes32" },
|
|
49
|
+
{ name: "signature", type: "bytes" }
|
|
50
|
+
],
|
|
51
|
+
name: "transferWithAuthorization",
|
|
52
|
+
outputs: [],
|
|
53
|
+
stateMutability: "nonpayable",
|
|
54
|
+
type: "function"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
inputs: [{ name: "account", type: "address" }],
|
|
58
|
+
name: "balanceOf",
|
|
59
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
60
|
+
stateMutability: "view",
|
|
61
|
+
type: "function"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
inputs: [],
|
|
65
|
+
name: "version",
|
|
66
|
+
outputs: [{ name: "", type: "string" }],
|
|
67
|
+
stateMutability: "view",
|
|
68
|
+
type: "function"
|
|
69
|
+
}
|
|
70
|
+
];
|
|
71
|
+
var erc20LegacyABI = [
|
|
72
|
+
{
|
|
73
|
+
inputs: [{ name: "account", type: "address" }],
|
|
74
|
+
name: "balanceOf",
|
|
75
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
76
|
+
stateMutability: "view",
|
|
77
|
+
type: "function"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
inputs: [
|
|
81
|
+
{ name: "owner", type: "address" },
|
|
82
|
+
{ name: "spender", type: "address" }
|
|
83
|
+
],
|
|
84
|
+
name: "allowance",
|
|
85
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
86
|
+
stateMutability: "view",
|
|
87
|
+
type: "function"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
inputs: [
|
|
91
|
+
{ name: "spender", type: "address" },
|
|
92
|
+
{ name: "amount", type: "uint256" }
|
|
93
|
+
],
|
|
94
|
+
name: "approve",
|
|
95
|
+
outputs: [{ name: "", type: "bool" }],
|
|
96
|
+
stateMutability: "nonpayable",
|
|
97
|
+
type: "function"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
inputs: [
|
|
101
|
+
{ name: "from", type: "address" },
|
|
102
|
+
{ name: "to", type: "address" },
|
|
103
|
+
{ name: "amount", type: "uint256" }
|
|
104
|
+
],
|
|
105
|
+
name: "transferFrom",
|
|
106
|
+
outputs: [{ name: "", type: "bool" }],
|
|
107
|
+
stateMutability: "nonpayable",
|
|
108
|
+
type: "function"
|
|
109
|
+
}
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
// src/utils.ts
|
|
113
|
+
import { toHex } from "viem";
|
|
114
|
+
function getEvmChainId(network) {
|
|
115
|
+
const networkMap = {
|
|
116
|
+
base: 8453,
|
|
117
|
+
"base-sepolia": 84532,
|
|
118
|
+
ethereum: 1,
|
|
119
|
+
sepolia: 11155111,
|
|
120
|
+
polygon: 137,
|
|
121
|
+
"polygon-amoy": 80002
|
|
122
|
+
};
|
|
123
|
+
return networkMap[network] || 1;
|
|
124
|
+
}
|
|
125
|
+
function createNonce() {
|
|
126
|
+
const cryptoObj = typeof globalThis.crypto !== "undefined" ? globalThis.crypto : globalThis.crypto;
|
|
127
|
+
if (!cryptoObj) {
|
|
128
|
+
throw new Error("Crypto API not available");
|
|
129
|
+
}
|
|
130
|
+
return toHex(cryptoObj.getRandomValues(new Uint8Array(32)));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export {
|
|
134
|
+
authorizationTypes,
|
|
135
|
+
legacyAuthorizationTypes,
|
|
136
|
+
eip3009ABI,
|
|
137
|
+
erc20LegacyABI,
|
|
138
|
+
getEvmChainId,
|
|
139
|
+
createNonce
|
|
140
|
+
};
|
|
141
|
+
//# sourceMappingURL=chunk-XYKAO6KJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants.ts","../../src/utils.ts"],"sourcesContent":["// EIP-3009 TransferWithAuthorization types for EIP-712 signing\nexport const authorizationTypes = {\n TransferWithAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n} as const;\n\n// Legacy transfer authorization types for EIP-712 signing\n// Used for tokens without EIP-3009 support (approve + transferFrom pattern)\nexport const legacyAuthorizationTypes = {\n LegacyTransferAuthorization: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"spender\", type: \"address\" },\n ],\n} as const;\n\n// EIP3009 ABI for transferWithAuthorization function\nexport const eip3009ABI = [\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"v\", type: \"uint8\" },\n { name: \"r\", type: \"bytes32\" },\n { name: \"s\", type: \"bytes32\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"value\", type: \"uint256\" },\n { name: \"validAfter\", type: \"uint256\" },\n { name: \"validBefore\", type: \"uint256\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"signature\", type: \"bytes\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [{ name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n\n// Standard ERC20 ABI for legacy token operations (approve + transferFrom pattern)\nexport const erc20LegacyABI = [\n {\n inputs: [{ name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { name: \"from\", type: \"address\" },\n { name: \"to\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n","import { toHex } from \"viem\";\nimport { Network } from \"@t402/core/types\";\n\n/**\n * Extract chain ID from network string (e.g., \"base-sepolia\" -> 84532)\n * Used by v1 implementations\n *\n * @param network - The network identifier\n * @returns The numeric chain ID\n */\nexport function getEvmChainId(network: Network): number {\n const networkMap: Record<string, number> = {\n base: 8453,\n \"base-sepolia\": 84532,\n ethereum: 1,\n sepolia: 11155111,\n polygon: 137,\n \"polygon-amoy\": 80002,\n };\n return networkMap[network] || 1;\n}\n\n/**\n * Create a random 32-byte nonce for authorization\n *\n * @returns A hex-encoded 32-byte nonce\n */\nexport function createNonce(): `0x${string}` {\n // Use dynamic import to avoid require() in ESM context\n const cryptoObj =\n typeof globalThis.crypto !== \"undefined\"\n ? globalThis.crypto\n : (globalThis as { crypto?: Crypto }).crypto;\n\n if (!cryptoObj) {\n throw new Error(\"Crypto API not available\");\n }\n\n return toHex(cryptoObj.getRandomValues(new Uint8Array(32)));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export { E as ExactEvmScheme } from '../../scheme-D4mOqq9l.mjs';
|
|
2
|
+
import { t402Client, SelectPaymentRequirements, PaymentPolicy } from '@t402/core/client';
|
|
3
|
+
import { Network } from '@t402/core/types';
|
|
4
|
+
import { C as ClientEvmSigner } from '../../signer-BkcAzwYi.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for registering EVM schemes to an t402Client
|
|
8
|
+
*/
|
|
9
|
+
interface EvmClientConfig {
|
|
10
|
+
/**
|
|
11
|
+
* The EVM signer to use for creating payment payloads
|
|
12
|
+
*/
|
|
13
|
+
signer: ClientEvmSigner;
|
|
14
|
+
/**
|
|
15
|
+
* Optional payment requirements selector function
|
|
16
|
+
* If not provided, uses the default selector (first available option)
|
|
17
|
+
*/
|
|
18
|
+
paymentRequirementsSelector?: SelectPaymentRequirements;
|
|
19
|
+
/**
|
|
20
|
+
* Optional policies to apply to the client
|
|
21
|
+
*/
|
|
22
|
+
policies?: PaymentPolicy[];
|
|
23
|
+
/**
|
|
24
|
+
* Optional specific networks to register
|
|
25
|
+
* If not provided, registers wildcard support (eip155:*)
|
|
26
|
+
*/
|
|
27
|
+
networks?: Network[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Registers EVM exact payment schemes to an t402Client instance.
|
|
31
|
+
*
|
|
32
|
+
* This function registers:
|
|
33
|
+
* - V2: eip155:* wildcard scheme with ExactEvmScheme (or specific networks if provided)
|
|
34
|
+
* - V1: All supported EVM networks with ExactEvmSchemeV1
|
|
35
|
+
*
|
|
36
|
+
* @param client - The t402Client instance to register schemes to
|
|
37
|
+
* @param config - Configuration for EVM client registration
|
|
38
|
+
* @returns The client instance for chaining
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* import { registerExactEvmScheme } from "@t402/evm/exact/client/register";
|
|
43
|
+
* import { t402Client } from "@t402/core/client";
|
|
44
|
+
* import { privateKeyToAccount } from "viem/accounts";
|
|
45
|
+
*
|
|
46
|
+
* const account = privateKeyToAccount("0x...");
|
|
47
|
+
* const client = new t402Client();
|
|
48
|
+
* registerExactEvmScheme(client, { signer: account });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
declare function registerExactEvmScheme(client: t402Client, config: EvmClientConfig): t402Client;
|
|
52
|
+
|
|
53
|
+
export { type EvmClientConfig, registerExactEvmScheme };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ExactEvmScheme
|
|
3
|
+
} from "../../chunk-LGSG73NJ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
NETWORKS
|
|
6
|
+
} from "../../chunk-QLXM7BIB.mjs";
|
|
7
|
+
import {
|
|
8
|
+
ExactEvmSchemeV1
|
|
9
|
+
} from "../../chunk-JBWWBRYY.mjs";
|
|
10
|
+
import "../../chunk-ACDQ5QNT.mjs";
|
|
11
|
+
import "../../chunk-XYKAO6KJ.mjs";
|
|
12
|
+
|
|
13
|
+
// src/exact/client/register.ts
|
|
14
|
+
function registerExactEvmScheme(client, config) {
|
|
15
|
+
if (config.networks && config.networks.length > 0) {
|
|
16
|
+
config.networks.forEach((network) => {
|
|
17
|
+
client.register(network, new ExactEvmScheme(config.signer));
|
|
18
|
+
});
|
|
19
|
+
} else {
|
|
20
|
+
client.register("eip155:*", new ExactEvmScheme(config.signer));
|
|
21
|
+
}
|
|
22
|
+
NETWORKS.forEach((network) => {
|
|
23
|
+
client.registerV1(network, new ExactEvmSchemeV1(config.signer));
|
|
24
|
+
});
|
|
25
|
+
if (config.policies) {
|
|
26
|
+
config.policies.forEach((policy) => {
|
|
27
|
+
client.registerPolicy(policy);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return client;
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
ExactEvmScheme,
|
|
34
|
+
registerExactEvmScheme
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/exact/client/register.ts"],"sourcesContent":["import { t402Client, SelectPaymentRequirements, PaymentPolicy } from \"@t402/core/client\";\nimport { Network } from \"@t402/core/types\";\nimport { ClientEvmSigner } from \"../../signer\";\nimport { ExactEvmScheme } from \"./scheme\";\nimport { ExactEvmSchemeV1 } from \"../v1/client/scheme\";\nimport { NETWORKS } from \"../../v1\";\n\n/**\n * Configuration options for registering EVM schemes to an t402Client\n */\nexport interface EvmClientConfig {\n /**\n * The EVM signer to use for creating payment payloads\n */\n signer: ClientEvmSigner;\n\n /**\n * Optional payment requirements selector function\n * If not provided, uses the default selector (first available option)\n */\n paymentRequirementsSelector?: SelectPaymentRequirements;\n\n /**\n * Optional policies to apply to the client\n */\n policies?: PaymentPolicy[];\n\n /**\n * Optional specific networks to register\n * If not provided, registers wildcard support (eip155:*)\n */\n networks?: Network[];\n}\n\n/**\n * Registers EVM exact payment schemes to an t402Client instance.\n *\n * This function registers:\n * - V2: eip155:* wildcard scheme with ExactEvmScheme (or specific networks if provided)\n * - V1: All supported EVM networks with ExactEvmSchemeV1\n *\n * @param client - The t402Client instance to register schemes to\n * @param config - Configuration for EVM client registration\n * @returns The client instance for chaining\n *\n * @example\n * ```typescript\n * import { registerExactEvmScheme } from \"@t402/evm/exact/client/register\";\n * import { t402Client } from \"@t402/core/client\";\n * import { privateKeyToAccount } from \"viem/accounts\";\n *\n * const account = privateKeyToAccount(\"0x...\");\n * const client = new t402Client();\n * registerExactEvmScheme(client, { signer: account });\n * ```\n */\nexport function registerExactEvmScheme(client: t402Client, config: EvmClientConfig): t402Client {\n // Register V2 scheme\n if (config.networks && config.networks.length > 0) {\n // Register specific networks\n config.networks.forEach(network => {\n client.register(network, new ExactEvmScheme(config.signer));\n });\n } else {\n // Register wildcard for all EVM chains\n client.register(\"eip155:*\", new ExactEvmScheme(config.signer));\n }\n\n // Register all V1 networks\n NETWORKS.forEach(network => {\n client.registerV1(network as Network, new ExactEvmSchemeV1(config.signer));\n });\n\n // Apply policies if provided\n if (config.policies) {\n config.policies.forEach(policy => {\n client.registerPolicy(policy);\n });\n }\n\n return client;\n}\n"],"mappings":";;;;;;;;;;;;;AAwDO,SAAS,uBAAuB,QAAoB,QAAqC;AAE9F,MAAI,OAAO,YAAY,OAAO,SAAS,SAAS,GAAG;AAEjD,WAAO,SAAS,QAAQ,aAAW;AACjC,aAAO,SAAS,SAAS,IAAI,eAAe,OAAO,MAAM,CAAC;AAAA,IAC5D,CAAC;AAAA,EACH,OAAO;AAEL,WAAO,SAAS,YAAY,IAAI,eAAe,OAAO,MAAM,CAAC;AAAA,EAC/D;AAGA,WAAS,QAAQ,aAAW;AAC1B,WAAO,WAAW,SAAoB,IAAI,iBAAiB,OAAO,MAAM,CAAC;AAAA,EAC3E,CAAC;AAGD,MAAI,OAAO,UAAU;AACnB,WAAO,SAAS,QAAQ,YAAU;AAChC,aAAO,eAAe,MAAM;AAAA,IAC9B,CAAC;AAAA,EACH;AAEA,SAAO;AACT;","names":[]}
|