@eth-optimism/actions-sdk 0.1.0 → 0.3.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 (500) hide show
  1. package/LICENSE +1 -1
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -0
  3. package/dist/{test → __mocks__}/MockAssets.js +2 -0
  4. package/dist/__mocks__/MockAssets.js.map +1 -0
  5. package/dist/__mocks__/MockPrivyClient.d.ts.map +1 -0
  6. package/dist/__mocks__/MockPrivyClient.js.map +1 -0
  7. package/dist/__mocks__/utils.d.ts.map +1 -0
  8. package/dist/__mocks__/utils.js.map +1 -0
  9. package/dist/__tests__/actions.test.d.ts.map +1 -0
  10. package/dist/{actions.test.js → __tests__/actions.test.js} +5 -9
  11. package/dist/__tests__/actions.test.js.map +1 -0
  12. package/dist/actions.d.ts +20 -1
  13. package/dist/actions.d.ts.map +1 -1
  14. package/dist/actions.js +37 -13
  15. package/dist/actions.js.map +1 -1
  16. package/dist/constants/assets.d.ts +23 -0
  17. package/dist/constants/assets.d.ts.map +1 -1
  18. package/dist/constants/assets.js +99 -6
  19. package/dist/constants/assets.js.map +1 -1
  20. package/dist/constants/contracts.d.ts +4 -0
  21. package/dist/constants/contracts.d.ts.map +1 -0
  22. package/dist/constants/contracts.js +3 -0
  23. package/dist/constants/contracts.js.map +1 -0
  24. package/dist/constants/supportedChains.d.ts +1 -1
  25. package/dist/constants/supportedChains.d.ts.map +1 -1
  26. package/dist/constants/supportedChains.js +7 -3
  27. package/dist/constants/supportedChains.js.map +1 -1
  28. package/dist/core/asset/__mocks__/mockAsset.js +1 -1
  29. package/dist/core/asset/__mocks__/mockAsset.js.map +1 -1
  30. package/dist/index.d.ts +4 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/{test → lend/__mocks__}/MockLendProvider.d.ts +7 -6
  35. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -0
  36. package/dist/{test → lend/__mocks__}/MockLendProvider.js +20 -21
  37. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -0
  38. package/dist/{test → lend/__mocks__}/MockMarkets.d.ts +1 -1
  39. package/dist/lend/__mocks__/MockMarkets.d.ts.map +1 -0
  40. package/dist/{test → lend/__mocks__}/MockMarkets.js +1 -1
  41. package/dist/lend/__mocks__/MockMarkets.js.map +1 -0
  42. package/dist/lend/__mocks__/mockLendTransaction.d.ts +3 -12
  43. package/dist/lend/__mocks__/mockLendTransaction.d.ts.map +1 -1
  44. package/dist/lend/__mocks__/mockLendTransaction.js +3 -19
  45. package/dist/lend/__mocks__/mockLendTransaction.js.map +1 -1
  46. package/dist/lend/core/LendProvider.d.ts +14 -8
  47. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  48. package/dist/lend/core/LendProvider.js +29 -17
  49. package/dist/lend/core/LendProvider.js.map +1 -1
  50. package/dist/lend/core/__tests__/LendProvider.test.js +4 -6
  51. package/dist/lend/core/__tests__/LendProvider.test.js.map +1 -1
  52. package/dist/lend/namespaces/ActionsLendNamespace.d.ts +2 -36
  53. package/dist/lend/namespaces/ActionsLendNamespace.d.ts.map +1 -1
  54. package/dist/lend/namespaces/ActionsLendNamespace.js +2 -48
  55. package/dist/lend/namespaces/ActionsLendNamespace.js.map +1 -1
  56. package/dist/lend/namespaces/BaseLendNamespace.d.ts +47 -0
  57. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -0
  58. package/dist/lend/namespaces/BaseLendNamespace.js +58 -0
  59. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -0
  60. package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -36
  61. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  62. package/dist/lend/namespaces/WalletLendNamespace.js +14 -69
  63. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  64. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js +2 -2
  65. package/dist/lend/namespaces/__tests__/ActionsLendNamespace.spec.js.map +1 -1
  66. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts +2 -0
  67. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.d.ts.map +1 -0
  68. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +110 -0
  69. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -0
  70. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js +8 -10
  71. package/dist/lend/namespaces/__tests__/WalletLendNamespace.spec.js.map +1 -1
  72. package/dist/lend/providers/aave/AaveLendProvider.d.ts +19 -27
  73. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  74. package/dist/lend/providers/aave/AaveLendProvider.js +124 -180
  75. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  76. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts +11 -0
  77. package/dist/lend/providers/aave/__mocks__/mockReserve.d.ts.map +1 -0
  78. package/dist/lend/providers/aave/__mocks__/mockReserve.js +80 -0
  79. package/dist/lend/providers/aave/__mocks__/mockReserve.js.map +1 -0
  80. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts +2 -0
  81. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.d.ts.map +1 -0
  82. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +315 -0
  83. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -0
  84. package/dist/lend/providers/aave/abis/pool.d.ts +153 -0
  85. package/dist/lend/providers/aave/abis/pool.d.ts.map +1 -0
  86. package/dist/lend/providers/aave/abis/pool.js +79 -0
  87. package/dist/lend/providers/aave/abis/pool.js.map +1 -0
  88. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  89. package/dist/lend/providers/aave/sdk.js +6 -65
  90. package/dist/lend/providers/aave/sdk.js.map +1 -1
  91. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +0 -1
  92. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  93. package/dist/lend/providers/morpho/MorphoLendProvider.js +13 -28
  94. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  95. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js +5 -24
  96. package/dist/lend/providers/morpho/__tests__/MorphoLendProvider.test.js.map +1 -1
  97. package/dist/lend/providers/morpho/__tests__/api.test.js +248 -54
  98. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  99. package/dist/lend/providers/morpho/__tests__/sdk.test.js +3 -2
  100. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  101. package/dist/lend/providers/morpho/api.d.ts +4 -0
  102. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  103. package/dist/lend/providers/morpho/api.js.map +1 -1
  104. package/dist/lend/providers/morpho/contracts.d.ts +19 -0
  105. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -0
  106. package/dist/lend/providers/morpho/contracts.js +32 -0
  107. package/dist/lend/providers/morpho/contracts.js.map +1 -0
  108. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  109. package/dist/lend/providers/morpho/sdk.js +177 -71
  110. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  111. package/dist/services/ChainManager.d.ts +1 -1
  112. package/dist/{test → services/__mocks__}/MockChainManager.d.ts +1 -1
  113. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -0
  114. package/dist/services/__mocks__/MockChainManager.js.map +1 -0
  115. package/dist/services/tokenBalance.d.ts.map +1 -1
  116. package/dist/services/tokenBalance.js +4 -5
  117. package/dist/services/tokenBalance.js.map +1 -1
  118. package/dist/services/tokenBalance.spec.js +2 -2
  119. package/dist/services/tokenBalance.spec.js.map +1 -1
  120. package/dist/supported/tokens.d.ts +4 -4
  121. package/dist/supported/tokens.d.ts.map +1 -1
  122. package/dist/supported/tokens.js +10 -70
  123. package/dist/supported/tokens.js.map +1 -1
  124. package/dist/swap/__mocks__/MockSwapProvider.d.ts +38 -0
  125. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -0
  126. package/dist/swap/__mocks__/MockSwapProvider.js +138 -0
  127. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -0
  128. package/dist/swap/core/SwapProvider.d.ts +56 -0
  129. package/dist/swap/core/SwapProvider.d.ts.map +1 -0
  130. package/dist/swap/core/SwapProvider.js +177 -0
  131. package/dist/swap/core/SwapProvider.js.map +1 -0
  132. package/dist/swap/core/__tests__/SwapProvider.test.d.ts +2 -0
  133. package/dist/swap/core/__tests__/SwapProvider.test.d.ts.map +1 -0
  134. package/dist/swap/core/__tests__/SwapProvider.test.js +329 -0
  135. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -0
  136. package/dist/swap/index.d.ts +7 -0
  137. package/dist/swap/index.d.ts.map +1 -0
  138. package/dist/swap/index.js +8 -0
  139. package/dist/swap/index.js.map +1 -0
  140. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +8 -0
  141. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts.map +1 -0
  142. package/dist/swap/namespaces/ActionsSwapNamespace.js +8 -0
  143. package/dist/swap/namespaces/ActionsSwapNamespace.js.map +1 -0
  144. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +33 -0
  145. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -0
  146. package/dist/swap/namespaces/BaseSwapNamespace.js +58 -0
  147. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -0
  148. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +22 -0
  149. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -0
  150. package/dist/swap/namespaces/WalletSwapNamespace.js +60 -0
  151. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -0
  152. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts +2 -0
  153. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.d.ts.map +1 -0
  154. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +106 -0
  155. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -0
  156. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts +2 -0
  157. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.d.ts.map +1 -0
  158. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +132 -0
  159. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -0
  160. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +68 -0
  161. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -0
  162. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +206 -0
  163. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -0
  164. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts +2 -0
  165. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.d.ts.map +1 -0
  166. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +257 -0
  167. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -0
  168. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts +2 -0
  169. package/dist/swap/providers/uniswap/__tests__/sdk.test.d.ts.map +1 -0
  170. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +312 -0
  171. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -0
  172. package/dist/swap/providers/uniswap/abis.d.ts +227 -0
  173. package/dist/swap/providers/uniswap/abis.d.ts.map +1 -0
  174. package/dist/swap/providers/uniswap/abis.js +138 -0
  175. package/dist/swap/providers/uniswap/abis.js.map +1 -0
  176. package/dist/swap/providers/uniswap/addresses.d.ts +21 -0
  177. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -0
  178. package/dist/swap/providers/uniswap/addresses.js +81 -0
  179. package/dist/swap/providers/uniswap/addresses.js.map +1 -0
  180. package/dist/swap/providers/uniswap/encoding.d.ts +77 -0
  181. package/dist/swap/providers/uniswap/encoding.d.ts.map +1 -0
  182. package/dist/swap/providers/uniswap/encoding.js +233 -0
  183. package/dist/swap/providers/uniswap/encoding.js.map +1 -0
  184. package/dist/swap/providers/uniswap/types.d.ts +20 -0
  185. package/dist/swap/providers/uniswap/types.d.ts.map +1 -0
  186. package/dist/swap/providers/uniswap/types.js +2 -0
  187. package/dist/swap/providers/uniswap/types.js.map +1 -0
  188. package/dist/types/actions.d.ts +19 -5
  189. package/dist/types/actions.d.ts.map +1 -1
  190. package/dist/types/asset.d.ts +3 -3
  191. package/dist/types/asset.d.ts.map +1 -1
  192. package/dist/types/index.d.ts +2 -0
  193. package/dist/types/index.d.ts.map +1 -1
  194. package/dist/types/index.js +2 -0
  195. package/dist/types/index.js.map +1 -1
  196. package/dist/types/lend/base.d.ts +7 -22
  197. package/dist/types/lend/base.d.ts.map +1 -1
  198. package/dist/types/lend/base.js.map +1 -1
  199. package/dist/types/lend/contracts.d.ts +17 -0
  200. package/dist/types/lend/contracts.d.ts.map +1 -0
  201. package/dist/types/lend/contracts.js +2 -0
  202. package/dist/types/lend/contracts.js.map +1 -0
  203. package/dist/types/lend/index.d.ts +1 -0
  204. package/dist/types/lend/index.d.ts.map +1 -1
  205. package/dist/types/lend/index.js +1 -0
  206. package/dist/types/lend/index.js.map +1 -1
  207. package/dist/types/swap/base.d.ts +238 -0
  208. package/dist/types/swap/base.d.ts.map +1 -0
  209. package/dist/types/swap/base.js +4 -0
  210. package/dist/types/swap/base.js.map +1 -0
  211. package/dist/types/swap/index.d.ts +2 -0
  212. package/dist/types/swap/index.d.ts.map +1 -0
  213. package/dist/types/swap/index.js +2 -0
  214. package/dist/types/swap/index.js.map +1 -0
  215. package/dist/types/transaction.d.ts +14 -0
  216. package/dist/types/transaction.d.ts.map +1 -0
  217. package/dist/types/transaction.js +2 -0
  218. package/dist/types/transaction.js.map +1 -0
  219. package/dist/utils/assets.d.ts +11 -6
  220. package/dist/utils/assets.d.ts.map +1 -1
  221. package/dist/utils/assets.js +16 -12
  222. package/dist/utils/assets.js.map +1 -1
  223. package/dist/utils/assets.test.js +14 -2
  224. package/dist/utils/assets.test.js.map +1 -1
  225. package/dist/utils/constants.d.ts +5 -0
  226. package/dist/utils/constants.d.ts.map +1 -0
  227. package/dist/utils/constants.js +5 -0
  228. package/dist/utils/constants.js.map +1 -0
  229. package/dist/utils/permit2.d.ts +46 -0
  230. package/dist/utils/permit2.d.ts.map +1 -0
  231. package/dist/utils/permit2.js +100 -0
  232. package/dist/utils/permit2.js.map +1 -0
  233. package/dist/utils/permit2.test.d.ts +2 -0
  234. package/dist/utils/permit2.test.d.ts.map +1 -0
  235. package/dist/utils/permit2.test.js +110 -0
  236. package/dist/utils/permit2.test.js.map +1 -0
  237. package/dist/utils/validation.d.ts +12 -0
  238. package/dist/utils/validation.d.ts.map +1 -0
  239. package/dist/utils/validation.js +44 -0
  240. package/dist/utils/validation.js.map +1 -0
  241. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  242. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  243. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  244. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  245. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +4 -4
  246. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  247. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +7 -1
  248. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  249. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js +2 -1
  250. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  251. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +2 -2
  252. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  253. package/dist/wallet/core/providers/hosted/types/index.d.ts +5 -1
  254. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  255. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +7 -1
  256. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  257. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js +5 -1
  258. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  259. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js +5 -5
  260. package/dist/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.js.map +1 -1
  261. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +13 -2
  262. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  263. package/dist/wallet/core/wallets/abstract/Wallet.js +7 -1
  264. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  265. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +2 -2
  266. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  267. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +2 -2
  268. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
  269. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +7 -2
  270. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  271. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js +6 -5
  272. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  273. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js +3 -3
  274. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  275. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js +1 -1
  276. package/dist/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.js.map +1 -1
  277. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js +1 -1
  278. package/dist/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.js.map +1 -1
  279. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  280. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  281. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -1
  282. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  283. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +4 -4
  284. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  285. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  286. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +4 -3
  287. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  288. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +2 -2
  289. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  290. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +5 -1
  291. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  292. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +4 -2
  293. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  294. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +2 -2
  295. package/dist/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  296. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +6 -1
  297. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  298. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +4 -3
  299. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  300. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +3 -3
  301. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  302. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +2 -2
  303. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  304. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  305. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  306. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  307. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  308. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  309. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  310. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  311. package/dist/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  312. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +7 -1
  313. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  314. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +6 -2
  315. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  316. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.d.ts.map +1 -1
  317. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js +1 -1
  318. package/dist/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.js.map +1 -1
  319. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js +6 -2
  320. package/dist/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.js.map +1 -1
  321. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +6 -1
  322. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  323. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +5 -2
  324. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  325. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.d.ts.map +1 -1
  326. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js +1 -1
  327. package/dist/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.js.map +1 -1
  328. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +3 -2
  329. package/dist/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  330. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +6 -3
  331. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  332. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +5 -4
  333. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  334. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js +2 -2
  335. package/dist/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.js.map +1 -1
  336. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  337. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +6 -6
  338. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  339. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +1 -1
  340. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  341. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +7 -1
  342. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  343. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +5 -3
  344. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  345. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +2 -2
  346. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
  347. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js +1 -1
  348. package/dist/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.js.map +1 -1
  349. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -1
  350. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  351. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  352. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  353. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +2 -2
  354. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  355. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +1 -1
  356. package/dist/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  357. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -1
  358. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  359. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  360. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  361. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -2
  362. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  363. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js +1 -1
  364. package/dist/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.js.map +1 -1
  365. package/package.json +2 -2
  366. package/src/{test → __mocks__}/MockAssets.ts +2 -0
  367. package/src/{test → __mocks__}/MockPrivyClient.ts +1 -1
  368. package/src/{actions.test.ts → __tests__/actions.test.ts} +2 -6
  369. package/src/actions.ts +57 -19
  370. package/src/constants/assets.ts +108 -8
  371. package/src/constants/contracts.ts +5 -0
  372. package/src/constants/supportedChains.ts +10 -2
  373. package/src/core/asset/__mocks__/mockAsset.ts +1 -1
  374. package/src/index.ts +30 -2
  375. package/src/{test → lend/__mocks__}/MockLendProvider.ts +20 -23
  376. package/src/{test → lend/__mocks__}/MockMarkets.ts +1 -1
  377. package/src/lend/__mocks__/mockLendTransaction.ts +4 -26
  378. package/src/lend/core/LendProvider.ts +40 -20
  379. package/src/lend/core/__tests__/LendProvider.test.ts +4 -7
  380. package/src/lend/namespaces/ActionsLendNamespace.ts +2 -85
  381. package/src/lend/namespaces/BaseLendNamespace.ts +89 -0
  382. package/src/lend/namespaces/WalletLendNamespace.ts +25 -121
  383. package/src/lend/namespaces/__tests__/ActionsLendNamespace.spec.ts +10 -9
  384. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +137 -0
  385. package/src/lend/namespaces/__tests__/WalletLendNamespace.spec.ts +19 -22
  386. package/src/lend/providers/aave/AaveLendProvider.ts +163 -231
  387. package/src/lend/providers/aave/__mocks__/mockReserve.ts +84 -0
  388. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +419 -0
  389. package/src/lend/providers/aave/abis/pool.ts +81 -0
  390. package/src/lend/providers/aave/sdk.ts +7 -69
  391. package/src/lend/providers/morpho/MorphoLendProvider.ts +20 -41
  392. package/src/lend/providers/morpho/__tests__/MorphoLendProvider.test.ts +8 -32
  393. package/src/lend/providers/morpho/__tests__/api.test.ts +277 -51
  394. package/src/lend/providers/morpho/__tests__/sdk.test.ts +3 -2
  395. package/src/lend/providers/morpho/api.ts +4 -0
  396. package/src/lend/providers/morpho/contracts.ts +37 -0
  397. package/src/lend/providers/morpho/sdk.ts +241 -84
  398. package/src/services/tokenBalance.spec.ts +2 -2
  399. package/src/services/tokenBalance.ts +6 -7
  400. package/src/supported/tokens.ts +18 -77
  401. package/src/swap/__mocks__/MockSwapProvider.ts +216 -0
  402. package/src/swap/core/SwapProvider.ts +319 -0
  403. package/src/swap/core/__tests__/SwapProvider.test.ts +478 -0
  404. package/src/swap/index.ts +14 -0
  405. package/src/swap/namespaces/ActionsSwapNamespace.ts +7 -0
  406. package/src/swap/namespaces/BaseSwapNamespace.ts +77 -0
  407. package/src/swap/namespaces/WalletSwapNamespace.ts +82 -0
  408. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +138 -0
  409. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +162 -0
  410. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +304 -0
  411. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +299 -0
  412. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +370 -0
  413. package/src/swap/providers/uniswap/abis.ts +144 -0
  414. package/src/swap/providers/uniswap/addresses.ts +108 -0
  415. package/src/swap/providers/uniswap/encoding.ts +406 -0
  416. package/src/swap/providers/uniswap/types.ts +24 -0
  417. package/src/types/actions.ts +22 -6
  418. package/src/types/asset.ts +3 -3
  419. package/src/types/index.ts +2 -0
  420. package/src/types/lend/base.ts +12 -25
  421. package/src/types/lend/contracts.ts +18 -0
  422. package/src/types/lend/index.ts +1 -0
  423. package/src/types/swap/base.ts +259 -0
  424. package/src/types/swap/index.ts +1 -0
  425. package/src/types/transaction.ts +14 -0
  426. package/src/utils/assets.test.ts +17 -2
  427. package/src/utils/assets.ts +28 -11
  428. package/src/utils/constants.ts +4 -0
  429. package/src/utils/permit2.test.ts +142 -0
  430. package/src/utils/permit2.ts +144 -0
  431. package/src/utils/validation.ts +76 -0
  432. package/src/wallet/core/namespace/WalletNamespace.ts +2 -4
  433. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +6 -6
  434. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +6 -6
  435. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +9 -1
  436. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +3 -3
  437. package/src/wallet/core/providers/hosted/types/index.ts +5 -1
  438. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +13 -1
  439. package/src/wallet/core/providers/smart/default/__tests__/DefaultSmartWalletProvider.spec.ts +9 -9
  440. package/src/wallet/core/wallets/abstract/Wallet.ts +18 -2
  441. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +2 -2
  442. package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +2 -2
  443. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +14 -5
  444. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +3 -3
  445. package/src/wallet/core/wallets/smart/default/utils/__tests__/findSignerInArray.spec.ts +1 -1
  446. package/src/wallet/core/wallets/smart/default/utils/__tests__/getSignerPublicKey.spec.ts +1 -1
  447. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +13 -2
  448. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +5 -5
  449. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +10 -2
  450. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +3 -3
  451. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +8 -2
  452. package/src/wallet/node/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +2 -2
  453. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +11 -2
  454. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -4
  455. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +2 -2
  456. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
  457. package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  458. package/src/wallet/node/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  459. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +10 -2
  460. package/src/wallet/react/providers/hosted/dynamic/__mocks__/DynamicHostedWalletProviderMock.ts +1 -1
  461. package/src/wallet/react/providers/hosted/dynamic/__tests__/DynamicHostedWalletProvider.spec.ts +9 -5
  462. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +9 -2
  463. package/src/wallet/react/providers/hosted/privy/__mocks__/PrivyHostedWalletProviderMock.ts +1 -1
  464. package/src/wallet/react/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +5 -5
  465. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +9 -4
  466. package/src/wallet/react/providers/hosted/turnkey/__tests__/TurnkeyHostedWalletProvider.spec.ts +2 -2
  467. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +18 -6
  468. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +5 -7
  469. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +12 -2
  470. package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -2
  471. package/src/wallet/react/wallets/hosted/dynamic/utils/__tests__/createSigner.spec.ts +1 -1
  472. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -2
  473. package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -2
  474. package/src/wallet/react/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +1 -1
  475. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -2
  476. package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -2
  477. package/src/wallet/react/wallets/hosted/turnkey/utils/__tests__/createSigner.spec.ts +1 -1
  478. package/dist/actions.test.d.ts.map +0 -1
  479. package/dist/actions.test.js.map +0 -1
  480. package/dist/test/MockAssets.d.ts.map +0 -1
  481. package/dist/test/MockAssets.js.map +0 -1
  482. package/dist/test/MockChainManager.d.ts.map +0 -1
  483. package/dist/test/MockChainManager.js.map +0 -1
  484. package/dist/test/MockLendProvider.d.ts.map +0 -1
  485. package/dist/test/MockLendProvider.js.map +0 -1
  486. package/dist/test/MockMarkets.d.ts.map +0 -1
  487. package/dist/test/MockMarkets.js.map +0 -1
  488. package/dist/test/MockPrivyClient.d.ts.map +0 -1
  489. package/dist/test/MockPrivyClient.js.map +0 -1
  490. package/dist/test/utils.d.ts.map +0 -1
  491. package/dist/test/utils.js.map +0 -1
  492. /package/dist/{test → __mocks__}/MockAssets.d.ts +0 -0
  493. /package/dist/{test → __mocks__}/MockPrivyClient.d.ts +0 -0
  494. /package/dist/{test → __mocks__}/MockPrivyClient.js +0 -0
  495. /package/dist/{test → __mocks__}/utils.d.ts +0 -0
  496. /package/dist/{test → __mocks__}/utils.js +0 -0
  497. /package/dist/{actions.test.d.ts → __tests__/actions.test.d.ts} +0 -0
  498. /package/dist/{test → services/__mocks__}/MockChainManager.js +0 -0
  499. /package/src/{test → __mocks__}/utils.ts +0 -0
  500. /package/src/{test → services/__mocks__}/MockChainManager.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  import { ChainId } from '@morpho-org/blue-sdk'
