@wtflabs/x402 0.0.1-beta.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 (96) hide show
  1. package/README.md +60 -0
  2. package/dist/cjs/client/index.d.ts +64 -0
  3. package/dist/cjs/client/index.js +832 -0
  4. package/dist/cjs/client/index.js.map +1 -0
  5. package/dist/cjs/config-CFBSAuxW.d.ts +10 -0
  6. package/dist/cjs/config-Dfuvno71.d.ts +19 -0
  7. package/dist/cjs/facilitator/index.d.ts +42 -0
  8. package/dist/cjs/facilitator/index.js +2574 -0
  9. package/dist/cjs/facilitator/index.js.map +1 -0
  10. package/dist/cjs/index.d.ts +16 -0
  11. package/dist/cjs/index.js +2974 -0
  12. package/dist/cjs/index.js.map +1 -0
  13. package/dist/cjs/middleware-6_1ApcJn.d.ts +93 -0
  14. package/dist/cjs/middleware-B_ewwsQp.d.ts +93 -0
  15. package/dist/cjs/middleware-Brgsx32F.d.ts +93 -0
  16. package/dist/cjs/middleware-BwfW7mAs.d.ts +93 -0
  17. package/dist/cjs/middleware-CQb61c1k.d.ts +93 -0
  18. package/dist/cjs/middleware-DB9lqy9f.d.ts +93 -0
  19. package/dist/cjs/middleware-DcHctwQV.d.ts +93 -0
  20. package/dist/cjs/middleware-De0jD3Bp.d.ts +93 -0
  21. package/dist/cjs/middleware-HoFOmpgv.d.ts +93 -0
  22. package/dist/cjs/middleware-Y8AiAfYw.d.ts +93 -0
  23. package/dist/cjs/middleware-pnres9YM.d.ts +93 -0
  24. package/dist/cjs/network-FrFmmiyj.d.ts +11 -0
  25. package/dist/cjs/network-RtNddYQk.d.ts +11 -0
  26. package/dist/cjs/paywall/index.d.ts +30 -0
  27. package/dist/cjs/paywall/index.js +131 -0
  28. package/dist/cjs/paywall/index.js.map +1 -0
  29. package/dist/cjs/rpc-BMvnNNHd.d.ts +35 -0
  30. package/dist/cjs/rpc-Ca8eHCWz.d.ts +35 -0
  31. package/dist/cjs/schemes/index.d.ts +533 -0
  32. package/dist/cjs/schemes/index.js +3144 -0
  33. package/dist/cjs/schemes/index.js.map +1 -0
  34. package/dist/cjs/shared/evm/index.d.ts +71 -0
  35. package/dist/cjs/shared/evm/index.js +947 -0
  36. package/dist/cjs/shared/evm/index.js.map +1 -0
  37. package/dist/cjs/shared/index.d.ts +182 -0
  38. package/dist/cjs/shared/index.js +674 -0
  39. package/dist/cjs/shared/index.js.map +1 -0
  40. package/dist/cjs/types/index.d.ts +1515 -0
  41. package/dist/cjs/types/index.js +1645 -0
  42. package/dist/cjs/types/index.js.map +1 -0
  43. package/dist/cjs/verify/index.d.ts +7 -0
  44. package/dist/cjs/verify/index.js +438 -0
  45. package/dist/cjs/verify/index.js.map +1 -0
  46. package/dist/cjs/wallet-BRWfOM5D.d.ts +153 -0
  47. package/dist/cjs/wallet-BTqCm9Zp.d.ts +27 -0
  48. package/dist/cjs/wallet-BYRAGtOB.d.ts +153 -0
  49. package/dist/cjs/wallet-BmEtlgEf.d.ts +48 -0
  50. package/dist/cjs/wallet-CNOAmyZ6.d.ts +48 -0
  51. package/dist/cjs/wallet-CQ0Fe_M5.d.ts +88 -0
  52. package/dist/cjs/wallet-D1SoxFTw.d.ts +48 -0
  53. package/dist/cjs/wallet-SJ-hbjm9.d.ts +153 -0
  54. package/dist/cjs/wallet-SJKJpUgQ.d.ts +167 -0
  55. package/dist/cjs/wallet-ecnda4Aj.d.ts +48 -0
  56. package/dist/cjs/wallet-gP8Qoi-c.d.ts +74 -0
  57. package/dist/cjs/x402Specs-B7InXo2L.d.ts +1065 -0
  58. package/dist/cjs/x402Specs-BLH3j34O.d.ts +1696 -0
  59. package/dist/cjs/x402Specs-C7LipAZg.d.ts +1715 -0
  60. package/dist/cjs/x402Specs-CYq5tSY1.d.ts +1745 -0
  61. package/dist/cjs/x402Specs-CeajqonG.d.ts +1696 -0
  62. package/dist/cjs/x402Specs-qMujgEV5.d.ts +1715 -0
  63. package/dist/cjs/x402Specs-qUBCpcuz.d.ts +1715 -0
  64. package/dist/esm/chunk-34YNR4LY.mjs +106 -0
  65. package/dist/esm/chunk-34YNR4LY.mjs.map +1 -0
  66. package/dist/esm/chunk-57UEJN5U.mjs +1416 -0
  67. package/dist/esm/chunk-57UEJN5U.mjs.map +1 -0
  68. package/dist/esm/chunk-5LTKIVOA.mjs +858 -0
  69. package/dist/esm/chunk-5LTKIVOA.mjs.map +1 -0
  70. package/dist/esm/chunk-AQQR4PXH.mjs +80 -0
  71. package/dist/esm/chunk-AQQR4PXH.mjs.map +1 -0
  72. package/dist/esm/chunk-LGXWNXCO.mjs +76 -0
  73. package/dist/esm/chunk-LGXWNXCO.mjs.map +1 -0
  74. package/dist/esm/chunk-RX2JKK4O.mjs +349 -0
  75. package/dist/esm/chunk-RX2JKK4O.mjs.map +1 -0
  76. package/dist/esm/chunk-UCBE7FDY.mjs +1041 -0
  77. package/dist/esm/chunk-UCBE7FDY.mjs.map +1 -0
  78. package/dist/esm/client/index.mjs +17 -0
  79. package/dist/esm/client/index.mjs.map +1 -0
  80. package/dist/esm/facilitator/index.mjs +14 -0
  81. package/dist/esm/facilitator/index.mjs.map +1 -0
  82. package/dist/esm/index.mjs +28 -0
  83. package/dist/esm/index.mjs.map +1 -0
  84. package/dist/esm/paywall/index.mjs +46 -0
  85. package/dist/esm/paywall/index.mjs.map +1 -0
  86. package/dist/esm/schemes/index.mjs +16 -0
  87. package/dist/esm/schemes/index.mjs.map +1 -0
  88. package/dist/esm/shared/evm/index.mjs +20 -0
  89. package/dist/esm/shared/evm/index.mjs.map +1 -0
  90. package/dist/esm/shared/index.mjs +31 -0
  91. package/dist/esm/shared/index.mjs.map +1 -0
  92. package/dist/esm/types/index.mjs +87 -0
  93. package/dist/esm/types/index.mjs.map +1 -0
  94. package/dist/esm/verify/index.mjs +105 -0
  95. package/dist/esm/verify/index.mjs.map +1 -0
  96. package/package.json +148 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/shared/evm/erc20PermitABI.ts","../../src/shared/evm/usdc.ts","../../src/shared/evm/erc20.ts"],"sourcesContent":["export const usdcABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"authorizer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"nonce\",\n type: \"bytes32\",\n },\n ],\n name: \"AuthorizationCanceled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"authorizer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"bytes32\",\n name: \"nonce\",\n type: \"bytes32\",\n },\n ],\n name: \"AuthorizationUsed\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"_account\",\n type: \"address\",\n },\n ],\n name: \"Blacklisted\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newBlacklister\",\n type: \"address\",\n },\n ],\n name: \"BlacklisterChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"burner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Burn\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newMasterMinter\",\n type: \"address\",\n },\n ],\n name: \"MasterMinterChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Mint\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"minter\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"minterAllowedAmount\",\n type: \"uint256\",\n },\n ],\n name: \"MinterConfigured\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"oldMinter\",\n type: \"address\",\n },\n ],\n name: \"MinterRemoved\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"address\",\n name: \"previousOwner\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"newOwner\",\n type: \"address\",\n },\n ],\n name: \"OwnershipTransferred\",\n type: \"event\",\n },\n { anonymous: false, inputs: [], name: \"Pause\", type: \"event\" },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newAddress\",\n type: \"address\",\n },\n ],\n name: \"PauserChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"newRescuer\",\n type: \"address\",\n },\n ],\n name: \"RescuerChanged\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: \"address\", name: \"from\", type: \"address\" },\n { indexed: true, internalType: \"address\", name: \"to\", type: \"address\" },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"_account\",\n type: \"address\",\n },\n ],\n name: \"UnBlacklisted\",\n type: \"event\",\n },\n { anonymous: false, inputs: [], name: \"Unpause\", type: \"event\" },\n {\n inputs: [],\n name: \"CANCEL_AUTHORIZATION_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"RECEIVE_WITH_AUTHORIZATION_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"TRANSFER_WITH_AUTHORIZATION_TYPEHASH\",\n outputs: [{ internalType: \"bytes32\", name: \"\", type: \"bytes32\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n ],\n name: \"allowance\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"approve\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"authorizer\", type: \"address\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n ],\n name: \"authorizationState\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"balanceOf\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_account\", type: \"address\" }],\n name: \"blacklist\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"blacklister\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"uint256\", name: \"_amount\", type: \"uint256\" }],\n name: \"burn\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"authorizer\", type: \"address\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"cancelAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"authorizer\", type: \"address\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"cancelAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"minter\", type: \"address\" },\n { internalType: \"uint256\", name: \"minterAllowedAmount\", type: \"uint256\" },\n ],\n name: \"configureMinter\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"currency\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [{ internalType: \"uint8\", name: \"\", type: \"uint8\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"decrement\", type: \"uint256\" },\n ],\n name: \"decreaseAllowance\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"increment\", type: \"uint256\" },\n ],\n name: \"increaseAllowance\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"string\", name: \"tokenName\", type: \"string\" },\n { internalType: \"string\", name: \"tokenSymbol\", type: \"string\" },\n { internalType: \"string\", name: \"tokenCurrency\", type: \"string\" },\n { internalType: \"uint8\", name: \"tokenDecimals\", type: \"uint8\" },\n { internalType: \"address\", name: \"newMasterMinter\", type: \"address\" },\n { internalType: \"address\", name: \"newPauser\", type: \"address\" },\n { internalType: \"address\", name: \"newBlacklister\", type: \"address\" },\n { internalType: \"address\", name: \"newOwner\", type: \"address\" },\n ],\n name: \"initialize\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"string\", name: \"newName\", type: \"string\" }],\n name: \"initializeV2\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"lostAndFound\", type: \"address\" }],\n name: \"initializeV2_1\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"accountsToBlacklist\",\n type: \"address[]\",\n },\n { internalType: \"string\", name: \"newSymbol\", type: \"string\" },\n ],\n name: \"initializeV2_2\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_account\", type: \"address\" }],\n name: \"isBlacklisted\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"account\", type: \"address\" }],\n name: \"isMinter\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"masterMinter\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"_to\", type: \"address\" },\n { internalType: \"uint256\", name: \"_amount\", type: \"uint256\" },\n ],\n name: \"mint\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"minter\", type: \"address\" }],\n name: \"minterAllowance\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"owner\", type: \"address\" }],\n name: \"nonces\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"owner\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"paused\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"pauser\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"owner\", type: \"address\" },\n { internalType: \"address\", name: \"spender\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"deadline\", type: \"uint256\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validAfter\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validBefore\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"receiveWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validAfter\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validBefore\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"receiveWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"minter\", type: \"address\" }],\n name: \"removeMinter\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"contract IERC20\",\n name: \"tokenContract\",\n type: \"address\",\n },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"amount\", type: \"uint256\" },\n ],\n name: \"rescueERC20\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"rescuer\",\n outputs: [{ internalType: \"address\", name: \"\", type: \"address\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [{ internalType: \"uint256\", name: \"\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transfer\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n ],\n name: \"transferFrom\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newOwner\", type: \"address\" }],\n name: \"transferOwnership\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validAfter\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validBefore\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"bytes\", name: \"signature\", type: \"bytes\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"from\", type: \"address\" },\n { internalType: \"address\", name: \"to\", type: \"address\" },\n { internalType: \"uint256\", name: \"value\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validAfter\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"validBefore\", type: \"uint256\" },\n { internalType: \"bytes32\", name: \"nonce\", type: \"bytes32\" },\n { internalType: \"uint8\", name: \"v\", type: \"uint8\" },\n { internalType: \"bytes32\", name: \"r\", type: \"bytes32\" },\n { internalType: \"bytes32\", name: \"s\", type: \"bytes32\" },\n ],\n name: \"transferWithAuthorization\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_account\", type: \"address\" }],\n name: \"unBlacklist\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"unpause\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_newBlacklister\", type: \"address\" }],\n name: \"updateBlacklister\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_newMasterMinter\", type: \"address\" }],\n name: \"updateMasterMinter\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"_newPauser\", type: \"address\" }],\n name: \"updatePauser\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [{ internalType: \"address\", name: \"newRescuer\", type: \"address\" }],\n name: \"updateRescuer\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"version\",\n outputs: [{ internalType: \"string\", name: \"\", type: \"string\" }],\n stateMutability: \"pure\",\n type: \"function\",\n },\n] as const;\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { ChainConfig, config } from \"../../types/shared/evm/config\";\nimport { usdcABI as abi } from \"../../types/shared/evm/erc20PermitABI\";\nimport { ConnectedClient } from \"../../types/shared/evm/wallet\";\n\n/**\n * Gets the USDC contract address for the current chain from the client\n *\n * @param client - The Viem client instance connected to the blockchain\n * @returns The USDC contract address for the current chain\n */\nexport function getUsdcAddress<\n transport extends Transport,\n chain extends Chain | undefined = undefined,\n account extends Account | undefined = undefined,\n>(client: Client<transport, chain, account>): Address {\n return config[client.chain!.id.toString()].usdcAddress as Address;\n}\n\n/**\n * Gets the USDC contract address for a specific chain ID\n *\n * @deprecated Use `getUsdcChainConfigForChain` instead\n * @param chainId - The chain ID to get the USDC contract address for\n * @returns The USDC contract address for the specified chain\n */\nexport function getUsdcAddressForChain(chainId: number): Address {\n return config[chainId.toString()].usdcAddress as Address;\n}\n\n/**\n * Gets the USDC address and eip712 domain name for a specific chain ID\n *\n * @param chainId - The chain ID\n * @returns The USDC contract address and eip712 domain name for the specified chain\n */\nexport function getUsdcChainConfigForChain(chainId: number): ChainConfig | undefined {\n return config[chainId.toString()];\n}\n\n// Cache for storing the version value per token address\nconst versionCache: Map<string, string> = new Map();\n\n/**\n * Gets the version of an ERC20 Permit contract, using a cache to avoid repeated calls\n *\n * Priority order:\n * 1. Try eip712Domain() (EIP-5267, OpenZeppelin v5+)\n * 2. Fallback to version() function (OpenZeppelin v4)\n * 3. Default to \"1\" if neither is available\n *\n * @param client - The Viem client instance connected to the blockchain\n * @param tokenAddress - Optional token address. If not provided, uses USDC address\n * @returns A promise that resolves to the ERC20 contract version string\n */\nexport async function getVersion<\n transport extends Transport,\n chain extends Chain,\n account extends Account | undefined = undefined,\n>(client: ConnectedClient<transport, chain, account>, tokenAddress?: Address): Promise<string> {\n const address = tokenAddress ?? getUsdcAddress(client);\n const cacheKey = `${client.chain!.id}-${address.toLowerCase()}`;\n\n // Return cached version if available\n if (versionCache.has(cacheKey)) {\n return versionCache.get(cacheKey)!;\n }\n\n // Try to get version from EIP-5267 eip712Domain() first (OpenZeppelin v5+)\n let version = \"1\";\n try {\n const eip712DomainABI = [\n {\n inputs: [],\n name: \"eip712Domain\",\n outputs: [\n { name: \"fields\", type: \"bytes1\" },\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"verifyingContract\", type: \"address\" },\n { name: \"salt\", type: \"bytes32\" },\n { name: \"extensions\", type: \"uint256[]\" },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n ] as const;\n\n const result = await client.readContract({\n address,\n abi: eip712DomainABI,\n functionName: \"eip712Domain\",\n });\n // eip712Domain returns [fields, name, version, chainId, verifyingContract, salt, extensions]\n version = result[2] as string; // version is the 3rd element (index 2)\n } catch {\n // Fallback to version() function (OpenZeppelin v4)\n try {\n const result = await client.readContract({\n address,\n abi,\n functionName: \"version\",\n });\n version = result as string;\n } catch {\n // If neither method is available, use default \"1\" (standard for OpenZeppelin ERC20Permit)\n console.warn(\n `Neither eip712Domain() nor version() available for token ${address}, using default: ${version}`,\n );\n }\n }\n\n versionCache.set(cacheKey, version);\n return version;\n}\n\n/**\n * Gets the USDC balance for a specific address\n *\n * @param client - The Viem client instance connected to the blockchain\n * @param address - The address to check the USDC balance for\n * @returns A promise that resolves to the USDC balance as a bigint\n */\nexport async function getUSDCBalance<\n transport extends Transport,\n chain extends Chain,\n account extends Account | undefined = undefined,\n>(client: ConnectedClient<transport, chain, account>, address: Address): Promise<bigint> {\n const chainId = client.chain!.id;\n const usdc = getUsdcChainConfigForChain(chainId);\n if (!usdc) {\n return 0n;\n }\n const balance = await client.readContract({\n address: usdc.usdcAddress as `0x${string}`,\n abi,\n functionName: \"balanceOf\",\n args: [address],\n });\n return balance as bigint;\n}\n","import { Account, Address, Chain, Transport } from \"viem\";\nimport { usdcABI as erc20PermitABI } from \"../../types/shared/evm/erc20PermitABI\";\nimport { ConnectedClient } from \"../../types/shared/evm/wallet\";\n\n/**\n * Gets the USDC balance for a specific address\n *\n * @param client - The Viem client instance connected to the blockchain\n * @param erc20Address - The address of the ERC20 contract\n * @param address - The address to check the USDC balance for\n * @returns A promise that resolves to the USDC balance as a bigint\n */\nexport async function getERC20Balance<\n transport extends Transport,\n chain extends Chain,\n account extends Account | undefined = undefined,\n>(\n client: ConnectedClient<transport, chain, account>,\n erc20Address: Address,\n address: Address,\n): Promise<bigint> {\n const balance = await client.readContract({\n address: erc20Address,\n abi: erc20PermitABI,\n functionName: \"balanceOf\",\n args: [address],\n });\n return balance as bigint;\n}\n\n/**\n * Gets the ERC20 allowance for a spender\n *\n * @param client - The Viem client instance connected to the blockchain\n * @param erc20Address - The address of the ERC20 contract\n * @param owner - The address of the token owner\n * @param spender - The address of the spender\n * @returns A promise that resolves to the allowance as a bigint\n */\nexport async function getERC20Allowance<\n transport extends Transport,\n chain extends Chain,\n account extends Account | undefined = undefined,\n>(\n client: ConnectedClient<transport, chain, account>,\n erc20Address: Address,\n owner: Address,\n spender: Address,\n): Promise<bigint> {\n const allowance = await client.readContract({\n address: erc20Address,\n abi: erc20PermitABI,\n functionName: \"allowance\",\n args: [owner, spender],\n });\n return allowance as bigint;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,80 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
3
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
4
+ }) : x)(function(x) {
5
+ if (typeof require !== "undefined") return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+
13
+ // src/types/shared/evm/config.ts
14
+ var config = {
15
+ "84532": {
16
+ usdcAddress: "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
17
+ usdcName: "USDC"
18
+ },
19
+ "8453": {
20
+ usdcAddress: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
21
+ usdcName: "USD Coin"
22
+ },
23
+ "43113": {
24
+ usdcAddress: "0x5425890298aed601595a70AB815c96711a31Bc65",
25
+ usdcName: "USD Coin"
26
+ },
27
+ "43114": {
28
+ usdcAddress: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
29
+ usdcName: "USD Coin"
30
+ },
31
+ "4689": {
32
+ usdcAddress: "0xcdf79194c6c285077a58da47641d4dbe51f63542",
33
+ usdcName: "Bridged USDC"
34
+ },
35
+ // solana devnet
36
+ "103": {
37
+ usdcAddress: "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU",
38
+ usdcName: "USDC"
39
+ },
40
+ // solana mainnet
41
+ "101": {
42
+ usdcAddress: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
43
+ usdcName: "USDC"
44
+ },
45
+ "1328": {
46
+ usdcAddress: "0x4fcf1784b31630811181f670aea7a7bef803eaed",
47
+ usdcName: "USDC"
48
+ },
49
+ "1329": {
50
+ usdcAddress: "0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392",
51
+ usdcName: "USDC"
52
+ },
53
+ "137": {
54
+ usdcAddress: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359",
55
+ usdcName: "USD Coin"
56
+ },
57
+ "80002": {
58
+ usdcAddress: "0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582",
59
+ usdcName: "USDC"
60
+ },
61
+ "3338": {
62
+ usdcAddress: "0xbbA60da06c2c5424f03f7434542280FCAd453d10",
63
+ usdcName: "USDC"
64
+ },
65
+ "56": {
66
+ usdcAddress: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
67
+ usdcName: "USDC"
68
+ },
69
+ "97": {
70
+ usdcAddress: "0x64544969ed7EBf5f083679233325356EbE738930",
71
+ usdcName: "USDC"
72
+ }
73
+ };
74
+
75
+ export {
76
+ __require,
77
+ __export,
78
+ config
79
+ };
80
+ //# sourceMappingURL=chunk-AQQR4PXH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/shared/evm/config.ts"],"sourcesContent":["import { Address } from \"viem\";\nimport { Address as SolanaAddress } from \"@solana/kit\";\n\nexport const config: Record<string, ChainConfig> = {\n \"84532\": {\n usdcAddress: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n usdcName: \"USDC\",\n },\n \"8453\": {\n usdcAddress: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n usdcName: \"USD Coin\",\n },\n \"43113\": {\n usdcAddress: \"0x5425890298aed601595a70AB815c96711a31Bc65\",\n usdcName: \"USD Coin\",\n },\n \"43114\": {\n usdcAddress: \"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E\",\n usdcName: \"USD Coin\",\n },\n \"4689\": {\n usdcAddress: \"0xcdf79194c6c285077a58da47641d4dbe51f63542\",\n usdcName: \"Bridged USDC\",\n },\n // solana devnet\n \"103\": {\n usdcAddress: \"4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU\" as SolanaAddress,\n usdcName: \"USDC\",\n },\n // solana mainnet\n \"101\": {\n usdcAddress: \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\" as SolanaAddress,\n usdcName: \"USDC\",\n },\n \"1328\": {\n usdcAddress: \"0x4fcf1784b31630811181f670aea7a7bef803eaed\",\n usdcName: \"USDC\",\n },\n \"1329\": {\n usdcAddress: \"0xe15fc38f6d8c56af07bbcbe3baf5708a2bf42392\",\n usdcName: \"USDC\",\n },\n \"137\": {\n usdcAddress: \"0x3c499c542cef5e3811e1192ce70d8cc03d5c3359\",\n usdcName: \"USD Coin\",\n },\n \"80002\": {\n usdcAddress: \"0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582\",\n usdcName: \"USDC\",\n },\n \"3338\": {\n usdcAddress: \"0xbbA60da06c2c5424f03f7434542280FCAd453d10\",\n usdcName: \"USDC\",\n },\n \"56\": {\n usdcAddress: \"0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d\",\n usdcName: \"USDC\",\n },\n \"97\": {\n usdcAddress: \"0x64544969ed7EBf5f083679233325356EbE738930\",\n usdcName: \"USDC\",\n },\n};\n\nexport type ChainConfig = {\n usdcAddress: Address | SolanaAddress;\n usdcName: string;\n};\n"],"mappings":";;;;;;;;;;;;;AAGO,IAAM,SAAsC;AAAA,EACjD,SAAS;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAEA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA;AAAA,EAEA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,OAAO;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AACF;","names":[]}
@@ -0,0 +1,76 @@
1
+ import {
2
+ settle,
3
+ settle2,
4
+ verify,
5
+ verify2
6
+ } from "./chunk-57UEJN5U.mjs";
7
+ import {
8
+ SupportedEVMNetworks,
9
+ SupportedSVMNetworks
10
+ } from "./chunk-UCBE7FDY.mjs";
11
+
12
+ // src/facilitator/facilitator.ts
13
+ async function verify3(client, payload, paymentRequirements, config) {
14
+ if (paymentRequirements.scheme === "exact") {
15
+ if (SupportedEVMNetworks.includes(paymentRequirements.network)) {
16
+ return verify2(
17
+ client,
18
+ payload,
19
+ paymentRequirements
20
+ );
21
+ }
22
+ if (SupportedSVMNetworks.includes(paymentRequirements.network)) {
23
+ return await verify(client, payload, paymentRequirements, config);
24
+ }
25
+ }
26
+ let payer = "";
27
+ if (SupportedEVMNetworks.includes(paymentRequirements.network)) {
28
+ const evmPayload = payload.payload;
29
+ if (evmPayload.authorizationType === "eip3009") {
30
+ payer = evmPayload.authorization.from;
31
+ } else if (evmPayload.authorizationType === "permit" || evmPayload.authorizationType === "permit2") {
32
+ payer = evmPayload.authorization.owner;
33
+ }
34
+ }
35
+ return {
36
+ isValid: false,
37
+ invalidReason: "invalid_scheme",
38
+ payer
39
+ };
40
+ }
41
+ async function settle3(client, payload, paymentRequirements, config) {
42
+ if (paymentRequirements.scheme === "exact") {
43
+ if (SupportedEVMNetworks.includes(paymentRequirements.network)) {
44
+ return await settle2(
45
+ client,
46
+ payload,
47
+ paymentRequirements
48
+ );
49
+ }
50
+ if (SupportedSVMNetworks.includes(paymentRequirements.network)) {
51
+ return await settle(client, payload, paymentRequirements, config);
52
+ }
53
+ }
54
+ let payer = "";
55
+ if (SupportedEVMNetworks.includes(paymentRequirements.network)) {
56
+ const evmPayload = payload.payload;
57
+ if (evmPayload.authorizationType === "eip3009") {
58
+ payer = evmPayload.authorization.from;
59
+ } else if (evmPayload.authorizationType === "permit" || evmPayload.authorizationType === "permit2") {
60
+ payer = evmPayload.authorization.owner;
61
+ }
62
+ }
63
+ return {
64
+ success: false,
65
+ errorReason: "invalid_scheme",
66
+ transaction: "",
67
+ network: paymentRequirements.network,
68
+ payer
69
+ };
70
+ }
71
+
72
+ export {
73
+ verify3 as verify,
74
+ settle3 as settle
75
+ };
76
+ //# sourceMappingURL=chunk-LGXWNXCO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/facilitator/facilitator.ts"],"sourcesContent":["import { verify as verifyExactEvm, settle as settleExactEvm } from \"../schemes/exact/evm\";\nimport { verify as verifyExactSvm, settle as settleExactSvm } from \"../schemes/exact/svm\";\nimport { SupportedEVMNetworks, SupportedSVMNetworks } from \"../types/shared\";\nimport { X402Config } from \"../types/config\";\nimport {\n ConnectedClient as EvmConnectedClient,\n SignerWallet as EvmSignerWallet,\n} from \"../types/shared/evm\";\nimport { ConnectedClient, Signer } from \"../types/shared/wallet\";\nimport {\n PaymentPayload,\n PaymentRequirements,\n SettleResponse,\n VerifyResponse,\n ExactEvmPayload,\n} from \"../types/verify\";\nimport { Chain, Transport, Account } from \"viem\";\nimport { KeyPairSigner } from \"@solana/kit\";\n\n/**\n * Verifies a payment payload against the required payment details regardless of the scheme\n * this function wraps all verify functions for each specific scheme\n *\n * @param client - The public client used for blockchain interactions\n * @param payload - The signed payment payload containing transfer parameters and signature\n * @param paymentRequirements - The payment requirements that the payload must satisfy\n * @param config - Optional configuration for X402 operations (e.g., custom RPC URLs)\n * @returns A ValidPaymentRequest indicating if the payment is valid and any invalidation reason\n */\nexport async function verify<\n transport extends Transport,\n chain extends Chain,\n account extends Account | undefined,\n>(\n client: ConnectedClient | Signer,\n payload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n config?: X402Config,\n): Promise<VerifyResponse> {\n // exact scheme\n if (paymentRequirements.scheme === \"exact\") {\n // evm\n if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n return verifyExactEvm(\n client as EvmConnectedClient<transport, chain, account>,\n payload,\n paymentRequirements,\n );\n }\n\n // svm\n if (SupportedSVMNetworks.includes(paymentRequirements.network)) {\n return await verifyExactSvm(client as KeyPairSigner, payload, paymentRequirements, config);\n }\n }\n\n // unsupported scheme\n let payer = \"\";\n if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n const evmPayload = payload.payload as ExactEvmPayload;\n if (evmPayload.authorizationType === \"eip3009\") {\n payer = evmPayload.authorization.from;\n } else if (\n evmPayload.authorizationType === \"permit\" ||\n evmPayload.authorizationType === \"permit2\"\n ) {\n payer = evmPayload.authorization.owner;\n }\n }\n\n return {\n isValid: false,\n invalidReason: \"invalid_scheme\",\n payer,\n };\n}\n\n/**\n * Settles a payment payload against the required payment details regardless of the scheme\n * this function wraps all settle functions for each specific scheme\n *\n * @param client - The signer wallet used for blockchain interactions\n * @param payload - The signed payment payload containing transfer parameters and signature\n * @param paymentRequirements - The payment requirements that the payload must satisfy\n * @param config - Optional configuration for X402 operations (e.g., custom RPC URLs)\n * @returns A SettleResponse indicating if the payment is settled and any settlement reason\n */\nexport async function settle<transport extends Transport, chain extends Chain>(\n client: Signer,\n payload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n config?: X402Config,\n): Promise<SettleResponse> {\n // exact scheme\n if (paymentRequirements.scheme === \"exact\") {\n // evm\n if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n return await settleExactEvm(\n client as EvmSignerWallet<chain, transport>,\n payload,\n paymentRequirements,\n );\n }\n\n // svm\n if (SupportedSVMNetworks.includes(paymentRequirements.network)) {\n return await settleExactSvm(client as KeyPairSigner, payload, paymentRequirements, config);\n }\n }\n\n let payer = \"\";\n if (SupportedEVMNetworks.includes(paymentRequirements.network)) {\n const evmPayload = payload.payload as ExactEvmPayload;\n if (evmPayload.authorizationType === \"eip3009\") {\n payer = evmPayload.authorization.from;\n } else if (\n evmPayload.authorizationType === \"permit\" ||\n evmPayload.authorizationType === \"permit2\"\n ) {\n payer = evmPayload.authorization.owner;\n }\n }\n\n return {\n success: false,\n errorReason: \"invalid_scheme\",\n transaction: \"\",\n network: paymentRequirements.network,\n payer,\n };\n}\n\nexport type Supported = {\n x402Version: number;\n kind: {\n scheme: string;\n networkId: string;\n extra: object;\n }[];\n};\n"],"mappings":";;;;;;;;;;;;AA6BA,eAAsBA,QAKpB,QACA,SACA,qBACA,QACyB;AAEzB,MAAI,oBAAoB,WAAW,SAAS;AAE1C,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAOA;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAM,OAAe,QAAyB,SAAS,qBAAqB,MAAM;AAAA,IAC3F;AAAA,EACF;AAGA,MAAI,QAAQ;AACZ,MAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,UAAM,aAAa,QAAQ;AAC3B,QAAI,WAAW,sBAAsB,WAAW;AAC9C,cAAQ,WAAW,cAAc;AAAA,IACnC,WACE,WAAW,sBAAsB,YACjC,WAAW,sBAAsB,WACjC;AACA,cAAQ,WAAW,cAAc;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,eAAe;AAAA,IACf;AAAA,EACF;AACF;AAYA,eAAsBC,QACpB,QACA,SACA,qBACA,QACyB;AAEzB,MAAI,oBAAoB,WAAW,SAAS;AAE1C,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAMA;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,QAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,aAAO,MAAM,OAAe,QAAyB,SAAS,qBAAqB,MAAM;AAAA,IAC3F;AAAA,EACF;AAEA,MAAI,QAAQ;AACZ,MAAI,qBAAqB,SAAS,oBAAoB,OAAO,GAAG;AAC9D,UAAM,aAAa,QAAQ;AAC3B,QAAI,WAAW,sBAAsB,WAAW;AAC9C,cAAQ,WAAW,cAAc;AAAA,IACnC,WACE,WAAW,sBAAsB,YACjC,WAAW,sBAAsB,WACjC;AACA,cAAQ,WAAW,cAAc;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,SAAS,oBAAoB;AAAA,IAC7B;AAAA,EACF;AACF;","names":["verify","settle"]}
@@ -0,0 +1,349 @@
1
+ import {
2
+ PaymentPayloadSchema,
3
+ SupportedEVMNetworks,
4
+ SupportedSVMNetworks,
5
+ authorizationTypes,
6
+ getNetworkId,
7
+ getRpcClient,
8
+ isAccount,
9
+ isSignerWallet,
10
+ safeBase64Decode,
11
+ safeBase64Encode
12
+ } from "./chunk-UCBE7FDY.mjs";
13
+ import {
14
+ __require
15
+ } from "./chunk-AQQR4PXH.mjs";
16
+
17
+ // src/schemes/exact/evm/utils/paymentUtils.ts
18
+ function encodePayment(payment) {
19
+ let safe;
20
+ if (SupportedEVMNetworks.includes(payment.network)) {
21
+ const evmPayload = payment.payload;
22
+ let processedPayload;
23
+ if (evmPayload.authorizationType === "eip3009") {
24
+ processedPayload = {
25
+ ...evmPayload,
26
+ authorization: {
27
+ ...evmPayload.authorization,
28
+ validAfter: evmPayload.authorization.validAfter.toString(),
29
+ validBefore: evmPayload.authorization.validBefore.toString()
30
+ }
31
+ };
32
+ } else if (evmPayload.authorizationType === "permit") {
33
+ processedPayload = {
34
+ ...evmPayload,
35
+ authorization: {
36
+ ...evmPayload.authorization,
37
+ deadline: evmPayload.authorization.deadline.toString(),
38
+ nonce: evmPayload.authorization.nonce.toString()
39
+ }
40
+ };
41
+ } else {
42
+ processedPayload = {
43
+ ...evmPayload,
44
+ authorization: {
45
+ ...evmPayload.authorization,
46
+ deadline: evmPayload.authorization.deadline.toString(),
47
+ nonce: evmPayload.authorization.nonce.toString()
48
+ }
49
+ };
50
+ }
51
+ safe = {
52
+ ...payment,
53
+ payload: processedPayload
54
+ };
55
+ return safeBase64Encode(JSON.stringify(safe));
56
+ }
57
+ if (SupportedSVMNetworks.includes(payment.network)) {
58
+ safe = { ...payment, payload: payment.payload };
59
+ return safeBase64Encode(JSON.stringify(safe));
60
+ }
61
+ throw new Error("Invalid network");
62
+ }
63
+ function decodePayment(payment) {
64
+ const decoded = safeBase64Decode(payment);
65
+ const parsed = JSON.parse(decoded);
66
+ let obj;
67
+ if (SupportedEVMNetworks.includes(parsed.network)) {
68
+ obj = {
69
+ ...parsed,
70
+ payload: parsed.payload
71
+ };
72
+ } else if (SupportedSVMNetworks.includes(parsed.network)) {
73
+ obj = {
74
+ ...parsed,
75
+ payload: parsed.payload
76
+ };
77
+ } else {
78
+ throw new Error("Invalid network");
79
+ }
80
+ const validated = PaymentPayloadSchema.parse(obj);
81
+ return validated;
82
+ }
83
+
84
+ // src/schemes/exact/evm/eip3009/sign.ts
85
+ import { getAddress, toHex } from "viem";
86
+ async function signAuthorization(walletClient, { from, to, value, validAfter, validBefore, nonce }, { asset, network, extra }) {
87
+ const chainId = getNetworkId(network);
88
+ const name = extra?.name;
89
+ const version = extra?.version;
90
+ const data = {
91
+ types: authorizationTypes,
92
+ domain: {
93
+ name,
94
+ version,
95
+ chainId,
96
+ verifyingContract: getAddress(asset)
97
+ },
98
+ primaryType: "TransferWithAuthorization",
99
+ message: {
100
+ from: getAddress(from),
101
+ to: getAddress(to),
102
+ value,
103
+ validAfter,
104
+ validBefore,
105
+ nonce
106
+ }
107
+ };
108
+ if (isSignerWallet(walletClient)) {
109
+ const signature = await walletClient.signTypedData(data);
110
+ return {
111
+ signature
112
+ };
113
+ } else if (isAccount(walletClient) && walletClient.signTypedData) {
114
+ const signature = await walletClient.signTypedData(data);
115
+ return {
116
+ signature
117
+ };
118
+ } else {
119
+ throw new Error("Invalid wallet client provided does not support signTypedData");
120
+ }
121
+ }
122
+ function createNonce() {
123
+ const cryptoObj = typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.getRandomValues === "function" ? globalThis.crypto : (
124
+ // Dynamic require is needed to support node.js
125
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
126
+ __require("crypto").webcrypto
127
+ );
128
+ return toHex(cryptoObj.getRandomValues(new Uint8Array(32)));
129
+ }
130
+
131
+ // src/schemes/exact/evm/eip3009/client.ts
132
+ function preparePaymentHeader(from, x402Version, paymentRequirements) {
133
+ const nonce = createNonce();
134
+ const validAfter = BigInt(
135
+ Math.floor(Date.now() / 1e3) - 600
136
+ // 10 minutes before
137
+ ).toString();
138
+ const validBefore = BigInt(
139
+ Math.floor(Date.now() / 1e3 + paymentRequirements.maxTimeoutSeconds)
140
+ ).toString();
141
+ return {
142
+ x402Version,
143
+ scheme: paymentRequirements.scheme,
144
+ network: paymentRequirements.network,
145
+ payload: {
146
+ authorizationType: "eip3009",
147
+ signature: void 0,
148
+ authorization: {
149
+ from,
150
+ to: paymentRequirements.payTo,
151
+ value: paymentRequirements.maxAmountRequired,
152
+ validAfter: validAfter.toString(),
153
+ validBefore: validBefore.toString(),
154
+ nonce
155
+ }
156
+ }
157
+ };
158
+ }
159
+ async function signPaymentHeader(client, paymentRequirements, unsignedPaymentHeader) {
160
+ const { authorization } = unsignedPaymentHeader.payload;
161
+ const { signature } = await signAuthorization(client, authorization, paymentRequirements);
162
+ return {
163
+ ...unsignedPaymentHeader,
164
+ payload: {
165
+ authorizationType: "eip3009",
166
+ signature,
167
+ authorization
168
+ }
169
+ };
170
+ }
171
+ async function createPayment(client, x402Version, paymentRequirements) {
172
+ const from = isSignerWallet(client) ? client.account.address : client.address;
173
+ const unsignedPaymentHeader = preparePaymentHeader(from, x402Version, paymentRequirements);
174
+ return signPaymentHeader(client, paymentRequirements, unsignedPaymentHeader);
175
+ }
176
+ async function createPaymentHeader(client, x402Version, paymentRequirements) {
177
+ const payment = await createPayment(client, x402Version, paymentRequirements);
178
+ return encodePayment(payment);
179
+ }
180
+
181
+ // src/schemes/exact/svm/client.ts
182
+ import {
183
+ pipe,
184
+ createTransactionMessage,
185
+ setTransactionMessageFeePayer,
186
+ setTransactionMessageLifetimeUsingBlockhash,
187
+ appendTransactionMessageInstructions,
188
+ partiallySignTransactionMessageWithSigners,
189
+ prependTransactionMessageInstruction,
190
+ getBase64EncodedWireTransaction,
191
+ fetchEncodedAccount
192
+ } from "@solana/kit";
193
+ import {
194
+ fetchMint,
195
+ findAssociatedTokenPda,
196
+ getCreateAssociatedTokenInstruction,
197
+ getTransferCheckedInstruction,
198
+ TOKEN_2022_PROGRAM_ADDRESS
199
+ } from "@solana-program/token-2022";
200
+ import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
201
+ import {
202
+ estimateComputeUnitLimitFactory,
203
+ getSetComputeUnitLimitInstruction,
204
+ setTransactionMessageComputeUnitPrice
205
+ } from "@solana-program/compute-budget";
206
+ async function createPaymentHeader2(client, x402Version, paymentRequirements, config) {
207
+ const paymentPayload = await createAndSignPayment(
208
+ client,
209
+ x402Version,
210
+ paymentRequirements,
211
+ config
212
+ );
213
+ return encodePayment(paymentPayload);
214
+ }
215
+ async function createAndSignPayment(client, x402Version, paymentRequirements, config) {
216
+ const transactionMessage = await createTransferTransactionMessage(
217
+ client,
218
+ paymentRequirements,
219
+ config
220
+ );
221
+ const signedTransaction = await partiallySignTransactionMessageWithSigners(transactionMessage);
222
+ const base64EncodedWireTransaction = getBase64EncodedWireTransaction(signedTransaction);
223
+ return {
224
+ scheme: paymentRequirements.scheme,
225
+ network: paymentRequirements.network,
226
+ x402Version,
227
+ payload: {
228
+ transaction: base64EncodedWireTransaction
229
+ }
230
+ };
231
+ }
232
+ async function createTransferTransactionMessage(client, paymentRequirements, config) {
233
+ const rpc = getRpcClient(paymentRequirements.network, config?.svmConfig?.rpcUrl);
234
+ const transferInstructions = await createAtaAndTransferInstructions(
235
+ client,
236
+ paymentRequirements,
237
+ config
238
+ );
239
+ const feePayer = paymentRequirements.extra?.feePayer;
240
+ const txToSimulate = pipe(
241
+ createTransactionMessage({ version: 0 }),
242
+ (tx2) => setTransactionMessageComputeUnitPrice(1, tx2),
243
+ // 1 microlamport priority fee
244
+ (tx2) => setTransactionMessageFeePayer(feePayer, tx2),
245
+ (tx2) => appendTransactionMessageInstructions(transferInstructions, tx2)
246
+ );
247
+ const estimateComputeUnitLimit = estimateComputeUnitLimitFactory({ rpc });
248
+ const estimatedUnits = await estimateComputeUnitLimit(txToSimulate);
249
+ const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
250
+ const tx = pipe(
251
+ txToSimulate,
252
+ (tx2) => prependTransactionMessageInstruction(
253
+ getSetComputeUnitLimitInstruction({ units: estimatedUnits }),
254
+ tx2
255
+ ),
256
+ (tx2) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx2)
257
+ );
258
+ return tx;
259
+ }
260
+ async function createAtaAndTransferInstructions(client, paymentRequirements, config) {
261
+ const { asset } = paymentRequirements;
262
+ const rpc = getRpcClient(paymentRequirements.network, config?.svmConfig?.rpcUrl);
263
+ const tokenMint = await fetchMint(rpc, asset);
264
+ const tokenProgramAddress = tokenMint.programAddress;
265
+ if (tokenProgramAddress.toString() !== TOKEN_PROGRAM_ADDRESS.toString() && tokenProgramAddress.toString() !== TOKEN_2022_PROGRAM_ADDRESS.toString()) {
266
+ throw new Error("Asset was not created by a known token program");
267
+ }
268
+ const instructions = [];
269
+ const createAtaIx = await createAtaInstructionOrUndefined(
270
+ paymentRequirements,
271
+ tokenProgramAddress,
272
+ config
273
+ );
274
+ if (createAtaIx) {
275
+ instructions.push(createAtaIx);
276
+ }
277
+ const transferIx = await createTransferInstruction(
278
+ client,
279
+ paymentRequirements,
280
+ tokenMint.data.decimals,
281
+ tokenProgramAddress
282
+ );
283
+ instructions.push(transferIx);
284
+ return instructions;
285
+ }
286
+ async function createAtaInstructionOrUndefined(paymentRequirements, tokenProgramAddress, config) {
287
+ const { asset, payTo, extra } = paymentRequirements;
288
+ const feePayer = extra?.feePayer;
289
+ if (!feePayer) {
290
+ throw new Error(
291
+ "feePayer is required in paymentRequirements.extra in order to set the facilitator as the fee payer for the create associated token account instruction"
292
+ );
293
+ }
294
+ const [destinationATAAddress] = await findAssociatedTokenPda({
295
+ mint: asset,
296
+ owner: payTo,
297
+ tokenProgram: tokenProgramAddress
298
+ });
299
+ const rpc = getRpcClient(paymentRequirements.network, config?.svmConfig?.rpcUrl);
300
+ const maybeAccount = await fetchEncodedAccount(rpc, destinationATAAddress);
301
+ if (!maybeAccount.exists) {
302
+ return getCreateAssociatedTokenInstruction({
303
+ payer: paymentRequirements.extra?.feePayer,
304
+ ata: destinationATAAddress,
305
+ owner: payTo,
306
+ mint: asset,
307
+ tokenProgram: tokenProgramAddress
308
+ });
309
+ }
310
+ return void 0;
311
+ }
312
+ async function createTransferInstruction(client, paymentRequirements, decimals, tokenProgramAddress) {
313
+ const { asset, maxAmountRequired: amount, payTo } = paymentRequirements;
314
+ const [sourceATA] = await findAssociatedTokenPda({
315
+ mint: asset,
316
+ owner: client.address,
317
+ tokenProgram: tokenProgramAddress
318
+ });
319
+ const [destinationATA] = await findAssociatedTokenPda({
320
+ mint: asset,
321
+ owner: payTo,
322
+ tokenProgram: tokenProgramAddress
323
+ });
324
+ return getTransferCheckedInstruction(
325
+ {
326
+ source: sourceATA,
327
+ mint: asset,
328
+ destination: destinationATA,
329
+ authority: client,
330
+ amount: BigInt(amount),
331
+ decimals
332
+ },
333
+ { programAddress: tokenProgramAddress }
334
+ );
335
+ }
336
+
337
+ export {
338
+ signAuthorization,
339
+ createNonce,
340
+ encodePayment,
341
+ decodePayment,
342
+ preparePaymentHeader,
343
+ signPaymentHeader,
344
+ createPayment,
345
+ createPaymentHeader,
346
+ createPaymentHeader2,
347
+ createAndSignPayment
348
+ };
349
+ //# sourceMappingURL=chunk-RX2JKK4O.mjs.map