@eth-optimism/actions-sdk 0.3.0 → 0.5.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 -6
- package/dist/__mocks__/MockAssets.js.map +1 -1
- package/dist/__tests__/actions.test.js +1 -1
- package/dist/__tests__/actions.test.js.map +1 -1
- package/dist/actions.d.ts +17 -13
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +46 -27
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +215 -4
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +734 -11
- package/dist/constants/assets.js.map +1 -1
- 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/ens/EnsNamespace.d.ts +57 -0
- package/dist/ens/EnsNamespace.d.ts.map +1 -0
- package/dist/ens/EnsNamespace.js +158 -0
- package/dist/ens/EnsNamespace.js.map +1 -0
- package/dist/ens/EnsNamespace.spec.d.ts +2 -0
- package/dist/ens/EnsNamespace.spec.d.ts.map +1 -0
- package/dist/ens/EnsNamespace.spec.js +144 -0
- package/dist/ens/EnsNamespace.spec.js.map +1 -0
- package/dist/ens/errors.d.ts +24 -0
- package/dist/ens/errors.d.ts.map +1 -0
- package/dist/ens/errors.js +35 -0
- package/dist/ens/errors.js.map +1 -0
- package/dist/ens/index.d.ts +4 -0
- package/dist/ens/index.d.ts.map +1 -0
- package/dist/ens/index.js +4 -0
- package/dist/ens/index.js.map +1 -0
- package/dist/ens/types.d.ts +63 -0
- package/dist/ens/types.d.ts.map +1 -0
- package/dist/ens/types.js +14 -0
- package/dist/ens/types.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -4
- 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 -8
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +15 -21
- package/dist/lend/core/LendProvider.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 -42
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/api.d.ts +3 -7
- 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 -63
- 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 +15 -8
- package/dist/services/ChainManager.d.ts.map +1 -1
- package/dist/services/ChainManager.js +9 -0
- package/dist/services/ChainManager.js.map +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts +5 -4
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
- package/dist/services/__mocks__/MockChainManager.js +5 -0
- 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 +20 -8
- package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
- package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
- package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
- package/dist/swap/core/SwapProvider.d.ts +105 -16
- package/dist/swap/core/SwapProvider.d.ts.map +1 -1
- package/dist/swap/core/SwapProvider.js +215 -37
- package/dist/swap/core/SwapProvider.js.map +1 -1
- package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
- package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
- 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 +2 -0
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +1 -0
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
- package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts +50 -8
- package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/BaseSwapNamespace.js +144 -16
- package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts +20 -7
- package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
- package/dist/swap/namespaces/WalletSwapNamespace.js +44 -15
- package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
- package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
- package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +10 -42
- package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
- package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
- package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
- package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
- package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
- package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
- package/dist/swap/providers/uniswap/addresses.js +1 -1
- package/dist/swap/providers/uniswap/addresses.js.map +1 -1
- package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
- package/dist/swap/providers/uniswap/encoding.js +17 -17
- 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 +4 -3
- package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
- package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +50 -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 +420 -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 +44 -9
- 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/lend/base.d.ts +6 -6
- 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 +136 -35
- package/dist/types/swap/base.d.ts.map +1 -1
- package/dist/types/swap/base.js.map +1 -1
- package/dist/utils/approve.d.ts +82 -0
- package/dist/utils/approve.d.ts.map +1 -0
- package/dist/utils/{permit2.js → approve.js} +48 -14
- 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/{permit2.test.js → approve.test.js} +95 -2
- package/dist/utils/approve.test.js.map +1 -0
- package/dist/utils/assets.d.ts +6 -0
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +10 -0
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/ens.d.ts +25 -0
- package/dist/utils/ens.d.ts.map +1 -0
- package/dist/utils/ens.js +53 -0
- package/dist/utils/ens.js.map +1 -0
- package/dist/utils/ens.test.d.ts +2 -0
- package/dist/utils/ens.test.d.ts.map +1 -0
- package/dist/utils/ens.test.js +75 -0
- package/dist/utils/ens.test.js.map +1 -0
- 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 +5 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +10 -0
- package/dist/utils/validation.js.map +1 -1
- 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 -16
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +7 -6
- 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 +3 -10
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- 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 +3 -10
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -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 +6 -8
- 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 +2 -9
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
- 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 +5 -10
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -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 -10
- 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 -10
- 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 +3 -2
- package/src/__mocks__/MockAssets.ts +54 -6
- package/src/__tests__/actions.test.ts +1 -1
- package/src/actions.ts +73 -61
- package/src/constants/assets.ts +781 -10
- package/src/constants/providers.ts +5 -0
- package/src/constants/supportedChains.ts +22 -2
- package/src/ens/EnsNamespace.spec.ts +171 -0
- package/src/ens/EnsNamespace.ts +210 -0
- package/src/ens/errors.ts +45 -0
- package/src/ens/index.ts +12 -0
- package/src/ens/types.ts +76 -0
- package/src/index.ts +59 -8
- package/src/lend/__mocks__/MockLendProvider.ts +8 -3
- package/src/lend/core/LendProvider.ts +27 -28
- 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 -43
- package/src/lend/providers/morpho/api.ts +7 -8
- package/src/lend/providers/morpho/contracts.ts +62 -13
- package/src/lend/providers/morpho/sdk.ts +85 -63
- package/src/services/ChainManager.ts +22 -21
- package/src/services/__mocks__/MockChainManager.ts +12 -7
- package/src/services/tokenBalance.spec.ts +20 -24
- package/src/services/tokenBalance.ts +39 -33
- package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
- package/src/swap/core/SwapProvider.ts +309 -50
- package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
- package/src/swap/core/markets.ts +104 -0
- package/src/swap/index.ts +5 -0
- package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
- package/src/swap/namespaces/BaseSwapNamespace.ts +215 -18
- package/src/swap/namespaces/WalletSwapNamespace.ts +61 -14
- package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +245 -14
- package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
- package/src/swap/providers/uniswap/UniswapSwapProvider.ts +110 -195
- package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
- package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
- package/src/swap/providers/uniswap/addresses.ts +3 -1
- package/src/swap/providers/uniswap/encoding.ts +22 -22
- package/src/swap/providers/uniswap/markets.ts +84 -0
- package/src/swap/providers/uniswap/types.ts +4 -3
- package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +226 -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 +507 -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 +49 -9
- package/src/types/asset.ts +12 -9
- package/src/types/chain.ts +2 -2
- package/src/types/lend/base.ts +6 -6
- package/src/types/lend/contracts.ts +5 -1
- package/src/types/providers.ts +22 -0
- package/src/types/swap/base.ts +150 -36
- package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
- package/src/utils/{permit2.ts → approve.ts} +67 -14
- package/src/utils/assets.ts +14 -0
- package/src/utils/ens.test.ts +104 -0
- package/src/utils/ens.ts +85 -0
- package/src/utils/validateAddresses.test.ts +439 -0
- package/src/utils/validateAddresses.ts +153 -0
- package/src/utils/validation.ts +11 -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 +5 -17
- package/src/wallet/core/providers/hosted/types/index.ts +9 -11
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
- package/src/wallet/core/wallets/abstract/Wallet.ts +18 -22
- 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 +5 -17
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
- package/dist/supported/tokens.d.ts +0 -25
- package/dist/supported/tokens.d.ts.map +0 -1
- package/dist/supported/tokens.js +0 -44
- package/dist/supported/tokens.js.map +0 -1
- package/dist/utils/permit2.d.ts +0 -46
- package/dist/utils/permit2.d.ts.map +0 -1
- package/dist/utils/permit2.js.map +0 -1
- package/dist/utils/permit2.test.d.ts +0 -2
- package/dist/utils/permit2.test.d.ts.map +0 -1
- package/dist/utils/permit2.test.js.map +0 -1
- package/src/supported/tokens.ts +0 -66
|
@@ -1,48 +1,95 @@
|
|
|
1
1
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
2
|
+
import type { SwapExecuteParamsResolved } from '@/ens/types.js'
|
|
3
|
+
import { QUOTE_DISCRIMINATOR } from '@/swap/core/SwapProvider.js'
|
|
2
4
|
import { BaseSwapNamespace } from '@/swap/namespaces/BaseSwapNamespace.js'
|
|
5
|
+
import type { SwapSettings } from '@/types/actions.js'
|
|
3
6
|
import type {
|
|
4
7
|
SwapProviders,
|
|
8
|
+
SwapQuote,
|
|
9
|
+
SwapQuoteParams,
|
|
5
10
|
SwapReceipt,
|
|
6
11
|
SwapTransaction,
|
|
7
12
|
WalletSwapParams,
|
|
8
13
|
} from '@/types/swap/index.js'
|
|
14
|
+
import type { RecipientResolver } from '@/utils/ens.js'
|
|
9
15
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
10
16
|
|
|
11
17
|
/**
|
|
12
|
-
* Wallet swap namespace
|
|
13
|
-
*
|
|
18
|
+
* Wallet swap namespace with full operations including signing.
|
|
19
|
+
* Provides getQuote() for pricing and execute() for swapping tokens.
|
|
14
20
|
*/
|
|
15
21
|
export class WalletSwapNamespace extends BaseSwapNamespace {
|
|
16
22
|
constructor(
|
|
17
23
|
providers: SwapProviders,
|
|
18
24
|
private readonly wallet: Wallet,
|
|
25
|
+
resolveRecipient?: RecipientResolver,
|
|
26
|
+
settings?: SwapSettings,
|
|
19
27
|
) {
|
|
20
|
-
super(providers)
|
|
28
|
+
super(providers, resolveRecipient, settings)
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* @returns Swap receipt with transaction details
|
|
32
|
+
* Get a swap quote with the wallet address as recipient.
|
|
33
|
+
* Ensures calldata is encoded for the real wallet, not a placeholder.
|
|
27
34
|
*/
|
|
28
|
-
async
|
|
29
|
-
|
|
35
|
+
override async getQuote(params: SwapQuoteParams): Promise<SwapQuote> {
|
|
36
|
+
return super.getQuote({
|
|
37
|
+
...params,
|
|
38
|
+
recipient: params.recipient ?? this.wallet.address,
|
|
39
|
+
})
|
|
40
|
+
}
|
|
30
41
|
|
|
31
|
-
|
|
32
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Get quotes from all providers with the wallet address as recipient.
|
|
44
|
+
*/
|
|
45
|
+
override async getQuotes(params: SwapQuoteParams): Promise<SwapQuote[]> {
|
|
46
|
+
return super.getQuotes({
|
|
33
47
|
...params,
|
|
34
|
-
|
|
48
|
+
recipient: params.recipient ?? this.wallet.address,
|
|
35
49
|
})
|
|
50
|
+
}
|
|
36
51
|
|
|
37
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Execute a token swap.
|
|
54
|
+
* Accepts either raw params (re-quotes internally) or a pre-built SwapQuote (skips re-quoting).
|
|
55
|
+
* @param params - Swap parameters or a pre-built SwapQuote from getQuote()
|
|
56
|
+
* @returns Swap receipt with transaction details
|
|
57
|
+
*/
|
|
58
|
+
async execute(params: WalletSwapParams | SwapQuote): Promise<SwapReceipt> {
|
|
59
|
+
// Inject walletAddress — raw params need it for validation,
|
|
60
|
+
// quotes need it for on-chain allowance checks during approval building.
|
|
61
|
+
// Resolve ENS recipient here so providers only ever receive an Address.
|
|
62
|
+
const executeParams: SwapExecuteParamsResolved | SwapQuote =
|
|
63
|
+
QUOTE_DISCRIMINATOR in params
|
|
64
|
+
? { ...params, recipient: this.wallet.address }
|
|
65
|
+
: {
|
|
66
|
+
...params,
|
|
67
|
+
walletAddress: this.wallet.address,
|
|
68
|
+
recipient: await this.resolveRecipient(params.recipient),
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const provider = this.resolveProvider(
|
|
72
|
+
params.provider,
|
|
73
|
+
params.assetIn,
|
|
74
|
+
params.assetOut,
|
|
75
|
+
params.chainId,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
const swapTx = await provider.execute(executeParams)
|
|
38
79
|
const receipt = await this.executeTransaction(swapTx, params.chainId)
|
|
80
|
+
return this.buildReceipt(swapTx, receipt)
|
|
81
|
+
}
|
|
39
82
|
|
|
83
|
+
private buildReceipt(
|
|
84
|
+
swapTx: SwapTransaction,
|
|
85
|
+
receipt: SwapReceipt['receipt'],
|
|
86
|
+
): SwapReceipt {
|
|
40
87
|
return {
|
|
41
88
|
receipt,
|
|
42
89
|
amountIn: swapTx.amountIn,
|
|
43
90
|
amountOut: swapTx.amountOut,
|
|
44
|
-
|
|
45
|
-
|
|
91
|
+
amountInRaw: swapTx.amountInRaw,
|
|
92
|
+
amountOutRaw: swapTx.amountOutRaw,
|
|
46
93
|
assetIn: swapTx.assetIn,
|
|
47
94
|
assetOut: swapTx.assetOut,
|
|
48
95
|
price: swapTx.price,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest'
|
|
2
2
|
|
|
3
3
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
4
|
+
import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
|
|
5
|
+
import type { ChainManager } from '@/services/ChainManager.js'
|
|
4
6
|
import {
|
|
5
7
|
createMockSwapProvider,
|
|
6
8
|
MockSwapProvider,
|
|
@@ -19,27 +21,30 @@ describe('BaseSwapNamespace', () => {
|
|
|
19
21
|
metadata: { name: 'Ether', symbol: 'ETH', decimals: 18 },
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
describe('
|
|
23
|
-
it('delegates to provider
|
|
24
|
+
describe('getQuote', () => {
|
|
25
|
+
it('delegates to provider getQuote', async () => {
|
|
24
26
|
const provider = createMockSwapProvider()
|
|
25
27
|
const namespace = new ActionsSwapNamespace({ uniswap: provider })
|
|
26
28
|
|
|
27
|
-
const result = await namespace.
|
|
29
|
+
const result = await namespace.getQuote({
|
|
28
30
|
assetIn: USDC,
|
|
29
31
|
assetOut: ETH,
|
|
30
32
|
amountIn: 100,
|
|
31
33
|
chainId: 84532 as SupportedChainId,
|
|
32
34
|
})
|
|
33
35
|
|
|
34
|
-
expect(provider.
|
|
35
|
-
expect(result.price).toBe(
|
|
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')
|
|
36
41
|
})
|
|
37
42
|
|
|
38
43
|
it('throws if no provider configured', async () => {
|
|
39
44
|
const namespace = new ActionsSwapNamespace({})
|
|
40
45
|
|
|
41
46
|
await expect(
|
|
42
|
-
namespace.
|
|
47
|
+
namespace.getQuote({
|
|
43
48
|
assetIn: USDC,
|
|
44
49
|
assetOut: ETH,
|
|
45
50
|
amountIn: 100,
|
|
@@ -49,6 +54,194 @@ describe('BaseSwapNamespace', () => {
|
|
|
49
54
|
})
|
|
50
55
|
})
|
|
51
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
|
+
undefined,
|
|
71
|
+
{ routing: 'price' },
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
const result = await namespace.getQuote({
|
|
75
|
+
assetIn: USDC,
|
|
76
|
+
assetOut: ETH,
|
|
77
|
+
amountIn: 100,
|
|
78
|
+
chainId: 84532 as SupportedChainId,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// Should pick velodrome because 1.8 > 1.2 (higher amountOut)
|
|
82
|
+
expect(result.provider).toBe('velodrome')
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('skips providers that fail to quote', async () => {
|
|
86
|
+
const workingProvider = createMockSwapProvider(
|
|
87
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
88
|
+
{ provider: 'velodrome' },
|
|
89
|
+
)
|
|
90
|
+
const failingProvider = createMockSwapProvider(
|
|
91
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
92
|
+
{ provider: 'uniswap' },
|
|
93
|
+
)
|
|
94
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('RPC failure'))
|
|
95
|
+
|
|
96
|
+
const namespace = new ActionsSwapNamespace(
|
|
97
|
+
{ uniswap: failingProvider, velodrome: workingProvider },
|
|
98
|
+
undefined,
|
|
99
|
+
{ routing: 'price' },
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
const result = await namespace.getQuote({
|
|
103
|
+
assetIn: USDC,
|
|
104
|
+
assetOut: ETH,
|
|
105
|
+
amountIn: 100,
|
|
106
|
+
chainId: 84532 as SupportedChainId,
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
expect(result.provider).toBe('velodrome')
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('throws when all providers fail to quote', async () => {
|
|
113
|
+
const failingProvider = createMockSwapProvider({
|
|
114
|
+
marketAllowlist: [{ assets: [USDC, ETH] }],
|
|
115
|
+
})
|
|
116
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
|
|
117
|
+
|
|
118
|
+
const namespace = new ActionsSwapNamespace(
|
|
119
|
+
{ uniswap: failingProvider },
|
|
120
|
+
undefined,
|
|
121
|
+
{ routing: 'price' },
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
await expect(
|
|
125
|
+
namespace.getQuote({
|
|
126
|
+
assetIn: USDC,
|
|
127
|
+
assetOut: ETH,
|
|
128
|
+
amountIn: 100,
|
|
129
|
+
chainId: 84532 as SupportedChainId,
|
|
130
|
+
}),
|
|
131
|
+
).rejects.toThrow('All providers failed')
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('uses explicit provider when specified, ignoring routing', async () => {
|
|
135
|
+
const cheapProvider = new MockSwapProvider(
|
|
136
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
137
|
+
{ defaultPrice: 1.2, provider: 'uniswap' },
|
|
138
|
+
)
|
|
139
|
+
const expensiveProvider = new MockSwapProvider(
|
|
140
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
141
|
+
{ defaultPrice: 1.8, provider: 'velodrome' },
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
const namespace = new ActionsSwapNamespace(
|
|
145
|
+
{ uniswap: cheapProvider, velodrome: expensiveProvider },
|
|
146
|
+
undefined,
|
|
147
|
+
{ routing: 'price' },
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
const result = await namespace.getQuote({
|
|
151
|
+
assetIn: USDC,
|
|
152
|
+
assetOut: ETH,
|
|
153
|
+
amountIn: 100,
|
|
154
|
+
chainId: 84532 as SupportedChainId,
|
|
155
|
+
provider: 'uniswap',
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
// Should use uniswap despite worse price because it was explicitly requested
|
|
159
|
+
expect(result.provider).toBe('uniswap')
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
describe('getQuotes', () => {
|
|
164
|
+
it('returns quotes from all eligible providers sorted by best price', async () => {
|
|
165
|
+
const cheapProvider = new MockSwapProvider(
|
|
166
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
167
|
+
{ defaultPrice: 1.2, provider: 'uniswap' },
|
|
168
|
+
)
|
|
169
|
+
const expensiveProvider = new MockSwapProvider(
|
|
170
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
171
|
+
{ defaultPrice: 1.8, provider: 'velodrome' },
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
const namespace = new ActionsSwapNamespace({
|
|
175
|
+
uniswap: cheapProvider,
|
|
176
|
+
velodrome: expensiveProvider,
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
const quotes = await namespace.getQuotes({
|
|
180
|
+
assetIn: USDC,
|
|
181
|
+
assetOut: ETH,
|
|
182
|
+
amountIn: 100,
|
|
183
|
+
chainId: 84532 as SupportedChainId,
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
expect(quotes).toHaveLength(2)
|
|
187
|
+
expect(quotes[0].provider).toBe('velodrome')
|
|
188
|
+
expect(quotes[1].provider).toBe('uniswap')
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
it('skips failed providers and returns successful ones', async () => {
|
|
192
|
+
const workingProvider = createMockSwapProvider(
|
|
193
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
194
|
+
{ provider: 'velodrome' },
|
|
195
|
+
)
|
|
196
|
+
const failingProvider = createMockSwapProvider(
|
|
197
|
+
{ marketAllowlist: [{ assets: [USDC, ETH] }] },
|
|
198
|
+
{ provider: 'uniswap' },
|
|
199
|
+
)
|
|
200
|
+
failingProvider.mockGetQuote.mockRejectedValue(new Error('fail'))
|
|
201
|
+
|
|
202
|
+
const namespace = new ActionsSwapNamespace({
|
|
203
|
+
uniswap: failingProvider,
|
|
204
|
+
velodrome: workingProvider,
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
const quotes = await namespace.getQuotes({
|
|
208
|
+
assetIn: USDC,
|
|
209
|
+
assetOut: ETH,
|
|
210
|
+
amountIn: 100,
|
|
211
|
+
chainId: 84532 as SupportedChainId,
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
expect(quotes).toHaveLength(1)
|
|
215
|
+
expect(quotes[0].provider).toBe('velodrome')
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
it('returns single-element array when explicit provider specified', async () => {
|
|
219
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
220
|
+
provider: 'uniswap',
|
|
221
|
+
})
|
|
222
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
223
|
+
supportedChains: [84532 as SupportedChainId],
|
|
224
|
+
provider: 'velodrome',
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
const namespace = new ActionsSwapNamespace({
|
|
228
|
+
uniswap: provider1,
|
|
229
|
+
velodrome: provider2,
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
const quotes = await namespace.getQuotes({
|
|
233
|
+
assetIn: USDC,
|
|
234
|
+
assetOut: ETH,
|
|
235
|
+
amountIn: 100,
|
|
236
|
+
chainId: 84532 as SupportedChainId,
|
|
237
|
+
provider: 'uniswap',
|
|
238
|
+
})
|
|
239
|
+
|
|
240
|
+
expect(quotes).toHaveLength(1)
|
|
241
|
+
expect(quotes[0].provider).toBe('uniswap')
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
|
|
52
245
|
describe('getMarket', () => {
|
|
53
246
|
it('delegates to provider getMarket', async () => {
|
|
54
247
|
const provider = createMockSwapProvider()
|
|
@@ -62,6 +255,42 @@ describe('BaseSwapNamespace', () => {
|
|
|
62
255
|
expect(provider.mockGetMarket).toHaveBeenCalledTimes(1)
|
|
63
256
|
expect(result.marketId.poolId).toBe('0xpool123')
|
|
64
257
|
})
|
|
258
|
+
|
|
259
|
+
it('queries specific provider when specified', async () => {
|
|
260
|
+
const provider1 = createMockSwapProvider(undefined, {
|
|
261
|
+
provider: 'uniswap',
|
|
262
|
+
})
|
|
263
|
+
const provider2 = new MockSwapProvider(undefined, {
|
|
264
|
+
supportedChains: [84532 as SupportedChainId],
|
|
265
|
+
provider: 'velodrome',
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
const namespace = new ActionsSwapNamespace({
|
|
269
|
+
uniswap: provider1,
|
|
270
|
+
velodrome: provider2,
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
await namespace.getMarket(
|
|
274
|
+
{ poolId: '0xpool123', chainId: 84532 as SupportedChainId },
|
|
275
|
+
'velodrome',
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
expect(provider2.mockGetMarket).toHaveBeenCalledTimes(1)
|
|
279
|
+
expect(provider1.mockGetMarket).not.toHaveBeenCalled()
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
it('throws for unknown provider name', async () => {
|
|
283
|
+
const namespace = new ActionsSwapNamespace({
|
|
284
|
+
uniswap: createMockSwapProvider(),
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
await expect(
|
|
288
|
+
namespace.getMarket(
|
|
289
|
+
{ poolId: '0x1', chainId: 84532 as SupportedChainId },
|
|
290
|
+
'velodrome',
|
|
291
|
+
),
|
|
292
|
+
).rejects.toThrow('not configured')
|
|
293
|
+
})
|
|
65
294
|
})
|
|
66
295
|
|
|
67
296
|
describe('getMarkets', () => {
|
|
@@ -73,11 +302,9 @@ describe('BaseSwapNamespace', () => {
|
|
|
73
302
|
|
|
74
303
|
const namespace = new ActionsSwapNamespace({
|
|
75
304
|
uniswap: provider1,
|
|
305
|
+
velodrome: provider2,
|
|
76
306
|
})
|
|
77
307
|
|
|
78
|
-
// Add second provider manually for testing aggregation
|
|
79
|
-
;(namespace as any).providers.oneInch = provider2
|
|
80
|
-
|
|
81
308
|
const result = await namespace.getMarkets({})
|
|
82
309
|
|
|
83
310
|
expect(result.length).toBeGreaterThanOrEqual(1)
|
|
@@ -99,14 +326,18 @@ describe('BaseSwapNamespace', () => {
|
|
|
99
326
|
const provider1 = createMockSwapProvider(undefined, {
|
|
100
327
|
supportedChains: [84532 as SupportedChainId],
|
|
101
328
|
})
|
|
102
|
-
const provider2 = new MockSwapProvider(
|
|
103
|
-
|
|
104
|
-
|
|
329
|
+
const provider2 = new MockSwapProvider(
|
|
330
|
+
undefined,
|
|
331
|
+
{ supportedChains: [1 as SupportedChainId, 10 as SupportedChainId] },
|
|
332
|
+
new MockChainManager({
|
|
333
|
+
supportedChains: [1 as SupportedChainId, 10 as SupportedChainId],
|
|
334
|
+
}) as unknown as ChainManager,
|
|
335
|
+
)
|
|
105
336
|
|
|
106
337
|
const namespace = new ActionsSwapNamespace({
|
|
107
338
|
uniswap: provider1,
|
|
339
|
+
velodrome: provider2,
|
|
108
340
|
})
|
|
109
|
-
;(namespace as any).providers.oneInch = provider2
|
|
110
341
|
|
|
111
342
|
const result = namespace.supportedChainIds()
|
|
112
343
|
|
|
@@ -126,8 +357,8 @@ describe('BaseSwapNamespace', () => {
|
|
|
126
357
|
|
|
127
358
|
const namespace = new ActionsSwapNamespace({
|
|
128
359
|
uniswap: provider1,
|
|
360
|
+
velodrome: provider2,
|
|
129
361
|
})
|
|
130
|
-
;(namespace as any).providers.oneInch = provider2
|
|
131
362
|
|
|
132
363
|
const result = namespace.supportedChainIds()
|
|
133
364
|
|
|
@@ -45,7 +45,7 @@ describe('WalletSwapNamespace', () => {
|
|
|
45
45
|
expect(provider.mockExecute).toHaveBeenCalledTimes(1)
|
|
46
46
|
expect(wallet.send).toHaveBeenCalledTimes(1)
|
|
47
47
|
expect(wallet.sendBatch).not.toHaveBeenCalled()
|
|
48
|
-
expect(result.price).toBe(
|
|
48
|
+
expect(result.price).toBe(1.5)
|
|
49
49
|
expect(result.assetIn).toBe(USDC)
|
|
50
50
|
expect(result.assetOut).toBe(ETH)
|
|
51
51
|
})
|
|
@@ -59,11 +59,11 @@ describe('WalletSwapNamespace', () => {
|
|
|
59
59
|
provider.mockExecute.mockResolvedValueOnce({
|
|
60
60
|
amountIn: 100,
|
|
61
61
|
amountOut: 1.5,
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
amountInRaw: 100000000n,
|
|
63
|
+
amountOutRaw: 1500000000000000000n,
|
|
64
64
|
assetIn: USDC,
|
|
65
65
|
assetOut: ETH,
|
|
66
|
-
price:
|
|
66
|
+
price: 1.5,
|
|
67
67
|
priceImpact: 0.001,
|
|
68
68
|
transactionData: {
|
|
69
69
|
tokenApproval: {
|
|
@@ -131,24 +131,119 @@ describe('WalletSwapNamespace', () => {
|
|
|
131
131
|
}),
|
|
132
132
|
).rejects.toThrow('No swap provider configured')
|
|
133
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
|
+
})
|
|
134
157
|
})
|
|
135
158
|
|
|
136
|
-
describe('
|
|
137
|
-
it('
|
|
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 () => {
|
|
138
197
|
const provider = createMockSwapProvider()
|
|
139
198
|
const wallet = createMockWallet()
|
|
140
199
|
const namespace = new WalletSwapNamespace({ uniswap: provider }, wallet)
|
|
141
200
|
|
|
142
|
-
|
|
201
|
+
// Get quote without wallet (simulates ActionsSwapNamespace quote)
|
|
202
|
+
const quote = await provider.getQuote({
|
|
143
203
|
assetIn: USDC,
|
|
144
204
|
assetOut: ETH,
|
|
145
205
|
amountIn: 100,
|
|
146
206
|
chainId: 84532 as SupportedChainId,
|
|
207
|
+
// No recipient — uses placeholder
|
|
147
208
|
})
|
|
148
209
|
|
|
149
|
-
|
|
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)
|
|
150
220
|
})
|
|
151
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', () => {
|
|
152
247
|
it('has getMarkets method from BaseSwapNamespace', async () => {
|
|
153
248
|
const provider = createMockSwapProvider()
|
|
154
249
|
const wallet = createMockWallet()
|