@eth-optimism/actions-sdk 0.0.4 → 0.2.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/LICENSE +1 -1
- package/dist/__mocks__/MockAssets.d.ts.map +1 -0
- package/dist/__mocks__/MockAssets.js.map +1 -0
- package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
- package/dist/__mocks__/MockPrivyClient.js.map +1 -0
- package/dist/__mocks__/utils.d.ts.map +1 -0
- package/dist/__mocks__/utils.js.map +1 -0
- package/dist/__tests__/actions.test.d.ts.map +1 -0
- package/dist/{actions.test.js → __tests__/actions.test.js} +35 -85
- package/dist/__tests__/actions.test.js.map +1 -0
- package/dist/actions.d.ts +19 -7
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +49 -19
- package/dist/actions.js.map +1 -1
- package/dist/constants/assets.d.ts +19 -0
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +84 -6
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/supportedChains.d.ts +1 -1
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +7 -3
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/core/asset/__mocks__/mockAsset.js +1 -1
- package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +9 -7
- package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
- package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
- package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
- package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
- package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
- package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
- package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
- package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
- package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
- package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
- package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
- package/dist/lend/core/LendProvider.d.ts +16 -3
- package/dist/lend/core/LendProvider.d.ts.map +1 -1
- package/dist/lend/core/LendProvider.js +23 -2
- package/dist/lend/core/LendProvider.js.map +1 -1
- package/dist/lend/core/__tests__/LendProvider.test.js +20 -50
- package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
- package/dist/lend/index.d.ts +1 -0
- package/dist/lend/index.d.ts.map +1 -1
- package/dist/lend/index.js +1 -0
- package/dist/lend/index.js.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -9
- package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/ActionsLendNamespace.js +2 -11
- package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
- package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
- package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
- package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -9
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.js +24 -31
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +25 -17
- package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
- package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +37 -21
- package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
- package/dist/lend/providers/aave/AaveLendProvider.d.ts +74 -0
- package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
- package/dist/lend/providers/aave/AaveLendProvider.js +290 -0
- package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
- package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
- package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
- package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
- package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
- package/dist/lend/providers/aave/abis/pool.js +79 -0
- package/dist/lend/providers/aave/abis/pool.js.map +1 -0
- package/dist/lend/providers/aave/addresses.d.ts +57 -0
- package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
- package/dist/lend/providers/aave/addresses.js +83 -0
- package/dist/lend/providers/aave/addresses.js.map +1 -0
- package/dist/lend/providers/aave/sdk.d.ts +57 -0
- package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
- package/dist/lend/providers/aave/sdk.js +201 -0
- package/dist/lend/providers/aave/sdk.js.map +1 -0
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -4
- package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
- package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
- package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +6 -57
- package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
- package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
- package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
- package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
- package/dist/lend/providers/morpho/contracts.d.ts +19 -0
- package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
- package/dist/lend/providers/morpho/contracts.js +32 -0
- package/dist/lend/providers/morpho/contracts.js.map +1 -0
- package/dist/lend/providers/morpho/sdk.d.ts +4 -3
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +168 -71
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/services/ChainManager.d.ts +1 -1
- package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
- package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
- package/dist/services/__mocks__/MockChainManager.js.map +1 -0
- package/dist/services/tokenBalance.d.ts.map +1 -1
- package/dist/services/tokenBalance.js +4 -5
- package/dist/services/tokenBalance.js.map +1 -1
- package/dist/services/tokenBalance.spec.js +2 -2
- package/dist/services/tokenBalance.spec.js.map +1 -1
- package/dist/supported/tokens.d.ts +4 -4
- package/dist/supported/tokens.d.ts.map +1 -1
- package/dist/supported/tokens.js +5 -56
- package/dist/supported/tokens.js.map +1 -1
- package/dist/types/actions.d.ts +26 -2
- package/dist/types/actions.d.ts.map +1 -1
- package/dist/types/asset.d.ts +3 -3
- package/dist/types/asset.d.ts.map +1 -1
- package/dist/types/lend/base.d.ts +10 -28
- package/dist/types/lend/base.d.ts.map +1 -1
- package/dist/types/lend/contracts.d.ts +17 -0
- package/dist/types/lend/contracts.d.ts.map +1 -0
- package/dist/types/lend/contracts.js +2 -0
- package/dist/types/lend/contracts.js.map +1 -0
- package/dist/types/lend/index.d.ts +1 -0
- package/dist/types/lend/index.d.ts.map +1 -1
- package/dist/types/lend/index.js +1 -0
- package/dist/types/lend/index.js.map +1 -1
- package/dist/utils/assets.d.ts +7 -1
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/assets.js +12 -1
- package/dist/utils/assets.js.map +1 -1
- package/dist/utils/assets.test.js +1 -1
- package/dist/utils/assets.test.js.map +1 -1
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +5 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +13 -13
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +12 -12
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
- package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
- package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
- package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +39 -16
- package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
- package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
- package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
- package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
- package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
- package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +4 -4
- package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
- package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -6
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
- package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +5 -4
- package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
- package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +22 -7
- package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
- package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +8 -4
- package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
- package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +7 -4
- package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
- package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
- package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
- 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 +6 -0
- 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/dynamic/__tests__/DynamicWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
- 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/privy/__tests__/PrivyWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
- 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/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
- package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
- package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
- package/package.json +4 -1
- package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
- package/src/{actions.test.ts → __tests__/actions.test.ts} +34 -95
- package/src/actions.ts +82 -26
- package/src/constants/assets.ts +92 -8
- package/src/constants/supportedChains.ts +10 -2
- package/src/core/asset/__mocks__/mockAsset.ts +1 -1
- package/src/index.ts +2 -3
- package/src/{test → lend/__mocks__}/MockLendProvider.ts +24 -27
- package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
- package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
- package/src/lend/core/LendProvider.ts +40 -7
- package/src/lend/core/__tests__/LendProvider.test.ts +21 -63
- package/src/lend/index.ts +1 -0
- package/src/lend/namespaces/ActionsLendNamespace.ts +2 -21
- package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
- package/src/lend/namespaces/WalletLendNamespace.ts +39 -55
- package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +29 -22
- package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
- package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +61 -26
- package/src/lend/providers/aave/AaveLendProvider.ts +395 -0
- package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
- package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
- package/src/lend/providers/aave/abis/pool.ts +81 -0
- package/src/lend/providers/aave/addresses.ts +95 -0
- package/src/lend/providers/aave/sdk.ts +307 -0
- package/src/lend/providers/morpho/MorphoLendProvider.ts +23 -44
- package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +13 -85
- package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
- package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
- package/src/lend/providers/morpho/contracts.ts +37 -0
- package/src/lend/providers/morpho/sdk.ts +235 -87
- package/src/services/tokenBalance.spec.ts +2 -2
- package/src/services/tokenBalance.ts +6 -7
- package/src/supported/tokens.ts +6 -57
- package/src/types/actions.ts +30 -2
- package/src/types/asset.ts +3 -3
- package/src/types/lend/base.ts +14 -33
- package/src/types/lend/contracts.ts +18 -0
- package/src/types/lend/index.ts +1 -0
- package/src/utils/assets.test.ts +1 -1
- package/src/utils/assets.ts +15 -1
- package/src/utils/constants.ts +4 -0
- package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +15 -15
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +14 -14
- package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
- package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
- package/src/wallet/core/providers/hosted/types/index.ts +8 -2
- package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
- package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +45 -55
- package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
- package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
- package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
- package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
- package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +7 -10
- package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
- package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +8 -8
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
- package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
- package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +5 -5
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
- package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
- package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
- package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
- package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
- package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
- package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +31 -17
- package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
- package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +10 -11
- package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
- package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +7 -8
- package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
- package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
- package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
- package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
- package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
- package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
- package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
- package/dist/actions.test.d.ts.map +0 -1
- package/dist/actions.test.js.map +0 -1
- package/dist/constants/config.d.ts +0 -10
- package/dist/constants/config.d.ts.map +0 -1
- package/dist/constants/config.js +0 -10
- package/dist/constants/config.js.map +0 -1
- package/dist/test/MockAssets.d.ts.map +0 -1
- package/dist/test/MockAssets.js.map +0 -1
- package/dist/test/MockChainManager.d.ts.map +0 -1
- package/dist/test/MockChainManager.js.map +0 -1
- package/dist/test/MockLendProvider.d.ts.map +0 -1
- package/dist/test/MockLendProvider.js.map +0 -1
- package/dist/test/MockMarkets.d.ts.map +0 -1
- package/dist/test/MockMarkets.js.map +0 -1
- package/dist/test/MockPrivyClient.d.ts.map +0 -1
- package/dist/test/MockPrivyClient.js.map +0 -1
- package/dist/test/utils.d.ts.map +0 -1
- package/dist/test/utils.js.map +0 -1
- package/src/constants/config.ts +0 -9
- /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
- /package/dist/{test → __mocks__}/MockAssets.js +0 -0
- /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
- /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
- /package/dist/{test → __mocks__}/utils.d.ts +0 -0
- /package/dist/{test → __mocks__}/utils.js +0 -0
- /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
- /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
- /package/src/{test → __mocks__}/MockAssets.ts +0 -0
- /package/src/{test → __mocks__}/utils.ts +0 -0
- /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { LendProvider } from '@/lend/core/LendProvider.js'
|
|
2
|
+
import type { AaveLendProvider } from '@/lend/providers/aave/AaveLendProvider.js'
|
|
3
|
+
import type { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
|
|
4
|
+
import type { LendProviderConfig } from '@/types/actions.js'
|
|
5
|
+
import type {
|
|
6
|
+
GetLendMarketParams,
|
|
7
|
+
GetLendMarketsParams,
|
|
8
|
+
LendMarket,
|
|
9
|
+
LendMarketId,
|
|
10
|
+
} from '@/types/lend/index.js'
|
|
11
|
+
|
|
12
|
+
export type LendProviders = {
|
|
13
|
+
morpho?: LendProvider<LendProviderConfig>
|
|
14
|
+
aave?: LendProvider<LendProviderConfig>
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Base Lend Namespace
|
|
19
|
+
* @description Shared lending operations for Actions and Wallet namespaces
|
|
20
|
+
*/
|
|
21
|
+
export abstract class BaseLendNamespace {
|
|
22
|
+
constructor(protected readonly providers: LendProviders) {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Get all markets across all configured providers
|
|
26
|
+
* @param params - Optional filtering parameters
|
|
27
|
+
* @returns Promise resolving to array of markets from all providers
|
|
28
|
+
*/
|
|
29
|
+
async getMarkets(params: GetLendMarketsParams = {}): Promise<LendMarket[]> {
|
|
30
|
+
const results = await Promise.all(
|
|
31
|
+
this.getAllProviders().map((p) => p.getMarkets(params)),
|
|
32
|
+
)
|
|
33
|
+
return results.flat()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get a specific market by routing to the correct provider
|
|
38
|
+
* @param params - Market identifier
|
|
39
|
+
* @returns Promise resolving to market information
|
|
40
|
+
*/
|
|
41
|
+
async getMarket(params: GetLendMarketParams): Promise<LendMarket> {
|
|
42
|
+
const provider = this.getProviderForMarket(params)
|
|
43
|
+
return provider.getMarket(params)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get supported chain IDs across all providers
|
|
48
|
+
* @returns Array of unique chain IDs supported by any provider
|
|
49
|
+
*/
|
|
50
|
+
supportedChainIds(): number[] {
|
|
51
|
+
const allChains = this.getAllProviders().flatMap((p) =>
|
|
52
|
+
p.supportedChainIds(),
|
|
53
|
+
)
|
|
54
|
+
return [...new Set(allChains)]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Get all configured providers
|
|
59
|
+
* @returns Array of configured providers
|
|
60
|
+
*/
|
|
61
|
+
protected getAllProviders(): Array<MorphoLendProvider | AaveLendProvider> {
|
|
62
|
+
return [this.providers.morpho, this.providers.aave].filter(
|
|
63
|
+
Boolean,
|
|
64
|
+
) as Array<MorphoLendProvider | AaveLendProvider>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Route a market to the correct provider
|
|
69
|
+
* @param marketId - Market identifier to route
|
|
70
|
+
* @returns The provider that handles this market
|
|
71
|
+
* @throws Error if no provider is found for the market
|
|
72
|
+
*/
|
|
73
|
+
protected getProviderForMarket(
|
|
74
|
+
marketId: LendMarketId,
|
|
75
|
+
): MorphoLendProvider | AaveLendProvider {
|
|
76
|
+
for (const provider of this.getAllProviders()) {
|
|
77
|
+
const market = provider.config.marketAllowlist?.find(
|
|
78
|
+
(m: LendMarketId) =>
|
|
79
|
+
m.address.toLowerCase() === marketId.address.toLowerCase() &&
|
|
80
|
+
m.chainId === marketId.chainId,
|
|
81
|
+
)
|
|
82
|
+
if (market) return provider
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
throw new Error(
|
|
86
|
+
`No provider configured for market ${marketId.address} on chain ${marketId.chainId}`,
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -1,41 +1,28 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SupportedChainId } from '@/constants/supportedChains.js'
|
|
2
2
|
import type {
|
|
3
|
-
BaseLendConfig,
|
|
4
3
|
ClosePositionParams,
|
|
5
4
|
GetPositionParams,
|
|
6
5
|
LendMarketPosition,
|
|
7
6
|
LendOpenPositionParams,
|
|
7
|
+
LendTransaction,
|
|
8
8
|
LendTransactionReceipt,
|
|
9
9
|
} from '@/types/lend/index.js'
|
|
10
10
|
import type { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
|
|
11
11
|
|
|
12
|
+
import { BaseLendNamespace, type LendProviders } from './BaseLendNamespace.js'
|
|
13
|
+
|
|
12
14
|
/**
|
|
13
15
|
* Wallet Lend Namespace
|
|
14
16
|
* @description Full lending operations available on wallet.lend
|
|
15
17
|
*/
|
|
16
|
-
export class WalletLendNamespace
|
|
17
|
-
TConfig extends BaseLendConfig = BaseLendConfig,
|
|
18
|
-
> {
|
|
18
|
+
export class WalletLendNamespace extends BaseLendNamespace {
|
|
19
19
|
constructor(
|
|
20
|
-
|
|
20
|
+
providers: LendProviders,
|
|
21
21
|
private readonly wallet: Wallet,
|
|
22
|
-
) {
|
|
23
|
-
|
|
24
|
-
get config(): TConfig {
|
|
25
|
-
return this.provider.config
|
|
22
|
+
) {
|
|
23
|
+
super(providers)
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
// Inherited methods from ActionsLendNamespace
|
|
29
|
-
getMarkets = (...args: Parameters<LendProvider<TConfig>['getMarkets']>) =>
|
|
30
|
-
this.provider.getMarkets(...args)
|
|
31
|
-
|
|
32
|
-
getMarket = (...args: Parameters<LendProvider<TConfig>['getMarket']>) =>
|
|
33
|
-
this.provider.getMarket(...args)
|
|
34
|
-
|
|
35
|
-
supportedChainIds = (
|
|
36
|
-
...args: Parameters<LendProvider<TConfig>['supportedChainIds']>
|
|
37
|
-
) => this.provider.supportedChainIds(...args)
|
|
38
|
-
|
|
39
26
|
/**
|
|
40
27
|
* Open a lending position
|
|
41
28
|
* @description Signs and sends a lend transaction from the wallet for the given amount and asset
|
|
@@ -47,30 +34,14 @@ export class WalletLendNamespace<
|
|
|
47
34
|
async openPosition(
|
|
48
35
|
params: LendOpenPositionParams,
|
|
49
36
|
): Promise<LendTransactionReceipt> {
|
|
50
|
-
const
|
|
37
|
+
const provider = this.getProviderForMarket(params.marketId)
|
|
38
|
+
|
|
39
|
+
const lendTransaction = await provider.openPosition({
|
|
51
40
|
...params,
|
|
52
41
|
walletAddress: this.wallet.address,
|
|
53
42
|
})
|
|
54
43
|
|
|
55
|
-
|
|
56
|
-
if (!transactionData) {
|
|
57
|
-
throw new Error('No transaction data returned from lend provider')
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (transactionData.approval && transactionData.openPosition) {
|
|
61
|
-
return await this.wallet.sendBatch(
|
|
62
|
-
[transactionData.approval, transactionData.openPosition],
|
|
63
|
-
params.marketId.chainId,
|
|
64
|
-
)
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (!transactionData.openPosition) {
|
|
68
|
-
throw new Error('No openPosition transaction data returned')
|
|
69
|
-
}
|
|
70
|
-
return await this.wallet.send(
|
|
71
|
-
transactionData.openPosition,
|
|
72
|
-
params.marketId.chainId,
|
|
73
|
-
)
|
|
44
|
+
return this.executeTransaction(lendTransaction, params.marketId.chainId)
|
|
74
45
|
}
|
|
75
46
|
|
|
76
47
|
/**
|
|
@@ -81,7 +52,13 @@ export class WalletLendNamespace<
|
|
|
81
52
|
* @returns Promise resolving to position information
|
|
82
53
|
*/
|
|
83
54
|
async getPosition(params: GetPositionParams): Promise<LendMarketPosition> {
|
|
84
|
-
|
|
55
|
+
if (!params.marketId) {
|
|
56
|
+
throw new Error('marketId is required')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const provider = this.getProviderForMarket(params.marketId)
|
|
60
|
+
|
|
61
|
+
return provider.getPosition(
|
|
85
62
|
this.wallet.address,
|
|
86
63
|
params.marketId,
|
|
87
64
|
params.asset,
|
|
@@ -98,25 +75,32 @@ export class WalletLendNamespace<
|
|
|
98
75
|
async closePosition(
|
|
99
76
|
params: ClosePositionParams,
|
|
100
77
|
): Promise<LendTransactionReceipt> {
|
|
101
|
-
const
|
|
78
|
+
const provider = this.getProviderForMarket(params.marketId)
|
|
79
|
+
|
|
80
|
+
const closeTransaction = await provider.closePosition({
|
|
102
81
|
...params,
|
|
103
82
|
walletAddress: this.wallet.address,
|
|
104
83
|
})
|
|
105
84
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
throw new Error(
|
|
109
|
-
'No transaction data returned from close position provider',
|
|
110
|
-
)
|
|
111
|
-
}
|
|
85
|
+
return this.executeTransaction(closeTransaction, params.marketId.chainId)
|
|
86
|
+
}
|
|
112
87
|
|
|
113
|
-
|
|
114
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Execute a lend transaction with optional approval batching
|
|
90
|
+
*/
|
|
91
|
+
private async executeTransaction(
|
|
92
|
+
transaction: LendTransaction,
|
|
93
|
+
chainId: SupportedChainId,
|
|
94
|
+
): Promise<LendTransactionReceipt> {
|
|
95
|
+
const { transactionData } = transaction
|
|
96
|
+
|
|
97
|
+
if (transactionData.approval) {
|
|
98
|
+
return this.wallet.sendBatch(
|
|
99
|
+
[transactionData.approval, transactionData.position],
|
|
100
|
+
chainId,
|
|
101
|
+
)
|
|
115
102
|
}
|
|
116
103
|
|
|
117
|
-
return
|
|
118
|
-
transactionData.closePosition,
|
|
119
|
-
params.marketId.chainId,
|
|
120
|
-
)
|
|
104
|
+
return this.wallet.send(transactionData.position, chainId)
|
|
121
105
|
}
|
|
122
106
|
}
|
|
@@ -1,25 +1,43 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
1
2
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
2
3
|
|
|
4
|
+
import { getRandomAddress } from '@/__mocks__/utils.js'
|
|
5
|
+
import type { MockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
6
|
+
import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
3
7
|
import { ActionsLendNamespace } from '@/lend/namespaces/ActionsLendNamespace.js'
|
|
4
|
-
import { createMockLendProvider } from '@/test/MockLendProvider.js'
|
|
5
|
-
import { getRandomAddress } from '@/test/utils.js'
|
|
6
|
-
import type { LendProvider } from '@/types/lend/index.js'
|
|
7
8
|
|
|
8
9
|
describe('ActionsLendNamespace', () => {
|
|
9
|
-
let mockProvider:
|
|
10
|
+
let mockProvider: MockLendProvider
|
|
11
|
+
let mockMarketId: { address: Address; chainId: 130 }
|
|
10
12
|
|
|
11
13
|
beforeEach(() => {
|
|
12
|
-
|
|
14
|
+
mockMarketId = { address: getRandomAddress(), chainId: 130 as const }
|
|
15
|
+
|
|
16
|
+
mockProvider = createMockLendProvider({
|
|
17
|
+
marketAllowlist: [
|
|
18
|
+
{
|
|
19
|
+
address: mockMarketId.address,
|
|
20
|
+
chainId: mockMarketId.chainId,
|
|
21
|
+
name: 'Test Market',
|
|
22
|
+
asset: {
|
|
23
|
+
address: { 130: getRandomAddress() },
|
|
24
|
+
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
25
|
+
type: 'erc20' as const,
|
|
26
|
+
},
|
|
27
|
+
lendProvider: 'morpho',
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
})
|
|
13
31
|
})
|
|
14
32
|
|
|
15
33
|
it('should create an instance with a lend provider', () => {
|
|
16
|
-
const namespace = new ActionsLendNamespace(mockProvider)
|
|
34
|
+
const namespace = new ActionsLendNamespace({ morpho: mockProvider })
|
|
17
35
|
|
|
18
36
|
expect(namespace).toBeInstanceOf(ActionsLendNamespace)
|
|
19
37
|
})
|
|
20
38
|
|
|
21
39
|
it('should delegate getMarkets to provider', async () => {
|
|
22
|
-
const namespace = new ActionsLendNamespace(mockProvider)
|
|
40
|
+
const namespace = new ActionsLendNamespace({ morpho: mockProvider })
|
|
23
41
|
const spy = vi.spyOn(mockProvider, 'getMarkets')
|
|
24
42
|
|
|
25
43
|
await namespace.getMarkets()
|
|
@@ -28,31 +46,20 @@ describe('ActionsLendNamespace', () => {
|
|
|
28
46
|
})
|
|
29
47
|
|
|
30
48
|
it('should delegate getMarket to provider with correct parameters', async () => {
|
|
31
|
-
const namespace = new ActionsLendNamespace(mockProvider)
|
|
32
|
-
const marketId = getRandomAddress()
|
|
33
|
-
const chainId = 130 as const
|
|
49
|
+
const namespace = new ActionsLendNamespace({ morpho: mockProvider })
|
|
34
50
|
const spy = vi.spyOn(mockProvider, 'getMarket')
|
|
35
51
|
|
|
36
|
-
await namespace.getMarket(
|
|
52
|
+
await namespace.getMarket(mockMarketId)
|
|
37
53
|
|
|
38
|
-
expect(spy).toHaveBeenCalledWith(
|
|
54
|
+
expect(spy).toHaveBeenCalledWith(mockMarketId)
|
|
39
55
|
})
|
|
40
56
|
|
|
41
57
|
it('should delegate supportedChainIds to provider', () => {
|
|
42
|
-
const namespace = new ActionsLendNamespace(mockProvider)
|
|
58
|
+
const namespace = new ActionsLendNamespace({ morpho: mockProvider })
|
|
43
59
|
const spy = vi.spyOn(mockProvider, 'supportedChainIds')
|
|
44
60
|
|
|
45
61
|
namespace.supportedChainIds()
|
|
46
62
|
|
|
47
63
|
expect(spy).toHaveBeenCalledOnce()
|
|
48
64
|
})
|
|
49
|
-
|
|
50
|
-
it('should provide access to provider config', () => {
|
|
51
|
-
const namespace = new ActionsLendNamespace(mockProvider)
|
|
52
|
-
|
|
53
|
-
const config = namespace.config
|
|
54
|
-
|
|
55
|
-
expect(config).toBeDefined()
|
|
56
|
-
expect(config.defaultSlippage || 50).toBe(50)
|
|
57
|
-
})
|
|
58
65
|
})
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
2
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
3
|
+
|
|
4
|
+
import { getRandomAddress } from '@/__mocks__/utils.js'
|
|
5
|
+
import type { MockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
6
|
+
import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
7
|
+
import { BaseLendNamespace } from '@/lend/namespaces/BaseLendNamespace.js'
|
|
8
|
+
|
|
9
|
+
// Concrete implementation for testing
|
|
10
|
+
class TestLendNamespace extends BaseLendNamespace {}
|
|
11
|
+
|
|
12
|
+
describe('BaseLendNamespace', () => {
|
|
13
|
+
let mockMorphoProvider: MockLendProvider
|
|
14
|
+
let mockAaveProvider: MockLendProvider
|
|
15
|
+
let mockMarketId: { address: Address; chainId: 130 }
|
|
16
|
+
let aaveMarketId: { address: Address; chainId: 130 }
|
|
17
|
+
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
mockMarketId = { address: getRandomAddress(), chainId: 130 as const }
|
|
20
|
+
aaveMarketId = { address: getRandomAddress(), chainId: 130 as const }
|
|
21
|
+
|
|
22
|
+
mockMorphoProvider = createMockLendProvider({
|
|
23
|
+
marketAllowlist: [
|
|
24
|
+
{
|
|
25
|
+
address: mockMarketId.address,
|
|
26
|
+
chainId: mockMarketId.chainId,
|
|
27
|
+
name: 'Morpho Market',
|
|
28
|
+
asset: {
|
|
29
|
+
address: { 130: getRandomAddress() },
|
|
30
|
+
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
31
|
+
type: 'erc20' as const,
|
|
32
|
+
},
|
|
33
|
+
lendProvider: 'morpho',
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
mockAaveProvider = createMockLendProvider({
|
|
39
|
+
marketAllowlist: [
|
|
40
|
+
{
|
|
41
|
+
address: aaveMarketId.address,
|
|
42
|
+
chainId: aaveMarketId.chainId,
|
|
43
|
+
name: 'Aave Market',
|
|
44
|
+
asset: {
|
|
45
|
+
address: { 130: getRandomAddress() },
|
|
46
|
+
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
47
|
+
type: 'erc20' as const,
|
|
48
|
+
},
|
|
49
|
+
lendProvider: 'aave',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
describe('getMarkets', () => {
|
|
56
|
+
it('should aggregate markets from all providers', async () => {
|
|
57
|
+
const namespace = new TestLendNamespace({
|
|
58
|
+
morpho: mockMorphoProvider,
|
|
59
|
+
aave: mockAaveProvider,
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
const markets = await namespace.getMarkets()
|
|
63
|
+
|
|
64
|
+
expect(markets).toHaveLength(2)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('should work with single provider', async () => {
|
|
68
|
+
const namespace = new TestLendNamespace({
|
|
69
|
+
morpho: mockMorphoProvider,
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
const markets = await namespace.getMarkets()
|
|
73
|
+
|
|
74
|
+
expect(markets).toHaveLength(1)
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
describe('getMarket', () => {
|
|
79
|
+
it('should route to correct provider based on market', async () => {
|
|
80
|
+
const namespace = new TestLendNamespace({
|
|
81
|
+
morpho: mockMorphoProvider,
|
|
82
|
+
aave: mockAaveProvider,
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
const morphoSpy = vi.spyOn(mockMorphoProvider, 'getMarket')
|
|
86
|
+
const aaveSpy = vi.spyOn(mockAaveProvider, 'getMarket')
|
|
87
|
+
|
|
88
|
+
await namespace.getMarket(mockMarketId)
|
|
89
|
+
|
|
90
|
+
expect(morphoSpy).toHaveBeenCalledWith(mockMarketId)
|
|
91
|
+
expect(aaveSpy).not.toHaveBeenCalled()
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
it('should throw if no provider found for market', async () => {
|
|
95
|
+
const namespace = new TestLendNamespace({
|
|
96
|
+
morpho: mockMorphoProvider,
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
const unknownMarket = {
|
|
100
|
+
address: getRandomAddress(),
|
|
101
|
+
chainId: 130 as const,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
await expect(namespace.getMarket(unknownMarket)).rejects.toThrow(
|
|
105
|
+
'No provider configured for market',
|
|
106
|
+
)
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
describe('supportedChainIds', () => {
|
|
111
|
+
it('should return unique chain IDs from all providers', () => {
|
|
112
|
+
const namespace = new TestLendNamespace({
|
|
113
|
+
morpho: mockMorphoProvider,
|
|
114
|
+
aave: mockAaveProvider,
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
const chainIds = namespace.supportedChainIds()
|
|
118
|
+
|
|
119
|
+
expect(chainIds).toContain(1)
|
|
120
|
+
expect(chainIds).toContain(130)
|
|
121
|
+
expect(chainIds).toContain(8453)
|
|
122
|
+
expect(chainIds).toContain(84532)
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
it('should deduplicate chain IDs', () => {
|
|
126
|
+
const namespace = new TestLendNamespace({
|
|
127
|
+
morpho: mockMorphoProvider,
|
|
128
|
+
aave: mockAaveProvider,
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
const chainIds = namespace.supportedChainIds()
|
|
132
|
+
const uniqueChainIds = [...new Set(chainIds)]
|
|
133
|
+
|
|
134
|
+
expect(chainIds).toEqual(uniqueChainIds)
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
})
|
|
@@ -1,20 +1,42 @@
|
|
|
1
|
+
import type { Address } from 'viem'
|
|
1
2
|
import type { WaitForUserOperationReceiptReturnType } from 'viem/account-abstraction'
|
|
2
3
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
|
3
4
|
|
|
5
|
+
import { getRandomAddress } from '@/__mocks__/utils.js'
|
|
6
|
+
import type { MockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
7
|
+
import { createMockLendProvider } from '@/lend/__mocks__/MockLendProvider.js'
|
|
4
8
|
import { WalletLendNamespace } from '@/lend/namespaces/WalletLendNamespace.js'
|
|
5
|
-
import {
|
|
6
|
-
import { getRandomAddress } from '@/test/utils.js'
|
|
7
|
-
import type { LendProvider, TransactionData } from '@/types/lend/index.js'
|
|
9
|
+
import type { TransactionData } from '@/types/lend/index.js'
|
|
8
10
|
import { createMock as createSmartWalletMock } from '@/wallet/core/wallets/smart/abstract/__mocks__/SmartWallet.js'
|
|
9
11
|
import type { SmartWallet } from '@/wallet/core/wallets/smart/abstract/SmartWallet.js'
|
|
10
12
|
|
|
11
13
|
describe('WalletLendNamespace', () => {
|
|
12
14
|
const mockWalletAddress = getRandomAddress()
|
|
13
|
-
let mockProvider:
|
|
15
|
+
let mockProvider: MockLendProvider
|
|
14
16
|
let mockWallet: SmartWallet
|
|
17
|
+
let mockMarketId: { address: Address; chainId: 130 }
|
|
15
18
|
|
|
16
19
|
beforeEach(() => {
|
|
17
|
-
|
|
20
|
+
// Create a consistent market ID for all tests
|
|
21
|
+
mockMarketId = { address: getRandomAddress(), chainId: 130 as const }
|
|
22
|
+
|
|
23
|
+
// Create mock provider with the market in its allowlist
|
|
24
|
+
mockProvider = createMockLendProvider({
|
|
25
|
+
marketAllowlist: [
|
|
26
|
+
{
|
|
27
|
+
address: mockMarketId.address,
|
|
28
|
+
chainId: mockMarketId.chainId,
|
|
29
|
+
name: 'Test Market',
|
|
30
|
+
asset: {
|
|
31
|
+
address: { 130: getRandomAddress() },
|
|
32
|
+
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
33
|
+
type: 'erc20' as const,
|
|
34
|
+
},
|
|
35
|
+
lendProvider: 'morpho',
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
})
|
|
39
|
+
|
|
18
40
|
// Create a mock SmartWallet with send and sendBatch methods
|
|
19
41
|
mockWallet = createSmartWalletMock({
|
|
20
42
|
address: mockWalletAddress,
|
|
@@ -32,13 +54,19 @@ describe('WalletLendNamespace', () => {
|
|
|
32
54
|
})
|
|
33
55
|
|
|
34
56
|
it('should create an instance with a lend provider and wallet', () => {
|
|
35
|
-
const namespace = new WalletLendNamespace(
|
|
57
|
+
const namespace = new WalletLendNamespace(
|
|
58
|
+
{ morpho: mockProvider },
|
|
59
|
+
mockWallet,
|
|
60
|
+
)
|
|
36
61
|
|
|
37
62
|
expect(namespace).toBeInstanceOf(WalletLendNamespace)
|
|
38
63
|
})
|
|
39
64
|
|
|
40
65
|
it('should inherit read operations from ActionsLendNamespace', async () => {
|
|
41
|
-
const namespace = new WalletLendNamespace(
|
|
66
|
+
const namespace = new WalletLendNamespace(
|
|
67
|
+
{ morpho: mockProvider },
|
|
68
|
+
mockWallet,
|
|
69
|
+
)
|
|
42
70
|
const mockMarkets = [
|
|
43
71
|
{
|
|
44
72
|
marketId: {
|
|
@@ -75,32 +103,34 @@ describe('WalletLendNamespace', () => {
|
|
|
75
103
|
const result = await namespace.getMarkets()
|
|
76
104
|
|
|
77
105
|
expect(mockProvider.getMarkets).toHaveBeenCalled()
|
|
78
|
-
expect(result).
|
|
106
|
+
expect(result).toStrictEqual(mockMarkets)
|
|
79
107
|
})
|
|
80
108
|
|
|
81
109
|
describe('openPosition', () => {
|
|
82
110
|
it('should call provider openPosition with wallet address as receiver', async () => {
|
|
83
|
-
const namespace = new WalletLendNamespace(
|
|
111
|
+
const namespace = new WalletLendNamespace(
|
|
112
|
+
{ morpho: mockProvider },
|
|
113
|
+
mockWallet,
|
|
114
|
+
)
|
|
84
115
|
const mockAsset = {
|
|
85
116
|
address: { 130: getRandomAddress() },
|
|
86
117
|
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
87
118
|
type: 'erc20' as const,
|
|
88
119
|
}
|
|
89
120
|
const amount = 1000
|
|
90
|
-
const marketId =
|
|
121
|
+
const marketId = mockMarketId
|
|
91
122
|
const mockTransaction = {
|
|
92
123
|
amount: 1000000000n,
|
|
93
124
|
asset: mockAsset.address[130],
|
|
94
125
|
marketId: marketId.address,
|
|
95
126
|
apy: 0.05,
|
|
96
127
|
transactionData: {
|
|
97
|
-
|
|
128
|
+
position: {
|
|
98
129
|
to: marketId.address,
|
|
99
130
|
value: 0n,
|
|
100
131
|
data: '0x' as const,
|
|
101
132
|
},
|
|
102
133
|
},
|
|
103
|
-
slippage: 50,
|
|
104
134
|
}
|
|
105
135
|
|
|
106
136
|
vi.mocked(mockProvider.openPosition).mockResolvedValue(mockTransaction)
|
|
@@ -128,10 +158,13 @@ describe('WalletLendNamespace', () => {
|
|
|
128
158
|
|
|
129
159
|
describe('closePosition', () => {
|
|
130
160
|
it('should call provider closePosition and execute transaction for SmartWallet', async () => {
|
|
131
|
-
const namespace = new WalletLendNamespace(
|
|
161
|
+
const namespace = new WalletLendNamespace(
|
|
162
|
+
{ morpho: mockProvider },
|
|
163
|
+
mockWallet,
|
|
164
|
+
)
|
|
132
165
|
const closeParams = {
|
|
133
166
|
amount: 100,
|
|
134
|
-
marketId:
|
|
167
|
+
marketId: mockMarketId,
|
|
135
168
|
}
|
|
136
169
|
|
|
137
170
|
const mockTransaction = {
|
|
@@ -140,7 +173,7 @@ describe('WalletLendNamespace', () => {
|
|
|
140
173
|
marketId: closeParams.marketId.address,
|
|
141
174
|
apy: 0.05,
|
|
142
175
|
transactionData: {
|
|
143
|
-
|
|
176
|
+
position: {
|
|
144
177
|
to: closeParams.marketId.address,
|
|
145
178
|
value: 0n,
|
|
146
179
|
data: '0x' as const,
|
|
@@ -158,7 +191,7 @@ describe('WalletLendNamespace', () => {
|
|
|
158
191
|
options: undefined,
|
|
159
192
|
})
|
|
160
193
|
expect(mockWallet.send).toHaveBeenCalledWith(
|
|
161
|
-
mockTransaction.transactionData.
|
|
194
|
+
mockTransaction.transactionData.position,
|
|
162
195
|
130,
|
|
163
196
|
)
|
|
164
197
|
expect(result).toEqual({
|
|
@@ -169,26 +202,32 @@ describe('WalletLendNamespace', () => {
|
|
|
169
202
|
})
|
|
170
203
|
|
|
171
204
|
it('should store the wallet reference', () => {
|
|
172
|
-
const namespace = new WalletLendNamespace(
|
|
205
|
+
const namespace = new WalletLendNamespace(
|
|
206
|
+
{ morpho: mockProvider },
|
|
207
|
+
mockWallet,
|
|
208
|
+
)
|
|
173
209
|
|
|
174
210
|
expect(namespace['wallet']).toBe(mockWallet)
|
|
175
211
|
expect(namespace['wallet'].address).toBe(mockWalletAddress)
|
|
176
212
|
})
|
|
177
213
|
|
|
178
214
|
it('should execute transaction with approval when present', async () => {
|
|
179
|
-
const namespace = new WalletLendNamespace(
|
|
215
|
+
const namespace = new WalletLendNamespace(
|
|
216
|
+
{ morpho: mockProvider },
|
|
217
|
+
mockWallet,
|
|
218
|
+
)
|
|
180
219
|
const mockAsset = {
|
|
181
220
|
address: { 130: getRandomAddress() },
|
|
182
221
|
metadata: { symbol: 'USDC', name: 'USD Coin', decimals: 6 },
|
|
183
222
|
type: 'erc20' as const,
|
|
184
223
|
}
|
|
185
|
-
const marketId =
|
|
224
|
+
const marketId = mockMarketId
|
|
186
225
|
const approval: TransactionData = {
|
|
187
226
|
to: mockAsset.address[130],
|
|
188
227
|
value: 0n,
|
|
189
228
|
data: '0xapproval' as const,
|
|
190
229
|
}
|
|
191
|
-
const
|
|
230
|
+
const position: TransactionData = {
|
|
192
231
|
to: marketId.address,
|
|
193
232
|
value: 0n,
|
|
194
233
|
data: '0xdeposit' as const,
|
|
@@ -199,8 +238,7 @@ describe('WalletLendNamespace', () => {
|
|
|
199
238
|
marketId: marketId.address,
|
|
200
239
|
apy: 0.05,
|
|
201
240
|
timestamp: Date.now(),
|
|
202
|
-
transactionData: { approval,
|
|
203
|
-
slippage: 50,
|
|
241
|
+
transactionData: { approval, position },
|
|
204
242
|
}
|
|
205
243
|
|
|
206
244
|
vi.mocked(mockProvider.openPosition).mockResolvedValue(mockTransaction)
|
|
@@ -211,10 +249,7 @@ describe('WalletLendNamespace', () => {
|
|
|
211
249
|
marketId,
|
|
212
250
|
})
|
|
213
251
|
|
|
214
|
-
expect(mockWallet.sendBatch).toHaveBeenCalledWith(
|
|
215
|
-
[approval, openPosition],
|
|
216
|
-
130,
|
|
217
|
-
)
|
|
252
|
+
expect(mockWallet.sendBatch).toHaveBeenCalledWith([approval, position], 130)
|
|
218
253
|
expect(result).toEqual({
|
|
219
254
|
receipt: { success: true },
|
|
220
255
|
userOpHash: '0xmockbatchhash',
|