@berachain/berajs 0.2.5 → 0.2.6-patch.2

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 (440) hide show
  1. package/dist/abi/exports.cjs +1 -1
  2. package/dist/abi/exports.cjs.map +1 -1
  3. package/dist/abi/exports.d.cts +17 -1
  4. package/dist/abi/exports.d.ts +17 -1
  5. package/dist/abi/exports.mjs +1 -1
  6. package/dist/abi/exports.mjs.map +1 -1
  7. package/dist/actions/exports.cjs +1 -1
  8. package/dist/actions/exports.cjs.map +1 -1
  9. package/dist/actions/exports.d.cts +9 -38
  10. package/dist/actions/exports.d.ts +9 -38
  11. package/dist/actions/exports.mjs +1 -1
  12. package/dist/actions/exports.mjs.map +1 -1
  13. package/dist/chunk-2YBHAMDV.cjs +2 -0
  14. package/dist/chunk-2YBHAMDV.cjs.map +1 -0
  15. package/dist/{chunk-7SMWQ6SN.mjs → chunk-3ZTAIOHH.mjs} +2 -2
  16. package/dist/chunk-3ZTAIOHH.mjs.map +1 -0
  17. package/dist/chunk-57RINXU6.cjs +2 -0
  18. package/dist/chunk-57RINXU6.cjs.map +1 -0
  19. package/dist/{chunk-AX2YQQFQ.mjs → chunk-74QD4JAH.mjs} +2 -2
  20. package/dist/chunk-74QD4JAH.mjs.map +1 -0
  21. package/dist/chunk-74WA35RI.cjs +2 -0
  22. package/dist/chunk-74WA35RI.cjs.map +1 -0
  23. package/dist/{chunk-7WRTK7RJ.mjs → chunk-BEKH5EYT.mjs} +2 -2
  24. package/dist/chunk-BEKH5EYT.mjs.map +1 -0
  25. package/dist/chunk-DDEQFR3M.cjs +2 -0
  26. package/dist/chunk-DDEQFR3M.cjs.map +1 -0
  27. package/dist/{chunk-6LDOG5RL.cjs → chunk-DK42F2ZM.cjs} +2 -2
  28. package/dist/chunk-DK42F2ZM.cjs.map +1 -0
  29. package/dist/chunk-I4V54RRZ.cjs +4 -0
  30. package/dist/chunk-I4V54RRZ.cjs.map +1 -0
  31. package/dist/chunk-I7M43BB4.cjs +2 -0
  32. package/dist/chunk-I7M43BB4.cjs.map +1 -0
  33. package/dist/chunk-IDFMLLDY.mjs +2 -0
  34. package/dist/chunk-IDFMLLDY.mjs.map +1 -0
  35. package/dist/chunk-KRVNPZLF.mjs +2 -0
  36. package/dist/chunk-KRVNPZLF.mjs.map +1 -0
  37. package/dist/{chunk-3YXSUBA5.mjs → chunk-MJZHJFZO.mjs} +2 -2
  38. package/dist/chunk-MK5NS5B5.mjs +2 -0
  39. package/dist/chunk-MK5NS5B5.mjs.map +1 -0
  40. package/dist/{chunk-C6ZGUO4H.cjs → chunk-NMH7LHPW.cjs} +2 -2
  41. package/dist/chunk-NMH7LHPW.cjs.map +1 -0
  42. package/dist/{chunk-PKXAW6MO.cjs → chunk-NVHV2LDK.cjs} +2 -2
  43. package/dist/chunk-NVHV2LDK.cjs.map +1 -0
  44. package/dist/{chunk-FCWDGE62.cjs → chunk-NVOJIQUM.cjs} +2 -2
  45. package/dist/chunk-NVOJIQUM.cjs.map +1 -0
  46. package/dist/chunk-OGBD5YOG.mjs +2 -0
  47. package/dist/chunk-OGBD5YOG.mjs.map +1 -0
  48. package/dist/chunk-OIYXOKTT.cjs.map +1 -1
  49. package/dist/chunk-OUD27MU7.cjs.map +1 -1
  50. package/dist/{chunk-ECRMUMTA.mjs → chunk-PLIH6KQM.mjs} +2 -2
  51. package/dist/chunk-PLIH6KQM.mjs.map +1 -0
  52. package/dist/chunk-QRAIGQF2.mjs +2 -0
  53. package/dist/chunk-QRAIGQF2.mjs.map +1 -0
  54. package/dist/{chunk-YZV5LKIP.cjs → chunk-QXNF3YT7.cjs} +2 -2
  55. package/dist/chunk-QXNF3YT7.cjs.map +1 -0
  56. package/dist/chunk-RWOICHRW.cjs +2 -0
  57. package/dist/chunk-RWOICHRW.cjs.map +1 -0
  58. package/dist/chunk-T5FSQ3YE.mjs +2 -0
  59. package/dist/chunk-T5FSQ3YE.mjs.map +1 -0
  60. package/dist/chunk-WIN4PK2Z.mjs +4 -0
  61. package/dist/chunk-WIN4PK2Z.mjs.map +1 -0
  62. package/dist/chunk-WRFDB3QJ.cjs.map +1 -1
  63. package/dist/chunk-XNJLSA6P.cjs.map +1 -1
  64. package/dist/contexts/exports.cjs +1 -1
  65. package/dist/contexts/exports.cjs.map +1 -1
  66. package/dist/contexts/exports.d.cts +1 -1
  67. package/dist/contexts/exports.d.ts +1 -1
  68. package/dist/contexts/exports.mjs +1 -1
  69. package/dist/contexts/exports.mjs.map +1 -1
  70. package/dist/{defaultFlags-d0kPbT0i.d.cts → defaultFlags-D6KfkTZx.d.cts} +1 -1
  71. package/dist/{defaultFlags-d0kPbT0i.d.ts → defaultFlags-D6KfkTZx.d.ts} +1 -1
  72. package/dist/enum/exports.cjs +1 -1
  73. package/dist/enum/exports.cjs.map +1 -1
  74. package/dist/enum/exports.d.cts +1 -1
  75. package/dist/enum/exports.d.ts +1 -1
  76. package/dist/enum/exports.mjs +1 -1
  77. package/dist/errors/exports.cjs +1 -1
  78. package/dist/errors/exports.cjs.map +1 -1
  79. package/dist/errors/exports.d.cts +8 -3
  80. package/dist/errors/exports.d.ts +8 -3
  81. package/dist/errors/exports.mjs +1 -1
  82. package/dist/{getValidatorQueuedOperatorAddress-DZgrPmZ2.d.cts → getValidatorQueuedOperatorAddress-BdDYHycN.d.cts} +15 -4
  83. package/dist/{getValidatorQueuedOperatorAddress-CqR6cyqC.d.ts → getValidatorQueuedOperatorAddress-CmiPJmsr.d.ts} +15 -4
  84. package/dist/{global.d-BeYWDreg.d.ts → global.d-3GQMgC9k.d.ts} +1 -1
  85. package/dist/{global.d-DghRxpHd.d.cts → global.d-CwT1Phzf.d.cts} +1 -1
  86. package/dist/hooks/exports.cjs +3 -3
  87. package/dist/hooks/exports.cjs.map +1 -1
  88. package/dist/hooks/exports.d.cts +54 -75
  89. package/dist/hooks/exports.d.ts +54 -75
  90. package/dist/hooks/exports.mjs +3 -3
  91. package/dist/hooks/exports.mjs.map +1 -1
  92. package/dist/{txnEnum-DxPRHSJt.d.cts → txnEnum-CCuQUFlh.d.cts} +7 -0
  93. package/dist/{txnEnum-DxPRHSJt.d.ts → txnEnum-CCuQUFlh.d.ts} +7 -0
  94. package/dist/types/exports.cjs.map +1 -1
  95. package/dist/types/exports.d.cts +37 -4
  96. package/dist/types/exports.d.ts +37 -4
  97. package/dist/utils/exports.cjs +1 -1
  98. package/dist/utils/exports.cjs.map +1 -1
  99. package/dist/utils/exports.d.cts +2 -2
  100. package/dist/utils/exports.d.ts +2 -2
  101. package/dist/utils/exports.mjs +1 -1
  102. package/dist/utils/exports.mjs.map +1 -1
  103. package/package.json +6 -7
  104. package/src/abi/enso/ensoWalletV2Factory.ts +9 -0
  105. package/src/abi/exports.ts +1 -0
  106. package/src/actions/clients/BeraApolloClient.ts +3 -3
  107. package/src/actions/clients/getApolloClient.ts +5 -5
  108. package/src/actions/clients/getEnsoClient.ts +1 -1
  109. package/src/actions/dex/__tests__/aggregators.unit.test.ts +3 -3
  110. package/src/actions/dex/__tests__/getOnChainPool.unit.test.ts +1 -1
  111. package/src/actions/dex/aggregators/base.ts +12 -8
  112. package/src/actions/dex/aggregators/bex.ts +8 -8
  113. package/src/actions/dex/aggregators/bgt.ts +4 -4
  114. package/src/actions/dex/aggregators/enso/enso.ts +28 -20
  115. package/src/actions/dex/aggregators/enso/ensoErc4626.debug.test.ts +1 -1
  116. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +7 -4
  117. package/src/actions/dex/aggregators/erc4626.ts +10 -6
  118. package/src/actions/dex/aggregators/fly.ts +9 -5
  119. package/src/actions/dex/aggregators/haiku.integration.test.ts +3 -3
  120. package/src/actions/dex/aggregators/haiku.ts +9 -5
  121. package/src/actions/dex/aggregators/honey.ts +15 -15
  122. package/src/actions/dex/aggregators/kyberswap.ts +8 -4
  123. package/src/actions/dex/aggregators/oogabooga.ts +8 -4
  124. package/src/actions/dex/aggregators/openOcean.ts +12 -8
  125. package/src/actions/dex/aggregators/wbera.ts +8 -4
  126. package/src/actions/dex/b-sdk.ts +2 -2
  127. package/src/actions/dex/getAllPools.ts +2 -2
  128. package/src/actions/dex/getApiPool.ts +2 -2
  129. package/src/actions/dex/getGlobalLiquidityAndSwapVolume.ts +2 -2
  130. package/src/actions/dex/getIsTokenExploited.ts +1 -1
  131. package/src/actions/dex/getOnChainPool.ts +3 -3
  132. package/src/actions/dex/getPoolEvents.ts +2 -2
  133. package/src/actions/dex/getPoolHistoricalData.ts +2 -2
  134. package/src/actions/dex/getVaultPausedState.ts +1 -1
  135. package/src/actions/enso/__tests__/getBendDemultiplyBundle.action.unit.test.ts +175 -0
  136. package/src/actions/enso/__tests__/getBendDemultiplyBundle.unit.test.ts +150 -0
  137. package/src/actions/enso/__tests__/getBendMultiplyBundle.action.unit.test.ts +138 -0
  138. package/src/actions/enso/__tests__/getBendMultiplyBundle.unit.test.ts +194 -0
  139. package/src/actions/enso/{getEnsoUserTokensWithBalances.debug.test.ts → __tests__/getEnsoUserTokensWithBalances.debug.test.ts} +3 -3
  140. package/src/actions/enso/__tests__/helpers.ts +42 -0
  141. package/src/actions/enso/__tests__/util.unit.test.ts +95 -0
  142. package/src/actions/enso/flashloan.ts +127 -0
  143. package/src/actions/enso/getBendDemultiplyBundle.ts +325 -0
  144. package/src/actions/enso/getBendMultiplyBundle.ts +348 -0
  145. package/src/actions/enso/getEnsoSwapBundle.ts +2 -2
  146. package/src/actions/enso/getEnsoUserTokensWithBalances.ts +5 -5
  147. package/src/actions/enso/util.ts +150 -5
  148. package/src/actions/exports.ts +0 -2
  149. package/src/actions/governance/__tests__/checkProposalField.unit.test.ts +2 -2
  150. package/src/actions/governance/__tests__/getDecodedFunctionData.integration.test.ts +2 -2
  151. package/src/actions/governance/__tests__/getQuorum.integration.test.ts +2 -2
  152. package/src/actions/governance/checkProposalField.ts +1 -1
  153. package/src/actions/governance/computeActualStatus.ts +1 -1
  154. package/src/actions/governance/getAllProposals.ts +1 -1
  155. package/src/actions/governance/getBodyErrors.ts +1 -1
  156. package/src/actions/governance/getProposalDetails.ts +1 -1
  157. package/src/actions/governance/getProposalFromTx.ts +1 -1
  158. package/src/actions/governance/getProposalParams.ts +3 -3
  159. package/src/actions/governance/getProposalVotes.ts +1 -1
  160. package/src/actions/governance/getQuorum.ts +2 -2
  161. package/src/actions/honey/getCollateralWeights.ts +2 -2
  162. package/src/actions/honey/getGlobalCapLimit.ts +4 -4
  163. package/src/actions/honey/getHoneyCollaterals.ts +5 -5
  164. package/src/actions/honey/getHoneyFees.ts +1 -1
  165. package/src/actions/honey/getHoneyPausedState.ts +1 -1
  166. package/src/actions/honey/getHoneyPreview.ts +3 -3
  167. package/src/actions/honey/getHoneyRootPriceOracle.ts +1 -1
  168. package/src/actions/honey/getHoneyVaultsBalance.ts +2 -2
  169. package/src/actions/honey/getRelativeCapLimit.ts +3 -3
  170. package/src/actions/honey/getSharesWithoutFees.ts +1 -1
  171. package/src/actions/honey/getSwapPayload.ts +6 -6
  172. package/src/actions/honey/isBadCollateralAsset.ts +2 -2
  173. package/src/actions/honey/isBasketModeEnabled.ts +2 -2
  174. package/src/actions/honey/tests/pyth.integration.test.ts +3 -3
  175. package/src/actions/misc/getBlockTimestamp.ts +2 -2
  176. package/src/actions/pol/__tests__/getAllValidators.integration.test.ts +2 -2
  177. package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +1 -1
  178. package/src/actions/pol/getBGTGlobalInfo.ts +2 -2
  179. package/src/actions/pol/getBgtAprSimulation.ts +1 -1
  180. package/src/actions/pol/getBgtAprSimultaion.unit.test.ts +1 -1
  181. package/src/actions/pol/getBgtTokenTotalBoosts.ts +2 -2
  182. package/src/actions/pol/getBgtTokenTotalSupply.ts +2 -2
  183. package/src/actions/pol/getBlockTime.debug.test.ts +13 -0
  184. package/src/actions/pol/getBlockTime.ts +14 -23
  185. package/src/actions/pol/getEarnedStakedBeraVault.ts +3 -3
  186. package/src/actions/pol/getGlobalData.ts +2 -2
  187. package/src/actions/pol/getIncentiveFeeClaimStats.ts +4 -4
  188. package/src/actions/pol/getLSTStakeConfig.ts +5 -5
  189. package/src/actions/pol/getMarkets.ts +2 -2
  190. package/src/actions/pol/getRewardProofsByValidator.ts +4 -4
  191. package/src/actions/pol/getRewardTokenToBeraRate.ts +1 -1
  192. package/src/actions/pol/getRewardVault.ts +3 -3
  193. package/src/actions/pol/getRewardVaultBeaconImplementation.integration.test.ts +1 -1
  194. package/src/actions/pol/getRewardVaultBeaconImplementation.ts +3 -3
  195. package/src/actions/pol/getRewardVaultDurationConstants.integration.test.ts +1 -1
  196. package/src/actions/pol/getRewardVaultDurationConstants.ts +1 -1
  197. package/src/actions/pol/getRewardVaultFromToken.ts +1 -1
  198. package/src/actions/pol/getRewardVaultIncentives.ts +2 -2
  199. package/src/actions/pol/getRewardVaultRewards.ts +1 -1
  200. package/src/actions/pol/getRewardVaults.ts +1 -1
  201. package/src/actions/pol/getSWBeraVaultMetadata.ts +20 -22
  202. package/src/actions/pol/getSWBeraWithdrawal.ts +4 -4
  203. package/src/actions/pol/getStakedBeraAPR.ts +2 -2
  204. package/src/actions/pol/getStakedBeraSnapshots.ts +2 -2
  205. package/src/actions/pol/getStakingDailyAssets.ts +3 -3
  206. package/src/actions/pol/getStakingTokenInformation.ts +2 -2
  207. package/src/actions/pol/getTotalStakedAmount.ts +1 -1
  208. package/src/actions/pol/getUserClaimableIncentives.ts +4 -4
  209. package/src/actions/pol/getUserVaultInfo.ts +1 -1
  210. package/src/actions/pol/getUserVaults.ts +4 -4
  211. package/src/actions/pol/getUserVaultsBalance.ts +1 -1
  212. package/src/actions/pol/getVaultHistory.ts +2 -2
  213. package/src/actions/pol/getVaultValidators.ts +1 -1
  214. package/src/actions/prices/__tests__/prices.integration.test.ts +2 -2
  215. package/src/actions/prices/getTokenCurrentPrices.ts +5 -5
  216. package/src/actions/pyth/getHoneyPythFeeds.ts +2 -2
  217. package/src/actions/pyth/getUpdateFee.ts +2 -2
  218. package/src/actions/tokens/getAllowances.ts +2 -2
  219. package/src/actions/tokens/getTokenInformation.ts +2 -2
  220. package/src/actions/tokens/getTokens.ts +3 -3
  221. package/src/actions/tokens/getUnderlyingToken.ts +4 -4
  222. package/src/actions/tokens/getWalletBalances.integration.test.ts +1 -1
  223. package/src/actions/tokens/getWalletBalances.ts +4 -4
  224. package/src/actions/transactions/beraWriteContract.integration.test.ts +6 -6
  225. package/src/actions/transactions/beraWriteContract.ts +12 -12
  226. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.integration.test.ts +1 -1
  227. package/src/actions/validators/getActiveBoostAndCommissionChangeDelay.ts +1 -1
  228. package/src/actions/validators/getAllValidators.ts +2 -2
  229. package/src/actions/validators/getApiValidator.ts +2 -2
  230. package/src/actions/validators/getBaselineRewardAllocation.ts +1 -1
  231. package/src/actions/validators/getDailyValidatorBlockStats.ts +1 -1
  232. package/src/actions/validators/getDefaultRewardAllocation.ts +1 -1
  233. package/src/actions/validators/getUserActiveValidators.ts +31 -33
  234. package/src/actions/validators/getUserBoosts.ts +12 -8
  235. package/src/actions/validators/getUserBoostsOnValidator.ts +15 -3
  236. package/src/actions/validators/getUserStakingPositions.ts +1 -1
  237. package/src/actions/validators/getValidatorAnalytics.ts +2 -2
  238. package/src/actions/validators/getValidatorCommission.ts +1 -1
  239. package/src/actions/validators/getValidatorEstimatedBgtPerYear.ts +1 -1
  240. package/src/actions/validators/getValidatorOperatorAddress.ts +1 -1
  241. package/src/actions/validators/getValidatorQueuedCommission.ts +1 -1
  242. package/src/actions/validators/getValidatorQueuedOperatorAddress.ts +1 -1
  243. package/src/actions/validators/getValidatorQueuedRewardAllocation.ts +1 -1
  244. package/src/actions/validators/getValidatorRewardAllocation.ts +1 -1
  245. package/src/actions/validators/getValidatorRewardAllocatorAddress.ts +1 -1
  246. package/src/actions/validators/utils/__tests__/validatorUtils.integration.test.ts +4 -4
  247. package/src/contexts/BeraFlags/defaultFlags.ts +4 -0
  248. package/src/contexts/BexStatusProvider.tsx +1 -1
  249. package/src/contexts/HoneyConfigProvider.tsx +3 -3
  250. package/src/contexts/SwrFallback.tsx +2 -2
  251. package/src/contexts/TokensProvider.tsx +3 -3
  252. package/src/contexts/block-time-provider.tsx +1 -1
  253. package/src/data/contracts.ts +10 -0
  254. package/src/enum/txnEnum.ts +9 -0
  255. package/src/errors/BeraMonitoring.ts +2 -2
  256. package/src/errors/BeraTracing.ts +2 -2
  257. package/src/errors/RequestError.ts +1 -1
  258. package/src/errors/assert.ts +18 -0
  259. package/src/errors/getRevertReason.integration.test.ts +7 -7
  260. package/src/errors/getRevertReason.ts +1 -1
  261. package/src/errors/parseViemError.ts +1 -1
  262. package/src/hooks/bend/useGetConvertToAssets.ts +4 -4
  263. package/src/hooks/dex/useAggregatorsQuotes.ts +19 -19
  264. package/src/hooks/dex/useAggregatorsRouterFeeBps.ts +2 -2
  265. package/src/hooks/dex/useAllUserPools.ts +3 -3
  266. package/src/hooks/dex/useApiPool.ts +3 -3
  267. package/src/hooks/dex/useBexStatus.ts +1 -1
  268. package/src/hooks/dex/useCreatePool.ts +9 -9
  269. package/src/hooks/dex/useExploitedTokens.ts +3 -3
  270. package/src/hooks/dex/useGlobalLiquidityAndSwapVolume.ts +1 -1
  271. package/src/hooks/dex/useLiquidityMismatch.ts +3 -3
  272. package/src/hooks/dex/useLpPosition.ts +7 -4
  273. package/src/hooks/dex/useMultipleTokenApprovalsWithSlippage.ts +4 -4
  274. package/src/hooks/dex/useOnChainPoolData.ts +3 -3
  275. package/src/hooks/dex/usePollPoolCreationRelayerApproval.ts +3 -3
  276. package/src/hooks/dex/usePool.ts +7 -40
  277. package/src/hooks/dex/usePoolEvents.ts +2 -2
  278. package/src/hooks/dex/usePoolHistoricalData.ts +6 -3
  279. package/src/hooks/dex/usePools.ts +3 -3
  280. package/src/hooks/dex/usePriceImpact.ts +2 -2
  281. package/src/hooks/dex/useSingleAggregatorQuote.ts +13 -13
  282. package/src/hooks/enso/useBendDemultiply.ts +158 -0
  283. package/src/hooks/enso/useBendMultiply.ts +163 -0
  284. package/src/hooks/enso/useBendZapSupply.ts +7 -7
  285. package/src/hooks/enso/useEnsoSwapBundle.ts +6 -6
  286. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +5 -5
  287. package/src/hooks/enso/useEnsoWalletV2Address.ts +38 -0
  288. package/src/hooks/enso/useIsBendAuthorized.ts +47 -0
  289. package/src/hooks/enso/useZapStakeBera.ts +4 -4
  290. package/src/hooks/exports.ts +4 -3
  291. package/src/hooks/governance/useCreateProposal.ts +3 -3
  292. package/src/hooks/governance/useGetPastVotes.ts +2 -2
  293. package/src/hooks/governance/useHasVoted.ts +2 -2
  294. package/src/hooks/governance/useIsCanceller.ts +4 -4
  295. package/src/hooks/governance/usePollAllProposals.ts +3 -3
  296. package/src/hooks/governance/usePollProposal.ts +7 -4
  297. package/src/hooks/governance/usePollProposalThreshold.ts +3 -3
  298. package/src/hooks/governance/usePollProposalVotes.ts +1 -1
  299. package/src/hooks/governance/usePollUserDelegates.ts +7 -4
  300. package/src/hooks/governance/useProposalFromTx.ts +1 -1
  301. package/src/hooks/governance/useProposalSnapshot.ts +2 -2
  302. package/src/hooks/governance/useProposalState.ts +2 -2
  303. package/src/hooks/governance/useProposalTimelockState.ts +2 -2
  304. package/src/hooks/governance/useQuorum.ts +1 -1
  305. package/src/hooks/honey/useCappedGlobally.ts +8 -5
  306. package/src/hooks/honey/useCappedRelatively.ts +7 -4
  307. package/src/hooks/honey/useCollateralWeights.ts +8 -5
  308. package/src/hooks/honey/useHoneyAlerts.ts +5 -5
  309. package/src/hooks/honey/useHoneyBalances.ts +7 -7
  310. package/src/hooks/honey/useHoneyChartData.ts +1 -1
  311. package/src/hooks/honey/useHoneySwapState.ts +4 -4
  312. package/src/hooks/honey/useHoneyVaultsBalance.ts +8 -5
  313. package/src/hooks/honey/useIsBadCollateralAsset.ts +9 -6
  314. package/src/hooks/honey/useIsBasketModeEnabled.ts +8 -5
  315. package/src/hooks/honey/usePythLatestPrices.ts +4 -4
  316. package/src/hooks/perps/usePythUpdateFee.ts +4 -4
  317. package/src/hooks/pol/useBgtAprSimulation.ts +1 -1
  318. package/src/hooks/pol/useBgtUnstakedBalance.ts +7 -4
  319. package/src/hooks/pol/useClaimableFees.ts +4 -4
  320. package/src/hooks/pol/useOnChainRewardVault.ts +7 -7
  321. package/src/hooks/pol/usePollGlobalData.ts +9 -3
  322. package/src/hooks/pol/usePollMarkets.ts +5 -2
  323. package/src/hooks/pol/useQueuedBeraUnlock.ts +4 -4
  324. package/src/hooks/pol/useRewardTokenToBeraRate.ts +4 -4
  325. package/src/hooks/pol/useRewardVault.ts +5 -2
  326. package/src/hooks/pol/useRewardVaultBalanceFromStakingToken.ts +2 -2
  327. package/src/hooks/pol/useRewardVaultFromToken.ts +2 -2
  328. package/src/hooks/pol/useRewardVaultIncentives.ts +2 -2
  329. package/src/hooks/pol/useRewardVaultRewards.ts +3 -3
  330. package/src/hooks/pol/useRewardVaults.ts +2 -2
  331. package/src/hooks/pol/useStakedAPR.ts +3 -3
  332. package/src/hooks/pol/useStakedData.ts +10 -10
  333. package/src/hooks/pol/useStakedSnapshots.ts +3 -3
  334. package/src/hooks/pol/useStakingVaultsMetadata.ts +40 -0
  335. package/src/hooks/pol/useTotalStakedAmount.ts +2 -2
  336. package/src/hooks/pol/useUserVaultInfo.ts +8 -5
  337. package/src/hooks/pol/useUserVaults.ts +7 -4
  338. package/src/hooks/pol/useVaultAddress.ts +2 -2
  339. package/src/hooks/pol/useVaultHistory.ts +2 -2
  340. package/src/hooks/pol/useVaultValidators.ts +5 -2
  341. package/src/hooks/tokens/useBeraCurrentPrice.ts +1 -1
  342. package/src/hooks/tokens/useMultipleTokenInformation.ts +7 -4
  343. package/src/hooks/tokens/usePollAllowances.ts +7 -4
  344. package/src/hooks/tokens/usePollBalance.ts +8 -5
  345. package/src/hooks/tokens/usePollWalletBalances.ts +8 -5
  346. package/src/hooks/tokens/useStakingTokenInformation.ts +7 -4
  347. package/src/hooks/tokens/useTokenCurrentPrice.ts +1 -1
  348. package/src/hooks/tokens/useTokenCurrentPrices.ts +6 -6
  349. package/src/hooks/tokens/useTokenInformation.ts +8 -5
  350. package/src/hooks/tokens/useTokenPrice.ts +1 -1
  351. package/src/hooks/tokens/useTokenPrices.ts +4 -4
  352. package/src/hooks/tokens/useTokens.ts +3 -3
  353. package/src/hooks/tokens/useTotalSupply.ts +1 -1
  354. package/src/hooks/tokens/useUnderlyingAsset.ts +3 -3
  355. package/src/hooks/useBlockToTimestamp.ts +5 -5
  356. package/src/hooks/useContractWrite/types.ts +2 -2
  357. package/src/hooks/useContractWrite/useBeraContractWrite.ts +5 -6
  358. package/src/hooks/useGetVerifiedAbi.ts +1 -1
  359. package/src/hooks/validators/useAllValidators.ts +7 -4
  360. package/src/hooks/validators/useApiEnrichedAllocation.ts +2 -2
  361. package/src/hooks/validators/useApiValidator.ts +5 -2
  362. package/src/hooks/validators/useBaselineRewardAllocation.ts +2 -2
  363. package/src/hooks/validators/useDailyValidatorBlockStats.ts +3 -3
  364. package/src/hooks/validators/useDefaultRewardAllocation.ts +4 -4
  365. package/src/hooks/validators/useManagedValidatorRole.ts +8 -5
  366. package/src/hooks/validators/useOnChainValidator.ts +6 -3
  367. package/src/hooks/validators/useStakingPoolBatch.ts +7 -4
  368. package/src/hooks/validators/useUserActiveValidators.ts +6 -3
  369. package/src/hooks/validators/useUserBoostsOnValidator.ts +3 -3
  370. package/src/hooks/validators/useUserClaimableIncentives.ts +9 -9
  371. package/src/hooks/validators/useUserStakingPositions.ts +1 -1
  372. package/src/hooks/validators/useValidator.ts +1 -1
  373. package/src/hooks/validators/useValidatorAnalytics.ts +3 -3
  374. package/src/hooks/validators/useValidatorCommission.ts +5 -2
  375. package/src/hooks/validators/useValidatorEstimatedBgtPerYear.ts +3 -3
  376. package/src/hooks/validators/useValidatorQueuedCommission.ts +6 -3
  377. package/src/hooks/validators/useValidatorQueuedOperatorAddress.ts +5 -2
  378. package/src/hooks/validators/useValidatorQueuedRewardAllocation.ts +6 -3
  379. package/src/hooks/validators/useValidatorRewardAllocation.ts +2 -2
  380. package/src/types/dex.d.ts +1 -1
  381. package/src/types/enso.d.ts +34 -0
  382. package/src/types/global.d.ts +3 -3
  383. package/src/types/governance.d.ts +1 -1
  384. package/src/types/honeySwap.d.ts +3 -3
  385. package/src/utils/beraFetch.ts +1 -1
  386. package/src/utils/createEmitter.ts +1 -1
  387. package/src/utils/formatIncentivesTokenMap.ts +1 -1
  388. package/src/utils/getContractName.ts +1 -1
  389. package/src/utils/getHoneySwapMessage.test.ts +1 -1
  390. package/src/utils/getHoneySwapMessage.ts +1 -1
  391. package/src/utils/parseBaseArgs.ts +1 -1
  392. package/src/utils/parseBaseArgs.unit.test.ts +1 -1
  393. package/src/utils/parseWhiskToken.ts +1 -1
  394. package/src/utils/poolNamings.ts +1 -1
  395. package/src/utils/tokens.ts +2 -2
  396. package/src/utils/tokens.unit.test.ts +1 -1
  397. package/.claude/skills/berajs/SKILL.md +0 -222
  398. package/.claude/skills/berajs/references/dex.md +0 -235
  399. package/.claude/skills/berajs/references/pol.md +0 -194
  400. package/.claude/skills/berajs/references/staking.md +0 -198
  401. package/.claude/skills/berajs/references/tokens.md +0 -170
  402. package/dist/chunk-22J3YJDN.cjs +0 -2
  403. package/dist/chunk-22J3YJDN.cjs.map +0 -1
  404. package/dist/chunk-2LL3P5PN.mjs +0 -2
  405. package/dist/chunk-2LL3P5PN.mjs.map +0 -1
  406. package/dist/chunk-55L7STYD.mjs +0 -2
  407. package/dist/chunk-55L7STYD.mjs.map +0 -1
  408. package/dist/chunk-6LDOG5RL.cjs.map +0 -1
  409. package/dist/chunk-7LNBSOVV.cjs +0 -2
  410. package/dist/chunk-7LNBSOVV.cjs.map +0 -1
  411. package/dist/chunk-7SMWQ6SN.mjs.map +0 -1
  412. package/dist/chunk-7WRTK7RJ.mjs.map +0 -1
  413. package/dist/chunk-AX2YQQFQ.mjs.map +0 -1
  414. package/dist/chunk-BKDBIBVO.mjs +0 -4
  415. package/dist/chunk-BKDBIBVO.mjs.map +0 -1
  416. package/dist/chunk-C3FHGFLK.mjs +0 -2
  417. package/dist/chunk-C3FHGFLK.mjs.map +0 -1
  418. package/dist/chunk-C6ZGUO4H.cjs.map +0 -1
  419. package/dist/chunk-ECRMUMTA.mjs.map +0 -1
  420. package/dist/chunk-FCWDGE62.cjs.map +0 -1
  421. package/dist/chunk-P2Q7CMUD.cjs +0 -2
  422. package/dist/chunk-P2Q7CMUD.cjs.map +0 -1
  423. package/dist/chunk-PKXAW6MO.cjs.map +0 -1
  424. package/dist/chunk-SWMJQOH6.cjs +0 -2
  425. package/dist/chunk-SWMJQOH6.cjs.map +0 -1
  426. package/dist/chunk-THATXCJK.mjs +0 -2
  427. package/dist/chunk-THATXCJK.mjs.map +0 -1
  428. package/dist/chunk-UXGB54NE.cjs +0 -4
  429. package/dist/chunk-UXGB54NE.cjs.map +0 -1
  430. package/dist/chunk-VXL2ZZ4X.cjs +0 -2
  431. package/dist/chunk-VXL2ZZ4X.cjs.map +0 -1
  432. package/dist/chunk-YXLFOEZN.mjs +0 -2
  433. package/dist/chunk-YXLFOEZN.mjs.map +0 -1
  434. package/dist/chunk-YZV5LKIP.cjs.map +0 -1
  435. package/src/actions/dex/getSubgraphPool.ts +0 -30
  436. package/src/actions/validators/getManagedValidatorByAccount.ts +0 -32
  437. package/src/hooks/pol/useSWBeraVaultMetadata.ts +0 -35
  438. package/src/hooks/validators/useManagedValidatorByAccount.ts +0 -40
  439. package/src/hooks/validators/useSubgraphUserValidators.ts +0 -36
  440. /package/dist/{chunk-3YXSUBA5.mjs.map → chunk-MJZHJFZO.mjs.map} +0 -0
