@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,73 @@
|
|
|
1
|
+
import type { SupportedChainId } from '../../constants/supportedChains.js';
|
|
2
|
+
import type { SwapProvider } from '../core/SwapProvider.js';
|
|
3
|
+
import type { SwapProviderName, SwapSettings } from '../../types/actions.js';
|
|
4
|
+
import type { Asset } from '../../types/asset.js';
|
|
5
|
+
import type { GetSwapMarketParams, GetSwapMarketsParams, SwapMarket, SwapProviderConfig, SwapProviders, SwapQuote, SwapQuoteParams } from '../../types/swap/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Base swap namespace with shared read-only operations
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class BaseSwapNamespace {
|
|
10
|
+
protected readonly providers: SwapProviders;
|
|
11
|
+
protected readonly settings?: SwapSettings | undefined;
|
|
12
|
+
constructor(providers: SwapProviders, settings?: SwapSettings | undefined);
|
|
13
|
+
/**
|
|
14
|
+
* Get a swap quote with pre-built execution data.
|
|
15
|
+
* When `routing: 'price'` is set in settings and no explicit provider is requested,
|
|
16
|
+
* fetches quotes from all eligible providers in parallel and returns the best price.
|
|
17
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
18
|
+
* @returns The best available SwapQuote
|
|
19
|
+
*/
|
|
20
|
+
getQuote(params: SwapQuoteParams): Promise<SwapQuote>;
|
|
21
|
+
/**
|
|
22
|
+
* Fetch quotes from all eligible providers in parallel and return the best.
|
|
23
|
+
* @param params - Quote parameters
|
|
24
|
+
* @returns The quote with the highest amountOut
|
|
25
|
+
* @throws If no provider returns a valid quote
|
|
26
|
+
*/
|
|
27
|
+
private getBestQuote;
|
|
28
|
+
/**
|
|
29
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
30
|
+
* Providers that don't support the pair or fail to quote are silently skipped.
|
|
31
|
+
* @param params - Quote parameters
|
|
32
|
+
* @returns Array of successful quotes (may be empty if all providers fail)
|
|
33
|
+
*/
|
|
34
|
+
private fetchAllQuotes;
|
|
35
|
+
/**
|
|
36
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
37
|
+
* Unlike getQuote(), returns all successful quotes instead of just the best.
|
|
38
|
+
* If an explicit provider is specified, returns a single-element array from that provider.
|
|
39
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
40
|
+
* @returns Array of SwapQuotes sorted by amountOut descending (best first)
|
|
41
|
+
*/
|
|
42
|
+
getQuotes(params: SwapQuoteParams): Promise<SwapQuote[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Get a specific swap market by ID.
|
|
45
|
+
* @param params - Market identifier (poolId + chainId)
|
|
46
|
+
* @param provider - Optional provider name to query directly instead of searching all
|
|
47
|
+
* @returns Market information
|
|
48
|
+
*/
|
|
49
|
+
getMarket(params: GetSwapMarketParams, provider?: SwapProviderName): Promise<SwapMarket>;
|
|
50
|
+
/**
|
|
51
|
+
* Get available swap markets across all providers
|
|
52
|
+
* @param params - Optional filtering by chainId or asset
|
|
53
|
+
* @returns Promise resolving to array of markets from all providers
|
|
54
|
+
*/
|
|
55
|
+
getMarkets(params?: GetSwapMarketsParams): Promise<SwapMarket[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Get all supported chain IDs across all providers
|
|
58
|
+
*/
|
|
59
|
+
supportedChainIds(): SupportedChainId[];
|
|
60
|
+
protected getAllProviders(): Array<SwapProvider<SwapProviderConfig>>;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve which provider handles a request.
|
|
63
|
+
*
|
|
64
|
+
* Precedence:
|
|
65
|
+
* 1. Explicit `provider` param on the call
|
|
66
|
+
* 2. routing.defaultProvider (when no strategy set)
|
|
67
|
+
* 3. routing.strategy match (market-aware, defaultProvider as tiebreaker)
|
|
68
|
+
* 4. First provider whose allowlist matches
|
|
69
|
+
* 5. First configured provider
|
|
70
|
+
*/
|
|
71
|
+
protected resolveProvider(provider: SwapProviderName | undefined, assetIn: Asset, assetOut: Asset, chainId: SupportedChainId): SwapProvider<SwapProviderConfig>;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=BaseSwapNamespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSwapNamespace.d.ts","sourceRoot":"","sources":["../../../src/swap/namespaces/BaseSwapNamespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,eAAe,EAChB,MAAM,uBAAuB,CAAA;AAE9B;;GAEG;AACH,8BAAsB,iBAAiB;IAEnC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa;IAC3C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY;gBADvB,SAAS,EAAE,aAAa,EACxB,QAAQ,CAAC,EAAE,YAAY,YAAA;IAG5C;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IA2B3D;;;;;OAKG;YACW,YAAY;IAmB1B;;;;;OAKG;YACW,cAAc;IAsB5B;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAqB9D;;;;;OAKG;IACG,SAAS,CACb,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,UAAU,CAAC;IAqBtB;;;;OAIG;IACG,UAAU,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO1E;;OAEG;IACH,iBAAiB,IAAI,gBAAgB,EAAE;IAWvC,SAAS,CAAC,eAAe,IAAI,KAAK,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAMpE;;;;;;;;;OASG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,OAAO,EAAE,KAAK,EACd,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,gBAAgB,GACxB,YAAY,CAAC,kBAAkB,CAAC;CA0CpC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base swap namespace with shared read-only operations
|
|
3
|
+
*/
|
|
4
|
+
export class BaseSwapNamespace {
|
|
5
|
+
constructor(providers, settings) {
|
|
6
|
+
this.providers = providers;
|
|
7
|
+
this.settings = settings;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get a swap quote with pre-built execution data.
|
|
11
|
+
* When `routing: 'price'` is set in settings and no explicit provider is requested,
|
|
12
|
+
* fetches quotes from all eligible providers in parallel and returns the best price.
|
|
13
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
14
|
+
* @returns The best available SwapQuote
|
|
15
|
+
*/
|
|
16
|
+
async getQuote(params) {
|
|
17
|
+
// Explicit provider — skip routing
|
|
18
|
+
if (params.provider) {
|
|
19
|
+
const provider = this.resolveProvider(params.provider, params.assetIn, params.assetOut, params.chainId);
|
|
20
|
+
return provider.getQuote(params);
|
|
21
|
+
}
|
|
22
|
+
// Price routing — quote all eligible providers, return best
|
|
23
|
+
if (this.settings?.routing === 'price') {
|
|
24
|
+
return this.getBestQuote(params);
|
|
25
|
+
}
|
|
26
|
+
// No routing — resolve single provider via fallback logic
|
|
27
|
+
const provider = this.resolveProvider(undefined, params.assetIn, params.assetOut, params.chainId);
|
|
28
|
+
return provider.getQuote(params);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fetch quotes from all eligible providers in parallel and return the best.
|
|
32
|
+
* @param params - Quote parameters
|
|
33
|
+
* @returns The quote with the highest amountOut
|
|
34
|
+
* @throws If no provider returns a valid quote
|
|
35
|
+
*/
|
|
36
|
+
async getBestQuote(params) {
|
|
37
|
+
const quotes = await this.fetchAllQuotes(params);
|
|
38
|
+
let best = null;
|
|
39
|
+
for (const quote of quotes) {
|
|
40
|
+
if (!best || quote.amountOutRaw > best.amountOutRaw) {
|
|
41
|
+
best = quote;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!best) {
|
|
45
|
+
throw new Error(`All providers failed to quote ${params.assetIn.metadata.symbol}/${params.assetOut.metadata.symbol}`);
|
|
46
|
+
}
|
|
47
|
+
return best;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
51
|
+
* Providers that don't support the pair or fail to quote are silently skipped.
|
|
52
|
+
* @param params - Quote parameters
|
|
53
|
+
* @returns Array of successful quotes (may be empty if all providers fail)
|
|
54
|
+
*/
|
|
55
|
+
async fetchAllQuotes(params) {
|
|
56
|
+
const eligible = this.getAllProviders().filter((p) => p.isMarketSupported(params.assetIn, params.assetOut, params.chainId));
|
|
57
|
+
if (eligible.length === 0) {
|
|
58
|
+
throw new Error(`No provider supports ${params.assetIn.metadata.symbol}/${params.assetOut.metadata.symbol} on chain ${params.chainId}`);
|
|
59
|
+
}
|
|
60
|
+
const results = await Promise.allSettled(eligible.map((p) => p.getQuote(params)));
|
|
61
|
+
return results
|
|
62
|
+
.filter((r) => r.status === 'fulfilled')
|
|
63
|
+
.map((r) => r.value);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
67
|
+
* Unlike getQuote(), returns all successful quotes instead of just the best.
|
|
68
|
+
* If an explicit provider is specified, returns a single-element array from that provider.
|
|
69
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
70
|
+
* @returns Array of SwapQuotes sorted by amountOut descending (best first)
|
|
71
|
+
*/
|
|
72
|
+
async getQuotes(params) {
|
|
73
|
+
if (params.provider) {
|
|
74
|
+
const provider = this.resolveProvider(params.provider, params.assetIn, params.assetOut, params.chainId);
|
|
75
|
+
return [await provider.getQuote(params)];
|
|
76
|
+
}
|
|
77
|
+
const quotes = await this.fetchAllQuotes(params);
|
|
78
|
+
return quotes.sort((a, b) => a.amountOutRaw > b.amountOutRaw
|
|
79
|
+
? -1
|
|
80
|
+
: a.amountOutRaw < b.amountOutRaw
|
|
81
|
+
? 1
|
|
82
|
+
: 0);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get a specific swap market by ID.
|
|
86
|
+
* @param params - Market identifier (poolId + chainId)
|
|
87
|
+
* @param provider - Optional provider name to query directly instead of searching all
|
|
88
|
+
* @returns Market information
|
|
89
|
+
*/
|
|
90
|
+
async getMarket(params, provider) {
|
|
91
|
+
if (provider) {
|
|
92
|
+
const named = this.providers[provider];
|
|
93
|
+
if (!named) {
|
|
94
|
+
throw new Error(`Swap provider "${provider}" not configured`);
|
|
95
|
+
}
|
|
96
|
+
return named.getMarket(params);
|
|
97
|
+
}
|
|
98
|
+
for (const p of this.getAllProviders()) {
|
|
99
|
+
try {
|
|
100
|
+
return await p.getMarket(params);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`Market with poolId ${params.poolId} not found on chain ${params.chainId}`);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get available swap markets across all providers
|
|
110
|
+
* @param params - Optional filtering by chainId or asset
|
|
111
|
+
* @returns Promise resolving to array of markets from all providers
|
|
112
|
+
*/
|
|
113
|
+
async getMarkets(params = {}) {
|
|
114
|
+
const results = await Promise.all(this.getAllProviders().map((p) => p.getMarkets(params)));
|
|
115
|
+
return results.flat();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get all supported chain IDs across all providers
|
|
119
|
+
*/
|
|
120
|
+
supportedChainIds() {
|
|
121
|
+
const chainIds = new Set();
|
|
122
|
+
for (const provider of this.getAllProviders()) {
|
|
123
|
+
for (const chainId of provider.supportedChainIds()) {
|
|
124
|
+
chainIds.add(chainId);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return Array.from(chainIds);
|
|
128
|
+
}
|
|
129
|
+
// SwapProviders keys are optional (uniswap?, velodrome?, etc.) so filter out unconfigured ones
|
|
130
|
+
getAllProviders() {
|
|
131
|
+
return Object.values(this.providers).filter((p) => p !== undefined);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Resolve which provider handles a request.
|
|
135
|
+
*
|
|
136
|
+
* Precedence:
|
|
137
|
+
* 1. Explicit `provider` param on the call
|
|
138
|
+
* 2. routing.defaultProvider (when no strategy set)
|
|
139
|
+
* 3. routing.strategy match (market-aware, defaultProvider as tiebreaker)
|
|
140
|
+
* 4. First provider whose allowlist matches
|
|
141
|
+
* 5. First configured provider
|
|
142
|
+
*/
|
|
143
|
+
resolveProvider(provider, assetIn, assetOut, chainId) {
|
|
144
|
+
const allProviders = this.getAllProviders();
|
|
145
|
+
if (allProviders.length === 0) {
|
|
146
|
+
throw new Error('No swap provider configured');
|
|
147
|
+
}
|
|
148
|
+
// 1. Explicit provider param
|
|
149
|
+
if (provider) {
|
|
150
|
+
const named = this.providers[provider];
|
|
151
|
+
if (!named) {
|
|
152
|
+
throw new Error(`Swap provider "${provider}" not configured`);
|
|
153
|
+
}
|
|
154
|
+
return named;
|
|
155
|
+
}
|
|
156
|
+
// Single provider — no routing needed
|
|
157
|
+
if (allProviders.length === 1) {
|
|
158
|
+
return allProviders[0];
|
|
159
|
+
}
|
|
160
|
+
// 2. defaultProvider with no routing strategy — always use it
|
|
161
|
+
if (this.settings?.defaultProvider && !this.settings.routing) {
|
|
162
|
+
const provider = this.providers[this.settings.defaultProvider];
|
|
163
|
+
if (provider)
|
|
164
|
+
return provider;
|
|
165
|
+
}
|
|
166
|
+
// 3. Match by market allowlist
|
|
167
|
+
for (const p of allProviders) {
|
|
168
|
+
if (p.isMarketSupported(assetIn, assetOut, chainId)) {
|
|
169
|
+
return p;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// 4. Match by chain support
|
|
173
|
+
for (const p of allProviders) {
|
|
174
|
+
if (p.isChainSupported(chainId)) {
|
|
175
|
+
return p;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return allProviders[0];
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=BaseSwapNamespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSwapNamespace.js","sourceRoot":"","sources":["../../../src/swap/namespaces/BaseSwapNamespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BaseSwapNamespace } from './BaseSwapNamespace.js';
|
|
2
|
+
import type { SwapSettings } from '../../types/actions.js';
|
|
3
|
+
import type { SwapProviders, SwapQuote, SwapQuoteParams, SwapReceipt, WalletSwapParams } from '../../types/swap/index.js';
|
|
4
|
+
import type { Wallet } from '../../wallet/core/wallets/abstract/Wallet.js';
|
|
5
|
+
/**
|
|
6
|
+
* Wallet swap namespace with full operations including signing.
|
|
7
|
+
* Provides getQuote() for pricing and execute() for swapping tokens.
|
|
8
|
+
*/
|
|
9
|
+
export declare class WalletSwapNamespace extends BaseSwapNamespace {
|
|
10
|
+
private readonly wallet;
|
|
11
|
+
constructor(providers: SwapProviders, wallet: Wallet, settings?: SwapSettings);
|
|
12
|
+
/**
|
|
13
|
+
* Get a swap quote with the wallet address as recipient.
|
|
14
|
+
* Ensures calldata is encoded for the real wallet, not a placeholder.
|
|
15
|
+
*/
|
|
16
|
+
getQuote(params: SwapQuoteParams): Promise<SwapQuote>;
|
|
17
|
+
/**
|
|
18
|
+
* Get quotes from all providers with the wallet address as recipient.
|
|
19
|
+
*/
|
|
20
|
+
getQuotes(params: SwapQuoteParams): Promise<SwapQuote[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Execute a token swap.
|
|
23
|
+
* Accepts either raw params (re-quotes internally) or a pre-built SwapQuote (skips re-quoting).
|
|
24
|
+
* @param params - Swap parameters or a pre-built SwapQuote from getQuote()
|
|
25
|
+
* @returns Swap receipt with transaction details
|
|
26
|
+
*/
|
|
27
|
+
execute(params: WalletSwapParams | SwapQuote): Promise<SwapReceipt>;
|
|
28
|
+
private buildReceipt;
|
|
29
|
+
/**
|
|
30
|
+
* Execute swap transaction with approval batching
|
|
31
|
+
*/
|
|
32
|
+
private executeTransaction;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=WalletSwapNamespace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletSwapNamespace.d.ts","sourceRoot":"","sources":["../../../src/swap/namespaces/WalletSwapNamespace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,WAAW,EAEX,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0CAA0C,CAAA;AAEtE;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IAGtD,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADvB,SAAS,EAAE,aAAa,EACP,MAAM,EAAE,MAAM,EAC/B,QAAQ,CAAC,EAAE,YAAY;IAKzB;;;OAGG;IACY,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;IAOpE;;OAEG;IACY,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAOvE;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAoBzE,OAAO,CAAC,YAAY;IAiBpB;;OAEG;YACW,kBAAkB;CA0BjC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { QUOTE_DISCRIMINATOR } from '../core/SwapProvider.js';
|
|
2
|
+
import { BaseSwapNamespace } from './BaseSwapNamespace.js';
|
|
3
|
+
/**
|
|
4
|
+
* Wallet swap namespace with full operations including signing.
|
|
5
|
+
* Provides getQuote() for pricing and execute() for swapping tokens.
|
|
6
|
+
*/
|
|
7
|
+
export class WalletSwapNamespace extends BaseSwapNamespace {
|
|
8
|
+
constructor(providers, wallet, settings) {
|
|
9
|
+
super(providers, settings);
|
|
10
|
+
this.wallet = wallet;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get a swap quote with the wallet address as recipient.
|
|
14
|
+
* Ensures calldata is encoded for the real wallet, not a placeholder.
|
|
15
|
+
*/
|
|
16
|
+
async getQuote(params) {
|
|
17
|
+
return super.getQuote({
|
|
18
|
+
...params,
|
|
19
|
+
recipient: params.recipient ?? this.wallet.address,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get quotes from all providers with the wallet address as recipient.
|
|
24
|
+
*/
|
|
25
|
+
async getQuotes(params) {
|
|
26
|
+
return super.getQuotes({
|
|
27
|
+
...params,
|
|
28
|
+
recipient: params.recipient ?? this.wallet.address,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute a token swap.
|
|
33
|
+
* Accepts either raw params (re-quotes internally) or a pre-built SwapQuote (skips re-quoting).
|
|
34
|
+
* @param params - Swap parameters or a pre-built SwapQuote from getQuote()
|
|
35
|
+
* @returns Swap receipt with transaction details
|
|
36
|
+
*/
|
|
37
|
+
async execute(params) {
|
|
38
|
+
// Inject walletAddress — raw params need it for validation,
|
|
39
|
+
// quotes need it for on-chain allowance checks during approval building
|
|
40
|
+
const executeParams = QUOTE_DISCRIMINATOR in params
|
|
41
|
+
? { ...params, recipient: this.wallet.address }
|
|
42
|
+
: { ...params, walletAddress: this.wallet.address };
|
|
43
|
+
const provider = this.resolveProvider(params.provider, params.assetIn, params.assetOut, params.chainId);
|
|
44
|
+
const swapTx = await provider.execute(executeParams);
|
|
45
|
+
const receipt = await this.executeTransaction(swapTx, params.chainId);
|
|
46
|
+
return this.buildReceipt(swapTx, receipt);
|
|
47
|
+
}
|
|
48
|
+
buildReceipt(swapTx, receipt) {
|
|
49
|
+
return {
|
|
50
|
+
receipt,
|
|
51
|
+
amountIn: swapTx.amountIn,
|
|
52
|
+
amountOut: swapTx.amountOut,
|
|
53
|
+
amountInRaw: swapTx.amountInRaw,
|
|
54
|
+
amountOutRaw: swapTx.amountOutRaw,
|
|
55
|
+
assetIn: swapTx.assetIn,
|
|
56
|
+
assetOut: swapTx.assetOut,
|
|
57
|
+
price: swapTx.price,
|
|
58
|
+
priceImpact: swapTx.priceImpact,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Execute swap transaction with approval batching
|
|
63
|
+
*/
|
|
64
|
+
async executeTransaction(swapTx, chainId) {
|
|
65
|
+
const { transactionData } = swapTx;
|
|
66
|
+
const txs = [];
|
|
67
|
+
// Add token approval if needed
|
|
68
|
+
if (transactionData.tokenApproval) {
|
|
69
|
+
txs.push(transactionData.tokenApproval);
|
|
70
|
+
}
|
|
71
|
+
// Add Permit2 approval if needed
|
|
72
|
+
if (transactionData.permit2Approval) {
|
|
73
|
+
txs.push(transactionData.permit2Approval);
|
|
74
|
+
}
|
|
75
|
+
// Add main swap transaction
|
|
76
|
+
txs.push(transactionData.swap);
|
|
77
|
+
// Execute as batch if multiple transactions, otherwise single
|
|
78
|
+
if (txs.length > 1) {
|
|
79
|
+
return this.wallet.sendBatch(txs, chainId);
|
|
80
|
+
}
|
|
81
|
+
return this.wallet.send(transactionData.swap, chainId);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=WalletSwapNamespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletSwapNamespace.js","sourceRoot":"","sources":["../../../src/swap/namespaces/WalletSwapNamespace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseSwapNamespace.spec.d.ts","sourceRoot":"","sources":["../../../../src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { MockChainManager } from '../../../services/__mocks__/MockChainManager.js';
|
|
3
|
+
import { createMockSwapProvider, MockSwapProvider, } from '../../__mocks__/MockSwapProvider.js';
|
|
4
|
+
import { ActionsSwapNamespace } from '../ActionsSwapNamespace.js';
|
|
5
|
+
describe('BaseSwapNamespace', () => {
|
|
6
|
+
const USDC = {
|
|
7
|
+
type: 'erc20',
|
|
8
|
+
address: { 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e' },
|
|
9
|
+
metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 },
|
|
10
|
+
};
|
|
11
|
+
const ETH = {
|
|
12
|
+
type: 'native',
|
|
13
|
+
address: { 84532: '0x0000000000000000000000000000000000000000' },
|
|
14
|
+
metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
|
|
15
|
+
};
|
|
16
|
+
describe('getQuote', () => {
|
|
17
|
+
it('delegates to provider getQuote', async () => {
|
|
18
|
+
const provider = createMockSwapProvider();
|
|
19
|
+
const namespace = new ActionsSwapNamespace({ uniswap: provider });
|
|
20
|
+
const result = await namespace.getQuote({
|
|
21
|
+
assetIn: USDC,
|
|
22
|
+
assetOut: ETH,
|
|
23
|
+
amountIn: 100,
|
|
24
|
+
chainId: 84532,
|
|
25
|
+
});
|
|
26
|
+
expect(provider.mockGetQuote).toHaveBeenCalledTimes(1);
|
|
27
|
+
expect(result.price).toBe(1.5);
|
|
28
|
+
expect(result.execution).toBeDefined();
|
|
29
|
+
expect(result.execution.swapCalldata).toMatch(/^0x/);
|
|
30
|
+
expect(result.provider).toBe('uniswap');
|
|
31
|
+
});
|
|
32
|
+
it('throws if no provider configured', async () => {
|
|
33
|
+
const namespace = new ActionsSwapNamespace({});
|
|
34
|
+
await expect(namespace.getQuote({
|
|
35
|
+
assetIn: USDC,
|
|
36
|
+
assetOut: ETH,
|
|
37
|
+
amountIn: 100,
|
|
38
|
+
chainId: 84532,
|
|
39
|
+
})).rejects.toThrow('No swap provider configured');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('getQuote with price routing', () => {
|
|
43
|
+
it('returns the best price across providers when routing is price', async () => {
|
|
44
|
+
const cheapProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.2, provider: 'uniswap' });
|
|
45
|
+
const expensiveProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.8, provider: 'velodrome' });
|
|
46
|
+
const namespace = new ActionsSwapNamespace({ uniswap: cheapProvider, velodrome: expensiveProvider }, { routing: 'price' });
|
|
47
|
+
const result = await namespace.getQuote({
|
|
48
|
+
assetIn: USDC,
|
|
49
|
+
assetOut: ETH,
|
|
50
|
+
amountIn: 100,
|
|
51
|
+
chainId: 84532,
|
|
52
|
+
});
|
|
53
|
+
// Should pick velodrome because 1.8 > 1.2 (higher amountOut)
|
|
54
|
+
expect(result.provider).toBe('velodrome');
|
|
55
|
+
});
|
|
56
|
+
it('skips providers that fail to quote', async () => {
|
|
57
|
+
const workingProvider = createMockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { provider: 'velodrome' });
|
|
58
|
+
const failingProvider = createMockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { provider: 'uniswap' });
|
|
59
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('RPC failure'));
|
|
60
|
+
const namespace = new ActionsSwapNamespace({ uniswap: failingProvider, velodrome: workingProvider }, { routing: 'price' });
|
|
61
|
+
const result = await namespace.getQuote({
|
|
62
|
+
assetIn: USDC,
|
|
63
|
+
assetOut: ETH,
|
|
64
|
+
amountIn: 100,
|
|
65
|
+
chainId: 84532,
|
|
66
|
+
});
|
|
67
|
+
expect(result.provider).toBe('velodrome');
|
|
68
|
+
});
|
|
69
|
+
it('throws when all providers fail to quote', async () => {
|
|
70
|
+
const failingProvider = createMockSwapProvider({
|
|
71
|
+
marketAllowlist: [{ assets: [USDC, ETH] }],
|
|
72
|
+
});
|
|
73
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'));
|
|
74
|
+
const namespace = new ActionsSwapNamespace({ uniswap: failingProvider }, { routing: 'price' });
|
|
75
|
+
await expect(namespace.getQuote({
|
|
76
|
+
assetIn: USDC,
|
|
77
|
+
assetOut: ETH,
|
|
78
|
+
amountIn: 100,
|
|
79
|
+
chainId: 84532,
|
|
80
|
+
})).rejects.toThrow('All providers failed');
|
|
81
|
+
});
|
|
82
|
+
it('uses explicit provider when specified, ignoring routing', async () => {
|
|
83
|
+
const cheapProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.2, provider: 'uniswap' });
|
|
84
|
+
const expensiveProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.8, provider: 'velodrome' });
|
|
85
|
+
const namespace = new ActionsSwapNamespace({ uniswap: cheapProvider, velodrome: expensiveProvider }, { routing: 'price' });
|
|
86
|
+
const result = await namespace.getQuote({
|
|
87
|
+
assetIn: USDC,
|
|
88
|
+
assetOut: ETH,
|
|
89
|
+
amountIn: 100,
|
|
90
|
+
chainId: 84532,
|
|
91
|
+
provider: 'uniswap',
|
|
92
|
+
});
|
|
93
|
+
// Should use uniswap despite worse price because it was explicitly requested
|
|
94
|
+
expect(result.provider).toBe('uniswap');
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
describe('getQuotes', () => {
|
|
98
|
+
it('returns quotes from all eligible providers sorted by best price', async () => {
|
|
99
|
+
const cheapProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.2, provider: 'uniswap' });
|
|
100
|
+
const expensiveProvider = new MockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { defaultPrice: 1.8, provider: 'velodrome' });
|
|
101
|
+
const namespace = new ActionsSwapNamespace({
|
|
102
|
+
uniswap: cheapProvider,
|
|
103
|
+
velodrome: expensiveProvider,
|
|
104
|
+
});
|
|
105
|
+
const quotes = await namespace.getQuotes({
|
|
106
|
+
assetIn: USDC,
|
|
107
|
+
assetOut: ETH,
|
|
108
|
+
amountIn: 100,
|
|
109
|
+
chainId: 84532,
|
|
110
|
+
});
|
|
111
|
+
expect(quotes).toHaveLength(2);
|
|
112
|
+
expect(quotes[0].provider).toBe('velodrome');
|
|
113
|
+
expect(quotes[1].provider).toBe('uniswap');
|
|
114
|
+
});
|
|
115
|
+
it('skips failed providers and returns successful ones', async () => {
|
|
116
|
+
const workingProvider = createMockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { provider: 'velodrome' });
|
|
117
|
+
const failingProvider = createMockSwapProvider({ marketAllowlist: [{ assets: [USDC, ETH] }] }, { provider: 'uniswap' });
|
|
118
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'));
|
|
119
|
+
const namespace = new ActionsSwapNamespace({
|
|
120
|
+
uniswap: failingProvider,
|
|
121
|
+
velodrome: workingProvider,
|
|
122
|
+
});
|
|
123
|
+
const quotes = await namespace.getQuotes({
|
|
124
|
+
assetIn: USDC,
|
|
125
|
+
assetOut: ETH,
|
|
126
|
+
amountIn: 100,
|
|
127
|
+
chainId: 84532,
|
|
128
|
+
});
|
|
129
|
+
expect(quotes).toHaveLength(1);
|
|
130
|
+
expect(quotes[0].provider).toBe('velodrome');
|
|
131
|
+
});
|
|
132
|
+
it('returns single-element array when explicit provider specified', async () => {
|
|
133
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
134
|
+
provider: 'uniswap',
|
|
135
|
+
});
|
|
136
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
137
|
+
supportedChains: [84532],
|
|
138
|
+
provider: 'velodrome',
|
|
139
|
+
});
|
|
140
|
+
const namespace = new ActionsSwapNamespace({
|
|
141
|
+
uniswap: provider1,
|
|
142
|
+
velodrome: provider2,
|
|
143
|
+
});
|
|
144
|
+
const quotes = await namespace.getQuotes({
|
|
145
|
+
assetIn: USDC,
|
|
146
|
+
assetOut: ETH,
|
|
147
|
+
amountIn: 100,
|
|
148
|
+
chainId: 84532,
|
|
149
|
+
provider: 'uniswap',
|
|
150
|
+
});
|
|
151
|
+
expect(quotes).toHaveLength(1);
|
|
152
|
+
expect(quotes[0].provider).toBe('uniswap');
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('getMarket', () => {
|
|
156
|
+
it('delegates to provider getMarket', async () => {
|
|
157
|
+
const provider = createMockSwapProvider();
|
|
158
|
+
const namespace = new ActionsSwapNamespace({ uniswap: provider });
|
|
159
|
+
const result = await namespace.getMarket({
|
|
160
|
+
poolId: '0xpool123',
|
|
161
|
+
chainId: 84532,
|
|
162
|
+
});
|
|
163
|
+
expect(provider.mockGetMarket).toHaveBeenCalledTimes(1);
|
|
164
|
+
expect(result.marketId.poolId).toBe('0xpool123');
|
|
165
|
+
});
|
|
166
|
+
it('queries specific provider when specified', async () => {
|
|
167
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
168
|
+
provider: 'uniswap',
|
|
169
|
+
});
|
|
170
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
171
|
+
supportedChains: [84532],
|
|
172
|
+
provider: 'velodrome',
|
|
173
|
+
});
|
|
174
|
+
const namespace = new ActionsSwapNamespace({
|
|
175
|
+
uniswap: provider1,
|
|
176
|
+
velodrome: provider2,
|
|
177
|
+
});
|
|
178
|
+
await namespace.getMarket({ poolId: '0xpool123', chainId: 84532 }, 'velodrome');
|
|
179
|
+
expect(provider2.mockGetMarket).toHaveBeenCalledTimes(1);
|
|
180
|
+
expect(provider1.mockGetMarket).not.toHaveBeenCalled();
|
|
181
|
+
});
|
|
182
|
+
it('throws for unknown provider name', async () => {
|
|
183
|
+
const namespace = new ActionsSwapNamespace({
|
|
184
|
+
uniswap: createMockSwapProvider(),
|
|
185
|
+
});
|
|
186
|
+
await expect(namespace.getMarket({ poolId: '0x1', chainId: 84532 }, 'velodrome')).rejects.toThrow('not configured');
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('getMarkets', () => {
|
|
190
|
+
it('aggregates markets from all providers', async () => {
|
|
191
|
+
const provider1 = createMockSwapProvider();
|
|
192
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
193
|
+
supportedChains: [84532],
|
|
194
|
+
});
|
|
195
|
+
const namespace = new ActionsSwapNamespace({
|
|
196
|
+
uniswap: provider1,
|
|
197
|
+
velodrome: provider2,
|
|
198
|
+
});
|
|
199
|
+
const result = await namespace.getMarkets({});
|
|
200
|
+
expect(result.length).toBeGreaterThanOrEqual(1);
|
|
201
|
+
expect(provider1.mockGetMarkets).toHaveBeenCalledTimes(1);
|
|
202
|
+
expect(provider2.mockGetMarkets).toHaveBeenCalledTimes(1);
|
|
203
|
+
});
|
|
204
|
+
it('returns empty array when no providers', async () => {
|
|
205
|
+
const namespace = new ActionsSwapNamespace({});
|
|
206
|
+
const result = await namespace.getMarkets({});
|
|
207
|
+
expect(result).toEqual([]);
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('supportedChainIds', () => {
|
|
211
|
+
it('returns union of chains from all providers', () => {
|
|
212
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
213
|
+
supportedChains: [84532],
|
|
214
|
+
});
|
|
215
|
+
const provider2 = new MockSwapProvider(undefined, { supportedChains: [1, 10] }, new MockChainManager({
|
|
216
|
+
supportedChains: [1, 10],
|
|
217
|
+
}));
|
|
218
|
+
const namespace = new ActionsSwapNamespace({
|
|
219
|
+
uniswap: provider1,
|
|
220
|
+
velodrome: provider2,
|
|
221
|
+
});
|
|
222
|
+
const result = namespace.supportedChainIds();
|
|
223
|
+
expect(result).toContain(84532);
|
|
224
|
+
expect(result).toContain(1);
|
|
225
|
+
expect(result).toContain(10);
|
|
226
|
+
expect(result.length).toBe(3);
|
|
227
|
+
});
|
|
228
|
+
it('deduplicates chain IDs', () => {
|
|
229
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
230
|
+
supportedChains: [84532, 1],
|
|
231
|
+
});
|
|
232
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
233
|
+
supportedChains: [1],
|
|
234
|
+
});
|
|
235
|
+
const namespace = new ActionsSwapNamespace({
|
|
236
|
+
uniswap: provider1,
|
|
237
|
+
velodrome: provider2,
|
|
238
|
+
});
|
|
239
|
+
const result = namespace.supportedChainIds();
|
|
240
|
+
// Should have unique values only
|
|
241
|
+
expect(new Set(result).size).toBe(result.length);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
//# sourceMappingURL=BaseSwapNamespace.spec.js.map
|