2
2
  import { MetaMorphoAction } from '@morpho-org/blue-sdk-viem'
3
- import { encodeFunctionData, erc20Abi, formatUnits } from 'viem'
3
+ import { erc20Abi, formatUnits } from 'viem'
4
4
 
5
5
  import { SUPPORTED_CHAIN_IDS as ACTIONS_SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
6
6
  import { LendProvider } from '@/lend/core/LendProvider.js'
@@ -39,16 +39,13 @@ export const SUPPORTED_CHAIN_IDS = [
39
39
  export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
40
40
  protected readonly SUPPORTED_CHAIN_IDS = SUPPORTED_CHAIN_IDS
41
41
 
42
- private chainManager: ChainManager
43
-
44
42
  /**
45
43
  * Create a new Morpho lending provider
46
44
  * @param config - Morpho lending configuration
47
45
  * @param chainManager - Chain manager for blockchain interactions
48
46
  */
49
47
  constructor(config: LendProviderConfig, chainManager: ChainManager) {
50
- super(config)
51
- this.chainManager = chainManager
48
+ super(config, chainManager)
52
49
  }
53
50
 
54
51
  /**
@@ -61,13 +58,11 @@ export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
61
58
  params: LendOpenPositionInternalParams,
62
59
  ): Promise<LendTransaction> {
63
60
  try {
64
- // Get asset address for the chain
65
- const assetAddress = params.asset.address[params.marketId.chainId]
66
- if (!assetAddress) {
67
- throw new Error(
68
- `Asset not supported on chain ${params.marketId.chainId}`,
69
- )
70
- }
61
+ // Get asset address for the chain (throws for native assets)
62
+ const assetAddress = getAssetAddress(
63
+ params.asset,
64
+ params.marketId.chainId,
65
+ )
71
66
 
72
67
  // Get vault information for APY
73
68
  const vaultInfo = await this.getMarket({
@@ -79,36 +74,27 @@ export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
79
74
  const receiver = params.walletAddress
80
75
  const depositCallData = MetaMorphoAction.deposit(assets, receiver)
81
76
 
82
- const approvalCallData = encodeFunctionData({
83
- abi: erc20Abi,
84
- functionName: 'approve',
85
- args: [params.marketId.address, params.amountWei],
86
- })
87
-
88
77
  return {
89
78
  amount: params.amountWei,
90
79
  asset: assetAddress,
91
80
  marketId: params.marketId.address,
92
81
  apy: vaultInfo.apy.total,
93
82
  transactionData: {
94
- approval: {
95
- to: assetAddress,
96
- data: approvalCallData,
97
- value: 0n,
98
- },
99
- openPosition: {
83
+ approval: this.buildApprovalTx(
84
+ assetAddress,
85
+ params.marketId.address,
86
+ params.amountWei,
87
+ ),
88
+ position: {
100
89
  to: params.marketId.address,
101
90
  data: depositCallData,
102
91
  value: 0n,
103
92
  },
104
93
  },
105
- slippage: params.options?.slippage ?? 50,
106
94
  }
107
- } catch (error) {
95
+ } catch {
108
96
  throw new Error(
109
- `Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}: ${
110
- error instanceof Error ? error.message : 'Unknown error'
111
- }`,
97
+ `Failed to open position with ${params.amountWei} of ${params.asset.metadata.symbol}`,
112
98
  )
113
99
  }
114
100
  }
@@ -149,20 +135,15 @@ export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
149
135
  marketId: params.marketId.address,
150
136
  apy: vaultInfo.apy.total,
151
137
  transactionData: {
152
- closePosition: {
138
+ position: {
153
139
  to: params.marketId.address,
154
140
  data: withdrawCallData,
155
141
  value: 0n,
156
142
  },
157
143
  },
158
- slippage: params.options?.slippage ?? 50,
159
144
  }
160
- } catch (error) {
161
- throw new Error(
162
- `Failed to close position: ${
163
- error instanceof Error ? error.message : 'Unknown error'
164
- }`,
165
- )
145
+ } catch {
146
+ throw new Error('Failed to close position')
166
147
  }
167
148
  }
168
149
 
@@ -247,11 +228,9 @@ export class MorphoLendProvider extends LendProvider<LendProviderConfig> {
247
228
  sharesFormatted,
248
229
  marketId: params.marketId,
249
230
  }
250
- } catch (error) {
231
+ } catch {
251
232
  throw new Error(
252
- `Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}: ${
253
- error instanceof Error ? error.message : 'Unknown error'
254
- }`,
233
+ `Failed to get market balance for ${params.walletAddress} in market ${params.marketId.address}`,
255
234
  )
256
235
  }
257
236
  }
@@ -1,15 +1,15 @@
1
1
  import { fetchAccrualVault } from '@morpho-org/blue-sdk-viem'
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
3
3
 
4
- import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
5
- import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
6
- import type { ChainManager } from '@/services/ChainManager.js'
7
- import { MockChainManager } from '@/test/MockChainManager.js'
8
4
  import {
9
5
  MockGauntletUSDCMarket,
10
6
  MockReceiverAddress,
11
7
  MockWETHMarket,
12
- } from '@/test/MockMarkets.js'
8
+ } from '@/lend/__mocks__/MockMarkets.js'
9
+ import { createMockMorphoVault } from '@/lend/providers/morpho/__mocks__/mockVault.js'
10
+ import { MorphoLendProvider } from '@/lend/providers/morpho/MorphoLendProvider.js'
11
+ import { MockChainManager } from '@/services/__mocks__/MockChainManager.js'
12
+ import type { ChainManager } from '@/services/ChainManager.js'
13
13
  import type { LendProviderConfig } from '@/types/actions.js'
14
14
 
15
15
  // Mock the Morpho SDK modules
@@ -107,9 +107,7 @@ describe('MorphoLendProvider', () => {
107
107
  expect(withdrawTransaction).toHaveProperty('marketId', marketId.address)
108
108
  expect(withdrawTransaction).toHaveProperty('apy')
109
109
  expect(withdrawTransaction).toHaveProperty('transactionData')
110
- expect(withdrawTransaction.transactionData).toHaveProperty(
111
- 'closePosition',
112
- )
110
+ expect(withdrawTransaction.transactionData).toHaveProperty('position')
113
111
  expect(withdrawTransaction.transactionData).not.toHaveProperty('approval')
114
112
  expect(typeof withdrawTransaction.apy).toBe('number')
115
113
  expect(withdrawTransaction.apy).toBeGreaterThan(0)
@@ -209,7 +207,7 @@ describe('MorphoLendProvider', () => {
209
207
  expect(lendTransaction).toHaveProperty('apy')
210
208
  expect(lendTransaction).toHaveProperty('transactionData')
211
209
  expect(lendTransaction.transactionData).toHaveProperty('approval')
212
- expect(lendTransaction.transactionData).toHaveProperty('openPosition')
210
+ expect(lendTransaction.transactionData).toHaveProperty('position')
213
211
  expect(typeof lendTransaction.apy).toBe('number')
214
212
  expect(lendTransaction.apy).toBeGreaterThan(0)
215
213
  })
@@ -233,29 +231,7 @@ describe('MorphoLendProvider', () => {
233
231
  marketId,
234
232
  walletAddress: MockReceiverAddress,
235
233
  }),
236
- ).rejects.toThrow('Market fetch failed')
237
- })
238
-
239
- it('should use custom slippage when provided', async () => {
240
- const amount = 1000
241
- const asset = MockGauntletUSDCMarket.asset
242
- const marketId = {
243
- address: MockGauntletUSDCMarket.address,
244
- chainId: MockGauntletUSDCMarket.chainId,
245
- }
246
- const customSlippage = 100 // 1%
247
-
248
- const lendTransaction = await provider.openPosition({
249
- amount,
250
- asset,
251
- marketId,
252
- walletAddress: MockReceiverAddress,
253
- options: {
254
- slippage: customSlippage,
255
- },
256
- })
257
-
258
- expect(lendTransaction).toHaveProperty('amount', BigInt('1000000000'))
234
+ ).rejects.toThrow('Failed to open position')
259
235
  })
260
236
  })
261
237
 
@@ -1,22 +1,284 @@
1
1
  import type { Address } from 'viem'
2
- import { describe, expect, it, vi } from 'vitest'
2
+ import { afterEach, describe, expect, it, vi } from 'vitest'
3
3
 
4
4
  import { fetchRewards } from '@/lend/providers/morpho/api.js'
5
- import { fetchAndCalculateRewards } from '@/lend/providers/morpho/sdk.js'
5
+ import {
6
+ calculateRewardsBreakdown,
7
+ fetchAndCalculateRewards,
8
+ } from '@/lend/providers/morpho/sdk.js'
6
9
  import { externalTest } from '@/utils/test.js'
7
10
 
8
11
  /**
9
- * External tests for API functionality
10
- * These tests make actual network requests and require EXTERNAL_TEST=true
12
+ * Mock API response for a vault with rewards
11
13
  */
14
+ const mockVaultWithRewards = {
15
+ address: '0x38f4f3B6533de0023b9DCd04b02F93d36ad1F9f9',
16
+ id: 'test-vault-id',
17
+ state: {
18
+ rewards: [
19
+ {
20
+ asset: {
21
+ address: '0x078d782b760474a361dda0af3839290b0ef57ad6',
22
+ name: 'USD Coin',
23
+ symbol: 'USDC',
24
+ chain: { id: 130 },
25
+ },
26
+ amountPerSuppliedToken: '1000000',
27
+ supplyApr: 0.025, // 2.5% APR
28
+ },
29
+ {
30
+ asset: {
31
+ address: '0x9994e35db50125e0df82e4c2dde62496ce330999',
32
+ name: 'Morpho Token',
33
+ symbol: 'MORPHO',
34
+ chain: { id: 130 },
35
+ },
36
+ amountPerSuppliedToken: '500000',
37
+ supplyApr: 0.01, // 1% APR
38
+ },
39
+ ],
40
+ allocation: [
41
+ {
42
+ market: {
43
+ id: 'market-1',
44
+ uniqueKey: '0xmarket1',
45
+ state: {
46
+ rewards: [
47
+ {
48
+ supplyApr: 0.005, // 0.5% APR
49
+ amountPerSuppliedToken: '100000',
50
+ asset: {
51
+ address: '0xunknown',
52
+ symbol: 'UNKNOWN',
53
+ chain: { id: 130 },
54
+ },
55
+ },
56
+ ],
57
+ },
58
+ },
59
+ supplyAssetsUsd: 1000000,
60
+ },
61
+ {
62
+ market: {
63
+ id: 'market-2',
64
+ uniqueKey: '0xmarket2',
65
+ state: {
66
+ rewards: [],
67
+ },
68
+ },
69
+ supplyAssetsUsd: 500000,
70
+ },
71
+ ],
72
+ },
73
+ chain: { id: 130 },
74
+ }
75
+
76
+ /**
77
+ * Mock API response for a vault with no rewards
78
+ */
79
+ const mockVaultNoRewards = {
80
+ address: '0x1234567890123456789012345678901234567890',
81
+ id: 'empty-vault-id',
82
+ state: {
83
+ rewards: [],
84
+ allocation: [],
85
+ },
86
+ chain: { id: 130 },
87
+ }
12
88
 
13
89
  describe('Morpho API Integration', () => {
14
90
  const GAUNTLET_USDC_VAULT =
15
91
  '0x38f4f3B6533de0023b9DCd04b02F93d36ad1F9f9' as Address
16
92
 
17
- it.runIf(externalTest())(
18
- 'should fetch raw vault data from Morpho GraphQL API',
19
- async () => {
93
+ afterEach(() => {
94
+ vi.unstubAllGlobals()
95
+ })
96
+
97
+ describe('fetchRewards', () => {
98
+ it('should return vault data on successful API response', async () => {
99
+ vi.stubGlobal(
100
+ 'fetch',
101
+ vi.fn().mockResolvedValue({
102
+ json: async () => ({
103
+ data: {
104
+ vaultByAddress: mockVaultWithRewards,
105
+ },
106
+ }),
107
+ }),
108
+ )
109
+
110
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
111
+
112
+ expect(vaultData).toBeDefined()
113
+ expect(vaultData).not.toBeNull()
114
+ expect(vaultData.address.toLowerCase()).toBe(
115
+ GAUNTLET_USDC_VAULT.toLowerCase(),
116
+ )
117
+ expect(vaultData.state.rewards).toHaveLength(2)
118
+ })
119
+
120
+ it('should return null when vault not found', async () => {
121
+ vi.stubGlobal(
122
+ 'fetch',
123
+ vi.fn().mockResolvedValue({
124
+ json: async () => ({
125
+ data: {
126
+ vaultByAddress: null,
127
+ },
128
+ }),
129
+ }),
130
+ )
131
+
132
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
133
+ expect(vaultData).toBeNull()
134
+ })
135
+
136
+ it('should handle API errors gracefully', async () => {
137
+ vi.stubGlobal(
138
+ 'fetch',
139
+ vi.fn().mockRejectedValue(new Error('Network error')),
140
+ )
141
+
142
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
143
+ expect(vaultData).toBeNull()
144
+ })
145
+
146
+ it('should handle malformed JSON response', async () => {
147
+ vi.stubGlobal(
148
+ 'fetch',
149
+ vi.fn().mockResolvedValue({
150
+ json: async () => {
151
+ throw new Error('Invalid JSON')
152
+ },
153
+ }),
154
+ )
155
+
156
+ const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
157
+ expect(vaultData).toBeNull()
158
+ })
159
+ })
160
+
161
+ describe('calculateRewardsBreakdown', () => {
162
+ it('should calculate rewards from vault-level rewards', () => {
163
+ const rewards = calculateRewardsBreakdown(mockVaultWithRewards)
164
+
165
+ expect(rewards.usdc).toBe(0.025)
166
+ expect(rewards.morpho).toBe(0.01)
167
+ expect(rewards.totalRewards).toBeCloseTo(
168
+ 0.025 + 0.01 + 0.005 * (1000000 / 1500000),
169
+ 6,
170
+ )
171
+ })
172
+
173
+ it('should return zeros for vault with no rewards', () => {
174
+ const rewards = calculateRewardsBreakdown(mockVaultNoRewards)
175
+
176
+ expect(rewards.usdc).toBe(0)
177
+ expect(rewards.morpho).toBe(0)
178
+ expect(rewards.other).toBe(0)
179
+ expect(rewards.totalRewards).toBe(0)
180
+ })
181
+
182
+ it('should categorize unknown tokens as other', () => {
183
+ const vaultWithUnknown = {
184
+ ...mockVaultNoRewards,
185
+ state: {
186
+ rewards: [
187
+ {
188
+ asset: { symbol: 'RARE_TOKEN' },
189
+ supplyApr: 0.05,
190
+ },
191
+ ],
192
+ allocation: [],
193
+ },
194
+ }
195
+
196
+ const rewards = calculateRewardsBreakdown(vaultWithUnknown)
197
+
198
+ expect(rewards.other).toBe(0.05)
199
+ })
200
+
201
+ it('should weight market rewards by allocation', () => {
202
+ const vaultWithMarketRewards = {
203
+ ...mockVaultNoRewards,
204
+ state: {
205
+ rewards: [],
206
+ allocation: [
207
+ {
208
+ market: {
209
+ state: {
210
+ rewards: [{ asset: { symbol: 'USDC' }, supplyApr: 0.1 }],
211
+ },
212
+ },
213
+ supplyAssetsUsd: 750000, // 75% of total
214
+ },
215
+ {
216
+ market: {
217
+ state: {
218
+ rewards: [{ asset: { symbol: 'USDC' }, supplyApr: 0.02 }],
219
+ },
220
+ },
221
+ supplyAssetsUsd: 250000, // 25% of total
222
+ },
223
+ ],
224
+ },
225
+ }
226
+
227
+ const rewards = calculateRewardsBreakdown(vaultWithMarketRewards)
228
+
229
+ // Expected: 0.1 * 0.75 + 0.02 * 0.25 = 0.075 + 0.005 = 0.08
230
+ expect(rewards.usdc).toBeCloseTo(0.08, 6)
231
+ })
232
+ })
233
+
234
+ describe('fetchAndCalculateRewards', () => {
235
+ it('should fetch and calculate rewards breakdown', async () => {
236
+ vi.stubGlobal(
237
+ 'fetch',
238
+ vi.fn().mockResolvedValue({
239
+ json: async () => ({
240
+ data: {
241
+ vaultByAddress: mockVaultWithRewards,
242
+ },
243
+ }),
244
+ }),
245
+ )
246
+
247
+ const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
248
+
249
+ expect(rewards).toBeDefined()
250
+ expect(typeof rewards.usdc).toBe('number')
251
+ expect(typeof rewards.morpho).toBe('number')
252
+ expect(typeof rewards.other).toBe('number')
253
+ expect(typeof rewards.totalRewards).toBe('number')
254
+ expect(rewards.usdc).toBeGreaterThan(0)
255
+ expect(rewards.morpho).toBeGreaterThan(0)
256
+ })
257
+
258
+ it('should return empty rewards when vault not found', async () => {
259
+ vi.stubGlobal(
260
+ 'fetch',
261
+ vi.fn().mockResolvedValue({
262
+ json: async () => ({
263
+ data: {
264
+ vaultByAddress: null,
265
+ },
266
+ }),
267
+ }),
268
+ )
269
+
270
+ const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
271
+
272
+ expect(rewards.usdc).toBe(0)
273
+ expect(rewards.morpho).toBe(0)
274
+ expect(rewards.other).toBe(0)
275
+ expect(rewards.totalRewards).toBe(0)
276
+ })
277
+ })
278
+
279
+ // External tests that make real network requests (only run with EXTERNAL_TEST=true)
280
+ describe.runIf(externalTest())('External API Tests', () => {
281
+ it('should fetch raw vault data from Morpho GraphQL API', async () => {
20
282
  const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
21
283
 
22
284
  expect(vaultData).toBeDefined()
@@ -25,13 +287,9 @@ describe('Morpho API Integration', () => {
25
287
  GAUNTLET_USDC_VAULT.toLowerCase(),
26
288
  )
27
289
  expect(vaultData.state).toBeDefined()
28
- },
29
- 30000,
30
- ) // 30 second timeout for network request
290
+ }, 30000)
31
291
 
32
- it.runIf(externalTest())(
33
- 'should fetch and calculate rewards breakdown',
34
- async () => {
292
+ it('should fetch and calculate rewards breakdown', async () => {
35
293
  const rewards = await fetchAndCalculateRewards(GAUNTLET_USDC_VAULT)
36
294
 
37
295
  expect(rewards).toBeDefined()
@@ -40,57 +298,26 @@ describe('Morpho API Integration', () => {
40
298
  expect(typeof rewards.other).toBe('number')
41
299
  expect(typeof rewards.totalRewards).toBe('number')
42
300
 
43
- // All reward APRs should be non-negative
44
301
  expect(rewards.usdc).toBeGreaterThanOrEqual(0)
45
302
  expect(rewards.morpho).toBeGreaterThanOrEqual(0)
46
303
  expect(rewards.other).toBeGreaterThanOrEqual(0)
47
304
  expect(rewards.totalRewards).toBeGreaterThanOrEqual(0)
48
305
 
49
- // Total rewards should equal sum of individual rewards
50
306
  const expectedTotal = rewards.usdc + rewards.morpho + rewards.other
51
307
  expect(rewards.totalRewards).toBeCloseTo(expectedTotal, 6)
308
+ }, 30000)
52
309
 
53
- // For the Gauntlet USDC vault, we typically expect some rewards
54
- // This assertion may need adjustment based on actual market conditions
55
- expect(rewards.totalRewards).toBeGreaterThanOrEqual(0)
56
- },
57
- 30000,
58
- ) // 30 second timeout for network request
59
-
60
- it.runIf(externalTest())(
61
- 'should handle non-existent vault gracefully',
62
- async () => {
310
+ it('should handle non-existent vault gracefully', async () => {
63
311
  const nonExistentVault =
64
312
  '0x0000000000000000000000000000000000000000' as Address
65
313
 
66
314
  const vaultData = await fetchRewards(nonExistentVault)
67
315
  expect(vaultData).toBeNull()
68
- },
69
- 30000,
70
- ) // 30 second timeout for network request
71
-
72
- it('should handle API errors gracefully', async () => {
73
- // Mock fetch to simulate network error
74
- vi.stubGlobal(
75
- 'fetch',
76
- vi.fn().mockRejectedValue(new Error('Network error')),
77
- )
78
-
79
- try {
80
- const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
81
- expect(vaultData).toBeNull()
82
- } finally {
83
- // Restore original fetch
84
- vi.unstubAllGlobals()
85
- }
86
- })
316
+ }, 30000)
87
317
 
88
- it.runIf(externalTest())(
89
- 'should validate GraphQL response structure',
90
- async () => {
318
+ it('should validate GraphQL response structure', async () => {
91
319
  const vaultData = await fetchRewards(GAUNTLET_USDC_VAULT)
92
320
 
93
- // Verify that the response has the expected structure
94
321
  expect(vaultData).toMatchObject({
95
322
  address: expect.any(String),
96
323
  state: expect.objectContaining({
@@ -98,7 +325,6 @@ describe('Morpho API Integration', () => {
98
325
  allocation: expect.any(Array),
99
326
  }),
100
327
  })
101
- },
102
- 30000,
103
- ) // 30 second timeout for network request
328
+ }, 30000)
329
+ })
104
330
  })
@@ -160,11 +160,12 @@ describe('Vault Utilities', () => {
160
160
  const result = calculateRewardsBreakdown(apiVault)
161
161
 
162
162
  expect(result).toEqual({
163
+ eth: 0,
164
+ weth: 0,
163
165
  usdc: 0,
164
166
  usdc_demo: 0,
167
+ op_demo: 0,
165
168
  morpho: 0,
166
- eth: 0,
167
- weth: 0,
168
169
  other: 0,
169
170
  totalRewards: 0,
170
171
  })
@@ -3,7 +3,11 @@ import type { Address } from 'viem'
3
3
  const MORPHO_API_ENDPOINT = 'https://api.morpho.org/graphql'
4
4
 
5
5
  export interface RewardsBreakdown {
6
+ eth: number
7
+ weth: number
6
8
  usdc: number
9
+ usdc_demo: number
10
+ op_demo: number
7
11
  morpho: number
8
12
  other: number
9
13
  totalRewards: number
@@ -0,0 +1,37 @@
1
+ import { baseSepolia } from 'viem/chains'
2
+
3
+ import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
4
+
5
+ /**
6
+ * Morpho Blue core contract - same address on all chains via CREATE2
7
+ */
8
+ const MORPHO_BLUE = '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb' as const
9
+
10
+ /**
11
+ * Contract addresses for chains NOT supported by Morpho SDK (testnets).
12
+ * Mainnet/Base use the SDK which provides richer data including rewards.
13
+ */
14
+ export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
15
+ [baseSepolia.id]: {
16
+ morphoBlue: MORPHO_BLUE,
17
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
18
+ },
19
+ }
20
+
21
+ /**
22
+ * Get Morpho contracts for a chain
23
+ * @param chainId - Chain ID
24
+ * @returns Morpho contracts if supported, undefined otherwise
25
+ */
26
+ export function getMorphoContracts(chainId: number) {
27
+ return MORPHO_CONTRACTS[chainId]
28
+ }
29
+
30
+ /**
31
+ * Check if Morpho is supported on a chain
32
+ * @param chainId - Chain ID
33
+ * @returns true if Morpho is deployed on this chain
34
+ */
35
+ export function isMorphoChainSupported(chainId: number): boolean {
36
+ return chainId in MORPHO_CONTRACTS
37
+ }