@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.
Files changed (395) hide show
  1. package/LICENSE +1 -1
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -0
  3. package/dist/__mocks__/MockAssets.js.map +1 -0
  4. package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
  5. package/dist/__mocks__/MockPrivyClient.js.map +1 -0
  6. package/dist/__mocks__/utils.d.ts.map +1 -0
  7. package/dist/__mocks__/utils.js.map +1 -0
  8. package/dist/__tests__/actions.test.d.ts.map +1 -0
  9. package/dist/{actions.test.js → __tests__/actions.test.js} +35 -85
  10. package/dist/__tests__/actions.test.js.map +1 -0
  11. package/dist/actions.d.ts +19 -7
  12. package/dist/actions.d.ts.map +1 -1
  13. package/dist/actions.js +49 -19
  14. package/dist/actions.js.map +1 -1
  15. package/dist/constants/assets.d.ts +19 -0
  16. package/dist/constants/assets.d.ts.map +1 -1
  17. package/dist/constants/assets.js +84 -6
  18. package/dist/constants/assets.js.map +1 -1
  19. package/dist/constants/supportedChains.d.ts +1 -1
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +7 -3
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/core/asset/__mocks__/mockAsset.js +1 -1
  24. package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +9 -7
  30. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
  31. package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
  32. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
  33. package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
  34. package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
  35. package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
  36. package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
  37. package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
  38. package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
  39. package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
  40. package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
  41. package/dist/lend/core/LendProvider.d.ts +16 -3
  42. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  43. package/dist/lend/core/LendProvider.js +23 -2
  44. package/dist/lend/core/LendProvider.js.map +1 -1
  45. package/dist/lend/core/__tests__/LendProvider.test.js +20 -50
  46. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  47. package/dist/lend/index.d.ts +1 -0
  48. package/dist/lend/index.d.ts.map +1 -1
  49. package/dist/lend/index.js +1 -0
  50. package/dist/lend/index.js.map +1 -1
  51. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -9
  52. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  53. package/dist/lend/namespaces/ActionsLendNamespace.js +2 -11
  54. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  55. package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
  57. package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
  58. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
  59. package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -9
  60. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  61. package/dist/lend/namespaces/WalletLendNamespace.js +24 -31
  62. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  63. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +25 -17
  64. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  65. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
  66. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
  67. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
  68. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
  69. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +37 -21
  70. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  71. package/dist/lend/providers/aave/AaveLendProvider.d.ts +74 -0
  72. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -0
  73. package/dist/lend/providers/aave/AaveLendProvider.js +290 -0
  74. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -0
  75. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
  76. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
  77. package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
  78. package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
  79. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
  80. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
  81. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
  82. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
  83. package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
  84. package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
  85. package/dist/lend/providers/aave/abis/pool.js +79 -0
  86. package/dist/lend/providers/aave/abis/pool.js.map +1 -0
  87. package/dist/lend/providers/aave/addresses.d.ts +57 -0
  88. package/dist/lend/providers/aave/addresses.d.ts.map +1 -0
  89. package/dist/lend/providers/aave/addresses.js +83 -0
  90. package/dist/lend/providers/aave/addresses.js.map +1 -0
  91. package/dist/lend/providers/aave/sdk.d.ts +57 -0
  92. package/dist/lend/providers/aave/sdk.d.ts.map +1 -0
  93. package/dist/lend/providers/aave/sdk.js +201 -0
  94. package/dist/lend/providers/aave/sdk.js.map +1 -0
  95. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +4 -4
  96. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  97. package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
  98. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  99. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +6 -57
  100. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  101. package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
  102. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  103. package/dist/lend/providers/morpho/__tests__/sdk.test.js +1 -0
  104. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  105. package/dist/lend/providers/morpho/contracts.d.ts +19 -0
  106. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
  107. package/dist/lend/providers/morpho/contracts.js +32 -0
  108. package/dist/lend/providers/morpho/contracts.js.map +1 -0
  109. package/dist/lend/providers/morpho/sdk.d.ts +4 -3
  110. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  111. package/dist/lend/providers/morpho/sdk.js +168 -71
  112. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  113. package/dist/services/ChainManager.d.ts +1 -1
  114. package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
  115. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
  116. package/dist/services/__mocks__/MockChainManager.js.map +1 -0
  117. package/dist/services/tokenBalance.d.ts.map +1 -1
  118. package/dist/services/tokenBalance.js +4 -5
  119. package/dist/services/tokenBalance.js.map +1 -1
  120. package/dist/services/tokenBalance.spec.js +2 -2
  121. package/dist/services/tokenBalance.spec.js.map +1 -1
  122. package/dist/supported/tokens.d.ts +4 -4
  123. package/dist/supported/tokens.d.ts.map +1 -1
  124. package/dist/supported/tokens.js +5 -56
  125. package/dist/supported/tokens.js.map +1 -1
  126. package/dist/types/actions.d.ts +26 -2
  127. package/dist/types/actions.d.ts.map +1 -1
  128. package/dist/types/asset.d.ts +3 -3
  129. package/dist/types/asset.d.ts.map +1 -1
  130. package/dist/types/lend/base.d.ts +10 -28
  131. package/dist/types/lend/base.d.ts.map +1 -1
  132. package/dist/types/lend/contracts.d.ts +17 -0
  133. package/dist/types/lend/contracts.d.ts.map +1 -0
  134. package/dist/types/lend/contracts.js +2 -0
  135. package/dist/types/lend/contracts.js.map +1 -0
  136. package/dist/types/lend/index.d.ts +1 -0
  137. package/dist/types/lend/index.d.ts.map +1 -1
  138. package/dist/types/lend/index.js +1 -0
  139. package/dist/types/lend/index.js.map +1 -1
  140. package/dist/utils/assets.d.ts +7 -1
  141. package/dist/utils/assets.d.ts.map +1 -1
  142. package/dist/utils/assets.js +12 -1
  143. package/dist/utils/assets.js.map +1 -1
  144. package/dist/utils/assets.test.js +1 -1
  145. package/dist/utils/assets.test.js.map +1 -1
  146. package/dist/utils/constants.d.ts +5 -0
  147. package/dist/utils/constants.d.ts.map +1 -0
  148. package/dist/utils/constants.js +5 -0
  149. package/dist/utils/constants.js.map +1 -0
  150. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  151. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  152. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +13 -13
  153. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  154. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +12 -12
  155. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  156. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +12 -3
  157. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  158. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +3 -2
  159. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  160. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
  161. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  162. package/dist/wallet/core/providers/hosted/types/index.d.ts +8 -2
  163. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  164. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +14 -6
  165. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  166. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +10 -6
  167. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  168. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +39 -16
  169. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  170. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +19 -7
  171. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  172. package/dist/wallet/core/wallets/abstract/Wallet.js +9 -7
  173. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  174. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
  175. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  176. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
  177. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
  178. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +9 -3
  179. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  180. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +4 -4
  181. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  182. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +4 -4
  183. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  184. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
  185. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
  186. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
  187. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
  188. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +10 -3
  189. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  190. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -3
  191. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  192. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +7 -6
  193. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  194. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  195. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +5 -4
  196. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  197. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
  198. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  199. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +9 -2
  200. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  201. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +6 -3
  202. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  203. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +5 -4
  204. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  205. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -3
  206. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  207. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +5 -4
  208. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  209. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
  210. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  211. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
  212. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  213. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +8 -2
  214. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  215. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  216. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  217. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  218. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  219. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  220. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  221. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +6 -2
  222. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  223. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -3
  224. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  225. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
  226. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
  227. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
  228. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +22 -7
  229. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  230. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -2
  231. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  232. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -3
  233. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  234. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
  235. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
  236. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
  237. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +8 -4
  238. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  239. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -2
  240. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  241. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -3
  242. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  243. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +7 -4
  244. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  245. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  246. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  247. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
  248. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  249. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +6 -2
  250. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  251. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  252. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  253. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +6 -0
  254. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  255. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  256. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +2 -2
  257. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
  258. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
  259. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
  260. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +6 -2
  261. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  262. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  263. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  264. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +2 -2
  265. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  266. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
  267. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  268. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +6 -2
  269. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  270. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  271. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  272. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  273. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  274. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  275. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  276. package/package.json +4 -1
  277. package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
  278. package/src/{actions.test.ts → __tests__/actions.test.ts} +34 -95
  279. package/src/actions.ts +82 -26
  280. package/src/constants/assets.ts +92 -8
  281. package/src/constants/supportedChains.ts +10 -2
  282. package/src/core/asset/__mocks__/mockAsset.ts +1 -1
  283. package/src/index.ts +2 -3
  284. package/src/{test → lend/__mocks__}/MockLendProvider.ts +24 -27
  285. package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
  286. package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
  287. package/src/lend/core/LendProvider.ts +40 -7
  288. package/src/lend/core/__tests__/LendProvider.test.ts +21 -63
  289. package/src/lend/index.ts +1 -0
  290. package/src/lend/namespaces/ActionsLendNamespace.ts +2 -21
  291. package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
  292. package/src/lend/namespaces/WalletLendNamespace.ts +39 -55
  293. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +29 -22
  294. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
  295. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +61 -26
  296. package/src/lend/providers/aave/AaveLendProvider.ts +395 -0
  297. package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
  298. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
  299. package/src/lend/providers/aave/abis/pool.ts +81 -0
  300. package/src/lend/providers/aave/addresses.ts +95 -0
  301. package/src/lend/providers/aave/sdk.ts +307 -0
  302. package/src/lend/providers/morpho/MorphoLendProvider.ts +23 -44
  303. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +13 -85
  304. package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
  305. package/src/lend/providers/morpho/__tests__/sdk.test.ts +1 -0
  306. package/src/lend/providers/morpho/contracts.ts +37 -0
  307. package/src/lend/providers/morpho/sdk.ts +235 -87
  308. package/src/services/tokenBalance.spec.ts +2 -2
  309. package/src/services/tokenBalance.ts +6 -7
  310. package/src/supported/tokens.ts +6 -57
  311. package/src/types/actions.ts +30 -2
  312. package/src/types/asset.ts +3 -3
  313. package/src/types/lend/base.ts +14 -33
  314. package/src/types/lend/contracts.ts +18 -0
  315. package/src/types/lend/index.ts +1 -0
  316. package/src/utils/assets.test.ts +1 -1
  317. package/src/utils/assets.ts +15 -1
  318. package/src/utils/constants.ts +4 -0
  319. package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
  320. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +15 -15
  321. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +14 -14
  322. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +15 -4
  323. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
  324. package/src/wallet/core/providers/hosted/types/index.ts +8 -2
  325. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +24 -9
  326. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +45 -55
  327. package/src/wallet/core/wallets/abstract/Wallet.ts +25 -17
  328. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
  329. package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
  330. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +17 -10
  331. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +7 -10
  332. package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
  333. package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
  334. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -5
  335. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +8 -8
  336. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +6 -4
  337. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
  338. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +13 -4
  339. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +5 -5
  340. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +18 -6
  341. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
  342. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
  343. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +16 -5
  344. package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  345. package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  346. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +8 -4
  347. package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
  348. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +31 -17
  349. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +8 -4
  350. package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
  351. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +10 -11
  352. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -4
  353. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +7 -8
  354. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +6 -6
  355. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
  356. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -5
  357. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +6 -0
  358. package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
  359. package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
  360. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +12 -5
  361. package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
  362. package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
  363. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +12 -5
  364. package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  365. package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  366. package/dist/actions.test.d.ts.map +0 -1
  367. package/dist/actions.test.js.map +0 -1
  368. package/dist/constants/config.d.ts +0 -10
  369. package/dist/constants/config.d.ts.map +0 -1
  370. package/dist/constants/config.js +0 -10
  371. package/dist/constants/config.js.map +0 -1
  372. package/dist/test/MockAssets.d.ts.map +0 -1
  373. package/dist/test/MockAssets.js.map +0 -1
  374. package/dist/test/MockChainManager.d.ts.map +0 -1
  375. package/dist/test/MockChainManager.js.map +0 -1
  376. package/dist/test/MockLendProvider.d.ts.map +0 -1
  377. package/dist/test/MockLendProvider.js.map +0 -1
  378. package/dist/test/MockMarkets.d.ts.map +0 -1
  379. package/dist/test/MockMarkets.js.map +0 -1
  380. package/dist/test/MockPrivyClient.d.ts.map +0 -1
  381. package/dist/test/MockPrivyClient.js.map +0 -1
  382. package/dist/test/utils.d.ts.map +0 -1
  383. package/dist/test/utils.js.map +0 -1
  384. package/src/constants/config.ts +0 -9
  385. /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
  386. /package/dist/{test → __mocks__}/MockAssets.js +0 -0
  387. /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
  388. /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
  389. /package/dist/{test → __mocks__}/utils.d.ts +0 -0
  390. /package/dist/{test → __mocks__}/utils.js +0 -0
  391. /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
  392. /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
  393. /package/src/{test → __mocks__}/MockAssets.ts +0 -0
  394. /package/src/{test → __mocks__}/utils.ts +0 -0
  395. /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
