@berachain/berajs 0.2.13 → 0.3.1

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 (387) hide show
  1. package/dist/actions/clients/BeraApolloClient.d.ts.map +1 -1
  2. package/dist/actions/clients/clientName.d.ts +10 -0
  3. package/dist/actions/clients/clientName.d.ts.map +1 -0
  4. package/dist/actions/clients/clientName.unit.test.d.ts +2 -0
  5. package/dist/actions/clients/clientName.unit.test.d.ts.map +1 -0
  6. package/dist/actions/clients/exports.d.ts +2 -0
  7. package/dist/actions/clients/exports.d.ts.map +1 -1
  8. package/dist/actions/clients/exports.mjs +26 -7
  9. package/dist/actions/clients/exports.mjs.map +1 -1
  10. package/dist/actions/clients/fetchBeep.d.ts +2 -2
  11. package/dist/actions/clients/fetchBeep.d.ts.map +1 -1
  12. package/dist/actions/clients/fetchEnso.d.ts +17 -0
  13. package/dist/actions/clients/fetchEnso.d.ts.map +1 -0
  14. package/dist/actions/clients/fetchLayerzero.d.ts +12 -0
  15. package/dist/actions/clients/fetchLayerzero.d.ts.map +1 -0
  16. package/dist/actions/clients/fetchOpenApi.d.ts +4 -1
  17. package/dist/actions/clients/fetchOpenApi.d.ts.map +1 -1
  18. package/dist/actions/clients/getApolloClient.d.ts.map +1 -1
  19. package/dist/actions/dex/aggregators/base.d.ts +30 -5
  20. package/dist/actions/dex/aggregators/base.d.ts.map +1 -1
  21. package/dist/actions/dex/aggregators/bex.d.ts +11 -1
  22. package/dist/actions/dex/aggregators/bex.d.ts.map +1 -1
  23. package/dist/actions/dex/aggregators/bgt.d.ts +2 -2
  24. package/dist/actions/dex/aggregators/bgt.d.ts.map +1 -1
  25. package/dist/actions/dex/aggregators/enso/enso.d.ts.map +1 -1
  26. package/dist/actions/dex/aggregators/enso/ensoErc4626.d.ts +1 -0
  27. package/dist/actions/dex/aggregators/enso/ensoErc4626.d.ts.map +1 -1
  28. package/dist/actions/dex/aggregators/erc4626.d.ts +2 -2
  29. package/dist/actions/dex/aggregators/erc4626.d.ts.map +1 -1
  30. package/dist/actions/dex/aggregators/fly.d.ts.map +1 -1
  31. package/dist/actions/dex/aggregators/haiku.d.ts +7 -1
  32. package/dist/actions/dex/aggregators/haiku.d.ts.map +1 -1
  33. package/dist/actions/dex/aggregators/honey.d.ts +2 -2
  34. package/dist/actions/dex/aggregators/honey.d.ts.map +1 -1
  35. package/dist/actions/dex/aggregators/kyberswap.d.ts.map +1 -1
  36. package/dist/actions/dex/aggregators/oogabooga.d.ts.map +1 -1
  37. package/dist/actions/dex/aggregators/openOcean.d.ts.map +1 -1
  38. package/dist/actions/dex/aggregators/wbera.d.ts +3 -2
  39. package/dist/actions/dex/aggregators/wbera.d.ts.map +1 -1
  40. package/dist/actions/dex/getAllPools.d.ts.map +1 -1
  41. package/dist/actions/dex/getApiPool.d.ts.map +1 -1
  42. package/dist/actions/enso/getEnsoUserTokensWithBalances.d.ts.map +1 -1
  43. package/dist/actions/enso/util.d.ts +1 -6
  44. package/dist/actions/enso/util.d.ts.map +1 -1
  45. package/dist/actions/exports.d.ts +3 -5
  46. package/dist/actions/exports.d.ts.map +1 -1
  47. package/dist/actions/exports.mjs +33 -64
  48. package/dist/actions/exports.mjs.map +1 -1
  49. package/dist/actions/governance/exports.mjs +3 -3
  50. package/dist/actions/honey/getChartData.d.ts +1 -1
  51. package/dist/actions/honey/getChartData.d.ts.map +1 -1
  52. package/dist/actions/honey/getHoney24hVolume.d.ts +2 -2
  53. package/dist/actions/honey/getHoney24hVolume.d.ts.map +1 -1
  54. package/dist/actions/honey/getHoneyCollaterals.d.ts +1 -1
  55. package/dist/actions/honey/getHoneyCollaterals.d.ts.map +1 -1
  56. package/dist/actions/honey/getHoneyTxns.d.ts +1 -1
  57. package/dist/actions/honey/getHoneyTxns.d.ts.map +1 -1
  58. package/dist/actions/pol/getBGTGlobalInfo.d.ts +0 -1
  59. package/dist/actions/pol/getBGTGlobalInfo.d.ts.map +1 -1
  60. package/dist/actions/pol/getBeraTokenTotalSupply.d.ts.map +1 -1
  61. package/dist/actions/pol/getEarnedStakedBeraVault.d.ts +4 -27
  62. package/dist/actions/pol/getEarnedStakedBeraVault.d.ts.map +1 -1
  63. package/dist/actions/pol/getLSTStakeConfig.d.ts.map +1 -1
  64. package/dist/actions/pol/getRewardVaults.d.ts.map +1 -1
  65. package/dist/actions/pol/getSWBeraVaultMetadata.d.ts +1 -14
  66. package/dist/actions/pol/getSWBeraVaultMetadata.d.ts.map +1 -1
  67. package/dist/actions/pol/getStakedBeraAPY.d.ts +14 -0
  68. package/dist/actions/pol/getStakedBeraAPY.d.ts.map +1 -0
  69. package/dist/actions/pol/getStakedBeraSnapshots.d.ts +14 -4
  70. package/dist/actions/pol/getStakedBeraSnapshots.d.ts.map +1 -1
  71. package/dist/actions/pol/getStakingDailyAssets.d.ts +2 -2
  72. package/dist/actions/pol/getStakingDailyAssets.d.ts.map +1 -1
  73. package/dist/actions/server/exports.mjs +5 -5
  74. package/dist/actions/server/exports.mjs.map +1 -1
  75. package/dist/actions/server/getDailyValidatorBlockStats.d.ts +1 -1
  76. package/dist/actions/server/getDailyValidatorBlockStats.d.ts.map +1 -1
  77. package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.d.ts +1 -1
  78. package/dist/actions/validators/getActiveBoostAndCommissionChangeDelay.d.ts.map +1 -1
  79. package/dist/actions/validators/getUserActiveValidators.d.ts +37 -1
  80. package/dist/actions/validators/getUserActiveValidators.d.ts.map +1 -1
  81. package/dist/actions/validators/getValidatorIncentiveDistribution.d.ts +1 -1
  82. package/dist/actions/validators/getValidatorIncentiveDistribution.d.ts.map +1 -1
  83. package/dist/actions/validators/getValidatorRewardAllocation.d.ts +4 -0
  84. package/dist/actions/validators/getValidatorRewardAllocation.d.ts.map +1 -1
  85. package/dist/chunk-3TRTSTDH.mjs +19 -0
  86. package/dist/chunk-3TRTSTDH.mjs.map +1 -0
  87. package/dist/{chunk-ZWTGVIPJ.mjs → chunk-4576RF2K.mjs} +29 -4
  88. package/dist/chunk-4576RF2K.mjs.map +1 -0
  89. package/dist/{chunk-PHYZRH4I.mjs → chunk-5MUCX35C.mjs} +9 -13
  90. package/dist/chunk-5MUCX35C.mjs.map +1 -0
  91. package/dist/{chunk-UA3Z47LT.mjs → chunk-6D4S3EAC.mjs} +97 -26
  92. package/dist/chunk-6D4S3EAC.mjs.map +1 -0
  93. package/dist/{chunk-AEN6IJFU.mjs → chunk-7KN7TDUC.mjs} +2 -2
  94. package/dist/{chunk-LE4CYW7S.mjs → chunk-FWRYUIJK.mjs} +3 -3
  95. package/dist/chunk-GDUKRUHE.mjs +29 -0
  96. package/dist/chunk-GDUKRUHE.mjs.map +1 -0
  97. package/dist/{chunk-PJRLHTGC.mjs → chunk-HPRLNT6R.mjs} +3 -3
  98. package/dist/{chunk-DOZJB6IJ.mjs → chunk-KY7JMIIS.mjs} +394 -346
  99. package/dist/chunk-KY7JMIIS.mjs.map +1 -0
  100. package/dist/{chunk-P3YZ7F22.mjs → chunk-LL7XR2H5.mjs} +34 -3
  101. package/dist/chunk-LL7XR2H5.mjs.map +1 -0
  102. package/dist/{chunk-EJIGERYM.mjs → chunk-M3MIGSH3.mjs} +2 -2
  103. package/dist/{chunk-NZAH3SGT.mjs → chunk-MVNQY2D4.mjs} +9 -4
  104. package/dist/chunk-MVNQY2D4.mjs.map +1 -0
  105. package/dist/{chunk-TGN55GKE.mjs → chunk-SC3BSCTN.mjs} +2 -2
  106. package/dist/{chunk-QQASX4LJ.mjs → chunk-TXWDUJOY.mjs} +2 -2
  107. package/dist/{chunk-EGAB6NFQ.mjs → chunk-UWJQ6UKG.mjs} +2 -2
  108. package/dist/chunk-XO2BFPTB.mjs +50 -0
  109. package/dist/chunk-XO2BFPTB.mjs.map +1 -0
  110. package/dist/{chunk-7TFV6UKF.mjs → chunk-XXKPXNQD.mjs} +1 -2
  111. package/dist/chunk-XXKPXNQD.mjs.map +1 -0
  112. package/dist/{chunk-IFNIPVTZ.mjs → chunk-Z337NBBW.mjs} +5 -49
  113. package/dist/chunk-Z337NBBW.mjs.map +1 -0
  114. package/dist/{chunk-J3LTASDE.mjs → chunk-ZHV3MQ4F.mjs} +4 -4
  115. package/dist/contexts/BeraFlags/BeraFlags.d.ts +1 -1
  116. package/dist/contexts/BeraFlags/BeraFlags.d.ts.map +1 -1
  117. package/dist/contexts/BeraFlags/defaultFlags.d.ts +2 -2
  118. package/dist/contexts/BeraFlags/defaultFlags.d.ts.map +1 -1
  119. package/dist/contexts/BexStatusProvider.d.ts +1 -1
  120. package/dist/contexts/BexStatusProvider.d.ts.map +1 -1
  121. package/dist/contexts/TokensProvider.d.ts +1 -1
  122. package/dist/contexts/TokensProvider.d.ts.map +1 -1
  123. package/dist/contexts/exports.mjs +9 -9
  124. package/dist/enum/contracts.d.ts +3 -0
  125. package/dist/enum/contracts.d.ts.map +1 -1
  126. package/dist/enum/exports.mjs +6 -4
  127. package/dist/enum/exports.mjs.map +1 -1
  128. package/dist/enum/txnEnum.d.ts +1 -1
  129. package/dist/enum/txnEnum.d.ts.map +1 -1
  130. package/dist/errors/RequestError.d.ts +19 -0
  131. package/dist/errors/RequestError.d.ts.map +1 -1
  132. package/dist/errors/errorMap.d.ts +4 -3
  133. package/dist/errors/errorMap.d.ts.map +1 -1
  134. package/dist/errors/exports.mjs +5 -5
  135. package/dist/errors/getErrorMessage.unit.test.d.ts +2 -0
  136. package/dist/errors/getErrorMessage.unit.test.d.ts.map +1 -0
  137. package/dist/generated/beep.d.ts +1597 -0
  138. package/dist/generated/beep.d.ts.map +1 -0
  139. package/dist/generated/enso.d.ts +4957 -0
  140. package/dist/generated/enso.d.ts.map +1 -0
  141. package/dist/generated/layerzero.d.ts +2057 -0
  142. package/dist/generated/layerzero.d.ts.map +1 -0
  143. package/dist/hooks/dex/useAggregatorsQuotes.d.ts.map +1 -1
  144. package/dist/hooks/dex/useAllUserPools.d.ts.map +1 -1
  145. package/dist/hooks/dex/useCrossChainNativeFee.d.ts +32 -0
  146. package/dist/hooks/dex/useCrossChainNativeFee.d.ts.map +1 -0
  147. package/dist/hooks/dex/useCrossChainNativeFee.unit.test.d.ts +2 -0
  148. package/dist/hooks/dex/useCrossChainNativeFee.unit.test.d.ts.map +1 -0
  149. package/dist/hooks/dex/useOnChainPoolData.d.ts.map +1 -1
  150. package/dist/hooks/dex/usePools.d.ts.map +1 -1
  151. package/dist/hooks/dex/useSingleAggregatorQuote.d.ts.map +1 -1
  152. package/dist/hooks/dex/useSingleAggregatorQuote.unit.test.d.ts +2 -0
  153. package/dist/hooks/dex/useSingleAggregatorQuote.unit.test.d.ts.map +1 -0
  154. package/dist/hooks/enso/useBendZapSupply.d.ts +2 -2
  155. package/dist/hooks/enso/useBendZapSupply.d.ts.map +1 -1
  156. package/dist/hooks/enso/useBendZapSupply.unit.test.d.ts +2 -0
  157. package/dist/hooks/enso/useBendZapSupply.unit.test.d.ts.map +1 -0
  158. package/dist/hooks/enso/useEnsoUserTokensWithBalances.d.ts.map +1 -1
  159. package/dist/hooks/enso/useEnsoUserTokensWithBalances.unit.test.d.ts +2 -0
  160. package/dist/hooks/enso/useEnsoUserTokensWithBalances.unit.test.d.ts.map +1 -0
  161. package/dist/hooks/enso/useZapStakeBera.d.ts.map +1 -1
  162. package/dist/hooks/enso/useZapStakeBera.unit.test.d.ts +2 -0
  163. package/dist/hooks/enso/useZapStakeBera.unit.test.d.ts.map +1 -0
  164. package/dist/hooks/exports.d.ts +2 -5
  165. package/dist/hooks/exports.d.ts.map +1 -1
  166. package/dist/hooks/exports.mjs +615 -911
  167. package/dist/hooks/exports.mjs.map +1 -1
  168. package/dist/hooks/governance/exports.mjs +4 -4
  169. package/dist/hooks/honey/useHoneyChartData.d.ts +4 -4
  170. package/dist/hooks/honey/useHoneyChartData.d.ts.map +1 -1
  171. package/dist/hooks/pol/useAutoclaimedIncentives.d.ts.map +1 -1
  172. package/dist/hooks/pol/useAutoclaimedIncentivesTxHash.d.ts.map +1 -1
  173. package/dist/hooks/pol/useRewardTokenToBeraRate.d.ts.map +1 -1
  174. package/dist/hooks/pol/useRewardVaultBalanceFromStakingToken.d.ts.map +1 -1
  175. package/dist/hooks/pol/useRewardVaults.d.ts.map +1 -1
  176. package/dist/hooks/pol/useStakedAPY.d.ts +11 -0
  177. package/dist/hooks/pol/useStakedAPY.d.ts.map +1 -0
  178. package/dist/hooks/pol/useStakedData.d.ts +4 -2
  179. package/dist/hooks/pol/useStakedData.d.ts.map +1 -1
  180. package/dist/hooks/pol/useStakedSnapshots.d.ts +1 -1
  181. package/dist/hooks/pol/useStakedSnapshots.d.ts.map +1 -1
  182. package/dist/hooks/pol/useStakingVaultsMetadata.d.ts +0 -1
  183. package/dist/hooks/pol/useStakingVaultsMetadata.d.ts.map +1 -1
  184. package/dist/hooks/tokens/useMultipleTokenInformation.d.ts +30 -0
  185. package/dist/hooks/tokens/useMultipleTokenInformation.d.ts.map +1 -1
  186. package/dist/hooks/tokens/useMultipleTokenInformation.unit.test.d.ts +2 -0
  187. package/dist/hooks/tokens/useMultipleTokenInformation.unit.test.d.ts.map +1 -0
  188. package/dist/hooks/tokens/usePollBalance.d.ts.map +1 -1
  189. package/dist/hooks/validators/useUserActiveValidators.d.ts +5 -0
  190. package/dist/hooks/validators/useUserActiveValidators.d.ts.map +1 -1
  191. package/dist/hooks/validators/useValidator.d.ts +0 -1
  192. package/dist/hooks/validators/useValidator.d.ts.map +1 -1
  193. package/dist/hooks/validators/useValidatorIncentiveDistribution.d.ts +4 -5
  194. package/dist/hooks/validators/useValidatorIncentiveDistribution.d.ts.map +1 -1
  195. package/dist/hooks/validators/useValidatorRewardAllocation.d.ts +1 -0
  196. package/dist/hooks/validators/useValidatorRewardAllocation.d.ts.map +1 -1
  197. package/dist/types/beep/exports.d.ts +2 -0
  198. package/dist/types/beep/exports.d.ts.map +1 -0
  199. package/dist/types/beep/exports.mjs +1 -0
  200. package/dist/types/beep/exports.mjs.map +1 -0
  201. package/dist/types/bribeBoost.d.ts +0 -49
  202. package/dist/types/dex.d.ts +17 -0
  203. package/dist/types/enso.d.ts +1 -27
  204. package/dist/types/global.d.ts +7 -0
  205. package/dist/types/pol.d.ts +3 -48
  206. package/dist/utils/crossChainBridge.d.ts +74 -0
  207. package/dist/utils/crossChainBridge.d.ts.map +1 -0
  208. package/dist/utils/crossChainBridge.unit.test.d.ts +2 -0
  209. package/dist/utils/crossChainBridge.unit.test.d.ts.map +1 -0
  210. package/dist/utils/exports.d.ts +1 -1
  211. package/dist/utils/exports.d.ts.map +1 -1
  212. package/dist/utils/exports.mjs +142 -72
  213. package/dist/utils/exports.mjs.map +1 -1
  214. package/dist/utils/getTestClient.d.ts +5 -3
  215. package/dist/utils/getTestClient.d.ts.map +1 -1
  216. package/dist/utils/parseWhiskToken.d.ts.map +1 -1
  217. package/package.json +14 -10
  218. package/src/actions/clients/BeraApolloClient.ts +4 -2
  219. package/src/actions/clients/clientName.ts +17 -0
  220. package/src/actions/clients/clientName.unit.test.ts +39 -0
  221. package/src/actions/clients/exports.ts +2 -0
  222. package/src/actions/clients/fetchBeep.ts +6 -4
  223. package/src/actions/clients/fetchEnso.ts +47 -0
  224. package/src/actions/clients/fetchLayerzero.ts +33 -0
  225. package/src/actions/clients/fetchOpenApi.ts +9 -2
  226. package/src/actions/clients/fetchOpenApi.unit.test.ts +27 -12
  227. package/src/actions/clients/getApolloClient.ts +3 -11
  228. package/src/actions/dex/__tests__/aggregators.unit.test.ts +231 -2
  229. package/src/actions/dex/aggregators/base.ts +75 -17
  230. package/src/actions/dex/aggregators/bex.ts +41 -1
  231. package/src/actions/dex/aggregators/bgt.ts +11 -6
  232. package/src/actions/dex/aggregators/enso/enso.ts +1 -0
  233. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +27 -9
  234. package/src/actions/dex/aggregators/erc4626.ts +19 -5
  235. package/src/actions/dex/aggregators/fly.ts +1 -0
  236. package/src/actions/dex/aggregators/haiku.ts +33 -2
  237. package/src/actions/dex/aggregators/honey.ts +17 -6
  238. package/src/actions/dex/aggregators/kyberswap.ts +1 -0
  239. package/src/actions/dex/aggregators/oogabooga.ts +1 -0
  240. package/src/actions/dex/aggregators/openOcean.ts +1 -0
  241. package/src/actions/dex/aggregators/wbera.ts +17 -11
  242. package/src/actions/enso/getBendMultiplyBundle.ts +1 -1
  243. package/src/actions/enso/getEnsoUserTokensWithBalances.ts +4 -8
  244. package/src/actions/enso/util.ts +0 -59
  245. package/src/actions/exports.ts +3 -5
  246. package/src/actions/honey/getChartData.ts +2 -3
  247. package/src/actions/honey/getHoney24hVolume.ts +4 -13
  248. package/src/actions/honey/getHoneyCollaterals.ts +1 -1
  249. package/src/actions/honey/getHoneyTxns.ts +2 -3
  250. package/src/actions/pol/getBGTGlobalInfo.ts +0 -2
  251. package/src/actions/pol/getBeraTokenTotalSupply.ts +3 -33
  252. package/src/actions/pol/getEarnedStakedBeraVault.ts +1 -1
  253. package/src/actions/pol/getLSTStakeConfig.ts +0 -6
  254. package/src/actions/pol/getRewardVaults.ts +0 -1
  255. package/src/actions/pol/getSWBeraVaultMetadata.ts +2 -106
  256. package/src/actions/pol/getStakedBeraAPY.ts +44 -0
  257. package/src/actions/pol/getStakedBeraSnapshots.ts +17 -34
  258. package/src/actions/pol/getStakingDailyAssets.ts +1 -1
  259. package/src/actions/server/getDailyValidatorBlockStats.ts +1 -2
  260. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.ts +1 -1
  261. package/src/actions/validators/getUserActiveValidators.ts +116 -54
  262. package/src/actions/validators/getValidatorIncentiveDistribution.ts +1 -2
  263. package/src/actions/validators/getValidatorRewardAllocation.ts +12 -1
  264. package/src/contexts/BeraFlags/BeraFlags.tsx +1 -4
  265. package/src/contexts/BeraFlags/defaultFlags.ts +1 -3
  266. package/src/contexts/BexStatusProvider.tsx +1 -1
  267. package/src/contexts/TokensProvider.tsx +1 -4
  268. package/src/enum/contracts.ts +3 -0
  269. package/src/enum/txnEnum.ts +1 -1
  270. package/src/errors/BeraError.unit.test.ts +23 -0
  271. package/src/errors/RequestError.ts +46 -9
  272. package/src/errors/RequestError.unit.test.ts +54 -0
  273. package/src/errors/errorMap.ts +8 -3
  274. package/src/errors/getErrorMessage.unit.test.ts +32 -0
  275. package/src/generated/beep.ts +1605 -0
  276. package/src/generated/enso.ts +4965 -0
  277. package/src/generated/layerzero.ts +2065 -0
  278. package/src/hooks/dex/useAggregatorsQuotes.ts +7 -1
  279. package/src/hooks/dex/useCrossChainNativeFee.ts +83 -0
  280. package/src/hooks/dex/useCrossChainNativeFee.unit.test.ts +63 -0
  281. package/src/hooks/dex/useOnChainPoolData.ts +30 -13
  282. package/src/hooks/dex/useSingleAggregatorQuote.ts +10 -5
  283. package/src/hooks/dex/useSingleAggregatorQuote.unit.test.ts +86 -0
  284. package/src/hooks/enso/useBendZapSupply.ts +10 -38
  285. package/src/hooks/enso/useBendZapSupply.unit.test.ts +98 -0
  286. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +13 -3
  287. package/src/hooks/enso/useEnsoUserTokensWithBalances.unit.test.ts +69 -0
  288. package/src/hooks/enso/useZapStakeBera.ts +8 -1
  289. package/src/hooks/enso/useZapStakeBera.unit.test.ts +97 -0
  290. package/src/hooks/exports.ts +2 -5
  291. package/src/hooks/pol/useAutoclaimedIncentives.ts +6 -3
  292. package/src/hooks/pol/useAutoclaimedIncentivesTxHash.ts +5 -2
  293. package/src/hooks/pol/useRewardTokenToBeraRate.ts +5 -4
  294. package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +0 -1
  295. package/src/hooks/pol/{useStakedAPR.ts → useStakedAPY.ts} +11 -9
  296. package/src/hooks/pol/useStakedData.ts +15 -14
  297. package/src/hooks/pol/useStakedSnapshots.ts +1 -1
  298. package/src/hooks/pol/useStakingVaultsMetadata.ts +3 -8
  299. package/src/hooks/tokens/useMultipleTokenInformation.ts +64 -21
  300. package/src/hooks/tokens/useMultipleTokenInformation.unit.test.ts +91 -0
  301. package/src/hooks/tokens/usePollBalance.ts +4 -2
  302. package/src/hooks/validators/useUserActiveValidators.ts +54 -9
  303. package/src/hooks/validators/useValidatorIncentiveDistribution.ts +4 -5
  304. package/src/types/beep/exports.ts +4 -0
  305. package/src/types/bribeBoost.d.ts +0 -49
  306. package/src/types/dex.d.ts +17 -0
  307. package/src/types/enso.d.ts +1 -27
  308. package/src/types/global.d.ts +7 -0
  309. package/src/types/pol.d.ts +3 -48
  310. package/src/utils/crossChainBridge.ts +290 -0
  311. package/src/utils/crossChainBridge.unit.test.ts +177 -0
  312. package/src/utils/exports.ts +1 -1
  313. package/dist/BeraError-7-A5JYy_.d.ts +0 -123
  314. package/dist/BexStatusProvider-DRymVlQf.d.ts +0 -70
  315. package/dist/HoneyConfigProvider-COOuDNra.d.ts +0 -390
  316. package/dist/RequestError-DkUbo3ro.d.ts +0 -145
  317. package/dist/actions/dex/b-sdk.d.ts +0 -3
  318. package/dist/actions/enso/getEnsoSwapBundle.d.ts +0 -3
  319. package/dist/actions/enso/getEnsoSwapBundle.d.ts.map +0 -1
  320. package/dist/actions/pol/getBgtIncentiveDistributorPaused.d.ts +0 -10
  321. package/dist/actions/pol/getBgtIncentiveDistributorPaused.d.ts.map +0 -1
  322. package/dist/actions/pol/getRewardProofsByValidator.d.ts +0 -9
  323. package/dist/actions/pol/getRewardProofsByValidator.d.ts.map +0 -1
  324. package/dist/actions/pol/getStakedBeraAPR.d.ts +0 -12
  325. package/dist/actions/pol/getStakedBeraAPR.d.ts.map +0 -1
  326. package/dist/actions/pol/getUserClaimableIncentives.d.ts +0 -9
  327. package/dist/actions/pol/getUserClaimableIncentives.d.ts.map +0 -1
  328. package/dist/actions/validators/getValidatorAnalytics.d.ts +0 -12
  329. package/dist/actions/validators/getValidatorAnalytics.d.ts.map +0 -1
  330. package/dist/chunk-7TFV6UKF.mjs.map +0 -1
  331. package/dist/chunk-BSOWLS3W.mjs +0 -40
  332. package/dist/chunk-BSOWLS3W.mjs.map +0 -1
  333. package/dist/chunk-DOZJB6IJ.mjs.map +0 -1
  334. package/dist/chunk-IFNIPVTZ.mjs.map +0 -1
  335. package/dist/chunk-NZAH3SGT.mjs.map +0 -1
  336. package/dist/chunk-P3YZ7F22.mjs.map +0 -1
  337. package/dist/chunk-PHYZRH4I.mjs.map +0 -1
  338. package/dist/chunk-UA3Z47LT.mjs.map +0 -1
  339. package/dist/chunk-ZWTGVIPJ.mjs.map +0 -1
  340. package/dist/contexts/block-time-provider.d.ts +0 -10
  341. package/dist/defaultFlags-D6KfkTZx.d.ts +0 -10
  342. package/dist/dex-C_BB0b0O.d.ts +0 -37
  343. package/dist/getApolloClient-MWm_iq4u.d.ts +0 -39
  344. package/dist/getProposalVotes-DAUrdX2n.d.ts +0 -12
  345. package/dist/getValidatorQueuedOperatorAddress-N2I7wHd6.d.ts +0 -511
  346. package/dist/global.d-CR3zicga.d.ts +0 -231
  347. package/dist/global.d-CiZJ2eHz.d.ts +0 -231
  348. package/dist/honey-CYm0RWf4.d.ts +0 -14
  349. package/dist/hooks/enso/useEnsoSwapBundle.d.ts +0 -26
  350. package/dist/hooks/enso/useEnsoSwapBundle.d.ts.map +0 -1
  351. package/dist/hooks/pol/useBgtIncentiveDistributorPaused.d.ts +0 -8
  352. package/dist/hooks/pol/useBgtIncentiveDistributorPaused.d.ts.map +0 -1
  353. package/dist/hooks/pol/useStakedAPR.d.ts +0 -11
  354. package/dist/hooks/pol/useStakedAPR.d.ts.map +0 -1
  355. package/dist/hooks/validators/useUserClaimableIncentives.d.ts +0 -8
  356. package/dist/hooks/validators/useUserClaimableIncentives.d.ts.map +0 -1
  357. package/dist/hooks/validators/useValidatorAnalytics.d.ts +0 -11
  358. package/dist/hooks/validators/useValidatorAnalytics.d.ts.map +0 -1
  359. package/dist/pol.d-CeRgXBL8.d.ts +0 -167
  360. package/dist/txnEnum-ByI5dtDi.d.ts +0 -106
  361. package/dist/types/bribe-boost.d.ts +0 -69
  362. package/dist/useHoneySwapState-CXVWAThr.d.ts +0 -32
  363. package/dist/useHoneySwapState-twi7NTaO.d.ts +0 -32
  364. package/dist/utils/formatIncentivesTokenMap.d.ts +0 -3
  365. package/dist/utils/formatIncentivesTokenMap.d.ts.map +0 -1
  366. package/dist/utils/layerZeroScan.d.ts +0 -39
  367. package/dist/utils/layerZeroScan.d.ts.map +0 -1
  368. package/src/actions/enso/getEnsoSwapBundle.ts +0 -72
  369. package/src/actions/pol/getBgtIncentiveDistributorPaused.ts +0 -28
  370. package/src/actions/pol/getRewardProofsByValidator.ts +0 -49
  371. package/src/actions/pol/getStakedBeraAPR.ts +0 -56
  372. package/src/actions/pol/getUserClaimableIncentives.ts +0 -40
  373. package/src/actions/validators/getValidatorAnalytics.ts +0 -37
  374. package/src/hooks/enso/useEnsoSwapBundle.ts +0 -121
  375. package/src/hooks/pol/useBgtIncentiveDistributorPaused.ts +0 -34
  376. package/src/hooks/validators/useUserClaimableIncentives.ts +0 -148
  377. package/src/hooks/validators/useValidatorAnalytics.ts +0 -37
  378. package/src/utils/formatIncentivesTokenMap.ts +0 -19
  379. package/src/utils/layerZeroScan.ts +0 -124
  380. /package/dist/{chunk-AEN6IJFU.mjs.map → chunk-7KN7TDUC.mjs.map} +0 -0
  381. /package/dist/{chunk-LE4CYW7S.mjs.map → chunk-FWRYUIJK.mjs.map} +0 -0
  382. /package/dist/{chunk-PJRLHTGC.mjs.map → chunk-HPRLNT6R.mjs.map} +0 -0
  383. /package/dist/{chunk-EJIGERYM.mjs.map → chunk-M3MIGSH3.mjs.map} +0 -0
  384. /package/dist/{chunk-TGN55GKE.mjs.map → chunk-SC3BSCTN.mjs.map} +0 -0
  385. /package/dist/{chunk-QQASX4LJ.mjs.map → chunk-TXWDUJOY.mjs.map} +0 -0
  386. /package/dist/{chunk-EGAB6NFQ.mjs.map → chunk-UWJQ6UKG.mjs.map} +0 -0
  387. /package/dist/{chunk-J3LTASDE.mjs.map → chunk-ZHV3MQ4F.mjs.map} +0 -0
