@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.
Files changed (150) hide show
  1. package/dist/cjs/batch-settlement/client/file-storage.d.ts +47 -0
  2. package/dist/cjs/batch-settlement/client/file-storage.js +116 -0
  3. package/dist/cjs/batch-settlement/client/file-storage.js.map +1 -0
  4. package/dist/cjs/batch-settlement/client/index.d.ts +111 -0
  5. package/dist/cjs/batch-settlement/client/index.js +1565 -0
  6. package/dist/cjs/batch-settlement/client/index.js.map +1 -0
  7. package/dist/cjs/batch-settlement/facilitator/index.d.ts +71 -0
  8. package/dist/cjs/batch-settlement/facilitator/index.js +2032 -0
  9. package/dist/cjs/batch-settlement/facilitator/index.js.map +1 -0
  10. package/dist/cjs/batch-settlement/server/file-storage.d.ts +53 -0
  11. package/dist/cjs/batch-settlement/server/file-storage.js +181 -0
  12. package/dist/cjs/batch-settlement/server/file-storage.js.map +1 -0
  13. package/dist/cjs/batch-settlement/server/index.d.ts +491 -0
  14. package/dist/cjs/batch-settlement/server/index.js +1960 -0
  15. package/dist/cjs/batch-settlement/server/index.js.map +1 -0
  16. package/dist/cjs/batch-settlement/server/redis-storage.d.ts +87 -0
  17. package/dist/cjs/batch-settlement/server/redis-storage.js +181 -0
  18. package/dist/cjs/batch-settlement/server/redis-storage.js.map +1 -0
  19. package/dist/cjs/exact/client/index.d.ts +6 -4
  20. package/dist/cjs/exact/client/index.js +7 -5
  21. package/dist/cjs/exact/client/index.js.map +1 -1
  22. package/dist/cjs/exact/facilitator/index.d.ts +16 -9
  23. package/dist/cjs/exact/facilitator/index.js +56 -9
  24. package/dist/cjs/exact/facilitator/index.js.map +1 -1
  25. package/dist/cjs/exact/server/index.d.ts +0 -8
  26. package/dist/cjs/exact/server/index.js +53 -19
  27. package/dist/cjs/exact/server/index.js.map +1 -1
  28. package/dist/cjs/exact/v1/client/index.d.ts +2 -1
  29. package/dist/cjs/exact/v1/client/index.js.map +1 -1
  30. package/dist/cjs/exact/v1/facilitator/index.d.ts +11 -5
  31. package/dist/cjs/exact/v1/facilitator/index.js +16 -2
  32. package/dist/cjs/exact/v1/facilitator/index.js.map +1 -1
  33. package/dist/cjs/index.d.ts +113 -7
  34. package/dist/cjs/index.js +1353 -5
  35. package/dist/cjs/index.js.map +1 -1
  36. package/dist/{esm/permit2-CyZxwngN.d.mts → cjs/permit2-DhJRUcgY.d.ts} +1 -13
  37. package/dist/cjs/rpc-DULZzRne.d.ts +13 -0
  38. package/dist/cjs/scheme-CvkPJXBD.d.ts +307 -0
  39. package/dist/{esm/scheme-DCR7hsa3.d.mts → cjs/scheme-DTQFE9xp.d.ts} +2 -2
  40. package/dist/{esm/signer-D912R4mq.d.mts → cjs/signer-tYS6Y46X.d.ts} +3 -0
  41. package/dist/cjs/storage-6W5MO46W.d.ts +50 -0
  42. package/dist/cjs/storage-Bl6aD0Xg.d.ts +81 -0
  43. package/dist/cjs/types-CF8P2-NM.d.ts +180 -0
  44. package/dist/cjs/upto/client/index.d.ts +5 -3
  45. package/dist/cjs/upto/client/index.js +7 -5
  46. package/dist/cjs/upto/client/index.js.map +1 -1
  47. package/dist/cjs/upto/facilitator/index.d.ts +2 -1
  48. package/dist/cjs/upto/facilitator/index.js +2 -1
  49. package/dist/cjs/upto/facilitator/index.js.map +1 -1
  50. package/dist/cjs/upto/server/index.d.ts +0 -8
  51. package/dist/cjs/upto/server/index.js +51 -19
  52. package/dist/cjs/upto/server/index.js.map +1 -1
  53. package/dist/cjs/v1/index.d.ts +2 -1
  54. package/dist/cjs/v1/index.js.map +1 -1
  55. package/dist/esm/batch-settlement/client/file-storage.d.mts +47 -0
  56. package/dist/esm/batch-settlement/client/file-storage.mjs +63 -0
  57. package/dist/esm/batch-settlement/client/file-storage.mjs.map +1 -0
  58. package/dist/esm/batch-settlement/client/index.d.mts +111 -0
  59. package/dist/esm/batch-settlement/client/index.mjs +59 -0
  60. package/dist/esm/batch-settlement/client/index.mjs.map +1 -0
  61. package/dist/esm/batch-settlement/facilitator/index.d.mts +71 -0
  62. package/dist/esm/batch-settlement/facilitator/index.mjs +1235 -0
  63. package/dist/esm/batch-settlement/facilitator/index.mjs.map +1 -0
  64. package/dist/esm/batch-settlement/server/file-storage.d.mts +53 -0
  65. package/dist/esm/batch-settlement/server/file-storage.mjs +128 -0
  66. package/dist/esm/batch-settlement/server/file-storage.mjs.map +1 -0
  67. package/dist/esm/batch-settlement/server/index.d.mts +491 -0
  68. package/dist/esm/batch-settlement/server/index.mjs +1645 -0
  69. package/dist/esm/batch-settlement/server/index.mjs.map +1 -0
  70. package/dist/esm/batch-settlement/server/redis-storage.d.mts +87 -0
  71. package/dist/esm/batch-settlement/server/redis-storage.mjs +156 -0
  72. package/dist/esm/batch-settlement/server/redis-storage.mjs.map +1 -0
  73. package/dist/esm/chunk-2EUQTNJO.mjs +38 -0
  74. package/dist/esm/chunk-2EUQTNJO.mjs.map +1 -0
  75. package/dist/esm/chunk-53USC5VE.mjs +47 -0
  76. package/dist/esm/chunk-53USC5VE.mjs.map +1 -0
  77. package/dist/esm/{chunk-GJ57SZGI.mjs → chunk-6WQOGWBE.mjs} +7 -5
  78. package/dist/esm/{chunk-GJ57SZGI.mjs.map → chunk-6WQOGWBE.mjs.map} +1 -1
  79. package/dist/esm/{chunk-NSFLAANF.mjs → chunk-BTYNCDNS.mjs} +51 -2
  80. package/dist/esm/chunk-BTYNCDNS.mjs.map +1 -0
  81. package/dist/esm/{chunk-RYT6M3PA.mjs → chunk-CSQS7ZON.mjs} +47 -7
  82. package/dist/esm/chunk-CSQS7ZON.mjs.map +1 -0
  83. package/dist/esm/chunk-GD4MKCN7.mjs +57 -0
  84. package/dist/esm/chunk-GD4MKCN7.mjs.map +1 -0
  85. package/dist/esm/chunk-HYABYUBD.mjs +432 -0
  86. package/dist/esm/chunk-HYABYUBD.mjs.map +1 -0
  87. package/dist/esm/chunk-IN5YIT5C.mjs +159 -0
  88. package/dist/esm/chunk-IN5YIT5C.mjs.map +1 -0
  89. package/dist/esm/{chunk-JII456TS.mjs → chunk-JK7SLLF7.mjs} +1 -1
  90. package/dist/esm/chunk-JK7SLLF7.mjs.map +1 -0
  91. package/dist/esm/{chunk-C4ZQMS77.mjs → chunk-MACPBXCT.mjs} +2 -216
  92. package/dist/esm/chunk-MACPBXCT.mjs.map +1 -0
  93. package/dist/esm/chunk-NKYVYGRA.mjs +911 -0
  94. package/dist/esm/chunk-NKYVYGRA.mjs.map +1 -0
  95. package/dist/esm/{chunk-D6RXZXOS.mjs → chunk-R7I3RZFF.mjs} +10 -6
  96. package/dist/esm/{chunk-D6RXZXOS.mjs.map → chunk-R7I3RZFF.mjs.map} +1 -1
  97. package/dist/esm/{chunk-CRT6YNY5.mjs → chunk-RWLVVO3B.mjs} +21 -61
  98. package/dist/esm/chunk-RWLVVO3B.mjs.map +1 -0
  99. package/dist/esm/chunk-TGFAVNUD.mjs +111 -0
  100. package/dist/esm/chunk-TGFAVNUD.mjs.map +1 -0
  101. package/dist/esm/chunk-TW7Z65AO.mjs +34 -0
  102. package/dist/esm/chunk-TW7Z65AO.mjs.map +1 -0
  103. package/dist/esm/chunk-U4HCGTLU.mjs +35 -0
  104. package/dist/esm/chunk-U4HCGTLU.mjs.map +1 -0
  105. package/dist/esm/chunk-VS3RYAYE.mjs +80 -0
  106. package/dist/esm/chunk-VS3RYAYE.mjs.map +1 -0
  107. package/dist/esm/chunk-W6ON4LG2.mjs +39 -0
  108. package/dist/esm/chunk-W6ON4LG2.mjs.map +1 -0
  109. package/dist/esm/{chunk-WKBC5YMI.mjs → chunk-YMQCTKDU.mjs} +23 -55
  110. package/dist/esm/chunk-YMQCTKDU.mjs.map +1 -0
  111. package/dist/esm/exact/client/index.d.mts +6 -4
  112. package/dist/esm/exact/client/index.mjs +10 -5
  113. package/dist/esm/exact/facilitator/index.d.mts +16 -9
  114. package/dist/esm/exact/facilitator/index.mjs +39 -16
  115. package/dist/esm/exact/facilitator/index.mjs.map +1 -1
  116. package/dist/esm/exact/server/index.d.mts +0 -8
  117. package/dist/esm/exact/server/index.mjs +3 -19
  118. package/dist/esm/exact/server/index.mjs.map +1 -1
  119. package/dist/esm/exact/v1/client/index.d.mts +2 -1
  120. package/dist/esm/exact/v1/client/index.mjs +5 -2
  121. package/dist/esm/exact/v1/facilitator/index.d.mts +11 -5
  122. package/dist/esm/exact/v1/facilitator/index.mjs +5 -2
  123. package/dist/esm/index.d.mts +113 -7
  124. package/dist/esm/index.mjs +53 -7
  125. package/dist/esm/index.mjs.map +1 -1
  126. package/dist/esm/permit2-DhJRUcgY.d.mts +729 -0
  127. package/dist/esm/rpc-DULZzRne.d.mts +13 -0
  128. package/dist/esm/scheme-DtbSS4Fk.d.mts +307 -0
  129. package/dist/esm/scheme-gtqAIYPJ.d.mts +47 -0
  130. package/dist/esm/signer-tYS6Y46X.d.mts +170 -0
  131. package/dist/esm/storage-6W5MO46W.d.mts +50 -0
  132. package/dist/esm/storage-sZ1CDS4P.d.mts +81 -0
  133. package/dist/esm/types-CF8P2-NM.d.mts +180 -0
  134. package/dist/esm/upto/client/index.d.mts +5 -3
  135. package/dist/esm/upto/client/index.mjs +9 -4
  136. package/dist/esm/upto/facilitator/index.d.mts +2 -1
  137. package/dist/esm/upto/facilitator/index.mjs +17 -9
  138. package/dist/esm/upto/facilitator/index.mjs.map +1 -1
  139. package/dist/esm/upto/server/index.d.mts +0 -8
  140. package/dist/esm/upto/server/index.mjs +3 -19
  141. package/dist/esm/upto/server/index.mjs.map +1 -1
  142. package/dist/esm/v1/index.d.mts +2 -1
  143. package/dist/esm/v1/index.mjs +5 -2
  144. package/package.json +5 -5
  145. package/dist/esm/chunk-C4ZQMS77.mjs.map +0 -1
  146. package/dist/esm/chunk-CRT6YNY5.mjs.map +0 -1
  147. package/dist/esm/chunk-JII456TS.mjs.map +0 -1
  148. package/dist/esm/chunk-NSFLAANF.mjs.map +0 -1
  149. package/dist/esm/chunk-RYT6M3PA.mjs.map +0 -1
  150. 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-D912R4mq.js';
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
- * If enabled, the facilitator will deploy ERC-4337 smart wallets
8
- * via EIP-6492 when encountering undeployed contract signatures.
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
- * @default false
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
- deployERC4337WithEIP6492?: boolean;
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
- * If enabled, the facilitator will deploy ERC-4337 smart wallets
87
- * via EIP-6492 when encountering undeployed contract signatures.
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
- * @default false
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
- deployERC4337WithEIP6492?: boolean;
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 (config.deployERC4337WithEIP6492 && factoryAddress && factoryCalldata && !(0, import_viem4.isAddressEqual)(factoryAddress, "0x0000000000000000000000000000000000000000")) {
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: ErrTransactionFailed,
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
- permit2Payload.signature
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
- deployERC4337WithEIP6492: config?.deployERC4337WithEIP6492 ?? false,
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
- deployERC4337WithEIP6492: config?.deployERC4337WithEIP6492 ?? false,
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 (this.config.deployERC4337WithEIP6492 && factoryAddress && factoryCalldata && !(0, import_viem9.isAddressEqual)(factoryAddress, "0x0000000000000000000000000000000000000000")) {
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
- deployERC4337WithEIP6492: config.deployERC4337WithEIP6492,
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
- deployERC4337WithEIP6492: config.deployERC4337WithEIP6492,
1889
+ eip6492AllowedFactories: config.eip6492AllowedFactories,
1843
1890
  simulateInSettle: config.simulateInSettle
1844
1891
  })
1845
1892
  );