@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
|
@@ -43,6 +43,62 @@ describe('SwapProvider', () => {
|
|
|
43
43
|
expect(provider.defaultSlippage).toBe(0.01)
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
+
it('should use settings slippage when provider does not set one', () => {
|
|
47
|
+
const provider = new MockSwapProvider({}, undefined, undefined, {
|
|
48
|
+
defaultSlippage: 0.02,
|
|
49
|
+
})
|
|
50
|
+
expect(provider.defaultSlippage).toBe(0.02)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('should prefer provider slippage over settings', () => {
|
|
54
|
+
const provider = new MockSwapProvider(
|
|
55
|
+
{ defaultSlippage: 0.03 },
|
|
56
|
+
undefined,
|
|
57
|
+
undefined,
|
|
58
|
+
{ defaultSlippage: 0.02 },
|
|
59
|
+
)
|
|
60
|
+
expect(provider.defaultSlippage).toBe(0.03)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('should resolve maxSlippage: provider → settings → default', () => {
|
|
64
|
+
expect(new MockSwapProvider().maxSlippage).toBe(0.5)
|
|
65
|
+
expect(
|
|
66
|
+
new MockSwapProvider({}, undefined, undefined, { maxSlippage: 0.3 })
|
|
67
|
+
.maxSlippage,
|
|
68
|
+
).toBe(0.3)
|
|
69
|
+
expect(
|
|
70
|
+
new MockSwapProvider({ maxSlippage: 0.1 }, undefined, undefined, {
|
|
71
|
+
maxSlippage: 0.3,
|
|
72
|
+
}).maxSlippage,
|
|
73
|
+
).toBe(0.1)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('should resolve quoteExpirationSeconds: provider → settings → default', () => {
|
|
77
|
+
expect(new MockSwapProvider().quoteExpirationSeconds).toBe(60)
|
|
78
|
+
expect(
|
|
79
|
+
new MockSwapProvider({}, undefined, undefined, {
|
|
80
|
+
quoteExpirationSeconds: 120,
|
|
81
|
+
}).quoteExpirationSeconds,
|
|
82
|
+
).toBe(120)
|
|
83
|
+
expect(
|
|
84
|
+
new MockSwapProvider(
|
|
85
|
+
{ quoteExpirationSeconds: 30 },
|
|
86
|
+
undefined,
|
|
87
|
+
undefined,
|
|
88
|
+
{ quoteExpirationSeconds: 120 },
|
|
89
|
+
).quoteExpirationSeconds,
|
|
90
|
+
).toBe(30)
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
it('should resolve permit2ExpirationSeconds: provider → settings → default', () => {
|
|
94
|
+
expect(new MockSwapProvider().permit2ExpirationSeconds).toBe(2_592_000)
|
|
95
|
+
expect(
|
|
96
|
+
new MockSwapProvider({}, undefined, undefined, {
|
|
97
|
+
permit2ExpirationSeconds: 86400,
|
|
98
|
+
}).permit2ExpirationSeconds,
|
|
99
|
+
).toBe(86400)
|
|
100
|
+
})
|
|
101
|
+
|
|
46
102
|
it('should store market allowlist when provided', () => {
|
|
47
103
|
const config: SwapMarketConfig = {
|
|
48
104
|
assets: [MockUSDC, MockWETH],
|
|
@@ -148,7 +204,7 @@ describe('SwapProvider', () => {
|
|
|
148
204
|
|
|
149
205
|
expect(provider.mockExecute).toHaveBeenCalledWith(
|
|
150
206
|
expect.objectContaining({
|
|
151
|
-
|
|
207
|
+
amountInRaw: 100000000n, // 100 * 10^6
|
|
152
208
|
}),
|
|
153
209
|
)
|
|
154
210
|
})
|
|
@@ -169,11 +225,11 @@ describe('SwapProvider', () => {
|
|
|
169
225
|
})
|
|
170
226
|
})
|
|
171
227
|
|
|
172
|
-
describe('
|
|
228
|
+
describe('getQuote()', () => {
|
|
173
229
|
it('should throw if chain not supported', async () => {
|
|
174
230
|
const provider = new MockSwapProvider()
|
|
175
231
|
await expect(
|
|
176
|
-
provider.
|
|
232
|
+
provider.getQuote({
|
|
177
233
|
assetIn: MockUSDC,
|
|
178
234
|
assetOut: MockWETH,
|
|
179
235
|
chainId: 999 as SupportedChainId,
|
|
@@ -181,19 +237,19 @@ describe('SwapProvider', () => {
|
|
|
181
237
|
).rejects.toThrow('Chain 999 is not supported')
|
|
182
238
|
})
|
|
183
239
|
|
|
184
|
-
it('should return
|
|
240
|
+
it('should return quote', async () => {
|
|
185
241
|
const provider = new MockSwapProvider()
|
|
186
|
-
const
|
|
242
|
+
const quote = await provider.getQuote({
|
|
187
243
|
assetIn: MockUSDC,
|
|
188
244
|
assetOut: MockWETH,
|
|
189
245
|
amountIn: 100,
|
|
190
246
|
chainId: 84532 as SupportedChainId,
|
|
191
247
|
})
|
|
192
248
|
|
|
193
|
-
expect(
|
|
194
|
-
expect(
|
|
195
|
-
expect(
|
|
196
|
-
expect(
|
|
249
|
+
expect(quote.price).toBeDefined()
|
|
250
|
+
expect(quote.amountIn).toBeDefined()
|
|
251
|
+
expect(quote.amountOut).toBeDefined()
|
|
252
|
+
expect(quote.route).toBeDefined()
|
|
197
253
|
})
|
|
198
254
|
})
|
|
199
255
|
|
|
@@ -430,6 +486,92 @@ describe('SwapProvider', () => {
|
|
|
430
486
|
).not.toThrow()
|
|
431
487
|
})
|
|
432
488
|
|
|
489
|
+
it('should filter blocked markets from getMarkets()', async () => {
|
|
490
|
+
const allowConfig: SwapMarketConfig = {
|
|
491
|
+
assets: [MockUSDC, MockWETH, MockOP],
|
|
492
|
+
chainId: 84532 as SupportedChainId,
|
|
493
|
+
}
|
|
494
|
+
const blockConfig: SwapMarketConfig = {
|
|
495
|
+
assets: [MockUSDC, MockOP],
|
|
496
|
+
chainId: 84532 as SupportedChainId,
|
|
497
|
+
}
|
|
498
|
+
const provider = new MockSwapProvider({
|
|
499
|
+
marketAllowlist: [allowConfig],
|
|
500
|
+
marketBlocklist: [blockConfig],
|
|
501
|
+
})
|
|
502
|
+
|
|
503
|
+
// Mock _getMarkets to return markets with real assets
|
|
504
|
+
provider.mockGetMarkets.mockResolvedValue([
|
|
505
|
+
{
|
|
506
|
+
marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
|
|
507
|
+
assets: [MockUSDC, MockWETH],
|
|
508
|
+
fee: 0,
|
|
509
|
+
provider: 'uniswap',
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
marketId: { poolId: '0xpool2', chainId: 84532 as SupportedChainId },
|
|
513
|
+
assets: [MockUSDC, MockOP],
|
|
514
|
+
fee: 0,
|
|
515
|
+
provider: 'uniswap',
|
|
516
|
+
},
|
|
517
|
+
])
|
|
518
|
+
|
|
519
|
+
const markets = await provider.getMarkets()
|
|
520
|
+
// USDC/OP is blocklisted, only USDC/WETH should remain
|
|
521
|
+
expect(markets).toHaveLength(1)
|
|
522
|
+
expect(markets[0].assets[0]).toBe(MockUSDC)
|
|
523
|
+
expect(markets[0].assets[1]).toBe(MockWETH)
|
|
524
|
+
})
|
|
525
|
+
|
|
526
|
+
it('should reject blocked market from getMarket()', async () => {
|
|
527
|
+
const blockConfig: SwapMarketConfig = {
|
|
528
|
+
assets: [MockUSDC, MockOP],
|
|
529
|
+
chainId: 84532 as SupportedChainId,
|
|
530
|
+
}
|
|
531
|
+
const provider = new MockSwapProvider({
|
|
532
|
+
marketBlocklist: [blockConfig],
|
|
533
|
+
})
|
|
534
|
+
|
|
535
|
+
// Mock _getMarket to return a blocked market
|
|
536
|
+
provider.mockGetMarket.mockResolvedValue({
|
|
537
|
+
marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
|
|
538
|
+
assets: [MockUSDC, MockOP],
|
|
539
|
+
fee: 0,
|
|
540
|
+
provider: 'uniswap',
|
|
541
|
+
})
|
|
542
|
+
|
|
543
|
+
await expect(
|
|
544
|
+
provider.getMarket({
|
|
545
|
+
poolId: '0xpool1',
|
|
546
|
+
chainId: 84532 as SupportedChainId,
|
|
547
|
+
}),
|
|
548
|
+
).rejects.toThrow('is blocked')
|
|
549
|
+
})
|
|
550
|
+
|
|
551
|
+
it('should allow non-blocked market from getMarket()', async () => {
|
|
552
|
+
const blockConfig: SwapMarketConfig = {
|
|
553
|
+
assets: [MockUSDC, MockOP],
|
|
554
|
+
chainId: 84532 as SupportedChainId,
|
|
555
|
+
}
|
|
556
|
+
const provider = new MockSwapProvider({
|
|
557
|
+
marketBlocklist: [blockConfig],
|
|
558
|
+
})
|
|
559
|
+
|
|
560
|
+
provider.mockGetMarket.mockResolvedValue({
|
|
561
|
+
marketId: { poolId: '0xpool1', chainId: 84532 as SupportedChainId },
|
|
562
|
+
assets: [MockUSDC, MockWETH],
|
|
563
|
+
fee: 0,
|
|
564
|
+
provider: 'uniswap',
|
|
565
|
+
})
|
|
566
|
+
|
|
567
|
+
const market = await provider.getMarket({
|
|
568
|
+
poolId: '0xpool1',
|
|
569
|
+
chainId: 84532 as SupportedChainId,
|
|
570
|
+
})
|
|
571
|
+
expect(market.assets[0]).toBe(MockUSDC)
|
|
572
|
+
expect(market.assets[1]).toBe(MockWETH)
|
|
573
|
+
})
|
|
574
|
+
|
|
433
575
|
it('should scope filter to specific chainId when provided', () => {
|
|
434
576
|
const multiChainUSDC: Asset = {
|
|
435
577
|
...MockUSDC,
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
|
|
3
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
4
|
+
import type { Asset } from '@/types/asset.js'
|
|
5
|
+
import type {
|
|
6
|
+
GetSwapMarketsParams,
|
|
7
|
+
SwapMarket,
|
|
8
|
+
SwapMarketConfig,
|
|
9
|
+
} from '@/types/swap/index.js'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Sentinel address meaning "send output to msg.sender" in Universal Router commands.
|
|
13
|
+
* The Universal Router maps address(1) to msg.sender and address(2) to the router itself.
|
|
14
|
+
* Only valid in Universal Router calldata encoding — do not use as a general-purpose address.
|
|
15
|
+
* Both Uniswap and Velodrome/Aerodrome Universal Router forks use this convention.
|
|
16
|
+
* @see https://github.com/Uniswap/universal-router/blob/main/contracts/libraries/Constants.sol
|
|
17
|
+
*/
|
|
18
|
+
export const UNIVERSAL_ROUTER_MSG_SENDER =
|
|
19
|
+
'0x0000000000000000000000000000000000000001' as Address
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Generate unique asset pairs, optionally filtered to pairs containing a required asset.
|
|
23
|
+
* @param assets - Full list of assets from a market config
|
|
24
|
+
* @param requiredAsset - If set, only pairs including this asset are returned
|
|
25
|
+
*/
|
|
26
|
+
export function assetPairs(
|
|
27
|
+
assets: Asset[],
|
|
28
|
+
requiredAsset?: Asset,
|
|
29
|
+
): Array<[Asset, Asset]> {
|
|
30
|
+
return assets
|
|
31
|
+
.flatMap((a, i) => assets.slice(i + 1).map((b): [Asset, Asset] => [a, b]))
|
|
32
|
+
.filter(
|
|
33
|
+
([a, b]) => !requiredAsset || a === requiredAsset || b === requiredAsset,
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Sort two addresses for deterministic pool ID computation.
|
|
39
|
+
* @returns [lower, higher] addresses
|
|
40
|
+
*/
|
|
41
|
+
export function sortAddressPair(
|
|
42
|
+
addrA: string,
|
|
43
|
+
addrB: string,
|
|
44
|
+
): [string, string] {
|
|
45
|
+
return addrA.toLowerCase() < addrB.toLowerCase()
|
|
46
|
+
? [addrA, addrB]
|
|
47
|
+
: [addrB, addrA]
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Find a specific market by poolId across a set of configs.
|
|
52
|
+
* @param configs - Valid market configs to search
|
|
53
|
+
* @param chainId - Target chain
|
|
54
|
+
* @param poolId - Pool ID to match
|
|
55
|
+
* @param toMarkets - Provider-specific function that expands a config into SwapMarket[]
|
|
56
|
+
* @returns Matching market
|
|
57
|
+
* @throws If no matching market found
|
|
58
|
+
*/
|
|
59
|
+
export function findMarket<T extends SwapMarketConfig>(
|
|
60
|
+
configs: T[],
|
|
61
|
+
chainId: SupportedChainId,
|
|
62
|
+
poolId: string,
|
|
63
|
+
toMarkets: (config: T, chainId: SupportedChainId) => SwapMarket[],
|
|
64
|
+
): SwapMarket {
|
|
65
|
+
for (const config of configs) {
|
|
66
|
+
if (config.chainId !== undefined && config.chainId !== chainId) continue
|
|
67
|
+
const match = toMarkets(config, chainId).find(
|
|
68
|
+
(m) => m.marketId.poolId === poolId,
|
|
69
|
+
)
|
|
70
|
+
if (match) return match
|
|
71
|
+
}
|
|
72
|
+
throw new Error(`Market with poolId ${poolId} not found on chain ${chainId}`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Expand market configs into concrete SwapMarket objects with optional filters.
|
|
77
|
+
* @param options.configs - Valid market configs
|
|
78
|
+
* @param options.filters - Optional chainId and asset filters
|
|
79
|
+
* @param options.supportedChainIds - All chain IDs this provider supports
|
|
80
|
+
* @param options.toMarkets - Provider-specific function that expands a config into SwapMarket[]
|
|
81
|
+
*/
|
|
82
|
+
export function expandMarkets<T extends SwapMarketConfig>(options: {
|
|
83
|
+
configs: T[]
|
|
84
|
+
filters: GetSwapMarketsParams
|
|
85
|
+
supportedChainIds: SupportedChainId[]
|
|
86
|
+
toMarkets: (
|
|
87
|
+
config: T,
|
|
88
|
+
chainId: SupportedChainId,
|
|
89
|
+
asset?: Asset,
|
|
90
|
+
) => SwapMarket[]
|
|
91
|
+
}): SwapMarket[] {
|
|
92
|
+
const { configs, filters, supportedChainIds, toMarkets } = options
|
|
93
|
+
return configs.flatMap((config) => {
|
|
94
|
+
const chainIds = filters.chainId
|
|
95
|
+
? [filters.chainId]
|
|
96
|
+
: config.chainId
|
|
97
|
+
? [config.chainId]
|
|
98
|
+
: supportedChainIds
|
|
99
|
+
|
|
100
|
+
return chainIds.flatMap((chainId) =>
|
|
101
|
+
toMarkets(config, chainId, filters.asset),
|
|
102
|
+
)
|
|
103
|
+
})
|
|
104
|
+
}
|
package/src/swap/index.ts
CHANGED
|
@@ -12,3 +12,8 @@ export type {
|
|
|
12
12
|
UniswapSwapProviderConfig,
|
|
13
13
|
} from '@/swap/providers/uniswap/types.js'
|
|
14
14
|
export { UniswapSwapProvider } from '@/swap/providers/uniswap/UniswapSwapProvider.js'
|
|
15
|
+
export type {
|
|
16
|
+
VelodromeMarketConfig,
|
|
17
|
+
VelodromeSwapProviderConfig,
|
|
18
|
+
} from '@/swap/providers/velodrome/types.js'
|
|
19
|
+
export { VelodromeSwapProvider } from '@/swap/providers/velodrome/VelodromeSwapProvider.js'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseSwapNamespace } from '@/swap/namespaces/BaseSwapNamespace.js'
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Actions swap namespace (read-only, no wallet required)
|
|
5
|
-
*
|
|
4
|
+
* Actions swap namespace (read-only, no wallet required).
|
|
5
|
+
* Provides getQuote(), getMarket(), and getMarkets() for read-only access without a wallet.
|
|
6
6
|
*/
|
|
7
7
|
export class ActionsSwapNamespace extends BaseSwapNamespace {}
|
|
@@ -1,37 +1,185 @@
|
|
|
1
1
|
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
2
|
+
import type { SwapQuoteParamsResolved } from '@/ens/types.js'
|
|
2
3
|
import type { SwapProvider } from '@/swap/core/SwapProvider.js'
|
|
4
|
+
import type { SwapProviderName, SwapSettings } from '@/types/actions.js'
|
|
5
|
+
import type { Asset } from '@/types/asset.js'
|
|
3
6
|
import type {
|
|
4
7
|
GetSwapMarketParams,
|
|
5
8
|
GetSwapMarketsParams,
|
|
6
9
|
SwapMarket,
|
|
7
|
-
SwapPrice,
|
|
8
|
-
SwapPriceParams,
|
|
9
10
|
SwapProviderConfig,
|
|
10
11
|
SwapProviders,
|
|
12
|
+
SwapQuote,
|
|
13
|
+
SwapQuoteParams,
|
|
11
14
|
} from '@/types/swap/index.js'
|
|
15
|
+
import { passthroughResolver, type RecipientResolver } from '@/utils/ens.js'
|
|
12
16
|
|
|
13
17
|
/**
|
|
14
18
|
* Base swap namespace with shared read-only operations
|
|
15
19
|
*/
|
|
16
20
|
export abstract class BaseSwapNamespace {
|
|
17
|
-
|
|
21
|
+
protected readonly resolveRecipient: RecipientResolver
|
|
22
|
+
|
|
23
|
+
constructor(
|
|
24
|
+
protected readonly providers: SwapProviders,
|
|
25
|
+
resolveRecipient?: RecipientResolver,
|
|
26
|
+
protected readonly settings?: SwapSettings,
|
|
27
|
+
) {
|
|
28
|
+
this.resolveRecipient = resolveRecipient ?? passthroughResolver
|
|
29
|
+
}
|
|
18
30
|
|
|
19
31
|
/**
|
|
20
|
-
* Get
|
|
32
|
+
* Get a swap quote with pre-built execution data.
|
|
33
|
+
* When `routing: 'price'` is set in settings and no explicit provider is requested,
|
|
34
|
+
* fetches quotes from all eligible providers in parallel and returns the best price.
|
|
35
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
36
|
+
* @returns The best available SwapQuote
|
|
21
37
|
*/
|
|
22
|
-
async
|
|
23
|
-
const
|
|
24
|
-
|
|
38
|
+
async getQuote(params: SwapQuoteParams): Promise<SwapQuote> {
|
|
39
|
+
const recipient = await this.resolveRecipient(params.recipient)
|
|
40
|
+
const resolved: SwapQuoteParamsResolved = { ...params, recipient }
|
|
41
|
+
|
|
42
|
+
// Explicit provider — skip routing
|
|
43
|
+
if (resolved.provider) {
|
|
44
|
+
return this.resolveProvider(
|
|
45
|
+
resolved.provider,
|
|
46
|
+
resolved.assetIn,
|
|
47
|
+
resolved.assetOut,
|
|
48
|
+
resolved.chainId,
|
|
49
|
+
).getQuote(resolved)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Price routing — quote all eligible providers, return best
|
|
53
|
+
if (this.settings?.routing === 'price') {
|
|
54
|
+
return this.getBestQuote(resolved)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// No routing — resolve single provider via fallback logic
|
|
58
|
+
return this.resolveProvider(
|
|
59
|
+
undefined,
|
|
60
|
+
resolved.assetIn,
|
|
61
|
+
resolved.assetOut,
|
|
62
|
+
resolved.chainId,
|
|
63
|
+
).getQuote(resolved)
|
|
25
64
|
}
|
|
26
65
|
|
|
27
66
|
/**
|
|
28
|
-
*
|
|
29
|
-
* @param params -
|
|
67
|
+
* Fetch quotes from all eligible providers in parallel and return the best.
|
|
68
|
+
* @param params - Quote parameters
|
|
69
|
+
* @returns The quote with the highest amountOut
|
|
70
|
+
* @throws If no provider returns a valid quote
|
|
71
|
+
*/
|
|
72
|
+
private async getBestQuote(
|
|
73
|
+
params: SwapQuoteParamsResolved,
|
|
74
|
+
): Promise<SwapQuote> {
|
|
75
|
+
const quotes = await this.fetchAllQuotes(params)
|
|
76
|
+
|
|
77
|
+
let best: SwapQuote | null = null
|
|
78
|
+
for (const quote of quotes) {
|
|
79
|
+
if (!best || quote.amountOutRaw > best.amountOutRaw) {
|
|
80
|
+
best = quote
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (!best) {
|
|
85
|
+
throw new Error(
|
|
86
|
+
`All providers failed to quote ${params.assetIn.metadata.symbol}/${params.assetOut.metadata.symbol}`,
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return best
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
95
|
+
* Providers that don't support the pair or fail to quote are silently skipped.
|
|
96
|
+
* @param params - Quote parameters
|
|
97
|
+
* @returns Array of successful quotes (may be empty if all providers fail)
|
|
98
|
+
*/
|
|
99
|
+
private async fetchAllQuotes(
|
|
100
|
+
params: SwapQuoteParamsResolved,
|
|
101
|
+
): Promise<SwapQuote[]> {
|
|
102
|
+
const eligible = this.getAllProviders().filter((p) =>
|
|
103
|
+
p.isMarketSupported(params.assetIn, params.assetOut, params.chainId),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if (eligible.length === 0) {
|
|
107
|
+
throw new Error(
|
|
108
|
+
`No provider supports ${params.assetIn.metadata.symbol}/${params.assetOut.metadata.symbol} on chain ${params.chainId}`,
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const results = await Promise.allSettled(
|
|
113
|
+
eligible.map((p) => p.getQuote(params)),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
return results
|
|
117
|
+
.filter(
|
|
118
|
+
(r): r is PromiseFulfilledResult<SwapQuote> => r.status === 'fulfilled',
|
|
119
|
+
)
|
|
120
|
+
.map((r) => r.value)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Fetch quotes from all eligible providers in parallel.
|
|
125
|
+
* Unlike getQuote(), returns all successful quotes instead of just the best.
|
|
126
|
+
* If an explicit provider is specified, returns a single-element array from that provider.
|
|
127
|
+
* @param params - Quote parameters (assets, amounts, chain, optional provider)
|
|
128
|
+
* @returns Array of SwapQuotes sorted by amountOut descending (best first)
|
|
129
|
+
*/
|
|
130
|
+
async getQuotes(params: SwapQuoteParams): Promise<SwapQuote[]> {
|
|
131
|
+
const recipient = await this.resolveRecipient(params.recipient)
|
|
132
|
+
const resolved: SwapQuoteParamsResolved = { ...params, recipient }
|
|
133
|
+
|
|
134
|
+
if (resolved.provider) {
|
|
135
|
+
return [
|
|
136
|
+
await this.resolveProvider(
|
|
137
|
+
resolved.provider,
|
|
138
|
+
resolved.assetIn,
|
|
139
|
+
resolved.assetOut,
|
|
140
|
+
resolved.chainId,
|
|
141
|
+
).getQuote(resolved),
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const quotes = await this.fetchAllQuotes(resolved)
|
|
146
|
+
return quotes.sort((a, b) =>
|
|
147
|
+
a.amountOutRaw > b.amountOutRaw
|
|
148
|
+
? -1
|
|
149
|
+
: a.amountOutRaw < b.amountOutRaw
|
|
150
|
+
? 1
|
|
151
|
+
: 0,
|
|
152
|
+
)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Get a specific swap market by ID.
|
|
157
|
+
* @param params - Market identifier (poolId + chainId)
|
|
158
|
+
* @param provider - Optional provider name to query directly instead of searching all
|
|
30
159
|
* @returns Market information
|
|
31
160
|
*/
|
|
32
|
-
async getMarket(
|
|
33
|
-
|
|
34
|
-
|
|
161
|
+
async getMarket(
|
|
162
|
+
params: GetSwapMarketParams,
|
|
163
|
+
provider?: SwapProviderName,
|
|
164
|
+
): Promise<SwapMarket> {
|
|
165
|
+
if (provider) {
|
|
166
|
+
const named = this.providers[provider]
|
|
167
|
+
if (!named) {
|
|
168
|
+
throw new Error(`Swap provider "${provider}" not configured`)
|
|
169
|
+
}
|
|
170
|
+
return named.getMarket(params)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
for (const p of this.getAllProviders()) {
|
|
174
|
+
try {
|
|
175
|
+
return await p.getMarket(params)
|
|
176
|
+
} catch {
|
|
177
|
+
continue
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
throw new Error(
|
|
181
|
+
`Market with poolId ${params.poolId} not found on chain ${params.chainId}`,
|
|
182
|
+
)
|
|
35
183
|
}
|
|
36
184
|
|
|
37
185
|
/**
|
|
@@ -59,19 +207,68 @@ export abstract class BaseSwapNamespace {
|
|
|
59
207
|
return Array.from(chainIds)
|
|
60
208
|
}
|
|
61
209
|
|
|
62
|
-
// SwapProviders keys are optional (uniswap?,
|
|
210
|
+
// SwapProviders keys are optional (uniswap?, velodrome?, etc.) so filter out unconfigured ones
|
|
63
211
|
protected getAllProviders(): Array<SwapProvider<SwapProviderConfig>> {
|
|
64
212
|
return Object.values(this.providers).filter(
|
|
65
213
|
(p): p is SwapProvider<SwapProviderConfig> => p !== undefined,
|
|
66
214
|
)
|
|
67
215
|
}
|
|
68
216
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
217
|
+
/**
|
|
218
|
+
* Resolve which provider handles a request.
|
|
219
|
+
*
|
|
220
|
+
* Precedence:
|
|
221
|
+
* 1. Explicit `provider` param on the call
|
|
222
|
+
* 2. routing.defaultProvider (when no strategy set)
|
|
223
|
+
* 3. routing.strategy match (market-aware, defaultProvider as tiebreaker)
|
|
224
|
+
* 4. First provider whose allowlist matches
|
|
225
|
+
* 5. First configured provider
|
|
226
|
+
*/
|
|
227
|
+
protected resolveProvider(
|
|
228
|
+
provider: SwapProviderName | undefined,
|
|
229
|
+
assetIn: Asset,
|
|
230
|
+
assetOut: Asset,
|
|
231
|
+
chainId: SupportedChainId,
|
|
232
|
+
): SwapProvider<SwapProviderConfig> {
|
|
233
|
+
const allProviders = this.getAllProviders()
|
|
234
|
+
if (allProviders.length === 0) {
|
|
73
235
|
throw new Error('No swap provider configured')
|
|
74
236
|
}
|
|
75
|
-
|
|
237
|
+
|
|
238
|
+
// 1. Explicit provider param
|
|
239
|
+
if (provider) {
|
|
240
|
+
const named = this.providers[provider]
|
|
241
|
+
if (!named) {
|
|
242
|
+
throw new Error(`Swap provider "${provider}" not configured`)
|
|
243
|
+
}
|
|
244
|
+
return named
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Single provider — no routing needed
|
|
248
|
+
if (allProviders.length === 1) {
|
|
249
|
+
return allProviders[0]
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// 2. defaultProvider with no routing strategy — always use it
|
|
253
|
+
if (this.settings?.defaultProvider && !this.settings.routing) {
|
|
254
|
+
const provider = this.providers[this.settings.defaultProvider]
|
|
255
|
+
if (provider) return provider
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// 3. Match by market allowlist
|
|
259
|
+
for (const p of allProviders) {
|
|
260
|
+
if (p.isMarketSupported(assetIn, assetOut, chainId)) {
|
|
261
|
+
return p
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// 4. Match by chain support
|
|
266
|
+
for (const p of allProviders) {
|
|
267
|
+
if (p.isChainSupported(chainId)) {
|
|
268
|
+
return p
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
return allProviders[0]
|
|
76
273
|
}
|
|
77
274
|
}
|