@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,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 { LendProvider } from '@/lend/core/LendProvider.js'
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
- protected readonly provider: LendProvider<TConfig>,
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 lendTransaction = await this.provider.openPosition({
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
- const { transactionData } = lendTransaction
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
- return this.provider.getPosition(
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 closeTransaction = await this.provider.closePosition({
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
- const { transactionData } = closeTransaction
107
- if (!transactionData) {
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
- if (!transactionData.closePosition) {
114
- throw new Error('No closePosition transaction data returned')
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 await this.wallet.send(
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: LendProvider
10
+ let mockProvider: MockLendProvider
11
+ let mockMarketId: { address: Address; chainId: 130 }
10
12
 
11
13
  beforeEach(() => {
12
- mockProvider = createMockLendProvider()
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({ address: marketId, chainId })
52
+ await namespace.getMarket(mockMarketId)
37
53
 
38
- expect(spy).toHaveBeenCalledWith({ address: marketId, chainId })
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 { createMockLendProvider } from '@/test/MockLendProvider.js'
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: LendProvider
15
+ let mockProvider: MockLendProvider
14
16
  let mockWallet: SmartWallet
17
+ let mockMarketId: { address: Address; chainId: 130 }
15
18
 
16
19
  beforeEach(() => {
17
- mockProvider = createMockLendProvider()
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(mockProvider, mockWallet)
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(mockProvider, mockWallet)
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).toBe(mockMarkets)
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(mockProvider, mockWallet)
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 = { address: getRandomAddress(), chainId: 130 as const }
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
- openPosition: {
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(mockProvider, mockWallet)
161
+ const namespace = new WalletLendNamespace(
162
+ { morpho: mockProvider },
163
+ mockWallet,
164
+ )
132
165
  const closeParams = {
133
166
  amount: 100,
134
- marketId: { address: getRandomAddress(), chainId: 130 as const },
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
- closePosition: {
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.closePosition,
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(mockProvider, mockWallet)
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(mockProvider, mockWallet)
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 = { address: getRandomAddress(), chainId: 130 as const }
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 openPosition: TransactionData = {
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, openPosition },
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',