@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.
- package/README.md +60 -0
- package/dist/cjs/client/index.d.ts +64 -0
- package/dist/cjs/client/index.js +832 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/config-CFBSAuxW.d.ts +10 -0
- package/dist/cjs/config-Dfuvno71.d.ts +19 -0
- package/dist/cjs/facilitator/index.d.ts +42 -0
- package/dist/cjs/facilitator/index.js +2574 -0
- package/dist/cjs/facilitator/index.js.map +1 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.js +2974 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/middleware-6_1ApcJn.d.ts +93 -0
- package/dist/cjs/middleware-B_ewwsQp.d.ts +93 -0
- package/dist/cjs/middleware-Brgsx32F.d.ts +93 -0
- package/dist/cjs/middleware-BwfW7mAs.d.ts +93 -0
- package/dist/cjs/middleware-CQb61c1k.d.ts +93 -0
- package/dist/cjs/middleware-DB9lqy9f.d.ts +93 -0
- package/dist/cjs/middleware-DcHctwQV.d.ts +93 -0
- package/dist/cjs/middleware-De0jD3Bp.d.ts +93 -0
- package/dist/cjs/middleware-HoFOmpgv.d.ts +93 -0
- package/dist/cjs/middleware-Y8AiAfYw.d.ts +93 -0
- package/dist/cjs/middleware-pnres9YM.d.ts +93 -0
- package/dist/cjs/network-FrFmmiyj.d.ts +11 -0
- package/dist/cjs/network-RtNddYQk.d.ts +11 -0
- package/dist/cjs/paywall/index.d.ts +30 -0
- package/dist/cjs/paywall/index.js +131 -0
- package/dist/cjs/paywall/index.js.map +1 -0
- package/dist/cjs/rpc-BMvnNNHd.d.ts +35 -0
- package/dist/cjs/rpc-Ca8eHCWz.d.ts +35 -0
- package/dist/cjs/schemes/index.d.ts +533 -0
- package/dist/cjs/schemes/index.js +3144 -0
- package/dist/cjs/schemes/index.js.map +1 -0
- package/dist/cjs/shared/evm/index.d.ts +71 -0
- package/dist/cjs/shared/evm/index.js +947 -0
- package/dist/cjs/shared/evm/index.js.map +1 -0
- package/dist/cjs/shared/index.d.ts +182 -0
- package/dist/cjs/shared/index.js +674 -0
- package/dist/cjs/shared/index.js.map +1 -0
- package/dist/cjs/types/index.d.ts +1515 -0
- package/dist/cjs/types/index.js +1645 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/verify/index.d.ts +7 -0
- package/dist/cjs/verify/index.js +438 -0
- package/dist/cjs/verify/index.js.map +1 -0
- package/dist/cjs/wallet-BRWfOM5D.d.ts +153 -0
- package/dist/cjs/wallet-BTqCm9Zp.d.ts +27 -0
- package/dist/cjs/wallet-BYRAGtOB.d.ts +153 -0
- package/dist/cjs/wallet-BmEtlgEf.d.ts +48 -0
- package/dist/cjs/wallet-CNOAmyZ6.d.ts +48 -0
- package/dist/cjs/wallet-CQ0Fe_M5.d.ts +88 -0
- package/dist/cjs/wallet-D1SoxFTw.d.ts +48 -0
- package/dist/cjs/wallet-SJ-hbjm9.d.ts +153 -0
- package/dist/cjs/wallet-SJKJpUgQ.d.ts +167 -0
- package/dist/cjs/wallet-ecnda4Aj.d.ts +48 -0
- package/dist/cjs/wallet-gP8Qoi-c.d.ts +74 -0
- package/dist/cjs/x402Specs-B7InXo2L.d.ts +1065 -0
- package/dist/cjs/x402Specs-BLH3j34O.d.ts +1696 -0
- package/dist/cjs/x402Specs-C7LipAZg.d.ts +1715 -0
- package/dist/cjs/x402Specs-CYq5tSY1.d.ts +1745 -0
- package/dist/cjs/x402Specs-CeajqonG.d.ts +1696 -0
- package/dist/cjs/x402Specs-qMujgEV5.d.ts +1715 -0
- package/dist/cjs/x402Specs-qUBCpcuz.d.ts +1715 -0
- package/dist/esm/chunk-34YNR4LY.mjs +106 -0
- package/dist/esm/chunk-34YNR4LY.mjs.map +1 -0
- package/dist/esm/chunk-57UEJN5U.mjs +1416 -0
- package/dist/esm/chunk-57UEJN5U.mjs.map +1 -0
- package/dist/esm/chunk-5LTKIVOA.mjs +858 -0
- package/dist/esm/chunk-5LTKIVOA.mjs.map +1 -0
- package/dist/esm/chunk-AQQR4PXH.mjs +80 -0
- package/dist/esm/chunk-AQQR4PXH.mjs.map +1 -0
- package/dist/esm/chunk-LGXWNXCO.mjs +76 -0
- package/dist/esm/chunk-LGXWNXCO.mjs.map +1 -0
- package/dist/esm/chunk-RX2JKK4O.mjs +349 -0
- package/dist/esm/chunk-RX2JKK4O.mjs.map +1 -0
- package/dist/esm/chunk-UCBE7FDY.mjs +1041 -0
- package/dist/esm/chunk-UCBE7FDY.mjs.map +1 -0
- package/dist/esm/client/index.mjs +17 -0
- package/dist/esm/client/index.mjs.map +1 -0
- package/dist/esm/facilitator/index.mjs +14 -0
- package/dist/esm/facilitator/index.mjs.map +1 -0
- package/dist/esm/index.mjs +28 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/paywall/index.mjs +46 -0
- package/dist/esm/paywall/index.mjs.map +1 -0
- package/dist/esm/schemes/index.mjs +16 -0
- package/dist/esm/schemes/index.mjs.map +1 -0
- package/dist/esm/shared/evm/index.mjs +20 -0
- package/dist/esm/shared/evm/index.mjs.map +1 -0
- package/dist/esm/shared/index.mjs +31 -0
- package/dist/esm/shared/index.mjs.map +1 -0
- package/dist/esm/types/index.mjs +87 -0
- package/dist/esm/types/index.mjs.map +1 -0
- package/dist/esm/verify/index.mjs +105 -0
- package/dist/esm/verify/index.mjs.map +1 -0
- 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
|