@x402/evm 2.8.0 → 2.9.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 (79) hide show
  1. package/README.md +2 -39
  2. package/dist/cjs/exact/client/index.d.ts +3 -2
  3. package/dist/cjs/exact/client/index.js +173 -194
  4. package/dist/cjs/exact/client/index.js.map +1 -1
  5. package/dist/cjs/exact/facilitator/index.js +199 -185
  6. package/dist/cjs/exact/facilitator/index.js.map +1 -1
  7. package/dist/cjs/exact/server/index.d.ts +18 -17
  8. package/dist/cjs/exact/server/index.js +100 -55
  9. package/dist/cjs/exact/server/index.js.map +1 -1
  10. package/dist/cjs/exact/v1/client/index.js +3 -1
  11. package/dist/cjs/exact/v1/client/index.js.map +1 -1
  12. package/dist/cjs/exact/v1/facilitator/index.js +3 -1
  13. package/dist/cjs/exact/v1/facilitator/index.js.map +1 -1
  14. package/dist/cjs/index.d.ts +38 -2
  15. package/dist/cjs/index.js +441 -191
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/{permit2-U9Zolx3O.d.ts → permit2-CyZxwngN.d.ts} +278 -87
  18. package/dist/cjs/scheme-CXDF0D2A.d.ts +47 -0
  19. package/dist/cjs/upto/client/index.d.ts +32 -0
  20. package/dist/cjs/upto/client/index.js +507 -0
  21. package/dist/cjs/upto/client/index.js.map +1 -0
  22. package/dist/cjs/upto/facilitator/index.d.ts +52 -0
  23. package/dist/cjs/upto/facilitator/index.js +1233 -0
  24. package/dist/cjs/upto/facilitator/index.js.map +1 -0
  25. package/dist/cjs/upto/server/index.d.ts +77 -0
  26. package/dist/cjs/upto/server/index.js +246 -0
  27. package/dist/cjs/upto/server/index.js.map +1 -0
  28. package/dist/cjs/v1/index.d.ts +2 -0
  29. package/dist/cjs/v1/index.js +3 -1
  30. package/dist/cjs/v1/index.js.map +1 -1
  31. package/dist/esm/chunk-C4ZQMS77.mjs +629 -0
  32. package/dist/esm/chunk-C4ZQMS77.mjs.map +1 -0
  33. package/dist/esm/chunk-CRT6YNY5.mjs +529 -0
  34. package/dist/esm/chunk-CRT6YNY5.mjs.map +1 -0
  35. package/dist/esm/chunk-GJ57SZGI.mjs +121 -0
  36. package/dist/esm/chunk-GJ57SZGI.mjs.map +1 -0
  37. package/dist/esm/chunk-JII456TS.mjs +34 -0
  38. package/dist/esm/chunk-JII456TS.mjs.map +1 -0
  39. package/dist/esm/chunk-NSFLAANF.mjs +80 -0
  40. package/dist/esm/chunk-NSFLAANF.mjs.map +1 -0
  41. package/dist/esm/chunk-RN3WQM6A.mjs +158 -0
  42. package/dist/esm/chunk-RN3WQM6A.mjs.map +1 -0
  43. package/dist/esm/chunk-WKBC5YMI.mjs +291 -0
  44. package/dist/esm/chunk-WKBC5YMI.mjs.map +1 -0
  45. package/dist/esm/{chunk-IZEI7JTG.mjs → chunk-YUJQ7TLD.mjs} +29 -501
  46. package/dist/esm/chunk-YUJQ7TLD.mjs.map +1 -0
  47. package/dist/esm/exact/client/index.d.mts +3 -2
  48. package/dist/esm/exact/client/index.mjs +8 -5
  49. package/dist/esm/exact/facilitator/index.mjs +84 -430
  50. package/dist/esm/exact/facilitator/index.mjs.map +1 -1
  51. package/dist/esm/exact/server/index.d.mts +18 -17
  52. package/dist/esm/exact/server/index.mjs +28 -55
  53. package/dist/esm/exact/server/index.mjs.map +1 -1
  54. package/dist/esm/exact/v1/client/index.mjs +2 -1
  55. package/dist/esm/exact/v1/facilitator/index.mjs +2 -1
  56. package/dist/esm/index.d.mts +38 -2
  57. package/dist/esm/index.mjs +21 -8
  58. package/dist/esm/index.mjs.map +1 -1
  59. package/dist/esm/{permit2-Bbh3a8_h.d.mts → permit2-CyZxwngN.d.mts} +278 -87
  60. package/dist/esm/scheme-DCR7hsa3.d.mts +47 -0
  61. package/dist/esm/upto/client/index.d.mts +32 -0
  62. package/dist/esm/upto/client/index.mjs +18 -0
  63. package/dist/esm/upto/client/index.mjs.map +1 -0
  64. package/dist/esm/upto/facilitator/index.d.mts +52 -0
  65. package/dist/esm/upto/facilitator/index.mjs +473 -0
  66. package/dist/esm/upto/facilitator/index.mjs.map +1 -0
  67. package/dist/esm/upto/server/index.d.mts +77 -0
  68. package/dist/esm/upto/server/index.mjs +145 -0
  69. package/dist/esm/upto/server/index.mjs.map +1 -0
  70. package/dist/esm/v1/index.d.mts +2 -0
  71. package/dist/esm/v1/index.mjs +2 -1
  72. package/package.json +34 -4
  73. package/dist/esm/chunk-GD4MKCN7.mjs +0 -57
  74. package/dist/esm/chunk-GD4MKCN7.mjs.map +0 -1
  75. package/dist/esm/chunk-IZEI7JTG.mjs.map +0 -1
  76. package/dist/esm/chunk-TKN5V2BV.mjs +0 -13
  77. package/dist/esm/chunk-TKN5V2BV.mjs.map +0 -1
  78. package/dist/esm/chunk-WJWNS4G4.mjs +0 -518
  79. package/dist/esm/chunk-WJWNS4G4.mjs.map +0 -1
