@payai/x402-evm 2.4.0 → 2.4.2
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/batch-settlement/client/file-storage.d.ts +47 -0
- package/dist/cjs/batch-settlement/client/file-storage.js +116 -0
- package/dist/cjs/batch-settlement/client/file-storage.js.map +1 -0
- package/dist/cjs/batch-settlement/client/index.d.ts +111 -0
- package/dist/cjs/batch-settlement/client/index.js +1565 -0
- package/dist/cjs/batch-settlement/client/index.js.map +1 -0
- package/dist/cjs/batch-settlement/facilitator/index.d.ts +71 -0
- package/dist/cjs/batch-settlement/facilitator/index.js +2032 -0
- package/dist/cjs/batch-settlement/facilitator/index.js.map +1 -0
- package/dist/cjs/batch-settlement/server/file-storage.d.ts +53 -0
- package/dist/cjs/batch-settlement/server/file-storage.js +181 -0
- package/dist/cjs/batch-settlement/server/file-storage.js.map +1 -0
- package/dist/cjs/batch-settlement/server/index.d.ts +491 -0
- package/dist/cjs/batch-settlement/server/index.js +1960 -0
- package/dist/cjs/batch-settlement/server/index.js.map +1 -0
- package/dist/cjs/batch-settlement/server/redis-storage.d.ts +87 -0
- package/dist/cjs/batch-settlement/server/redis-storage.js +181 -0
- package/dist/cjs/batch-settlement/server/redis-storage.js.map +1 -0
- package/dist/cjs/exact/client/index.d.ts +6 -4
- package/dist/cjs/exact/client/index.js +7 -5
- package/dist/cjs/exact/client/index.js.map +1 -1
- package/dist/cjs/exact/facilitator/index.d.ts +16 -9
- package/dist/cjs/exact/facilitator/index.js +56 -9
- package/dist/cjs/exact/facilitator/index.js.map +1 -1
- package/dist/cjs/exact/server/index.d.ts +0 -8
- package/dist/cjs/exact/server/index.js +53 -19
- package/dist/cjs/exact/server/index.js.map +1 -1
- package/dist/cjs/exact/v1/client/index.d.ts +2 -1
- package/dist/cjs/exact/v1/client/index.js.map +1 -1
- package/dist/cjs/exact/v1/facilitator/index.d.ts +11 -5
- package/dist/cjs/exact/v1/facilitator/index.js +16 -2
- package/dist/cjs/exact/v1/facilitator/index.js.map +1 -1
- package/dist/cjs/index.d.ts +113 -7
- package/dist/cjs/index.js +1353 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/{esm/permit2-CyZxwngN.d.mts → cjs/permit2-DhJRUcgY.d.ts} +1 -13
- package/dist/cjs/rpc-DULZzRne.d.ts +13 -0
- package/dist/cjs/scheme-CvkPJXBD.d.ts +307 -0
- package/dist/{esm/scheme-DCR7hsa3.d.mts → cjs/scheme-DTQFE9xp.d.ts} +2 -2
- package/dist/{esm/signer-D912R4mq.d.mts → cjs/signer-tYS6Y46X.d.ts} +3 -0
- package/dist/cjs/storage-6W5MO46W.d.ts +50 -0
- package/dist/cjs/storage-Bl6aD0Xg.d.ts +81 -0
- package/dist/cjs/types-CF8P2-NM.d.ts +180 -0
- package/dist/cjs/upto/client/index.d.ts +5 -3
- package/dist/cjs/upto/client/index.js +7 -5
- package/dist/cjs/upto/client/index.js.map +1 -1
- package/dist/cjs/upto/facilitator/index.d.ts +2 -1
- package/dist/cjs/upto/facilitator/index.js +2 -1
- package/dist/cjs/upto/facilitator/index.js.map +1 -1
- package/dist/cjs/upto/server/index.d.ts +0 -8
- package/dist/cjs/upto/server/index.js +51 -19
- package/dist/cjs/upto/server/index.js.map +1 -1
- package/dist/cjs/v1/index.d.ts +2 -1
- package/dist/cjs/v1/index.js.map +1 -1
- package/dist/esm/batch-settlement/client/file-storage.d.mts +47 -0
- package/dist/esm/batch-settlement/client/file-storage.mjs +63 -0
- package/dist/esm/batch-settlement/client/file-storage.mjs.map +1 -0
- package/dist/esm/batch-settlement/client/index.d.mts +111 -0
- package/dist/esm/batch-settlement/client/index.mjs +59 -0
- package/dist/esm/batch-settlement/client/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/facilitator/index.d.mts +71 -0
- package/dist/esm/batch-settlement/facilitator/index.mjs +1235 -0
- package/dist/esm/batch-settlement/facilitator/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/file-storage.d.mts +53 -0
- package/dist/esm/batch-settlement/server/file-storage.mjs +128 -0
- package/dist/esm/batch-settlement/server/file-storage.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/index.d.mts +491 -0
- package/dist/esm/batch-settlement/server/index.mjs +1645 -0
- package/dist/esm/batch-settlement/server/index.mjs.map +1 -0
- package/dist/esm/batch-settlement/server/redis-storage.d.mts +87 -0
- package/dist/esm/batch-settlement/server/redis-storage.mjs +156 -0
- package/dist/esm/batch-settlement/server/redis-storage.mjs.map +1 -0
- package/dist/esm/chunk-2EUQTNJO.mjs +38 -0
- package/dist/esm/chunk-2EUQTNJO.mjs.map +1 -0
- package/dist/esm/chunk-53USC5VE.mjs +47 -0
- package/dist/esm/chunk-53USC5VE.mjs.map +1 -0
- package/dist/esm/{chunk-GJ57SZGI.mjs → chunk-6WQOGWBE.mjs} +7 -5
- package/dist/esm/{chunk-GJ57SZGI.mjs.map → chunk-6WQOGWBE.mjs.map} +1 -1
- package/dist/esm/{chunk-NSFLAANF.mjs → chunk-BTYNCDNS.mjs} +51 -2
- package/dist/esm/chunk-BTYNCDNS.mjs.map +1 -0
- package/dist/esm/{chunk-RYT6M3PA.mjs → chunk-CSQS7ZON.mjs} +47 -7
- package/dist/esm/chunk-CSQS7ZON.mjs.map +1 -0
- package/dist/esm/chunk-GD4MKCN7.mjs +57 -0
- package/dist/esm/chunk-GD4MKCN7.mjs.map +1 -0
- package/dist/esm/chunk-HYABYUBD.mjs +432 -0
- package/dist/esm/chunk-HYABYUBD.mjs.map +1 -0
- package/dist/esm/chunk-IN5YIT5C.mjs +159 -0
- package/dist/esm/chunk-IN5YIT5C.mjs.map +1 -0
- package/dist/esm/{chunk-JII456TS.mjs → chunk-JK7SLLF7.mjs} +1 -1
- package/dist/esm/chunk-JK7SLLF7.mjs.map +1 -0
- package/dist/esm/{chunk-C4ZQMS77.mjs → chunk-MACPBXCT.mjs} +2 -216
- package/dist/esm/chunk-MACPBXCT.mjs.map +1 -0
- package/dist/esm/chunk-NKYVYGRA.mjs +911 -0
- package/dist/esm/chunk-NKYVYGRA.mjs.map +1 -0
- package/dist/esm/{chunk-D6RXZXOS.mjs → chunk-R7I3RZFF.mjs} +10 -6
- package/dist/esm/{chunk-D6RXZXOS.mjs.map → chunk-R7I3RZFF.mjs.map} +1 -1
- package/dist/esm/{chunk-CRT6YNY5.mjs → chunk-RWLVVO3B.mjs} +21 -61
- package/dist/esm/chunk-RWLVVO3B.mjs.map +1 -0
- package/dist/esm/chunk-TGFAVNUD.mjs +111 -0
- package/dist/esm/chunk-TGFAVNUD.mjs.map +1 -0
- package/dist/esm/chunk-TW7Z65AO.mjs +34 -0
- package/dist/esm/chunk-TW7Z65AO.mjs.map +1 -0
- package/dist/esm/chunk-U4HCGTLU.mjs +35 -0
- package/dist/esm/chunk-U4HCGTLU.mjs.map +1 -0
- package/dist/esm/chunk-VS3RYAYE.mjs +80 -0
- package/dist/esm/chunk-VS3RYAYE.mjs.map +1 -0
- package/dist/esm/chunk-W6ON4LG2.mjs +39 -0
- package/dist/esm/chunk-W6ON4LG2.mjs.map +1 -0
- package/dist/esm/{chunk-WKBC5YMI.mjs → chunk-YMQCTKDU.mjs} +23 -55
- package/dist/esm/chunk-YMQCTKDU.mjs.map +1 -0
- package/dist/esm/exact/client/index.d.mts +6 -4
- package/dist/esm/exact/client/index.mjs +10 -5
- package/dist/esm/exact/facilitator/index.d.mts +16 -9
- package/dist/esm/exact/facilitator/index.mjs +39 -16
- package/dist/esm/exact/facilitator/index.mjs.map +1 -1
- package/dist/esm/exact/server/index.d.mts +0 -8
- package/dist/esm/exact/server/index.mjs +3 -19
- package/dist/esm/exact/server/index.mjs.map +1 -1
- package/dist/esm/exact/v1/client/index.d.mts +2 -1
- package/dist/esm/exact/v1/client/index.mjs +5 -2
- package/dist/esm/exact/v1/facilitator/index.d.mts +11 -5
- package/dist/esm/exact/v1/facilitator/index.mjs +5 -2
- package/dist/esm/index.d.mts +113 -7
- package/dist/esm/index.mjs +53 -7
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/permit2-DhJRUcgY.d.mts +729 -0
- package/dist/esm/rpc-DULZzRne.d.mts +13 -0
- package/dist/esm/scheme-DtbSS4Fk.d.mts +307 -0
- package/dist/esm/scheme-gtqAIYPJ.d.mts +47 -0
- package/dist/esm/signer-tYS6Y46X.d.mts +170 -0
- package/dist/esm/storage-6W5MO46W.d.mts +50 -0
- package/dist/esm/storage-sZ1CDS4P.d.mts +81 -0
- package/dist/esm/types-CF8P2-NM.d.mts +180 -0
- package/dist/esm/upto/client/index.d.mts +5 -3
- package/dist/esm/upto/client/index.mjs +9 -4
- package/dist/esm/upto/facilitator/index.d.mts +2 -1
- package/dist/esm/upto/facilitator/index.mjs +17 -9
- package/dist/esm/upto/facilitator/index.mjs.map +1 -1
- package/dist/esm/upto/server/index.d.mts +0 -8
- package/dist/esm/upto/server/index.mjs +3 -19
- package/dist/esm/upto/server/index.mjs.map +1 -1
- package/dist/esm/v1/index.d.mts +2 -1
- package/dist/esm/v1/index.mjs +5 -2
- package/package.json +5 -5
- package/dist/esm/chunk-C4ZQMS77.mjs.map +0 -1
- package/dist/esm/chunk-CRT6YNY5.mjs.map +0 -1
- package/dist/esm/chunk-JII456TS.mjs.map +0 -1
- package/dist/esm/chunk-NSFLAANF.mjs.map +0 -1
- package/dist/esm/chunk-RYT6M3PA.mjs.map +0 -1
- package/dist/esm/chunk-WKBC5YMI.mjs.map +0 -1
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { SchemeNetworkFacilitator, PaymentPayload, PaymentRequirements, FacilitatorContext, VerifyResponse, SettleResponse, Network } from '@payai/x402/types';
|
|
2
|
-
import { F as FacilitatorEvmSigner } from '../../signer-
|
|
2
|
+
import { F as FacilitatorEvmSigner } from '../../signer-tYS6Y46X.js';
|
|
3
3
|
import { x402Facilitator } from '@payai/x402/facilitator';
|
|
4
|
+
import 'viem';
|
|
4
5
|
|
|
5
6
|
interface ExactEvmSchemeConfig {
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
8
|
+
* Allowlist of factory contract addresses (hex strings, case-insensitive) that the facilitator
|
|
9
|
+
* will call when deploying an undeployed smart wallet via ERC-6492.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
+
* A non-empty list enables ERC-4337 smart wallet deployment via EIP-6492. An empty or omitted
|
|
12
|
+
* list denies all factory deployment calls (feature disabled by default).
|
|
13
|
+
*
|
|
14
|
+
* @default []
|
|
11
15
|
*/
|
|
12
|
-
|
|
16
|
+
eip6492AllowedFactories?: string[];
|
|
13
17
|
/**
|
|
14
18
|
* If enabled, run on-chain simulation during settle's re-verify.
|
|
15
19
|
*
|
|
@@ -83,12 +87,15 @@ interface EvmFacilitatorConfig {
|
|
|
83
87
|
*/
|
|
84
88
|
networks: Network | Network[];
|
|
85
89
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
90
|
+
* Allowlist of factory contract addresses (hex strings, case-insensitive) that the facilitator
|
|
91
|
+
* will call when deploying an undeployed smart wallet via ERC-6492.
|
|
88
92
|
*
|
|
89
|
-
*
|
|
93
|
+
* A non-empty list enables ERC-4337 smart wallet deployment via EIP-6492. An empty or omitted
|
|
94
|
+
* list denies all factory deployment calls (feature disabled by default).
|
|
95
|
+
*
|
|
96
|
+
* @default []
|
|
90
97
|
*/
|
|
91
|
-
|
|
98
|
+
eip6492AllowedFactories?: string[];
|
|
92
99
|
/**
|
|
93
100
|
* If enabled, reruns on-chain simulation during settle's re-verify.
|
|
94
101
|
*
|
|
@@ -336,6 +336,7 @@ var ErrEip2612SpenderNotPermit2 = "eip2612_spender_not_permit2";
|
|
|
336
336
|
var ErrEip2612DeadlineExpired = "eip2612_deadline_expired";
|
|
337
337
|
var ErrUnsupportedPayloadType = "unsupported_payload_type";
|
|
338
338
|
var ErrInvalidTransactionState = "invalid_transaction_state";
|
|
339
|
+
var ErrFactoryNotAllowed = "eip6492_factory_not_allowed";
|
|
339
340
|
|
|
340
341
|
// src/exact/facilitator/eip3009-utils.ts
|
|
341
342
|
var import_viem3 = require("viem");
|
|
@@ -535,6 +536,25 @@ async function diagnoseEip3009SimulationFailure(signer, erc20Address, payload, r
|
|
|
535
536
|
}
|
|
536
537
|
return { isValid: false, invalidReason: ErrEip3009SimulationFailed, payer };
|
|
537
538
|
}
|
|
539
|
+
function parseEip3009TransferError(error) {
|
|
540
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
541
|
+
if (/authorization.*(expired|valid before)/i.test(msg) || /AuthorizationExpired/i.test(msg)) {
|
|
542
|
+
return ErrValidBeforeExpired;
|
|
543
|
+
}
|
|
544
|
+
if (/authorization.*not.*valid|AuthorizationNotYetValid/i.test(msg)) {
|
|
545
|
+
return ErrValidAfterInFuture;
|
|
546
|
+
}
|
|
547
|
+
if (/authorization.*used|AuthorizationAlreadyUsed|AuthorizationUsedOrCanceled/i.test(msg)) {
|
|
548
|
+
return ErrEip3009NonceAlreadyUsed;
|
|
549
|
+
}
|
|
550
|
+
if (/transfer.*exceeds.*balance|insufficient.*balance|ERC20InsufficientBalance/i.test(msg)) {
|
|
551
|
+
return ErrEip3009InsufficientBalance;
|
|
552
|
+
}
|
|
553
|
+
if (/invalid.*signature|SignerMismatch|InvalidSignatureV|InvalidSignatureS/i.test(msg)) {
|
|
554
|
+
return ErrInvalidSignature;
|
|
555
|
+
}
|
|
556
|
+
return ErrTransactionFailed;
|
|
557
|
+
}
|
|
538
558
|
async function executeTransferWithAuthorization(signer, erc20Address, payload) {
|
|
539
559
|
const { signature } = (0, import_viem3.parseErc6492Signature)(payload.signature);
|
|
540
560
|
const signatureLength = signature.startsWith("0x") ? signature.length - 2 : signature.length;
|
|
@@ -724,9 +744,22 @@ async function settleEIP3009(signer, payload, requirements, eip3009Payload, conf
|
|
|
724
744
|
const { address: factoryAddress, data: factoryCalldata } = (0, import_viem4.parseErc6492Signature)(
|
|
725
745
|
eip3009Payload.signature
|
|
726
746
|
);
|
|
727
|
-
if (
|
|
747
|
+
if (factoryAddress && factoryCalldata && !(0, import_viem4.isAddressEqual)(factoryAddress, "0x0000000000000000000000000000000000000000")) {
|
|
728
748
|
const bytecode = await signer.getCode({ address: payer });
|
|
729
749
|
if (!bytecode || bytecode === "0x") {
|
|
750
|
+
const normalizedFactory = factoryAddress.toLowerCase();
|
|
751
|
+
const isAllowed = (config.eip6492AllowedFactories ?? []).some(
|
|
752
|
+
(allowed) => allowed.toLowerCase() === normalizedFactory
|
|
753
|
+
);
|
|
754
|
+
if (!isAllowed) {
|
|
755
|
+
return {
|
|
756
|
+
success: false,
|
|
757
|
+
errorReason: ErrFactoryNotAllowed,
|
|
758
|
+
transaction: "",
|
|
759
|
+
network: payload.accepted.network,
|
|
760
|
+
payer
|
|
761
|
+
};
|
|
762
|
+
}
|
|
730
763
|
const deployTx = await signer.sendTransaction({
|
|
731
764
|
to: factoryAddress,
|
|
732
765
|
data: factoryCalldata
|
|
@@ -755,10 +788,10 @@ async function settleEIP3009(signer, payload, requirements, eip3009Payload, conf
|
|
|
755
788
|
network: payload.accepted.network,
|
|
756
789
|
payer
|
|
757
790
|
};
|
|
758
|
-
} catch {
|
|
791
|
+
} catch (error) {
|
|
759
792
|
return {
|
|
760
793
|
success: false,
|
|
761
|
-
errorReason:
|
|
794
|
+
errorReason: parseEip3009TransferError(error),
|
|
762
795
|
transaction: "",
|
|
763
796
|
network: payload.accepted.network,
|
|
764
797
|
payer
|
|
@@ -1121,6 +1154,7 @@ async function checkPermit2Prerequisites(config, signer, tokenAddress, payer, am
|
|
|
1121
1154
|
return { isValid: true, invalidReason: void 0, payer };
|
|
1122
1155
|
}
|
|
1123
1156
|
function buildExactPermit2SettleArgs(permit2Payload) {
|
|
1157
|
+
const { signature } = (0, import_viem6.parseErc6492Signature)(permit2Payload.signature);
|
|
1124
1158
|
return [
|
|
1125
1159
|
{
|
|
1126
1160
|
permitted: {
|
|
@@ -1135,7 +1169,7 @@ function buildExactPermit2SettleArgs(permit2Payload) {
|
|
|
1135
1169
|
to: (0, import_viem6.getAddress)(permit2Payload.permit2Authorization.witness.to),
|
|
1136
1170
|
validAfter: BigInt(permit2Payload.permit2Authorization.witness.validAfter)
|
|
1137
1171
|
},
|
|
1138
|
-
|
|
1172
|
+
signature
|
|
1139
1173
|
];
|
|
1140
1174
|
}
|
|
1141
1175
|
function splitEip2612Signature(signature) {
|
|
@@ -1453,7 +1487,7 @@ var ExactEvmScheme = class {
|
|
|
1453
1487
|
this.scheme = "exact";
|
|
1454
1488
|
this.caipFamily = "eip155:*";
|
|
1455
1489
|
this.config = {
|
|
1456
|
-
|
|
1490
|
+
eip6492AllowedFactories: config?.eip6492AllowedFactories ?? [],
|
|
1457
1491
|
simulateInSettle: config?.simulateInSettle ?? false
|
|
1458
1492
|
};
|
|
1459
1493
|
}
|
|
@@ -1567,7 +1601,7 @@ var ExactEvmSchemeV12 = class {
|
|
|
1567
1601
|
this.scheme = "exact";
|
|
1568
1602
|
this.caipFamily = "eip155:*";
|
|
1569
1603
|
this.config = {
|
|
1570
|
-
|
|
1604
|
+
eip6492AllowedFactories: config?.eip6492AllowedFactories ?? [],
|
|
1571
1605
|
simulateInSettle: config?.simulateInSettle ?? false
|
|
1572
1606
|
};
|
|
1573
1607
|
}
|
|
@@ -1627,10 +1661,23 @@ var ExactEvmSchemeV12 = class {
|
|
|
1627
1661
|
const { address: factoryAddress, data: factoryCalldata } = (0, import_viem9.parseErc6492Signature)(
|
|
1628
1662
|
exactEvmPayload.signature
|
|
1629
1663
|
);
|
|
1630
|
-
if (
|
|
1664
|
+
if (factoryAddress && factoryCalldata && !(0, import_viem9.isAddressEqual)(factoryAddress, "0x0000000000000000000000000000000000000000")) {
|
|
1631
1665
|
const payerAddress = exactEvmPayload.authorization.from;
|
|
1632
1666
|
const bytecode = await this.signer.getCode({ address: payerAddress });
|
|
1633
1667
|
if (!bytecode || bytecode === "0x") {
|
|
1668
|
+
const normalizedFactory = factoryAddress.toLowerCase();
|
|
1669
|
+
const isAllowed = (this.config.eip6492AllowedFactories ?? []).some(
|
|
1670
|
+
(allowed) => allowed.toLowerCase() === normalizedFactory
|
|
1671
|
+
);
|
|
1672
|
+
if (!isAllowed) {
|
|
1673
|
+
return {
|
|
1674
|
+
success: false,
|
|
1675
|
+
errorReason: ErrFactoryNotAllowed,
|
|
1676
|
+
transaction: "",
|
|
1677
|
+
network: payloadV1.network,
|
|
1678
|
+
payer: exactEvmPayload.authorization.from
|
|
1679
|
+
};
|
|
1680
|
+
}
|
|
1634
1681
|
const deployTx = await this.signer.sendTransaction({
|
|
1635
1682
|
to: factoryAddress,
|
|
1636
1683
|
data: factoryCalldata
|
|
@@ -1832,14 +1879,14 @@ function registerExactEvmScheme(facilitator, config) {
|
|
|
1832
1879
|
facilitator.register(
|
|
1833
1880
|
config.networks,
|
|
1834
1881
|
new ExactEvmScheme(config.signer, {
|
|
1835
|
-
|
|
1882
|
+
eip6492AllowedFactories: config.eip6492AllowedFactories,
|
|
1836
1883
|
simulateInSettle: config.simulateInSettle
|
|
1837
1884
|
})
|
|
1838
1885
|
);
|
|
1839
1886
|
facilitator.registerV1(
|
|
1840
1887
|
NETWORKS,
|
|
1841
1888
|
new ExactEvmSchemeV12(config.signer, {
|
|
1842
|
-
|
|
1889
|
+
eip6492AllowedFactories: config.eip6492AllowedFactories,
|
|
1843
1890
|
simulateInSettle: config.simulateInSettle
|
|
1844
1891
|
})
|
|
1845
1892
|
);
|