@x402/evm 2.2.0 → 2.3.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/dist/cjs/exact/client/index.d.ts +2 -2
- package/dist/cjs/exact/client/index.js +264 -119
- package/dist/cjs/exact/client/index.js.map +1 -1
- package/dist/cjs/exact/facilitator/index.d.ts +3 -0
- package/dist/cjs/exact/facilitator/index.js +691 -281
- package/dist/cjs/exact/facilitator/index.js.map +1 -1
- package/dist/cjs/exact/v1/client/index.js +43 -17
- package/dist/cjs/exact/v1/client/index.js.map +1 -1
- package/dist/cjs/exact/v1/facilitator/index.js +59 -26
- package/dist/cjs/exact/v1/facilitator/index.js.map +1 -1
- package/dist/cjs/index.d.ts +458 -31
- package/dist/cjs/index.js +438 -63
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/permit2-BYv82va2.d.ts +103 -0
- package/dist/cjs/v1/index.d.ts +21 -1
- package/dist/cjs/v1/index.js +33 -29
- package/dist/cjs/v1/index.js.map +1 -1
- package/dist/esm/chunk-DSSJHWGT.mjs +658 -0
- package/dist/esm/chunk-DSSJHWGT.mjs.map +1 -0
- package/dist/esm/chunk-PFULIQAE.mjs +13 -0
- package/dist/esm/chunk-PFULIQAE.mjs.map +1 -0
- package/dist/esm/chunk-U4H6Q62Q.mjs +229 -0
- package/dist/esm/chunk-U4H6Q62Q.mjs.map +1 -0
- package/dist/esm/exact/client/index.d.mts +2 -2
- package/dist/esm/exact/client/index.mjs +10 -30
- package/dist/esm/exact/client/index.mjs.map +1 -1
- package/dist/esm/exact/facilitator/index.d.mts +3 -0
- package/dist/esm/exact/facilitator/index.mjs +491 -241
- package/dist/esm/exact/facilitator/index.mjs.map +1 -1
- package/dist/esm/exact/v1/client/index.mjs +1 -2
- package/dist/esm/exact/v1/facilitator/index.mjs +2 -3
- package/dist/esm/index.d.mts +458 -31
- package/dist/esm/index.mjs +31 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/permit2-BsAoJiWD.d.mts +103 -0
- package/dist/esm/v1/index.d.mts +21 -1
- package/dist/esm/v1/index.mjs +4 -6
- package/package.json +2 -2
- package/dist/esm/chunk-FOUXRQAV.mjs +0 -88
- package/dist/esm/chunk-FOUXRQAV.mjs.map +0 -1
- package/dist/esm/chunk-JYZWCLMP.mjs +0 -305
- package/dist/esm/chunk-JYZWCLMP.mjs.map +0 -1
- package/dist/esm/chunk-PSA4YVU2.mjs +0 -92
- package/dist/esm/chunk-PSA4YVU2.mjs.map +0 -1
- package/dist/esm/chunk-QLXM7BIB.mjs +0 -23
- package/dist/esm/chunk-QLXM7BIB.mjs.map +0 -1
- package/dist/esm/chunk-ZYXTTU74.mjs +0 -88
- package/dist/esm/chunk-ZYXTTU74.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { ExactEvmScheme } from '../../
|
|
2
|
-
import {
|
|
1
|
+
export { E as ExactEvmScheme, P as Permit2AllowanceParams, c as createPermit2ApprovalTx, e as erc20AllowanceAbi, g as getPermit2AllowanceReadParams } from '../../permit2-BYv82va2.js';
|
|
2
|
+
import { SelectPaymentRequirements, PaymentPolicy, x402Client } from '@x402/core/client';
|
|
3
3
|
import { Network } from '@x402/core/types';
|
|
4
4
|
import { C as ClientEvmSigner } from '../../signer-5OVDxViv.js';
|
|
5
5
|
|
|
@@ -21,12 +21,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var client_exports = {};
|
|
22
22
|
__export(client_exports, {
|
|
23
23
|
ExactEvmScheme: () => ExactEvmScheme,
|
|
24
|
+
createPermit2ApprovalTx: () => createPermit2ApprovalTx,
|
|
25
|
+
erc20AllowanceAbi: () => erc20AllowanceAbi,
|
|
26
|
+
getPermit2AllowanceReadParams: () => getPermit2AllowanceReadParams,
|
|
24
27
|
registerExactEvmScheme: () => registerExactEvmScheme
|
|
25
28
|
});
|
|
26
29
|
module.exports = __toCommonJS(client_exports);
|
|
27
30
|
|
|
28
|
-
// src/exact/client/
|
|
29
|
-
var
|
|
31
|
+
// src/exact/client/eip3009.ts
|
|
32
|
+
var import_viem4 = require("viem");
|
|
30
33
|
|
|
31
34
|
// src/constants.ts
|
|
32
35
|
var authorizationTypes = {
|
|
@@ -39,32 +42,35 @@ var authorizationTypes = {
|
|
|
39
42
|
{ name: "nonce", type: "bytes32" }
|
|
40
43
|
]
|
|
41
44
|
};
|
|
45
|
+
var permit2WitnessTypes = {
|
|
46
|
+
PermitWitnessTransferFrom: [
|
|
47
|
+
{ name: "permitted", type: "TokenPermissions" },
|
|
48
|
+
{ name: "spender", type: "address" },
|
|
49
|
+
{ name: "nonce", type: "uint256" },
|
|
50
|
+
{ name: "deadline", type: "uint256" },
|
|
51
|
+
{ name: "witness", type: "Witness" }
|
|
52
|
+
],
|
|
53
|
+
TokenPermissions: [
|
|
54
|
+
{ name: "token", type: "address" },
|
|
55
|
+
{ name: "amount", type: "uint256" }
|
|
56
|
+
],
|
|
57
|
+
Witness: [
|
|
58
|
+
{ name: "to", type: "address" },
|
|
59
|
+
{ name: "validAfter", type: "uint256" },
|
|
60
|
+
{ name: "extra", type: "bytes" }
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
var PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
64
|
+
var x402ExactPermit2ProxyAddress = "0x4020615294c913F045dc10f0a5cdEbd86c280001";
|
|
42
65
|
|
|
43
66
|
// src/utils.ts
|
|
44
|
-
var
|
|
45
|
-
function getEvmChainId(network) {
|
|
46
|
-
const networkMap = {
|
|
47
|
-
base: 8453,
|
|
48
|
-
"base-sepolia": 84532,
|
|
49
|
-
ethereum: 1,
|
|
50
|
-
sepolia: 11155111,
|
|
51
|
-
polygon: 137,
|
|
52
|
-
"polygon-amoy": 80002
|
|
53
|
-
};
|
|
54
|
-
return networkMap[network] || 1;
|
|
55
|
-
}
|
|
56
|
-
function createNonce() {
|
|
57
|
-
const cryptoObj = typeof globalThis.crypto !== "undefined" ? globalThis.crypto : globalThis.crypto;
|
|
58
|
-
if (!cryptoObj) {
|
|
59
|
-
throw new Error("Crypto API not available");
|
|
60
|
-
}
|
|
61
|
-
return (0, import_viem.toHex)(cryptoObj.getRandomValues(new Uint8Array(32)));
|
|
62
|
-
}
|
|
67
|
+
var import_viem3 = require("viem");
|
|
63
68
|
|
|
64
|
-
// src/exact/client/scheme.ts
|
|
65
|
-
var
|
|
69
|
+
// src/exact/v1/client/scheme.ts
|
|
70
|
+
var import_viem = require("viem");
|
|
71
|
+
var ExactEvmSchemeV1 = class {
|
|
66
72
|
/**
|
|
67
|
-
* Creates a new
|
|
73
|
+
* Creates a new ExactEvmClientV1 instance.
|
|
68
74
|
*
|
|
69
75
|
* @param signer - The EVM signer for client operations
|
|
70
76
|
*/
|
|
@@ -73,31 +79,34 @@ var ExactEvmScheme = class {
|
|
|
73
79
|
this.scheme = "exact";
|
|
74
80
|
}
|
|
75
81
|
/**
|
|
76
|
-
* Creates a payment payload for the Exact scheme.
|
|
82
|
+
* Creates a payment payload for the Exact scheme (V1).
|
|
77
83
|
*
|
|
78
84
|
* @param x402Version - The x402 protocol version
|
|
79
85
|
* @param paymentRequirements - The payment requirements
|
|
80
86
|
* @returns Promise resolving to a payment payload
|
|
81
87
|
*/
|
|
82
88
|
async createPaymentPayload(x402Version, paymentRequirements) {
|
|
89
|
+
const selectedV1 = paymentRequirements;
|
|
83
90
|
const nonce = createNonce();
|
|
84
91
|
const now = Math.floor(Date.now() / 1e3);
|
|
85
92
|
const authorization = {
|
|
86
93
|
from: this.signer.address,
|
|
87
|
-
to: (0,
|
|
88
|
-
value:
|
|
94
|
+
to: (0, import_viem.getAddress)(selectedV1.payTo),
|
|
95
|
+
value: selectedV1.maxAmountRequired,
|
|
89
96
|
validAfter: (now - 600).toString(),
|
|
90
97
|
// 10 minutes before
|
|
91
|
-
validBefore: (now +
|
|
98
|
+
validBefore: (now + selectedV1.maxTimeoutSeconds).toString(),
|
|
92
99
|
nonce
|
|
93
100
|
};
|
|
94
|
-
const signature = await this.signAuthorization(authorization,
|
|
101
|
+
const signature = await this.signAuthorization(authorization, selectedV1);
|
|
95
102
|
const payload = {
|
|
96
103
|
authorization,
|
|
97
104
|
signature
|
|
98
105
|
};
|
|
99
106
|
return {
|
|
100
107
|
x402Version,
|
|
108
|
+
scheme: selectedV1.scheme,
|
|
109
|
+
network: selectedV1.network,
|
|
101
110
|
payload
|
|
102
111
|
};
|
|
103
112
|
}
|
|
@@ -109,7 +118,7 @@ var ExactEvmScheme = class {
|
|
|
109
118
|
* @returns Promise resolving to the signature
|
|
110
119
|
*/
|
|
111
120
|
async signAuthorization(authorization, requirements) {
|
|
112
|
-
const chainId =
|
|
121
|
+
const chainId = getEvmChainId(requirements.network);
|
|
113
122
|
if (!requirements.extra?.name || !requirements.extra?.version) {
|
|
114
123
|
throw new Error(
|
|
115
124
|
`EIP-712 domain parameters (name, version) are required in payment requirements for asset ${requirements.asset}`
|
|
@@ -120,11 +129,11 @@ var ExactEvmScheme = class {
|
|
|
120
129
|
name,
|
|
121
130
|
version,
|
|
122
131
|
chainId,
|
|
123
|
-
verifyingContract: (0,
|
|
132
|
+
verifyingContract: (0, import_viem.getAddress)(requirements.asset)
|
|
124
133
|
};
|
|
125
134
|
const message = {
|
|
126
|
-
from: (0,
|
|
127
|
-
to: (0,
|
|
135
|
+
from: (0, import_viem.getAddress)(authorization.from),
|
|
136
|
+
to: (0, import_viem.getAddress)(authorization.to),
|
|
128
137
|
value: BigInt(authorization.value),
|
|
129
138
|
validAfter: BigInt(authorization.validAfter),
|
|
130
139
|
validBefore: BigInt(authorization.validBefore),
|
|
@@ -139,11 +148,219 @@ var ExactEvmScheme = class {
|
|
|
139
148
|
}
|
|
140
149
|
};
|
|
141
150
|
|
|
142
|
-
// src/exact/v1/
|
|
143
|
-
var
|
|
144
|
-
|
|
151
|
+
// src/exact/v1/facilitator/scheme.ts
|
|
152
|
+
var import_viem2 = require("viem");
|
|
153
|
+
|
|
154
|
+
// src/v1/index.ts
|
|
155
|
+
var EVM_NETWORK_CHAIN_ID_MAP = {
|
|
156
|
+
ethereum: 1,
|
|
157
|
+
sepolia: 11155111,
|
|
158
|
+
abstract: 2741,
|
|
159
|
+
"abstract-testnet": 11124,
|
|
160
|
+
"base-sepolia": 84532,
|
|
161
|
+
base: 8453,
|
|
162
|
+
"avalanche-fuji": 43113,
|
|
163
|
+
avalanche: 43114,
|
|
164
|
+
iotex: 4689,
|
|
165
|
+
sei: 1329,
|
|
166
|
+
"sei-testnet": 1328,
|
|
167
|
+
polygon: 137,
|
|
168
|
+
"polygon-amoy": 80002,
|
|
169
|
+
peaq: 3338,
|
|
170
|
+
story: 1514,
|
|
171
|
+
educhain: 41923,
|
|
172
|
+
"skale-base-sepolia": 324705682
|
|
173
|
+
};
|
|
174
|
+
var NETWORKS = Object.keys(EVM_NETWORK_CHAIN_ID_MAP);
|
|
175
|
+
|
|
176
|
+
// src/utils.ts
|
|
177
|
+
function getEvmChainId(network) {
|
|
178
|
+
const chainId = EVM_NETWORK_CHAIN_ID_MAP[network];
|
|
179
|
+
if (!chainId) {
|
|
180
|
+
throw new Error(`Unsupported network: ${network}`);
|
|
181
|
+
}
|
|
182
|
+
return chainId;
|
|
183
|
+
}
|
|
184
|
+
function getCrypto() {
|
|
185
|
+
const cryptoObj = globalThis.crypto;
|
|
186
|
+
if (!cryptoObj) {
|
|
187
|
+
throw new Error("Crypto API not available");
|
|
188
|
+
}
|
|
189
|
+
return cryptoObj;
|
|
190
|
+
}
|
|
191
|
+
function createNonce() {
|
|
192
|
+
return (0, import_viem3.toHex)(getCrypto().getRandomValues(new Uint8Array(32)));
|
|
193
|
+
}
|
|
194
|
+
function createPermit2Nonce() {
|
|
195
|
+
const randomBytes = getCrypto().getRandomValues(new Uint8Array(32));
|
|
196
|
+
return BigInt((0, import_viem3.toHex)(randomBytes)).toString();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/exact/client/eip3009.ts
|
|
200
|
+
async function createEIP3009Payload(signer, x402Version, paymentRequirements) {
|
|
201
|
+
const nonce = createNonce();
|
|
202
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
203
|
+
const authorization = {
|
|
204
|
+
from: signer.address,
|
|
205
|
+
to: (0, import_viem4.getAddress)(paymentRequirements.payTo),
|
|
206
|
+
value: paymentRequirements.amount,
|
|
207
|
+
validAfter: (now - 600).toString(),
|
|
208
|
+
validBefore: (now + paymentRequirements.maxTimeoutSeconds).toString(),
|
|
209
|
+
nonce
|
|
210
|
+
};
|
|
211
|
+
const signature = await signEIP3009Authorization(signer, authorization, paymentRequirements);
|
|
212
|
+
const payload = {
|
|
213
|
+
authorization,
|
|
214
|
+
signature
|
|
215
|
+
};
|
|
216
|
+
return {
|
|
217
|
+
x402Version,
|
|
218
|
+
payload
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
async function signEIP3009Authorization(signer, authorization, requirements) {
|
|
222
|
+
const chainId = parseInt(requirements.network.split(":")[1]);
|
|
223
|
+
if (!requirements.extra?.name || !requirements.extra?.version) {
|
|
224
|
+
throw new Error(
|
|
225
|
+
`EIP-712 domain parameters (name, version) are required in payment requirements for asset ${requirements.asset}`
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
const { name, version } = requirements.extra;
|
|
229
|
+
const domain = {
|
|
230
|
+
name,
|
|
231
|
+
version,
|
|
232
|
+
chainId,
|
|
233
|
+
verifyingContract: (0, import_viem4.getAddress)(requirements.asset)
|
|
234
|
+
};
|
|
235
|
+
const message = {
|
|
236
|
+
from: (0, import_viem4.getAddress)(authorization.from),
|
|
237
|
+
to: (0, import_viem4.getAddress)(authorization.to),
|
|
238
|
+
value: BigInt(authorization.value),
|
|
239
|
+
validAfter: BigInt(authorization.validAfter),
|
|
240
|
+
validBefore: BigInt(authorization.validBefore),
|
|
241
|
+
nonce: authorization.nonce
|
|
242
|
+
};
|
|
243
|
+
return await signer.signTypedData({
|
|
244
|
+
domain,
|
|
245
|
+
types: authorizationTypes,
|
|
246
|
+
primaryType: "TransferWithAuthorization",
|
|
247
|
+
message
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// src/exact/client/permit2.ts
|
|
252
|
+
var import_viem5 = require("viem");
|
|
253
|
+
var MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
|
254
|
+
async function createPermit2Payload(signer, x402Version, paymentRequirements) {
|
|
255
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
256
|
+
const nonce = createPermit2Nonce();
|
|
257
|
+
const validAfter = (now - 600).toString();
|
|
258
|
+
const deadline = (now + paymentRequirements.maxTimeoutSeconds).toString();
|
|
259
|
+
const permit2Authorization = {
|
|
260
|
+
from: signer.address,
|
|
261
|
+
permitted: {
|
|
262
|
+
token: (0, import_viem5.getAddress)(paymentRequirements.asset),
|
|
263
|
+
amount: paymentRequirements.amount
|
|
264
|
+
},
|
|
265
|
+
spender: x402ExactPermit2ProxyAddress,
|
|
266
|
+
nonce,
|
|
267
|
+
deadline,
|
|
268
|
+
witness: {
|
|
269
|
+
to: (0, import_viem5.getAddress)(paymentRequirements.payTo),
|
|
270
|
+
validAfter,
|
|
271
|
+
extra: "0x"
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
const signature = await signPermit2Authorization(
|
|
275
|
+
signer,
|
|
276
|
+
permit2Authorization,
|
|
277
|
+
paymentRequirements
|
|
278
|
+
);
|
|
279
|
+
const payload = {
|
|
280
|
+
signature,
|
|
281
|
+
permit2Authorization
|
|
282
|
+
};
|
|
283
|
+
return {
|
|
284
|
+
x402Version,
|
|
285
|
+
payload
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
async function signPermit2Authorization(signer, permit2Authorization, requirements) {
|
|
289
|
+
const chainId = parseInt(requirements.network.split(":")[1]);
|
|
290
|
+
const domain = {
|
|
291
|
+
name: "Permit2",
|
|
292
|
+
chainId,
|
|
293
|
+
verifyingContract: PERMIT2_ADDRESS
|
|
294
|
+
};
|
|
295
|
+
const message = {
|
|
296
|
+
permitted: {
|
|
297
|
+
token: (0, import_viem5.getAddress)(permit2Authorization.permitted.token),
|
|
298
|
+
amount: BigInt(permit2Authorization.permitted.amount)
|
|
299
|
+
},
|
|
300
|
+
spender: (0, import_viem5.getAddress)(permit2Authorization.spender),
|
|
301
|
+
nonce: BigInt(permit2Authorization.nonce),
|
|
302
|
+
deadline: BigInt(permit2Authorization.deadline),
|
|
303
|
+
witness: {
|
|
304
|
+
to: (0, import_viem5.getAddress)(permit2Authorization.witness.to),
|
|
305
|
+
validAfter: BigInt(permit2Authorization.witness.validAfter),
|
|
306
|
+
extra: permit2Authorization.witness.extra
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
return await signer.signTypedData({
|
|
310
|
+
domain,
|
|
311
|
+
types: permit2WitnessTypes,
|
|
312
|
+
primaryType: "PermitWitnessTransferFrom",
|
|
313
|
+
message
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
var erc20ApproveAbi = [
|
|
317
|
+
{
|
|
318
|
+
type: "function",
|
|
319
|
+
name: "approve",
|
|
320
|
+
inputs: [
|
|
321
|
+
{ name: "spender", type: "address" },
|
|
322
|
+
{ name: "amount", type: "uint256" }
|
|
323
|
+
],
|
|
324
|
+
outputs: [{ type: "bool" }],
|
|
325
|
+
stateMutability: "nonpayable"
|
|
326
|
+
}
|
|
327
|
+
];
|
|
328
|
+
var erc20AllowanceAbi = [
|
|
329
|
+
{
|
|
330
|
+
type: "function",
|
|
331
|
+
name: "allowance",
|
|
332
|
+
inputs: [
|
|
333
|
+
{ name: "owner", type: "address" },
|
|
334
|
+
{ name: "spender", type: "address" }
|
|
335
|
+
],
|
|
336
|
+
outputs: [{ type: "uint256" }],
|
|
337
|
+
stateMutability: "view"
|
|
338
|
+
}
|
|
339
|
+
];
|
|
340
|
+
function createPermit2ApprovalTx(tokenAddress) {
|
|
341
|
+
const data = (0, import_viem5.encodeFunctionData)({
|
|
342
|
+
abi: erc20ApproveAbi,
|
|
343
|
+
functionName: "approve",
|
|
344
|
+
args: [PERMIT2_ADDRESS, MAX_UINT256]
|
|
345
|
+
});
|
|
346
|
+
return {
|
|
347
|
+
to: (0, import_viem5.getAddress)(tokenAddress),
|
|
348
|
+
data
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function getPermit2AllowanceReadParams(params) {
|
|
352
|
+
return {
|
|
353
|
+
address: (0, import_viem5.getAddress)(params.tokenAddress),
|
|
354
|
+
abi: erc20AllowanceAbi,
|
|
355
|
+
functionName: "allowance",
|
|
356
|
+
args: [(0, import_viem5.getAddress)(params.ownerAddress), PERMIT2_ADDRESS]
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// src/exact/client/scheme.ts
|
|
361
|
+
var ExactEvmScheme = class {
|
|
145
362
|
/**
|
|
146
|
-
* Creates a new
|
|
363
|
+
* Creates a new ExactEvmClient instance.
|
|
147
364
|
*
|
|
148
365
|
* @param signer - The EVM signer for client operations
|
|
149
366
|
*/
|
|
@@ -152,97 +369,22 @@ var ExactEvmSchemeV1 = class {
|
|
|
152
369
|
this.scheme = "exact";
|
|
153
370
|
}
|
|
154
371
|
/**
|
|
155
|
-
* Creates a payment payload for the Exact scheme
|
|
372
|
+
* Creates a payment payload for the Exact scheme.
|
|
373
|
+
* Routes to EIP-3009 or Permit2 based on requirements.extra.assetTransferMethod.
|
|
156
374
|
*
|
|
157
375
|
* @param x402Version - The x402 protocol version
|
|
158
376
|
* @param paymentRequirements - The payment requirements
|
|
159
|
-
* @returns Promise resolving to a payment payload
|
|
377
|
+
* @returns Promise resolving to a payment payload result
|
|
160
378
|
*/
|
|
161
379
|
async createPaymentPayload(x402Version, paymentRequirements) {
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
const authorization = {
|
|
166
|
-
from: this.signer.address,
|
|
167
|
-
to: (0, import_viem3.getAddress)(selectedV1.payTo),
|
|
168
|
-
value: selectedV1.maxAmountRequired,
|
|
169
|
-
validAfter: (now - 600).toString(),
|
|
170
|
-
// 10 minutes before
|
|
171
|
-
validBefore: (now + selectedV1.maxTimeoutSeconds).toString(),
|
|
172
|
-
nonce
|
|
173
|
-
};
|
|
174
|
-
const signature = await this.signAuthorization(authorization, selectedV1);
|
|
175
|
-
const payload = {
|
|
176
|
-
authorization,
|
|
177
|
-
signature
|
|
178
|
-
};
|
|
179
|
-
return {
|
|
180
|
-
x402Version,
|
|
181
|
-
scheme: selectedV1.scheme,
|
|
182
|
-
network: selectedV1.network,
|
|
183
|
-
payload
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Sign the EIP-3009 authorization using EIP-712
|
|
188
|
-
*
|
|
189
|
-
* @param authorization - The authorization to sign
|
|
190
|
-
* @param requirements - The payment requirements
|
|
191
|
-
* @returns Promise resolving to the signature
|
|
192
|
-
*/
|
|
193
|
-
async signAuthorization(authorization, requirements) {
|
|
194
|
-
const chainId = getEvmChainId(requirements.network);
|
|
195
|
-
if (!requirements.extra?.name || !requirements.extra?.version) {
|
|
196
|
-
throw new Error(
|
|
197
|
-
`EIP-712 domain parameters (name, version) are required in payment requirements for asset ${requirements.asset}`
|
|
198
|
-
);
|
|
380
|
+
const assetTransferMethod = paymentRequirements.extra?.assetTransferMethod ?? "eip3009";
|
|
381
|
+
if (assetTransferMethod === "permit2") {
|
|
382
|
+
return createPermit2Payload(this.signer, x402Version, paymentRequirements);
|
|
199
383
|
}
|
|
200
|
-
|
|
201
|
-
const domain = {
|
|
202
|
-
name,
|
|
203
|
-
version,
|
|
204
|
-
chainId,
|
|
205
|
-
verifyingContract: (0, import_viem3.getAddress)(requirements.asset)
|
|
206
|
-
};
|
|
207
|
-
const message = {
|
|
208
|
-
from: (0, import_viem3.getAddress)(authorization.from),
|
|
209
|
-
to: (0, import_viem3.getAddress)(authorization.to),
|
|
210
|
-
value: BigInt(authorization.value),
|
|
211
|
-
validAfter: BigInt(authorization.validAfter),
|
|
212
|
-
validBefore: BigInt(authorization.validBefore),
|
|
213
|
-
nonce: authorization.nonce
|
|
214
|
-
};
|
|
215
|
-
return await this.signer.signTypedData({
|
|
216
|
-
domain,
|
|
217
|
-
types: authorizationTypes,
|
|
218
|
-
primaryType: "TransferWithAuthorization",
|
|
219
|
-
message
|
|
220
|
-
});
|
|
384
|
+
return createEIP3009Payload(this.signer, x402Version, paymentRequirements);
|
|
221
385
|
}
|
|
222
386
|
};
|
|
223
387
|
|
|
224
|
-
// src/exact/v1/facilitator/scheme.ts
|
|
225
|
-
var import_viem4 = require("viem");
|
|
226
|
-
|
|
227
|
-
// src/v1/index.ts
|
|
228
|
-
var NETWORKS = [
|
|
229
|
-
"abstract",
|
|
230
|
-
"abstract-testnet",
|
|
231
|
-
"base-sepolia",
|
|
232
|
-
"base",
|
|
233
|
-
"avalanche-fuji",
|
|
234
|
-
"avalanche",
|
|
235
|
-
"iotex",
|
|
236
|
-
"sei",
|
|
237
|
-
"sei-testnet",
|
|
238
|
-
"polygon",
|
|
239
|
-
"polygon-amoy",
|
|
240
|
-
"peaq",
|
|
241
|
-
"story",
|
|
242
|
-
"educhain",
|
|
243
|
-
"skale-base-sepolia"
|
|
244
|
-
];
|
|
245
|
-
|
|
246
388
|
// src/exact/client/register.ts
|
|
247
389
|
function registerExactEvmScheme(client, config) {
|
|
248
390
|
if (config.networks && config.networks.length > 0) {
|
|
@@ -265,6 +407,9 @@ function registerExactEvmScheme(client, config) {
|
|
|
265
407
|
// Annotate the CommonJS export names for ESM import in node:
|
|
266
408
|
0 && (module.exports = {
|
|
267
409
|
ExactEvmScheme,
|
|
410
|
+
createPermit2ApprovalTx,
|
|
411
|
+
erc20AllowanceAbi,
|
|
412
|
+
getPermit2AllowanceReadParams,
|
|
268
413
|
registerExactEvmScheme
|
|
269
414
|
});
|
|
270
415
|
//# sourceMappingURL=index.js.map
|