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