@@ -30,6 +30,28 @@ export abstract class BaseAggregator {
30
30
  needsAccountForQuote: boolean = false;
31
31
  notFoundMessages: string[] = [];
32
32
 
33
+ /**
34
+ * Whether this aggregator can handle a BERA↔WBERA pair.
35
+ *
36
+ * Most aggregators normalize native BERA → WBERA before routing (see
37
+ * `parseAddresses`), so a BERA↔WBERA pair collapses to WBERA↔WBERA and the
38
+ * external router rejects it as "same token" (e.g. Enso 400, HUB-9FQ). For
39
+ * those, `getUnsupportedReason` rejects the pair up-front so no request fires.
40
+ * Only the dedicated wrap/unwrap aggregator sets this `true`.
41
+ */
42
+ supportsBeraWrap: boolean = false;
43
+
44
+ /**
45
+ * Whether this aggregator can bridge — route a pair whose tokens live on
46
+ * different chains (`tokenIn.chainId !== tokenOut.chainId`).
47
+ *
48
+ * Most aggregators only route within a single chain; handed a cross-chain
49
+ * pair they would 400 or, worse, quote garbage against the wrong chain.
50
+ * `getUnsupportedReason` rejects such pairs up-front unless this is `true`.
51
+ * Only bridging aggregators (Enso via LayerZero) set it.
52
+ */
53
+ supportsBridging: boolean = false;
54
+
33
55
  config: BeraConfig;
34
56
 
35
57
  chainId: ChainId;
@@ -48,9 +70,7 @@ export abstract class BaseAggregator {
48
70
 
49
71
  abstract getQuote(
50
72
  args: IAggregatorArgs,
51
- ):
52
- | Promise<IRawAggregatorQuote | undefined>
53
- | Promise<IRawAggregatorQuote | undefined>;
73
+ ): Promise<IRawAggregatorQuote | undefined>;
54
74
 
55
75
  /**
56
76
  * return wbera for native tokens to accomodate the aggregator's router logic
@@ -172,9 +192,12 @@ export abstract class BaseAggregator {
172
192
  }
173
193
 
174
194
  /**
175
- * Check if chain is supported
195
+ * Returns a human-readable reason this aggregator can't route the pair, or
196
+ * `null` if it can. Callers gate on `=== null`; `assertChainSupport` throws
197
+ * the reason so users get an accurate message (not a misleading "does not
198
+ * support chain ID" for what is actually a same-token pair).
176
199
  */
177
- checkChainSupport({
200
+ getUnsupportedReason({
178
201
  tokenIn,
179
202
  tokenOut,
180
203
  }: {
@@ -184,31 +207,66 @@ export abstract class BaseAggregator {
184
207
  honeyNativeState?: Pick<HoneyConfigContextReturn, "collateralList">;
185
208
  // needed in ERC4626 aggregator
186
209
  underlyingToken?: Token | null;
187
- }): boolean {
188
- if (this.supportedChains === null) {
189
- return true;
210
+ // needed in haiku aggregator (reward-vault staking opt-out)
211
+ rewardVault?: Address;
212
+ }): string | null {
213
+ if (isToken(tokenIn, tokenOut)) {
214
+ // same token route don't make sense (we're not arbitraging here), so we don't support it
215
+ return `${this.name} cannot route between the same token (${tokenIn.symbol}).`;
216
+ }
217
+
218
+ // Reject pairs that collapse to the same token once native BERA is
219
+ // normalized to WBERA (e.g. BERA↔WBERA), unless this aggregator explicitly
220
+ // handles wrapping. Otherwise the router 400s on identical tokens (HUB-9FQ).
221
+ if (!this.supportsBeraWrap) {
222
+ const wbera = this.config.tokens.wbera;
223
+ function normalize(token: Token) {
224
+ return (isToken(token, "BERA") ? wbera : token.address).toLowerCase();
225
+ }
226
+ if (normalize(tokenIn) === normalize(tokenOut)) {
227
+ return `${this.name} cannot route between BERA and WBERA — use wrap/unwrap instead.`;
228
+ }
190
229
  }
191
230
 
192
- return (
193
- this.supportedChains.includes(tokenIn.chainId) &&
194
- this.supportedChains.includes(tokenOut.chainId)
195
- );
231
+ // Reject cross-chain pairs unless this aggregator can bridge. Making the
232
+ // rejection explicit (rather than relying on `supportedChains`) lets the
233
+ // swap-page fan-out be handed multichain pairs safely.
234
+ if (tokenIn.chainId !== tokenOut.chainId && !this.supportsBridging) {
235
+ return `${this.name} cannot route across chains (${tokenIn.chainId} → ${tokenOut.chainId}).`;
236
+ }
237
+
238
+ if (
239
+ this.supportedChains !== null &&
240
+ (!this.supportedChains.includes(tokenIn.chainId) ||
241
+ !this.supportedChains.includes(tokenOut.chainId))
242
+ ) {
243
+ return `${this.name} does not support tokens chain ID: ${tokenIn.chainId} and ${tokenOut.chainId}`;
244
+ }
245
+
246
+ return null;
196
247
  }
197
248
 
198
249
  assertChainSupport({
199
250
  tokenIn,
200
251
  tokenOut,
201
252
  underlyingToken,
253
+ honeyNativeState,
202
254
  }: {
203
255
  tokenIn: Token;
204
256
  tokenOut: Token;
257
+ // needed in ERC4626 aggregator
205
258
  underlyingToken?: Token | null;
259
+ // needed in honey native aggregator
260
+ honeyNativeState?: Pick<HoneyConfigContextReturn, "collateralList">;
206
261
  }): void {
207
- if (!this.checkChainSupport({ tokenIn, tokenOut, underlyingToken })) {
208
- throw new BeraError({
209
- message: `${this.name} does not support tokens chain ID: ${tokenIn.chainId} and ${tokenOut.chainId}`,
210
- level: "error",
211
- });
262
+ const reason = this.getUnsupportedReason({
263
+ tokenIn,
264
+ tokenOut,
265
+ underlyingToken,
266
+ honeyNativeState,
267
+ });
268
+ if (reason !== null) {
269
+ throw new BeraError({ message: reason, level: "error" });
212
270
  }
213
271
  }
214
272
 
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  type Address,
3
+ DECIMAL_SCALES,
3
4
  Slippage,
4
5
  type SorSwapResult,
5
6
  Swap,
@@ -19,7 +20,11 @@ import { assertPublicClient } from "../../../errors/assert";
19
20
  import { BeraError } from "../../../errors/BeraError";
20
21
  import { BeraMonitoring } from "../../../errors/BeraMonitoring";
21
22
  import { RequestError } from "../../../errors/RequestError";
22
- import type { IAggregatorArgs, IRawAggregatorQuote } from "../../../types/dex";
23
+ import type {
24
+ Token as BeraToken,
25
+ IAggregatorArgs,
26
+ IRawAggregatorQuote,
27
+ } from "../../../types/dex";
23
28
  import { isToken } from "../../../utils/tokens";
24
29
  import { BalancerApi } from "../bSdk";
25
30
  import { BaseAggregator } from "./base";
@@ -35,6 +40,40 @@ class BexAggregator extends BaseAggregator {
35
40
  readonly url = getUriFromLink(this.config.api);
36
41
  readonly type = "graphql";
37
42
 
43
+ /**
44
+ * Opt bex out of tokens it structurally can't route (BGT, or decimals
45
+ * outside b-sdk's supported range) so the quote is never requested and other
46
+ * aggregators still handle it — see `supportsToken` for the specifics.
47
+ */
48
+ getUnsupportedReason(args: {
49
+ tokenIn: BeraToken;
50
+ tokenOut: BeraToken;
51
+ }): string | null {
52
+ const base = super.getUnsupportedReason(args);
53
+ if (base !== null) {
54
+ return base;
55
+ }
56
+ for (const token of [args.tokenIn, args.tokenOut]) {
57
+ if (!this.supportsToken(token)) {
58
+ return `${this.name} can't route ${token.symbol} (BGT or unsupported decimals).`;
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+
64
+ private supportsToken(token: BeraToken) {
65
+ // BGT has no Balancer pool (it's redeemed via the BGT aggregator, not
66
+ // swapped), so a bex quote for it always throws NO_SWAP_PATHS (HUB-A5R).
67
+ if (isToken(token.address, "BGT", { config: this.config })) {
68
+ return false;
69
+ }
70
+ // b-sdk's `TokenAmount` scales via `DECIMAL_SCALES[18 - decimals]`; a token
71
+ // outside that 0–18 table (e.g. 27-decimal ctBeraUSDe) throws "Cannot mix
72
+ // BigInt and other types" (HUB-A6D). Mirror the exact lookup so this tracks
73
+ // b-sdk if the supported range ever changes.
74
+ const scaleKey = 18 - token.decimals;
75
+ return scaleKey in DECIMAL_SCALES;
76
+ }
38
77
  /**
39
78
  * Helper function to convert zero address to wrapped token address
40
79
  */
@@ -220,6 +259,7 @@ class BexAggregator extends BaseAggregator {
220
259
  abi: balancerVaultAbi,
221
260
  address: callData.to,
222
261
  value: callData.value || BigInt(0),
262
+ extraTags: { aggregator: this.name },
223
263
  };
224
264
  },
225
265
  };
@@ -15,23 +15,28 @@ class RedeemBgtAggregator extends BaseAggregator {
15
15
  supportedChains = [ChainId.MAINNET, ChainId.BEPOLIA];
16
16
  readonly type = "rpc";
17
17
 
18
- checkChainSupport({
18
+ getUnsupportedReason({
19
19
  tokenIn,
20
20
  tokenOut,
21
21
  }: {
22
22
  tokenIn: MinimalERC20;
23
23
  tokenOut: MinimalERC20;
24
- }): boolean {
25
- if (!super.checkChainSupport({ tokenIn, tokenOut })) {
26
- return false;
24
+ }): string | null {
25
+ const base = super.getUnsupportedReason({ tokenIn, tokenOut });
26
+ if (base !== null) {
27
+ return base;
27
28
  }
28
29
 
29
- return (
30
+ if (
30
31
  // only supported on same chain
31
32
  tokenIn.chainId === tokenOut.chainId &&
32
33
  isToken(tokenIn, "BGT", { chainId: tokenIn.chainId }) &&
33
34
  isToken(tokenOut, "BERA")
34
- );
35
+ ) {
36
+ return null;
37
+ }
38
+
39
+ return `${this.name} only redeems BGT → BERA on the same chain.`;
35
40
  }
36
41
  // handles native swaps: wrap and unwrap
37
42
  async getQuote({
@@ -121,6 +121,7 @@ class EnsoAggregator extends BaseAggregator {
121
121
  },
122
122
  ],
123
123
  functionName: "swap",
124
+ extraTags: { aggregator: this.name },
124
125
  abi: aggregatorsRouterAbi,
125
126
  // send full amount to router first, which will deduct the swap fee before executing trade
126
127
  value: isTokenInNative ? BigInt(amount) : BigInt("0"),
@@ -13,6 +13,7 @@ import { BaseAggregator } from "../base";
13
13
  class EnsoErc4626Aggregator extends BaseAggregator {
14
14
  name = Aggregators.EnsoErc4626;
15
15
  supportedChains = null;
16
+ supportsBridging = true;
16
17
  readonly type = "rest";
17
18
  needsAccountForQuote = true;
18
19
 
@@ -53,6 +54,11 @@ class EnsoErc4626Aggregator extends BaseAggregator {
53
54
  */
54
55
  const zapTokenOut = underlyingToken ?? tokenOut;
55
56
 
57
+ // Single source of truth for whether this route bridges: the route action
58
+ // gets a `destinationChainId` (LayerZero) exactly when this is true, and it
59
+ // is stamped onto the returned quote so consumers stop re-deriving it.
60
+ const isCrossChain = tokenIn.chainId !== zapTokenOut.chainId;
61
+
56
62
  const bundleActions: BundleAction[] = [
57
63
  // this is the base route action, which will swap the token in to the zap token out
58
64
  // it handles cross-chain swaps and refunds the user if the swap fails
@@ -63,14 +69,15 @@ class EnsoErc4626Aggregator extends BaseAggregator {
63
69
  args: {
64
70
  tokenIn: tokenIn.address,
65
71
  tokenOut: zapTokenOut.address,
66
- destinationChainId:
67
- // must be undefined if the token is the same chain
68
- tokenIn.chainId === zapTokenOut.chainId
69
- ? undefined
70
- : zapTokenOut.chainId,
72
+ // must be undefined if the token is the same chain
73
+ destinationChainId: isCrossChain ? zapTokenOut.chainId : undefined,
71
74
  refundReceiver: account,
75
+ receiver: account,
72
76
  amountIn: amount,
73
77
  slippage: slippage * 100, // Enso expects slippage in basis points
78
+ // We can't track CCIP delivery status (no poller in crossChainBridge),
79
+ // so keep Enso from routing cross-chain zaps through it.
80
+ ignoreBridges: isCrossChain ? ["ccip"] : undefined,
74
81
  },
75
82
  },
76
83
  ];
@@ -143,14 +150,21 @@ class EnsoErc4626Aggregator extends BaseAggregator {
143
150
  bundleActions,
144
151
  );
145
152
 
153
+ // Enso picks the bridge per-route (relay/stargate/ccip); it reports the
154
+ // choice on the route hop whose action is "bridge". The tracker needs this
155
+ // to know which explorer + status API to hit.
156
+ const bridgeProtocol = bundle.route?.find(
157
+ (hop) => hop.action === "bridge",
158
+ )?.protocol;
159
+
146
160
  const tokenOutAddress = (rewardVault?.toLowerCase() ??
147
161
  tokenOut.address.toLowerCase()) as Address;
148
162
 
149
- const amountOut =
150
- // @ts-expect-error enso has not typed this but is returned sometimes from API.
163
+ const amountOut = String(
151
164
  bundle.minAmountsOut?.[tokenOutAddress] ??
152
- bundle.amountsOut[tokenOutAddress] ??
153
- "0";
165
+ bundle.amountsOut?.[tokenOutAddress] ??
166
+ "0",
167
+ );
154
168
 
155
169
  return {
156
170
  amountOut,
@@ -162,6 +176,9 @@ class EnsoErc4626Aggregator extends BaseAggregator {
162
176
  }),
163
177
  name: this.name,
164
178
  swapFeeBps: 0,
179
+ isCrossChain,
180
+ srcChainId: tokenIn.chainId,
181
+ bridgeProtocol,
165
182
  priceImpactPercentage: bundle.priceImpact
166
183
  ? bundle.priceImpact / 100
167
184
  : null,
@@ -169,6 +186,7 @@ class EnsoErc4626Aggregator extends BaseAggregator {
169
186
  address: bundle.tx.to,
170
187
  data: bundle.tx.data as Hex,
171
188
  value: BigInt(bundle.tx.value ?? 0),
189
+ extraTags: { aggregator: this.name },
172
190
  // not returning gas limit because it's usually underestimated by enso.
173
191
  // gasLimit: BigInt(bundle.gas),
174
192
  }),
@@ -30,7 +30,7 @@ class ERC4626Aggregator extends BaseAggregator {
30
30
  * Returns true when tokenOut is an ERC4626 vault whose underlying asset matches tokenIn,
31
31
  * or when depositing native BERA into swBERA.
32
32
  */
33
- checkChainSupport({
33
+ getUnsupportedReason({
34
34
  tokenIn,
35
35
  tokenOut,
36
36
  underlyingToken,
@@ -38,16 +38,28 @@ class ERC4626Aggregator extends BaseAggregator {
38
38
  tokenIn: Token;
39
39
  tokenOut: Token;
40
40
  underlyingToken?: Token;
41
- }): boolean {
42
- const result =
43
- super.checkChainSupport({ tokenIn, tokenOut, underlyingToken }) &&
41
+ }): string | null {
42
+ const base = super.getUnsupportedReason({
43
+ tokenIn,
44
+ tokenOut,
45
+ underlyingToken,
46
+ });
47
+ if (base !== null) {
48
+ return base;
49
+ }
50
+
51
+ const isVaultDeposit =
44
52
  !!underlyingToken &&
45
53
  underlyingToken?.chainId === tokenOut.chainId &&
46
54
  (isToken(underlyingToken, tokenIn) ||
47
55
  // this is a special case for the swbera vault
48
56
  (isToken(tokenIn, "BERA") && isToken(tokenOut, "SWBERA")));
49
57
 
50
- return result;
58
+ if (isVaultDeposit) {
59
+ return null;
60
+ }
61
+
62
+ return `${this.name} only deposits a token into its matching ERC4626 vault.`;
51
63
  }
52
64
 
53
65
  /**
@@ -105,6 +117,7 @@ class ERC4626Aggregator extends BaseAggregator {
105
117
  functionName: "depositNative",
106
118
  params: [BigInt(amount), account],
107
119
  value: BigInt(amount),
120
+ extraTags: { aggregator: this.name },
108
121
  } satisfies Omit<
109
122
  IContractWrite<typeof stakeBeraVaultAbi, "depositNative">,
110
123
  "message" | "actionType"
@@ -116,6 +129,7 @@ class ERC4626Aggregator extends BaseAggregator {
116
129
  contractName: ContractName.ERC4626,
117
130
  params: [BigInt(amount), account],
118
131
  value: 0n,
132
+ extraTags: { aggregator: this.name },
119
133
  } satisfies Omit<
120
134
  IContractWrite<typeof erc4626Abi, "deposit">,
121
135
  "message" | "actionType"
@@ -131,6 +131,7 @@ class FlyAggregator extends BaseAggregator {
131
131
  },
132
132
  ],
133
133
  functionName: "swap",
134
+ extraTags: { aggregator: this.name },
134
135
  abi: aggregatorsRouterAbi,
135
136
  // send full amount to router first, which will deduct the swap fee before executing trade
136
137
  value: isToken(tokenIn, "BERA") ? BigInt(amount) : BigInt("0"),
@@ -1,4 +1,4 @@
1
- import { formatUnits, parseUnits, zeroAddress } from "viem";
1
+ import { type Address, formatUnits, parseUnits, zeroAddress } from "viem";
2
2
 
3
3
  import { ChainId } from "@berachain/config/internal";
4
4
 
@@ -6,7 +6,11 @@ import aggregatorsRouterAbi from "@berachain/abis/meta-aggregator/metaAggregator
6
6
 
7
7
  import { Aggregators, SwapReferrer } from "../../../enum/dex";
8
8
  import { BeraError } from "../../../errors/BeraError";
9
- import type { IAggregatorArgs, IRawAggregatorQuote } from "../../../types/dex";
9
+ import type {
10
+ IAggregatorArgs,
11
+ IRawAggregatorQuote,
12
+ Token,
13
+ } from "../../../types/dex";
10
14
  import type { IContractWrite } from "../../../types/global";
11
15
  import { BaseAggregator } from "./base";
12
16
 
@@ -21,6 +25,32 @@ class HaikuAggregator extends BaseAggregator {
21
25
  "No route found for the given input or the liquidity is not enough",
22
26
  "Invalid input amount. Please ensure the total amount of input is greater than 0.001 USD",
23
27
  ];
28
+
29
+ getUnsupportedReason({
30
+ tokenIn,
31
+ tokenOut,
32
+ rewardVault,
33
+ }: {
34
+ tokenIn: Token;
35
+ tokenOut: Token;
36
+ rewardVault?: Address;
37
+ }): string | null {
38
+ const base = super.getUnsupportedReason({ tokenIn, tokenOut });
39
+ if (base !== null) {
40
+ return base;
41
+ }
42
+
43
+ // Reward-vault staking zaps go through the restricted `zap-haiku` proxy key,
44
+ // which rejects quotes with a 400 (HUB-9FN/HUB-9FR). That's expected — Haiku
45
+ // isn't provisioned for zaps — so opt out up-front here so the quote hook is
46
+ // never called and no doomed request fires (and no Sentry error).
47
+ if (rewardVault) {
48
+ return `${this.name} does not support reward-vault staking.`;
49
+ }
50
+
51
+ return null;
52
+ }
53
+
24
54
  async getQuote({
25
55
  tokenIn,
26
56
  tokenOut,
@@ -158,6 +188,7 @@ class HaikuAggregator extends BaseAggregator {
158
188
  },
159
189
  ],
160
190
  functionName: "swap",
191
+ extraTags: { aggregator: this.name },
161
192
  abi: aggregatorsRouterAbi,
162
193
  // send full amount to router first, which will deduct the swap fee before executing trade
163
194
  value: isTokenInNative ? BigInt(amount) : BigInt("0"),
@@ -69,7 +69,7 @@ export class HoneyNativeAggregator extends BaseAggregator {
69
69
  );
70
70
  }
71
71
 
72
- checkChainSupport({
72
+ getUnsupportedReason({
73
73
  tokenIn,
74
74
  tokenOut,
75
75
  honeyNativeState,
@@ -77,16 +77,24 @@ export class HoneyNativeAggregator extends BaseAggregator {
77
77
  tokenIn: Token;
78
78
  tokenOut: Token;
79
79
  honeyNativeState?: Pick<HoneyConfigContextReturn, "collateralList">;
80
- }): boolean {
81
- return (
82
- super.checkChainSupport({ tokenIn, tokenOut }) &&
80
+ }): string | null {
81
+ const base = super.getUnsupportedReason({ tokenIn, tokenOut });
82
+ if (base !== null) {
83
+ return base;
84
+ }
85
+
86
+ if (
83
87
  tokenIn.chainId === tokenOut.chainId &&
84
88
  this.isHoneyNativeSwap({
85
89
  tokenIn: tokenIn.address,
86
90
  tokenOut: tokenOut.address,
87
91
  honeyNativeState,
88
92
  })
89
- );
93
+ ) {
94
+ return null;
95
+ }
96
+
97
+ return `${this.name} only mints/redeems HONEY against a listed collateral.`;
90
98
  }
91
99
 
92
100
  async getQuote({
@@ -108,7 +116,10 @@ export class HoneyNativeAggregator extends BaseAggregator {
108
116
  }
109
117
  assertPublicClient(publicClient);
110
118
 
111
- this.assertChainSupport({ tokenIn, tokenOut });
119
+ // Pass `honeyNativeState` through — Honey's `getUnsupportedReason` override
120
+ // needs it to confirm this is a valid mint/redeem. Without it the assert
121
+ // always fails with a misleading "chain ID: X and X" error (HUB-9FM).
122
+ this.assertChainSupport({ tokenIn, tokenOut, honeyNativeState });
112
123
 
113
124
  const isMint = isToken(tokenOut, this.honeyToken);
114
125
 
@@ -127,6 +127,7 @@ class KyberSwapAggregator extends BaseAggregator {
127
127
  },
128
128
  ],
129
129
  functionName: "swap",
130
+ extraTags: { aggregator: this.name },
130
131
  abi: aggregatorsRouterAbi,
131
132
  // send full amount to router first, which will deduct the swap fee before executing trade
132
133
  value: isTokenInNative ? BigInt(amount) : BigInt("0"),
@@ -100,6 +100,7 @@ class OogaboogaAggregator extends BaseAggregator {
100
100
  },
101
101
  ],
102
102
  functionName: "swap",
103
+ extraTags: { aggregator: this.name },
103
104
  abi: aggregatorsRouterAbi,
104
105
  // send full amount to router first, which will deduct the swap fee before executing trade
105
106
  value: isTokenInNative ? BigInt(amount) : BigInt("0"),
@@ -136,6 +136,7 @@ class OpenOceanAggregator extends BaseAggregator {
136
136
  },
137
137
  ],
138
138
  functionName: "swap",
139
+ extraTags: { aggregator: this.name },
139
140
  abi: aggregatorsRouterAbi,
140
141
  // send full amount to router first, which will deduct the swap fee before executing trade
141
142
  value: isTokenInNative ? BigInt(amount) : BigInt("0"),
@@ -16,27 +16,31 @@ class WBeraAggregator extends BaseAggregator {
16
16
  name = Aggregators.Wrap;
17
17
  supportedChains = [ChainId.MAINNET, ChainId.BEPOLIA];
18
18
  readonly type = "rpc";
19
+ // This aggregator's entire job is BERA↔WBERA, so keep the base same-token
20
+ // (native-normalized) guard from rejecting it.
21
+ supportsBeraWrap = true;
19
22
 
20
- checkChainSupport({
23
+ getUnsupportedReason({
21
24
  tokenIn,
22
25
  tokenOut,
23
26
  }: {
24
27
  tokenIn: Token;
25
28
  tokenOut: Token;
26
- }): boolean {
29
+ }): string | null {
30
+ const base = super.getUnsupportedReason({ tokenIn, tokenOut });
31
+ if (base !== null) {
32
+ return base;
33
+ }
34
+
27
35
  if (
28
- // same chain
29
- tokenIn.chainId !== tokenOut.chainId ||
30
- // must be one of our chains
31
- !super.checkChainSupport({ tokenIn, tokenOut })
36
+ tokenIn.chainId === tokenOut.chainId &&
37
+ ((isToken(tokenIn, "BERA") && isToken(tokenOut, "WBERA")) ||
38
+ (isToken(tokenIn, "WBERA") && isToken(tokenOut, "BERA")))
32
39
  ) {
33
- return false;
40
+ return null;
34
41
  }
35
42
 
36
- return (
37
- (isToken(tokenIn, "BERA") && isToken(tokenOut, "WBERA")) ||
38
- (isToken(tokenIn, "WBERA") && isToken(tokenOut, "BERA"))
39
- );
43
+ return `${this.name} only wraps/unwraps between BERA and WBERA on the same chain.`;
40
44
  }
41
45
 
42
46
  // handles native swaps: wrap and unwrap
@@ -67,6 +71,7 @@ class WBeraAggregator extends BaseAggregator {
67
71
  functionName: "deposit",
68
72
  params: [],
69
73
  value: BigInt(amount),
74
+ extraTags: { aggregator: this.name },
70
75
  } satisfies Omit<
71
76
  IContractWrite<typeof wberaAbi, "deposit">,
72
77
  "message" | "actionType"
@@ -77,6 +82,7 @@ class WBeraAggregator extends BaseAggregator {
77
82
  functionName: "withdraw",
78
83
  params: [BigInt(amount)],
79
84
  value: BigInt(0),
85
+ extraTags: { aggregator: this.name },
80
86
  } satisfies Omit<
81
87
  IContractWrite<typeof wberaAbi, "withdraw">,
82
88
  "message" | "actionType"
@@ -228,7 +228,7 @@ export async function getBendMultiplyBundle({
228
228
 
229
229
  // -- Callback action indices for `useOutputOfCallAt` references.
230
230
  // These MUST match the array position of each action in the callback below.
231
- const CALLBACK_IDX_ROUTE_LOAN_TO_COLLATERAL = 0;
231
+ // Index 0 is the route-loan-to-collateral action (not referenced by index).
232
232
  const CALLBACK_IDX_BALANCE_COLLATERAL = 1;
233
233
 
234
234
  const depositOnlyActions = [
@@ -52,22 +52,18 @@ export async function getEnsoUserTokensWithBalances({
52
52
  const tokens: BalanceToken[] = ensoBalances.map(
53
53
  (balance) =>
54
54
  ({
55
- name: balance.name,
56
- symbol: balance.symbol,
55
+ name: balance.name ?? "",
56
+ symbol: balance.symbol ?? "",
57
57
  decimals: balance.decimals,
58
58
  address: isToken(balance.token, "ETH")
59
59
  ? beraToken.address
60
60
  : balance.token,
61
- logoURI: balance.logoUri,
61
+ logoURI: balance.logoUri ?? undefined,
62
62
  balance: {
63
63
  raw: balance.amount.toString(),
64
64
  formatted: formatUnits(BigInt(balance.amount), balance.decimals),
65
65
  },
66
-
67
- chainId: Number(
68
- // @ts-expect-error - balance.chainId is defined just not typed by enso
69
- balance.chainId,
70
- ),
66
+ chainId: balance.chainId,
71
67
  price: Number(balance.price),
72
68
  }) as const satisfies BalanceToken,
73
69
  );