@@ -0,0 +1,307 @@
1
+ import { UiPoolDataProvider } from '@aave/contract-helpers'
2
+ import { formatReserves } from '@aave/math-utils'
3
+ import { providers } from 'ethers'
4
+ import type { Address } from 'viem'
5
+ import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains'
6
+
7
+ import { WETH } from '@/constants/assets.js'
8
+ import type { SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
9
+ import { POOL_GET_RESERVE_DATA_ABI } from '@/lend/providers/aave/abis/pool.js'
10
+ import { getPoolAddress } from '@/lend/providers/aave/addresses.js'
11
+ import type { ChainManager } from '@/services/ChainManager.js'
12
+ import type { LendProviderConfig } from '@/types/actions.js'
13
+ import type {
14
+ ApyBreakdown,
15
+ LendMarket,
16
+ LendMarketConfig,
17
+ LendMarketId,
18
+ } from '@/types/lend/index.js'
19
+ import { getAssetAddress } from '@/utils/assets.js'
20
+
21
+ /**
22
+ * UI Pool Data Provider addresses for each chain
23
+ * @description Contract addresses for UiPoolDataProvider on each supported chain
24
+ */
25
+ const UI_POOL_DATA_PROVIDER_ADDRESSES: Record<number, Address> = {
26
+ [optimism.id]: '0x69FA688f1Dc47d4B5d8029D5a35FB7a548310654',
27
+ [base.id]: '0xd82a47fdebB5bf5329b09441C3DaB4b5df2153Ad',
28
+ [optimismSepolia.id]: '0x86E2938daE289763D4e09a7e42c5cCcA62Cf9809',
29
+ [baseSepolia.id]: '0xBc9f5b7E248451CdD7cA54e717a2BFe1F32b566b',
30
+ } as const
31
+
32
+ /**
33
+ * Pool Addresses Provider addresses for each chain
34
+ */
35
+ const POOL_ADDRESSES_PROVIDER: Record<number, Address> = {
36
+ [optimism.id]: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
37
+ [base.id]: '0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D',
38
+ [optimismSepolia.id]: '0x36616cf17557639614c1cdDb356b1B83fc0B2132',
39
+ [baseSepolia.id]: '0xE4C23309117Aa30342BFaae6c95c6478e0A4Ad00',
40
+ } as const
41
+
42
+ /**
43
+ * Parameters for getReserve function
44
+ */
45
+ interface GetReserveParams {
46
+ /** Market identifier (asset address and chainId) */
47
+ marketId: LendMarketId
48
+ /** Chain manager instance */
49
+ chainManager: ChainManager
50
+ /** Lend configuration containing market allowlist */
51
+ lendConfig?: LendProviderConfig
52
+ }
53
+
54
+ /**
55
+ * Parameters for getReserves function
56
+ */
57
+ interface GetReservesParams {
58
+ chainManager: ChainManager
59
+ lendConfig: LendProviderConfig
60
+ markets: LendMarketConfig[]
61
+ }
62
+
63
+ /**
64
+ * Find market configuration in allowlist
65
+ * @param marketAllowlist - Array of allowed market configurations
66
+ * @param marketId - Market identifier to find
67
+ * @returns Market configuration if found, undefined otherwise
68
+ */
69
+ function findMarketInAllowlist(
70
+ marketAllowlist: LendMarketConfig[],
71
+ marketId: LendMarketId,
72
+ ): LendMarketConfig | undefined {
73
+ return marketAllowlist.find(
74
+ (config) =>
75
+ config.address.toLowerCase() === marketId.address.toLowerCase() &&
76
+ config.chainId === marketId.chainId,
77
+ )
78
+ }
79
+
80
+ /**
81
+ * Calculate APY breakdown from reserve data
82
+ * @param reserve - Formatted reserve data from Aave
83
+ * @returns APY breakdown with native APY and rewards
84
+ */
85
+ export function calculateApyBreakdown(reserve: {
86
+ formattedReserve?: any
87
+ }): ApyBreakdown {
88
+ // Get supply APY from formatted reserve data
89
+ const supplyApy = reserve.formattedReserve?.supplyAPY
90
+ ? parseFloat(reserve.formattedReserve.supplyAPY)
91
+ : 0
92
+
93
+ // Aave doesn't have vault-style performance fees
94
+ // Total APY = Supply APY + any rewards (to be added later)
95
+ return {
96
+ total: supplyApy,
97
+ native: supplyApy,
98
+ totalRewards: 0, // TODO: Fetch from incentives data provider if needed
99
+ performanceFee: 0, // Aave doesn't have performance fees
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Get detailed reserve (market) information from Aave
105
+ * @param params - Named parameters object
106
+ * @returns Promise resolving to detailed market information
107
+ */
108
+ export async function getReserve(
109
+ params: GetReserveParams,
110
+ ): Promise<LendMarket> {
111
+ // Find market configuration in allowlist for metadata
112
+ const marketConfig = params.lendConfig?.marketAllowlist
113
+ ? findMarketInAllowlist(params.lendConfig.marketAllowlist, params.marketId)
114
+ : undefined
115
+
116
+ if (!marketConfig) {
117
+ throw new Error(
118
+ `Market ${params.marketId.address} on chain ${params.marketId.chainId} not found in allowlist`,
119
+ )
120
+ }
121
+
122
+ const poolAddress = getPoolAddress(params.marketId.chainId)
123
+ if (!poolAddress) {
124
+ throw new Error(`Aave V3 not deployed on chain ${params.marketId.chainId}`)
125
+ }
126
+
127
+ const uiPoolDataProviderAddress =
128
+ UI_POOL_DATA_PROVIDER_ADDRESSES[params.marketId.chainId]
129
+ const poolAddressesProvider = POOL_ADDRESSES_PROVIDER[params.marketId.chainId]
130
+
131
+ if (!uiPoolDataProviderAddress || !poolAddressesProvider) {
132
+ throw new Error(
133
+ `UiPoolDataProvider not configured for chain ${params.marketId.chainId}`,
134
+ )
135
+ }
136
+
137
+ try {
138
+ // Get viem public client for this chain
139
+ const publicClient = params.chainManager.getPublicClient(
140
+ params.marketId.chainId,
141
+ )
142
+
143
+ // Create ethers provider from viem's RPC URL
144
+ // Aave SDK requires ethers provider, not viem
145
+ const rpcUrl =
146
+ publicClient.chain?.rpcUrls.default.http[0] ||
147
+ publicClient.chain?.rpcUrls.public?.http[0]
148
+ if (!rpcUrl) {
149
+ throw new Error(
150
+ `No RPC URL available for chain ${params.marketId.chainId}`,
151
+ )
152
+ }
153
+ const ethersProvider = new providers.JsonRpcProvider(rpcUrl)
154
+
155
+ // Create UiPoolDataProvider instance
156
+ const uiPoolDataProvider = new UiPoolDataProvider({
157
+ uiPoolDataProviderAddress,
158
+ provider: ethersProvider,
159
+ chainId: params.marketId.chainId,
160
+ })
161
+
162
+ // Fetch reserve data
163
+ const reservesData = await uiPoolDataProvider.getReservesHumanized({
164
+ lendingPoolAddressProvider: poolAddressesProvider,
165
+ })
166
+
167
+ // Find the specific reserve for this asset
168
+ // For native ETH assets, use WETH address since Aave uses WETH internally
169
+ const assetAddress =
170
+ marketConfig.asset.type === 'native'
171
+ ? getAssetAddress(WETH, params.marketId.chainId)
172
+ : getAssetAddress(marketConfig.asset, params.marketId.chainId)
173
+
174
+ const reserve = reservesData.reservesData.find(
175
+ (r) => r.underlyingAsset.toLowerCase() === assetAddress.toLowerCase(),
176
+ )
177
+
178
+ if (!reserve) {
179
+ throw new Error(
180
+ `Reserve not found for asset ${assetAddress} on chain ${params.marketId.chainId}`,
181
+ )
182
+ }
183
+
184
+ // Format reserves using Aave math-utils
185
+ const currentTimestamp = Math.floor(Date.now() / 1000)
186
+ const formattedReserves = formatReserves({
187
+ reserves: [reserve],
188
+ currentTimestamp,
189
+ marketReferenceCurrencyDecimals:
190
+ reservesData.baseCurrencyData.marketReferenceCurrencyDecimals,
191
+ marketReferencePriceInUsd:
192
+ reservesData.baseCurrencyData.marketReferenceCurrencyPriceInUsd,
193
+ })
194
+
195
+ const formattedReserve = formattedReserves[0]
196
+
197
+ // Calculate APY breakdown
198
+ const apy = calculateApyBreakdown({
199
+ ...reserve,
200
+ formattedReserve,
201
+ })
202
+
203
+ // Return market information in our standard format
204
+ return {
205
+ marketId: params.marketId,
206
+ name: marketConfig.name,
207
+ asset: marketConfig.asset,
208
+ supply: {
209
+ totalAssets: BigInt(reserve.availableLiquidity),
210
+ totalShares: BigInt(reserve.totalScaledVariableDebt || '0'),
211
+ },
212
+ apy,
213
+ metadata: {
214
+ owner: poolAddress, // Use Pool as owner
215
+ curator: poolAddress, // No curator in Aave
216
+ fee: 0, // No performance fee in Aave
217
+ lastUpdate: currentTimestamp,
218
+ },
219
+ }
220
+ } catch (error) {
221
+ throw new Error(
222
+ `Failed to get reserve info for ${params.marketId.address}: ${
223
+ error instanceof Error ? error.message : 'Unknown error'
224
+ }`,
225
+ )
226
+ }
227
+ }
228
+
229
+ /**
230
+ * Get multiple reserves (markets)
231
+ * @param params - Parameters including markets to fetch
232
+ * @returns Promise resolving to array of market information
233
+ */
234
+ export async function getReserves(
235
+ params: GetReservesParams,
236
+ ): Promise<LendMarket[]> {
237
+ try {
238
+ const reservePromises = params.markets.map((marketConfig) => {
239
+ return getReserve({
240
+ marketId: {
241
+ address: marketConfig.address,
242
+ chainId: marketConfig.chainId,
243
+ },
244
+ chainManager: params.chainManager,
245
+ lendConfig: params.lendConfig,
246
+ })
247
+ })
248
+
249
+ return await Promise.all(reservePromises)
250
+ } catch (error) {
251
+ throw new Error(
252
+ `Failed to get reserves: ${
253
+ error instanceof Error ? error.message : 'Unknown error'
254
+ }`,
255
+ )
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Get aToken address for a given underlying asset
261
+ * @param params - Parameters including asset address, chain ID, and chain manager
262
+ * @returns Promise resolving to aToken address
263
+ * @description Queries the Aave Pool to get the aToken address for the underlying asset
264
+ */
265
+ export async function getATokenAddress(params: {
266
+ underlyingAsset: Address
267
+ chainId: (typeof SUPPORTED_CHAIN_IDS)[number]
268
+ chainManager: ChainManager
269
+ }): Promise<Address> {
270
+ const poolAddress = getPoolAddress(params.chainId)
271
+ if (!poolAddress) {
272
+ throw new Error(`Aave V3 not deployed on chain ${params.chainId}`)
273
+ }
274
+
275
+ try {
276
+ // Get viem public client for this chain
277
+ const publicClient = params.chainManager.getPublicClient(params.chainId)
278
+
279
+ // Query the Pool contract directly for reserve data
280
+ const reserveData = await publicClient.readContract({
281
+ address: poolAddress,
282
+ abi: POOL_GET_RESERVE_DATA_ABI,
283
+ functionName: 'getReserveData',
284
+ args: [params.underlyingAsset],
285
+ })
286
+
287
+ // The return is a tuple where index 8 is aTokenAddress
288
+ const aTokenAddress = reserveData[8]
289
+
290
+ if (
291
+ !aTokenAddress ||
292
+ aTokenAddress === '0x0000000000000000000000000000000000000000'
293
+ ) {
294
+ throw new Error(
295
+ `No aToken found for asset ${params.underlyingAsset} on chain ${params.chainId}`,
296
+ )
297
+ }
298
+
299
+ return aTokenAddress
300
+ } catch (error) {
301
+ throw new Error(
302
+ `Failed to get aToken address for ${params.underlyingAsset}: ${
303
+ error instanceof Error ? error.message : 'Unknown error'
304
+ }`,
305
+ )
306
+ }
307
+ }
@@ -1,11 +1,12 @@
1
1
  import { ChainId } from '@morpho-org/blue-sdk'
2
2
  import { MetaMorphoAction } from '@morpho-org/blue-sdk-viem'
3
- import { encodeFunctionData, erc20Abi, formatUnits } from 'viem'
3
+ import { erc20Abi, formatUnits } from 'viem'
4
4
 
5
5
  import { SUPPORTED_CHAIN_IDS as ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
6
6
  import { LendProvider } from '@/lend/core/LendProvider.js'
7
7
  import { getVault, getVaults } from '@/lend/providers/morpho/sdk.js'
8
8
  import type { ChainManager } from '@/services/ChainManager.js'
9
+ import type { LendProviderConfig } from '@/types/actions.js'
9
10
  import type {
10
11
  GetLendMarketsParams,
11
12
  GetMarketBalanceParams,
@@ -15,7 +16,6 @@ import type {
15
16
  LendMarketPosition,
16
17
  LendOpenPositionInternalParams,
17
18
  LendTransaction,
18
- MorphoLendConfig,
19
19
  } from '@/types/lend/index.js'
20
20
  import { getAssetAddress } from '@/utils/assets.js'
21
21
 
@@ -36,19 +36,16 @@ export const SUPPORTED_CHAIN_IDS = [
36
36
  * Morpho lending provider implementation
37
37
  * @description Lending provider implementation using Morpho protocol
38
38
  */
39
- export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
39
+ export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
40
40
  protected readonly SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS
41
41
 
42
- private chainManager: ChainManager
43
-
44
42
  /**
45
43
  * Create a new Morpho lending provider
46
44
  * @param config - Morpho lending configuration
47
45
  * @param chainManager - Chain manager for blockchain interactions
48
46
  */
49
- constructor(config: MorphoLendConfig, chainManager: ChainManager) {
50
- super(config)
51
- this.chainManager = chainManager
47
+ constructor(config: LendProviderConfig, chainManager: ChainManager) {
48
+ super(config, chainManager)
52
49
  }
53
50
 
54
51
  /**
@@ -61,13 +58,11 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
61
58
  params: LendOpenPositionInternalParams,
62
59
  ): Promise<LendTransaction> {
63
60
  try {
64
- // Get asset address for the chain
65
- const assetAddress = params.asset.address[params.marketId.chainId]
66
- if (!assetAddress) {
67
- throw new Error(
68
- `Asset not supported on chain ${params.marketId.chainId}`,
69
- )
70
- }
61
+ // Get asset address for the chain (throws for native assets)
62
+ const assetAddress = getAssetAddress(
63
+ params.asset,
64
+ params.marketId.chainId,
65
+ )
71
66
 
72
67
  // Get vault information for APY
73
68
  const vaultInfo = await this.getMarket({
@@ -79,36 +74,27 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
79
74
  const receiver = params.walletAddress
80
75
  const depositCallData = MetaMorphoAction.deposit(assets, receiver)
81
76
 
82
- const approvalCallData = encodeFunctionData({
83
- abi: erc20Abi,
84
- functionName: 'approve',
85
- args: [params.marketId.address, params.amountWei],
86
- })
87
-
88
77
  return {
89
78
  amount: params.amountWei,
90
79
  asset: assetAddress,
91
80
  marketId: params.marketId.address,
92
81
  apy: vaultInfo.apy.total,
93
82
  transactionData: {
94
- approval: {
95
- to: assetAddress,
96
- data: approvalCallData,
97
- value: 0n,
98
- },
99
- openPosition: {
83
+ approval: this.buildApprovalTx(
84
+ assetAddress,
85
+ params.marketId.address,
86
+ params.amountWei,
87
+ ),
88
+ position: {
100
89
  to: params.marketId.address,
101
90
  data: depositCallData,
102
91
  value: 0n,
103
92
  },
104
93
  },
105
- slippage: params.options?.slippage || this._config.defaultSlippage,
106
94
  }
107
- } catch (error) {
95
+ } catch {
108
96
  throw new Error(
109
- `Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}: ${
110
- error instanceof Error ? error.message : 'Unknown error'
111
- }`,
97
+ `Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}`,
112
98
  )
113
99
  }
114
100
  }
@@ -149,20 +135,15 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
149
135
  marketId: params.marketId.address,
150
136
  apy: vaultInfo.apy.total,
151
137
  transactionData: {
152
- closePosition: {
138
+ position: {
153
139
  to: params.marketId.address,
154
140
  data: withdrawCallData,
155
141
  value: 0n,
156
142
  },
157
143
  },
158
- slippage: params.options?.slippage || this._config.defaultSlippage,
159
144
  }
160
- } catch (error) {
161
- throw new Error(
162
- `Failed to close position: ${
163
- error instanceof Error ? error.message : 'Unknown error'
164
- }`,
165
- )
145
+ } catch {
146
+ throw new Error('Failed to close position')
166
147
  }
167
148
  }
168
149
 
@@ -247,11 +228,9 @@ export class MorphoLendProvider extends LendProvider<MorphoLendConfig> {
247
228
  sharesFormatted,
248
229
  marketId: params.marketId,
249
230
  }
250
- } catch (error) {
231
+ } catch {
251
232
  throw new Error(
252
- `Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}: ${
253
- error instanceof Error ? error.message : 'Unknown error'
254
- }`,
233
+ `Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}`,
255
234
  )
256
235
  }
257
236
  }
@@ -1,16 +1,16 @@
1
1
  import { fetchAccrualVault } from '@morpho-org/blue-sdk-viem'
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
3
3
 
4
- import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
5
- import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
6
- import type { ChainManager } from '@/services/ChainManager.js'
7
- import { MockChainManager } from '@/test/MockChainManager.js'
8
4
  import {
9
5
  MockGauntletUSDCMarket,
10
6
  MockReceiverAddress,
11
7
  MockWETHMarket,
12
- } from '@/test/MockMarkets.js'
13
- import type { MorphoLendConfig } from '@/types/lend/index.js'
8
+ } from '@/lend/__mocks__/MockMarkets.js'
9
+ import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
10
+ import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
11
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
12
+ import type { ChainManager } from '@/services/ChainManager.js'
13
+ import type { LendProviderConfig } from '@/types/actions.js'
14
14
 
15
15
  // Mock the Morpho SDK modules
16
16
  vi.mock('@morpho-org/blue-sdk-viem', () => ({
@@ -36,13 +36,11 @@ vi.mock('@morpho-org/bundler-sdk-viem', () => ({
36
36
 
37
37
  describe('MorphoLendProvider', () => {
38
38
  let provider: MorphoLendProvider
39
- let mockConfig: MorphoLendConfig
39
+ let mockConfig: LendProviderConfig
40
40
  let mockChainManager: ChainManager
41
41
 
42
42
  beforeEach(() => {
43
43
  mockConfig = {
44
- provider: 'morpho',
45
- defaultSlippage: 50,
46
44
  marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
47
45
  }
48
46
 
@@ -55,18 +53,6 @@ describe('MorphoLendProvider', () => {
55
53
  it('should initialize with provided config', () => {
56
54
  expect(provider).toBeInstanceOf(MorphoLendProvider)
57
55
  })
58
-
59
- it('should use default slippage when not provided', () => {
60
- const configWithoutSlippage = {
61
- ...mockConfig,
62
- defaultSlippage: undefined,
63
- }
64
- const providerWithDefaults = new MorphoLendProvider(
65
- configWithoutSlippage,
66
- mockChainManager,
67
- )
68
- expect(providerWithDefaults).toBeInstanceOf(MorphoLendProvider)
69
- })
70
56
  })
71
57
 
72
58
  describe('closePosition', () => {
@@ -121,9 +107,7 @@ describe('MorphoLendProvider', () => {
121
107
  expect(withdrawTransaction).toHaveProperty('marketId', marketId.address)
122
108
  expect(withdrawTransaction).toHaveProperty('apy')
123
109
  expect(withdrawTransaction).toHaveProperty('transactionData')
124
- expect(withdrawTransaction.transactionData).toHaveProperty(
125
- 'closePosition',
126
- )
110
+ expect(withdrawTransaction.transactionData).toHaveProperty('position')
127
111
  expect(withdrawTransaction.transactionData).not.toHaveProperty('approval')
128
112
  expect(typeof withdrawTransaction.apy).toBe('number')
129
113
  expect(withdrawTransaction.apy).toBeGreaterThan(0)
@@ -223,7 +207,7 @@ describe('MorphoLendProvider', () => {
223
207
  expect(lendTransaction).toHaveProperty('apy')
224
208
  expect(lendTransaction).toHaveProperty('transactionData')
225
209
  expect(lendTransaction.transactionData).toHaveProperty('approval')
226
- expect(lendTransaction.transactionData).toHaveProperty('openPosition')
210
+ expect(lendTransaction.transactionData).toHaveProperty('position')
227
211
  expect(typeof lendTransaction.apy).toBe('number')
228
212
  expect(lendTransaction.apy).toBeGreaterThan(0)
229
213
  })
@@ -247,38 +231,13 @@ describe('MorphoLendProvider', () => {
247
231
  marketId,
248
232
  walletAddress: MockReceiverAddress,
249
233
  }),
250
- ).rejects.toThrow('Market fetch failed')
251
- })
252
-
253
- it('should use custom slippage when provided', async () => {
254
- const amount = 1000
255
- const asset = MockGauntletUSDCMarket.asset
256
- const marketId = {
257
- address: MockGauntletUSDCMarket.address,
258
- chainId: MockGauntletUSDCMarket.chainId,
259
- }
260
- const customSlippage = 100 // 1%
261
-
262
- const lendTransaction = await provider.openPosition({
263
- amount,
264
- asset,
265
- marketId,
266
- walletAddress: MockReceiverAddress,
267
- options: {
268
- slippage: customSlippage,
269
- },
270
- })
271
-
272
- expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'))
234
+ ).rejects.toThrow('Failed to open position')
273
235
  })
274
236
  })
275
237
 
276
238
  describe('market allowlist configuration', () => {
277
239
  it('should work without market allowlist', () => {
278
- const configWithoutAllowlist: MorphoLendConfig = {
279
- provider: 'morpho',
280
- defaultSlippage: 50,
281
- }
240
+ const configWithoutAllowlist: LendProviderConfig = {}
282
241
 
283
242
  const providerWithoutAllowlist = new MorphoLendProvider(
284
243
  configWithoutAllowlist,
@@ -289,9 +248,7 @@ describe('MorphoLendProvider', () => {
289
248
  })
290
249
 
291
250
  it('should store market allowlist when provided', () => {
292
- const configWithAllowlist: MorphoLendConfig = {
293
- provider: 'morpho',
294
- defaultSlippage: 50,
251
+ const configWithAllowlist: LendProviderConfig = {
295
252
  marketAllowlist: [MockGauntletUSDCMarket],
296
253
  }
297
254
 
@@ -307,37 +264,8 @@ describe('MorphoLendProvider', () => {
307
264
  expect(allowlist![0].name).toBe(MockGauntletUSDCMarket.name)
308
265
  })
309
266
 
310
- it('should use default slippage from config', () => {
311
- const customSlippage = 150
312
- const configWithSlippage: MorphoLendConfig = {
313
- provider: 'morpho',
314
- defaultSlippage: customSlippage,
315
- }
316
-
317
- const providerWithSlippage = new MorphoLendProvider(
318
- configWithSlippage,
319
- mockChainManager,
320
- )
321
-
322
- expect(providerWithSlippage.config.defaultSlippage).toBe(customSlippage)
323
- })
324
-
325
- it('should use fallback default slippage when not provided', () => {
326
- const configWithoutSlippage: MorphoLendConfig = {
327
- provider: 'morpho',
328
- }
329
-
330
- const providerWithoutSlippage = new MorphoLendProvider(
331
- configWithoutSlippage,
332
- mockChainManager,
333
- )
334
-
335
- expect(providerWithoutSlippage.config.defaultSlippage || 50).toBe(50) // Default fallback
336
- })
337
-
338
267
  it('should handle multiple markets in allowlist', () => {
339
- const configWithMultipleMarkets: MorphoLendConfig = {
340
- provider: 'morpho',
268
+ const configWithMultipleMarkets: LendProviderConfig = {
341
269
  marketAllowlist: [MockGauntletUSDCMarket, MockWETHMarket],
342
270
  }
343
271