@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.
Files changed (63) hide show
  1. package/README.md +183 -0
  2. package/dist/cjs/exact/client/index.d.ts +53 -0
  3. package/dist/cjs/exact/client/index.js +270 -0
  4. package/dist/cjs/exact/client/index.js.map +1 -0
  5. package/dist/cjs/exact/facilitator/index.d.ts +118 -0
  6. package/dist/cjs/exact/facilitator/index.js +735 -0
  7. package/dist/cjs/exact/facilitator/index.js.map +1 -0
  8. package/dist/cjs/exact/server/index.d.ts +36 -0
  9. package/dist/cjs/exact/server/index.js +438 -0
  10. package/dist/cjs/exact/server/index.js.map +1 -0
  11. package/dist/cjs/exact/v1/client/index.d.ts +37 -0
  12. package/dist/cjs/exact/v1/client/index.js +147 -0
  13. package/dist/cjs/exact/v1/client/index.js.map +1 -0
  14. package/dist/cjs/exact/v1/facilitator/index.d.ts +62 -0
  15. package/dist/cjs/exact/v1/facilitator/index.js +401 -0
  16. package/dist/cjs/exact/v1/facilitator/index.js.map +1 -0
  17. package/dist/cjs/index.d.ts +1537 -0
  18. package/dist/cjs/index.js +2368 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/scheme-C6uD7PdY.d.ts +130 -0
  21. package/dist/cjs/scheme-OojTBKAz.d.ts +35 -0
  22. package/dist/cjs/scheme-yqGaK9rK.d.ts +130 -0
  23. package/dist/cjs/signer-BkcAzwYi.d.ts +79 -0
  24. package/dist/cjs/v1/index.d.ts +7 -0
  25. package/dist/cjs/v1/index.js +171 -0
  26. package/dist/cjs/v1/index.js.map +1 -0
  27. package/dist/esm/chunk-ACDQ5QNT.mjs +305 -0
  28. package/dist/esm/chunk-ACDQ5QNT.mjs.map +1 -0
  29. package/dist/esm/chunk-JBWWBRYY.mjs +92 -0
  30. package/dist/esm/chunk-JBWWBRYY.mjs.map +1 -0
  31. package/dist/esm/chunk-LGSG73NJ.mjs +88 -0
  32. package/dist/esm/chunk-LGSG73NJ.mjs.map +1 -0
  33. package/dist/esm/chunk-OEXW2OK2.mjs +251 -0
  34. package/dist/esm/chunk-OEXW2OK2.mjs.map +1 -0
  35. package/dist/esm/chunk-QLXM7BIB.mjs +23 -0
  36. package/dist/esm/chunk-QLXM7BIB.mjs.map +1 -0
  37. package/dist/esm/chunk-XYKAO6KJ.mjs +141 -0
  38. package/dist/esm/chunk-XYKAO6KJ.mjs.map +1 -0
  39. package/dist/esm/exact/client/index.d.mts +53 -0
  40. package/dist/esm/exact/client/index.mjs +36 -0
  41. package/dist/esm/exact/client/index.mjs.map +1 -0
  42. package/dist/esm/exact/facilitator/index.d.mts +118 -0
  43. package/dist/esm/exact/facilitator/index.mjs +324 -0
  44. package/dist/esm/exact/facilitator/index.mjs.map +1 -0
  45. package/dist/esm/exact/server/index.d.mts +36 -0
  46. package/dist/esm/exact/server/index.mjs +218 -0
  47. package/dist/esm/exact/server/index.mjs.map +1 -0
  48. package/dist/esm/exact/v1/client/index.d.mts +37 -0
  49. package/dist/esm/exact/v1/client/index.mjs +8 -0
  50. package/dist/esm/exact/v1/client/index.mjs.map +1 -0
  51. package/dist/esm/exact/v1/facilitator/index.d.mts +62 -0
  52. package/dist/esm/exact/v1/facilitator/index.mjs +8 -0
  53. package/dist/esm/exact/v1/facilitator/index.mjs.map +1 -0
  54. package/dist/esm/index.d.mts +1537 -0
  55. package/dist/esm/index.mjs +1875 -0
  56. package/dist/esm/index.mjs.map +1 -0
  57. package/dist/esm/scheme-D4mOqq9l.d.mts +35 -0
  58. package/dist/esm/scheme-yqGaK9rK.d.mts +130 -0
  59. package/dist/esm/signer-BkcAzwYi.d.mts +79 -0
  60. package/dist/esm/v1/index.d.mts +7 -0
  61. package/dist/esm/v1/index.mjs +13 -0
  62. package/dist/esm/v1/index.mjs.map +1 -0
  63. package/package.json +127 -0
