@x402/evm 2.2.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/exact/client/index.d.ts +2 -2
- package/dist/cjs/exact/client/index.js +265 -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 +692 -281
- package/dist/cjs/exact/facilitator/index.js.map +1 -1
- package/dist/cjs/exact/server/index.js +8 -1
- package/dist/cjs/exact/server/index.js.map +1 -1
- package/dist/cjs/exact/v1/client/index.js +44 -17
- package/dist/cjs/exact/v1/client/index.js.map +1 -1
- package/dist/cjs/exact/v1/facilitator/index.js +60 -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 +439 -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 +22 -1
- package/dist/cjs/v1/index.js +34 -29
- package/dist/cjs/v1/index.js.map +1 -1
- package/dist/esm/chunk-E2YMUI3X.mjs +229 -0
- package/dist/esm/chunk-E2YMUI3X.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-RPL6OFJL.mjs +659 -0
- package/dist/esm/chunk-RPL6OFJL.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/server/index.mjs +8 -1
- package/dist/esm/exact/server/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 +22 -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,220 @@ 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
|
+
megaeth: 4326
|
|
174
|
+
};
|
|
175
|
+
var NETWORKS = Object.keys(EVM_NETWORK_CHAIN_ID_MAP);
|
|
176
|
+
|
|
177
|
+
// src/utils.ts
|
|
178
|
+
function getEvmChainId(network) {
|
|
179
|
+
const chainId = EVM_NETWORK_CHAIN_ID_MAP[network];
|
|
180
|
+
if (!chainId) {
|
|
181
|
+
throw new Error(`Unsupported network: ${network}`);
|
|
182
|
+
}
|
|
183
|
+
return chainId;
|
|
184
|
+
}
|
|
185
|
+
function getCrypto() {
|
|
186
|
+
const cryptoObj = globalThis.crypto;
|
|
187
|
+
if (!cryptoObj) {
|
|
188
|
+
throw new Error("Crypto API not available");
|
|
189
|
+
}
|
|
190
|
+
return cryptoObj;
|
|
191
|
+
}
|
|
192
|
+
function createNonce() {
|
|
193
|
+
return (0, import_viem3.toHex)(getCrypto().getRandomValues(new Uint8Array(32)));
|
|
194
|
+
}
|
|
195
|
+
function createPermit2Nonce() {
|
|
196
|
+
const randomBytes = getCrypto().getRandomValues(new Uint8Array(32));
|
|
197
|
+
return BigInt((0, import_viem3.toHex)(randomBytes)).toString();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// src/exact/client/eip3009.ts
|
|
201
|
+
async function createEIP3009Payload(signer, x402Version, paymentRequirements) {
|
|
202
|
+
const nonce = createNonce();
|
|
203
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
204
|
+
const authorization = {
|
|
205
|
+
from: signer.address,
|
|
206
|
+
to: (0, import_viem4.getAddress)(paymentRequirements.payTo),
|
|
207
|
+
value: paymentRequirements.amount,
|
|
208
|
+
validAfter: (now - 600).toString(),
|
|
209
|
+
validBefore: (now + paymentRequirements.maxTimeoutSeconds).toString(),
|
|
210
|
+
nonce
|
|
211
|
+
};
|
|
212
|
+
const signature = await signEIP3009Authorization(signer, authorization, paymentRequirements);
|
|
213
|
+
const payload = {
|
|
214
|
+
authorization,
|
|
215
|
+
signature
|
|
216
|
+
};
|
|
217
|
+
return {
|
|
218
|
+
x402Version,
|
|
219
|
+
payload
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async function signEIP3009Authorization(signer, authorization, requirements) {
|
|
223
|
+
const chainId = parseInt(requirements.network.split(":")[1]);
|
|
224
|
+
if (!requirements.extra?.name || !requirements.extra?.version) {
|
|
225
|
+
throw new Error(
|
|
226
|
+
`EIP-712 domain parameters (name, version) are required in payment requirements for asset ${requirements.asset}`
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
const { name, version } = requirements.extra;
|
|
230
|
+
const domain = {
|
|
231
|
+
name,
|
|
232
|
+
version,
|
|
233
|
+
chainId,
|
|
234
|
+
verifyingContract: (0, import_viem4.getAddress)(requirements.asset)
|
|
235
|
+
};
|
|
236
|
+
const message = {
|
|
237
|
+
from: (0, import_viem4.getAddress)(authorization.from),
|
|
238
|
+
to: (0, import_viem4.getAddress)(authorization.to),
|
|
239
|
+
value: BigInt(authorization.value),
|
|
240
|
+
validAfter: BigInt(authorization.validAfter),
|
|
241
|
+
validBefore: BigInt(authorization.validBefore),
|
|
242
|
+
nonce: authorization.nonce
|
|
243
|
+
};
|
|
244
|
+
return await signer.signTypedData({
|
|
245
|
+
domain,
|
|
246
|
+
types: authorizationTypes,
|
|
247
|
+
primaryType: "TransferWithAuthorization",
|
|
248
|
+
message
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// src/exact/client/permit2.ts
|
|
253
|
+
var import_viem5 = require("viem");
|
|
254
|
+
var MAX_UINT256 = BigInt("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
|
|
255
|
+
async function createPermit2Payload(signer, x402Version, paymentRequirements) {
|
|
256
|
+
const now = Math.floor(Date.now() / 1e3);
|
|
257
|
+
const nonce = createPermit2Nonce();
|
|
258
|
+
const validAfter = (now - 600).toString();
|
|
259
|
+
const deadline = (now + paymentRequirements.maxTimeoutSeconds).toString();
|
|
260
|
+
const permit2Authorization = {
|
|
261
|
+
from: signer.address,
|
|
262
|
+
permitted: {
|
|
263
|
+
token: (0, import_viem5.getAddress)(paymentRequirements.asset),
|
|
264
|
+
amount: paymentRequirements.amount
|
|
265
|
+
},
|
|
266
|
+
spender: x402ExactPermit2ProxyAddress,
|
|
267
|
+
nonce,
|
|
268
|
+
deadline,
|
|
269
|
+
witness: {
|
|
270
|
+
to: (0, import_viem5.getAddress)(paymentRequirements.payTo),
|
|
271
|
+
validAfter,
|
|
272
|
+
extra: "0x"
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
const signature = await signPermit2Authorization(
|
|
276
|
+
signer,
|
|
277
|
+
permit2Authorization,
|
|
278
|
+
paymentRequirements
|
|
279
|
+
);
|
|
280
|
+
const payload = {
|
|
281
|
+
signature,
|
|
282
|
+
permit2Authorization
|
|
283
|
+
};
|
|
284
|
+
return {
|
|
285
|
+
x402Version,
|
|
286
|
+
payload
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
async function signPermit2Authorization(signer, permit2Authorization, requirements) {
|
|
290
|
+
const chainId = parseInt(requirements.network.split(":")[1]);
|
|
291
|
+
const domain = {
|
|
292
|
+
name: "Permit2",
|
|
293
|
+
chainId,
|
|
294
|
+
verifyingContract: PERMIT2_ADDRESS
|
|
295
|
+
};
|
|
296
|
+
const message = {
|
|
297
|
+
permitted: {
|
|
298
|
+
token: (0, import_viem5.getAddress)(permit2Authorization.permitted.token),
|
|
299
|
+
amount: BigInt(permit2Authorization.permitted.amount)
|
|
300
|
+
},
|
|
301
|
+
spender: (0, import_viem5.getAddress)(permit2Authorization.spender),
|
|
302
|
+
nonce: BigInt(permit2Authorization.nonce),
|
|
303
|
+
deadline: BigInt(permit2Authorization.deadline),
|
|
304
|
+
witness: {
|
|
305
|
+
to: (0, import_viem5.getAddress)(permit2Authorization.witness.to),
|
|
306
|
+
validAfter: BigInt(permit2Authorization.witness.validAfter),
|
|
307
|
+
extra: permit2Authorization.witness.extra
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
return await signer.signTypedData({
|
|
311
|
+
domain,
|
|
312
|
+
types: permit2WitnessTypes,
|
|
313
|
+
primaryType: "PermitWitnessTransferFrom",
|
|
314
|
+
message
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
var erc20ApproveAbi = [
|
|
318
|
+
{
|
|
319
|
+
type: "function",
|
|
320
|
+
name: "approve",
|
|
321
|
+
inputs: [
|
|
322
|
+
{ name: "spender", type: "address" },
|
|
323
|
+
{ name: "amount", type: "uint256" }
|
|
324
|
+
],
|
|
325
|
+
outputs: [{ type: "bool" }],
|
|
326
|
+
stateMutability: "nonpayable"
|
|
327
|
+
}
|
|
328
|
+
];
|
|
329
|
+
var erc20AllowanceAbi = [
|
|
330
|
+
{
|
|
331
|
+
type: "function",
|
|
332
|
+
name: "allowance",
|
|
333
|
+
inputs: [
|
|
334
|
+
{ name: "owner", type: "address" },
|
|
335
|
+
{ name: "spender", type: "address" }
|
|
336
|
+
],
|
|
337
|
+
outputs: [{ type: "uint256" }],
|
|
338
|
+
stateMutability: "view"
|
|
339
|
+
}
|
|
340
|
+
];
|
|
341
|
+
function createPermit2ApprovalTx(tokenAddress) {
|
|
342
|
+
const data = (0, import_viem5.encodeFunctionData)({
|
|
343
|
+
abi: erc20ApproveAbi,
|
|
344
|
+
functionName: "approve",
|
|
345
|
+
args: [PERMIT2_ADDRESS, MAX_UINT256]
|
|
346
|
+
});
|
|
347
|
+
return {
|
|
348
|
+
to: (0, import_viem5.getAddress)(tokenAddress),
|
|
349
|
+
data
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function getPermit2AllowanceReadParams(params) {
|
|
353
|
+
return {
|
|
354
|
+
address: (0, import_viem5.getAddress)(params.tokenAddress),
|
|
355
|
+
abi: erc20AllowanceAbi,
|
|
356
|
+
functionName: "allowance",
|
|
357
|
+
args: [(0, import_viem5.getAddress)(params.ownerAddress), PERMIT2_ADDRESS]
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// src/exact/client/scheme.ts
|
|
362
|
+
var ExactEvmScheme = class {
|
|
145
363
|
/**
|
|
146
|
-
* Creates a new
|
|
364
|
+
* Creates a new ExactEvmClient instance.
|
|
147
365
|
*
|
|
148
366
|
* @param signer - The EVM signer for client operations
|
|
149
367
|
*/
|
|
@@ -152,97 +370,22 @@ var ExactEvmSchemeV1 = class {
|
|
|
152
370
|
this.scheme = "exact";
|
|
153
371
|
}
|
|
154
372
|
/**
|
|
155
|
-
* Creates a payment payload for the Exact scheme
|
|
373
|
+
* Creates a payment payload for the Exact scheme.
|
|
374
|
+
* Routes to EIP-3009 or Permit2 based on requirements.extra.assetTransferMethod.
|
|
156
375
|
*
|
|
157
376
|
* @param x402Version - The x402 protocol version
|
|
158
377
|
* @param paymentRequirements - The payment requirements
|
|
159
|
-
* @returns Promise resolving to a payment payload
|
|
378
|
+
* @returns Promise resolving to a payment payload result
|
|
160
379
|
*/
|
|
161
380
|
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
|
-
);
|
|
381
|
+
const assetTransferMethod = paymentRequirements.extra?.assetTransferMethod ?? "eip3009";
|
|
382
|
+
if (assetTransferMethod === "permit2") {
|
|
383
|
+
return createPermit2Payload(this.signer, x402Version, paymentRequirements);
|
|
199
384
|
}
|
|
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
|
-
});
|
|
385
|
+
return createEIP3009Payload(this.signer, x402Version, paymentRequirements);
|
|
221
386
|
}
|
|
222
387
|
};
|
|
223
388
|
|
|
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
389
|
// src/exact/client/register.ts
|
|
247
390
|
function registerExactEvmScheme(client, config) {
|
|
248
391
|
if (config.networks && config.networks.length > 0) {
|
|
@@ -265,6 +408,9 @@ function registerExactEvmScheme(client, config) {
|
|
|
265
408
|
// Annotate the CommonJS export names for ESM import in node:
|
|
266
409
|
0 && (module.exports = {
|
|
267
410
|
ExactEvmScheme,
|
|
411
|
+
createPermit2ApprovalTx,
|
|
412
|
+
erc20AllowanceAbi,
|
|
413
|
+
getPermit2AllowanceReadParams,
|
|
268
414
|
registerExactEvmScheme
|
|
269
415
|
});
|
|
270
416
|
//# sourceMappingURL=index.js.map
|