@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,365 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
|
|
3
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
4
|
+
import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
|
|
5
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
6
|
+
import {
|
|
7
|
+
createMockSwapProvider,
|
|
8
|
+
MockSwapProvider,
|
|
9
|
+
} from '@/swap/__mocks__/MockSwapProvider.js'
|
|
10
|
+
import { ActionsSwapNamespace } from '@/swap/namespaces/ActionsSwapNamespace.js'
|
|
11
|
+
|
|
12
|
+
describe('BaseSwapNamespace', () => {
|
|
13
|
+
const USDC = {
|
|
14
|
+
type: 'erc20' as const,
|
|
15
|
+
address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' as const },
|
|
16
|
+
metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
|
|
17
|
+
}
|
|
18
|
+
const ETH = {
|
|
19
|
+
type: 'native' as const,
|
|
20
|
+
address: { 84532: '0x0000000000000000000000000000000000000000' as const },
|
|
21
|
+
metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
describe('getQuote', () => {
|
|
25
|
+
it('delegates to provider getQuote', async () => {
|
|
26
|
+
const provider = createMockSwapProvider()
|
|
27
|
+
const namespace = new ActionsSwapNamespace({ uniswap: provider })
|
|
28
|
+
|
|
29
|
+
const result = await namespace.getQuote({
|
|
30
|
+
assetIn: USDC,
|
|
31
|
+
assetOut: ETH,
|
|
32
|
+
amountIn: 100,
|
|
33
|
+
chainId: 84532 as SupportedChainId,
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
expect(provider.mockGetQuote).toHaveBeenCalledTimes(1)
|
|
37
|
+
expect(result.price).toBe(1.5)
|
|
38
|
+
expect(result.execution).toBeDefined()
|
|
39
|
+
expect(result.execution.swapCalldata).toMatch(/^0x/)
|
|
40
|
+
expect(result.provider).toBe('uniswap')
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('throws if no provider configured', async () => {
|
|
44
|
+
const namespace = new ActionsSwapNamespace({})
|
|
45
|
+
|
|
46
|
+
await expect(
|
|
47
|
+
namespace.getQuote({
|
|
48
|
+
assetIn: USDC,
|
|
49
|
+
assetOut: ETH,
|
|
50
|
+
amountIn: 100,
|
|
51
|
+
chainId: 84532 as SupportedChainId,
|
|
52
|
+
}),
|
|
53
|
+
).rejects.toThrow('No swap provider configured')
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
describe('getQuote with price routing', () => {
|
|
58
|
+
it('returns the best price across providers when routing is price', async () => {
|
|
59
|
+
const cheapProvider = new MockSwapProvider(
|
|
60
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
61
|
+
{ defaultPrice: 1.2, provider: 'uniswap' },
|
|
62
|
+
)
|
|
63
|
+
const expensiveProvider = new MockSwapProvider(
|
|
64
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
65
|
+
{ defaultPrice: 1.8, provider: 'velodrome' },
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
const namespace = new ActionsSwapNamespace(
|
|
69
|
+
{ uniswap: cheapProvider, velodrome: expensiveProvider },
|
|
70
|
+
{ routing: 'price' },
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const result = await namespace.getQuote({
|
|
74
|
+
assetIn: USDC,
|
|
75
|
+
assetOut: ETH,
|
|
76
|
+
amountIn: 100,
|
|
77
|
+
chainId: 84532 as SupportedChainId,
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
// Should pick velodrome because 1.8 > 1.2 (higher amountOut)
|
|
81
|
+
expect(result.provider).toBe('velodrome')
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('skips providers that fail to quote', async () => {
|
|
85
|
+
const workingProvider = createMockSwapProvider(
|
|
86
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
87
|
+
{ provider: 'velodrome' },
|
|
88
|
+
)
|
|
89
|
+
const failingProvider = createMockSwapProvider(
|
|
90
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
91
|
+
{ provider: 'uniswap' },
|
|
92
|
+
)
|
|
93
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('RPC failure'))
|
|
94
|
+
|
|
95
|
+
const namespace = new ActionsSwapNamespace(
|
|
96
|
+
{ uniswap: failingProvider, velodrome: workingProvider },
|
|
97
|
+
{ routing: 'price' },
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
const result = await namespace.getQuote({
|
|
101
|
+
assetIn: USDC,
|
|
102
|
+
assetOut: ETH,
|
|
103
|
+
amountIn: 100,
|
|
104
|
+
chainId: 84532 as SupportedChainId,
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
expect(result.provider).toBe('velodrome')
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
it('throws when all providers fail to quote', async () => {
|
|
111
|
+
const failingProvider = createMockSwapProvider({
|
|
112
|
+
marketAllowlist: [{ assets: [USDC, ETH] }],
|
|
113
|
+
})
|
|
114
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
|
|
115
|
+
|
|
116
|
+
const namespace = new ActionsSwapNamespace(
|
|
117
|
+
{ uniswap: failingProvider },
|
|
118
|
+
{ routing: 'price' },
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
await expect(
|
|
122
|
+
namespace.getQuote({
|
|
123
|
+
assetIn: USDC,
|
|
124
|
+
assetOut: ETH,
|
|
125
|
+
amountIn: 100,
|
|
126
|
+
chainId: 84532 as SupportedChainId,
|
|
127
|
+
}),
|
|
128
|
+
).rejects.toThrow('All providers failed')
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
it('uses explicit provider when specified, ignoring routing', async () => {
|
|
132
|
+
const cheapProvider = new MockSwapProvider(
|
|
133
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
134
|
+
{ defaultPrice: 1.2, provider: 'uniswap' },
|
|
135
|
+
)
|
|
136
|
+
const expensiveProvider = new MockSwapProvider(
|
|
137
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
138
|
+
{ defaultPrice: 1.8, provider: 'velodrome' },
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
const namespace = new ActionsSwapNamespace(
|
|
142
|
+
{ uniswap: cheapProvider, velodrome: expensiveProvider },
|
|
143
|
+
{ routing: 'price' },
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
const result = await namespace.getQuote({
|
|
147
|
+
assetIn: USDC,
|
|
148
|
+
assetOut: ETH,
|
|
149
|
+
amountIn: 100,
|
|
150
|
+
chainId: 84532 as SupportedChainId,
|
|
151
|
+
provider: 'uniswap',
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
// Should use uniswap despite worse price because it was explicitly requested
|
|
155
|
+
expect(result.provider).toBe('uniswap')
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
describe('getQuotes', () => {
|
|
160
|
+
it('returns quotes from all eligible providers sorted by best price', async () => {
|
|
161
|
+
const cheapProvider = new MockSwapProvider(
|
|
162
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
163
|
+
{ defaultPrice: 1.2, provider: 'uniswap' },
|
|
164
|
+
)
|
|
165
|
+
const expensiveProvider = new MockSwapProvider(
|
|
166
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
167
|
+
{ defaultPrice: 1.8, provider: 'velodrome' },
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
const namespace = new ActionsSwapNamespace({
|
|
171
|
+
uniswap: cheapProvider,
|
|
172
|
+
velodrome: expensiveProvider,
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
const quotes = await namespace.getQuotes({
|
|
176
|
+
assetIn: USDC,
|
|
177
|
+
assetOut: ETH,
|
|
178
|
+
amountIn: 100,
|
|
179
|
+
chainId: 84532 as SupportedChainId,
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
expect(quotes).toHaveLength(2)
|
|
183
|
+
expect(quotes[0].provider).toBe('velodrome')
|
|
184
|
+
expect(quotes[1].provider).toBe('uniswap')
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('skips failed providers and returns successful ones', async () => {
|
|
188
|
+
const workingProvider = createMockSwapProvider(
|
|
189
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
190
|
+
{ provider: 'velodrome' },
|
|
191
|
+
)
|
|
192
|
+
const failingProvider = createMockSwapProvider(
|
|
193
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
194
|
+
{ provider: 'uniswap' },
|
|
195
|
+
)
|
|
196
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
|
|
197
|
+
|
|
198
|
+
const namespace = new ActionsSwapNamespace({
|
|
199
|
+
uniswap: failingProvider,
|
|
200
|
+
velodrome: workingProvider,
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
const quotes = await namespace.getQuotes({
|
|
204
|
+
assetIn: USDC,
|
|
205
|
+
assetOut: ETH,
|
|
206
|
+
amountIn: 100,
|
|
207
|
+
chainId: 84532 as SupportedChainId,
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
expect(quotes).toHaveLength(1)
|
|
211
|
+
expect(quotes[0].provider).toBe('velodrome')
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
it('returns single-element array when explicit provider specified', async () => {
|
|
215
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
216
|
+
provider: 'uniswap',
|
|
217
|
+
})
|
|
218
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
219
|
+
supportedChains: [84532 as SupportedChainId],
|
|
220
|
+
provider: 'velodrome',
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
const namespace = new ActionsSwapNamespace({
|
|
224
|
+
uniswap: provider1,
|
|
225
|
+
velodrome: provider2,
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
const quotes = await namespace.getQuotes({
|
|
229
|
+
assetIn: USDC,
|
|
230
|
+
assetOut: ETH,
|
|
231
|
+
amountIn: 100,
|
|
232
|
+
chainId: 84532 as SupportedChainId,
|
|
233
|
+
provider: 'uniswap',
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
expect(quotes).toHaveLength(1)
|
|
237
|
+
expect(quotes[0].provider).toBe('uniswap')
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
describe('getMarket', () => {
|
|
242
|
+
it('delegates to provider getMarket', async () => {
|
|
243
|
+
const provider = createMockSwapProvider()
|
|
244
|
+
const namespace = new ActionsSwapNamespace({ uniswap: provider })
|
|
245
|
+
|
|
246
|
+
const result = await namespace.getMarket({
|
|
247
|
+
poolId: '0xpool123',
|
|
248
|
+
chainId: 84532 as SupportedChainId,
|
|
249
|
+
})
|
|
250
|
+
|
|
251
|
+
expect(provider.mockGetMarket).toHaveBeenCalledTimes(1)
|
|
252
|
+
expect(result.marketId.poolId).toBe('0xpool123')
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
it('queries specific provider when specified', async () => {
|
|
256
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
257
|
+
provider: 'uniswap',
|
|
258
|
+
})
|
|
259
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
260
|
+
supportedChains: [84532 as SupportedChainId],
|
|
261
|
+
provider: 'velodrome',
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
const namespace = new ActionsSwapNamespace({
|
|
265
|
+
uniswap: provider1,
|
|
266
|
+
velodrome: provider2,
|
|
267
|
+
})
|
|
268
|
+
|
|
269
|
+
await namespace.getMarket(
|
|
270
|
+
{ poolId: '0xpool123', chainId: 84532 as SupportedChainId },
|
|
271
|
+
'velodrome',
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
expect(provider2.mockGetMarket).toHaveBeenCalledTimes(1)
|
|
275
|
+
expect(provider1.mockGetMarket).not.toHaveBeenCalled()
|
|
276
|
+
})
|
|
277
|
+
|
|
278
|
+
it('throws for unknown provider name', async () => {
|
|
279
|
+
const namespace = new ActionsSwapNamespace({
|
|
280
|
+
uniswap: createMockSwapProvider(),
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
await expect(
|
|
284
|
+
namespace.getMarket(
|
|
285
|
+
{ poolId: '0x1', chainId: 84532 as SupportedChainId },
|
|
286
|
+
'velodrome',
|
|
287
|
+
),
|
|
288
|
+
).rejects.toThrow('not configured')
|
|
289
|
+
})
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
describe('getMarkets', () => {
|
|
293
|
+
it('aggregates markets from all providers', async () => {
|
|
294
|
+
const provider1 = createMockSwapProvider()
|
|
295
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
296
|
+
supportedChains: [84532 as SupportedChainId],
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
const namespace = new ActionsSwapNamespace({
|
|
300
|
+
uniswap: provider1,
|
|
301
|
+
velodrome: provider2,
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
const result = await namespace.getMarkets({})
|
|
305
|
+
|
|
306
|
+
expect(result.length).toBeGreaterThanOrEqual(1)
|
|
307
|
+
expect(provider1.mockGetMarkets).toHaveBeenCalledTimes(1)
|
|
308
|
+
expect(provider2.mockGetMarkets).toHaveBeenCalledTimes(1)
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
it('returns empty array when no providers', async () => {
|
|
312
|
+
const namespace = new ActionsSwapNamespace({})
|
|
313
|
+
|
|
314
|
+
const result = await namespace.getMarkets({})
|
|
315
|
+
|
|
316
|
+
expect(result).toEqual([])
|
|
317
|
+
})
|
|
318
|
+
})
|
|
319
|
+
|
|
320
|
+
describe('supportedChainIds', () => {
|
|
321
|
+
it('returns union of chains from all providers', () => {
|
|
322
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
323
|
+
supportedChains: [84532 as SupportedChainId],
|
|
324
|
+
})
|
|
325
|
+
const provider2 = new MockSwapProvider(
|
|
326
|
+
undefined,
|
|
327
|
+
{ supportedChains: [1 as SupportedChainId, 10 as SupportedChainId] },
|
|
328
|
+
new MockChainManager({
|
|
329
|
+
supportedChains: [1 as SupportedChainId, 10 as SupportedChainId],
|
|
330
|
+
}) as unknown as ChainManager,
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
const namespace = new ActionsSwapNamespace({
|
|
334
|
+
uniswap: provider1,
|
|
335
|
+
velodrome: provider2,
|
|
336
|
+
})
|
|
337
|
+
|
|
338
|
+
const result = namespace.supportedChainIds()
|
|
339
|
+
|
|
340
|
+
expect(result).toContain(84532)
|
|
341
|
+
expect(result).toContain(1)
|
|
342
|
+
expect(result).toContain(10)
|
|
343
|
+
expect(result.length).toBe(3)
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
it('deduplicates chain IDs', () => {
|
|
347
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
348
|
+
supportedChains: [84532 as SupportedChainId, 1 as SupportedChainId],
|
|
349
|
+
})
|
|
350
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
351
|
+
supportedChains: [1 as SupportedChainId],
|
|
352
|
+
})
|
|
353
|
+
|
|
354
|
+
const namespace = new ActionsSwapNamespace({
|
|
355
|
+
uniswap: provider1,
|
|
356
|
+
velodrome: provider2,
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
const result = namespace.supportedChainIds()
|
|
360
|
+
|
|
361
|
+
// Should have unique values only
|
|
362
|
+
expect(new Set(result).size).toBe(result.length)
|
|
363
|
+
})
|
|
364
|
+
})
|
|
365
|
+
})
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
3
|
+
|
|
4
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
5
|
+
import { createMockSwapProvider } from '@/swap/__mocks__/MockSwapProvider.js'
|
|
6
|
+
import { WalletSwapNamespace } from '@/swap/namespaces/WalletSwapNamespace.js'
|
|
7
|
+
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
8
|
+
|
|
9
|
+
describe('WalletSwapNamespace', () => {
|
|
10
|
+
const USDC = {
|
|
11
|
+
type: 'erc20' as const,
|
|
12
|
+
address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' as const },
|
|
13
|
+
metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
|
|
14
|
+
}
|
|
15
|
+
const ETH = {
|
|
16
|
+
type: 'native' as const,
|
|
17
|
+
address: { 84532: '0x0000000000000000000000000000000000000000' as const },
|
|
18
|
+
metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const mockWalletAddress =
|
|
22
|
+
'0x1234567890123456789012345678901234567890' as Address
|
|
23
|
+
|
|
24
|
+
function createMockWallet(): Wallet {
|
|
25
|
+
return {
|
|
26
|
+
address: mockWalletAddress,
|
|
27
|
+
send: vi.fn().mockResolvedValue({ transactionHash: '0xtx1' }),
|
|
28
|
+
sendBatch: vi.fn().mockResolvedValue({ transactionHash: '0xtx2' }),
|
|
29
|
+
} as unknown as Wallet
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
describe('execute', () => {
|
|
33
|
+
it('executes swap with single transaction', async () => {
|
|
34
|
+
const provider = createMockSwapProvider()
|
|
35
|
+
const wallet = createMockWallet()
|
|
36
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
37
|
+
|
|
38
|
+
const result = await namespace.execute({
|
|
39
|
+
amountIn: 100,
|
|
40
|
+
assetIn: USDC,
|
|
41
|
+
assetOut: ETH,
|
|
42
|
+
chainId: 84532 as SupportedChainId,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
expect(provider.mockExecute).toHaveBeenCalledTimes(1)
|
|
46
|
+
expect(wallet.send).toHaveBeenCalledTimes(1)
|
|
47
|
+
expect(wallet.sendBatch).not.toHaveBeenCalled()
|
|
48
|
+
expect(result.price).toBe(1.5)
|
|
49
|
+
expect(result.assetIn).toBe(USDC)
|
|
50
|
+
expect(result.assetOut).toBe(ETH)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('batches transactions when approvals needed', async () => {
|
|
54
|
+
const provider = createMockSwapProvider()
|
|
55
|
+
const wallet = createMockWallet()
|
|
56
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
57
|
+
|
|
58
|
+
// Override mock to return transaction with approvals
|
|
59
|
+
provider.mockExecute.mockResolvedValueOnce({
|
|
60
|
+
amountIn: 100,
|
|
61
|
+
amountOut: 1.5,
|
|
62
|
+
amountInRaw: 100000000n,
|
|
63
|
+
amountOutRaw: 1500000000000000000n,
|
|
64
|
+
assetIn: USDC,
|
|
65
|
+
assetOut: ETH,
|
|
66
|
+
price: 1.5,
|
|
67
|
+
priceImpact: 0.001,
|
|
68
|
+
transactionData: {
|
|
69
|
+
tokenApproval: {
|
|
70
|
+
to: '0xpermit2' as Address,
|
|
71
|
+
data: '0xapprove' as `0x${string}`,
|
|
72
|
+
value: 0n,
|
|
73
|
+
},
|
|
74
|
+
permit2Approval: {
|
|
75
|
+
to: '0xpermit2' as Address,
|
|
76
|
+
data: '0xpermit' as `0x${string}`,
|
|
77
|
+
value: 0n,
|
|
78
|
+
},
|
|
79
|
+
swap: {
|
|
80
|
+
to: '0xrouter' as Address,
|
|
81
|
+
data: '0xswap' as `0x${string}`,
|
|
82
|
+
value: 0n,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
await namespace.execute({
|
|
88
|
+
amountIn: 100,
|
|
89
|
+
assetIn: USDC,
|
|
90
|
+
assetOut: ETH,
|
|
91
|
+
chainId: 84532 as SupportedChainId,
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
expect(wallet.sendBatch).toHaveBeenCalledTimes(1)
|
|
95
|
+
expect(wallet.send).not.toHaveBeenCalled()
|
|
96
|
+
|
|
97
|
+
// Verify all 3 transactions were batched
|
|
98
|
+
const batchCall = vi.mocked(wallet.sendBatch).mock.calls[0]
|
|
99
|
+
expect(batchCall[0]).toHaveLength(3)
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('passes wallet address to provider', async () => {
|
|
103
|
+
const provider = createMockSwapProvider()
|
|
104
|
+
const wallet = createMockWallet()
|
|
105
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
106
|
+
|
|
107
|
+
await namespace.execute({
|
|
108
|
+
amountIn: 100,
|
|
109
|
+
assetIn: USDC,
|
|
110
|
+
assetOut: ETH,
|
|
111
|
+
chainId: 84532 as SupportedChainId,
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
expect(provider.mockExecute).toHaveBeenCalledWith(
|
|
115
|
+
expect.objectContaining({
|
|
116
|
+
walletAddress: mockWalletAddress,
|
|
117
|
+
}),
|
|
118
|
+
)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
it('throws when no provider configured', async () => {
|
|
122
|
+
const wallet = createMockWallet()
|
|
123
|
+
const namespace = new WalletSwapNamespace({}, wallet)
|
|
124
|
+
|
|
125
|
+
await expect(
|
|
126
|
+
namespace.execute({
|
|
127
|
+
amountIn: 100,
|
|
128
|
+
assetIn: USDC,
|
|
129
|
+
assetOut: ETH,
|
|
130
|
+
chainId: 84532 as SupportedChainId,
|
|
131
|
+
}),
|
|
132
|
+
).rejects.toThrow('No swap provider configured')
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
it('executes swap from a SwapQuote (skips re-quoting)', async () => {
|
|
136
|
+
const provider = createMockSwapProvider()
|
|
137
|
+
const wallet = createMockWallet()
|
|
138
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
139
|
+
|
|
140
|
+
// Get a quote first
|
|
141
|
+
const quote = await namespace.getQuote({
|
|
142
|
+
assetIn: USDC,
|
|
143
|
+
assetOut: ETH,
|
|
144
|
+
amountIn: 100,
|
|
145
|
+
chainId: 84532 as SupportedChainId,
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
// Execute with the quote
|
|
149
|
+
const result = await namespace.execute(quote)
|
|
150
|
+
|
|
151
|
+
// Should use quote path: _buildApprovals called, not _execute
|
|
152
|
+
expect(provider.mockBuildApprovals).toHaveBeenCalledTimes(1)
|
|
153
|
+
expect(provider.mockExecute).not.toHaveBeenCalled()
|
|
154
|
+
expect(result.price).toBe(1.5)
|
|
155
|
+
expect(wallet.send).toHaveBeenCalledTimes(1)
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
describe('getQuote recipient injection', () => {
|
|
160
|
+
it('injects wallet address as recipient', async () => {
|
|
161
|
+
const provider = createMockSwapProvider()
|
|
162
|
+
const wallet = createMockWallet()
|
|
163
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
164
|
+
|
|
165
|
+
const quote = await namespace.getQuote({
|
|
166
|
+
assetIn: USDC,
|
|
167
|
+
assetOut: ETH,
|
|
168
|
+
amountIn: 100,
|
|
169
|
+
chainId: 84532 as SupportedChainId,
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
// Quote should have wallet address as the encoded recipient
|
|
173
|
+
expect(quote.quotedRecipient).toBe(mockWalletAddress)
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
it('preserves explicit recipient over wallet address', async () => {
|
|
177
|
+
const provider = createMockSwapProvider()
|
|
178
|
+
const wallet = createMockWallet()
|
|
179
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
180
|
+
const customRecipient =
|
|
181
|
+
'0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' as Address
|
|
182
|
+
|
|
183
|
+
const quote = await namespace.getQuote({
|
|
184
|
+
assetIn: USDC,
|
|
185
|
+
assetOut: ETH,
|
|
186
|
+
amountIn: 100,
|
|
187
|
+
chainId: 84532 as SupportedChainId,
|
|
188
|
+
recipient: customRecipient,
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
expect(quote.quotedRecipient).toBe(customRecipient)
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
describe('execute with recipient mismatch', () => {
|
|
196
|
+
it('re-encodes when quote recipient differs from wallet', async () => {
|
|
197
|
+
const provider = createMockSwapProvider()
|
|
198
|
+
const wallet = createMockWallet()
|
|
199
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
200
|
+
|
|
201
|
+
// Get quote without wallet (simulates ActionsSwapNamespace quote)
|
|
202
|
+
const quote = await provider.getQuote({
|
|
203
|
+
assetIn: USDC,
|
|
204
|
+
assetOut: ETH,
|
|
205
|
+
amountIn: 100,
|
|
206
|
+
chainId: 84532 as SupportedChainId,
|
|
207
|
+
// No recipient — uses placeholder
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
// quotedRecipient should be the placeholder, not the wallet
|
|
211
|
+
expect(quote.quotedRecipient).not.toBe(mockWalletAddress)
|
|
212
|
+
|
|
213
|
+
// Execute through wallet namespace — should re-quote with correct recipient
|
|
214
|
+
const result = await namespace.execute(quote)
|
|
215
|
+
expect(result.price).toBeDefined()
|
|
216
|
+
|
|
217
|
+
// Provider's getQuote should have been called twice:
|
|
218
|
+
// 1) original quote, 2) re-quote with wallet address
|
|
219
|
+
expect(provider.mockGetQuote).toHaveBeenCalledTimes(2)
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
it('skips re-encode when quote already has correct recipient', async () => {
|
|
223
|
+
const provider = createMockSwapProvider()
|
|
224
|
+
const wallet = createMockWallet()
|
|
225
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
226
|
+
|
|
227
|
+
// Get quote through wallet namespace (has correct recipient)
|
|
228
|
+
const quote = await namespace.getQuote({
|
|
229
|
+
assetIn: USDC,
|
|
230
|
+
assetOut: ETH,
|
|
231
|
+
amountIn: 100,
|
|
232
|
+
chainId: 84532 as SupportedChainId,
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
expect(quote.quotedRecipient).toBe(mockWalletAddress)
|
|
236
|
+
|
|
237
|
+
// Execute — should NOT re-quote
|
|
238
|
+
const result = await namespace.execute(quote)
|
|
239
|
+
expect(result.price).toBeDefined()
|
|
240
|
+
|
|
241
|
+
// getQuote called only once (the original)
|
|
242
|
+
expect(provider.mockGetQuote).toHaveBeenCalledTimes(1)
|
|
243
|
+
})
|
|
244
|
+
})
|
|
245
|
+
|
|
246
|
+
describe('inherits read-only methods', () => {
|
|
247
|
+
it('has getMarkets method from BaseSwapNamespace', async () => {
|
|
248
|
+
const provider = createMockSwapProvider()
|
|
249
|
+
const wallet = createMockWallet()
|
|
250
|
+
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
251
|
+
|
|
252
|
+
const result = await namespace.getMarkets({})
|
|
253
|
+
|
|
254
|
+
expect(result.length).toBeGreaterThanOrEqual(1)
|
|
255
|
+
})
|
|
256
|
+
})
|
|
257
|
+
})
|