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