@eth-optimism/actions-sdk 0.3.0 → 0.4.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 (436) hide show
  1. package/dist/__mocks__/MockAssets.d.ts +17 -2
  2. package/dist/__mocks__/MockAssets.d.ts.map +1 -1
  3. package/dist/__mocks__/MockAssets.js +49 -6
  4. package/dist/__mocks__/MockAssets.js.map +1 -1
  5. package/dist/__tests__/actions.test.js +1 -1
  6. package/dist/__tests__/actions.test.js.map +1 -1
  7. package/dist/actions.d.ts +8 -13
  8. package/dist/actions.d.ts.map +1 -1
  9. package/dist/actions.js +35 -27
  10. package/dist/actions.js.map +1 -1
  11. package/dist/constants/assets.d.ts +215 -4
  12. package/dist/constants/assets.d.ts.map +1 -1
  13. package/dist/constants/assets.js +734 -11
  14. package/dist/constants/assets.js.map +1 -1
  15. package/dist/constants/providers.d.ts +6 -0
  16. package/dist/constants/providers.d.ts.map +1 -0
  17. package/dist/constants/providers.js +6 -0
  18. package/dist/constants/providers.js.map +1 -0
  19. package/dist/constants/supportedChains.d.ts +2 -2
  20. package/dist/constants/supportedChains.d.ts.map +1 -1
  21. package/dist/constants/supportedChains.js +12 -2
  22. package/dist/constants/supportedChains.js.map +1 -1
  23. package/dist/index.d.ts +4 -5
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/lend/__mocks__/MockLendProvider.d.ts +1 -1
  28. package/dist/lend/__mocks__/MockLendProvider.d.ts.map +1 -1
  29. package/dist/lend/__mocks__/MockLendProvider.js +7 -2
  30. package/dist/lend/__mocks__/MockLendProvider.js.map +1 -1
  31. package/dist/lend/core/LendProvider.d.ts +12 -8
  32. package/dist/lend/core/LendProvider.d.ts.map +1 -1
  33. package/dist/lend/core/LendProvider.js +15 -21
  34. package/dist/lend/core/LendProvider.js.map +1 -1
  35. package/dist/lend/namespaces/BaseLendNamespace.d.ts +2 -6
  36. package/dist/lend/namespaces/BaseLendNamespace.d.ts.map +1 -1
  37. package/dist/lend/namespaces/BaseLendNamespace.js.map +1 -1
  38. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js +7 -4
  39. package/dist/lend/namespaces/__tests__/BaseLendNamespace.spec.js.map +1 -1
  40. package/dist/lend/providers/aave/AaveLendProvider.d.ts +1 -6
  41. package/dist/lend/providers/aave/AaveLendProvider.d.ts.map +1 -1
  42. package/dist/lend/providers/aave/AaveLendProvider.js +3 -6
  43. package/dist/lend/providers/aave/AaveLendProvider.js.map +1 -1
  44. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js +14 -6
  45. package/dist/lend/providers/aave/__tests__/AaveLendProvider.test.js.map +1 -1
  46. package/dist/lend/providers/aave/addresses.d.ts +13 -39
  47. package/dist/lend/providers/aave/addresses.d.ts.map +1 -1
  48. package/dist/lend/providers/aave/addresses.js +65 -60
  49. package/dist/lend/providers/aave/addresses.js.map +1 -1
  50. package/dist/lend/providers/aave/sdk.d.ts +2 -2
  51. package/dist/lend/providers/aave/sdk.d.ts.map +1 -1
  52. package/dist/lend/providers/aave/sdk.js +6 -28
  53. package/dist/lend/providers/aave/sdk.js.map +1 -1
  54. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts +1 -6
  55. package/dist/lend/providers/morpho/MorphoLendProvider.d.ts.map +1 -1
  56. package/dist/lend/providers/morpho/MorphoLendProvider.js +4 -13
  57. package/dist/lend/providers/morpho/MorphoLendProvider.js.map +1 -1
  58. package/dist/lend/providers/morpho/__tests__/api.test.js +52 -43
  59. package/dist/lend/providers/morpho/__tests__/api.test.js.map +1 -1
  60. package/dist/lend/providers/morpho/__tests__/sdk.test.js +41 -42
  61. package/dist/lend/providers/morpho/__tests__/sdk.test.js.map +1 -1
  62. package/dist/lend/providers/morpho/api.d.ts +3 -7
  63. package/dist/lend/providers/morpho/api.d.ts.map +1 -1
  64. package/dist/lend/providers/morpho/api.js +2 -2
  65. package/dist/lend/providers/morpho/api.js.map +1 -1
  66. package/dist/lend/providers/morpho/contracts.d.ts +11 -10
  67. package/dist/lend/providers/morpho/contracts.d.ts.map +1 -1
  68. package/dist/lend/providers/morpho/contracts.js +43 -10
  69. package/dist/lend/providers/morpho/contracts.js.map +1 -1
  70. package/dist/lend/providers/morpho/sdk.d.ts +7 -2
  71. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  72. package/dist/lend/providers/morpho/sdk.js +67 -63
  73. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  74. package/dist/nodeActionsFactory.d.ts +1 -1
  75. package/dist/reactActionsFactory.d.ts +1 -1
  76. package/dist/services/ChainManager.d.ts +8 -8
  77. package/dist/services/ChainManager.d.ts.map +1 -1
  78. package/dist/services/ChainManager.js.map +1 -1
  79. package/dist/services/__mocks__/MockChainManager.d.ts +4 -4
  80. package/dist/services/__mocks__/MockChainManager.d.ts.map +1 -1
  81. package/dist/services/__mocks__/MockChainManager.js.map +1 -1
  82. package/dist/services/tokenBalance.d.ts +1 -1
  83. package/dist/services/tokenBalance.d.ts.map +1 -1
  84. package/dist/services/tokenBalance.js +31 -30
  85. package/dist/services/tokenBalance.js.map +1 -1
  86. package/dist/services/tokenBalance.spec.js +20 -24
  87. package/dist/services/tokenBalance.spec.js.map +1 -1
  88. package/dist/swap/__mocks__/MockSwapProvider.d.ts +20 -8
  89. package/dist/swap/__mocks__/MockSwapProvider.d.ts.map +1 -1
  90. package/dist/swap/__mocks__/MockSwapProvider.js +52 -29
  91. package/dist/swap/__mocks__/MockSwapProvider.js.map +1 -1
  92. package/dist/swap/core/SwapProvider.d.ts +105 -16
  93. package/dist/swap/core/SwapProvider.d.ts.map +1 -1
  94. package/dist/swap/core/SwapProvider.js +218 -36
  95. package/dist/swap/core/SwapProvider.js.map +1 -1
  96. package/dist/swap/core/__tests__/SwapProvider.test.js +115 -9
  97. package/dist/swap/core/__tests__/SwapProvider.test.js.map +1 -1
  98. package/dist/swap/core/markets.d.ts +47 -0
  99. package/dist/swap/core/markets.d.ts.map +1 -0
  100. package/dist/swap/core/markets.js +65 -0
  101. package/dist/swap/core/markets.js.map +1 -0
  102. package/dist/swap/index.d.ts +2 -0
  103. package/dist/swap/index.d.ts.map +1 -1
  104. package/dist/swap/index.js +1 -0
  105. package/dist/swap/index.js.map +1 -1
  106. package/dist/swap/namespaces/ActionsSwapNamespace.d.ts +2 -2
  107. package/dist/swap/namespaces/ActionsSwapNamespace.js +2 -2
  108. package/dist/swap/namespaces/BaseSwapNamespace.d.ts +48 -8
  109. package/dist/swap/namespaces/BaseSwapNamespace.d.ts.map +1 -1
  110. package/dist/swap/namespaces/BaseSwapNamespace.js +139 -16
  111. package/dist/swap/namespaces/BaseSwapNamespace.js.map +1 -1
  112. package/dist/swap/namespaces/WalletSwapNamespace.d.ts +19 -7
  113. package/dist/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  114. package/dist/swap/namespaces/WalletSwapNamespace.js +39 -15
  115. package/dist/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  116. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js +150 -11
  117. package/dist/swap/namespaces/__tests__/BaseSwapNamespace.spec.js.map +1 -1
  118. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js +85 -8
  119. package/dist/swap/namespaces/__tests__/WalletSwapNamespace.spec.js.map +1 -1
  120. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts +9 -42
  121. package/dist/swap/providers/uniswap/UniswapSwapProvider.d.ts.map +1 -1
  122. package/dist/swap/providers/uniswap/UniswapSwapProvider.js +81 -139
  123. package/dist/swap/providers/uniswap/UniswapSwapProvider.js.map +1 -1
  124. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js +10 -9
  125. package/dist/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.js.map +1 -1
  126. package/dist/swap/providers/uniswap/__tests__/sdk.test.js +17 -17
  127. package/dist/swap/providers/uniswap/__tests__/sdk.test.js.map +1 -1
  128. package/dist/swap/providers/uniswap/addresses.d.ts +5 -0
  129. package/dist/swap/providers/uniswap/addresses.d.ts.map +1 -1
  130. package/dist/swap/providers/uniswap/addresses.js +1 -1
  131. package/dist/swap/providers/uniswap/addresses.js.map +1 -1
  132. package/dist/swap/providers/uniswap/encoding.d.ts +4 -4
  133. package/dist/swap/providers/uniswap/encoding.js +17 -17
  134. package/dist/swap/providers/uniswap/markets.d.ts +19 -0
  135. package/dist/swap/providers/uniswap/markets.d.ts.map +1 -0
  136. package/dist/swap/providers/uniswap/markets.js +48 -0
  137. package/dist/swap/providers/uniswap/markets.js.map +1 -0
  138. package/dist/swap/providers/uniswap/types.d.ts +4 -3
  139. package/dist/swap/providers/uniswap/types.d.ts.map +1 -1
  140. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts +49 -0
  141. package/dist/swap/providers/velodrome/VelodromeSwapProvider.d.ts.map +1 -0
  142. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js +140 -0
  143. package/dist/swap/providers/velodrome/VelodromeSwapProvider.js.map +1 -0
  144. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts +2 -0
  145. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.d.ts.map +1 -0
  146. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js +255 -0
  147. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.js.map +1 -0
  148. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts +2 -0
  149. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.d.ts.map +1 -0
  150. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js +166 -0
  151. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.js.map +1 -0
  152. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts +2 -0
  153. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.d.ts.map +1 -0
  154. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js +419 -0
  155. package/dist/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.js.map +1 -0
  156. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts +2 -0
  157. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.d.ts.map +1 -0
  158. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js +51 -0
  159. package/dist/swap/providers/velodrome/__tests__/encoding.cl.test.js.map +1 -0
  160. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts +14 -0
  161. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.d.ts.map +1 -0
  162. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js +13 -0
  163. package/dist/swap/providers/velodrome/__tests__/encoding.helpers.js.map +1 -0
  164. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts +2 -0
  165. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.d.ts.map +1 -0
  166. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js +173 -0
  167. package/dist/swap/providers/velodrome/__tests__/encoding.v2.test.js.map +1 -0
  168. package/dist/swap/providers/velodrome/abis.d.ts +396 -0
  169. package/dist/swap/providers/velodrome/abis.d.ts.map +1 -0
  170. package/dist/swap/providers/velodrome/abis.js +257 -0
  171. package/dist/swap/providers/velodrome/abis.js.map +1 -0
  172. package/dist/swap/providers/velodrome/addresses.d.ts +39 -0
  173. package/dist/swap/providers/velodrome/addresses.d.ts.map +1 -0
  174. package/dist/swap/providers/velodrome/addresses.js +57 -0
  175. package/dist/swap/providers/velodrome/addresses.js.map +1 -0
  176. package/dist/swap/providers/velodrome/config.d.ts +22 -0
  177. package/dist/swap/providers/velodrome/config.d.ts.map +1 -0
  178. package/dist/swap/providers/velodrome/config.js +29 -0
  179. package/dist/swap/providers/velodrome/config.js.map +1 -0
  180. package/dist/swap/providers/velodrome/encoding/helpers.d.ts +37 -0
  181. package/dist/swap/providers/velodrome/encoding/helpers.d.ts.map +1 -0
  182. package/dist/swap/providers/velodrome/encoding/helpers.js +60 -0
  183. package/dist/swap/providers/velodrome/encoding/helpers.js.map +1 -0
  184. package/dist/swap/providers/velodrome/encoding/index.d.ts +8 -0
  185. package/dist/swap/providers/velodrome/encoding/index.d.ts.map +1 -0
  186. package/dist/swap/providers/velodrome/encoding/index.js +5 -0
  187. package/dist/swap/providers/velodrome/encoding/index.js.map +1 -0
  188. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts +39 -0
  189. package/dist/swap/providers/velodrome/encoding/poolRouter.d.ts.map +1 -0
  190. package/dist/swap/providers/velodrome/encoding/poolRouter.js +83 -0
  191. package/dist/swap/providers/velodrome/encoding/poolRouter.js.map +1 -0
  192. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts +15 -0
  193. package/dist/swap/providers/velodrome/encoding/routers/approval.d.ts.map +1 -0
  194. package/dist/swap/providers/velodrome/encoding/routers/approval.js +33 -0
  195. package/dist/swap/providers/velodrome/encoding/routers/approval.js.map +1 -0
  196. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts +40 -0
  197. package/dist/swap/providers/velodrome/encoding/routers/cl.d.ts.map +1 -0
  198. package/dist/swap/providers/velodrome/encoding/routers/cl.js +80 -0
  199. package/dist/swap/providers/velodrome/encoding/routers/cl.js.map +1 -0
  200. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts +42 -0
  201. package/dist/swap/providers/velodrome/encoding/routers/v2.d.ts.map +1 -0
  202. package/dist/swap/providers/velodrome/encoding/routers/v2.js +166 -0
  203. package/dist/swap/providers/velodrome/encoding/routers/v2.js.map +1 -0
  204. package/dist/swap/providers/velodrome/markets.d.ts +21 -0
  205. package/dist/swap/providers/velodrome/markets.d.ts.map +1 -0
  206. package/dist/swap/providers/velodrome/markets.js +69 -0
  207. package/dist/swap/providers/velodrome/markets.js.map +1 -0
  208. package/dist/swap/providers/velodrome/types.d.ts +31 -0
  209. package/dist/swap/providers/velodrome/types.d.ts.map +1 -0
  210. package/dist/swap/providers/velodrome/types.js +2 -0
  211. package/dist/swap/providers/velodrome/types.js.map +1 -0
  212. package/dist/types/actions.d.ts +44 -9
  213. package/dist/types/actions.d.ts.map +1 -1
  214. package/dist/types/asset.d.ts +7 -9
  215. package/dist/types/asset.d.ts.map +1 -1
  216. package/dist/types/chain.d.ts +2 -2
  217. package/dist/types/chain.d.ts.map +1 -1
  218. package/dist/types/lend/base.d.ts +6 -6
  219. package/dist/types/lend/base.d.ts.map +1 -1
  220. package/dist/types/lend/base.js.map +1 -1
  221. package/dist/types/lend/contracts.d.ts +2 -1
  222. package/dist/types/lend/contracts.d.ts.map +1 -1
  223. package/dist/types/providers.d.ts +21 -0
  224. package/dist/types/providers.d.ts.map +1 -0
  225. package/dist/types/providers.js +2 -0
  226. package/dist/types/providers.js.map +1 -0
  227. package/dist/types/swap/base.d.ts +133 -33
  228. package/dist/types/swap/base.d.ts.map +1 -1
  229. package/dist/utils/approve.d.ts +82 -0
  230. package/dist/utils/approve.d.ts.map +1 -0
  231. package/dist/utils/{permit2.js → approve.js} +48 -14
  232. package/dist/utils/approve.js.map +1 -0
  233. package/dist/utils/approve.test.d.ts +2 -0
  234. package/dist/utils/approve.test.d.ts.map +1 -0
  235. package/dist/utils/{permit2.test.js → approve.test.js} +95 -2
  236. package/dist/utils/approve.test.js.map +1 -0
  237. package/dist/utils/assets.d.ts +6 -0
  238. package/dist/utils/assets.d.ts.map +1 -1
  239. package/dist/utils/assets.js +10 -0
  240. package/dist/utils/assets.js.map +1 -1
  241. package/dist/utils/validateAddresses.d.ts +32 -0
  242. package/dist/utils/validateAddresses.d.ts.map +1 -0
  243. package/dist/utils/validateAddresses.js +103 -0
  244. package/dist/utils/validateAddresses.js.map +1 -0
  245. package/dist/utils/validateAddresses.test.d.ts +2 -0
  246. package/dist/utils/validateAddresses.test.d.ts.map +1 -0
  247. package/dist/utils/validateAddresses.test.js +314 -0
  248. package/dist/utils/validateAddresses.test.js.map +1 -0
  249. package/dist/wallet/core/namespace/WalletNamespace.d.ts +21 -9
  250. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  251. package/dist/wallet/core/namespace/WalletNamespace.js +44 -15
  252. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  253. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +4 -4
  254. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  255. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts +4 -16
  256. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.d.ts.map +1 -1
  257. package/dist/wallet/core/providers/hosted/abstract/HostedWalletProvider.js.map +1 -1
  258. package/dist/wallet/core/providers/hosted/types/index.d.ts +6 -11
  259. package/dist/wallet/core/providers/hosted/types/index.d.ts.map +1 -1
  260. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts +2 -9
  261. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.d.ts.map +1 -1
  262. package/dist/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js.map +1 -1
  263. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +6 -17
  264. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  265. package/dist/wallet/core/wallets/abstract/Wallet.js +5 -6
  266. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  267. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts +10 -1
  268. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.d.ts.map +1 -1
  269. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js +2 -2
  270. package/dist/wallet/core/wallets/abstract/__mocks__/TestWallet.js.map +1 -1
  271. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +12 -4
  272. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  273. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts +3 -10
  274. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.d.ts.map +1 -1
  275. package/dist/wallet/core/wallets/smart/default/DefaultSmartWallet.js.map +1 -1
  276. package/dist/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.js.map +1 -1
  277. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -10
  278. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  279. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  280. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts +2 -4
  281. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  282. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -8
  283. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  284. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +4 -4
  285. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  286. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +2 -9
  287. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  288. package/dist/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  289. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +3 -10
  290. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  291. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  292. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts +3 -10
  293. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  294. package/dist/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  295. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts +3 -9
  296. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.d.ts.map +1 -1
  297. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js +3 -2
  298. package/dist/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.js.map +1 -1
  299. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +3 -9
  300. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  301. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js +3 -2
  302. package/dist/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  303. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts +3 -9
  304. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.d.ts.map +1 -1
  305. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js +3 -2
  306. package/dist/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.js.map +1 -1
  307. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts +2 -4
  308. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.d.ts.map +1 -1
  309. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js +11 -13
  310. package/dist/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.js.map +1 -1
  311. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js +6 -6
  312. package/dist/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.js.map +1 -1
  313. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts +5 -10
  314. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.d.ts.map +1 -1
  315. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js +3 -3
  316. package/dist/wallet/react/wallets/hosted/dynamic/DynamicWallet.js.map +1 -1
  317. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts +2 -6
  318. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.d.ts.map +1 -1
  319. package/dist/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.js.map +1 -1
  320. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts +5 -10
  321. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  322. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js +3 -3
  323. package/dist/wallet/react/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  324. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts +5 -10
  325. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.d.ts.map +1 -1
  326. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js +2 -2
  327. package/dist/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.js.map +1 -1
  328. package/package.json +3 -2
  329. package/src/__mocks__/MockAssets.ts +54 -6
  330. package/src/__tests__/actions.test.ts +1 -1
  331. package/src/actions.ts +58 -61
  332. package/src/constants/assets.ts +781 -10
  333. package/src/constants/providers.ts +5 -0
  334. package/src/constants/supportedChains.ts +22 -2
  335. package/src/index.ts +50 -8
  336. package/src/lend/__mocks__/MockLendProvider.ts +8 -3
  337. package/src/lend/core/LendProvider.ts +27 -28
  338. package/src/lend/namespaces/BaseLendNamespace.ts +2 -6
  339. package/src/lend/namespaces/__tests__/BaseLendNamespace.spec.ts +12 -5
  340. package/src/lend/providers/aave/AaveLendProvider.ts +3 -7
  341. package/src/lend/providers/aave/__tests__/AaveLendProvider.test.ts +16 -7
  342. package/src/lend/providers/aave/addresses.ts +82 -64
  343. package/src/lend/providers/aave/sdk.ts +11 -36
  344. package/src/lend/providers/morpho/MorphoLendProvider.ts +4 -16
  345. package/src/lend/providers/morpho/__tests__/api.test.ts +65 -44
  346. package/src/lend/providers/morpho/__tests__/sdk.test.ts +43 -43
  347. package/src/lend/providers/morpho/api.ts +7 -8
  348. package/src/lend/providers/morpho/contracts.ts +62 -13
  349. package/src/lend/providers/morpho/sdk.ts +85 -63
  350. package/src/services/ChainManager.ts +12 -21
  351. package/src/services/__mocks__/MockChainManager.ts +4 -7
  352. package/src/services/tokenBalance.spec.ts +20 -24
  353. package/src/services/tokenBalance.ts +39 -33
  354. package/src/swap/__mocks__/MockSwapProvider.ts +77 -42
  355. package/src/swap/core/SwapProvider.ts +307 -49
  356. package/src/swap/core/__tests__/SwapProvider.test.ts +151 -9
  357. package/src/swap/core/markets.ts +104 -0
  358. package/src/swap/index.ts +5 -0
  359. package/src/swap/namespaces/ActionsSwapNamespace.ts +2 -2
  360. package/src/swap/namespaces/BaseSwapNamespace.ts +199 -18
  361. package/src/swap/namespaces/WalletSwapNamespace.ts +53 -14
  362. package/src/swap/namespaces/__tests__/BaseSwapNamespace.spec.ts +241 -14
  363. package/src/swap/namespaces/__tests__/WalletSwapNamespace.spec.ts +103 -8
  364. package/src/swap/providers/uniswap/UniswapSwapProvider.ts +108 -195
  365. package/src/swap/providers/uniswap/__tests__/UniswapSwapProvider.test.ts +12 -12
  366. package/src/swap/providers/uniswap/__tests__/sdk.test.ts +19 -20
  367. package/src/swap/providers/uniswap/addresses.ts +3 -1
  368. package/src/swap/providers/uniswap/encoding.ts +22 -22
  369. package/src/swap/providers/uniswap/markets.ts +84 -0
  370. package/src/swap/providers/uniswap/types.ts +4 -3
  371. package/src/swap/providers/velodrome/VelodromeSwapProvider.ts +224 -0
  372. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.network.test.ts +341 -0
  373. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.routing.test.ts +202 -0
  374. package/src/swap/providers/velodrome/__tests__/VelodromeSwapProvider.test.ts +506 -0
  375. package/src/swap/providers/velodrome/__tests__/encoding.cl.test.ts +69 -0
  376. package/src/swap/providers/velodrome/__tests__/encoding.helpers.ts +20 -0
  377. package/src/swap/providers/velodrome/__tests__/encoding.v2.test.ts +235 -0
  378. package/src/swap/providers/velodrome/abis.ts +264 -0
  379. package/src/swap/providers/velodrome/addresses.ts +107 -0
  380. package/src/swap/providers/velodrome/config.ts +46 -0
  381. package/src/swap/providers/velodrome/encoding/helpers.ts +82 -0
  382. package/src/swap/providers/velodrome/encoding/index.ts +7 -0
  383. package/src/swap/providers/velodrome/encoding/poolRouter.ts +124 -0
  384. package/src/swap/providers/velodrome/encoding/routers/approval.ts +45 -0
  385. package/src/swap/providers/velodrome/encoding/routers/cl.ts +156 -0
  386. package/src/swap/providers/velodrome/encoding/routers/v2.ts +267 -0
  387. package/src/swap/providers/velodrome/markets.ts +100 -0
  388. package/src/swap/providers/velodrome/types.ts +30 -0
  389. package/src/types/actions.ts +49 -9
  390. package/src/types/asset.ts +12 -9
  391. package/src/types/chain.ts +2 -2
  392. package/src/types/lend/base.ts +6 -6
  393. package/src/types/lend/contracts.ts +5 -1
  394. package/src/types/providers.ts +22 -0
  395. package/src/types/swap/base.ts +147 -34
  396. package/src/utils/{permit2.test.ts → approve.test.ts} +117 -1
  397. package/src/utils/{permit2.ts → approve.ts} +67 -14
  398. package/src/utils/assets.ts +14 -0
  399. package/src/utils/validateAddresses.test.ts +439 -0
  400. package/src/utils/validateAddresses.ts +153 -0
  401. package/src/wallet/core/namespace/WalletNamespace.ts +70 -16
  402. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +8 -4
  403. package/src/wallet/core/providers/hosted/abstract/HostedWalletProvider.ts +5 -17
  404. package/src/wallet/core/providers/hosted/types/index.ts +9 -11
  405. package/src/wallet/core/providers/smart/default/DefaultSmartWalletProvider.ts +5 -17
  406. package/src/wallet/core/wallets/abstract/Wallet.ts +15 -22
  407. package/src/wallet/core/wallets/abstract/__mocks__/TestWallet.ts +13 -1
  408. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +21 -5
  409. package/src/wallet/core/wallets/smart/default/DefaultSmartWallet.ts +5 -17
  410. package/src/wallet/core/wallets/smart/default/__tests__/DefaultSmartWallet.spec.ts +0 -1
  411. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +3 -10
  412. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +8 -8
  413. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +4 -4
  414. package/src/wallet/node/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +3 -10
  415. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +5 -17
  416. package/src/wallet/node/wallets/hosted/turnkey/TurnkeyWallet.ts +5 -17
  417. package/src/wallet/react/providers/hosted/dynamic/DynamicHostedWalletProvider.ts +7 -11
  418. package/src/wallet/react/providers/hosted/privy/PrivyHostedWalletProvider.ts +7 -11
  419. package/src/wallet/react/providers/hosted/turnkey/TurnkeyHostedWalletProvider.ts +7 -11
  420. package/src/wallet/react/providers/registry/ReactHostedWalletProviderRegistry.ts +23 -10
  421. package/src/wallet/react/providers/registry/__tests__/ReactHostedWalletProviderRegistry.spec.ts +6 -6
  422. package/src/wallet/react/wallets/hosted/dynamic/DynamicWallet.ts +10 -18
  423. package/src/wallet/react/wallets/hosted/dynamic/__mocks__/DynamicWalletMock.ts +2 -6
  424. package/src/wallet/react/wallets/hosted/privy/PrivyWallet.ts +10 -18
  425. package/src/wallet/react/wallets/hosted/turnkey/TurnkeyWallet.ts +10 -18
  426. package/dist/supported/tokens.d.ts +0 -25
  427. package/dist/supported/tokens.d.ts.map +0 -1
  428. package/dist/supported/tokens.js +0 -44
  429. package/dist/supported/tokens.js.map +0 -1
  430. package/dist/utils/permit2.d.ts +0 -46
  431. package/dist/utils/permit2.d.ts.map +0 -1
  432. package/dist/utils/permit2.js.map +0 -1
  433. package/dist/utils/permit2.test.d.ts +0 -2
  434. package/dist/utils/permit2.test.d.ts.map +0 -1
  435. package/dist/utils/permit2.test.js.map +0 -1
  436. package/src/supported/tokens.ts +0 -66
