@eth-optimism/actions-sdk 0.2.0 → 0.4.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/dist/__mocks__/MockAssets.d.ts +17 -2
- package/dist/__mocks__/MockAssets.d.ts.map +1 -1
- package/dist/__mocks__/MockAssets.js +49 -4
- package/dist/__mocks__/MockAssets.js.map +1 -1
- package/dist/__tests__/actions.test.js +1 -5
- package/dist/__tests__/actions.test.js.map +1 -1
- package/dist/actions.d.ts +23 -9
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +68 -36
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +217 -2
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +744 -6
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/contracts.d.ts +4 -0
- package/dist/constants/contracts.d.ts.map +1 -0
- package/dist/constants/contracts.js +3 -0
- package/dist/constants/contracts.js.map +1 -0
- package/dist/constants/providers.d.ts +6 -0
- package/dist/constants/providers.d.ts.map +1 -0
- package/dist/constants/providers.js +6 -0
- package/dist/constants/providers.js.map +1 -0
- package/dist/constants/supportedChains.d.ts +2 -2
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +12 -2
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
- package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
- package/dist/lend/__mocks__/MockLendProvider.js +7 -2
- package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +12 -14
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +16 -31
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +2 -4
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
- package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
- package/dist/lend/providers/aave/addresses.d.ts +13 -39
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
- package/dist/lend/providers/aave/addresses.js +65 -60
- package/dist/lend/providers/aave/addresses.js.map +1 -1
- package/dist/lend/providers/aave/sdk.d.ts +2 -2
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
- package/dist/lend/providers/aave/sdk.js +6 -28
- package/dist/lend/providers/aave/sdk.js.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
- package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -41
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/api.d.ts +3 -3
- package/dist/lend/providers/morpho/api.d.ts.map +1 -1
- package/dist/lend/providers/morpho/api.js +2 -2
- package/dist/lend/providers/morpho/api.js.map +1 -1
- package/dist/lend/providers/morpho/contracts.d.ts +11 -10
- package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
- package/dist/lend/providers/morpho/contracts.js +43 -10
- package/dist/lend/providers/morpho/contracts.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts +7 -2
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +67 -54
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/nodeActionsFactory.d.ts +1 -1
- package/dist/reactActionsFactory.d.ts +1 -1
- package/dist/services/ChainManager.d.ts +8 -8
- package/dist/services/ChainManager.d.ts.map +1 -1
- package/dist/services/ChainManager.js.map +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
- package/dist/services/__mocks__/MockChainManager.js.map +1 -1
- package/dist/services/tokenBalance.d.ts +1 -1
- package/dist/services/tokenBalance.d.ts.map +1 -1
- package/dist/services/tokenBalance.js +31 -30
- package/dist/services/tokenBalance.js.map +1 -1
- package/dist/services/tokenBalance.spec.js +20 -24
- package/dist/services/tokenBalance.spec.js.map +1 -1
- package/dist/swap/__mocks__/MockSwapProvider.d.ts +50 -0
- package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
- package/dist/swap/__mocks__/MockSwapProvider.js +161 -0
- package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
- package/dist/swap/core/SwapProvider.d.ts +145 -0
- package/dist/swap/core/SwapProvider.d.ts.map +1 -0
- package/dist/swap/core/SwapProvider.js +359 -0
- package/dist/swap/core/SwapProvider.js.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
- package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js +435 -0
- package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
- package/dist/swap/core/markets.d.ts +47 -0
- package/dist/swap/core/markets.d.ts.map +1 -0
- package/dist/swap/core/markets.js +65 -0
- package/dist/swap/core/markets.js.map +1 -0
- package/dist/swap/index.d.ts +9 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +9 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
- package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts +73 -0
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js +181 -0
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +34 -0
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js +84 -0
- package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +245 -0
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +209 -0
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +35 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js +148 -0
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +258 -0
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
- package/dist/swap/providers/uniswap/abis.d.ts +227 -0
- package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/abis.js +138 -0
- package/dist/swap/providers/uniswap/abis.js.map +1 -0
- package/dist/swap/providers/uniswap/addresses.d.ts +26 -0
- package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/addresses.js +81 -0
- package/dist/swap/providers/uniswap/addresses.js.map +1 -0
- package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
- package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/encoding.js +233 -0
- package/dist/swap/providers/uniswap/encoding.js.map +1 -0
- package/dist/swap/providers/uniswap/markets.d.ts +19 -0
- package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/markets.js +48 -0
- package/dist/swap/providers/uniswap/markets.js.map +1 -0
- package/dist/swap/providers/uniswap/types.d.ts +21 -0
- package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
- package/dist/swap/providers/uniswap/types.js +2 -0
- package/dist/swap/providers/uniswap/types.js.map +1 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
- package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
- package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
- package/dist/swap/providers/velodrome/abis.d.ts +396 -0
- package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/abis.js +257 -0
- package/dist/swap/providers/velodrome/abis.js.map +1 -0
- package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
- package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/addresses.js +57 -0
- package/dist/swap/providers/velodrome/addresses.js.map +1 -0
- package/dist/swap/providers/velodrome/config.d.ts +22 -0
- package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/config.js +29 -0
- package/dist/swap/providers/velodrome/config.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
- package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
- package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
- package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/index.js +5 -0
- package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
- package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
- package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
- package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
- package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
- package/dist/swap/providers/velodrome/markets.d.ts +21 -0
- package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/markets.js +69 -0
- package/dist/swap/providers/velodrome/markets.js.map +1 -0
- package/dist/swap/providers/velodrome/types.d.ts +31 -0
- package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
- package/dist/swap/providers/velodrome/types.js +2 -0
- package/dist/swap/providers/velodrome/types.js.map +1 -0
- package/dist/types/actions.d.ts +60 -11
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/asset.d.ts +7 -9
- package/dist/types/asset.d.ts.map +1 -1
- package/dist/types/chain.d.ts +2 -2
- package/dist/types/chain.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/lend/base.d.ts +9 -19
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/types/lend/base.js.map +1 -1
- package/dist/types/lend/contracts.d.ts +2 -1
- package/dist/types/lend/contracts.d.ts.map +1 -1
- package/dist/types/providers.d.ts +21 -0
- package/dist/types/providers.d.ts.map +1 -0
- package/dist/types/providers.js +2 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/types/swap/base.d.ts +338 -0
- package/dist/types/swap/base.d.ts.map +1 -0
- package/dist/types/swap/base.js +4 -0
- package/dist/types/swap/base.js.map +1 -0
- package/dist/types/swap/index.d.ts +2 -0
- package/dist/types/swap/index.d.ts.map +1 -0
- package/dist/types/swap/index.js +2 -0
- package/dist/types/swap/index.js.map +1 -0
- package/dist/types/transaction.d.ts +14 -0
- package/dist/types/transaction.d.ts.map +1 -0
- package/dist/types/transaction.js +2 -0
- package/dist/types/transaction.js.map +1 -0
- package/dist/utils/approve.d.ts +82 -0
- package/dist/utils/approve.d.ts.map +1 -0
- package/dist/utils/approve.js +134 -0
- package/dist/utils/approve.js.map +1 -0
- package/dist/utils/approve.test.d.ts +2 -0
- package/dist/utils/approve.test.d.ts.map +1 -0
- package/dist/utils/approve.test.js +203 -0
- package/dist/utils/approve.test.js.map +1 -0
- package/dist/utils/assets.d.ts +10 -5
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +14 -11
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/assets.test.js +13 -1
- package/dist/utils/assets.test.js.map +1 -1
- package/dist/utils/validateAddresses.d.ts +32 -0
- package/dist/utils/validateAddresses.d.ts.map +1 -0
- package/dist/utils/validateAddresses.js +103 -0
- package/dist/utils/validateAddresses.js.map +1 -0
- package/dist/utils/validateAddresses.test.d.ts +2 -0
- package/dist/utils/validateAddresses.test.d.ts.map +1 -0
- package/dist/utils/validateAddresses.test.js +314 -0
- package/dist/utils/validateAddresses.test.js.map +1 -0
- package/dist/utils/validation.d.ts +12 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +44 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -10
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -7
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +5 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +2 -2
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +12 -12
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -4
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
- package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +5 -7
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +4 -6
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +8 -9
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -6
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +4 -6
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -6
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -6
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +7 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +1 -0
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +5 -6
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +1 -0
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -8
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -4
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -6
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -6
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -6
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/package.json +4 -3
- package/src/__mocks__/MockAssets.ts +54 -4
- package/src/__tests__/actions.test.ts +1 -5
- package/src/actions.ts +106 -71
- package/src/constants/assets.ts +792 -5
- package/src/constants/contracts.ts +5 -0
- package/src/constants/providers.ts +5 -0
- package/src/constants/supportedChains.ts +22 -2
- package/src/index.ts +76 -6
- package/src/lend/__mocks__/MockLendProvider.ts +8 -3
- package/src/lend/core/LendProvider.ts +28 -41
- package/src/lend/core/__tests__/LendProvider.test.ts +2 -5
- package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
- package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
- package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
- package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
- package/src/lend/providers/aave/addresses.ts +82 -64
- package/src/lend/providers/aave/sdk.ts +11 -36
- package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
- package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -42
- package/src/lend/providers/morpho/api.ts +7 -4
- package/src/lend/providers/morpho/contracts.ts +62 -13
- package/src/lend/providers/morpho/sdk.ts +85 -54
- package/src/services/ChainManager.ts +12 -21
- package/src/services/__mocks__/MockChainManager.ts +4 -7
- package/src/services/tokenBalance.spec.ts +20 -24
- package/src/services/tokenBalance.ts +39 -33
- package/src/swap/__mocks__/MockSwapProvider.ts +251 -0
- package/src/swap/core/SwapProvider.ts +577 -0
- package/src/swap/core/__tests__/SwapProvider.test.ts +620 -0
- package/src/swap/core/markets.ts +104 -0
- package/src/swap/index.ts +19 -0
- package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
- package/src/swap/namespaces/BaseSwapNamespace.ts +258 -0
- package/src/swap/namespaces/WalletSwapNamespace.ts +121 -0
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +365 -0
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +257 -0
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +217 -0
- package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
- package/src/swap/providers/uniswap/__tests__/sdk.test.ts +369 -0
- package/src/swap/providers/uniswap/abis.ts +144 -0
- package/src/swap/providers/uniswap/addresses.ts +110 -0
- package/src/swap/providers/uniswap/encoding.ts +406 -0
- package/src/swap/providers/uniswap/markets.ts +84 -0
- package/src/swap/providers/uniswap/types.ts +25 -0
- package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
- package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
- package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
- package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
- package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
- package/src/swap/providers/velodrome/abis.ts +264 -0
- package/src/swap/providers/velodrome/addresses.ts +107 -0
- package/src/swap/providers/velodrome/config.ts +46 -0
- package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
- package/src/swap/providers/velodrome/encoding/index.ts +7 -0
- package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
- package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
- package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
- package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
- package/src/swap/providers/velodrome/markets.ts +100 -0
- package/src/swap/providers/velodrome/types.ts +30 -0
- package/src/types/actions.ts +68 -12
- package/src/types/asset.ts +12 -9
- package/src/types/chain.ts +2 -2
- package/src/types/index.ts +2 -0
- package/src/types/lend/base.ts +10 -20
- package/src/types/lend/contracts.ts +5 -1
- package/src/types/providers.ts +22 -0
- package/src/types/swap/base.ts +372 -0
- package/src/types/swap/index.ts +1 -0
- package/src/types/transaction.ts +14 -0
- package/src/utils/approve.test.ts +258 -0
- package/src/utils/approve.ts +197 -0
- package/src/utils/assets.test.ts +16 -1
- package/src/utils/assets.ts +27 -10
- package/src/utils/validateAddresses.test.ts +439 -0
- package/src/utils/validateAddresses.ts +153 -0
- package/src/utils/validation.ts +76 -0
- package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +6 -10
- package/src/wallet/core/providers/hosted/types/index.ts +9 -7
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +10 -10
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +2 -0
- package/src/wallet/core/wallets/abstract/Wallet.ts +23 -14
- package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
- package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +11 -14
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +11 -7
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +16 -8
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +6 -7
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +8 -11
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +7 -11
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +11 -7
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +10 -7
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +1 -0
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +10 -9
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +38 -13
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +13 -11
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +11 -11
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +11 -11
- package/dist/supported/tokens.d.ts +0 -25
- package/dist/supported/tokens.d.ts.map +0 -1
- package/dist/supported/tokens.js +0 -37
- package/dist/supported/tokens.js.map +0 -1
- package/src/supported/tokens.ts +0 -52
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
import { formatUnits } from 'viem'
|
|
3
|
+
|
|
4
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
|
+
import { ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
|
|
6
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
7
|
+
import { UNIVERSAL_ROUTER_MSG_SENDER } from '@/swap/core/markets.js'
|
|
8
|
+
import type { SwapSettings } from '@/types/actions.js'
|
|
9
|
+
import type { Asset } from '@/types/asset.js'
|
|
10
|
+
import type {
|
|
11
|
+
GetSwapMarketParams,
|
|
12
|
+
GetSwapMarketsParams,
|
|
13
|
+
ResolvedSwapParams,
|
|
14
|
+
SwapExecuteParams,
|
|
15
|
+
SwapMarket,
|
|
16
|
+
SwapMarketConfig,
|
|
17
|
+
SwapProviderConfig,
|
|
18
|
+
SwapQuote,
|
|
19
|
+
SwapQuoteParams,
|
|
20
|
+
SwapTransaction,
|
|
21
|
+
SwapTransactionData,
|
|
22
|
+
} from '@/types/swap/index.js'
|
|
23
|
+
import type { TransactionData } from '@/types/transaction.js'
|
|
24
|
+
import {
|
|
25
|
+
buildPermit2ApprovalTx,
|
|
26
|
+
buildTokenApprovalTx,
|
|
27
|
+
checkPermit2Allowance,
|
|
28
|
+
checkTokenAllowance,
|
|
29
|
+
} from '@/utils/approve.js'
|
|
30
|
+
import {
|
|
31
|
+
getAssetAddress,
|
|
32
|
+
isNativeAsset,
|
|
33
|
+
parseAssetAmount,
|
|
34
|
+
} from '@/utils/assets.js'
|
|
35
|
+
import {
|
|
36
|
+
validateAmountPositiveIfExists,
|
|
37
|
+
validateAmountProvided,
|
|
38
|
+
validateAssetOnChain,
|
|
39
|
+
validateChainSupported,
|
|
40
|
+
validateNotBothAmounts,
|
|
41
|
+
validateNotSameAsset,
|
|
42
|
+
validateNotZeroAddress,
|
|
43
|
+
validateSlippage,
|
|
44
|
+
} from '@/utils/validation.js'
|
|
45
|
+
|
|
46
|
+
/** Hardcoded fallbacks when neither provider nor global config sets a value */
|
|
47
|
+
const DEFAULTS = {
|
|
48
|
+
slippage: 0.005,
|
|
49
|
+
maxSlippage: 0.5,
|
|
50
|
+
quoteExpirationSeconds: 60,
|
|
51
|
+
permit2ExpirationSeconds: 2_592_000, // 30 days
|
|
52
|
+
} as const
|
|
53
|
+
|
|
54
|
+
/** Basis points denominator for slippage calculations (1 bp = 0.01%) */
|
|
55
|
+
const BPS_DENOMINATOR = 10000n
|
|
56
|
+
|
|
57
|
+
/** Field used to distinguish a SwapQuote from raw SwapExecuteParams */
|
|
58
|
+
export const QUOTE_DISCRIMINATOR = 'quotedAt' as const
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Abstract base class for swap providers.
|
|
62
|
+
* Public methods handle validation and conversion,
|
|
63
|
+
* protected abstract methods implement provider-specific logic.
|
|
64
|
+
*
|
|
65
|
+
* Settings are resolved with provider → global → hardcoded default precedence.
|
|
66
|
+
*/
|
|
67
|
+
export abstract class SwapProvider<
|
|
68
|
+
TConfig extends SwapProviderConfig = SwapProviderConfig,
|
|
69
|
+
> {
|
|
70
|
+
protected readonly _config: TConfig
|
|
71
|
+
protected readonly _settings: SwapSettings
|
|
72
|
+
protected readonly chainManager: ChainManager
|
|
73
|
+
|
|
74
|
+
constructor(
|
|
75
|
+
config: TConfig,
|
|
76
|
+
chainManager: ChainManager,
|
|
77
|
+
settings?: SwapSettings,
|
|
78
|
+
) {
|
|
79
|
+
this._config = config
|
|
80
|
+
this._settings = settings ?? {}
|
|
81
|
+
this.chainManager = chainManager
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
get config(): TConfig {
|
|
85
|
+
return this._config
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Resolved default slippage: provider → global → 0.005 */
|
|
89
|
+
get defaultSlippage(): number {
|
|
90
|
+
return (
|
|
91
|
+
this._config.defaultSlippage ??
|
|
92
|
+
this._settings.defaultSlippage ??
|
|
93
|
+
DEFAULTS.slippage
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Resolved max slippage: provider → global → 0.5 */
|
|
98
|
+
get maxSlippage(): number {
|
|
99
|
+
return (
|
|
100
|
+
this._config.maxSlippage ??
|
|
101
|
+
this._settings.maxSlippage ??
|
|
102
|
+
DEFAULTS.maxSlippage
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Resolved quote expiration in seconds: provider → global → 60 */
|
|
107
|
+
get quoteExpirationSeconds(): number {
|
|
108
|
+
return (
|
|
109
|
+
this._config.quoteExpirationSeconds ??
|
|
110
|
+
this._settings.quoteExpirationSeconds ??
|
|
111
|
+
DEFAULTS.quoteExpirationSeconds
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Resolved Permit2 sub-approval expiration in seconds: provider → global → 30 days */
|
|
116
|
+
get permit2ExpirationSeconds(): number {
|
|
117
|
+
return (
|
|
118
|
+
(this._config as { permit2ExpirationSeconds?: number })
|
|
119
|
+
.permit2ExpirationSeconds ??
|
|
120
|
+
this._settings.permit2ExpirationSeconds ??
|
|
121
|
+
DEFAULTS.permit2ExpirationSeconds
|
|
122
|
+
)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Execute a token swap.
|
|
127
|
+
* Accepts either raw params (re-quotes internally) or a pre-built SwapQuote (skips re-quoting).
|
|
128
|
+
* @param params - Swap parameters or a pre-built SwapQuote from getQuote()
|
|
129
|
+
* @returns Transaction data ready for wallet execution
|
|
130
|
+
*/
|
|
131
|
+
async execute(
|
|
132
|
+
params: SwapExecuteParams | SwapQuote,
|
|
133
|
+
): Promise<SwapTransaction> {
|
|
134
|
+
this.validateSwapExecute(params)
|
|
135
|
+
|
|
136
|
+
if (QUOTE_DISCRIMINATOR in params) {
|
|
137
|
+
return this.executeFromQuote(params)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Raw params only
|
|
141
|
+
validateNotBothAmounts(params.amountIn, params.amountOut)
|
|
142
|
+
validateNotZeroAddress(params.walletAddress, 'walletAddress')
|
|
143
|
+
return this._execute(this.resolveParams(params))
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Get a full swap quote with pre-built execution data.
|
|
148
|
+
* The returned SwapQuote can be passed directly to execute() to skip re-quoting.
|
|
149
|
+
* @param params - Quote parameters (assets, amounts, chain, slippage)
|
|
150
|
+
* @returns SwapQuote with pricing, amounts, and pre-encoded calldata
|
|
151
|
+
*/
|
|
152
|
+
async getQuote(params: SwapQuoteParams): Promise<SwapQuote> {
|
|
153
|
+
validateChainSupported(params.chainId, this.supportedChainIds())
|
|
154
|
+
return this._getQuote(params)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Get a specific swap market by ID.
|
|
159
|
+
* Validates the market is not blocklisted before returning.
|
|
160
|
+
* @param params - Market identifier (poolId + chainId)
|
|
161
|
+
* @returns Market information including assets and fee tier
|
|
162
|
+
* @throws If market is blocklisted
|
|
163
|
+
*/
|
|
164
|
+
async getMarket(params: GetSwapMarketParams): Promise<SwapMarket> {
|
|
165
|
+
validateChainSupported(params.chainId, this.supportedChainIds())
|
|
166
|
+
const market = await this._getMarket(params)
|
|
167
|
+
this.validateMarketAllowed(
|
|
168
|
+
market.assets[0],
|
|
169
|
+
market.assets[1],
|
|
170
|
+
params.chainId,
|
|
171
|
+
)
|
|
172
|
+
return market
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Get available swap markets, optionally filtered.
|
|
177
|
+
* Excludes blocklisted markets from results.
|
|
178
|
+
* @param params - Optional filters (chainId, asset)
|
|
179
|
+
* @returns Array of non-blocked markets from this provider
|
|
180
|
+
*/
|
|
181
|
+
async getMarkets(params: GetSwapMarketsParams = {}): Promise<SwapMarket[]> {
|
|
182
|
+
if (params.chainId) {
|
|
183
|
+
validateChainSupported(params.chainId, this.supportedChainIds())
|
|
184
|
+
}
|
|
185
|
+
const markets = await this._getMarkets(params)
|
|
186
|
+
return this.filterBlockedMarkets(markets)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Effective supported chain IDs.
|
|
191
|
+
* @description Intersection of the protocol's supported chains,
|
|
192
|
+
* the Actions SDK's known chains, and the developer's ActionsConfig.chains.
|
|
193
|
+
*/
|
|
194
|
+
supportedChainIds(): SupportedChainId[] {
|
|
195
|
+
const configuredChains = this.chainManager.getSupportedChains()
|
|
196
|
+
return this.protocolSupportedChainIds().filter(
|
|
197
|
+
(id) =>
|
|
198
|
+
(ACTIONS_SUPPORTED_CHAIN_IDS as readonly number[]).includes(id) &&
|
|
199
|
+
configuredChains.includes(id),
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
isChainSupported(chainId: SupportedChainId): boolean {
|
|
204
|
+
return this.supportedChainIds().includes(chainId)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Check if this provider supports a given market (asset pair on chain).
|
|
209
|
+
* Returns true if the pair passes allowlist/blocklist checks.
|
|
210
|
+
*/
|
|
211
|
+
isMarketSupported(
|
|
212
|
+
assetIn: Asset,
|
|
213
|
+
assetOut: Asset,
|
|
214
|
+
chainId: SupportedChainId,
|
|
215
|
+
): boolean {
|
|
216
|
+
if (!this.isChainSupported(chainId)) return false
|
|
217
|
+
try {
|
|
218
|
+
this.validateMarketAllowed(assetIn, assetOut, chainId)
|
|
219
|
+
return true
|
|
220
|
+
} catch {
|
|
221
|
+
return false
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
226
|
+
// Protected helpers
|
|
227
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
228
|
+
|
|
229
|
+
protected validateMarketAllowed(
|
|
230
|
+
assetIn: Asset,
|
|
231
|
+
assetOut: Asset,
|
|
232
|
+
chainId: SupportedChainId,
|
|
233
|
+
): void {
|
|
234
|
+
const { marketBlocklist, marketAllowlist } = this._config
|
|
235
|
+
|
|
236
|
+
if (marketBlocklist?.length) {
|
|
237
|
+
const isBlocked = this.findMatchingConfig(
|
|
238
|
+
assetIn,
|
|
239
|
+
assetOut,
|
|
240
|
+
chainId,
|
|
241
|
+
marketBlocklist,
|
|
242
|
+
)
|
|
243
|
+
if (isBlocked) {
|
|
244
|
+
throw new Error(
|
|
245
|
+
`Pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol} is blocked on chain ${chainId}`,
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
if (marketAllowlist?.length) {
|
|
251
|
+
const isAllowed = this.findMatchingConfig(
|
|
252
|
+
assetIn,
|
|
253
|
+
assetOut,
|
|
254
|
+
chainId,
|
|
255
|
+
marketAllowlist,
|
|
256
|
+
)
|
|
257
|
+
if (!isAllowed) {
|
|
258
|
+
throw new Error(
|
|
259
|
+
`Pair ${assetIn.metadata.symbol}/${assetOut.metadata.symbol} is not in the allowlist for chain ${chainId}`,
|
|
260
|
+
)
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Resolve common quote parameters with provider defaults.
|
|
267
|
+
* @param params - Raw quote params from the user
|
|
268
|
+
* @returns Resolved slippage, deadline, recipient, amountInRaw, and current timestamp
|
|
269
|
+
*/
|
|
270
|
+
protected resolveQuoteDefaults(params: SwapQuoteParams) {
|
|
271
|
+
const slippage = params.slippage ?? this.defaultSlippage
|
|
272
|
+
const now = Math.floor(Date.now() / 1000)
|
|
273
|
+
const deadline = params.deadline ?? now + this.quoteExpirationSeconds
|
|
274
|
+
const recipient = params.recipient ?? UNIVERSAL_ROUTER_MSG_SENDER
|
|
275
|
+
const amountInRaw = parseAssetAmount(params.assetIn, params.amountIn ?? 1)
|
|
276
|
+
return { slippage, now, deadline, recipient, amountInRaw }
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Compute minimum output amount after slippage.
|
|
281
|
+
* @param amountOutRaw - Expected output as raw bigint
|
|
282
|
+
* @param slippage - Slippage tolerance as decimal (0.005 = 0.5%)
|
|
283
|
+
* @param assetOut - Output asset (for decimal conversion)
|
|
284
|
+
* @returns Raw and human-readable minimum output amounts
|
|
285
|
+
*/
|
|
286
|
+
protected computeSlippageBounds(
|
|
287
|
+
amountOutRaw: bigint,
|
|
288
|
+
slippage: number,
|
|
289
|
+
assetOut: Asset,
|
|
290
|
+
): { amountOutMinRaw: bigint; amountOutMin: number } {
|
|
291
|
+
const slippageBps = BigInt(Math.round(slippage * Number(BPS_DENOMINATOR)))
|
|
292
|
+
const amountOutMinRaw =
|
|
293
|
+
(amountOutRaw * (BPS_DENOMINATOR - slippageBps)) / BPS_DENOMINATOR
|
|
294
|
+
const amountOutMin = parseFloat(
|
|
295
|
+
formatUnits(amountOutMinRaw, assetOut.metadata.decimals),
|
|
296
|
+
)
|
|
297
|
+
return { amountOutMinRaw, amountOutMin }
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
protected resolveMarketConfig(
|
|
301
|
+
assetIn: Asset,
|
|
302
|
+
assetOut: Asset,
|
|
303
|
+
chainId: SupportedChainId,
|
|
304
|
+
): SwapMarketConfig | undefined {
|
|
305
|
+
const { marketAllowlist } = this._config
|
|
306
|
+
if (!marketAllowlist?.length) {
|
|
307
|
+
throw new Error(
|
|
308
|
+
'No markets configured. Provide a marketAllowlist in swap provider config.',
|
|
309
|
+
)
|
|
310
|
+
}
|
|
311
|
+
return this.findMatchingConfig(assetIn, assetOut, chainId, marketAllowlist)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Build Permit2 approval transactions for an ERC20 swap input.
|
|
316
|
+
* Skipped for native assets. Checks both ERC20→Permit2 and Permit2→spender allowances in parallel.
|
|
317
|
+
* Uses the resolved `permit2ExpirationSeconds` from provider → global → default.
|
|
318
|
+
* @param params - Resolved swap params (wallet address, asset info, chain)
|
|
319
|
+
* @param requiredAmount - Amount as raw bigint that must be approved
|
|
320
|
+
* @param permit2Address - Permit2 contract address
|
|
321
|
+
* @param permit2Spender - The router/contract that Permit2 should approve (e.g. Universal Router)
|
|
322
|
+
*/
|
|
323
|
+
protected async buildPermit2Approvals(
|
|
324
|
+
params: ResolvedSwapParams,
|
|
325
|
+
requiredAmount: bigint,
|
|
326
|
+
permit2Address: Address,
|
|
327
|
+
permit2Spender: Address,
|
|
328
|
+
): Promise<{
|
|
329
|
+
tokenApproval: TransactionData | undefined
|
|
330
|
+
permit2Approval: TransactionData | undefined
|
|
331
|
+
}> {
|
|
332
|
+
if (isNativeAsset(params.assetIn)) {
|
|
333
|
+
return { tokenApproval: undefined, permit2Approval: undefined }
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const publicClient = this.chainManager.getPublicClient(params.chainId)
|
|
337
|
+
const token = getAssetAddress(params.assetIn, params.chainId)
|
|
338
|
+
|
|
339
|
+
const [tokenAllowance, permit2Allowance] = await Promise.all([
|
|
340
|
+
checkTokenAllowance({
|
|
341
|
+
publicClient,
|
|
342
|
+
token,
|
|
343
|
+
owner: params.walletAddress,
|
|
344
|
+
spender: permit2Address,
|
|
345
|
+
}),
|
|
346
|
+
checkPermit2Allowance({
|
|
347
|
+
publicClient,
|
|
348
|
+
permit2Address,
|
|
349
|
+
owner: params.walletAddress,
|
|
350
|
+
token,
|
|
351
|
+
spender: permit2Spender,
|
|
352
|
+
}),
|
|
353
|
+
])
|
|
354
|
+
|
|
355
|
+
const tokenApproval =
|
|
356
|
+
tokenAllowance < requiredAmount
|
|
357
|
+
? buildTokenApprovalTx(token, permit2Address)
|
|
358
|
+
: undefined
|
|
359
|
+
|
|
360
|
+
// Permit2 expiration is in Unix seconds (matching EVM block.timestamp)
|
|
361
|
+
const permit2Expired =
|
|
362
|
+
permit2Allowance.expiration < Math.floor(Date.now() / 1000)
|
|
363
|
+
const permit2Approval =
|
|
364
|
+
permit2Allowance.amount < requiredAmount || permit2Expired
|
|
365
|
+
? buildPermit2ApprovalTx({
|
|
366
|
+
permit2Address,
|
|
367
|
+
token,
|
|
368
|
+
spender: permit2Spender,
|
|
369
|
+
amount: requiredAmount,
|
|
370
|
+
expirySeconds: this.permit2ExpirationSeconds,
|
|
371
|
+
})
|
|
372
|
+
: undefined
|
|
373
|
+
|
|
374
|
+
return { tokenApproval, permit2Approval }
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Build a SwapTransaction from a quote by fetching approvals and wrapping the swap calldata.
|
|
379
|
+
* Used by both the quote-execute path and provider _execute implementations.
|
|
380
|
+
* @param quote - SwapQuote with recipient set for allowance checks
|
|
381
|
+
*/
|
|
382
|
+
protected async buildSwapTransactions(
|
|
383
|
+
quote: SwapQuote,
|
|
384
|
+
): Promise<SwapTransaction> {
|
|
385
|
+
const approvals = await this._buildApprovals(quote)
|
|
386
|
+
|
|
387
|
+
const swapTx: TransactionData = {
|
|
388
|
+
to: quote.execution.routerAddress,
|
|
389
|
+
data: quote.execution.swapCalldata,
|
|
390
|
+
value: quote.execution.value,
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return {
|
|
394
|
+
amountIn: quote.amountIn,
|
|
395
|
+
amountOut: quote.amountOut,
|
|
396
|
+
amountInRaw: quote.amountInRaw,
|
|
397
|
+
amountOutRaw: quote.amountOutRaw,
|
|
398
|
+
assetIn: quote.assetIn,
|
|
399
|
+
assetOut: quote.assetOut,
|
|
400
|
+
price: quote.price,
|
|
401
|
+
priceImpact: quote.priceImpact,
|
|
402
|
+
transactionData: { ...approvals, swap: swapTx },
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
407
|
+
// Private helpers
|
|
408
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
409
|
+
|
|
410
|
+
private async executeFromQuote(quote: SwapQuote): Promise<SwapTransaction> {
|
|
411
|
+
this.validateQuoteExpiration(quote)
|
|
412
|
+
validateNotZeroAddress(quote.execution.routerAddress, 'routerAddress')
|
|
413
|
+
|
|
414
|
+
if (!quote.recipient) {
|
|
415
|
+
throw new Error(
|
|
416
|
+
'SwapQuote.recipient is required for execution. Pass the quote through WalletSwapNamespace.execute() which injects the wallet address.',
|
|
417
|
+
)
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
// If the recipient changed since the quote was built (e.g. quote from
|
|
421
|
+
// ActionsSwapNamespace executed through WalletSwapNamespace), re-encode
|
|
422
|
+
// calldata with the correct recipient to prevent tokens going to the wrong address.
|
|
423
|
+
if (quote.recipient !== quote.quotedRecipient) {
|
|
424
|
+
const freshQuote = await this._getQuote({
|
|
425
|
+
assetIn: quote.assetIn,
|
|
426
|
+
assetOut: quote.assetOut,
|
|
427
|
+
amountIn: quote.amountIn,
|
|
428
|
+
chainId: quote.chainId,
|
|
429
|
+
slippage: quote.slippage,
|
|
430
|
+
deadline: quote.deadline,
|
|
431
|
+
recipient: quote.recipient,
|
|
432
|
+
})
|
|
433
|
+
return this.buildSwapTransactions({
|
|
434
|
+
...freshQuote,
|
|
435
|
+
recipient: quote.recipient,
|
|
436
|
+
})
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
return this.buildSwapTransactions(quote)
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
private validateSwapExecute(params: SwapExecuteParams | SwapQuote): void {
|
|
443
|
+
validateNotSameAsset(params.assetIn, params.assetOut)
|
|
444
|
+
validateChainSupported(params.chainId, this.supportedChainIds())
|
|
445
|
+
this.validateMarketAllowed(params.assetIn, params.assetOut, params.chainId)
|
|
446
|
+
validateAssetOnChain(params.assetIn, params.chainId)
|
|
447
|
+
validateAssetOnChain(params.assetOut, params.chainId)
|
|
448
|
+
validateAmountProvided(params.amountIn, params.amountOut)
|
|
449
|
+
validateAmountPositiveIfExists(params.amountIn)
|
|
450
|
+
validateAmountPositiveIfExists(params.amountOut)
|
|
451
|
+
validateSlippage(params.slippage ?? this.defaultSlippage, this.maxSlippage)
|
|
452
|
+
this.validateRecipient(params)
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
private validateRecipient(params: SwapExecuteParams | SwapQuote): void {
|
|
456
|
+
if ('recipient' in params && params.recipient) {
|
|
457
|
+
validateNotZeroAddress(params.recipient, 'recipient')
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
private validateQuoteExpiration(quote: SwapQuote): void {
|
|
462
|
+
const now = Math.floor(Date.now() / 1000)
|
|
463
|
+
if (now >= quote.expiresAt) {
|
|
464
|
+
throw new Error(
|
|
465
|
+
`Quote expired at ${quote.expiresAt}, current time is ${now}`,
|
|
466
|
+
)
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
private resolveParams(params: SwapExecuteParams): ResolvedSwapParams {
|
|
471
|
+
return {
|
|
472
|
+
amountInRaw: parseAssetAmount(params.assetIn, params.amountIn),
|
|
473
|
+
amountOutRaw: parseAssetAmount(params.assetOut, params.amountOut),
|
|
474
|
+
assetIn: params.assetIn,
|
|
475
|
+
assetOut: params.assetOut,
|
|
476
|
+
slippage: params.slippage ?? this.defaultSlippage,
|
|
477
|
+
deadline:
|
|
478
|
+
params.deadline ??
|
|
479
|
+
Math.floor(Date.now() / 1000) + this.quoteExpirationSeconds,
|
|
480
|
+
// Send output tokens to specified recipient, or back to the initiating wallet
|
|
481
|
+
recipient: params.recipient ?? params.walletAddress,
|
|
482
|
+
walletAddress: params.walletAddress,
|
|
483
|
+
chainId: params.chainId,
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Filter out markets whose asset pairs appear in the blocklist.
|
|
489
|
+
*/
|
|
490
|
+
private filterBlockedMarkets(markets: SwapMarket[]): SwapMarket[] {
|
|
491
|
+
const { marketBlocklist } = this._config
|
|
492
|
+
if (!marketBlocklist?.length) return markets
|
|
493
|
+
|
|
494
|
+
return markets.filter((market) => {
|
|
495
|
+
const [assetA, assetB] = market.assets
|
|
496
|
+
const blocked = this.findMatchingConfig(
|
|
497
|
+
assetA,
|
|
498
|
+
assetB,
|
|
499
|
+
market.marketId.chainId,
|
|
500
|
+
marketBlocklist,
|
|
501
|
+
)
|
|
502
|
+
return !blocked
|
|
503
|
+
})
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
private findMatchingConfig(
|
|
507
|
+
assetIn: Asset,
|
|
508
|
+
assetOut: Asset,
|
|
509
|
+
chainId: SupportedChainId,
|
|
510
|
+
list: SwapMarketConfig[],
|
|
511
|
+
): SwapMarketConfig | undefined {
|
|
512
|
+
const addressIn = assetIn.address[chainId]
|
|
513
|
+
const addressOut = assetOut.address[chainId]
|
|
514
|
+
if (!addressIn || !addressOut) return undefined
|
|
515
|
+
|
|
516
|
+
return list.find((config) => {
|
|
517
|
+
if (config.chainId !== undefined && config.chainId !== chainId)
|
|
518
|
+
return false
|
|
519
|
+
return this.containsPairByAddress(
|
|
520
|
+
addressIn,
|
|
521
|
+
addressOut,
|
|
522
|
+
chainId,
|
|
523
|
+
config.assets,
|
|
524
|
+
)
|
|
525
|
+
})
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
private containsPairByAddress(
|
|
529
|
+
addressIn: string,
|
|
530
|
+
addressOut: string,
|
|
531
|
+
chainId: SupportedChainId,
|
|
532
|
+
assets: Asset[],
|
|
533
|
+
): boolean {
|
|
534
|
+
const addresses = assets
|
|
535
|
+
.map((a) => a.address[chainId]?.toLowerCase())
|
|
536
|
+
.filter(Boolean)
|
|
537
|
+
return (
|
|
538
|
+
addresses.includes(addressIn.toLowerCase()) &&
|
|
539
|
+
addresses.includes(addressOut.toLowerCase())
|
|
540
|
+
)
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
544
|
+
// Abstract methods (implement in provider)
|
|
545
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Chain IDs supported by the underlying protocol.
|
|
549
|
+
* Each provider declares the chains its protocol is deployed on,
|
|
550
|
+
* without any SDK-level or developer-config filtering.
|
|
551
|
+
*/
|
|
552
|
+
abstract protocolSupportedChainIds(): SupportedChainId[]
|
|
553
|
+
|
|
554
|
+
protected abstract _execute(
|
|
555
|
+
params: ResolvedSwapParams,
|
|
556
|
+
): Promise<SwapTransaction>
|
|
557
|
+
|
|
558
|
+
protected abstract _getQuote(params: SwapQuoteParams): Promise<SwapQuote>
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Build provider-specific approval transactions for a swap.
|
|
562
|
+
* Called by the base class during executeFromQuote with a validated recipient.
|
|
563
|
+
* @param quote - SwapQuote with recipient set to the real wallet address
|
|
564
|
+
* @returns Approval transactions needed before the swap (tokenApproval, permit2Approval)
|
|
565
|
+
*/
|
|
566
|
+
protected abstract _buildApprovals(
|
|
567
|
+
quote: SwapQuote,
|
|
568
|
+
): Promise<Omit<SwapTransactionData, 'swap'>>
|
|
569
|
+
|
|
570
|
+
protected abstract _getMarket(
|
|
571
|
+
params: GetSwapMarketParams,
|
|
572
|
+
): Promise<SwapMarket>
|
|
573
|
+
|
|
574
|
+
protected abstract _getMarkets(
|
|
575
|
+
params: GetSwapMarketsParams,
|
|
576
|
+
): Promise<SwapMarket[]>
|
|
577
|
+
}
|