@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,419 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
2
+
3
+ import { MockReceiverAddress } from '@/lend/__mocks__/MockMarkets.js'
4
+ import {
5
+ createMockAaveReserve,
6
+ createMockWETHReserve,
7
+ } from '@/lend/providers/aave/__mocks__/mockReserve.js'
8
+ import { AaveLendProvider } from '@/lend/providers/aave/AaveLendProvider.js'
9
+ import * as aaveSdk from '@/lend/providers/aave/sdk.js'
10
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
11
+ import type { ChainManager } from '@/services/ChainManager.js'
12
+ import type { LendProviderConfig } from '@/types/actions.js'
13
+ import type { Asset, LendMarketConfig } from '@/types/index.js'
14
+
15
+ // Mock the Aave SDK modules
16
+ vi.mock('@/lend/providers/aave/sdk.js', () => ({
17
+ getReserve: vi.fn(),
18
+ getReserves: vi.fn(),
19
+ getATokenAddress: vi.fn(),
20
+ }))
21
+
22
+ // Mock assets for Aave tests (using Base chain ID 8453)
23
+ const MockAaveUSDCAsset: Asset = {
24
+ address: {
25
+ 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
26
+ },
27
+ metadata: {
28
+ decimals: 6,
29
+ name: 'USD Coin',
30
+ symbol: 'USDC',
31
+ },
32
+ type: 'erc20',
33
+ }
34
+
35
+ const MockAaveETHAsset: Asset = {
36
+ address: {
37
+ 8453: 'native',
38
+ },
39
+ metadata: {
40
+ decimals: 18,
41
+ name: 'Ethereum',
42
+ symbol: 'ETH',
43
+ },
44
+ type: 'native',
45
+ }
46
+
47
+ // Mock market configurations for Aave
48
+ const MockAaveUSDCMarket: LendMarketConfig = {
49
+ address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
50
+ chainId: 8453, // Base
51
+ name: 'Aave USDC Base',
52
+ asset: MockAaveUSDCAsset,
53
+ lendProvider: 'aave',
54
+ }
55
+
56
+ const MockAaveETHMarket: LendMarketConfig = {
57
+ address: '0x4200000000000000000000000000000000000006', // WETH predeploy (market uses WETH internally)
58
+ chainId: 8453,
59
+ name: 'Aave ETH Base',
60
+ asset: MockAaveETHAsset,
61
+ lendProvider: 'aave',
62
+ }
63
+
64
+ describe('AaveLendProvider', () => {
65
+ let provider: AaveLendProvider
66
+ let mockConfig: LendProviderConfig
67
+ let mockChainManager: ChainManager
68
+
69
+ beforeEach(() => {
70
+ mockConfig = {
71
+ marketAllowlist: [MockAaveUSDCMarket, MockAaveETHMarket],
72
+ }
73
+
74
+ mockChainManager = new MockChainManager({
75
+ supportedChains: [8453],
76
+ }) as unknown as ChainManager
77
+
78
+ provider = new AaveLendProvider(mockConfig, mockChainManager)
79
+ })
80
+
81
+ afterEach(() => {
82
+ vi.clearAllMocks()
83
+ })
84
+
85
+ describe('constructor', () => {
86
+ it('should initialize with provided config', () => {
87
+ expect(provider).toBeInstanceOf(AaveLendProvider)
88
+ })
89
+ })
90
+
91
+ describe('supportedChainIds', () => {
92
+ it('should return array of supported chain IDs', () => {
93
+ const chainIds = provider.supportedChainIds()
94
+
95
+ expect(chainIds).toHaveLength(4)
96
+ expect(chainIds).toContain(10) // Optimism
97
+ expect(chainIds).toContain(8453) // Base
98
+ expect(chainIds).toContain(11155420) // Optimism Sepolia
99
+ expect(chainIds).toContain(84532) // Base Sepolia
100
+ })
101
+
102
+ it('should return unique chain IDs', () => {
103
+ const chainIds = provider.supportedChainIds()
104
+ const uniqueIds = [...new Set(chainIds)]
105
+
106
+ expect(chainIds.length).toBe(uniqueIds.length)
107
+ })
108
+ })
109
+
110
+ describe('openPosition', () => {
111
+ beforeEach(() => {
112
+ const mockReserve = createMockAaveReserve()
113
+ vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockReserve)
114
+ })
115
+
116
+ it('should successfully create a lending transaction for ERC20', async () => {
117
+ const amount = 1000
118
+ const asset = MockAaveUSDCAsset
119
+ const marketId = {
120
+ address: MockAaveUSDCMarket.address,
121
+ chainId: MockAaveUSDCMarket.chainId,
122
+ }
123
+
124
+ const lendTransaction = await provider.openPosition({
125
+ amount,
126
+ asset,
127
+ marketId,
128
+ walletAddress: MockReceiverAddress,
129
+ })
130
+
131
+ expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'))
132
+ expect(lendTransaction).toHaveProperty(
133
+ 'asset',
134
+ asset.address[marketId.chainId],
135
+ )
136
+ expect(lendTransaction).toHaveProperty('marketId', marketId.address)
137
+ expect(lendTransaction).toHaveProperty('apy')
138
+ expect(lendTransaction).toHaveProperty('transactionData')
139
+ expect(lendTransaction.transactionData).toHaveProperty('approval')
140
+ expect(lendTransaction.transactionData).toHaveProperty('position')
141
+ expect(typeof lendTransaction.apy).toBe('number')
142
+ expect(lendTransaction.apy).toBeGreaterThan(0)
143
+ })
144
+
145
+ it('should create native ETH deposit without approval', async () => {
146
+ const mockETHReserve = createMockWETHReserve()
147
+ vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
148
+
149
+ const amount = 1
150
+ const asset = MockAaveETHAsset
151
+ const marketId = {
152
+ address: MockAaveETHMarket.address,
153
+ chainId: MockAaveETHMarket.chainId,
154
+ }
155
+
156
+ const lendTransaction = await provider.openPosition({
157
+ amount,
158
+ asset,
159
+ marketId,
160
+ walletAddress: MockReceiverAddress,
161
+ })
162
+
163
+ expect(lendTransaction).toHaveProperty(
164
+ 'amount',
165
+ BigInt('1000000000000000000'),
166
+ )
167
+ expect(lendTransaction.transactionData).not.toHaveProperty('approval')
168
+ expect(lendTransaction.transactionData).toHaveProperty('position')
169
+ // Native ETH deposits send ETH as msg.value via WETHGateway
170
+ expect(lendTransaction.transactionData.position.value).toBe(
171
+ BigInt('1000000000000000000'),
172
+ )
173
+ })
174
+
175
+ it('should handle lending errors', async () => {
176
+ vi.mocked(aaveSdk.getReserve).mockRejectedValueOnce(
177
+ new Error('Market fetch failed'),
178
+ )
179
+
180
+ const asset = MockAaveUSDCAsset
181
+ const amount = 1000
182
+ const marketId = {
183
+ address: MockAaveUSDCMarket.address,
184
+ chainId: MockAaveUSDCMarket.chainId,
185
+ }
186
+
187
+ await expect(
188
+ provider.openPosition({
189
+ amount,
190
+ asset,
191
+ marketId,
192
+ walletAddress: MockReceiverAddress,
193
+ }),
194
+ ).rejects.toThrow('Failed to open position')
195
+ })
196
+ })
197
+
198
+ describe('closePosition', () => {
199
+ beforeEach(() => {
200
+ const mockReserve = createMockAaveReserve()
201
+ vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockReserve)
202
+ })
203
+
204
+ it('should successfully create a withdrawal transaction for ERC20', async () => {
205
+ const amount = 500
206
+ const asset = MockAaveUSDCAsset
207
+ const marketId = {
208
+ address: MockAaveUSDCMarket.address,
209
+ chainId: MockAaveUSDCMarket.chainId,
210
+ }
211
+ const walletAddress = MockReceiverAddress
212
+
213
+ const withdrawTransaction = await provider.closePosition({
214
+ amount,
215
+ asset,
216
+ marketId,
217
+ walletAddress,
218
+ })
219
+
220
+ expect(withdrawTransaction).toHaveProperty('amount', BigInt('500000000'))
221
+ expect(withdrawTransaction).toHaveProperty(
222
+ 'asset',
223
+ asset.address[marketId.chainId],
224
+ )
225
+ expect(withdrawTransaction).toHaveProperty('marketId', marketId.address)
226
+ expect(withdrawTransaction).toHaveProperty('apy')
227
+ expect(withdrawTransaction).toHaveProperty('transactionData')
228
+ expect(withdrawTransaction.transactionData).toHaveProperty('position')
229
+ expect(withdrawTransaction.transactionData).not.toHaveProperty('approval')
230
+ expect(typeof withdrawTransaction.apy).toBe('number')
231
+ expect(withdrawTransaction.apy).toBeGreaterThan(0)
232
+ })
233
+
234
+ it('should create native ETH withdrawal with approval', async () => {
235
+ const mockETHReserve = createMockWETHReserve()
236
+ vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
237
+ vi.mocked(aaveSdk.getATokenAddress).mockResolvedValue(
238
+ '0xD4a0e0b9149BCee3C920d2E00b5dE09138fd8bb7',
239
+ )
240
+
241
+ const amount = 1
242
+ const asset = MockAaveETHAsset
243
+ const marketId = {
244
+ address: MockAaveETHMarket.address,
245
+ chainId: MockAaveETHMarket.chainId,
246
+ }
247
+
248
+ const withdrawTransaction = await provider.closePosition({
249
+ amount,
250
+ asset,
251
+ marketId,
252
+ walletAddress: MockReceiverAddress,
253
+ })
254
+
255
+ expect(withdrawTransaction).toHaveProperty(
256
+ 'amount',
257
+ BigInt('1000000000000000000'),
258
+ )
259
+ // Native ETH withdrawals require approving aWETH to WETHGateway
260
+ expect(withdrawTransaction.transactionData).toHaveProperty('approval')
261
+ expect(withdrawTransaction.transactionData).toHaveProperty('position')
262
+ })
263
+
264
+ it('should handle withdrawal errors', async () => {
265
+ vi.mocked(aaveSdk.getReserve).mockRejectedValueOnce(
266
+ new Error('Market fetch failed'),
267
+ )
268
+
269
+ const amount = 500
270
+ const asset = MockAaveUSDCAsset
271
+ const marketId = {
272
+ address: MockAaveUSDCMarket.address,
273
+ chainId: MockAaveUSDCMarket.chainId,
274
+ }
275
+ const walletAddress = MockReceiverAddress
276
+
277
+ await expect(
278
+ provider.closePosition({
279
+ amount,
280
+ asset,
281
+ marketId,
282
+ walletAddress,
283
+ }),
284
+ ).rejects.toThrow('Market fetch failed')
285
+ })
286
+ })
287
+
288
+ describe('market allowlist configuration', () => {
289
+ it('should work without market allowlist', () => {
290
+ const configWithoutAllowlist: LendProviderConfig = {}
291
+
292
+ const providerWithoutAllowlist = new AaveLendProvider(
293
+ configWithoutAllowlist,
294
+ mockChainManager,
295
+ )
296
+
297
+ expect(providerWithoutAllowlist.config.marketAllowlist).toBeUndefined()
298
+ })
299
+
300
+ it('should store market allowlist when provided', () => {
301
+ const configWithAllowlist: LendProviderConfig = {
302
+ marketAllowlist: [MockAaveUSDCMarket],
303
+ }
304
+
305
+ const providerWithAllowlist = new AaveLendProvider(
306
+ configWithAllowlist,
307
+ mockChainManager,
308
+ )
309
+
310
+ const allowlist = providerWithAllowlist.config.marketAllowlist
311
+ expect(allowlist).toBeDefined()
312
+ expect(allowlist).toHaveLength(1)
313
+ expect(allowlist![0].address).toBe(MockAaveUSDCMarket.address)
314
+ expect(allowlist![0].name).toBe(MockAaveUSDCMarket.name)
315
+ })
316
+
317
+ it('should handle multiple markets in allowlist', () => {
318
+ const configWithMultipleMarkets: LendProviderConfig = {
319
+ marketAllowlist: [MockAaveUSDCMarket, MockAaveETHMarket],
320
+ }
321
+
322
+ const providerInstance = new AaveLendProvider(
323
+ configWithMultipleMarkets,
324
+ mockChainManager,
325
+ )
326
+
327
+ const allowlist = providerInstance.config.marketAllowlist
328
+ expect(allowlist).toBeDefined()
329
+ expect(allowlist).toHaveLength(2)
330
+ expect(allowlist![0].name).toBe(MockAaveUSDCMarket.name)
331
+ expect(allowlist![1].name).toBe(MockAaveETHMarket.name)
332
+ })
333
+ })
334
+
335
+ describe('ETH/WETH market configuration', () => {
336
+ it('should detect native asset type for ETH market', () => {
337
+ // Market is configured with ETH (type: native) but uses WETH address internally
338
+ expect(MockAaveETHMarket.asset.type).toBe('native')
339
+ expect(MockAaveETHMarket.asset.address[8453]).toBe('native')
340
+ // Market address points to WETH for Aave's internal operations
341
+ expect(MockAaveETHMarket.address).toBe(
342
+ '0x4200000000000000000000000000000000000006',
343
+ )
344
+ })
345
+
346
+ it('should use WETHGateway for ETH deposits when asset type is native', async () => {
347
+ const mockETHReserve = createMockWETHReserve()
348
+ vi.mocked(aaveSdk.getReserve).mockResolvedValue(mockETHReserve)
349
+
350
+ const lendTransaction = await provider.openPosition({
351
+ amount: 1,
352
+ asset: MockAaveETHAsset,
353
+ marketId: {
354
+ address: MockAaveETHMarket.address,
355
+ chainId: MockAaveETHMarket.chainId,
356
+ },
357
+ walletAddress: MockReceiverAddress,
358
+ })
359
+
360
+ // Native ETH deposits should have msg.value set (WETHGateway flow)
361
+ expect(lendTransaction.transactionData.position.value).toBe(
362
+ BigInt('1000000000000000000'),
363
+ )
364
+ // Should not require approval for native ETH
365
+ expect(lendTransaction.transactionData.approval).toBeUndefined()
366
+ })
367
+
368
+ it('should allow developer to configure ETH market without knowing about WETH internals', () => {
369
+ // Developer configures market with ETH asset
370
+ // SDK handles WETH internally via WETHGateway
371
+ const marketConfig: LendMarketConfig = {
372
+ address: '0x4200000000000000000000000000000000000006', // WETH address
373
+ chainId: 8453,
374
+ name: 'Aave ETH',
375
+ asset: MockAaveETHAsset, // Uses ETH (native) asset
376
+ lendProvider: 'aave',
377
+ }
378
+
379
+ // Verify the market uses native asset
380
+ expect(marketConfig.asset.type).toBe('native')
381
+ // Developer doesn't need to create a separate WETH asset
382
+ })
383
+ })
384
+
385
+ describe('unsupported chain handling', () => {
386
+ it('should throw error for unsupported chain', async () => {
387
+ // Use type assertion to test runtime behavior with unsupported chain
388
+ const unsupportedChainId = 999999 as 8453
389
+ const unsupportedMarket: LendMarketConfig = {
390
+ address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
391
+ chainId: unsupportedChainId,
392
+ name: 'Unsupported Market',
393
+ asset: MockAaveUSDCAsset,
394
+ lendProvider: 'aave',
395
+ }
396
+
397
+ const configWithUnsupported: LendProviderConfig = {
398
+ marketAllowlist: [unsupportedMarket],
399
+ }
400
+
401
+ const providerWithUnsupported = new AaveLendProvider(
402
+ configWithUnsupported,
403
+ mockChainManager,
404
+ )
405
+
406
+ await expect(
407
+ providerWithUnsupported.openPosition({
408
+ amount: 100,
409
+ asset: MockAaveUSDCAsset,
410
+ marketId: {
411
+ address: unsupportedMarket.address,
412
+ chainId: unsupportedMarket.chainId,
413
+ },
414
+ walletAddress: MockReceiverAddress,
415
+ }),
416
+ ).rejects.toThrow('not supported')
417
+ })
418
+ })
419
+ })
@@ -0,0 +1,81 @@
1
+ import { parseAbi } from 'viem'
2
+
3
+ /**
4
+ * Aave Pool ABI - supply and withdraw functions
5
+ */
6
+ export const POOL_ABI = parseAbi([
7
+ 'function supply(address asset, uint256 amount, address onBehalfOf, uint16 referralCode)',
8
+ 'function withdraw(address asset, uint256 amount, address to) returns (uint256)',
9
+ ])
10
+
11
+ /**
12
+ * Aave Pool ABI - getReserveData for fetching reserve info including aToken addresses
13
+ */
14
+ export const POOL_GET_RESERVE_DATA_ABI = [
15
+ {
16
+ inputs: [{ name: 'asset', type: 'address', internalType: 'address' }],
17
+ name: 'getReserveData',
18
+ outputs: [
19
+ {
20
+ components: [
21
+ { name: 'data', type: 'uint256', internalType: 'uint256' },
22
+ ],
23
+ name: 'configuration',
24
+ type: 'tuple',
25
+ internalType: 'struct DataTypes.ReserveConfigurationMap',
26
+ },
27
+ { name: 'liquidityIndex', type: 'uint128', internalType: 'uint128' },
28
+ {
29
+ name: 'currentLiquidityRate',
30
+ type: 'uint128',
31
+ internalType: 'uint128',
32
+ },
33
+ { name: 'variableBorrowIndex', type: 'uint128', internalType: 'uint128' },
34
+ {
35
+ name: 'currentVariableBorrowRate',
36
+ type: 'uint128',
37
+ internalType: 'uint128',
38
+ },
39
+ {
40
+ name: 'currentStableBorrowRate',
41
+ type: 'uint128',
42
+ internalType: 'uint128',
43
+ },
44
+ { name: 'lastUpdateTimestamp', type: 'uint40', internalType: 'uint40' },
45
+ { name: 'id', type: 'uint16', internalType: 'uint16' },
46
+ { name: 'aTokenAddress', type: 'address', internalType: 'address' },
47
+ {
48
+ name: 'stableDebtTokenAddress',
49
+ type: 'address',
50
+ internalType: 'address',
51
+ },
52
+ {
53
+ name: 'variableDebtTokenAddress',
54
+ type: 'address',
55
+ internalType: 'address',
56
+ },
57
+ {
58
+ name: 'interestRateStrategyAddress',
59
+ type: 'address',
60
+ internalType: 'address',
61
+ },
62
+ { name: 'accruedToTreasury', type: 'uint128', internalType: 'uint128' },
63
+ { name: 'unbacked', type: 'uint128', internalType: 'uint128' },
64
+ {
65
+ name: 'isolationModeTotalDebt',
66
+ type: 'uint128',
67
+ internalType: 'uint128',
68
+ },
69
+ ],
70
+ stateMutability: 'view',
71
+ type: 'function',
72
+ },
73
+ ] as const
74
+
75
+ /**
76
+ * Aave WETHGateway ABI - for native ETH deposits/withdrawals
77
+ */
78
+ export const WETH_GATEWAY_ABI = parseAbi([
79
+ 'function depositETH(address pool, address onBehalfOf, uint16 referralCode) payable',
80
+ 'function withdrawETH(address pool, uint256 amount, address to)',
81
+ ])
@@ -0,0 +1,95 @@
1
+ import type { Address } from 'viem'
2
+ import { base, baseSepolia, optimism, optimismSepolia } from 'viem/chains'
3
+
4
+ /**
5
+ * Aave V3 Pool addresses for Optimism Superchain networks
6
+ * @description Hardcoded Pool contract addresses for each supported chain
7
+ */
8
+
9
+ /**
10
+ * Mainnet Pool addresses
11
+ */
12
+ export const POOL_ADDRESSES_MAINNET: Record<number, Address> = {
13
+ [optimism.id]: '0x794a61358D6845594F94dc1DB02A252b5b4814aD',
14
+ [base.id]: '0xA238Dd80C259a72e81d7e4664a9801593F98d1c5',
15
+ } as const
16
+
17
+ /**
18
+ * Testnet Pool addresses
19
+ */
20
+ export const POOL_ADDRESSES_TESTNET: Record<number, Address> = {
21
+ [optimismSepolia.id]: '0xb50201558b00496a145fe76f7424749556e326d8',
22
+ [baseSepolia.id]: '0x8bAB6d1b75f19e9eD9fCe8b9BD338844fF79aE27',
23
+ } as const
24
+
25
+ /**
26
+ * All Pool addresses (mainnet + testnet)
27
+ */
28
+ export const POOL_ADDRESSES: Record<number, Address> = {
29
+ ...POOL_ADDRESSES_MAINNET,
30
+ ...POOL_ADDRESSES_TESTNET,
31
+ } as const
32
+
33
+ /**
34
+ * Get Pool address for a given chain ID
35
+ * @param chainId - Chain ID
36
+ * @returns Pool address if supported, undefined otherwise
37
+ */
38
+ export function getPoolAddress(chainId: number): Address | undefined {
39
+ return POOL_ADDRESSES[chainId]
40
+ }
41
+
42
+ /**
43
+ * Check if a chain ID has Aave V3 deployed
44
+ * @param chainId - Chain ID to check
45
+ * @returns true if Aave V3 is deployed on this chain
46
+ */
47
+ export function isAaveChainSupported(chainId: number): boolean {
48
+ return chainId in POOL_ADDRESSES
49
+ }
50
+
51
+ /**
52
+ * Get all supported chain IDs
53
+ * @returns Array of chain IDs with Aave V3 deployed
54
+ */
55
+ export function getSupportedChainIds(): number[] {
56
+ return Object.keys(POOL_ADDRESSES).map(Number)
57
+ }
58
+
59
+ /**
60
+ * Aave V3 WETHGateway addresses for Optimism Superchain networks
61
+ * @description Gateway contracts that handle native ETH wrapping and depositing
62
+ */
63
+
64
+ /**
65
+ * Mainnet WETHGateway addresses
66
+ */
67
+ export const WETH_GATEWAY_ADDRESSES_MAINNET: Record<number, Address> = {
68
+ [optimism.id]: '0x5f2508cAE9923b02316254026CD43d7902866725',
69
+ [base.id]: '0xa0d9C1E9E48Ca30c8d8C3B5D69FF5dc1f6DFfC24',
70
+ } as const
71
+
72
+ /**
73
+ * Testnet WETHGateway addresses
74
+ */
75
+ export const WETH_GATEWAY_ADDRESSES_TESTNET: Record<number, Address> = {
76
+ [optimismSepolia.id]: '0x589750BA8aF186cE5B55391B0b7148cAD43a1619',
77
+ [baseSepolia.id]: '0x0568130e794429D2eEBC4dafE18f25Ff1a1ed8b6',
78
+ } as const
79
+
80
+ /**
81
+ * All WETHGateway addresses (mainnet + testnet)
82
+ */
83
+ export const WETH_GATEWAY_ADDRESSES: Record<number, Address> = {
84
+ ...WETH_GATEWAY_ADDRESSES_MAINNET,
85
+ ...WETH_GATEWAY_ADDRESSES_TESTNET,
86
+ } as const
87
+
88
+ /**
89
+ * Get WETHGateway address for a given chain ID
90
+ * @param chainId - Chain ID
91
+ * @returns WETHGateway address if supported, undefined otherwise
92
+ */
93
+ export function getWETHGatewayAddress(chainId: number): Address | undefined {
94
+ return WETH_GATEWAY_ADDRESSES[chainId]
95
+ }