@@ -1,6 +1,20 @@
1
- import { baseSepolia } from 'viem/chains'
1
+ import {
2
+ base,
3
+ baseSepolia,
4
+ ink,
5
+ mainnet,
6
+ mode,
7
+ optimism,
8
+ soneium,
9
+ unichain,
10
+ worldchain,
11
+ } from 'viem/chains'
2
12
 
3
- import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
13
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
14
+ import type {
15
+ MorphoContracts,
16
+ MorphoContractsRegistry,
17
+ } from '@/types/lend/contracts.js'
4
18
 
5
19
  /**
6
20
  * Morpho Blue core contract - same address on all chains via CREATE2
@@ -8,10 +22,44 @@ import type { MorphoContractsRegistry } from '@/types/lend/contracts.js'
8
22
  const MORPHO_BLUE = '0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb' as const
9
23
 
10
24
  /**
11
- * Contract addresses for chains NOT supported by Morpho SDK (testnets).
12
- * Mainnet/Base use the SDK which provides richer data including rewards.
25
+ * Morpho Blue contract addresses per chain.
26
+ * Mainnet chains use the SDK for richer data (rewards, allocations) when available.
27
+ * These contracts serve as the on-chain fallback and as the canonical deployment registry.
28
+ * @see https://github.com/morpho-org/sdks
13
29
  */