@@ -1,293 +1,28 @@
1
- // src/exact/v1/client/scheme.ts
2
- import { getAddress } from "viem";
3
-
4
- // src/constants.ts
5
- var authorizationTypes = {
6
- TransferWithAuthorization: [
7
- { name: "from", type: "address" },
8
- { name: "to", type: "address" },
9
- { name: "value", type: "uint256" },
10
- { name: "validAfter", type: "uint256" },
11
- { name: "validBefore", type: "uint256" },
12
- { name: "nonce", type: "bytes32" }
13
- ]
14
- };
15
- var permit2WitnessTypes = {
16
- PermitWitnessTransferFrom: [
17
- { name: "permitted", type: "TokenPermissions" },
18
- { name: "spender", type: "address" },
19
- { name: "nonce", type: "uint256" },
20
- { name: "deadline", type: "uint256" },
21
- { name: "witness", type: "Witness" }
22
- ],
23
- TokenPermissions: [
24
- { name: "token", type: "address" },
25
- { name: "amount", type: "uint256" }
26
- ],
27
- Witness: [
28
- { name: "to", type: "address" },
29
- { name: "validAfter", type: "uint256" }
30
- ]
31
- };
32
- var eip3009ABI = [
33
- {
34
- inputs: [
35
- { name: "from", type: "address" },
36
- { name: "to", type: "address" },
37
- { name: "value", type: "uint256" },
38
- { name: "validAfter", type: "uint256" },
39
- { name: "validBefore", type: "uint256" },
40
- { name: "nonce", type: "bytes32" },
41
- { name: "v", type: "uint8" },
42
- { name: "r", type: "bytes32" },
43
- { name: "s", type: "bytes32" }
44
- ],
45
- name: "transferWithAuthorization",
46
- outputs: [],
47
- stateMutability: "nonpayable",
48
- type: "function"
49
- },
50
- {
51
- inputs: [
52
- { name: "from", type: "address" },
53
- { name: "to", type: "address" },
54
- { name: "value", type: "uint256" },
55
- { name: "validAfter", type: "uint256" },
56
- { name: "validBefore", type: "uint256" },
57
- { name: "nonce", type: "bytes32" },
58
- { name: "signature", type: "bytes" }
59
- ],
60
- name: "transferWithAuthorization",
61
- outputs: [],
62
- stateMutability: "nonpayable",
63
- type: "function"
64
- },
65
- {
66
- inputs: [{ name: "account", type: "address" }],
67
- name: "balanceOf",
68
- outputs: [{ name: "", type: "uint256" }],
69
- stateMutability: "view",
70
- type: "function"
71
- },
72
- {
73
- inputs: [],
74
- name: "version",
75
- outputs: [{ name: "", type: "string" }],
76
- stateMutability: "view",
77
- type: "function"
78
- },
79
- {
80
- inputs: [],
81
- name: "name",
82
- outputs: [{ name: "", type: "string" }],
83
- stateMutability: "view",
84
- type: "function"
85
- },
86
- {
87
- inputs: [
88
- { name: "authorizer", type: "address" },
89
- { name: "nonce", type: "bytes32" }
90
- ],
91
- name: "authorizationState",
92
- outputs: [{ name: "", type: "bool" }],
93
- stateMutability: "view",
94
- type: "function"
95
- }
96
- ];
97
- var eip2612PermitTypes = {
98
- Permit: [
99
- { name: "owner", type: "address" },
100
- { name: "spender", type: "address" },
101
- { name: "value", type: "uint256" },
102
- { name: "nonce", type: "uint256" },
103
- { name: "deadline", type: "uint256" }
104
- ]
105
- };
106
- var eip2612NoncesAbi = [
107
- {
108
- type: "function",
109
- name: "nonces",
110
- inputs: [{ name: "owner", type: "address" }],
111
- outputs: [{ type: "uint256" }],
112
- stateMutability: "view"
113
- }
114
- ];
115
- var erc20ApproveAbi = [
116
- {
117
- type: "function",
118
- name: "approve",
119
- inputs: [
120
- { name: "spender", type: "address" },
121
- { name: "amount", type: "uint256" }
122
- ],
123
- outputs: [{ type: "bool" }],
124
- stateMutability: "nonpayable"
125
- }
126
- ];
127
- var erc20AllowanceAbi = [
128
- {
129
- type: "function",
130
- name: "allowance",
131
- inputs: [
132
- { name: "owner", type: "address" },
133
- { name: "spender", type: "address" }
134
- ],
135
- outputs: [{ type: "uint256" }],
136
- stateMutability: "view"
137
- }
138
- ];
139
- var ERC20_APPROVE_GAS_LIMIT = 70000n;
140
- var DEFAULT_MAX_FEE_PER_GAS = 1000000000n;
141
- var DEFAULT_MAX_PRIORITY_FEE_PER_GAS = 100000000n;
142
- var PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
143
- var x402ExactPermit2ProxyAddress = "0x402085c248EeA27D92E8b30b2C58ed07f9E20001";
144
- var x402UptoPermit2ProxyAddress = "0x402039b3d6E6BEC5A02c2C9fd937ac17A6940002";
145
- var permit2WitnessABIComponents = [
146
- { name: "to", type: "address", internalType: "address" },
147
- { name: "validAfter", type: "uint256", internalType: "uint256" }
148
- ];
149
- var x402ExactPermit2ProxyABI = [
150
- {
151
- type: "function",
152
- name: "PERMIT2",
153
- inputs: [],
154
- outputs: [{ name: "", type: "address", internalType: "contract ISignatureTransfer" }],
155
- stateMutability: "view"
156
- },
157
- {
158
- type: "function",
159
- name: "WITNESS_TYPEHASH",
160
- inputs: [],
161
- outputs: [{ name: "", type: "bytes32", internalType: "bytes32" }],
162
- stateMutability: "view"
163
- },
164
- {
165
- type: "function",
166
- name: "WITNESS_TYPE_STRING",
167
- inputs: [],
168
- outputs: [{ name: "", type: "string", internalType: "string" }],
169
- stateMutability: "view"
170
- },
171
- {
172
- type: "function",
173
- name: "settle",
174
- inputs: [
175
- {
176
- name: "permit",
177
- type: "tuple",
178
- internalType: "struct ISignatureTransfer.PermitTransferFrom",
179
- components: [
180
- {
181
- name: "permitted",
182
- type: "tuple",
183
- internalType: "struct ISignatureTransfer.TokenPermissions",
184
- components: [
185
- { name: "token", type: "address", internalType: "address" },
186
- { name: "amount", type: "uint256", internalType: "uint256" }
187
- ]
188
- },
189
- { name: "nonce", type: "uint256", internalType: "uint256" },
190
- { name: "deadline", type: "uint256", internalType: "uint256" }
191
- ]
192
- },
193
- { name: "owner", type: "address", internalType: "address" },
194
- {
195
- name: "witness",
196
- type: "tuple",
197
- internalType: "struct x402ExactPermit2Proxy.Witness",
198
- components: permit2WitnessABIComponents
199
- },
200
- { name: "signature", type: "bytes", internalType: "bytes" }
201
- ],
202
- outputs: [],
203
- stateMutability: "nonpayable"
204
- },
205
- {
206
- type: "function",
207
- name: "settleWithPermit",
208
- inputs: [
209
- {
210
- name: "permit2612",
211
- type: "tuple",
212
- internalType: "struct x402ExactPermit2Proxy.EIP2612Permit",
213
- components: [
214
- { name: "value", type: "uint256", internalType: "uint256" },
215
- { name: "deadline", type: "uint256", internalType: "uint256" },
216
- { name: "r", type: "bytes32", internalType: "bytes32" },
217
- { name: "s", type: "bytes32", internalType: "bytes32" },
218
- { name: "v", type: "uint8", internalType: "uint8" }
219
- ]
220
- },
221
- {
222
- name: "permit",
223
- type: "tuple",
224
- internalType: "struct ISignatureTransfer.PermitTransferFrom",
225
- components: [
226
- {
227
- name: "permitted",
228
- type: "tuple",
229
- internalType: "struct ISignatureTransfer.TokenPermissions",
230
- components: [
231
- { name: "token", type: "address", internalType: "address" },
232
- { name: "amount", type: "uint256", internalType: "uint256" }
233
- ]
234
- },
235
- { name: "nonce", type: "uint256", internalType: "uint256" },
236
- { name: "deadline", type: "uint256", internalType: "uint256" }
237
- ]
238
- },
239
- { name: "owner", type: "address", internalType: "address" },
240
- {
241
- name: "witness",
242
- type: "tuple",
243
- internalType: "struct x402ExactPermit2Proxy.Witness",
244
- components: permit2WitnessABIComponents
245
- },
246
- { name: "signature", type: "bytes", internalType: "bytes" }
247
- ],
248
- outputs: [],
249
- stateMutability: "nonpayable"
250
- },
251
- { type: "event", name: "Settled", inputs: [], anonymous: false },
252
- { type: "event", name: "SettledWithPermit", inputs: [], anonymous: false },
253
- { type: "error", name: "InvalidAmount", inputs: [] },
254
- { type: "error", name: "InvalidDestination", inputs: [] },
255
- { type: "error", name: "InvalidOwner", inputs: [] },
256
- { type: "error", name: "InvalidPermit2Address", inputs: [] },
257
- { type: "error", name: "PaymentTooEarly", inputs: [] },
258
- { type: "error", name: "Permit2612AmountMismatch", inputs: [] },
259
- { type: "error", name: "ReentrancyGuardReentrantCall", inputs: [] }
260
- ];
261
-
262
- // src/utils.ts
263
- import { toHex } from "viem";
264
- function getEvmChainId(network) {
265
- if (network.startsWith("eip155:")) {
266
- const idStr = network.split(":")[1];
267
- const chainId = parseInt(idStr, 10);
268
- if (isNaN(chainId)) {
269
- throw new Error(`Invalid CAIP-2 chain ID: ${network}`);
270
- }
271
- return chainId;
272
- }
273
- throw new Error(`Unsupported network format: ${network} (expected eip155:CHAIN_ID)`);
274
- }
275
- function getCrypto() {
276
- const cryptoObj = globalThis.crypto;
277
- if (!cryptoObj) {
278
- throw new Error("Crypto API not available");
279
- }
280
- return cryptoObj;
281
- }
282
- function createNonce() {
283
- return toHex(getCrypto().getRandomValues(new Uint8Array(32)));
284
- }
285
- function createPermit2Nonce() {
286
- const randomBytes = getCrypto().getRandomValues(new Uint8Array(32));
287
- return BigInt(toHex(randomBytes)).toString();
288
- }
1
+ import {
2
+ ErrEip3009InsufficientBalance,
3
+ ErrEip3009NonceAlreadyUsed,
4
+ ErrEip3009NotSupported,
5
+ ErrEip3009SimulationFailed,
6
+ ErrEip3009TokenNameMismatch,
7
+ ErrEip3009TokenVersionMismatch,
8
+ ErrInvalidAuthorizationValue,
9
+ ErrInvalidScheme,
10
+ ErrInvalidSignature,
11
+ ErrMissingEip712Domain,
12
+ ErrNetworkMismatch,
13
+ ErrRecipientMismatch,
14
+ ErrTransactionFailed,
15
+ ErrUndeployedSmartWallet,
16
+ ErrValidAfterInFuture,
17
+ ErrValidBeforeExpired,
18
+ authorizationTypes,
19
+ createNonce,
20
+ eip3009ABI,
21
+ multicall
22
+ } from "./chunk-C4ZQMS77.mjs";
289
23
 
