@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
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem';
|
|
2
|
+
import type { TransactionData } from '../types/transaction.js';
|
|
3
|
+
/** Default Permit2 approval expiry: 30 days in seconds */
|
|
4
|
+
export declare const DEFAULT_PERMIT2_EXPIRY_SECONDS: number;
|
|
5
|
+
/**
|
|
6
|
+
* Permit2 allowance info
|
|
7
|
+
*/
|
|
8
|
+
export interface Permit2Allowance {
|
|
9
|
+
amount: bigint;
|
|
10
|
+
expiration: number;
|
|
11
|
+
nonce: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check Permit2 allowance for a token/spender pair
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkPermit2Allowance(params: {
|
|
17
|
+
publicClient: PublicClient;
|
|
18
|
+
permit2Address: Address;
|
|
19
|
+
owner: Address;
|
|
20
|
+
token: Address;
|
|
21
|
+
spender: Address;
|
|
22
|
+
}): Promise<Permit2Allowance>;
|
|
23
|
+
/**
|
|
24
|
+
* Build ERC20 token approval transaction to Permit2.
|
|
25
|
+
* Uses maxUint256 — the Uniswap-canonical pattern.
|
|
26
|
+
* Permit2 is immutable with no owner; spending is scoped by its own allowance system.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildTokenApprovalTx(token: Address, permit2Address: Address): TransactionData;
|
|
29
|
+
/**
|
|
30
|
+
* Build Permit2 approval transaction for a spender
|
|
31
|
+
*/
|
|
32
|
+
export declare function buildPermit2ApprovalTx(params: {
|
|
33
|
+
permit2Address: Address;
|
|
34
|
+
token: Address;
|
|
35
|
+
spender: Address;
|
|
36
|
+
amount: bigint;
|
|
37
|
+
expirySeconds?: number;
|
|
38
|
+
}): TransactionData;
|
|
39
|
+
/**
|
|
40
|
+
* Check ERC20 token allowance
|
|
41
|
+
*/
|
|
42
|
+
export declare function checkTokenAllowance(params: {
|
|
43
|
+
publicClient: PublicClient;
|
|
44
|
+
token: Address;
|
|
45
|
+
owner: Address;
|
|
46
|
+
spender: Address;
|
|
47
|
+
}): Promise<bigint>;
|
|
48
|
+
/**
|
|
49
|
+
* Build an ERC20 approve transaction.
|
|
50
|
+
* @param token - ERC20 token address
|
|
51
|
+
* @param spender - Address to approve
|
|
52
|
+
* @param amount - Amount to approve
|
|
53
|
+
* @returns Transaction data for the approval
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildErc20ApprovalTx(token: Address, spender: Address, amount: bigint): TransactionData;
|
|
56
|
+
/**
|
|
57
|
+
* Compute how much additional ERC20 approval is needed.
|
|
58
|
+
* Returns 0n if current allowance is sufficient.
|
|
59
|
+
* @param params - Token, owner, spender, required amount, and public client
|
|
60
|
+
* @returns The deficit (required - current), or 0n if already sufficient
|
|
61
|
+
*/
|
|
62
|
+
export declare function getApprovalDeficit(params: {
|
|
63
|
+
publicClient: PublicClient;
|
|
64
|
+
token: Address;
|
|
65
|
+
owner: Address;
|
|
66
|
+
spender: Address;
|
|
67
|
+
amount: bigint;
|
|
68
|
+
}): Promise<bigint>;
|
|
69
|
+
/**
|
|
70
|
+
* Build an ERC20 approval transaction only if needed, approving only the deficit.
|
|
71
|
+
* Checks the current on-chain allowance, returns undefined if already sufficient.
|
|
72
|
+
* @param params - Token, owner, spender, required amount, and public client
|
|
73
|
+
* @returns Approval transaction for the deficit amount, or undefined if allowance is sufficient
|
|
74
|
+
*/
|
|
75
|
+
export declare function buildApprovalTxIfNeeded(params: {
|
|
76
|
+
publicClient: PublicClient;
|
|
77
|
+
token: Address;
|
|
78
|
+
owner: Address;
|
|
79
|
+
spender: Address;
|
|
80
|
+
amount: bigint;
|
|
81
|
+
}): Promise<TransactionData | undefined>;
|
|
82
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/utils/approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D,0DAA0D;AAC1D,eAAO,MAAM,8BAA8B,QAAoB,CAAA;AAmC/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAe5B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,OAAO,GACtB,eAAe,CAEjB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,cAAc,EAAE,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,GAAG,eAAe,CAiBlB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB,GAAG,OAAO,CAAC,MAAM,CAAC,CASlB;AAMD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,eAAe,CAUjB;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAC/C,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,YAAY,EAAE,YAAY,CAAA;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAKvC"}
|
|
@@ -51,21 +51,12 @@ export async function checkPermit2Allowance(params) {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Build ERC20 token approval transaction to Permit2
|
|
54
|
+
* Build ERC20 token approval transaction to Permit2.
|
|
55
|
+
* Uses maxUint256 — the Uniswap-canonical pattern.
|
|
56
|
+
* Permit2 is immutable with no owner; spending is scoped by its own allowance system.
|
|
55
57
|
*/
|
|
56
58
|
export function buildTokenApprovalTx(token, permit2Address) {
|
|
57
|
-
|
|
58
|
-
abi: erc20Abi,
|
|
59
|
-
functionName: 'approve',
|
|
60
|
-
// ERC20 -> Permit2: maxUint256 is the Uniswap-canonical pattern.
|
|
61
|
-
// Permit2 is immutable with no owner — spending is scoped by its own allowance system.
|
|
62
|
-
args: [permit2Address, maxUint256],
|
|
63
|
-
});
|
|
64
|
-
return {
|
|
65
|
-
to: token,
|
|
66
|
-
data,
|
|
67
|
-
value: 0n,
|
|
68
|
-
};
|
|
59
|
+
return buildErc20ApprovalTx(token, permit2Address, maxUint256);
|
|
69
60
|
}
|
|
70
61
|
/**
|
|
71
62
|
* Build Permit2 approval transaction for a spender
|
|
@@ -97,4 +88,47 @@ export async function checkTokenAllowance(params) {
|
|
|
97
88
|
args: [owner, spender],
|
|
98
89
|
});
|
|
99
90
|
}
|
|
100
|
-
|
|
91
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
92
|
+
// Generic ERC20 approval utilities
|
|
93
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
94
|
+
/**
|
|
95
|
+
* Build an ERC20 approve transaction.
|
|
96
|
+
* @param token - ERC20 token address
|
|
97
|
+
* @param spender - Address to approve
|
|
98
|
+
* @param amount - Amount to approve
|
|
99
|
+
* @returns Transaction data for the approval
|
|
100
|
+
*/
|
|
101
|
+
export function buildErc20ApprovalTx(token, spender, amount) {
|
|
102
|
+
return {
|
|
103
|
+
to: token,
|
|
104
|
+
data: encodeFunctionData({
|
|
105
|
+
abi: erc20Abi,
|
|
106
|
+
functionName: 'approve',
|
|
107
|
+
args: [spender, amount],
|
|
108
|
+
}),
|
|
109
|
+
value: 0n,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Compute how much additional ERC20 approval is needed.
|
|
114
|
+
* Returns 0n if current allowance is sufficient.
|
|
115
|
+
* @param params - Token, owner, spender, required amount, and public client
|
|
116
|
+
* @returns The deficit (required - current), or 0n if already sufficient
|
|
117
|
+
*/
|
|
118
|
+
export async function getApprovalDeficit(params) {
|
|
119
|
+
const current = await checkTokenAllowance(params);
|
|
120
|
+
return current >= params.amount ? 0n : params.amount - current;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Build an ERC20 approval transaction only if needed, approving only the deficit.
|
|
124
|
+
* Checks the current on-chain allowance, returns undefined if already sufficient.
|
|
125
|
+
* @param params - Token, owner, spender, required amount, and public client
|
|
126
|
+
* @returns Approval transaction for the deficit amount, or undefined if allowance is sufficient
|
|
127
|
+
*/
|
|
128
|
+
export async function buildApprovalTxIfNeeded(params) {
|
|
129
|
+
const deficit = await getApprovalDeficit(params);
|
|
130
|
+
return deficit > 0n
|
|
131
|
+
? buildErc20ApprovalTx(params.token, params.spender, deficit)
|
|
132
|
+
: undefined;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/utils/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.test.d.ts","sourceRoot":"","sources":["../../src/utils/approve.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { decodeFunctionData } from 'viem';
|
|
2
2
|
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
-
import { buildPermit2ApprovalTx, buildTokenApprovalTx, checkPermit2Allowance, checkTokenAllowance, DEFAULT_PERMIT2_EXPIRY_SECONDS, } from './
|
|
3
|
+
import { buildApprovalTxIfNeeded, buildErc20ApprovalTx, buildPermit2ApprovalTx, buildTokenApprovalTx, checkPermit2Allowance, checkTokenAllowance, DEFAULT_PERMIT2_EXPIRY_SECONDS, getApprovalDeficit, } from './approve.js';
|
|
4
4
|
const PERMIT2_ABI = [
|
|
5
5
|
{
|
|
6
6
|
name: 'approve',
|
|
@@ -107,4 +107,97 @@ describe('buildPermit2ApprovalTx', () => {
|
|
|
107
107
|
expect(Number(expiration)).toBeLessThan(before + DEFAULT_PERMIT2_EXPIRY_SECONDS);
|
|
108
108
|
});
|
|
109
109
|
});
|
|
110
|
-
|
|
110
|
+
describe('buildErc20ApprovalTx', () => {
|
|
111
|
+
it('builds approval for exact amount', () => {
|
|
112
|
+
const tx = buildErc20ApprovalTx(TOKEN, SPENDER, 500000n);
|
|
113
|
+
expect(tx.to).toBe(TOKEN);
|
|
114
|
+
expect(tx.value).toBe(0n);
|
|
115
|
+
expect(tx.data).toMatch(/^0x/);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
describe('getApprovalDeficit', () => {
|
|
119
|
+
it('returns 0n when allowance is sufficient', async () => {
|
|
120
|
+
const publicClient = {
|
|
121
|
+
readContract: vi.fn().mockResolvedValue(1000000n),
|
|
122
|
+
};
|
|
123
|
+
const deficit = await getApprovalDeficit({
|
|
124
|
+
publicClient,
|
|
125
|
+
token: TOKEN,
|
|
126
|
+
owner: OWNER,
|
|
127
|
+
spender: SPENDER,
|
|
128
|
+
amount: 500000n,
|
|
129
|
+
});
|
|
130
|
+
expect(deficit).toBe(0n);
|
|
131
|
+
});
|
|
132
|
+
it('returns deficit when allowance is insufficient', async () => {
|
|
133
|
+
const publicClient = {
|
|
134
|
+
readContract: vi.fn().mockResolvedValue(300000n),
|
|
135
|
+
};
|
|
136
|
+
const deficit = await getApprovalDeficit({
|
|
137
|
+
publicClient,
|
|
138
|
+
token: TOKEN,
|
|
139
|
+
owner: OWNER,
|
|
140
|
+
spender: SPENDER,
|
|
141
|
+
amount: 500000n,
|
|
142
|
+
});
|
|
143
|
+
expect(deficit).toBe(200000n);
|
|
144
|
+
});
|
|
145
|
+
it('returns full amount when allowance is zero', async () => {
|
|
146
|
+
const publicClient = {
|
|
147
|
+
readContract: vi.fn().mockResolvedValue(0n),
|
|
148
|
+
};
|
|
149
|
+
const deficit = await getApprovalDeficit({
|
|
150
|
+
publicClient,
|
|
151
|
+
token: TOKEN,
|
|
152
|
+
owner: OWNER,
|
|
153
|
+
spender: SPENDER,
|
|
154
|
+
amount: 500000n,
|
|
155
|
+
});
|
|
156
|
+
expect(deficit).toBe(500000n);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('buildApprovalTxIfNeeded', () => {
|
|
160
|
+
it('returns undefined when allowance is sufficient', async () => {
|
|
161
|
+
const publicClient = {
|
|
162
|
+
readContract: vi.fn().mockResolvedValue(1000000n),
|
|
163
|
+
};
|
|
164
|
+
const tx = await buildApprovalTxIfNeeded({
|
|
165
|
+
publicClient,
|
|
166
|
+
token: TOKEN,
|
|
167
|
+
owner: OWNER,
|
|
168
|
+
spender: SPENDER,
|
|
169
|
+
amount: 500000n,
|
|
170
|
+
});
|
|
171
|
+
expect(tx).toBeUndefined();
|
|
172
|
+
});
|
|
173
|
+
it('returns approval tx for the deficit only', async () => {
|
|
174
|
+
const publicClient = {
|
|
175
|
+
readContract: vi.fn().mockResolvedValue(300000n),
|
|
176
|
+
};
|
|
177
|
+
const tx = await buildApprovalTxIfNeeded({
|
|
178
|
+
publicClient,
|
|
179
|
+
token: TOKEN,
|
|
180
|
+
owner: OWNER,
|
|
181
|
+
spender: SPENDER,
|
|
182
|
+
amount: 500000n,
|
|
183
|
+
});
|
|
184
|
+
expect(tx).toBeDefined();
|
|
185
|
+
expect(tx.to).toBe(TOKEN);
|
|
186
|
+
expect(tx.value).toBe(0n);
|
|
187
|
+
});
|
|
188
|
+
it('returns approval for full amount when allowance is zero', async () => {
|
|
189
|
+
const publicClient = {
|
|
190
|
+
readContract: vi.fn().mockResolvedValue(0n),
|
|
191
|
+
};
|
|
192
|
+
const tx = await buildApprovalTxIfNeeded({
|
|
193
|
+
publicClient,
|
|
194
|
+
token: TOKEN,
|
|
195
|
+
owner: OWNER,
|
|
196
|
+
spender: SPENDER,
|
|
197
|
+
amount: 500000n,
|
|
198
|
+
});
|
|
199
|
+
expect(tx).toBeDefined();
|
|
200
|
+
expect(tx.to).toBe(TOKEN);
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=approve.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.test.js","sourceRoot":"","sources":["../../src/utils/approve.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/assets.d.ts
CHANGED
|
@@ -35,4 +35,10 @@ export declare function isAssetSupportedOnChain(asset: Asset, chainId: Supported
|
|
|
35
35
|
* @throws Error if asset is not supported on the chain or is a native asset
|
|
36
36
|
*/
|
|
37
37
|
export declare function getAssetAddress(asset: Asset, chainId: SupportedChainId): Address;
|
|
38
|
+
/**
|
|
39
|
+
* Get all non-native contract addresses for an asset across all chains, lowercased.
|
|
40
|
+
* @param asset - Asset to extract addresses from
|
|
41
|
+
* @returns Array of lowercased contract addresses
|
|
42
|
+
*/
|
|
43
|
+
export declare function getAllAssetAddresses(asset: Asset): string[];
|
|
38
44
|
//# sourceMappingURL=assets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;AACtE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAAA;AASrB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAaT"}
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;AACtE,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAAA;AASrB;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW1E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAaT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAO3D"}
|
package/dist/utils/assets.js
CHANGED
|
@@ -54,4 +54,14 @@ export function getAssetAddress(asset, chainId) {
|
|
|
54
54
|
}
|
|
55
55
|
return address;
|
|
56
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Get all non-native contract addresses for an asset across all chains, lowercased.
|
|
59
|
+
* @param asset - Asset to extract addresses from
|
|
60
|
+
* @returns Array of lowercased contract addresses
|
|
61
|
+
*/
|
|
62
|
+
export function getAllAssetAddresses(asset) {
|
|
63
|
+
return Object.values(asset.address)
|
|
64
|
+
.filter((addr) => addr !== undefined && addr !== 'native')
|
|
65
|
+
.map((addr) => addr.toLowerCase());
|
|
66
|
+
}
|
|
57
67
|
//# sourceMappingURL=assets.js.map
|
package/dist/utils/assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAcjC,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,MAA0B;IAE1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAChE,oCAAoC;IACpC,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;IAEvC,+CAA+C;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAY,EACZ,OAAyB;IAEzB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,OAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,8BAA8B,OAAO,EAAE,CACtE,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,iDAAiD,CAChF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/utils/assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AAcjC,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,MAA0B;IAE1B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC1C,OAAO,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAChE,oCAAoC;IACpC,MAAM,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAClC,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;IAEvC,+CAA+C;IAC/C,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,aAAa,EAAE,CAAA;IAE9C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAY,EACZ,OAAyB;IAEzB,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,OAAyB;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,8BAA8B,OAAO,EAAE,CACtE,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,iDAAiD,CAChF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAY;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;SAChC,MAAM,CACL,CAAC,IAAI,EAAsD,EAAE,CAC3D,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAC1C;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem';
|
|
2
|
+
import type { EnsName } from '../ens/types.js';
|
|
3
|
+
export { type EnsName, isEnsName } from '../ens/types.js';
|
|
4
|
+
/** Resolves an ENS name or address to a checksummed hex Address, or returns undefined. */
|
|
5
|
+
export type RecipientResolver = (recipient: Address | EnsName | undefined) => Promise<Address | undefined>;
|
|
6
|
+
/** Pass-through resolver used when no ENS resolution is configured. Throws on ENS names. */
|
|
7
|
+
export declare const passthroughResolver: RecipientResolver;
|
|
8
|
+
/**
|
|
9
|
+
* Low-level utility to resolve an ENS name or hex address to a checksummed hex address.
|
|
10
|
+
* Use this when you manage your own viem PublicClient (e.g. inside providers or scripts).
|
|
11
|
+
*
|
|
12
|
+
* If you have an {@link Actions} instance, prefer `actions.ens.getAddress()` instead —
|
|
13
|
+
* it handles client lookup and fallback automatically from your chain configuration.
|
|
14
|
+
*
|
|
15
|
+
* Hex addresses (0x...) are returned as-is after format validation.
|
|
16
|
+
* ENS names require a mainnet public client for on-chain resolution.
|
|
17
|
+
* @param input - Hex address (0x...) or ENS name (e.g. "vitalik.eth")
|
|
18
|
+
* @param mainnetClient - Public client connected to Ethereum mainnet (required for ENS names)
|
|
19
|
+
* @returns Resolved hex address
|
|
20
|
+
* @throws {EnsNotConfiguredError} If mainnet client is not provided
|
|
21
|
+
* @throws {EnsResolutionError} If the name is invalid or cannot be resolved
|
|
22
|
+
* @throws {EnsRpcError} If the RPC call fails
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveAddress(input: Address | EnsName, mainnetClient?: PublicClient): Promise<Address>;
|
|
25
|
+
//# sourceMappingURL=ens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens.d.ts","sourceRoot":"","sources":["../../src/utils/ens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AASjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAExD,0FAA0F;AAC1F,MAAM,MAAM,iBAAiB,GAAG,CAC9B,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,KACrC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAEjC,4FAA4F;AAC5F,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,OAAO,GAAG,OAAO,EACxB,aAAa,CAAC,EAAE,YAAY,GAC3B,OAAO,CAAC,OAAO,CAAC,CAuClB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { isAddress, isAddressEqual, zeroAddress } from 'viem';
|
|
2
|
+
import { normalize } from 'viem/ens';
|
|
3
|
+
import { EnsNotConfiguredError, EnsResolutionError, EnsRpcError, } from '../ens/errors.js';
|
|
4
|
+
export { isEnsName } from '../ens/types.js';
|
|
5
|
+
/** Pass-through resolver used when no ENS resolution is configured. Throws on ENS names. */
|
|
6
|
+
export const passthroughResolver = (r) => {
|
|
7
|
+
if (r !== undefined && !isAddress(r, { strict: false })) {
|
|
8
|
+
throw new Error(`ENS resolution is not configured; received "${r}"`);
|
|
9
|
+
}
|
|
10
|
+
return Promise.resolve(r);
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Low-level utility to resolve an ENS name or hex address to a checksummed hex address.
|
|
14
|
+
* Use this when you manage your own viem PublicClient (e.g. inside providers or scripts).
|
|
15
|
+
*
|
|
16
|
+
* If you have an {@link Actions} instance, prefer `actions.ens.getAddress()` instead —
|
|
17
|
+
* it handles client lookup and fallback automatically from your chain configuration.
|
|
18
|
+
*
|
|
19
|
+
* Hex addresses (0x...) are returned as-is after format validation.
|
|
20
|
+
* ENS names require a mainnet public client for on-chain resolution.
|
|
21
|
+
* @param input - Hex address (0x...) or ENS name (e.g. "vitalik.eth")
|
|
22
|
+
* @param mainnetClient - Public client connected to Ethereum mainnet (required for ENS names)
|
|
23
|
+
* @returns Resolved hex address
|
|
24
|
+
* @throws {EnsNotConfiguredError} If mainnet client is not provided
|
|
25
|
+
* @throws {EnsResolutionError} If the name is invalid or cannot be resolved
|
|
26
|
+
* @throws {EnsRpcError} If the RPC call fails
|
|
27
|
+
*/
|
|
28
|
+
export async function resolveAddress(input, mainnetClient) {
|
|
29
|
+
if (isAddress(input, { strict: false }))
|
|
30
|
+
return input;
|
|
31
|
+
if (!mainnetClient)
|
|
32
|
+
throw new EnsNotConfiguredError();
|
|
33
|
+
const normalized = (() => {
|
|
34
|
+
try {
|
|
35
|
+
return normalize(input);
|
|
36
|
+
}
|
|
37
|
+
catch (cause) {
|
|
38
|
+
throw new EnsResolutionError(`Invalid address or ENS name: "${input}"`, input, { cause });
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
const resolved = await mainnetClient
|
|
42
|
+
.getEnsAddress({ name: normalized })
|
|
43
|
+
.catch((cause) => {
|
|
44
|
+
throw new EnsRpcError(`ENS resolution failed for "${input}": RPC error`, input, { cause });
|
|
45
|
+
});
|
|
46
|
+
if (!resolved)
|
|
47
|
+
throw new EnsResolutionError(`ENS name "${input}" could not be resolved`, input);
|
|
48
|
+
if (isAddressEqual(resolved, zeroAddress)) {
|
|
49
|
+
throw new EnsResolutionError(`ENS name "${input}" resolved to the zero address`, input);
|
|
50
|
+
}
|
|
51
|
+
return resolved;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens.js","sourceRoot":"","sources":["../../src/utils/ens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,MAAM,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,WAAW,GACZ,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAgB,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAOxD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,CAAC,EAAE,EAAE;IAC1D,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,GAAG,CAAC,CAAA;IACtE,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAwB,CAAC,CAAA;AAClD,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAwB,EACxB,aAA4B;IAE5B,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAAE,OAAO,KAAK,CAAA;IAErD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;IAErD,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;QACvB,IAAI,CAAC;YACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAC1B,iCAAiC,KAAK,GAAG,EACzC,KAAK,EACL,EAAE,KAAK,EAAE,CACV,CAAA;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,QAAQ,GAAG,MAAM,aAAa;SACjC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,MAAM,IAAI,WAAW,CACnB,8BAA8B,KAAK,cAAc,EACjD,KAAK,EACL,EAAE,KAAK,EAAE,CACV,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,kBAAkB,CAC1B,aAAa,KAAK,yBAAyB,EAC3C,KAAK,CACN,CAAA;IACH,IAAI,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,kBAAkB,CAC1B,aAAa,KAAK,gCAAgC,EAClD,KAAK,CACN,CAAA;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens.test.d.ts","sourceRoot":"","sources":["../../src/utils/ens.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { zeroAddress } from 'viem';
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { resolveAddress } from './ens.js';
|
|
4
|
+
const REAL_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
|
|
5
|
+
const ZERO_ADDRESS = zeroAddress;
|
|
6
|
+
function mockClient(returnValue, rejects = false) {
|
|
7
|
+
const getEnsAddress = rejects
|
|
8
|
+
? vi.fn().mockRejectedValue(new Error('network error'))
|
|
9
|
+
: vi.fn().mockResolvedValue(returnValue);
|
|
10
|
+
return { getEnsAddress };
|
|
11
|
+
}
|
|
12
|
+
describe('resolveAddress', () => {
|
|
13
|
+
describe('hex address input', () => {
|
|
14
|
+
it('returns a valid hex address as-is', async () => {
|
|
15
|
+
expect(await resolveAddress(REAL_ADDRESS)).toBe(REAL_ADDRESS);
|
|
16
|
+
});
|
|
17
|
+
it('does not require a mainnet client for hex addresses', async () => {
|
|
18
|
+
await expect(resolveAddress(REAL_ADDRESS)).resolves.toBe(REAL_ADDRESS);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
describe('ENS name input', () => {
|
|
22
|
+
it('resolves a valid ENS name', async () => {
|
|
23
|
+
const client = mockClient(REAL_ADDRESS);
|
|
24
|
+
const result = await resolveAddress('vitalik.eth', client);
|
|
25
|
+
expect(result).toBe(REAL_ADDRESS);
|
|
26
|
+
expect(client.getEnsAddress).toHaveBeenCalledWith({ name: 'vitalik.eth' });
|
|
27
|
+
});
|
|
28
|
+
it('normalises the ENS name before resolving', async () => {
|
|
29
|
+
const client = mockClient(REAL_ADDRESS);
|
|
30
|
+
await resolveAddress('Vitalik.ETH', client);
|
|
31
|
+
expect(client.getEnsAddress).toHaveBeenCalledWith({ name: 'vitalik.eth' });
|
|
32
|
+
});
|
|
33
|
+
it('throws EnsNotConfiguredError when no mainnet client is provided', async () => {
|
|
34
|
+
const { EnsNotConfiguredError } = await import('../ens/errors.js');
|
|
35
|
+
await expect(resolveAddress('vitalik.eth')).rejects.toThrow(EnsNotConfiguredError);
|
|
36
|
+
});
|
|
37
|
+
it('includes chain ID 1 in the error when no mainnet client provided', async () => {
|
|
38
|
+
await expect(resolveAddress('vitalik.eth')).rejects.toThrow('1');
|
|
39
|
+
});
|
|
40
|
+
it('throws when ENS name cannot be resolved (returns null)', async () => {
|
|
41
|
+
const client = mockClient(null);
|
|
42
|
+
await expect(resolveAddress('unresolvable.eth', client)).rejects.toThrow('"unresolvable.eth" could not be resolved');
|
|
43
|
+
});
|
|
44
|
+
it('throws when ENS name resolves to zero address', async () => {
|
|
45
|
+
const client = mockClient(ZERO_ADDRESS);
|
|
46
|
+
await expect(resolveAddress('zero.eth', client)).rejects.toThrow('zero address');
|
|
47
|
+
});
|
|
48
|
+
it('throws with RPC error label on network failure', async () => {
|
|
49
|
+
const client = mockClient(null, true);
|
|
50
|
+
await expect(resolveAddress('vitalik.eth', client)).rejects.toThrow('RPC error');
|
|
51
|
+
});
|
|
52
|
+
it('preserves the original cause on RPC failure', async () => {
|
|
53
|
+
const client = mockClient(null, true);
|
|
54
|
+
let caught;
|
|
55
|
+
try {
|
|
56
|
+
await resolveAddress('vitalik.eth', client);
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
caught = e;
|
|
60
|
+
}
|
|
61
|
+
expect(caught?.cause).toBeInstanceOf(Error);
|
|
62
|
+
expect((caught?.cause).message).toBe('network error');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('invalid input', () => {
|
|
66
|
+
it('throws for ENS-shaped strings that fail normalisation', async () => {
|
|
67
|
+
// Has a dot so satisfies EnsName, but contains invalid ENS characters
|
|
68
|
+
await expect(resolveAddress('not!valid.eth', {})).rejects.toThrow('Invalid address or ENS name');
|
|
69
|
+
});
|
|
70
|
+
it('includes the invalid input in the error message', async () => {
|
|
71
|
+
await expect(resolveAddress('!!bad!!.eth', {})).rejects.toThrow('"!!bad!!.eth"');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=ens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens.test.js","sourceRoot":"","sources":["../../src/utils/ens.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { SupportedChainId } from '../constants/supportedChains.js';
|
|
3
|
+
import type { AssetsConfig, LendConfig, SwapConfig } from '../types/actions.js';
|
|
4
|
+
type NamedAddresses = Record<string, Address>;
|
|
5
|
+
/**
|
|
6
|
+
* Validates all values in an address map.
|
|
7
|
+
* Values may be a single Address or a record of named addresses.
|
|
8
|
+
* Collects all failures before throwing a single Error listing every invalid entry.
|
|
9
|
+
* @returns The original map reference if all addresses are valid.
|
|
10
|
+
* @throws Error listing all invalid addresses with their chain IDs and key names.
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateAddressMap<M extends Partial<Record<number, Address | NamedAddresses>>>(map: M): M;
|
|
13
|
+
/**
|
|
14
|
+
* Validates a Partial<Record<SupportedChainId, Address | 'native'>> asset address map.
|
|
15
|
+
* Skips entries where the value is 'native'.
|
|
16
|
+
* Collects all failures before throwing a single Error.
|
|
17
|
+
* @throws Error listing all invalid addresses with their chain IDs.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateAssetAddresses(map: Partial<Record<SupportedChainId, Address | 'native'>>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Validates all developer-supplied addresses in an ActionsConfig.
|
|
22
|
+
* Iterates all lend and swap providers generically, so new providers are covered automatically.
|
|
23
|
+
* Collects all failures before throwing a single Error.
|
|
24
|
+
* @throws Error listing all invalid addresses with their locations and chain IDs.
|
|
25
|
+
*/
|
|
26
|
+
export declare function validateConfigAddresses(config: {
|
|
27
|
+
lend?: LendConfig;
|
|
28
|
+
swap?: SwapConfig;
|
|
29
|
+
assets?: AssetsConfig;
|
|
30
|
+
}): void;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=validateAddresses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateAddresses.d.ts","sourceRoot":"","sources":["../../src/utils/validateAddresses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAGnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAK9E,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE7C;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,EAC3D,GAAG,EAAE,CAAC,GAAG,CAAC,CA4BX;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC,GACzD,IAAI,CAeN;AAyCD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB,GAAG,IAAI,CA4BP"}
|