@@ -1,198 +0,0 @@
1
- # BeraJS — Liquid Staking (swBERA) Reference
2
-
3
- swBERA is Berachain's native liquid staking token. Users stake BERA (or WBERA) to receive swBERA, which accrues staking yield. LST (Liquid Staking Token) vaults follow the same pattern but for third-party protocols.
4
-
5
- ## APR
6
-
7
- ### `getStakedBeraAPR`
8
-
9
- Server-side action. Returns the current APR as a plain `number` (e.g. `0.12` = 12%).
10
-
11
- ```ts
12
- import { getStakedBeraAPR } from "@berachain/berajs/actions";
13
-
14
- const apr = await getStakedBeraAPR({ window: "DAY" });
15
- // or window: "WEEK" for 7-day annualised APR
16
- ```
17
-
18
- This is typically cached server-side and passed down as a prop, since APR only updates every ~12 hours on the backend.
19
-
20
- ## Vault Metadata
21
-
22
- ### `useSWBeraVaultMetadata` / `getSWBeraVaultMetadata`
23
-
24
- On-chain vault stats for a given receipt token address (e.g. swBERA contract address).
25
-
26
- ```tsx
27
- import { useSWBeraVaultMetadata } from "@berachain/berajs/hooks";
28
- import { config } from "@berachain/config/internal";
29
-
30
- const { data } = useSWBeraVaultMetadata(config.tokens.swbera);
31
-
32
- // data: VaultMetadata | undefined
33
- // {
34
- // current: {
35
- // exchangeRate: string, // how much BERA 1 swBERA redeems for (in wei, as string)
36
- // totalSupply: string, // total swBERA supply (formatted, not wei)
37
- // totalAssets: string, // total BERA staked (formatted)
38
- // tvl: string, // total WBERA in vault (formatted)
39
- // },
40
- // previous: { ... }, // same shape, from ~26 hours ago
41
- // totalWBeraIssued: string,
42
- // lockPeriod?: number, // unstake cooldown in seconds (undefined if no lock)
43
- // totalBuyBacks: number,
44
- // totalBuyBacksInLast24Hours: number,
45
- // }
46
- ```
47
-
48
- > Note: `useSWBeraVaultMetadata` requires `BlockTimeProvider` in the tree (provided by `BeraFlagsProvider`).
49
-
50
- ## Staking Configs
51
-
52
- ### `getLSTStakeConfig`
53
-
54
- Server-side action. Resolves a list of LST vault addresses into `StakingConfig[]` by reading each vault's `asset()` on-chain.
55
-
56
- ```ts
57
- import { getLSTStakeConfig } from "@berachain/berajs/actions";
58
- import { getServerSidePublicClient } from "@berachain/berajs/utils";
59
-
60
- const publicClient = await getServerSidePublicClient();
61
-
62
- // lstStakingVaults: Address[] from your config/edge config
63
- const lstConfigs = await getLSTStakeConfig({
64
- tokenList, // TokenWithMetadata[] — full token list to resolve symbols/metadata
65
- publicClient,
66
- lstStakingVaults, // vault contract addresses to resolve
67
- });
68
-
69
- // lstConfigs: StakingConfig[]
70
- ```
71
-
72
- **`StakingConfig` type:**
73
- ```ts
74
- type StakingConfig = {
75
- id: string; // vault address
76
- receiptToken: TokenWithMetadata; // e.g. swBERA token
77
- inputTokens: TokenWithMetadata[]; // e.g. [BERA, WBERA]
78
- };
79
- ```
80
-
81
- The native swBERA config is built manually (not via `getLSTStakeConfig`):
82
-
83
- ```ts
84
- const nativeStakingConfig: StakingConfig = {
85
- id: swberaToken.address,
86
- receiptToken: swberaToken,
87
- inputTokens: [beraToken, wBeraToken],
88
- };
89
-
90
- const allConfigs = [nativeStakingConfig, ...lstConfigs];
91
- ```
92
-
93
- ## User Staked Positions & Earnings
94
-
95
- ### `useStakedData`
96
-
97
- The primary hook for user staking data. Loads in two phases for progressive rendering:
98
-
99
- - **`balances`** (fast): staked amounts and USD values, earnings are `0`
100
- - **`data`** (slow): full picture including earnings from the vault
101
-
102
- ```tsx
103
- import { useStakedData } from "@berachain/berajs/hooks";
104
-
105
- const {
106
- balances, // StakedBeraAsset[] | undefined — fast path, no earnings
107
- data, // StakedBeraAsset[] | undefined — slow path, full earnings
108
- isLoadingBalances, // true while fast path is pending
109
- isLoadingPositions, // true while slow path is pending
110
- } = useStakedData(stakingConfigs); // StakingConfig[]
111
-
112
- // Show balances immediately, swap in data when available
113
- const positions = data ?? balances ?? [];
114
- const activePositions = positions.filter((p) => p.stakedAmount > 0);
115
- ```
116
-
117
- **`StakedBeraAsset` type:**
118
- ```ts
119
- type StakedBeraAsset = {
120
- token: TokenWithMetadata; // the input token (e.g. BERA)
121
- apr: number; // current APR as decimal (e.g. 0.12 = 12%)
122
- stakedAmount: number; // staked amount in token units
123
- stakedAmountUsd: number; // USD value of staked amount
124
- earnedAmount: number; // unrealised earnings in token units (0 on fast path)
125
- earnedAmountUsd: number; // USD value of earnings (0 on fast path)
126
- isLoadingEarnings?: boolean; // true on fast path while earnings are still loading
127
- };
128
- ```
129
-
130
- ## Queued Withdrawals
131
-
132
- ### `useQueuedBeraUnlock`
133
-
134
- Fetches pending (queued but not yet claimable) withdrawals for a user.
135
-
136
- ```tsx
137
- import { useQueuedBeraUnlock } from "@berachain/berajs/hooks";
138
-
139
- const { data: queuedWithdrawals } = useQueuedBeraUnlock({
140
- receiptTokenAddresses: stakingConfigs.map((c) => c.receiptToken.address),
141
- account,
142
- version: "V2", // always "V2" for new deployments
143
- });
144
-
145
- const totalQueued = queuedWithdrawals?.reduce(
146
- (sum, q) => sum + Number(q.withdrawalAmount),
147
- 0,
148
- ) ?? 0;
149
- const hasQueuedWithdrawal = totalQueued > 0;
150
- ```
151
-
152
- ## Key Types
153
-
154
- ```ts
155
- import type { StakingConfig, StakedBeraAsset } from "@berachain/berajs/types";
156
- import type { VaultMetadata } from "@berachain/berajs/actions";
157
- ```
158
-
159
- ## Complete Example: Staked Balance Display
160
-
161
- ```tsx
162
- "use client";
163
- import { useStakedData } from "@berachain/berajs/hooks";
164
- import type { StakingConfig } from "@berachain/berajs/types";
165
-
166
- export function StakedBalance({ configs }: { configs: StakingConfig[] }) {
167
- const { balances, data: positions, isLoadingBalances } = useStakedData(configs);
168
-
169
- // Use full positions when available, otherwise show balances immediately
170
- const source = positions ?? balances ?? [];
171
- const active = source.filter((p) => p.stakedAmount > 0);
172
-
173
- const totalStaked = active.reduce((sum, p) => sum + p.stakedAmountUsd, 0);
174
- const totalEarned = active.reduce((sum, p) => sum + p.earnedAmountUsd, 0);
175
- const hasPositions = !!positions;
176
-
177
- if (!isLoadingBalances && active.length === 0) {
178
- return <p>No staked assets.</p>;
179
- }
180
-
181
- return (
182
- <div>
183
- <p>Total Staked: ${totalStaked.toFixed(2)}</p>
184
- <p>Total Earnings: {hasPositions ? `$${totalEarned.toFixed(2)}` : "..."}</p>
185
- {active.map((asset) => (
186
- <div key={asset.token.address}>
187
- <span>{asset.token.symbol}</span>
188
- <span>{asset.stakedAmount.toFixed(4)} staked</span>
189
- <span>
190
- {asset.isLoadingEarnings ? "..." : `${asset.earnedAmount.toFixed(4)} earned`}
191
- </span>
192
- <span>APR: {(asset.apr * 100).toFixed(2)}%</span>
193
- </div>
194
- ))}
195
- </div>
196
- );
197
- }
198
- ```
@@ -1,170 +0,0 @@
1
- # BeraJS — Tokens Reference
2
-
3
- ## Wallet Balances
4
-
5
- ### `usePollWalletBalances` / `getWalletBalances`
6
-
7
- Fetch all ERC-20 token balances for a wallet address.
8
-
9
- ```tsx
10
- import { usePollWalletBalances } from "@berachain/berajs/hooks";
11
-
12
- const { data: balances, isLoading } = usePollWalletBalances({
13
- account: "0x...",
14
- });
15
-
16
- // balances: BalanceToken[]
17
- balances?.map((token) => (
18
- <div key={token.address}>
19
- {token.symbol}: {token.balance.formatted} (${token.usdValue?.toFixed(2)})
20
- </div>
21
- ));
22
- ```
23
-
24
- ```ts
25
- // Server-side:
26
- import { getWalletBalances } from "@berachain/berajs/actions";
27
- const balances = await getWalletBalances({ account: "0x..." });
28
- ```
29
-
30
- **`BalanceToken` type:**
31
- ```ts
32
- type BalanceToken = Token & {
33
- balance: {
34
- raw: string; // wei as string — safe to pass to BigInt()
35
- formatted: string; // human-readable e.g. "1.5"
36
- };
37
- price?: number; // USD price per token
38
- usdValue?: number; // balance * price
39
- };
40
- ```
41
-
42
- ## Allowances
43
-
44
- ### `usePollAllowances` / `getAllowances`
45
-
46
- Check ERC-20 spending approvals. Returns whether each token needs approval before a transaction.
47
-
48
- ```tsx
49
- import { usePollAllowances } from "@berachain/berajs/hooks";
50
- import type { AllowanceQueryItem } from "@berachain/berajs/types";
51
-
52
- const items: AllowanceQueryItem[] = [{
53
- token: {
54
- address: "0xHONEY",
55
- decimals: 18,
56
- symbol: "HONEY",
57
- name: "Honey",
58
- chainId: 80094,
59
- },
60
- amount: { raw: "1000000000000000000", formatted: "1.0" },
61
- spender: "0xVaultAddress",
62
- }];
63
-
64
- const { data: allowances } = usePollAllowances({
65
- account: "0x...",
66
- allowanceQueryList: items,
67
- });
68
-
69
- // allowances[0].needsApproval → true if approval required before tx
70
- // allowances[0].allowance.formatted → current approved amount
71
- ```
72
-
73
- ## Token Metadata
74
-
75
- ### `useTokenInformation` / `getTokenInformation`
76
-
77
- Resolve a token address to its metadata.
78
-
79
- ```ts
80
- import { useTokenInformation } from "@berachain/berajs/hooks";
81
-
82
- const { data: token } = useTokenInformation({ address: "0x..." });
83
- // token: TokenWithMetadata | undefined
84
- // { address, decimals, symbol, name, chainId, logoURI?, tags? }
85
- ```
86
-
87
- ## Prices
88
-
89
- ### `useTokenCurrentPrices` / `getTokenCurrentPrices`
90
-
91
- USD prices for multiple tokens at once.
92
-
93
- ```tsx
94
- import { useTokenCurrentPrices } from "@berachain/berajs/hooks";
95
-
96
- const { data: priceMap } = useTokenCurrentPrices({
97
- tokenAddresses: ["0xHONEY", "0xWBERA"],
98
- });
99
-
100
- // priceMap: TokenCurrentPriceMap
101
- // priceMap["0xhoney"]?.price → 1.0
102
- // Keys are lowercased addresses
103
- ```
104
-
105
- ## Key Types
106
-
107
- ```ts
108
- // Base for all tokens
109
- type MinimalERC20 = {
110
- address: Address;
111
- decimals: number;
112
- symbol: string;
113
- name: string;
114
- chainId: number;
115
- };
116
-
117
- // Full token with optional display metadata
118
- type Token = MinimalERC20 & {
119
- tags?: string[];
120
- logoURI?: string;
121
- totalSupply?: string;
122
- weight?: number | string | null;
123
- };
124
-
125
- // For allowance checking
126
- type AllowanceQueryItem = {
127
- token: MinimalERC20;
128
- amount: { raw: string; formatted: string };
129
- spender: Address;
130
- };
131
-
132
- type AllowanceToken = AllowanceQueryItem & {
133
- allowance: { raw: string; formatted: string };
134
- needsApproval: boolean;
135
- };
136
- ```
137
-
138
- ## Complete Example: Token Balance List
139
-
140
- ```tsx
141
- "use client";
142
- import { usePollWalletBalances } from "@berachain/berajs/hooks";
143
- import { useAccount } from "wagmi";
144
-
145
- export function TokenBalanceList() {
146
- const { address } = useAccount();
147
- const { data: balances, isLoading } = usePollWalletBalances(
148
- { account: address },
149
- { opts: { isEnabled: !!address } }
150
- );
151
-
152
- if (!address) return <div>Connect wallet</div>;
153
- if (isLoading) return <div>Loading...</div>;
154
- if (!balances?.length) return <div>No tokens found</div>;
155
-
156
- return (
157
- <ul>
158
- {balances.map((token) => (
159
- <li key={token.address}>
160
- <span>{token.symbol}</span>
161
- <span>{token.balance.formatted}</span>
162
- {token.usdValue !== undefined && (
163
- <span>${token.usdValue.toFixed(2)}</span>
164
- )}
165
- </li>
166
- ))}
167
- </ul>
168
- );
169
- }
170
- ```
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkC6ZGUO4Hcjs = require('./chunk-C6ZGUO4H.cjs');var _internal = require('@berachain/config/internal');function i(o){let n=_nullishCoalesce(o.chainId, () => (_internal.defaultChainId)),e=_nullishCoalesce(o.config, () => (_internal.chainConfigs[n]));if(o.chainId&&o.chainId!==e.chainId)throw new (0, _chunkC6ZGUO4Hcjs.h)({property:"chainId",value:n,expected:`config.chainId: ${e.chainId}`});return{config:e,chainId:e.chainId}}var _viem = require('viem');var _mainnet = require('@berachain/config/mainnet');var I={address:_viem.zeroAddress,decimals:18,name:"Bera",symbol:"BERA",logoURI:"https://res.cloudinary.com/duv0g402y/image/upload/v1738720154/brand/berachain-chain-logo.png.png"},l= exports.c ={address:_mainnet.mainnet.tokens.wbera,decimals:18,name:"WBera",symbol:"WBERA"};function R(o){let{config:n,chainId:e}=i(o);return{address:n.honey.token,symbol:"HONEY",name:"Honey",decimals:18,chainId:e}}function b(...o){let[n,e,r]=o;if(n===void 0)return!1;let s=typeof n=="string"?n:n.address;if(typeof e=="string"&&!_viem.isAddress.call(void 0, e)&&!e.startsWith("0x")){if(e==="BERA")return s.toLowerCase()===_viem.zeroAddress;if(e==="WBERA")return s.toLowerCase()===_mainnet.mainnet.tokens.wbera;if(e==="ETH")return s.toLowerCase()===_viem.ethAddress;if(e==="SWBERA")return s.toLowerCase()===_mainnet.mainnet.tokens.swbera.toLowerCase();if(r===void 0)throw new (0, _chunkC6ZGUO4Hcjs.h)({property:"baseArgs",value:r,expected:"BeraJS.BaseFunctionArgs",message:"baseArgs is required when compared to a known token different than BERA or WBERA. Checking against token: "+e+" and token address: "+s});let{config:a}=i(r),c={BGT:a.tokens.bgt,HONEY:a.honey.token,SWBERA:a.tokens.swbera,ETH:_viem.ethAddress};if(e in c)return s.toLowerCase()===c[e].toLowerCase()}let k=typeof e=="object"?e.address:e;return s.toLowerCase()===k.toLowerCase()}exports.a = i; exports.b = I; exports.c = l; exports.d = R; exports.e = b;
2
- //# sourceMappingURL=chunk-22J3YJDN.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-22J3YJDN.cjs","../src/utils/parseBaseArgs.ts"],"names":["parseBaseArgs","args","chainId","defaultChainId","config","chainConfigs","InvalidArgumentError"],"mappings":"AAAA,qOAAwC,sDCIjC,SAISA,CAAAA,CAAcC,CAAAA,CAA+B,CAC3D,IAAMC,CAAAA,kBAAUD,CAAAA,CAAK,OAAA,SAAWE,0BAAAA,CAC1BC,CAAAA,kBAAqBH,CAAAA,CAAK,MAAA,SAAUI,sBAAAA,CAAaH,CAAO,GAAA,CAE9D,EAAA,CAAID,CAAAA,CAAK,OAAA,EAAWA,CAAAA,CAAK,OAAA,GAAYG,CAAAA,CAAO,OAAA,CAE1C,MAAM,IAAIE,wBAAAA,CAAqB,CAC7B,QAAA,CAAU,SAAA,CACV,KAAA,CAAOJ,CAAAA,CACP,QAAA,CAAU,CAAA,gBAAA,EAAmBE,CAAAA,CAAO,OAAO,CAAA,CAAA","file":"/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-22J3YJDN.cjs","sourcesContent":[null,"import {\n type BeraConfig,\n chainConfigs,\n defaultChainId,\n} from \"@berachain/config/internal\";\n\nimport { InvalidArgumentError } from \"~/errors/InvalidArgumentError\";\n\nexport function parseBaseArgs(args: BeraJS.BaseFunctionArgs) {\n const chainId = args.chainId ?? defaultChainId;\n const config: BeraConfig = args.config ?? chainConfigs[chainId];\n\n if (args.chainId && args.chainId !== config.chainId) {\n // this matches unless the config is explicitly provided\n throw new InvalidArgumentError({\n property: \"chainId\",\n value: chainId,\n expected: `config.chainId: ${config.chainId}`,\n });\n }\n\n return { config, chainId: config.chainId };\n}\n"]}
@@ -1,2 +0,0 @@
1
- import{e as o,f as i,g as a,h as p}from"./chunk-AX2YQQFQ.mjs";import{BaseError as u}from"viem";function k({cause:e,level:t}){if(e instanceof u){let n=o({error:e,revertIfUnknown:!1});if(n.isRequestError&&n.rootCause instanceof u&&"url"in n.rootCause&&typeof n.rootCause.url=="string")return new a({cause:n.rootCause,response:void 0,endpoint:{url:n.rootCause.url,type:"rpc"},level:t})}return e instanceof i?e:new i({cause:e,level:t})}import{isAddress as m}from"viem";function c(e){return e!=null}function x({value:e,property:t,fn:r}){let n=r(e);if(!n.isValid)throw new p({property:t,value:e,expected:n.expectedType})}function s({value:e,property:t,fn:r}){x({value:e,property:t,fn:n=>{let l=c(n),{isValid:E,expectedType:v}=r(n);return{expectedType:v,isValid:l&&E}}})}function y(e,t){s({value:e,property:t,fn:r=>({expectedType:"defined",isValid:c(r)})})}function D(e,t="publicClient"){y(e,t)}function K(e,t){s({value:e,property:t,fn:r=>({expectedType:"Address",isValid:typeof r=="string"&&m(r)})})}function M(e,t){s({value:e,property:t,fn:r=>({expectedType:"number",isValid:(typeof r=="string"||typeof r=="number")&&Number(r)>0})})}function f(){let e={};return{emit(t,...r){for(let n of e[t]||[])n(...r)},events:e,on(t,r){return e[t]||(e[t]=[]),e[t].push(r),()=>{e[t]=e[t]?.filter(n=>r!==n)}}}}var d=f(),_={captureException(e){let t={exception:e,timestamp:Date.now()};d.emit("exception",t)},on(...e){return d.on(...e)}};export{k as a,y as b,D as c,K as d,M as e,_ as f};
2
- //# sourceMappingURL=chunk-2LL3P5PN.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors/initBeraError.ts","../src/errors/assert.ts","../src/utils/createEmitter.ts","../src/errors/BeraMonitoring.ts"],"sourcesContent":["import { BaseError } from \"viem\";\n\nimport { BeraError } from \"./BeraError\";\nimport { parseViemError } from \"./parseViemError\";\nimport { RequestError } from \"./RequestError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * The preferred way to normalize any unknown error into a BeraError.\n *\n * This function acts as a smart factory that picks the correct BeraError subclass:\n *\n * 1. If `cause` is already a `BeraError`, returns it as-is (no double-wrapping).\n * 2. If `cause` is a viem `BaseError`, runs `parseViemError` to classify it:\n * - If the root cause is an `HttpRequestError` (RPC transport failure), wraps it\n * in a `RequestError` with the endpoint URL extracted from the error.\n * 3. Otherwise, wraps in a new `BeraError` — which triggers the automatic reason\n * detection pipeline in the BeraError constructor (parseViemError → errorMap → displayMessage).\n *\n * **Use this instead of `new BeraError({ cause })` when you don't know the error type.**\n * It ensures RequestErrors are correctly classified (important for Sentry filtering\n * and fingerprinting — RequestErrors are skipped from transaction error grouping).\n *\n * @example\n * ```ts\n * try {\n * await someOperation();\n * } catch (error) {\n * // Normalizes to the right subclass, reason auto-detected\n * throw initBeraError({ cause: error });\n * }\n * ```\n *\n * @example\n * ```ts\n * // Reporting to Sentry without rethrowing\n * catch (error) {\n * captureException(initBeraError({ cause: error }));\n * }\n * ```\n */\nexport function initBeraError({\n cause: error,\n level,\n}: {\n cause: unknown;\n /**\n * The severity level of the error, only used if the error is not a BeraError.\n */\n level?: SeverityLevel;\n}): BeraError {\n // ── Step 1: Check if it's a viem BaseError that wraps an RPC transport failure ──\n // parseViemError with revertIfUnknown=false won't throw — it returns { reason: undefined }\n // if the error chain doesn't match any known type.\n if (error instanceof BaseError) {\n const parsed = parseViemError({\n error,\n revertIfUnknown: false,\n });\n if (\n parsed.isRequestError &&\n parsed.rootCause instanceof BaseError &&\n \"url\" in parsed.rootCause &&\n typeof parsed.rootCause.url === \"string\"\n ) {\n // RPC transport failure (e.g. HTTP 502 from the RPC endpoint).\n // Wrapping in RequestError gives it proper endpoint tagging and level=\"warning\".\n return new RequestError({\n cause: parsed.rootCause,\n response: undefined,\n endpoint: {\n url: parsed.rootCause.url as string,\n type: \"rpc\",\n },\n level,\n });\n }\n }\n\n // ── Step 2: Return as-is if already a BeraError, otherwise wrap ──────────\n // The BeraError constructor will run automatic reason detection on the cause.\n const err =\n error instanceof BeraError\n ? error\n : new BeraError({\n cause: error,\n level,\n });\n\n return err;\n}\n","import type { GetPublicClientReturnType } from \"@wagmi/core\";\nimport { type Address, isAddress, type PublicClient } from \"viem\";\n\nimport { InvalidArgumentError } from \"./InvalidArgumentError\";\n\nfunction _isDefined<T>(value: T): value is NonNullable<T> {\n return value !== undefined && value !== null;\n}\n\ntype _AssertFn<T> = (value: T) => { expectedType: string; isValid: boolean };\n\n/**\n * Internal assertion function.\n * @throws An InvalidArgumentError if the value is not valid.\n */\nfunction _assert<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: _AssertFn<T>;\n}) {\n const result = fn(value);\n if (!result.isValid) {\n throw new InvalidArgumentError({\n property,\n value,\n expected: result.expectedType,\n });\n }\n}\n\nfunction _assertDefined<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: (value: T) => { expectedType: string; isValid: boolean };\n}) {\n _assert({\n value,\n property,\n fn: (value) => {\n const isDefined = _isDefined(value);\n const { isValid, expectedType } = fn(value);\n return {\n expectedType,\n isValid: isDefined && isValid,\n };\n },\n });\n}\n\n/**\n * Asserts that a value is defined.\n * @throws An InvalidArgumentError if the value is undefined or null.\n */\nexport function assertDefined<T>(\n /**\n * The value to assert.\n */\n value: T,\n /**\n * The property name.\n */\n property: string,\n): asserts value is NonNullable<T> {\n _assertDefined({\n value,\n property,\n fn: (value) => ({ expectedType: \"defined\", isValid: _isDefined(value) }),\n });\n}\n\n/**\n * Asserts that a value is a PublicClient.\n * @throws An InvalidArgumentError if the value is undefined or not a PublicClient.\n */\nexport function assertPublicClient(\n /**\n * The value to assert.\n */\n value: // it's important to have both types here because it helps with typescript build performance\n PublicClient | GetPublicClientReturnType | undefined,\n /**\n * The property name.\n */\n property: string = \"publicClient\",\n): asserts value is PublicClient {\n // there's no current way to check if a value is a PublicClient, so we just assert it's defined and `value: PublicClient` will do the rest\n assertDefined(value, property);\n}\n\n/**\n * Asserts that a value is an address (20 bytes).\n * @throws An InvalidArgumentError if the value is undefined, null, not a string, or not an address.\n */\nexport function assertAddress(\n /**\n * The value to assert.\n */\n value: string | undefined | null,\n /**\n * The property name.\n */\n property: string,\n): asserts value is Address {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"Address\",\n isValid: typeof value === \"string\" && isAddress(value),\n }),\n });\n}\n\n/**\n * Asserts that a value is a number greater than 0.\n * @throws An InvalidArgumentError if the value is undefined, null, not a string or number, or not a number greater than 0.\n */\nexport function assertAmount(\n /**\n * The value to assert.\n */\n value: unknown,\n /**\n * The property name.\n */\n property: string,\n): asserts value is string | number {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"number\",\n isValid:\n (typeof value === \"string\" || typeof value === \"number\") &&\n Number(value) > 0,\n }),\n });\n}\n","interface EventsMap {\n [event: string]: any;\n}\n\ninterface DefaultEvents extends EventsMap {\n [event: string]: (...args: any) => void;\n}\n\nexport type Unsubscribe = () => void;\n\nexport interface Emitter<Events extends EventsMap = DefaultEvents> {\n /**\n * Calls each of the listeners registered for a given event.\n *\n * ```js\n * ee.emit('tick', tickType, tickDuration)\n * ```\n *\n * @param event The event name.\n * @param args The arguments for listeners.\n */\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void;\n\n /**\n * Add a listener for a given event.\n *\n * ```js\n * const unbind = ee.on('tick', (tickType, tickDuration) => {\n * count += 1\n * })\n *\n * disable () {\n * unbind()\n * }\n * ```\n *\n * @param event The event name.\n * @param cb The listener function.\n * @returns Unbind listener from event.\n */\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n events: Partial<{ [E in keyof Events]: Events[E][] }>;\n}\n\n/**\n * An interface for mixins that expose the `on` function (without the emitter\n * bound to `this`)\n *\n * ```js\n * import { createEmitter } from '~utils/createEmitter'\n *\n * class Ticker implements EmitterMixin<Events> {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n */\nexport interface EmitterMixin<Events extends EventsMap = DefaultEvents> {\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n}\n\n/**\n * Create event emitter.\n *\n * ```js\n * import { createEmitter } from '~/utils/createEmitter'\n *\n * class Ticker {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n *\n * Inspired by {@link https://github.com/ai/nanoevents}\n */\nexport function createEmitter<\n Events extends EventsMap = DefaultEvents,\n>(): Emitter<Events> {\n /**\n * Event names in keys and arrays with listeners in values.\n *\n * ```js\n * emitter1.events = emitter2.events\n * emitter2.events = { }\n * ```\n */\n const events: Partial<{ [E in keyof Events]: Events[E][] }> = {};\n\n return {\n emit(event, ...args) {\n for (const callback of events[event] || []) {\n callback(...args);\n }\n },\n events,\n on(event, cb) {\n if (!events[event]) {\n events[event] = [];\n }\n\n events[event].push(cb);\n\n return () => {\n events[event] = events[event]?.filter((i) => cb !== i);\n };\n },\n };\n}\n","import { createEmitter, type EmitterMixin } from \"~/utils/createEmitter\";\nimport type { BeraError } from \"./BeraError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * Context passed alongside captured exceptions.\n * Mirrors the subset of Sentry's CaptureContext that berajs actually uses.\n */\nexport interface CaptureContext {\n level: SeverityLevel;\n extra?: Record<string, unknown>;\n tags?: Record<string, string | number | boolean | null | undefined>;\n fingerprint?: string[];\n data?: Record<string, unknown>;\n}\n\nexport interface ErrorEvent {\n exception: BeraError;\n timestamp: number;\n}\n\nconst _emitter = createEmitter<{ exception: (event: ErrorEvent) => void }>();\n\n/**\n * A generic error reporter for berajs.\n *\n * Instead of calling Sentry.captureException directly, berajs calls\n * `BeraMonitoring.captureException()`. Consumer apps subscribe via `.on()` and\n * forward events to their monitoring provider (Sentry, Datadog, etc.).\n *\n * @example\n * ```ts\n * // In berajs code:\n * import { BeraMonitoring } from \"~/errors/BeraMonitoring\";\n * BeraMonitoring.captureExceptionException(error);\n *\n * // In app instrumentation:\n * import { BeraMonitoring } from \"@berachain/berajs/errors\";\n * BeraMonitoring.on((event) => {\n * if (event.type === \"exception\") {\n * Sentry.captureException(event.exception);\n * }\n * });\n * ```\n */\nexport const BeraMonitoring: {\n captureException: (exception: BeraError) => void;\n} & EmitterMixin<{ exception: (event: ErrorEvent) => void }> = {\n /**\n * Capture an exception. Notifies all subscribers.\n */\n captureException(exception: BeraError): void {\n const event: ErrorEvent = {\n exception,\n timestamp: Date.now(),\n };\n _emitter.emit(\"exception\", event);\n },\n /**\n * Subscribe to error events.\n * @returns An unsubscribe function.\n */\n on(...args) {\n return _emitter.on(...args);\n },\n};\n"],"mappings":"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","names":["BaseError","initBeraError","error","level","BaseError","parsed","parseViemError","RequestError","BeraError","isAddress","_isDefined","value","_assert","property","fn","result","InvalidArgumentError","_assertDefined","isDefined","isValid","expectedType","assertDefined","assertPublicClient","assertAddress","isAddress","assertAmount","createEmitter","events","event","args","callback","cb","i","_emitter","createEmitter","BeraMonitoring","exception","event","args"]}
@@ -1,2 +0,0 @@
1
- import{a as B,b as E}from"./chunk-7SMWQ6SN.mjs";import{a as h,f as g}from"./chunk-2LL3P5PN.mjs";import{a as S}from"./chunk-C3FHGFLK.mjs";import{a as y,b as v,e as m}from"./chunk-THATXCJK.mjs";import{f as P,h as b}from"./chunk-AX2YQQFQ.mjs";import{createContext as N,useContext as O}from"react";import{isFlagEnabled as U}from"@berachain/config/internal/edge-config";import{jsx as Y}from"react/jsx-runtime";var W=N(void 0);function pe({children:e,flags:t,aggregators:a,swberaAprWindow:n="DAY"}){return Y(W.Provider,{value:{...S,...t,aggregators:a?Object.entries(a).filter(([,r])=>U(r)).map(([r])=>r):void 0,swberaAprWindow:n},children:e})}function D(){let e=O(W);if(!e)throw new Error("BeraFlagsProvider not found");return e}function fe(e){return D()[e]}import{createContext as V,useContext as q,useState as K}from"react";import{jsx as Q}from"react/jsx-runtime";var w=V({protocol:{isPaused:!1,factories:{composableStable:"enabled",weighted:"enabled",allPaused:!1}},onPoolChange:()=>{},pool:void 0});function Te(){let e=q(w);if(!e)throw new P({level:"fatal",message:"BexStateContext is not defined"});return e}function he({children:e,isVaultPaused:t,labels:a,factories:n}){let[r,u]=K(),s=(r?.isPaused&&!r?.isInRecoveryMode)??!1,l=t||r?.isPaused;return Q(w.Provider,{value:{protocol:{isPaused:t,factories:{...n,allPaused:n.composableStable==="paused"&&n.weighted==="paused"}},labels:a,onPoolChange:u,pool:r?{...r,disablePoolWithdrawals:!!s,disablePoolDeposits:!!l}:void 0},children:e})}import{createContext as _,useContext as G}from"react";import{mainnet as J}from"@berachain/config/mainnet";import{jsx as z}from"react/jsx-runtime";function ve(){return G(F)}var F=_(J.averageBlockTime);function Ee({children:e,blockTime:t,...a}){let{config:n}=y(a);return z(F.Provider,{value:t??n.averageBlockTime,children:e})}import{createContext as X,useContext as Z}from"react";import{jsx as $}from"react/jsx-runtime";var L=X(void 0);function Fe({children:e,...t}){return $(L.Provider,{value:t,children:e})}function Le(){let e=Z(L);if(!e)throw new Error("useHoneyConfig must be used within a HoneyConfigProvider");return e}import{createContext as re,useMemo as ae}from"react";import{isFlagEnabled as se}from"@berachain/config/internal/edge-config";import oe from"swr";import{useBeraWallet as te,useConfig as ne}from"@berachain/wagmi/hooks";import{getChains as j,multicall as ee}from"@wagmi/core";import{formatUnits as M}from"viem";async function R({account:e,wagmiConfig:t,chainId:a,ensoClient:n}){let u=(await n.getBalances({useEoa:!0,chainId:a??"all",eoaAddress:e})).map(o=>({name:o.name,symbol:o.symbol,decimals:o.decimals,address:m(o.token,"ETH")?v.address:o.token,logoURI:o.logoUri,balance:{raw:o.amount.toString(),formatted:M(BigInt(o.amount),o.decimals)},chainId:Number(o.chainId),price:Number(o.price)})),s=Object.groupBy(u,o=>o.chainId??0),l=await Promise.allSettled(Object.entries(s).map(async([o,i])=>{if(!i)return;let p=j(t).find(d=>d.id===Number(o));if(!p)return;let k=p.contracts?.multicall3?.address;if(!k)return g.captureException(new b({property:"multicallAddress",value:k,expected:"Address",chainId:Number(o)})),i;let f=await ee(t,{chainId:Number(o),contracts:i.map(d=>E({token:d,account:e,multicallAddress:k})),allowFailure:!0}),x=[];for(let d=0;d<i.length;d++){let T=i[d];if(f[d].status==="success"){let C=f[d].result;x.push({...T,balance:{raw:C?.toString()??"0",formatted:M(C??0n,T.decimals)}})}else console.error("error getting balance",f[d].error),g.captureException(h({cause:f[d].error})),x.push(T)}return x})),c=[];for(let o of l)o.status==="fulfilled"?c.push(...o.value??[]):g.captureException(h({cause:o.reason}));return c.sort((o,i)=>{let p=Number(o.balance.formatted)*(o.price??0);return Number(i.balance.formatted)*(i.price??0)-p})}function A({chainId:e}={},t){let{address:a}=te(),n=ne(),r=!!a&&(t?.opts?.isEnabled??!0),s=oe(r&&n?["useEnsoUserTokensWithBalances",a,e]:null,async([,l,c])=>R({account:l,wagmiConfig:n,chainId:c??"all",ensoClient:B()}),{refreshInterval:1e5,isEnabled:r,...t?.opts});return{...s,refresh:()=>s.mutate()}}function H({defaultTokenList:e=[],externalList:t=[]}){if(e.length===0)return{tokenList:t,customTokenList:t,featuredTokenList:[]};let a=e.map(s=>({...s,default:!0})),n=a.filter(s=>s.tags?.some(l=>l==="featured")),r=[...a,...t];return{tokenList:r.filter((s,l)=>r.findIndex(c=>m(c,s))===l),customTokenList:t,featuredTokenList:n}}import{jsx as le}from"react/jsx-runtime";var ie=re(void 0);function je({children:e,defaultTokens:t,edgeConfigTokenList:a,userTokens:n,onAddToken:r,onRemoveToken:u}){let{data:s,refresh:l}=A(),{tokenList:c=[],featuredTokenList:o=[]}=ae(()=>H({defaultTokenList:[...t,...a?.filter(i=>se(i.enabled))],externalList:[...n,...(s??[]).map(i=>({...i,balance:void 0,price:void 0}))]}),[t,n,a,s]);return le(ie.Provider,{value:{tokenList:c,userTokens:n,featuredTokens:o,ensoTokens:s,onAddToken(i){r(i,{defaultTokens:t,userTokens:n,tokenList:c})},onRemoveToken:u,refresh:()=>{l()}},children:e})}export{pe as a,D as b,fe as c,w as d,Te as e,he as f,ve as g,F as h,Ee as i,L as j,Fe as k,Le as l,ie as m,je as n};
2
- //# sourceMappingURL=chunk-55L7STYD.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/contexts/BeraFlags/BeraFlags.tsx","../src/contexts/BexStatusProvider.tsx","../src/contexts/block-time-provider.tsx","../src/contexts/HoneyConfigProvider.tsx","../src/contexts/TokensProvider.tsx","../src/hooks/enso/useEnsoUserTokensWithBalances.ts","../src/actions/enso/getEnsoUserTokensWithBalances.ts","../src/utils/formatTokenList.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nimport {\n type EdgeConfigSchema,\n isFlagEnabled,\n} from \"@berachain/config/internal/edge-config\";\n\nimport { type BeraFlags, defaultFlags } from \"./defaultFlags\";\n\nexport type { BeraFlags };\n\nexport type BeraFlagsContextReturn = BeraFlags & {\n /**\n * A list of aggregators that are enabled. If not provided, all aggregators are enabled.\n */\n aggregators: string[] | undefined;\n swberaAprWindow: Exclude<\n EdgeConfigSchema[\"pol\"][\"swberaAprWindow\"],\n undefined\n >;\n};\n\nconst BeraFlagContext = createContext<BeraFlagsContextReturn | undefined>(\n undefined,\n);\n\nexport function BeraFlagsProvider({\n children,\n flags,\n aggregators,\n swberaAprWindow = \"DAY\",\n}: {\n children: React.ReactNode;\n flags: BeraFlags;\n aggregators?: NonNullable<EdgeConfigSchema[\"bex\"]>[\"aggregators\"];\n swberaAprWindow?: EdgeConfigSchema[\"pol\"][\"swberaAprWindow\"];\n}) {\n return (\n <BeraFlagContext.Provider\n value={{\n ...defaultFlags,\n ...flags,\n aggregators: aggregators\n ? Object.entries(aggregators)\n .filter(([, value]) => isFlagEnabled(value))\n .map(([key]) => key)\n : undefined,\n swberaAprWindow,\n }}\n >\n {children}\n </BeraFlagContext.Provider>\n );\n}\n\nexport function useBeraFlags() {\n const context = useContext(BeraFlagContext);\n if (!context) {\n throw new Error(\"BeraFlagsProvider not found\");\n }\n return context;\n}\n\nexport function useBeraFlag<T extends keyof BeraFlagsContextReturn>(\n key: T,\n): BeraFlagsContextReturn[T] {\n const flags = useBeraFlags();\n return flags[key];\n}\n","import {\n createContext,\n type Dispatch,\n type PropsWithChildren,\n type SetStateAction,\n useContext,\n useState,\n} from \"react\";\nimport type { Hex } from \"viem\";\n\nimport type { EdgeConfigSchema } from \"@berachain/config/internal/edge-config\";\n\nimport { BeraError } from \"~/errors/BeraError\";\n\ntype FactoryStatus = {\n /**\n * If the composable stable factory is enabled\n */\n composableStable: \"paused\" | \"enabled\";\n /**\n * If the weighted factory is enabled\n */\n weighted: \"paused\" | \"enabled\";\n};\nexport interface BexStatusProviderProps {\n isVaultPaused: boolean;\n pool?: {\n id: Hex;\n isInRecoveryMode: boolean;\n isPaused: boolean;\n };\n factories: FactoryStatus;\n labels?: NonNullable<EdgeConfigSchema[\"bex\"]>[\"emergencyLabels\"];\n}\n\nexport const BexStateContext = createContext<{\n protocol: {\n isPaused: boolean;\n factories: FactoryStatus & { allPaused: boolean };\n };\n onPoolChange: Dispatch<SetStateAction<BexStatusProviderProps[\"pool\"]>>;\n pool?: {\n id: Hex;\n isInRecoveryMode: boolean;\n isPaused: boolean;\n disablePoolWithdrawals: boolean;\n disablePoolDeposits: boolean;\n };\n labels?: NonNullable<EdgeConfigSchema[\"bex\"]>[\"emergencyLabels\"];\n}>({\n protocol: {\n isPaused: false,\n factories: {\n composableStable: \"enabled\",\n weighted: \"enabled\",\n allPaused: false,\n },\n },\n onPoolChange: () => {},\n pool: undefined,\n});\n\n/**\n * @description Determines the status of a pool or vault and returns the appropriate messages and flags to disable functionality.\n * More information here https://www.notion.so/berachain/BEX-RecoveryMode-and-Pause-explained-17c6120abced80e0985dd589b57ff018\n *\n * @returns status flags to enable/disable/notify users across the BEX\n *\n **/\nexport function useBexStatus() {\n const context = useContext(BexStateContext);\n\n if (!context) {\n throw new BeraError({\n level: \"fatal\",\n message: \"BexStateContext is not defined\",\n });\n }\n\n return context;\n}\n\nexport function BexStatusProvider({\n children,\n isVaultPaused,\n labels,\n factories,\n}: PropsWithChildren<BexStatusProviderProps>) {\n const [poolState, setPoolState] = useState<BexStatusProviderProps[\"pool\"]>();\n // Determine whether to disable withdrawals for a pool (vault pause does not impact this)\n const disablePoolWithdrawals =\n (poolState?.isPaused && !poolState?.isInRecoveryMode) ?? false;\n\n // Determine whether to disable deposits for a pool (vault pause does not impact this)\n const disablePoolDeposits = isVaultPaused || poolState?.isPaused;\n\n // TODO: we dont yet support anything to disable staking/unstaking within reward vaults if they get paused\n\n return (\n <BexStateContext.Provider\n value={{\n protocol: {\n isPaused: isVaultPaused,\n factories: {\n ...factories,\n allPaused:\n factories.composableStable === \"paused\" &&\n factories.weighted === \"paused\",\n },\n },\n labels,\n onPoolChange: setPoolState,\n pool: poolState\n ? {\n ...poolState,\n disablePoolWithdrawals: !!disablePoolWithdrawals,\n disablePoolDeposits: !!disablePoolDeposits,\n }\n : undefined,\n }}\n >\n {children}\n </BexStateContext.Provider>\n );\n}\n","import { createContext, type PropsWithChildren, useContext } from \"react\";\n\nimport { mainnet } from \"@berachain/config/mainnet\";\n\nimport { parseBaseArgs } from \"~/utils/parseBaseArgs\";\n\n/**\n * Average berachain block time in seconds\n */\nexport function useBlockTime(): number {\n return useContext(BlockTimeContext);\n}\n\nexport const BlockTimeContext = createContext<number>(\n // this is the default block time for berachain, but actually overridden by the block time provider\n mainnet.averageBlockTime,\n);\n\nexport function BlockTimeProvider({\n children,\n blockTime,\n ...args\n}: PropsWithChildren<{\n blockTime?: number;\n}> &\n BeraJS.BaseFunctionArgs) {\n const { config } = parseBaseArgs(args);\n\n return (\n <BlockTimeContext.Provider value={blockTime ?? config.averageBlockTime}>\n {children}\n </BlockTimeContext.Provider>\n );\n}\n","import { createContext, useContext } from \"react\";\n\nimport type { HoneyFeeMap } from \"~/actions/honey/getHoneyFees\";\nimport type { TokenWithMetadata } from \"~/types/dex\";\nimport type { PythPriceFeedMap } from \"~/types/honeySwap\";\n\nexport const HoneyConfigContext = createContext<\n HoneyConfigContextReturn | undefined\n>(undefined);\n\nexport type TokenWithOrder = TokenWithMetadata & {\n order: number;\n};\nexport interface HoneyConfigContextReturn {\n /**\n * Map of the Pyth price feed ids for each collateral\n */\n priceFeedMap: PythPriceFeedMap;\n /**\n * This is the list of all the collaterals that are supported by the Honey protocol\n */\n collateralList: TokenWithOrder[];\n /**\n * This is the main collateral that is used to calculate the relative cap limit\n */\n referenceCollateral: TokenWithOrder;\n /**\n * An object that maps the redeem/mint rate for each collateral and the weighted rates for the basket mode\n */\n feeMap: HoneyFeeMap;\n flags: {\n /**\n * If true, mint/redeem will also update pyth prices\n */\n isPythWrapperEnabled: boolean;\n };\n /**\n * Honey protocol configs\n */\n protocol: {\n /**\n * Honey protocol paused state\n */\n isPaused: boolean;\n /**\n * The label for the Honey protocol paused message\n */\n pausedBannerLabel?: string;\n };\n}\n\nexport interface HoneyConfigProviderProps extends HoneyConfigContextReturn {\n children: React.ReactNode;\n}\n\nexport function HoneyConfigProvider({\n children,\n ...props\n}: HoneyConfigProviderProps) {\n return (\n <HoneyConfigContext.Provider value={props}>\n {children}\n </HoneyConfigContext.Provider>\n );\n}\n\nexport function useHoneyConfig() {\n const context = useContext(HoneyConfigContext);\n if (!context) {\n throw new Error(\"useHoneyConfig must be used within a HoneyConfigProvider\");\n }\n return context;\n}\n","import { createContext, type PropsWithChildren, useMemo } from \"react\";\n\nimport {\n type EdgeConfigSchema,\n isFlagEnabled,\n} from \"@berachain/config/internal/edge-config\";\n\nimport { useEnsoUserTokensWithBalances } from \"~/hooks/enso/useEnsoUserTokensWithBalances\";\nimport type { BalanceToken, Token, TokenWithMetadata } from \"~/types/dex\";\nimport { formatTokenList } from \"~/utils/formatTokenList\";\n\nexport interface TokensProviderContext {\n tokenList: TokenWithMetadata[];\n userTokens: Token[];\n featuredTokens: TokenWithMetadata[];\n onRemoveToken: (token: Token) => void;\n onAddToken: (token: Token) => void;\n refresh: () => void;\n ensoTokens: BalanceToken[] | undefined;\n}\n\nexport const TokenContext = createContext<TokensProviderContext | undefined>(\n undefined,\n);\n\nexport interface TokensProviderProps\n extends Omit<\n TokensProviderContext,\n \"tokenList\" | \"onAddToken\" | \"featuredTokens\" | \"ensoTokens\"\n > {\n onAddToken: (\n token: Token,\n context: {\n defaultTokens: TokenWithMetadata[];\n userTokens: Token[];\n tokenList: TokenWithMetadata[];\n },\n ) => void;\n defaultTokens: TokenWithMetadata[];\n edgeConfigTokenList: EdgeConfigSchema[\"tokens\"];\n}\n\nexport function TokensProvider({\n children,\n defaultTokens,\n edgeConfigTokenList,\n userTokens,\n onAddToken,\n onRemoveToken,\n}: PropsWithChildren<Omit<TokensProviderProps, \"refresh\">>) {\n const { data: ensoTokens, refresh } = useEnsoUserTokensWithBalances();\n\n const { tokenList = [], featuredTokenList = [] } = useMemo(\n () =>\n formatTokenList({\n defaultTokenList: [\n ...defaultTokens,\n ...(edgeConfigTokenList?.filter((token) =>\n isFlagEnabled(token.enabled),\n ) as TokenWithMetadata[]),\n ],\n externalList: [\n ...userTokens,\n ...(ensoTokens ?? []).map((t) => ({\n ...t,\n balance: undefined,\n price: undefined,\n })),\n ],\n }),\n [defaultTokens, userTokens, edgeConfigTokenList, ensoTokens],\n );\n\n return (\n <TokenContext.Provider\n value={{\n tokenList,\n userTokens,\n featuredTokens: featuredTokenList,\n ensoTokens,\n onAddToken(tk) {\n onAddToken(tk, { defaultTokens, userTokens, tokenList });\n },\n onRemoveToken,\n refresh: () => {\n refresh();\n },\n }}\n >\n {children}\n </TokenContext.Provider>\n );\n}\n","import useSWR from \"swr\";\n\nimport { useBeraWallet, useConfig } from \"@berachain/wagmi/hooks\";\n\nimport { getEnsoClient } from \"~/actions/clients/getEnsoClient\";\nimport { getEnsoUserTokensWithBalances } from \"~/actions/enso/getEnsoUserTokensWithBalances\";\nimport { POLLING } from \"~/enum/polling\";\nimport type { BalanceToken } from \"~/types/dex\";\nimport type { DefaultHookOptions } from \"~/types/global\";\n\nexport function useEnsoUserTokensWithBalances(\n { chainId }: { chainId?: number } = {},\n options?: DefaultHookOptions,\n) {\n const { address: fromAddress } = useBeraWallet();\n const wagmiConfig = useConfig();\n const isEnabled = !!fromAddress && (options?.opts?.isEnabled ?? true);\n\n const QUERY_KEY =\n isEnabled && wagmiConfig\n ? ([\"useEnsoUserTokensWithBalances\", fromAddress, chainId] as const)\n : null;\n\n const swrResponse = useSWR(\n QUERY_KEY,\n async ([, fromAddress, chainId]): Promise<BalanceToken[]> =>\n getEnsoUserTokensWithBalances({\n account: fromAddress,\n wagmiConfig,\n chainId: chainId ?? \"all\",\n ensoClient: getEnsoClient(),\n }),\n {\n refreshInterval: POLLING.NORMAL,\n isEnabled,\n ...options?.opts,\n },\n );\n return {\n ...swrResponse,\n refresh: () => swrResponse.mutate(),\n };\n}\n","import type { EnsoClient } from \"@ensofinance/sdk\";\nimport { type Config, getChains, multicall } from \"@wagmi/core\";\nimport { type Address, formatUnits } from \"viem\";\n\nimport { BeraMonitoring } from \"~/errors/BeraMonitoring\";\nimport { InvalidArgumentError } from \"~/errors/InvalidArgumentError\";\nimport { initBeraError } from \"~/errors/initBeraError\";\nimport type { BalanceToken } from \"~/types/dex\";\nimport { beraToken, isToken } from \"~/utils/tokens\";\nimport { getBalanceCall } from \"../tokens/getWalletBalances\";\n\n/**\n * Get user balances for each supported chain.\n *\n * This uses enso's balance endpoint to get the balances and RPC to get fresh balances.\n */\nexport async function getEnsoUserTokensWithBalances({\n account,\n wagmiConfig,\n chainId,\n ensoClient,\n}: {\n account: Address;\n wagmiConfig: Config;\n chainId: number | \"all\";\n ensoClient: EnsoClient;\n}): Promise<BalanceToken[]> {\n const ensoBalances = await ensoClient.getBalances({\n useEoa: true,\n chainId: chainId ?? \"all\",\n eoaAddress: account,\n });\n\n const tokens: BalanceToken[] = ensoBalances.map(\n (balance) =>\n ({\n name: balance.name,\n symbol: balance.symbol,\n decimals: balance.decimals,\n address: isToken(balance.token, \"ETH\")\n ? beraToken.address\n : balance.token,\n logoURI: balance.logoUri,\n balance: {\n raw: balance.amount.toString(),\n formatted: formatUnits(BigInt(balance.amount), balance.decimals),\n },\n\n chainId: Number(\n // @ts-expect-error - balance.chainId is defined just not typed by enso\n balance.chainId,\n ),\n price: Number(balance.price),\n }) as const satisfies BalanceToken,\n );\n\n const tokenByChainId = Object.groupBy(tokens, (a) => a.chainId ?? 0);\n\n const balances = await Promise.allSettled(\n Object.entries(tokenByChainId).map(async ([chainId, chainTokens]) => {\n if (!chainTokens) return undefined;\n const chainConfig = getChains(wagmiConfig).find(\n (chain) => chain.id === Number(chainId),\n );\n\n if (!chainConfig) {\n // if we've queried a chain that is not supported, we need to return undefined\n return undefined;\n }\n\n const multicall3 = chainConfig.contracts?.multicall3;\n\n const multicallAddress = multicall3?.address;\n\n if (!multicallAddress) {\n // if multicall is not supported on this chain, we need to use the enso balance\n // first let's report the error, as this is likely unexpected\n BeraMonitoring.captureException(\n new InvalidArgumentError({\n property: \"multicallAddress\",\n value: multicallAddress,\n expected: \"Address\",\n chainId: Number(chainId),\n }),\n );\n\n // we can return the tokens as is, as the balance is already set from the enso client\n return chainTokens;\n }\n\n const balances = await multicall(wagmiConfig, {\n chainId: Number(chainId),\n contracts: chainTokens.map((token) =>\n getBalanceCall({\n token,\n account,\n multicallAddress,\n }),\n ),\n allowFailure: true,\n });\n\n const tokensWithBalances: BalanceToken[] = [];\n\n for (let index = 0; index < chainTokens.length; index++) {\n const token = chainTokens[index];\n if (balances[index].status === \"success\") {\n const balance = balances[index].result;\n\n tokensWithBalances.push({\n ...token,\n balance: {\n raw: balance?.toString() ?? \"0\",\n formatted: formatUnits(balance ?? 0n, token.decimals),\n },\n });\n } else {\n console.error(\"error getting balance\", balances[index].error);\n BeraMonitoring.captureException(\n initBeraError({ cause: balances[index].error }),\n );\n // uses enso balance as fallback\n tokensWithBalances.push(token);\n }\n }\n\n return tokensWithBalances;\n }),\n );\n\n const flattenedBalances: BalanceToken[] = [];\n for (const result of balances) {\n if (result.status === \"fulfilled\") {\n flattenedBalances.push(...(result.value ?? []));\n } else {\n BeraMonitoring.captureException(initBeraError({ cause: result.reason }));\n }\n }\n\n return flattenedBalances.sort((a, b) => {\n const aValue = Number(a.balance.formatted) * (a.price ?? 0);\n const bValue = Number(b.balance.formatted) * (b.price ?? 0);\n return bValue - aValue;\n });\n}\n","import type { Token, TokenWithMetadata } from \"../types/dex\";\nimport { isToken } from \"./tokens\";\n\nexport interface FormatTokenListReturnType {\n /**\n * Token list including custom tokens\n */\n tokenList: Token[];\n /**\n * Custom token list (added by the user)\n */\n customTokenList?: Token[];\n /**\n * Featured token list\n */\n featuredTokenList?: Token[];\n}\n\nfunction formatTokenList({\n defaultTokenList = [],\n externalList = [],\n}: {\n defaultTokenList: TokenWithMetadata[];\n externalList?: Token[];\n}): FormatTokenListReturnType {\n if (defaultTokenList.length === 0) {\n return {\n tokenList: externalList,\n customTokenList: externalList,\n featuredTokenList: [],\n };\n }\n\n const defaultList = defaultTokenList.map((token) => {\n return { ...token, default: true };\n });\n\n const featuredTokenList = defaultList.filter((token) => {\n return token.tags?.some((tag) => tag === \"featured\");\n });\n\n const mergedList = [...defaultList, ...externalList];\n\n const uniqueList = mergedList.filter(\n (item, index) => mergedList.findIndex((i) => isToken(i, item)) === index,\n );\n\n return {\n tokenList: uniqueList,\n customTokenList: externalList,\n featuredTokenList,\n };\n}\n\nexport { formatTokenList };\n"],"mappings":"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","names":["createContext","useContext","isFlagEnabled","jsx","BeraFlagContext","createContext","BeraFlagsProvider","children","flags","aggregators","swberaAprWindow","defaultFlags","value","isFlagEnabled","key","useBeraFlags","context","useContext","useBeraFlag","createContext","useContext","useState","jsx","BexStateContext","createContext","useBexStatus","context","useContext","BeraError","BexStatusProvider","children","isVaultPaused","labels","factories","poolState","setPoolState","useState","disablePoolWithdrawals","disablePoolDeposits","createContext","useContext","mainnet","jsx","useBlockTime","useContext","BlockTimeContext","createContext","mainnet","BlockTimeProvider","children","blockTime","args","config","parseBaseArgs","createContext","useContext","jsx","HoneyConfigContext","HoneyConfigProvider","children","props","useHoneyConfig","context","createContext","useMemo","isFlagEnabled","useSWR","useBeraWallet","useConfig","getChains","multicall","formatUnits","getEnsoUserTokensWithBalances","account","wagmiConfig","chainId","ensoClient","tokens","balance","isToken","beraToken","formatUnits","tokenByChainId","a","balances","chainTokens","chainConfig","getChains","chain","multicallAddress","BeraMonitoring","InvalidArgumentError","multicall","token","getBalanceCall","tokensWithBalances","index","initBeraError","flattenedBalances","result","b","aValue","useEnsoUserTokensWithBalances","chainId","options","fromAddress","useBeraWallet","wagmiConfig","useConfig","isEnabled","swrResponse","useSWR","getEnsoUserTokensWithBalances","getEnsoClient","formatTokenList","defaultTokenList","externalList","defaultList","token","featuredTokenList","tag","mergedList","item","index","i","isToken","jsx","TokenContext","createContext","TokensProvider","children","defaultTokens","edgeConfigTokenList","userTokens","onAddToken","onRemoveToken","ensoTokens","refresh","useEnsoUserTokensWithBalances","tokenList","featuredTokenList","useMemo","formatTokenList","token","isFlagEnabled","t","tk"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-6LDOG5RL.cjs","../src/errors/BeraTracing.ts","../src/errors/NotFoundError.ts","../src/errors/TransactionFailedError.ts"],"names":["_handlers","BeraTracing","context","callback","next","handler","idx","NotFoundError","BeraError","args","TransactionFailedError"],"mappings":"AAAA,iPAAwC,ICqBlCA,CAAAA,CAA2B,CAAC,CAAA,CA0BrBC,CAAAA,aAAc,CAOzB,SAAA,CAAaC,CAAAA,CAAsBC,CAAAA,CAAwC,CACzE,OAAIH,CAAAA,CAAU,MAAA,GAAW,CAAA,CAAUG,CAAAA,CAAS,CAAA,CAGrCH,CAAAA,CAAU,WAAA,CACf,CAACI,CAAAA,CAAMC,CAAAA,CAAAA,EAAY,CAAA,CAAA,EAAMA,CAAAA,CAAQH,CAAAA,CAASE,CAAI,CAAA,CAC9CD,CACF,CAAA,CAAE,CACJ,CAAA,CASA,cAAA,CAAeE,CAAAA,CAAmC,CAChD,OAAAL,CAAAA,CAAU,IAAA,CAAKK,CAAO,CAAA,CACf,CAAA,CAAA,EAAM,CACX,IAAMC,CAAAA,CAAMN,CAAAA,CAAU,OAAA,CAAQK,CAAO,CAAA,CACjCC,CAAAA,GAAQ,CAAA,CAAA,EAAIN,CAAAA,CAAU,MAAA,CAAOM,CAAAA,CAAK,CAAC,CACzC,CACF,CACF,CAAA,CCnEO,IAAMC,CAAAA,CAAN,MAAA,QAA4BC,mBAAU,CAM3C,WAQA,CAAYC,CAAAA,CAA0B,CACpC,KAAA,CAAMA,CAAI,CAAA,CACV,IAAA,CAAK,IAAA,CAAO,eAAA,CACZ,IAAA,CAAK,KAAA,kBAAQA,CAAAA,CAAK,KAAA,SAAS,QAAA,CAC3B,IAAA,CAAK,OAAA,CAAU,CAAA,SAAA,EAAYA,CAAAA,CAAK,QAAQ,CAAA,SAAA,EAAYA,CAAAA,CAAK,EAAE,CAAA,UAAA,CAAA,CAC3D,IAAA,CAAK,QAAA,CAAWA,CAAAA,CAAK,QAAA,CACrB,IAAA,CAAK,EAAA,CAAKA,CAAAA,CAAK,EACjB,CACF,CAAA,CCzBO,IAAMC,CAAAA,WAAN,MAAA,QAAqCF,mBAAU,CAMpD,eAsBA,WAAA,CAA6B,KAAA,WAY7B,CACEC,CAAAA,CAQA,CACA,KAAA,CAAMA,CAAI,qCAAA,CACV,IAAA,CAAK,IAAA,CAAO,wBAAA,CACZ,IAAA,CAAK,MAAA,CAASA,CAAAA,CAAK,MAAA,EAAU,IAAA,CAC7B,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAK,OAAA,EAAW,IAAA,CAC/B,IAAA,CAAK,EAAA,CAAKA,CAAAA,CAAK,EAAA,CACf,IAAA,CAAK,YAAA,CAAeA,CAAAA,CAAK,YAAA,CACzB,IAAA,CAAK,WAAA,kBAAcA,CAAAA,CAAK,WAAA,SAAe,MAAA,CACvC,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAK,KAAA,CAEd,IAAA,CAAK,OAAA,CAEP,IAAA,CAAK,OAAA,CAAU,CAAA,0CAAA,EAA6C,IAAA,CAAK,MAAM,CAAA,CAAA","file":"/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-6LDOG5RL.cjs","sourcesContent":[null,"import type { Unsubscribe } from \"~/utils/createEmitter\";\n\n/**\n * Span context passed to tracing handlers.\n * Compatible with Sentry's StartSpanOptions (name, op, attributes).\n */\nexport type SpanContext = {\n name: string;\n op: string;\n attributes: Record<string, string | number | boolean | undefined>;\n};\n\n/**\n * A function that wraps a callback in a tracing span.\n * Compatible with Sentry.startSpan's signature.\n */\ntype StartSpanFn = <T>(\n context: SpanContext,\n callback: () => Promise<T>,\n) => Promise<T>;\n\nconst _handlers: StartSpanFn[] = [];\n\n/**\n * A generic span-tracing module for berajs.\n *\n * Instead of calling Sentry.startSpan directly, berajs calls\n * `BeraTracing.startSpan()`. Consumer apps subscribe via `.on(\"span\", handler)`\n * and forward spans to their tracing provider (Sentry, Datadog, etc.).\n *\n * Multiple handlers are supported and chain in registration order:\n * the first registered handler is the outermost wrapper.\n *\n * @example\n * ```ts\n * // In berajs code:\n * import { BeraTracing } from \"~/errors/BeraTracing\";\n * const result = await BeraTracing.startSpan(\n * { name: \"GraphQL query\", op: \"graphql.query\", attributes: {} },\n * () => executeQuery(),\n * );\n *\n * // In app instrumentation:\n * import { BeraTracing } from \"@berachain/berajs/errors\";\n * BeraTracing.addSpanHandler(Sentry.startSpan);\n * ```\n */\nexport const BeraTracing = {\n /**\n * Execute a callback, wrapping it in all registered span handlers.\n *\n * Handlers chain so each wraps the next. First registered = outermost wrapper.\n * If no handlers are registered, the callback is executed directly.\n */\n startSpan<T>(context: SpanContext, callback: () => Promise<T>): Promise<T> {\n if (_handlers.length === 0) return callback();\n\n // Chain: h1(ctx, () => h2(ctx, () => h3(ctx, () => callback())))\n return _handlers.reduceRight<() => Promise<T>>(\n (next, handler) => () => handler(context, next),\n callback,\n )();\n },\n\n /**\n * Register a span tracing handler.\n *\n * @param _event - Must be \"span\". Exists for API consistency with BeraMonitoring.\n * @param handler - A StartSpanFn, e.g. Sentry.startSpan.\n * @returns An unsubscribe function to remove the handler.\n */\n addSpanHandler(handler: StartSpanFn): Unsubscribe {\n _handlers.push(handler);\n return () => {\n const idx = _handlers.indexOf(handler);\n if (idx !== -1) _handlers.splice(idx, 1);\n };\n },\n};\n","import { BeraError, type IBeraErrorArgs } from \"./BeraError\";\n\nexport interface INotFoundErrorArgs extends IBeraErrorArgs {\n resource: string;\n id: string;\n chainId: number;\n}\n\n/**\n * Error thrown when a resource is not found.\n */\nexport class NotFoundError extends BeraError {\n /**\n * The name of the resource that was not found.\n *\n * @example \"Reward vault\"\n */\n resource: string;\n /**\n * The id of the resource that was not found.\n *\n * @example \"0x1234567890123456789012345678901234567890\"\n */\n id: string;\n\n constructor(args: INotFoundErrorArgs) {\n super(args);\n this.name = \"NotFoundError\";\n this.level = args.level ?? \"info\";\n this.message = `Resource ${args.resource} with id ${args.id} not found`;\n this.resource = args.resource;\n this.id = args.id;\n }\n}\n","import type { Hex } from \"@berachain-foundation/berancer-sdk\";\nimport type { Address, TransactionReceipt } from \"viem\";\n\nimport { BeraError, type IBeraErrorArgs } from \"./BeraError\";\n\n/**\n * This error is generally thrown by beraWriteContract when a transaction or simulation fails.\n */\nexport class TransactionFailedError extends BeraError {\n /**\n * The hash of the transaction that failed.\n *\n * Null if the error is due to a simulation failure.\n */\n txHash: string | null;\n\n /**\n * The receipt of the transaction that failed.\n *\n * Null if the error is due to a simulation failure.\n */\n receipt: TransactionReceipt | null;\n\n /**\n * The address of the contract that was called.\n */\n to: Address | undefined;\n\n /**\n * The data of the transaction that failed.\n */\n callData: Hex | undefined;\n\n /**\n * The block number of the transaction that failed.\n */\n blockNumber: bigint | null = null;\n\n /**\n * The input of the transaction that failed.\n */\n input: object;\n\n /**\n * The function name of the transaction that failed.\n */\n functionName: string | undefined;\n\n constructor(\n args: IBeraErrorArgs & {\n txHash?: string;\n receipt?: TransactionReceipt;\n to?: Address;\n blockNumber?: bigint;\n functionName?: string;\n input: object;\n },\n ) {\n super(args);\n this.name = \"TransactionFailedError\";\n this.txHash = args.txHash || null;\n this.receipt = args.receipt || null;\n this.to = args.to;\n this.functionName = args.functionName;\n this.blockNumber = args.blockNumber ?? null;\n this.input = args.input;\n\n if (this.receipt) {\n // If we have a receipt, transaction reverted on chain\n this.message = `Transaction reverted on chain for reason: ${this.reason}`;\n } else if (this.txHash) {\n // If we have a tx hash, transaction reverted after being broadcasted but we never got a receipt\n // Might happen for network reasons\n this.message = `Transaction reverted after being broadcasted for reason: ${this.reason}`;\n } else {\n this.message = `${this.reason}: ${this.message}`;\n }\n\n this.tags = {\n ...this.tags,\n \"operation.txn.status\": args.txHash ? \"execution\" : \"simulation\",\n ...args.tags,\n };\n\n if (this.to) {\n this.tags[\"operation.txn.to\"] = this.to;\n }\n\n if (this.functionName) {\n this.tags[\"operation.txn.functionName\"] = this.functionName;\n }\n }\n}\n"]}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkC6ZGUO4Hcjs = require('./chunk-C6ZGUO4H.cjs');var _viem = require('viem');function k({cause:e,level:t}){if(e instanceof _viem.BaseError){let n=_chunkC6ZGUO4Hcjs.e.call(void 0, {error:e,revertIfUnknown:!1});if(n.isRequestError&&n.rootCause instanceof _viem.BaseError&&"url"in n.rootCause&&typeof n.rootCause.url=="string")return new (0, _chunkC6ZGUO4Hcjs.g)({cause:n.rootCause,response:void 0,endpoint:{url:n.rootCause.url,type:"rpc"},level:t})}return e instanceof _chunkC6ZGUO4Hcjs.f?e:new (0, _chunkC6ZGUO4Hcjs.f)({cause:e,level:t})}function c(e){return e!=null}function x({value:e,property:t,fn:r}){let n=r(e);if(!n.isValid)throw new (0, _chunkC6ZGUO4Hcjs.h)({property:t,value:e,expected:n.expectedType})}function s({value:e,property:t,fn:r}){x({value:e,property:t,fn:n=>{let l=c(n),{isValid:E,expectedType:v}=r(n);return{expectedType:v,isValid:l&&E}}})}function y(e,t){s({value:e,property:t,fn:r=>({expectedType:"defined",isValid:c(r)})})}function D(e,t="publicClient"){y(e,t)}function K(e,t){s({value:e,property:t,fn:r=>({expectedType:"Address",isValid:typeof r=="string"&&_viem.isAddress.call(void 0, r)})})}function M(e,t){s({value:e,property:t,fn:r=>({expectedType:"number",isValid:(typeof r=="string"||typeof r=="number")&&Number(r)>0})})}function f(){let e={};return{emit(t,...r){for(let n of e[t]||[])n(...r)},events:e,on(t,r){return e[t]||(e[t]=[]),e[t].push(r),()=>{e[t]=_optionalChain([e, 'access', _2 => _2[t], 'optionalAccess', _3 => _3.filter, 'call', _4 => _4(n=>r!==n)])}}}}var d=f(),_= exports.f ={captureException(e){let t={exception:e,timestamp:Date.now()};d.emit("exception",t)},on(...e){return d.on(...e)}};exports.a = k; exports.b = y; exports.c = D; exports.d = K; exports.e = M; exports.f = _;
2
- //# sourceMappingURL=chunk-7LNBSOVV.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-7LNBSOVV.cjs","../src/errors/initBeraError.ts","../src/errors/assert.ts","../src/utils/createEmitter.ts","../src/errors/BeraMonitoring.ts"],"names":["initBeraError","error","level","BaseError","parsed","parseViemError","RequestError","BeraError","_isDefined","value","_assert","property","fn","result","InvalidArgumentError","_assertDefined","isDefined","isValid","expectedType","assertDefined","assertPublicClient","assertAddress","isAddress","assertAmount","createEmitter","events","event","args","callback","cb","i","_emitter","BeraMonitoring","exception"],"mappings":"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","file":"/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-7LNBSOVV.cjs","sourcesContent":[null,"import { BaseError } from \"viem\";\n\nimport { BeraError } from \"./BeraError\";\nimport { parseViemError } from \"./parseViemError\";\nimport { RequestError } from \"./RequestError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * The preferred way to normalize any unknown error into a BeraError.\n *\n * This function acts as a smart factory that picks the correct BeraError subclass:\n *\n * 1. If `cause` is already a `BeraError`, returns it as-is (no double-wrapping).\n * 2. If `cause` is a viem `BaseError`, runs `parseViemError` to classify it:\n * - If the root cause is an `HttpRequestError` (RPC transport failure), wraps it\n * in a `RequestError` with the endpoint URL extracted from the error.\n * 3. Otherwise, wraps in a new `BeraError` — which triggers the automatic reason\n * detection pipeline in the BeraError constructor (parseViemError → errorMap → displayMessage).\n *\n * **Use this instead of `new BeraError({ cause })` when you don't know the error type.**\n * It ensures RequestErrors are correctly classified (important for Sentry filtering\n * and fingerprinting — RequestErrors are skipped from transaction error grouping).\n *\n * @example\n * ```ts\n * try {\n * await someOperation();\n * } catch (error) {\n * // Normalizes to the right subclass, reason auto-detected\n * throw initBeraError({ cause: error });\n * }\n * ```\n *\n * @example\n * ```ts\n * // Reporting to Sentry without rethrowing\n * catch (error) {\n * captureException(initBeraError({ cause: error }));\n * }\n * ```\n */\nexport function initBeraError({\n cause: error,\n level,\n}: {\n cause: unknown;\n /**\n * The severity level of the error, only used if the error is not a BeraError.\n */\n level?: SeverityLevel;\n}): BeraError {\n // ── Step 1: Check if it's a viem BaseError that wraps an RPC transport failure ──\n // parseViemError with revertIfUnknown=false won't throw — it returns { reason: undefined }\n // if the error chain doesn't match any known type.\n if (error instanceof BaseError) {\n const parsed = parseViemError({\n error,\n revertIfUnknown: false,\n });\n if (\n parsed.isRequestError &&\n parsed.rootCause instanceof BaseError &&\n \"url\" in parsed.rootCause &&\n typeof parsed.rootCause.url === \"string\"\n ) {\n // RPC transport failure (e.g. HTTP 502 from the RPC endpoint).\n // Wrapping in RequestError gives it proper endpoint tagging and level=\"warning\".\n return new RequestError({\n cause: parsed.rootCause,\n response: undefined,\n endpoint: {\n url: parsed.rootCause.url as string,\n type: \"rpc\",\n },\n level,\n });\n }\n }\n\n // ── Step 2: Return as-is if already a BeraError, otherwise wrap ──────────\n // The BeraError constructor will run automatic reason detection on the cause.\n const err =\n error instanceof BeraError\n ? error\n : new BeraError({\n cause: error,\n level,\n });\n\n return err;\n}\n","import type { GetPublicClientReturnType } from \"@wagmi/core\";\nimport { type Address, isAddress, type PublicClient } from \"viem\";\n\nimport { InvalidArgumentError } from \"./InvalidArgumentError\";\n\nfunction _isDefined<T>(value: T): value is NonNullable<T> {\n return value !== undefined && value !== null;\n}\n\ntype _AssertFn<T> = (value: T) => { expectedType: string; isValid: boolean };\n\n/**\n * Internal assertion function.\n * @throws An InvalidArgumentError if the value is not valid.\n */\nfunction _assert<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: _AssertFn<T>;\n}) {\n const result = fn(value);\n if (!result.isValid) {\n throw new InvalidArgumentError({\n property,\n value,\n expected: result.expectedType,\n });\n }\n}\n\nfunction _assertDefined<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: (value: T) => { expectedType: string; isValid: boolean };\n}) {\n _assert({\n value,\n property,\n fn: (value) => {\n const isDefined = _isDefined(value);\n const { isValid, expectedType } = fn(value);\n return {\n expectedType,\n isValid: isDefined && isValid,\n };\n },\n });\n}\n\n/**\n * Asserts that a value is defined.\n * @throws An InvalidArgumentError if the value is undefined or null.\n */\nexport function assertDefined<T>(\n /**\n * The value to assert.\n */\n value: T,\n /**\n * The property name.\n */\n property: string,\n): asserts value is NonNullable<T> {\n _assertDefined({\n value,\n property,\n fn: (value) => ({ expectedType: \"defined\", isValid: _isDefined(value) }),\n });\n}\n\n/**\n * Asserts that a value is a PublicClient.\n * @throws An InvalidArgumentError if the value is undefined or not a PublicClient.\n */\nexport function assertPublicClient(\n /**\n * The value to assert.\n */\n value: // it's important to have both types here because it helps with typescript build performance\n PublicClient | GetPublicClientReturnType | undefined,\n /**\n * The property name.\n */\n property: string = \"publicClient\",\n): asserts value is PublicClient {\n // there's no current way to check if a value is a PublicClient, so we just assert it's defined and `value: PublicClient` will do the rest\n assertDefined(value, property);\n}\n\n/**\n * Asserts that a value is an address (20 bytes).\n * @throws An InvalidArgumentError if the value is undefined, null, not a string, or not an address.\n */\nexport function assertAddress(\n /**\n * The value to assert.\n */\n value: string | undefined | null,\n /**\n * The property name.\n */\n property: string,\n): asserts value is Address {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"Address\",\n isValid: typeof value === \"string\" && isAddress(value),\n }),\n });\n}\n\n/**\n * Asserts that a value is a number greater than 0.\n * @throws An InvalidArgumentError if the value is undefined, null, not a string or number, or not a number greater than 0.\n */\nexport function assertAmount(\n /**\n * The value to assert.\n */\n value: unknown,\n /**\n * The property name.\n */\n property: string,\n): asserts value is string | number {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"number\",\n isValid:\n (typeof value === \"string\" || typeof value === \"number\") &&\n Number(value) > 0,\n }),\n });\n}\n","interface EventsMap {\n [event: string]: any;\n}\n\ninterface DefaultEvents extends EventsMap {\n [event: string]: (...args: any) => void;\n}\n\nexport type Unsubscribe = () => void;\n\nexport interface Emitter<Events extends EventsMap = DefaultEvents> {\n /**\n * Calls each of the listeners registered for a given event.\n *\n * ```js\n * ee.emit('tick', tickType, tickDuration)\n * ```\n *\n * @param event The event name.\n * @param args The arguments for listeners.\n */\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void;\n\n /**\n * Add a listener for a given event.\n *\n * ```js\n * const unbind = ee.on('tick', (tickType, tickDuration) => {\n * count += 1\n * })\n *\n * disable () {\n * unbind()\n * }\n * ```\n *\n * @param event The event name.\n * @param cb The listener function.\n * @returns Unbind listener from event.\n */\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n events: Partial<{ [E in keyof Events]: Events[E][] }>;\n}\n\n/**\n * An interface for mixins that expose the `on` function (without the emitter\n * bound to `this`)\n *\n * ```js\n * import { createEmitter } from '~utils/createEmitter'\n *\n * class Ticker implements EmitterMixin<Events> {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n */\nexport interface EmitterMixin<Events extends EventsMap = DefaultEvents> {\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n}\n\n/**\n * Create event emitter.\n *\n * ```js\n * import { createEmitter } from '~/utils/createEmitter'\n *\n * class Ticker {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n *\n * Inspired by {@link https://github.com/ai/nanoevents}\n */\nexport function createEmitter<\n Events extends EventsMap = DefaultEvents,\n>(): Emitter<Events> {\n /**\n * Event names in keys and arrays with listeners in values.\n *\n * ```js\n * emitter1.events = emitter2.events\n * emitter2.events = { }\n * ```\n */\n const events: Partial<{ [E in keyof Events]: Events[E][] }> = {};\n\n return {\n emit(event, ...args) {\n for (const callback of events[event] || []) {\n callback(...args);\n }\n },\n events,\n on(event, cb) {\n if (!events[event]) {\n events[event] = [];\n }\n\n events[event].push(cb);\n\n return () => {\n events[event] = events[event]?.filter((i) => cb !== i);\n };\n },\n };\n}\n","import { createEmitter, type EmitterMixin } from \"~/utils/createEmitter\";\nimport type { BeraError } from \"./BeraError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * Context passed alongside captured exceptions.\n * Mirrors the subset of Sentry's CaptureContext that berajs actually uses.\n */\nexport interface CaptureContext {\n level: SeverityLevel;\n extra?: Record<string, unknown>;\n tags?: Record<string, string | number | boolean | null | undefined>;\n fingerprint?: string[];\n data?: Record<string, unknown>;\n}\n\nexport interface ErrorEvent {\n exception: BeraError;\n timestamp: number;\n}\n\nconst _emitter = createEmitter<{ exception: (event: ErrorEvent) => void }>();\n\n/**\n * A generic error reporter for berajs.\n *\n * Instead of calling Sentry.captureException directly, berajs calls\n * `BeraMonitoring.captureException()`. Consumer apps subscribe via `.on()` and\n * forward events to their monitoring provider (Sentry, Datadog, etc.).\n *\n * @example\n * ```ts\n * // In berajs code:\n * import { BeraMonitoring } from \"~/errors/BeraMonitoring\";\n * BeraMonitoring.captureExceptionException(error);\n *\n * // In app instrumentation:\n * import { BeraMonitoring } from \"@berachain/berajs/errors\";\n * BeraMonitoring.on((event) => {\n * if (event.type === \"exception\") {\n * Sentry.captureException(event.exception);\n * }\n * });\n * ```\n */\nexport const BeraMonitoring: {\n captureException: (exception: BeraError) => void;\n} & EmitterMixin<{ exception: (event: ErrorEvent) => void }> = {\n /**\n * Capture an exception. Notifies all subscribers.\n */\n captureException(exception: BeraError): void {\n const event: ErrorEvent = {\n exception,\n timestamp: Date.now(),\n };\n _emitter.emit(\"exception\", event);\n },\n /**\n * Subscribe to error events.\n * @returns An unsubscribe function.\n */\n on(...args) {\n return _emitter.on(...args);\n },\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/actions/clients/getEnsoClient.ts","../src/actions/tokens/getWalletBalances.ts"],"sourcesContent":["import { EnsoClient } from \"@ensofinance/sdk\";\n\nimport { appConfig } from \"@berachain/config/internal\";\n\nimport { parseBaseArgs } from \"~/utils/parseBaseArgs\";\n\nconst isProduction =\n process.env.NODE_ENV !== \"development\" && process.env.NODE_ENV !== \"test\";\n\nexport function getEnsoClient({\n useProxy = isProduction,\n ...args\n}: BeraJS.BaseFunctionArgs & { useProxy?: boolean } = {}) {\n const { config } = parseBaseArgs(args);\n return new EnsoClient({\n baseURL: useProxy\n ? `${config.bex.aggregatorsProxyUrl}/enso/api/v1/`\n : undefined,\n apiKey: useProxy\n ? // no API key since proxy has CORS for .berachain.com domains\n \"\"\n : appConfig.apiKeys.public.enso,\n });\n}\n","import { type Config, getChainId, getPublicClient } from \"@wagmi/core\";\nimport {\n type Address,\n type ContractFunctionParameters,\n erc20Abi,\n formatUnits,\n isAddress,\n} from \"viem\";\n\nimport { multicall3Abi } from \"~/abi/utils/multicall3\";\nimport {\n assertAddress,\n assertDefined,\n assertPublicClient,\n} from \"~/errors/assert\";\nimport type { BalanceToken, Token } from \"~/types/dex\";\nimport { isToken } from \"~/utils/tokens\";\n\nexport interface GetWalletBalances {\n account: string | undefined;\n tokenList: Token[] | undefined;\n wagmiConfig: Config | undefined;\n}\n\n/**\n * Returns the payload for the balanceOf call for a given token and account.\n *\n * @internal\n * @returns\n */\nexport function getBalanceCall({\n token,\n account,\n multicallAddress,\n}: {\n token: Token;\n account: Address;\n multicallAddress: Address;\n}) {\n if (isToken(token, \"BERA\") || isToken(token, \"ETH\")) {\n return {\n address: multicallAddress,\n abi: multicall3Abi,\n functionName: \"getEthBalance\",\n args: [account],\n } as const satisfies ContractFunctionParameters<\n typeof multicall3Abi,\n \"view\",\n \"getEthBalance\"\n >;\n }\n return {\n address: token.address as Address,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [account],\n } as const satisfies ContractFunctionParameters<\n typeof erc20Abi,\n \"view\",\n \"balanceOf\"\n >;\n}\n\n/**\n * fetch the balances of a given wallet address\n */\nexport async function getWalletBalances({\n account,\n tokenList,\n wagmiConfig: config,\n}: GetWalletBalances): Promise<BalanceToken[] | undefined> {\n assertDefined(config, \"config\");\n if (!account || !tokenList)\n throw new Error(\"account or tokenList is not defined\");\n\n assertAddress(account, \"account\");\n\n const filteredTokenList = tokenList.filter((token) =>\n isAddress(token.address),\n );\n\n const tokensByChainId = Object.groupBy(\n filteredTokenList,\n (token) => token.chainId ?? getChainId(config),\n );\n\n const res = await Promise.allSettled(\n Object.entries(tokensByChainId).map(async ([chainId, tokens]) => {\n assertDefined(tokens, \"tokens\");\n const publicClient = getPublicClient(config, {\n chainId: Number(chainId),\n });\n assertPublicClient(publicClient, `publicClient ${chainId}`);\n assertDefined(publicClient.chain, \"publicClient.chain\");\n assertDefined(\n publicClient.chain.contracts,\n \"publicClient.chain.contracts\",\n );\n assertDefined(\n publicClient.chain.contracts.multicall3,\n \"publicClient.chain.contracts.multicall3\",\n );\n\n const { multicall3 } = publicClient.chain.contracts;\n\n const multicall3Address =\n typeof multicall3 === \"string\" ? multicall3 : multicall3.address;\n\n assertAddress(multicall3Address, \"multicall3Address\");\n\n const call = tokens.map((token: Token) =>\n getBalanceCall({\n token,\n account,\n multicallAddress: multicall3Address,\n }),\n );\n\n const result = await publicClient.multicall({\n contracts: call,\n });\n\n return result.map((item, index) => {\n const token = tokens[index];\n if (item.error) {\n return { ...token, balance: { raw: \"0\", formatted: \"0\" } };\n }\n const formattedBalance = formatUnits(\n item.result,\n token?.decimals || 18,\n );\n\n const resultBalanceToken: BalanceToken = {\n ...token,\n balance: {\n raw: item.result.toString(),\n // TODO: this was done 10 months ago, i'm not sure it's a good solution.\n formatted: formattedBalance.includes(\"e\") ? \"0\" : formattedBalance,\n },\n } satisfies BalanceToken;\n return resultBalanceToken;\n });\n }),\n );\n\n return res.flatMap((result) =>\n result.status === \"fulfilled\" ? result.value : [],\n );\n}\n"],"mappings":"gJAAA,OAAS,cAAAA,MAAkB,mBAE3B,OAAS,aAAAC,MAAiB,6BAI1B,IAAMC,EACJ,QAAQ,IAAI,WAAa,eAAiB,QAAQ,IAAI,WAAa,OAE9D,SAASC,EAAc,CAC5B,SAAAC,EAAWF,EACX,GAAGG,CACL,EAAsD,CAAC,EAAG,CACxD,GAAM,CAAE,OAAAC,CAAO,EAAIC,EAAcF,CAAI,EACrC,OAAO,IAAIG,EAAW,CACpB,QAASJ,EACL,GAAGE,EAAO,IAAI,mBAAmB,gBACjC,OACJ,OAAQF,EAEJ,GACAK,EAAU,QAAQ,OAAO,IAC/B,CAAC,CACH,CCvBA,OAAsB,cAAAC,EAAY,mBAAAC,MAAuB,cACzD,OAGE,YAAAC,EACA,eAAAC,EACA,aAAAC,MACK,OAuBA,SAASC,EAAe,CAC7B,MAAAC,EACA,QAAAC,EACA,iBAAAC,CACF,EAIG,CACD,OAAIC,EAAQH,EAAO,MAAM,GAAKG,EAAQH,EAAO,KAAK,EACzC,CACL,QAASE,EACT,IAAKE,EACL,aAAc,gBACd,KAAM,CAACH,CAAO,CAChB,EAMK,CACL,QAASD,EAAM,QACf,IAAKK,EACL,aAAc,YACd,KAAM,CAACJ,CAAO,CAChB,CAKF,CAKA,eAAsBK,EAAkB,CACtC,QAAAL,EACA,UAAAM,EACA,YAAaC,CACf,EAA2D,CAEzD,GADAC,EAAcD,EAAQ,QAAQ,EAC1B,CAACP,GAAW,CAACM,EACf,MAAM,IAAI,MAAM,qCAAqC,EAEvDG,EAAcT,EAAS,SAAS,EAEhC,IAAMU,EAAoBJ,EAAU,OAAQP,GAC1CY,EAAUZ,EAAM,OAAO,CACzB,EAEMa,EAAkB,OAAO,QAC7BF,EACCX,GAAUA,EAAM,SAAWc,EAAWN,CAAM,CAC/C,EA6DA,OA3DY,MAAM,QAAQ,WACxB,OAAO,QAAQK,CAAe,EAAE,IAAI,MAAO,CAACE,EAASC,CAAM,IAAM,CAC/DP,EAAcO,EAAQ,QAAQ,EAC9B,IAAMC,EAAeC,EAAgBV,EAAQ,CAC3C,QAAS,OAAOO,CAAO,CACzB,CAAC,EACDI,EAAmBF,EAAc,gBAAgBF,CAAO,EAAE,EAC1DN,EAAcQ,EAAa,MAAO,oBAAoB,EACtDR,EACEQ,EAAa,MAAM,UACnB,8BACF,EACAR,EACEQ,EAAa,MAAM,UAAU,WAC7B,yCACF,EAEA,GAAM,CAAE,WAAAG,CAAW,EAAIH,EAAa,MAAM,UAEpCI,EACJ,OAAOD,GAAe,SAAWA,EAAaA,EAAW,QAE3DV,EAAcW,EAAmB,mBAAmB,EAEpD,IAAMC,EAAON,EAAO,IAAKhB,GACvBD,EAAe,CACb,MAAAC,EACA,QAAAC,EACA,iBAAkBoB,CACpB,CAAC,CACH,EAMA,OAJe,MAAMJ,EAAa,UAAU,CAC1C,UAAWK,CACb,CAAC,GAEa,IAAI,CAACC,EAAMC,IAAU,CACjC,IAAMxB,EAAQgB,EAAOQ,CAAK,EAC1B,GAAID,EAAK,MACP,MAAO,CAAE,GAAGvB,EAAO,QAAS,CAAE,IAAK,IAAK,UAAW,GAAI,CAAE,EAE3D,IAAMyB,EAAmBC,EACvBH,EAAK,OACLvB,GAAO,UAAY,EACrB,EAUA,MARyC,CACvC,GAAGA,EACH,QAAS,CACP,IAAKuB,EAAK,OAAO,SAAS,EAE1B,UAAWE,EAAiB,SAAS,GAAG,EAAI,IAAMA,CACpD,CACF,CAEF,CAAC,CACH,CAAC,CACH,GAEW,QAASE,GAClBA,EAAO,SAAW,YAAcA,EAAO,MAAQ,CAAC,CAClD,CACF","names":["EnsoClient","appConfig","isProduction","getEnsoClient","useProxy","args","config","parseBaseArgs","EnsoClient","appConfig","getChainId","getPublicClient","erc20Abi","formatUnits","isAddress","getBalanceCall","token","account","multicallAddress","isToken","multicall3Abi","erc20Abi","getWalletBalances","tokenList","config","assertDefined","assertAddress","filteredTokenList","isAddress","tokensByChainId","getChainId","chainId","tokens","publicClient","getPublicClient","assertPublicClient","multicall3","multicall3Address","call","item","index","formattedBalance","formatUnits","result"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors/BeraTracing.ts","../src/errors/NotFoundError.ts","../src/errors/TransactionFailedError.ts"],"sourcesContent":["import type { Unsubscribe } from \"~/utils/createEmitter\";\n\n/**\n * Span context passed to tracing handlers.\n * Compatible with Sentry's StartSpanOptions (name, op, attributes).\n */\nexport type SpanContext = {\n name: string;\n op: string;\n attributes: Record<string, string | number | boolean | undefined>;\n};\n\n/**\n * A function that wraps a callback in a tracing span.\n * Compatible with Sentry.startSpan's signature.\n */\ntype StartSpanFn = <T>(\n context: SpanContext,\n callback: () => Promise<T>,\n) => Promise<T>;\n\nconst _handlers: StartSpanFn[] = [];\n\n/**\n * A generic span-tracing module for berajs.\n *\n * Instead of calling Sentry.startSpan directly, berajs calls\n * `BeraTracing.startSpan()`. Consumer apps subscribe via `.on(\"span\", handler)`\n * and forward spans to their tracing provider (Sentry, Datadog, etc.).\n *\n * Multiple handlers are supported and chain in registration order:\n * the first registered handler is the outermost wrapper.\n *\n * @example\n * ```ts\n * // In berajs code:\n * import { BeraTracing } from \"~/errors/BeraTracing\";\n * const result = await BeraTracing.startSpan(\n * { name: \"GraphQL query\", op: \"graphql.query\", attributes: {} },\n * () => executeQuery(),\n * );\n *\n * // In app instrumentation:\n * import { BeraTracing } from \"@berachain/berajs/errors\";\n * BeraTracing.addSpanHandler(Sentry.startSpan);\n * ```\n */\nexport const BeraTracing = {\n /**\n * Execute a callback, wrapping it in all registered span handlers.\n *\n * Handlers chain so each wraps the next. First registered = outermost wrapper.\n * If no handlers are registered, the callback is executed directly.\n */\n startSpan<T>(context: SpanContext, callback: () => Promise<T>): Promise<T> {\n if (_handlers.length === 0) return callback();\n\n // Chain: h1(ctx, () => h2(ctx, () => h3(ctx, () => callback())))\n return _handlers.reduceRight<() => Promise<T>>(\n (next, handler) => () => handler(context, next),\n callback,\n )();\n },\n\n /**\n * Register a span tracing handler.\n *\n * @param _event - Must be \"span\". Exists for API consistency with BeraMonitoring.\n * @param handler - A StartSpanFn, e.g. Sentry.startSpan.\n * @returns An unsubscribe function to remove the handler.\n */\n addSpanHandler(handler: StartSpanFn): Unsubscribe {\n _handlers.push(handler);\n return () => {\n const idx = _handlers.indexOf(handler);\n if (idx !== -1) _handlers.splice(idx, 1);\n };\n },\n};\n","import { BeraError, type IBeraErrorArgs } from \"./BeraError\";\n\nexport interface INotFoundErrorArgs extends IBeraErrorArgs {\n resource: string;\n id: string;\n chainId: number;\n}\n\n/**\n * Error thrown when a resource is not found.\n */\nexport class NotFoundError extends BeraError {\n /**\n * The name of the resource that was not found.\n *\n * @example \"Reward vault\"\n */\n resource: string;\n /**\n * The id of the resource that was not found.\n *\n * @example \"0x1234567890123456789012345678901234567890\"\n */\n id: string;\n\n constructor(args: INotFoundErrorArgs) {\n super(args);\n this.name = \"NotFoundError\";\n this.level = args.level ?? \"info\";\n this.message = `Resource ${args.resource} with id ${args.id} not found`;\n this.resource = args.resource;\n this.id = args.id;\n }\n}\n","import type { Hex } from \"@berachain-foundation/berancer-sdk\";\nimport type { Address, TransactionReceipt } from \"viem\";\n\nimport { BeraError, type IBeraErrorArgs } from \"./BeraError\";\n\n/**\n * This error is generally thrown by beraWriteContract when a transaction or simulation fails.\n */\nexport class TransactionFailedError extends BeraError {\n /**\n * The hash of the transaction that failed.\n *\n * Null if the error is due to a simulation failure.\n */\n txHash: string | null;\n\n /**\n * The receipt of the transaction that failed.\n *\n * Null if the error is due to a simulation failure.\n */\n receipt: TransactionReceipt | null;\n\n /**\n * The address of the contract that was called.\n */\n to: Address | undefined;\n\n /**\n * The data of the transaction that failed.\n */\n callData: Hex | undefined;\n\n /**\n * The block number of the transaction that failed.\n */\n blockNumber: bigint | null = null;\n\n /**\n * The input of the transaction that failed.\n */\n input: object;\n\n /**\n * The function name of the transaction that failed.\n */\n functionName: string | undefined;\n\n constructor(\n args: IBeraErrorArgs & {\n txHash?: string;\n receipt?: TransactionReceipt;\n to?: Address;\n blockNumber?: bigint;\n functionName?: string;\n input: object;\n },\n ) {\n super(args);\n this.name = \"TransactionFailedError\";\n this.txHash = args.txHash || null;\n this.receipt = args.receipt || null;\n this.to = args.to;\n this.functionName = args.functionName;\n this.blockNumber = args.blockNumber ?? null;\n this.input = args.input;\n\n if (this.receipt) {\n // If we have a receipt, transaction reverted on chain\n this.message = `Transaction reverted on chain for reason: ${this.reason}`;\n } else if (this.txHash) {\n // If we have a tx hash, transaction reverted after being broadcasted but we never got a receipt\n // Might happen for network reasons\n this.message = `Transaction reverted after being broadcasted for reason: ${this.reason}`;\n } else {\n this.message = `${this.reason}: ${this.message}`;\n }\n\n this.tags = {\n ...this.tags,\n \"operation.txn.status\": args.txHash ? \"execution\" : \"simulation\",\n ...args.tags,\n };\n\n if (this.to) {\n this.tags[\"operation.txn.to\"] = this.to;\n }\n\n if (this.functionName) {\n this.tags[\"operation.txn.functionName\"] = this.functionName;\n }\n }\n}\n"],"mappings":"yCAqBA,IAAMA,EAA2B,CAAC,EA0BrBC,EAAc,CAOzB,UAAaC,EAAsBC,EAAwC,CACzE,OAAIH,EAAU,SAAW,EAAUG,EAAS,EAGrCH,EAAU,YACf,CAACI,EAAMC,IAAY,IAAMA,EAAQH,EAASE,CAAI,EAC9CD,CACF,EAAE,CACJ,EASA,eAAeE,EAAmC,CAChD,OAAAL,EAAU,KAAKK,CAAO,EACf,IAAM,CACX,IAAMC,EAAMN,EAAU,QAAQK,CAAO,EACjCC,IAAQ,IAAIN,EAAU,OAAOM,EAAK,CAAC,CACzC,CACF,CACF,ECnEO,IAAMC,EAAN,cAA4BC,CAAU,CAM3C,SAMA,GAEA,YAAYC,EAA0B,CACpC,MAAMA,CAAI,EACV,KAAK,KAAO,gBACZ,KAAK,MAAQA,EAAK,OAAS,OAC3B,KAAK,QAAU,YAAYA,EAAK,QAAQ,YAAYA,EAAK,EAAE,aAC3D,KAAK,SAAWA,EAAK,SACrB,KAAK,GAAKA,EAAK,EACjB,CACF,ECzBO,IAAMC,EAAN,cAAqCC,CAAU,CAMpD,OAOA,QAKA,GAKA,SAKA,YAA6B,KAK7B,MAKA,aAEA,YACEC,EAQA,CACA,MAAMA,CAAI,EACV,KAAK,KAAO,yBACZ,KAAK,OAASA,EAAK,QAAU,KAC7B,KAAK,QAAUA,EAAK,SAAW,KAC/B,KAAK,GAAKA,EAAK,GACf,KAAK,aAAeA,EAAK,aACzB,KAAK,YAAcA,EAAK,aAAe,KACvC,KAAK,MAAQA,EAAK,MAEd,KAAK,QAEP,KAAK,QAAU,6CAA6C,KAAK,MAAM,GAC9D,KAAK,OAGd,KAAK,QAAU,4DAA4D,KAAK,MAAM,GAEtF,KAAK,QAAU,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO,GAGhD,KAAK,KAAO,CACV,GAAG,KAAK,KACR,uBAAwBA,EAAK,OAAS,YAAc,aACpD,GAAGA,EAAK,IACV,EAEI,KAAK,KACP,KAAK,KAAK,kBAAkB,EAAI,KAAK,IAGnC,KAAK,eACP,KAAK,KAAK,4BAA4B,EAAI,KAAK,aAEnD,CACF","names":["_handlers","BeraTracing","context","callback","next","handler","idx","NotFoundError","BeraError","args","TransactionFailedError","BeraError","args"]}