290
24
  // src/exact/v1/client/scheme.ts
25
+ import { getAddress } from "viem";
291
26
  var ExactEvmSchemeV1 = class {
292
27
  /**
293
28
  * Creates a new ExactEvmClientV1 instance.
@@ -371,150 +106,8 @@ var ExactEvmSchemeV1 = class {
371
106
  // src/exact/v1/facilitator/scheme.ts
372
107
  import { getAddress as getAddress3, isAddressEqual, parseErc6492Signature as parseErc6492Signature2 } from "viem";
373
108
 
374
- // src/exact/facilitator/errors.ts
375
- var ErrInvalidScheme = "invalid_exact_evm_scheme";
376
- var ErrNetworkMismatch = "invalid_exact_evm_network_mismatch";
377
- var ErrMissingEip712Domain = "invalid_exact_evm_missing_eip712_domain";
378
- var ErrRecipientMismatch = "invalid_exact_evm_recipient_mismatch";
379
- var ErrInvalidSignature = "invalid_exact_evm_signature";
380
- var ErrValidBeforeExpired = "invalid_exact_evm_payload_authorization_valid_before";
381
- var ErrValidAfterInFuture = "invalid_exact_evm_payload_authorization_valid_after";
382
- var ErrInvalidAuthorizationValue = "invalid_exact_evm_authorization_value";
383
- var ErrUndeployedSmartWallet = "invalid_exact_evm_payload_undeployed_smart_wallet";
384
- var ErrTransactionFailed = "invalid_exact_evm_transaction_failed";
385
- var ErrEip3009TokenNameMismatch = "invalid_exact_evm_token_name_mismatch";
386
- var ErrEip3009TokenVersionMismatch = "invalid_exact_evm_token_version_mismatch";
387
- var ErrEip3009NotSupported = "invalid_exact_evm_eip3009_not_supported";
388
- var ErrEip3009NonceAlreadyUsed = "invalid_exact_evm_nonce_already_used";
389
- var ErrEip3009InsufficientBalance = "invalid_exact_evm_insufficient_balance";
390
- var ErrEip3009SimulationFailed = "invalid_exact_evm_transaction_simulation_failed";
391
- var ErrPermit2InvalidSpender = "invalid_permit2_spender";
392
- var ErrPermit2RecipientMismatch = "invalid_permit2_recipient_mismatch";
393
- var ErrPermit2DeadlineExpired = "permit2_deadline_expired";
394
- var ErrPermit2NotYetValid = "permit2_not_yet_valid";
395
- var ErrPermit2AmountMismatch = "permit2_amount_mismatch";
396
- var ErrPermit2TokenMismatch = "permit2_token_mismatch";
397
- var ErrPermit2InvalidSignature = "invalid_permit2_signature";
398
- var ErrPermit2AllowanceRequired = "permit2_allowance_required";
399
- var ErrPermit2SimulationFailed = "permit2_simulation_failed";
400
- var ErrPermit2InsufficientBalance = "permit2_insufficient_balance";
401
- var ErrPermit2ProxyNotDeployed = "permit2_proxy_not_deployed";
402
- var ErrPermit2InvalidAmount = "permit2_invalid_amount";
403
- var ErrPermit2InvalidDestination = "permit2_invalid_destination";
404
- var ErrPermit2InvalidOwner = "permit2_invalid_owner";
405
- var ErrPermit2PaymentTooEarly = "permit2_payment_too_early";
406
- var ErrPermit2InvalidNonce = "permit2_invalid_nonce";
407
- var ErrPermit2612AmountMismatch = "permit2_2612_amount_mismatch";
408
- var ErrErc20ApprovalInsufficientEthForGas = "erc20_approval_insufficient_eth_for_gas";
409
- var ErrErc20ApprovalInvalidFormat = "invalid_erc20_approval_extension_format";
410
- var ErrErc20ApprovalFromMismatch = "erc20_approval_from_mismatch";
411
- var ErrErc20ApprovalAssetMismatch = "erc20_approval_asset_mismatch";
412
- var ErrErc20ApprovalSpenderNotPermit2 = "erc20_approval_spender_not_permit2";
413
- var ErrErc20ApprovalTxWrongTarget = "erc20_approval_tx_wrong_target";
414
- var ErrErc20ApprovalTxWrongSelector = "erc20_approval_tx_wrong_selector";
415
- var ErrErc20ApprovalTxWrongSpender = "erc20_approval_tx_wrong_spender";
416
- var ErrErc20ApprovalTxInvalidCalldata = "erc20_approval_tx_invalid_calldata";
417
- var ErrErc20ApprovalTxSignerMismatch = "erc20_approval_tx_signer_mismatch";
418
- var ErrErc20ApprovalTxInvalidSignature = "erc20_approval_tx_invalid_signature";
419
- var ErrErc20ApprovalTxParseFailed = "erc20_approval_tx_parse_failed";
420
- var ErrErc20ApprovalTxFailed = "erc20_approval_tx_failed";
421
- var ErrInvalidEip2612ExtensionFormat = "invalid_eip2612_extension_format";
422
- var ErrEip2612FromMismatch = "eip2612_from_mismatch";
423
- var ErrEip2612AssetMismatch = "eip2612_asset_mismatch";
424
- var ErrEip2612SpenderNotPermit2 = "eip2612_spender_not_permit2";
425
- var ErrEip2612DeadlineExpired = "eip2612_deadline_expired";
426
- var ErrUnsupportedPayloadType = "unsupported_payload_type";
427
- var ErrInvalidTransactionState = "invalid_transaction_state";
428
-
429
- // src/exact/facilitator/eip3009-utils.ts
430
- import { encodeFunctionData as encodeFunctionData2, getAddress as getAddress2, parseErc6492Signature, parseSignature } from "viem";
431
-
432
- // src/multicall.ts
433
- import { encodeFunctionData, decodeFunctionResult } from "viem";
434
- var MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
435
- var multicall3GetEthBalanceAbi = [
436
- {
437
- name: "getEthBalance",
438
- inputs: [{ name: "addr", type: "address" }],
439
- outputs: [{ name: "balance", type: "uint256" }],
440
- stateMutability: "view",
441
- type: "function"
442
- }
443
- ];
444
- var multicall3ABI = [
445
- {
446
- inputs: [
447
- { name: "requireSuccess", type: "bool" },
448
- {
449
- name: "calls",
450
- type: "tuple[]",
451
- components: [
452
- { name: "target", type: "address" },
453
- { name: "callData", type: "bytes" }
454
- ]
455
- }
456
- ],
457
- name: "tryAggregate",
458
- outputs: [
459
- {
460
- name: "returnData",
461
- type: "tuple[]",
462
- components: [
463
- { name: "success", type: "bool" },
464
- { name: "returnData", type: "bytes" }
465
- ]
466
- }
467
- ],
468
- stateMutability: "payable",
469
- type: "function"
470
- }
471
- ];
472
- async function multicall(readContract, calls) {
473
- const aggregateCalls = calls.map((call) => {
474
- if ("callData" in call) {
475
- return { target: call.address, callData: call.callData };
476
- }
477
- const callData = encodeFunctionData({
478
- abi: call.abi,
479
- functionName: call.functionName,
480
- args: call.args
481
- });
482
- return { target: call.address, callData };
483
- });
484
- const rawResults = await readContract({
485
- address: MULTICALL3_ADDRESS,
486
- abi: multicall3ABI,
487
- functionName: "tryAggregate",
488
- args: [false, aggregateCalls]
489
- });
490
- return rawResults.map((raw, i) => {
491
- if (!raw.success) {
492
- return {
493
- status: "failure",
494
- error: new Error(`multicall: call reverted (returnData: ${raw.returnData})`)
495
- };
496
- }
497
- const call = calls[i];
498
- if ("callData" in call) {
499
- return { status: "success", result: void 0 };
500
- }
501
- try {
502
- const decoded = decodeFunctionResult({
503
- abi: call.abi,
504
- functionName: call.functionName,
505
- data: raw.returnData
506
- });
507
- return { status: "success", result: decoded };
508
- } catch (err) {
509
- return {
510
- status: "failure",
511
- error: err instanceof Error ? err : new Error(String(err))
512
- };
513
- }
514
- });
515
- }
516
-
517
109
  // src/exact/facilitator/eip3009-utils.ts
110
+ import { encodeFunctionData, getAddress as getAddress2, parseErc6492Signature, parseSignature } from "viem";
518
111
  async function simulateEip3009Transfer(signer, erc20Address, payload, eip6492Deployment) {
519
112
  const auth = payload.authorization;
520
113
  const transferArgs = [
@@ -527,7 +120,7 @@ async function simulateEip3009Transfer(signer, erc20Address, payload, eip6492Dep
527
120
  ];
528
121
  if (eip6492Deployment) {
529
122
  const { signature: innerSignature } = parseErc6492Signature(payload.signature);
530
- const transferCalldata = encodeFunctionData2({
123
+ const transferCalldata = encodeFunctionData({
531
124
  abi: eip3009ABI,
532
125
  functionName: "transferWithAuthorization",
533
126
  args: [...transferArgs, innerSignature]
@@ -961,7 +554,9 @@ var EVM_NETWORK_CHAIN_ID_MAP = {
961
554
  educhain: 41923,
962
555
  "skale-base-sepolia": 324705682,
963
556
  megaeth: 4326,
964
- monad: 143
557
+ monad: 143,
558
+ stable: 988,
559
+ "stable-testnet": 2201
965
560
  };
966
561
  var NETWORKS = Object.keys(EVM_NETWORK_CHAIN_ID_MAP);
967
562
  function getEvmChainIdV1(network) {
@@ -973,73 +568,6 @@ function getEvmChainIdV1(network) {
973
568
  }
974
569
 
975
570
  export {
976
- authorizationTypes,
977
- permit2WitnessTypes,
978
- eip3009ABI,
979
- eip2612PermitTypes,
980
- eip2612NoncesAbi,
981
- erc20ApproveAbi,
982
- erc20AllowanceAbi,
983
- ERC20_APPROVE_GAS_LIMIT,
984
- DEFAULT_MAX_FEE_PER_GAS,
985
- DEFAULT_MAX_PRIORITY_FEE_PER_GAS,
986
- PERMIT2_ADDRESS,
987
- x402ExactPermit2ProxyAddress,
988
- x402UptoPermit2ProxyAddress,
989
- x402ExactPermit2ProxyABI,
990
- getEvmChainId,
991
- createNonce,
992
- createPermit2Nonce,
993
- ErrInvalidScheme,
994
- ErrNetworkMismatch,
995
- ErrMissingEip712Domain,
996
- ErrRecipientMismatch,
997
- ErrInvalidSignature,
998
- ErrValidBeforeExpired,
999
- ErrValidAfterInFuture,
1000
- ErrInvalidAuthorizationValue,
1001
- ErrUndeployedSmartWallet,
1002
- ErrTransactionFailed,
1003
- ErrPermit2InvalidSpender,
1004
- ErrPermit2RecipientMismatch,
1005
- ErrPermit2DeadlineExpired,
1006
- ErrPermit2NotYetValid,
1007
- ErrPermit2AmountMismatch,
1008
- ErrPermit2TokenMismatch,
1009
- ErrPermit2InvalidSignature,
1010
- ErrPermit2AllowanceRequired,
1011
- ErrPermit2SimulationFailed,
1012
- ErrPermit2InsufficientBalance,
1013
- ErrPermit2ProxyNotDeployed,
1014
- ErrPermit2InvalidAmount,
1015
- ErrPermit2InvalidDestination,
1016
- ErrPermit2InvalidOwner,
1017
- ErrPermit2PaymentTooEarly,
1018
- ErrPermit2InvalidNonce,
1019
- ErrPermit2612AmountMismatch,
1020
- ErrErc20ApprovalInsufficientEthForGas,
1021
- ErrErc20ApprovalInvalidFormat,
1022
- ErrErc20ApprovalFromMismatch,
1023
- ErrErc20ApprovalAssetMismatch,
1024
- ErrErc20ApprovalSpenderNotPermit2,
1025
- ErrErc20ApprovalTxWrongTarget,
1026
- ErrErc20ApprovalTxWrongSelector,
1027
- ErrErc20ApprovalTxWrongSpender,
1028
- ErrErc20ApprovalTxInvalidCalldata,
1029
- ErrErc20ApprovalTxSignerMismatch,
1030
- ErrErc20ApprovalTxInvalidSignature,
1031
- ErrErc20ApprovalTxParseFailed,
1032
- ErrErc20ApprovalTxFailed,
1033
- ErrInvalidEip2612ExtensionFormat,
1034
- ErrEip2612FromMismatch,
1035
- ErrEip2612AssetMismatch,
1036
- ErrEip2612SpenderNotPermit2,
1037
- ErrEip2612DeadlineExpired,
1038
- ErrUnsupportedPayloadType,
1039
- ErrInvalidTransactionState,
1040
- MULTICALL3_ADDRESS,
1041
- multicall3GetEthBalanceAbi,
1042
- multicall,
1043
571
  simulateEip3009Transfer,
1044
572
  diagnoseEip3009SimulationFailure,
1045
573
  executeTransferWithAuthorization,
@@ -1049,4 +577,4 @@ export {
1049
577
  getEvmChainIdV1,
1050
578
  ExactEvmSchemeV1 as ExactEvmSchemeV12
1051
579
  };
1052
- //# sourceMappingURL=chunk-IZEI7JTG.mjs.map
580
+ //# sourceMappingURL=chunk-YUJQ7TLD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exact/v1/client/scheme.ts","../../src/exact/v1/facilitator/scheme.ts","../../src/exact/facilitator/eip3009-utils.ts","../../src/v1/index.ts"],"sourcesContent":["import {\n Network,\n PaymentPayload,\n PaymentRequirements,\n SchemeNetworkClient,\n} from \"@x402/core/types\";\nimport { PaymentRequirementsV1 } from \"@x402/core/types/v1\";\nimport { getAddress } from \"viem\";\nimport { authorizationTypes } from \"../../../constants\";\nimport { ClientEvmSigner } from \"../../../signer\";\nimport { ExactEvmPayloadV1 } from \"../../../types\";\nimport { createNonce } from \"../../../utils\";\nimport { EvmNetworkV1, getEvmChainIdV1 } from \"../../../v1\";\n\n/**\n * EVM client implementation for the Exact payment scheme (V1).\n */\nexport class ExactEvmSchemeV1 implements SchemeNetworkClient {\n readonly scheme = \"exact\";\n\n /**\n * Creates a new ExactEvmClientV1 instance.\n *\n * @param signer - The EVM signer for client operations\n */\n constructor(private readonly signer: ClientEvmSigner) {}\n\n /**\n * Creates a payment payload for the Exact scheme (V1).\n *\n * @param x402Version - The x402 protocol version\n * @param paymentRequirements - The payment requirements\n * @returns Promise resolving to a payment payload\n */\n async createPaymentPayload(\n x402Version: number,\n paymentRequirements: PaymentRequirements,\n ): Promise<\n Pick<PaymentPayload, \"x402Version\" | \"payload\"> & { scheme: string; network: Network }\n > {\n const selectedV1 = paymentRequirements as unknown as PaymentRequirementsV1;\n const nonce = createNonce();\n const now = Math.floor(Date.now() / 1000);\n\n const authorization: ExactEvmPayloadV1[\"authorization\"] = {\n from: this.signer.address,\n to: getAddress(selectedV1.payTo),\n value: selectedV1.maxAmountRequired,\n validAfter: (now - 600).toString(), // 10 minutes before\n validBefore: (now + selectedV1.maxTimeoutSeconds).toString(),\n nonce,\n };\n\n // Sign the authorization\n const signature = await this.signAuthorization(authorization, selectedV1);\n\n const payload: ExactEvmPayloadV1 = {\n authorization,\n signature,\n };\n\n return {\n x402Version,\n scheme: selectedV1.scheme,\n network: selectedV1.network,\n payload,\n };\n }\n\n /**\n * Sign the EIP-3009 authorization using EIP-712\n *\n * @param authorization - The authorization to sign\n * @param requirements - The payment requirements\n * @returns Promise resolving to the signature\n */\n private async signAuthorization(\n authorization: ExactEvmPayloadV1[\"authorization\"],\n requirements: PaymentRequirementsV1,\n ): Promise<`0x${string}`> {\n const chainId = getEvmChainIdV1(requirements.network as EvmNetworkV1);\n\n if (!requirements.extra?.name || !requirements.extra?.version) {\n throw new Error(\n `EIP-712 domain parameters (name, version) are required in payment requirements for asset ${requirements.asset}`,\n );\n }\n\n const { name, version } = requirements.extra;\n\n const domain = {\n name,\n version,\n chainId,\n verifyingContract: getAddress(requirements.asset),\n };\n\n const message = {\n from: getAddress(authorization.from),\n to: getAddress(authorization.to),\n value: BigInt(authorization.value),\n validAfter: BigInt(authorization.validAfter),\n validBefore: BigInt(authorization.validBefore),\n nonce: authorization.nonce,\n };\n\n return await this.signer.signTypedData({\n domain,\n types: authorizationTypes,\n primaryType: \"TransferWithAuthorization\",\n message,\n });\n }\n}\n","import {\n PaymentPayload,\n PaymentPayloadV1,\n PaymentRequirements,\n SchemeNetworkFacilitator,\n SettleResponse,\n VerifyResponse,\n} from \"@x402/core/types\";\nimport { PaymentRequirementsV1 } from \"@x402/core/types/v1\";\nimport { getAddress, Hex, isAddressEqual, parseErc6492Signature } from \"viem\";\nimport { authorizationTypes } from \"../../../constants\";\nimport { FacilitatorEvmSigner } from \"../../../signer\";\nimport { ExactEvmPayloadV1 } from \"../../../types\";\nimport { EvmNetworkV1, getEvmChainIdV1 } from \"../../../v1\";\nimport * as Errors from \"../../facilitator/errors\";\nimport {\n diagnoseEip3009SimulationFailure,\n executeTransferWithAuthorization,\n simulateEip3009Transfer,\n} from \"../../facilitator/eip3009-utils\";\n\nexport interface VerifyV1Options {\n /** Run onchain simulation. Defaults to true. */\n simulate?: boolean;\n}\n\nexport interface ExactEvmSchemeV1Config {\n /**\n * If enabled, the facilitator will deploy ERC-4337 smart wallets\n * via EIP-6492 when encountering undeployed contract signatures.\n *\n * @default false\n */\n deployERC4337WithEIP6492?: boolean;\n /**\n * If enabled, simulates transaction before settling. Defaults to false, ie only simulate during verify.\n *\n * @default false\n */\n simulateInSettle?: boolean;\n}\n\n/**\n * EVM facilitator implementation for the Exact payment scheme (V1).\n */\nexport class ExactEvmSchemeV1 implements SchemeNetworkFacilitator {\n readonly scheme = \"exact\";\n readonly caipFamily = \"eip155:*\";\n private readonly config: Required<ExactEvmSchemeV1Config>;\n\n /**\n * Creates a new ExactEvmFacilitatorV1 instance.\n *\n * @param signer - The EVM signer for facilitator operations\n * @param config - Optional configuration for the facilitator\n */\n constructor(\n private readonly signer: FacilitatorEvmSigner,\n config?: ExactEvmSchemeV1Config,\n ) {\n this.config = {\n deployERC4337WithEIP6492: config?.deployERC4337WithEIP6492 ?? false,\n simulateInSettle: config?.simulateInSettle ?? false,\n };\n }\n\n /**\n * Get mechanism-specific extra data for the supported kinds endpoint.\n * For EVM, no extra data is needed.\n *\n * @param _ - The network identifier (unused for EVM)\n * @returns undefined (EVM has no extra data)\n */\n getExtra(_: string): Record<string, unknown> | undefined {\n return undefined;\n }\n\n /**\n * Get signer addresses used by this facilitator.\n * Returns all addresses this facilitator can use for signing/settling transactions.\n *\n * @param _ - The network identifier (unused for EVM, addresses are network-agnostic)\n * @returns Array of facilitator wallet addresses\n */\n getSigners(_: string): string[] {\n return [...this.signer.getAddresses()];\n }\n\n /**\n * Verifies a payment payload (V1).\n *\n * @param payload - The payment payload to verify\n * @param requirements - The payment requirements\n * @returns Promise resolving to verification response\n */\n async verify(\n payload: PaymentPayload,\n requirements: PaymentRequirements,\n ): Promise<VerifyResponse> {\n return this._verify(payload, requirements);\n }\n\n /**\n * Settles a payment by executing the transfer (V1).\n *\n * @param payload - The payment payload to settle\n * @param requirements - The payment requirements\n * @returns Promise resolving to settlement response\n */\n async settle(\n payload: PaymentPayload,\n requirements: PaymentRequirements,\n ): Promise<SettleResponse> {\n const payloadV1 = payload as unknown as PaymentPayloadV1;\n const exactEvmPayload = payload.payload as ExactEvmPayloadV1;\n\n // Re-verify before settling\n const valid = await this._verify(payload, requirements, {\n simulate: this.config.simulateInSettle ?? false,\n });\n if (!valid.isValid) {\n return {\n success: false,\n network: payloadV1.network,\n transaction: \"\",\n errorReason: valid.invalidReason ?? Errors.ErrInvalidScheme,\n payer: exactEvmPayload.authorization.from,\n };\n }\n\n try {\n // Parse ERC-6492 signature if applicable (for optional deployment)\n const { address: factoryAddress, data: factoryCalldata } = parseErc6492Signature(\n exactEvmPayload.signature!,\n );\n\n // Deploy ERC-4337 smart wallet via EIP-6492 if configured and needed\n if (\n this.config.deployERC4337WithEIP6492 &&\n factoryAddress &&\n factoryCalldata &&\n !isAddressEqual(factoryAddress, \"0x0000000000000000000000000000000000000000\")\n ) {\n // Check if smart wallet is already deployed\n const payerAddress = exactEvmPayload.authorization.from;\n const bytecode = await this.signer.getCode({ address: payerAddress });\n\n if (!bytecode || bytecode === \"0x\") {\n // Send the factory calldata directly as a transaction\n // The factoryCalldata already contains the complete encoded function call\n const deployTx = await this.signer.sendTransaction({\n to: factoryAddress as Hex,\n data: factoryCalldata as Hex,\n });\n\n // Wait for deployment transaction\n await this.signer.waitForTransactionReceipt({ hash: deployTx });\n }\n }\n\n const tx = await executeTransferWithAuthorization(\n this.signer,\n getAddress(requirements.asset),\n exactEvmPayload,\n );\n\n // Wait for transaction confirmation\n const receipt = await this.signer.waitForTransactionReceipt({ hash: tx });\n\n if (receipt.status !== \"success\") {\n return {\n success: false,\n errorReason: Errors.ErrTransactionFailed,\n transaction: tx,\n network: payloadV1.network,\n payer: exactEvmPayload.authorization.from,\n };\n }\n\n return {\n success: true,\n transaction: tx,\n network: payloadV1.network,\n payer: exactEvmPayload.authorization.from,\n };\n } catch (error) {\n return {\n success: false,\n errorReason: error instanceof Error ? error.message : Errors.ErrTransactionFailed,\n transaction: \"\",\n network: payloadV1.network,\n payer: exactEvmPayload.authorization.from,\n };\n }\n }\n\n /**\n * Internal verify with optional simulation control.\n *\n * @param payload - The payment payload to verify\n * @param requirements - The payment requirements\n * @param options - Verification options (e.g. simulate)\n * @returns Promise resolving to verification response\n */\n private async _verify(\n payload: PaymentPayload,\n requirements: PaymentRequirements,\n options?: VerifyV1Options,\n ): Promise<VerifyResponse> {\n const requirementsV1 = requirements as unknown as PaymentRequirementsV1;\n const payloadV1 = payload as unknown as PaymentPayloadV1;\n const exactEvmPayload = payload.payload as ExactEvmPayloadV1;\n const payer = exactEvmPayload.authorization.from;\n let eip6492Deployment:\n | { factoryAddress: `0x${string}`; factoryCalldata: `0x${string}` }\n | undefined;\n\n // Verify scheme matches\n if (payloadV1.scheme !== \"exact\" || requirements.scheme !== \"exact\") {\n return {\n isValid: false,\n invalidReason: Errors.ErrInvalidScheme,\n payer,\n };\n }\n\n // Get chain configuration\n let chainId: number;\n try {\n chainId = getEvmChainIdV1(payloadV1.network as EvmNetworkV1);\n } catch {\n return {\n isValid: false,\n invalidReason: Errors.ErrNetworkMismatch,\n payer,\n };\n }\n\n if (!requirements.extra?.name || !requirements.extra?.version) {\n return {\n isValid: false,\n invalidReason: Errors.ErrMissingEip712Domain,\n payer,\n };\n }\n\n const { name, version } = requirements.extra;\n const erc20Address = getAddress(requirements.asset);\n\n // Verify network matches\n if (payloadV1.network !== requirements.network) {\n return {\n isValid: false,\n invalidReason: Errors.ErrNetworkMismatch,\n payer,\n };\n }\n\n // Build typed data for signature verification\n const permitTypedData = {\n types: authorizationTypes,\n primaryType: \"TransferWithAuthorization\" as const,\n domain: {\n name,\n version,\n chainId,\n verifyingContract: erc20Address,\n },\n message: {\n from: exactEvmPayload.authorization.from,\n to: exactEvmPayload.authorization.to,\n value: BigInt(exactEvmPayload.authorization.value),\n validAfter: BigInt(exactEvmPayload.authorization.validAfter),\n validBefore: BigInt(exactEvmPayload.authorization.validBefore),\n nonce: exactEvmPayload.authorization.nonce,\n },\n };\n\n // Verify signature (flatten EIP-6492 handling out of catch block)\n let isValid = false;\n try {\n isValid = await this.signer.verifyTypedData({\n address: payer,\n ...permitTypedData,\n signature: exactEvmPayload.signature!,\n });\n } catch {\n isValid = false;\n }\n\n const signature = exactEvmPayload.signature!;\n const sigLen = signature.startsWith(\"0x\") ? signature.length - 2 : signature.length;\n\n // Extract EIP-6492 deployment info (factory address + calldata) if present\n const erc6492Data = parseErc6492Signature(signature);\n const hasDeploymentInfo =\n erc6492Data.address &&\n erc6492Data.data &&\n !isAddressEqual(erc6492Data.address, \"0x0000000000000000000000000000000000000000\");\n\n if (hasDeploymentInfo) {\n eip6492Deployment = {\n factoryAddress: erc6492Data.address!,\n factoryCalldata: erc6492Data.data!,\n };\n }\n\n if (!isValid) {\n const isSmartWallet = sigLen > 130; // 65 bytes = 130 hex chars for EOA\n\n if (!isSmartWallet) {\n return {\n isValid: false,\n invalidReason: Errors.ErrInvalidSignature,\n payer,\n };\n }\n\n const bytecode = await this.signer.getCode({ address: payer });\n const isDeployed = bytecode && bytecode !== \"0x\";\n\n if (!isDeployed && !hasDeploymentInfo) {\n return {\n isValid: false,\n invalidReason: Errors.ErrUndeployedSmartWallet,\n payer,\n };\n }\n }\n\n // Verify payment recipient matches\n if (getAddress(exactEvmPayload.authorization.to) !== getAddress(requirements.payTo)) {\n return {\n isValid: false,\n invalidReason: Errors.ErrRecipientMismatch,\n payer,\n };\n }\n\n // Verify validBefore is in the future (with 6 second buffer for block time)\n const now = Math.floor(Date.now() / 1000);\n if (BigInt(exactEvmPayload.authorization.validBefore) < BigInt(now + 6)) {\n return {\n isValid: false,\n invalidReason: Errors.ErrValidBeforeExpired,\n payer,\n };\n }\n\n // Verify validAfter is not in the future\n if (BigInt(exactEvmPayload.authorization.validAfter) > BigInt(now)) {\n return {\n isValid: false,\n invalidReason: Errors.ErrValidAfterInFuture,\n payer,\n };\n }\n\n // Verify amount exactly matches requirements\n if (BigInt(exactEvmPayload.authorization.value) !== BigInt(requirementsV1.maxAmountRequired)) {\n return {\n isValid: false,\n invalidReason: Errors.ErrInvalidAuthorizationValue,\n payer,\n };\n }\n\n // Transaction simulation\n if (options?.simulate !== false) {\n const simulationSucceeded = await simulateEip3009Transfer(\n this.signer,\n erc20Address,\n exactEvmPayload,\n eip6492Deployment,\n );\n if (!simulationSucceeded) {\n return diagnoseEip3009SimulationFailure(\n this.signer,\n erc20Address,\n exactEvmPayload,\n requirements,\n requirementsV1.maxAmountRequired,\n );\n }\n }\n\n return {\n isValid: true,\n invalidReason: undefined,\n payer,\n };\n }\n}\n","import { PaymentRequirements, VerifyResponse } from \"@x402/core/types\";\nimport { encodeFunctionData, getAddress, Hex, parseErc6492Signature, parseSignature } from \"viem\";\nimport { eip3009ABI } from \"../../constants\";\nimport { multicall, ContractCall, RawContractCall } from \"../../multicall\";\nimport { FacilitatorEvmSigner } from \"../../signer\";\nimport { ExactEIP3009Payload } from \"../../types\";\nimport * as Errors from \"./errors\";\n\nexport interface Eip6492Deployment {\n factoryAddress: `0x${string}`;\n factoryCalldata: `0x${string}`;\n}\n\n/**\n * Simulates transferWithAuthorization via eth_call.\n * Returns true if simulation succeeded, false if it failed.\n *\n * @param signer - EVM signer for contract reads\n * @param erc20Address - ERC-20 token contract address\n * @param payload - EIP-3009 transfer authorization payload\n * @param eip6492Deployment - Optional EIP-6492 factory info for undeployed smart wallets\n *\n * @returns true if simulation succeeded, false if it failed\n */\nexport async function simulateEip3009Transfer(\n signer: FacilitatorEvmSigner,\n erc20Address: `0x${string}`,\n payload: ExactEIP3009Payload,\n eip6492Deployment?: Eip6492Deployment,\n): Promise<boolean> {\n const auth = payload.authorization;\n const transferArgs = [\n getAddress(auth.from),\n getAddress(auth.to),\n BigInt(auth.value),\n BigInt(auth.validAfter),\n BigInt(auth.validBefore),\n auth.nonce,\n ] as const;\n\n if (eip6492Deployment) {\n const { signature: innerSignature } = parseErc6492Signature(payload.signature!);\n const transferCalldata = encodeFunctionData({\n abi: eip3009ABI,\n functionName: \"transferWithAuthorization\",\n args: [...transferArgs, innerSignature],\n });\n\n try {\n const results = await multicall(signer.readContract.bind(signer), [\n {\n address: getAddress(eip6492Deployment.factoryAddress),\n callData: eip6492Deployment.factoryCalldata,\n } satisfies RawContractCall,\n {\n address: erc20Address,\n callData: transferCalldata,\n } satisfies RawContractCall,\n ]);\n\n return results[1]?.status === \"success\";\n } catch {\n return false;\n }\n }\n\n const sig = payload.signature!;\n const sigLength = sig.startsWith(\"0x\") ? sig.length - 2 : sig.length;\n const isECDSA = sigLength === 130;\n\n try {\n if (isECDSA) {\n const parsedSig = parseSignature(sig);\n await signer.readContract({\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"transferWithAuthorization\",\n args: [\n ...transferArgs,\n (parsedSig.v as number | undefined) ?? parsedSig.yParity,\n parsedSig.r,\n parsedSig.s,\n ],\n });\n } else {\n await signer.readContract({\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"transferWithAuthorization\",\n args: [...transferArgs, sig],\n });\n }\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * After simulation fails, runs a single diagnostic multicall to determine the most specific error reason.\n * Checks balanceOf, name, version and authorizationState in one RPC round-trip.\n *\n * @param signer - EVM signer used for the payment\n * @param erc20Address - Address of the ERC-20 token contract\n * @param payload - The EIP-3009 transfer authorization payload\n * @param requirements - Payment requirements to validate against\n * @param amountRequired - Required amount for the payment (balance check)\n *\n * @returns Promise resolving to the verification result with validity and optional invalid reason\n */\nexport async function diagnoseEip3009SimulationFailure(\n signer: FacilitatorEvmSigner,\n erc20Address: `0x${string}`,\n payload: ExactEIP3009Payload,\n requirements: PaymentRequirements,\n amountRequired: string,\n): Promise<VerifyResponse> {\n const payer = payload.authorization.from;\n\n const diagnosticCalls: ContractCall[] = [\n {\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"balanceOf\",\n args: [payload.authorization.from],\n },\n {\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"name\",\n },\n {\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"version\",\n },\n {\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"authorizationState\",\n args: [payload.authorization.from, payload.authorization.nonce],\n },\n ];\n\n try {\n const results = await multicall(signer.readContract.bind(signer), diagnosticCalls);\n\n const [balanceResult, nameResult, versionResult, authStateResult] = results;\n\n if (authStateResult.status === \"failure\") {\n return { isValid: false, invalidReason: Errors.ErrEip3009NotSupported, payer };\n }\n\n if (authStateResult.status === \"success\" && authStateResult.result === true) {\n return { isValid: false, invalidReason: Errors.ErrEip3009NonceAlreadyUsed, payer };\n }\n\n if (\n nameResult.status === \"success\" &&\n requirements.extra?.name &&\n nameResult.result !== requirements.extra.name\n ) {\n return { isValid: false, invalidReason: Errors.ErrEip3009TokenNameMismatch, payer };\n }\n\n if (\n versionResult.status === \"success\" &&\n requirements.extra?.version &&\n versionResult.result !== requirements.extra.version\n ) {\n return { isValid: false, invalidReason: Errors.ErrEip3009TokenVersionMismatch, payer };\n }\n\n if (balanceResult.status === \"success\") {\n const balance = balanceResult.result as bigint;\n if (balance < BigInt(amountRequired)) {\n return {\n isValid: false,\n invalidReason: Errors.ErrEip3009InsufficientBalance,\n payer,\n };\n }\n }\n } catch {\n // Diagnostic multicall failed — fall through to generic error\n }\n\n return { isValid: false, invalidReason: Errors.ErrEip3009SimulationFailed, payer };\n}\n\n/**\n * Executes transferWithAuthorization onchain.\n *\n * @param signer - EVM signer for contract writes\n * @param erc20Address - ERC-20 token contract address\n * @param payload - EIP-3009 transfer authorization payload\n *\n * @returns Transaction hash\n */\nexport async function executeTransferWithAuthorization(\n signer: FacilitatorEvmSigner,\n erc20Address: `0x${string}`,\n payload: ExactEIP3009Payload,\n): Promise<Hex> {\n const { signature } = parseErc6492Signature(payload.signature!);\n const signatureLength = signature.startsWith(\"0x\") ? signature.length - 2 : signature.length;\n const isECDSA = signatureLength === 130;\n\n const auth = payload.authorization;\n const baseArgs = [\n getAddress(auth.from),\n getAddress(auth.to),\n BigInt(auth.value),\n BigInt(auth.validAfter),\n BigInt(auth.validBefore),\n auth.nonce,\n ] as const;\n\n if (isECDSA) {\n const parsedSig = parseSignature(signature);\n return signer.writeContract({\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"transferWithAuthorization\",\n args: [\n ...baseArgs,\n (parsedSig.v as number | undefined) || parsedSig.yParity,\n parsedSig.r,\n parsedSig.s,\n ],\n });\n }\n\n return signer.writeContract({\n address: erc20Address,\n abi: eip3009ABI,\n functionName: \"transferWithAuthorization\",\n args: [...baseArgs, signature],\n });\n}\n","export { ExactEvmSchemeV1 } from \"../exact/v1\";\n\nexport const EVM_NETWORK_CHAIN_ID_MAP = {\n ethereum: 1,\n sepolia: 11155111,\n abstract: 2741,\n \"abstract-testnet\": 11124,\n \"base-sepolia\": 84532,\n base: 8453,\n \"avalanche-fuji\": 43113,\n avalanche: 43114,\n iotex: 4689,\n sei: 1329,\n \"sei-testnet\": 1328,\n polygon: 137,\n \"polygon-amoy\": 80002,\n peaq: 3338,\n story: 1514,\n educhain: 41923,\n \"skale-base-sepolia\": 324705682,\n megaeth: 4326,\n monad: 143,\n stable: 988,\n \"stable-testnet\": 2201,\n} as const;\n\nexport type EvmNetworkV1 = keyof typeof EVM_NETWORK_CHAIN_ID_MAP;\n\nexport const NETWORKS: string[] = Object.keys(EVM_NETWORK_CHAIN_ID_MAP);\n\n/**\n * Extract chain ID from a v1 legacy network name.\n *\n * @param network - The v1 network name (e.g., \"base-sepolia\", \"polygon\")\n * @returns The numeric chain ID\n * @throws Error if the network name is not a known v1 network\n */\nexport function getEvmChainIdV1(network: string): number {\n const chainId = EVM_NETWORK_CHAIN_ID_MAP[network as EvmNetworkV1];\n if (!chainId) {\n throw new Error(`Unsupported v1 network: ${network}`);\n }\n return chainId;\n}\n"],"mappings":"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","names":["getAddress","parseErc6492Signature","getAddress","getAddress","ExactEvmSchemeV1","parseErc6492Signature","getAddress"]}
@@ -1,8 +1,9 @@
1
- import { i as ExactEvmSchemeOptions } from '../../permit2-Bbh3a8_h.mjs';
2
- export { E as ExactEvmScheme, j as ExactEvmSchemeConfig, k as ExactEvmSchemeConfigByChainId, P as Permit2AllowanceParams, c as createPermit2ApprovalTx, e as erc20AllowanceAbi, g as getPermit2AllowanceReadParams } from '../../permit2-Bbh3a8_h.mjs';
1
+ export { E as ExactEvmScheme } from '../../scheme-DCR7hsa3.mjs';
3
2
  import { x402Client, SelectPaymentRequirements, PaymentPolicy } from '@x402/core/client';
4
3
  import { Network } from '@x402/core/types';
5
4
  import { C as ClientEvmSigner } from '../../signer-D912R4mq.mjs';
5
+ import { E as ExactEvmSchemeOptions } from '../../permit2-CyZxwngN.mjs';
6
+ export { j as ExactEvmSchemeConfig, k as ExactEvmSchemeConfigByChainId, P as Permit2AllowanceParams, c as createPermit2ApprovalTx, e as erc20AllowanceAbi, g as getPermit2AllowanceReadParams } from '../../permit2-CyZxwngN.mjs';
6
7
 
7
8
  /**
8
9
  * Configuration options for registering EVM schemes to an x402Client