14
30
  export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
31
+ [mainnet.id]: {
32
+ morphoBlue: MORPHO_BLUE,
33
+ irm: '0x870aC11D48B15DB9a138Cf899d20F13F79Ba00BC',
34
+ },
35
+ [optimism.id]: {
36
+ morphoBlue: MORPHO_BLUE,
37
+ irm: '0x8cD70A8F399428456b29546BC5dBe10ab6a06ef6',
38
+ },
39
+ [base.id]: {
40
+ morphoBlue: MORPHO_BLUE,
41
+ irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
42
+ },
43
+ [unichain.id]: {
44
+ morphoBlue: MORPHO_BLUE,
45
+ irm: '0x9a6061d51743B31D2c3Be75D83781Fa423f53F0E',
46
+ },
47
+ [worldchain.id]: {
48
+ morphoBlue: MORPHO_BLUE,
49
+ irm: '0x34E99D604751a72cF8d0CFDf87069292d82De472',
50
+ },
51
+ [ink.id]: {
52
+ morphoBlue: MORPHO_BLUE,
53
+ irm: '0x9515407b1512F53388ffE699524100e7270Ee57B',
54
+ },
55
+ [soneium.id]: {
56
+ morphoBlue: MORPHO_BLUE,
57
+ irm: '0x68F9b666b984527A7c145Db4103Cc6d3171C797F',
58
+ },
59
+ [mode.id]: {
60
+ morphoBlue: MORPHO_BLUE,
61
+ irm: '0xE3d46Ae190Cb39ccA3655E966DcEF96b4eAe1d1c',
62
+ },
15
63
  [baseSepolia.id]: {
16
64
  morphoBlue: MORPHO_BLUE,
17
65
  irm: '0x46415998764C29aB2a25CbeA6254146D50D22687',
@@ -20,18 +68,19 @@ export const MORPHO_CONTRACTS: MorphoContractsRegistry = {
20
68
 
21
69
  /**
22
70
  * Get Morpho contracts for a chain
23
- * @param chainId - Chain ID
24
- * @returns Morpho contracts if supported, undefined otherwise
25
71
  */
26
- export function getMorphoContracts(chainId: number) {
27
- return MORPHO_CONTRACTS[chainId]
72
+ export function getMorphoContracts(
73
+ chainId: number,
74
+ ): MorphoContracts | undefined {
75
+ return MORPHO_CONTRACTS[chainId as SupportedChainId]
28
76
  }
29
77
 
30
78
  /**
31
- * Check if Morpho is supported on a chain
32
- * @param chainId - Chain ID
33
- * @returns true if Morpho is deployed on this chain
79
+ * Get all chain IDs where Morpho contracts are deployed.
80
+ * Returns chains present in the local contracts registry.
81
+ * Filtering against ACTIONS_SUPPORTED_CHAIN_IDS and developer-configured chains
82
+ * is handled by the LendProvider base class.
34
83
  */
35
- export function isMorphoChainSupported(chainId: number): boolean {
36
- return chainId in MORPHO_CONTRACTS
84
+ export function getSupportedChainIds(): number[] {
85
+ return Object.keys(MORPHO_CONTRACTS).map(Number)
37
86
  }
@@ -7,14 +7,15 @@ import {
7
7
  } from '@morpho-org/blue-sdk-viem'
8
8
  import type { Address, PublicClient } from 'viem'
9
9
 
10
+ import { NATIVELY_SUPPORTED_ASSETS } from '@/constants/assets.js'
10
11
  import {
11
12
  fetchRewards,
12
13
  type RewardsBreakdown,
13
14
  } from '@/lend/providers/morpho/api.js'
14
15
  import { getMorphoContracts } from '@/lend/providers/morpho/contracts.js'
15
16
  import type { ChainManager } from '@/services/ChainManager.js'
16
- import { SUPPORTED_TOKENS } from '@/supported/tokens.js'
17
17
  import type { LendProviderConfig } from '@/types/actions.js'
18
+ import type { Asset } from '@/types/asset.js'
18
19
  import type {
19
20
  ApyBreakdown,
20
21
  LendMarket,
@@ -27,29 +28,42 @@ import { SECONDS_PER_YEAR } from '@/utils/constants.js'
27
28
  /**
28
29
  * Fetch and calculate rewards breakdown from Morpho GraphQL API
29
30
  * @param vaultAddress - Vault address
31
+ * @param supportedAssets - Configured assets for reward categorization
32
+ * @param chainId - Chain ID for address lookup
30
33
  * @returns Promise resolving to rewards breakdown
31
34
  */
32
35
  export async function fetchAndCalculateRewards(
33
36
  vaultAddress: Address,
37
+ chainId: number,
38
+ marketAsset?: Asset,
34
39
  ): Promise<RewardsBreakdown> {
35
- const vaultData = await fetchRewards(vaultAddress)
40
+ const vaultData = await fetchRewards(vaultAddress, chainId)
36
41
 
37
42
  if (!vaultData) {
38
- // Initialize empty rewards object with all supported tokens + other
39
- const emptyRewards: Record<string, number> = {
40
- other: 0,
41
- totalRewards: 0,
42
- }
43
+ return buildEmptyRewards(chainId, marketAsset)
44
+ }
43
45
 
44
- // Add all supported tokens (lowercase) to the rewards object
45
- SUPPORTED_TOKENS.forEach((token) => {
46
- emptyRewards[token.metadata.symbol.toLowerCase()] = 0
47
- })
46
+ return calculateRewardsBreakdown(vaultData, chainId, marketAsset)
47
+ }
48
48
 
49
- return emptyRewards as unknown as RewardsBreakdown
49
+ /**
50
+ * Build an empty rewards object with all supported asset addresses initialized to 0
51
+ */
52
+ function buildEmptyRewards(
53
+ chainId: number,
54
+ marketAsset?: Asset,
55
+ ): RewardsBreakdown {
56
+ const assets = marketAsset
57
+ ? [...NATIVELY_SUPPORTED_ASSETS, marketAsset]
58
+ : NATIVELY_SUPPORTED_ASSETS
59
+ const emptyRewards: Record<string, number> = { other: 0, totalRewards: 0 }
60
+ for (const token of assets) {
61
+ const addr = token.address[chainId as keyof typeof token.address]
62
+ if (addr && addr !== 'native') {
63
+ emptyRewards[addr.toLowerCase()] = 0
64
+ }
50
65
  }
51
-
52
- return calculateRewardsBreakdown(vaultData)
66
+ return emptyRewards as RewardsBreakdown
53
67
  }
54
68
 
55
69
  /**
@@ -238,7 +252,7 @@ async function calculateVaultApy(
238
252
  }
239
253
 
240
254
  /**
241
- * Fetch vault data via direct on-chain queries (for testnets)
255
+ * Fetch vault data via direct on-chain queries (fallback when SDK unavailable)
242
256
  */
243
257
  async function fetchVaultDataOnChain(
244
258
  marketId: LendMarketId,
@@ -332,7 +346,7 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
332
346
  params.marketId.chainId,
333
347
  )
334
348
 
335
- // Try SDK first for supported chains (mainnets)
349
+ // Try SDK first for SDK-supported chains
336
350
  if (isSdkSupportedChain(params.marketId.chainId)) {
337
351
  try {
338
352
  const vault = await fetchAccrualVault(
@@ -343,18 +357,11 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
343
357
  // Fetch rewards data from API
344
358
  const rewardsBreakdown = await fetchAndCalculateRewards(
345
359
  params.marketId.address,
360
+ params.marketId.chainId,
361
+ marketConfig.asset,
346
362
  ).catch((error) => {
347
363
  console.error('Failed to fetch rewards data:', error)
348
- return {
349
- eth: 0,
350
- weth: 0,
351
- usdc: 0,
352
- usdc_demo: 0,
353
- op_demo: 0,
354
- morpho: 0,
355
- other: 0,
356
- totalRewards: 0,
357
- }
364
+ return buildEmptyRewards(params.marketId.chainId, marketConfig.asset)
358
365
  })
359
366
 
360
367
  const apyBreakdown = calculateApyBreakdown(vault, rewardsBreakdown)
@@ -381,7 +388,7 @@ export async function getVault(params: GetVaultParams): Promise<LendMarket> {
381
388
  }
382
389
  }
383
390
 
384
- // Fallback to direct on-chain queries for testnets or if SDK fails
391
+ // Fallback to direct on-chain queries if SDK unavailable or fails
385
392
  const contracts = getMorphoContracts(params.marketId.chainId)
386
393
  if (contracts) {
387
394
  return fetchVaultDataOnChain(
@@ -489,38 +496,59 @@ export function calculateApyBreakdown(
489
496
  }
490
497
  }
491
498
 
499
+ /**
500
+ * Categorize a reward asset by its address. If the address matches a supported asset, use that.
501
+ * Otherwise, fall back to 'other'.
502
+ */
503
+ function categorizeRewardAsset(
504
+ rewardAssetAddress: string | undefined,
505
+ knownAddresses: Set<string>,
506
+ ): string {
507
+ if (!rewardAssetAddress) return 'other'
508
+ const normalized = rewardAssetAddress.toLowerCase()
509
+ return knownAddresses.has(normalized) ? normalized : 'other'
510
+ }
511
+
492
512
  /**
493
513
  * Calculate detailed rewards breakdown from vault and market allocations
494
514
  * @param apiVault - Vault data from GraphQL API
515
+ * @param supportedAssets - Configured assets for reward categorization
516
+ * @param chainId - Chain ID for address lookup
495
517
  * @returns Detailed rewards breakdown
496
518
  */
497
- export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
498
- // Initialize rewards object with all supported tokens + other
499
- const rewardsByCategory: Record<string, number> = {
500
- other: 0,
519
+ export function calculateRewardsBreakdown(
520
+ apiVault: any,
521
+ chainId: number,
522
+ marketAsset?: Asset,
523
+ ): RewardsBreakdown {
524
+ const assets = marketAsset
525
+ ? [...NATIVELY_SUPPORTED_ASSETS, marketAsset]
526
+ : NATIVELY_SUPPORTED_ASSETS
527
+ // Build set of known asset addresses on this chain
528
+ const knownAddresses = new Set<string>()
529
+ for (const token of assets) {
530
+ const addr = token.address[chainId as keyof typeof token.address]
531
+ if (addr && addr !== 'native') {
532
+ knownAddresses.add(addr.toLowerCase())
533
+ }
501
534
  }
502
535
 
503
- // Add all supported tokens (lowercase) to the rewards object
504
- SUPPORTED_TOKENS.forEach((token) => {
505
- rewardsByCategory[token.metadata.symbol.toLowerCase()] = 0
506
- })
536
+ // Initialize rewards object with all known addresses + other
537
+ const rewardsByCategory: Record<string, number> = { other: 0 }
538
+ for (const addr of knownAddresses) {
539
+ rewardsByCategory[addr] = 0
540
+ }
507
541
 
508
542
  // Calculate vault-level rewards
509
543
  if (apiVault.state?.rewards && apiVault.state.rewards.length > 0) {
510
- apiVault.state.rewards.forEach((reward: any) => {
544
+ for (const reward of apiVault.state.rewards) {
511
545
  const rewardApr = reward.supplyApr || 0
512
- const assetSymbol = reward.asset.symbol
513
-
514
- // Use the symbol from API response for categorization
515
- const category = assetSymbol ? assetSymbol.toLowerCase() : 'other'
516
-
517
- // Add to appropriate category if supported, otherwise to 'other'
518
- if (category in rewardsByCategory) {
519
- rewardsByCategory[category] += rewardApr
520
- } else {
521
- rewardsByCategory.other += rewardApr
522
- }
523
- })
546
+ const category = categorizeRewardAsset(
547
+ reward.asset?.address,
548
+ knownAddresses,
549
+ )
550
+ rewardsByCategory[category] += rewardApr
551
+ }
524
552
  }
525
553
 
526
554
  // Calculate market-level rewards (weighted by allocation)
@@ -532,7 +560,7 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
532
560
  0,
533
561
  )
534
562
 
535
- apiVault.state.allocation.forEach((allocation: any) => {
563
+ for (const allocation of apiVault.state.allocation) {
536
564
  if (
537
565
  allocation.market?.state?.rewards &&
538
566
  allocation.market.state.rewards.length > 0
@@ -542,23 +570,17 @@ export function calculateRewardsBreakdown(apiVault: any): RewardsBreakdown {
542
570
  ? (allocation.supplyAssetsUsd || 0) / totalSupplyUsd
543
571
  : 0
544
572
 
545
- allocation.market.state.rewards.forEach((reward: any) => {
573
+ for (const reward of allocation.market.state.rewards) {
546
574
  const rewardApr = reward.supplyApr || 0
547
575
  const weightedRewardApr = rewardApr * weight
548
- const assetSymbol = reward.asset.symbol
549
-
550
- // Use the symbol from API response for categorization
551
- const category = assetSymbol ? assetSymbol.toLowerCase() : 'other'
552
-
553
- // Add to appropriate category if supported, otherwise to 'other'
554
- if (category in rewardsByCategory) {
555
- rewardsByCategory[category] += weightedRewardApr
556
- } else {
557
- rewardsByCategory.other += weightedRewardApr
558
- }
559
- })
576
+ const category = categorizeRewardAsset(
577
+ reward.asset?.address,
578
+ knownAddresses,
579
+ )
580
+ rewardsByCategory[category] += weightedRewardApr
581
+ }
560
582
  }
561
- })
583
+ }
562
584
  }
563
585
 
564
586
  // Calculate total rewards APR
@@ -12,7 +12,7 @@ import {
12
12
  import type { BundlerClient, SmartAccount } from 'viem/account-abstraction'
13
13
  import { createBundlerClient } from 'viem/account-abstraction'
14
14
 
15
- import type { SUPPORTED_CHAIN_IDS } from '@/constants/supportedChains.js'
15
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
16
16
  import type { ChainConfig } from '@/types/chain.js'
17
17
 
18
18
  /**
@@ -22,7 +22,7 @@ import type { ChainConfig } from '@/types/chain.js'
22
22
  */
23
23
  export class ChainManager {
24
24
  /** Map of chain IDs to their corresponding public clients */
25
- private publicClients: Map<(typeof SUPPORTED_CHAIN_IDS)[number], PublicClient>
25
+ private publicClients: Map<SupportedChainId, PublicClient>
26
26
  /** Configuration for each supported chain */
27
27
  private chainConfigs: ChainConfig[]
28
28
 
@@ -41,7 +41,7 @@ export class ChainManager {
41
41
  * @returns PublicClient instance for the specified chain
42
42
  * @throws Error if no client is configured for the chain ID
43
43
  */
44
- getPublicClient(chainId: (typeof SUPPORTED_CHAIN_IDS)[number]): PublicClient {
44
+ getPublicClient(chainId: SupportedChainId): PublicClient {
45
45
  const client = this.publicClients.get(chainId)
46
46
  if (!client) {
47
47
  throw new Error(`No public client configured for chain ID: ${chainId}`)
@@ -57,7 +57,7 @@ export class ChainManager {
57
57
  * @throws Error if no bundler URL is configured for the chain ID
58
58
  */
59
59
  getBundlerClient(
60
- chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
60
+ chainId: SupportedChainId,
61
61
  account: SmartAccount,
62
62
  ): BundlerClient | SmartAccountClient {
63
63
  const chainConfig = this.getChainConfig(chainId)
@@ -94,9 +94,7 @@ export class ChainManager {
94
94
  * @returns RPC URL as a string
95
95
  * @throws Error if no chain config is found for the chain ID
96
96
  */
97
- getRpcUrls(
98
- chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
99
- ): string[] | undefined {
97
+ getRpcUrls(chainId: SupportedChainId): string[] | undefined {
100
98
  const chainConfig = this.getChainConfig(chainId)
101
99
  return chainConfig.rpcUrls
102
100
  }
@@ -107,9 +105,7 @@ export class ChainManager {
107
105
  * @returns Bundler URL as a string or undefined if not configured
108
106
  * @throws Error if no chain config is found for the chain ID
109
107
  */
110
- getBundlerUrl(
111
- chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
112
- ): string | undefined {
108
+ getBundlerUrl(chainId: SupportedChainId): string | undefined {
113
109
  const chainConfig = this.getChainConfig(chainId)
114
110
  if (!chainConfig.bundler) {
115
111
  throw new Error(`No bundler configured for chain ID: ${chainId}`)
@@ -122,7 +118,7 @@ export class ChainManager {
122
118
  * @param chainId - The chain ID to retrieve information for
123
119
  * @returns Chain object containing chain details
124
120
  */
125
- getChain(chainId: (typeof SUPPORTED_CHAIN_IDS)[number]): Chain {
121
+ getChain(chainId: SupportedChainId): Chain {
126
122
  return chainById[chainId]
127
123
  }
128
124
 
@@ -140,7 +136,7 @@ export class ChainManager {
140
136
  * @returns Transport configured with fallback RPC URLs or default http transport
141
137
  * @throws Error if no chain config is found for the chain ID
142
138
  */
143
- getTransportForChain(chainId: (typeof SUPPORTED_CHAIN_IDS)[number]) {
139
+ getTransportForChain(chainId: SupportedChainId) {
144
140
  const rpcUrls = this.getRpcUrls(chainId)
145
141
  return rpcUrls?.length
146
142
  ? fallback(rpcUrls.map((rpcUrl) => http(rpcUrl)))
@@ -155,11 +151,8 @@ export class ChainManager {
155
151
  */
156
152
  private createPublicClients(
157
153
  chains: ChainConfig[],
158
- ): Map<(typeof SUPPORTED_CHAIN_IDS)[number], PublicClient> {
159
- const clients = new Map<
160
- (typeof SUPPORTED_CHAIN_IDS)[number],
161
- PublicClient
162
- >()
154
+ ): Map<SupportedChainId, PublicClient> {
155
+ const clients = new Map<SupportedChainId, PublicClient>()
163
156
 
164
157
  for (const chainConfig of chains) {
165
158
  const chain = chainById[chainConfig.chainId]
@@ -187,9 +180,7 @@ export class ChainManager {
187
180
  * @param chainId The chain ID to retrieve the chain config for
188
181
  * @returns ChainConfig object containing chain details
189
182
  */
190
- private getChainConfig(
191
- chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
192
- ): ChainConfig {
183
+ private getChainConfig(chainId: SupportedChainId): ChainConfig {
193
184
  const chainConfig = this.chainConfigs.find((c) => c.chainId === chainId)
194
185
  if (!chainConfig) {
195
186
  throw new Error(`No chain config found for chain ID: ${chainId}`)
@@ -205,7 +196,7 @@ export class ChainManager {
205
196
  * @returns Pimlico bundler client for the specified chain
206
197
  */
207
198
  private getPimlicoBundlerClient(
208
- chainId: (typeof SUPPORTED_CHAIN_IDS)[number],
199
+ chainId: SupportedChainId,
209
200
  account: SmartAccount,
210
201
  sponsorshipPolicyId?: string,
211
202
  ) {
@@ -4,10 +4,7 @@ import type { BundlerClient, SmartAccount } from 'viem/account-abstraction'
4
4
  import { unichain } from 'viem/chains'
5
5
  import { type MockedFunction, vi } from 'vitest'
6
6
 
7
- import type {
8
- SUPPORTED_CHAIN_IDS,
9
- SupportedChainId,
10
- } from '@/constants/supportedChains.js'
7
+ import type { SupportedChainId } from '@/constants/supportedChains.js'
11
8
 
12
9
  export interface MockChainManagerConfig {
13
10
  supportedChains: SupportedChainId[]
@@ -79,15 +76,15 @@ export class MockChainManager {
79
76
  })
80
77
  }
81
78
 
82
- getChain(chainId: (typeof SUPPORTED_CHAIN_IDS)[number]): Chain {
79
+ getChain(chainId: SupportedChainId): Chain {
83
80
  return chainById[chainId]
84
81
  }
85
82
 
86
- getRpcUrls(chainId: (typeof SUPPORTED_CHAIN_IDS)[number]): string[] {
83
+ getRpcUrls(chainId: SupportedChainId): string[] {
87
84
  return this.getChain(chainId).rpcUrls.default.http as string[]
88
85
  }
89
86
 
90
- getTransportForChain(_chainId: (typeof SUPPORTED_CHAIN_IDS)[number]) {
87
+ getTransportForChain(_chainId: SupportedChainId) {
91
88
  // Mock implementation returns a simple http transport
92
89
  // In tests, the actual transport behavior is typically mocked at a higher level
93
90
  return {} as unknown
@@ -29,17 +29,15 @@ describe('TokenBalance', () => {
29
29
  )
30
30
 
31
31
  expect(balance).toEqual({
32
- symbol: 'USDC',
33
- totalBalance: 1000000n,
34
- totalFormattedBalance: '1',
35
- chainBalances: [
36
- {
37
- chainId: unichain.id,
38
- balance: 1000000n,
39
- formattedBalance: '1',
40
- tokenAddress: MockUSDCAsset.address[unichain.id]!,
32
+ asset: MockUSDCAsset,
33
+ totalBalance: 1,
34
+ totalBalanceRaw: 1000000n,
35
+ chains: {
36
+ [unichain.id]: {
37
+ balance: 1,
38
+ balanceRaw: 1000000n,
41
39
  },
42
- ],
40
+ },
43
41
  })
44
42
  })
45
43
 
@@ -63,10 +61,10 @@ describe('TokenBalance', () => {
63
61
  )
64
62
 
65
63
  expect(balance).toEqual({
66
- symbol: 'UNSUPPORTED',
67
- totalBalance: 0n,
68
- totalFormattedBalance: '0',
69
- chainBalances: [],
64
+ asset: unsupportedAsset,
65
+ totalBalance: 0,
66
+ totalBalanceRaw: 0n,
67
+ chains: {},
70
68
  })
71
69
  })
72
70
  })
@@ -76,17 +74,15 @@ describe('TokenBalance', () => {
76
74
  const balance = await fetchETHBalance(chainManager, walletAddress)
77
75
 
78
76
  expect(balance).toEqual({
79
- symbol: 'ETH',
80
- totalBalance: 1000000n,
81
- totalFormattedBalance: '0.000000000001',
82
- chainBalances: [
83
- {
84
- chainId: unichain.id,
85
- balance: 1000000n,
86
- formattedBalance: '0.000000000001',
87
- tokenAddress: ETH.address[unichain.id]!,
77
+ asset: ETH,
78
+ totalBalance: 0.000000000001,
79
+ totalBalanceRaw: 1000000n,
80
+ chains: {
81
+ [unichain.id]: {
82
+ balance: 0.000000000001,
83
+ balanceRaw: 1000000n,
88
84
  },
89
- ],
85
+ },
90
86
  })
91
87
  })
92
88
  })