@@ -0,0 +1,218 @@
1
+ import {
2
+ TOKEN_REGISTRY,
3
+ getDefaultToken,
4
+ getTokenByAddress,
5
+ getTokenConfig
6
+ } from "../../chunk-OEXW2OK2.mjs";
7
+
8
+ // src/exact/server/scheme.ts
9
+ var ExactEvmScheme = class {
10
+ constructor(config = {}) {
11
+ this.scheme = "exact";
12
+ this.moneyParsers = [];
13
+ this.config = config;
14
+ }
15
+ /**
16
+ * Register a custom money parser in the parser chain.
17
+ * Multiple parsers can be registered - they will be tried in registration order.
18
+ * Each parser receives a decimal amount (e.g., 1.50 for $1.50).
19
+ * If a parser returns null, the next parser in the chain will be tried.
20
+ * The default parser is always the final fallback.
21
+ *
22
+ * @param parser - Custom function to convert amount to AssetAmount (or null to skip)
23
+ * @returns The server instance for chaining
24
+ *
25
+ * @example
26
+ * evmServer.registerMoneyParser(async (amount, network) => {
27
+ * // Custom conversion logic
28
+ * if (amount > 100) {
29
+ * // Use different token for large amounts
30
+ * return { amount: (amount * 1e18).toString(), asset: "0xCustomToken" };
31
+ * }
32
+ * return null; // Use next parser
33
+ * });
34
+ */
35
+ registerMoneyParser(parser) {
36
+ this.moneyParsers.push(parser);
37
+ return this;
38
+ }
39
+ /**
40
+ * Parses a price into an asset amount.
41
+ * If price is already an AssetAmount, returns it directly.
42
+ * If price is Money (string | number), parses to decimal and tries custom parsers.
43
+ * Falls back to default conversion if all custom parsers return null.
44
+ *
45
+ * @param price - The price to parse
46
+ * @param network - The network to use
47
+ * @returns Promise that resolves to the parsed asset amount
48
+ */
49
+ async parsePrice(price, network) {
50
+ if (typeof price === "object" && price !== null && "amount" in price) {
51
+ if (!price.asset) {
52
+ throw new Error(`Asset address must be specified for AssetAmount on network ${network}`);
53
+ }
54
+ return {
55
+ amount: price.amount,
56
+ asset: price.asset,
57
+ extra: price.extra || {}
58
+ };
59
+ }
60
+ const amount = this.parseMoneyToDecimal(price);
61
+ for (const parser of this.moneyParsers) {
62
+ const result = await parser(amount, network);
63
+ if (result !== null) {
64
+ return result;
65
+ }
66
+ }
67
+ return this.defaultMoneyConversion(amount, network);
68
+ }
69
+ /**
70
+ * Build payment requirements for this scheme/network combination
71
+ *
72
+ * @param paymentRequirements - The base payment requirements
73
+ * @param supportedKind - The supported kind from facilitator (unused)
74
+ * @param supportedKind.t402Version - The t402 version
75
+ * @param supportedKind.scheme - The logical payment scheme
76
+ * @param supportedKind.network - The network identifier in CAIP-2 format
77
+ * @param supportedKind.extra - Optional extra metadata regarding scheme/network implementation details
78
+ * @param extensionKeys - Extension keys supported by the facilitator (unused)
79
+ * @returns Payment requirements ready to be sent to clients
80
+ */
81
+ enhancePaymentRequirements(paymentRequirements, supportedKind, extensionKeys) {
82
+ void supportedKind;
83
+ void extensionKeys;
84
+ return Promise.resolve(paymentRequirements);
85
+ }
86
+ /**
87
+ * Parse Money (string | number) to a decimal number.
88
+ * Handles formats like "$1.50", "1.50", 1.50, etc.
89
+ *
90
+ * @param money - The money value to parse
91
+ * @returns Decimal number
92
+ */
93
+ parseMoneyToDecimal(money) {
94
+ if (typeof money === "number") {
95
+ return money;
96
+ }
97
+ const cleanMoney = money.replace(/^\$/, "").trim();
98
+ const amount = parseFloat(cleanMoney);
99
+ if (isNaN(amount)) {
100
+ throw new Error(`Invalid money format: ${money}`);
101
+ }
102
+ return amount;
103
+ }
104
+ /**
105
+ * Default money conversion implementation.
106
+ * Converts decimal amount to the preferred token on the specified network.
107
+ * Priority: USDT0 > USDC > other configured tokens
108
+ *
109
+ * @param amount - The decimal amount (e.g., 1.50)
110
+ * @param network - The network to use
111
+ * @returns The parsed asset amount
112
+ */
113
+ defaultMoneyConversion(amount, network) {
114
+ const token = this.getDefaultAsset(network);
115
+ const tokenAmount = this.convertToTokenAmount(amount.toString(), network, token.decimals);
116
+ return {
117
+ amount: tokenAmount,
118
+ asset: token.address,
119
+ extra: {
120
+ name: token.name,
121
+ version: token.version,
122
+ symbol: token.symbol,
123
+ tokenType: token.tokenType
124
+ }
125
+ };
126
+ }
127
+ /**
128
+ * Convert decimal amount to token units (e.g., 0.10 -> 100000 for 6-decimal tokens)
129
+ *
130
+ * @param decimalAmount - The decimal amount to convert
131
+ * @param network - The network to use
132
+ * @param decimals - Optional number of decimals (defaults to network asset decimals)
133
+ * @returns The token amount as a string
134
+ */
135
+ convertToTokenAmount(decimalAmount, network, decimals) {
136
+ const tokenDecimals = decimals ?? this.getAssetDecimals(network);
137
+ const amount = parseFloat(decimalAmount);
138
+ if (isNaN(amount)) {
139
+ throw new Error(`Invalid amount: ${decimalAmount}`);
140
+ }
141
+ const tokenAmount = Math.floor(amount * Math.pow(10, tokenDecimals));
142
+ return tokenAmount.toString();
143
+ }
144
+ /**
145
+ * Get the default asset info for a network.
146
+ * Priority: configured preferredToken > USDT0 > USDC > first available
147
+ *
148
+ * @param network - The network to get asset info for
149
+ * @returns The asset information including address, name, version, and decimals
150
+ */
151
+ getDefaultAsset(network) {
152
+ if (this.config.preferredToken) {
153
+ const preferred = getTokenConfig(network, this.config.preferredToken);
154
+ if (preferred) return preferred;
155
+ }
156
+ const defaultToken = getDefaultToken(network);
157
+ if (defaultToken) return defaultToken;
158
+ throw new Error(`No tokens configured for network ${network}`);
159
+ }
160
+ /**
161
+ * Get asset info for a given symbol on a network
162
+ *
163
+ * @param symbol - The asset symbol (e.g., "USDT0", "USDC", "USDT")
164
+ * @param network - The network to use
165
+ * @returns The token configuration
166
+ */
167
+ getAssetInfo(symbol, network) {
168
+ const token = getTokenConfig(network, symbol);
169
+ if (token) return token;
170
+ if (symbol.toUpperCase() === "USD") {
171
+ return this.getDefaultAsset(network);
172
+ }
173
+ throw new Error(`Unsupported asset: ${symbol} on network ${network}`);
174
+ }
175
+ /**
176
+ * Get the number of decimals for the asset on a network
177
+ *
178
+ * @param network - The network to use
179
+ * @param tokenAddress - Optional token address to look up
180
+ * @returns The number of decimals for the asset
181
+ */
182
+ getAssetDecimals(network, tokenAddress) {
183
+ if (tokenAddress) {
184
+ const token = getTokenByAddress(network, tokenAddress);
185
+ if (token) return token.decimals;
186
+ }
187
+ return 6;
188
+ }
189
+ /**
190
+ * Get all supported networks
191
+ */
192
+ static getSupportedNetworks() {
193
+ return Object.keys(TOKEN_REGISTRY);
194
+ }
195
+ /**
196
+ * Check if a network is supported
197
+ */
198
+ static isNetworkSupported(network) {
199
+ return network in TOKEN_REGISTRY;
200
+ }
201
+ };
202
+
203
+ // src/exact/server/register.ts
204
+ function registerExactEvmScheme(server, config = {}) {
205
+ if (config.networks && config.networks.length > 0) {
206
+ config.networks.forEach((network) => {
207
+ server.register(network, new ExactEvmScheme());
208
+ });
209
+ } else {
210
+ server.register("eip155:*", new ExactEvmScheme());
211
+ }
212
+ return server;
213
+ }
214
+ export {
215
+ ExactEvmScheme,
216
+ registerExactEvmScheme
217
+ };
218
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/exact/server/scheme.ts","../../../../src/exact/server/register.ts"],"sourcesContent":["import {\n AssetAmount,\n Network,\n PaymentRequirements,\n Price,\n SchemeNetworkServer,\n MoneyParser,\n} from \"@t402/core/types\";\nimport {\n getDefaultToken,\n getTokenConfig,\n getTokenByAddress,\n TokenConfig,\n TOKEN_REGISTRY,\n} from \"../../tokens.js\";\n\n/**\n * Configuration options for ExactEvmScheme\n */\nexport interface ExactEvmSchemeConfig {\n /** Preferred token symbol (e.g., \"USDT0\", \"USDC\"). Defaults to network's highest priority token. */\n preferredToken?: string;\n}\n\n/**\n * EVM server implementation for the Exact payment scheme.\n * Supports USDT0, USDC, and other EIP-3009 compatible tokens.\n */\nexport class ExactEvmScheme implements SchemeNetworkServer {\n readonly scheme = \"exact\";\n private moneyParsers: MoneyParser[] = [];\n private config: ExactEvmSchemeConfig;\n\n constructor(config: ExactEvmSchemeConfig = {}) {\n this.config = config;\n }\n\n /**\n * Register a custom money parser in the parser chain.\n * Multiple parsers can be registered - they will be tried in registration order.\n * Each parser receives a decimal amount (e.g., 1.50 for $1.50).\n * If a parser returns null, the next parser in the chain will be tried.\n * The default parser is always the final fallback.\n *\n * @param parser - Custom function to convert amount to AssetAmount (or null to skip)\n * @returns The server instance for chaining\n *\n * @example\n * evmServer.registerMoneyParser(async (amount, network) => {\n * // Custom conversion logic\n * if (amount > 100) {\n * // Use different token for large amounts\n * return { amount: (amount * 1e18).toString(), asset: \"0xCustomToken\" };\n * }\n * return null; // Use next parser\n * });\n */\n registerMoneyParser(parser: MoneyParser): ExactEvmScheme {\n this.moneyParsers.push(parser);\n return this;\n }\n\n /**\n * Parses a price into an asset amount.\n * If price is already an AssetAmount, returns it directly.\n * If price is Money (string | number), parses to decimal and tries custom parsers.\n * Falls back to default conversion if all custom parsers return null.\n *\n * @param price - The price to parse\n * @param network - The network to use\n * @returns Promise that resolves to the parsed asset amount\n */\n async parsePrice(price: Price, network: Network): Promise<AssetAmount> {\n // If already an AssetAmount, return it directly\n if (typeof price === \"object\" && price !== null && \"amount\" in price) {\n if (!price.asset) {\n throw new Error(`Asset address must be specified for AssetAmount on network ${network}`);\n }\n return {\n amount: price.amount,\n asset: price.asset,\n extra: price.extra || {},\n };\n }\n\n // Parse Money to decimal number\n const amount = this.parseMoneyToDecimal(price);\n\n // Try each custom money parser in order\n for (const parser of this.moneyParsers) {\n const result = await parser(amount, network);\n if (result !== null) {\n return result;\n }\n }\n\n // All custom parsers returned null, use default conversion\n return this.defaultMoneyConversion(amount, network);\n }\n\n /**\n * Build payment requirements for this scheme/network combination\n *\n * @param paymentRequirements - The base payment requirements\n * @param supportedKind - The supported kind from facilitator (unused)\n * @param supportedKind.t402Version - The t402 version\n * @param supportedKind.scheme - The logical payment scheme\n * @param supportedKind.network - The network identifier in CAIP-2 format\n * @param supportedKind.extra - Optional extra metadata regarding scheme/network implementation details\n * @param extensionKeys - Extension keys supported by the facilitator (unused)\n * @returns Payment requirements ready to be sent to clients\n */\n enhancePaymentRequirements(\n paymentRequirements: PaymentRequirements,\n supportedKind: {\n t402Version: number;\n scheme: string;\n network: Network;\n extra?: Record<string, unknown>;\n },\n extensionKeys: string[],\n ): Promise<PaymentRequirements> {\n // Mark unused parameters to satisfy linter\n void supportedKind;\n void extensionKeys;\n return Promise.resolve(paymentRequirements);\n }\n\n /**\n * Parse Money (string | number) to a decimal number.\n * Handles formats like \"$1.50\", \"1.50\", 1.50, etc.\n *\n * @param money - The money value to parse\n * @returns Decimal number\n */\n private parseMoneyToDecimal(money: string | number): number {\n if (typeof money === \"number\") {\n return money;\n }\n\n // Remove $ sign and whitespace, then parse\n const cleanMoney = money.replace(/^\\$/, \"\").trim();\n const amount = parseFloat(cleanMoney);\n\n if (isNaN(amount)) {\n throw new Error(`Invalid money format: ${money}`);\n }\n\n return amount;\n }\n\n /**\n * Default money conversion implementation.\n * Converts decimal amount to the preferred token on the specified network.\n * Priority: USDT0 > USDC > other configured tokens\n *\n * @param amount - The decimal amount (e.g., 1.50)\n * @param network - The network to use\n * @returns The parsed asset amount\n */\n private defaultMoneyConversion(amount: number, network: Network): AssetAmount {\n const token = this.getDefaultAsset(network);\n\n // Convert decimal amount to token amount\n const tokenAmount = this.convertToTokenAmount(amount.toString(), network, token.decimals);\n\n return {\n amount: tokenAmount,\n asset: token.address,\n extra: {\n name: token.name,\n version: token.version,\n symbol: token.symbol,\n tokenType: token.tokenType,\n },\n };\n }\n\n /**\n * Convert decimal amount to token units (e.g., 0.10 -> 100000 for 6-decimal tokens)\n *\n * @param decimalAmount - The decimal amount to convert\n * @param network - The network to use\n * @param decimals - Optional number of decimals (defaults to network asset decimals)\n * @returns The token amount as a string\n */\n private convertToTokenAmount(decimalAmount: string, network: Network, decimals?: number): string {\n const tokenDecimals = decimals ?? this.getAssetDecimals(network);\n const amount = parseFloat(decimalAmount);\n if (isNaN(amount)) {\n throw new Error(`Invalid amount: ${decimalAmount}`);\n }\n // Convert to smallest unit (e.g., for USDC/USDT with 6 decimals: 0.10 * 10^6 = 100000)\n const tokenAmount = Math.floor(amount * Math.pow(10, tokenDecimals));\n return tokenAmount.toString();\n }\n\n /**\n * Get the default asset info for a network.\n * Priority: configured preferredToken > USDT0 > USDC > first available\n *\n * @param network - The network to get asset info for\n * @returns The asset information including address, name, version, and decimals\n */\n private getDefaultAsset(network: Network): TokenConfig {\n // If a preferred token is configured, try to use it\n if (this.config.preferredToken) {\n const preferred = getTokenConfig(network, this.config.preferredToken);\n if (preferred) return preferred;\n }\n\n // Use the network's default token (sorted by priority)\n const defaultToken = getDefaultToken(network);\n if (defaultToken) return defaultToken;\n\n throw new Error(`No tokens configured for network ${network}`);\n }\n\n /**\n * Get asset info for a given symbol on a network\n *\n * @param symbol - The asset symbol (e.g., \"USDT0\", \"USDC\", \"USDT\")\n * @param network - The network to use\n * @returns The token configuration\n */\n private getAssetInfo(symbol: string, network: Network): TokenConfig {\n const token = getTokenConfig(network, symbol);\n if (token) return token;\n\n // Fallback: treat \"USD\" as request for default stablecoin\n if (symbol.toUpperCase() === \"USD\") {\n return this.getDefaultAsset(network);\n }\n\n throw new Error(`Unsupported asset: ${symbol} on network ${network}`);\n }\n\n /**\n * Get the number of decimals for the asset on a network\n *\n * @param network - The network to use\n * @param tokenAddress - Optional token address to look up\n * @returns The number of decimals for the asset\n */\n private getAssetDecimals(network: Network, tokenAddress?: string): number {\n if (tokenAddress) {\n const token = getTokenByAddress(network, tokenAddress as `0x${string}`);\n if (token) return token.decimals;\n }\n // Default to 6 decimals (USDC/USDT standard)\n return 6;\n }\n\n /**\n * Get all supported networks\n */\n static getSupportedNetworks(): string[] {\n return Object.keys(TOKEN_REGISTRY);\n }\n\n /**\n * Check if a network is supported\n */\n static isNetworkSupported(network: string): boolean {\n return network in TOKEN_REGISTRY;\n }\n}\n","import { t402ResourceServer } from \"@t402/core/server\";\nimport { Network } from \"@t402/core/types\";\nimport { ExactEvmScheme } from \"./scheme\";\n\n/**\n * Configuration options for registering EVM schemes to an t402ResourceServer\n */\nexport interface EvmResourceServerConfig {\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 t402ResourceServer instance.\n *\n * This function registers:\n * - V2: eip155:* wildcard scheme with ExactEvmScheme (or specific networks if provided)\n *\n * @param server - The t402ResourceServer instance to register schemes to\n * @param config - Configuration for EVM resource server registration\n * @returns The server instance for chaining\n *\n * @example\n * ```typescript\n * import { registerExactEvmScheme } from \"@t402/evm/exact/server/register\";\n * import { t402ResourceServer } from \"@t402/core/server\";\n *\n * const server = new t402ResourceServer(facilitatorClient);\n * registerExactEvmScheme(server, {});\n * ```\n */\nexport function registerExactEvmScheme(\n server: t402ResourceServer,\n config: EvmResourceServerConfig = {},\n): t402ResourceServer {\n // Register V2 scheme\n if (config.networks && config.networks.length > 0) {\n // Register specific networks\n config.networks.forEach(network => {\n server.register(network, new ExactEvmScheme());\n });\n } else {\n // Register wildcard for all EVM chains\n server.register(\"eip155:*\", new ExactEvmScheme());\n }\n\n return server;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,37 @@
1
+ import { SchemeNetworkClient, PaymentRequirements, PaymentPayload, Network } from '@t402/core/types';
2
+ import { C as ClientEvmSigner } from '../../../signer-BkcAzwYi.mjs';
3
+
4
+ /**
5
+ * EVM client implementation for the Exact payment scheme (V1).
6
+ */
7
+ declare class ExactEvmSchemeV1 implements SchemeNetworkClient {
8
+ private readonly signer;
9
+ readonly scheme = "exact";
10
+ /**
11
+ * Creates a new ExactEvmClientV1 instance.
12
+ *
13
+ * @param signer - The EVM signer for client operations
14
+ */
15
+ constructor(signer: ClientEvmSigner);
16
+ /**
17
+ * Creates a payment payload for the Exact scheme (V1).
18
+ *
19
+ * @param t402Version - The t402 protocol version
20
+ * @param paymentRequirements - The payment requirements
21
+ * @returns Promise resolving to a payment payload
22
+ */
23
+ createPaymentPayload(t402Version: number, paymentRequirements: PaymentRequirements): Promise<Pick<PaymentPayload, "t402Version" | "payload"> & {
24
+ scheme: string;
25
+ network: Network;
26
+ }>;
27
+ /**
28
+ * Sign the EIP-3009 authorization using EIP-712
29
+ *
30
+ * @param authorization - The authorization to sign
31
+ * @param requirements - The payment requirements
32
+ * @returns Promise resolving to the signature
33
+ */
34
+ private signAuthorization;
35
+ }
36
+
37
+ export { ExactEvmSchemeV1 };
@@ -0,0 +1,8 @@
1
+ import {
2
+ ExactEvmSchemeV1
3
+ } from "../../../chunk-JBWWBRYY.mjs";
4
+ import "../../../chunk-XYKAO6KJ.mjs";
5
+ export {
6
+ ExactEvmSchemeV1
7
+ };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,62 @@
1
+ import { SchemeNetworkFacilitator, PaymentPayload, PaymentRequirements, VerifyResponse, SettleResponse } from '@t402/core/types';
2
+ import { F as FacilitatorEvmSigner } from '../../../signer-BkcAzwYi.mjs';
3
+
4
+ interface ExactEvmSchemeV1Config {
5
+ /**
6
+ * If enabled, the facilitator will deploy ERC-4337 smart wallets
7
+ * via EIP-6492 when encountering undeployed contract signatures.
8
+ *
9
+ * @default false
10
+ */
11
+ deployERC4337WithEIP6492?: boolean;
12
+ }
13
+ /**
14
+ * EVM facilitator implementation for the Exact payment scheme (V1).
15
+ */
16
+ declare class ExactEvmSchemeV1 implements SchemeNetworkFacilitator {
17
+ private readonly signer;
18
+ readonly scheme = "exact";
19
+ readonly caipFamily = "eip155:*";
20
+ private readonly config;
21
+ /**
22
+ * Creates a new ExactEvmFacilitatorV1 instance.
23
+ *
24
+ * @param signer - The EVM signer for facilitator operations
25
+ * @param config - Optional configuration for the facilitator
26
+ */
27
+ constructor(signer: FacilitatorEvmSigner, config?: ExactEvmSchemeV1Config);
28
+ /**
29
+ * Get mechanism-specific extra data for the supported kinds endpoint.
30
+ * For EVM, no extra data is needed.
31
+ *
32
+ * @param _ - The network identifier (unused for EVM)
33
+ * @returns undefined (EVM has no extra data)
34
+ */
35
+ getExtra(_: string): Record<string, unknown> | undefined;
36
+ /**
37
+ * Get signer addresses used by this facilitator.
38
+ * Returns all addresses this facilitator can use for signing/settling transactions.
39
+ *
40
+ * @param _ - The network identifier (unused for EVM, addresses are network-agnostic)
41
+ * @returns Array of facilitator wallet addresses
42
+ */
43
+ getSigners(_: string): string[];
44
+ /**
45
+ * Verifies a payment payload (V1).
46
+ *
47
+ * @param payload - The payment payload to verify
48
+ * @param requirements - The payment requirements
49
+ * @returns Promise resolving to verification response
50
+ */
51
+ verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;
52
+ /**
53
+ * Settles a payment by executing the transfer (V1).
54
+ *
55
+ * @param payload - The payment payload to settle
56
+ * @param requirements - The payment requirements
57
+ * @returns Promise resolving to settlement response
58
+ */
59
+ settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;
60
+ }
61
+
62
+ export { ExactEvmSchemeV1, type ExactEvmSchemeV1Config };
@@ -0,0 +1,8 @@
1
+ import {
2
+ ExactEvmSchemeV1
3
+ } from "../../../chunk-ACDQ5QNT.mjs";
4
+ import "../../../chunk-XYKAO6KJ.mjs";
5
+ export {
6
+ ExactEvmSchemeV1
7
+ };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}