@berachain/berajs 0.2.8-beta.1 → 0.2.8-beta.11

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 (222) hide show
  1. package/dist/RequestError-BRIiJgHk.d.ts +144 -0
  2. package/dist/RequestError-DSUzJ1Iy.d.cts +144 -0
  3. package/dist/abi/exports.cjs.map +1 -1
  4. package/dist/abi/exports.mjs +1 -1
  5. package/dist/actions/exports.cjs +1 -1
  6. package/dist/actions/exports.cjs.map +1 -1
  7. package/dist/actions/exports.d.cts +22 -105
  8. package/dist/actions/exports.d.ts +22 -105
  9. package/dist/actions/exports.mjs +1 -1
  10. package/dist/actions/exports.mjs.map +1 -1
  11. package/dist/actions/governance/exports.cjs +2 -0
  12. package/dist/actions/governance/exports.cjs.map +1 -0
  13. package/dist/actions/governance/exports.d.cts +140 -0
  14. package/dist/actions/governance/exports.d.ts +140 -0
  15. package/dist/actions/governance/exports.mjs +2 -0
  16. package/dist/actions/governance/exports.mjs.map +1 -0
  17. package/dist/chunk-33XNWMPP.cjs +2 -0
  18. package/dist/chunk-33XNWMPP.cjs.map +1 -0
  19. package/dist/chunk-4TALWNXE.cjs +2 -0
  20. package/dist/chunk-4TALWNXE.cjs.map +1 -0
  21. package/dist/chunk-54BTOQE3.cjs +2 -0
  22. package/dist/chunk-54BTOQE3.cjs.map +1 -0
  23. package/dist/chunk-5QAFKFM5.mjs +2 -0
  24. package/dist/chunk-5QAFKFM5.mjs.map +1 -0
  25. package/dist/chunk-6DIA6PXV.cjs +2 -0
  26. package/dist/chunk-6DIA6PXV.cjs.map +1 -0
  27. package/dist/{chunk-NMH7LHPW.cjs → chunk-6JJIZCVY.cjs} +2 -2
  28. package/dist/chunk-6JJIZCVY.cjs.map +1 -0
  29. package/dist/chunk-BE6B4PQF.cjs +2 -0
  30. package/dist/chunk-BE6B4PQF.cjs.map +1 -0
  31. package/dist/chunk-CHFETMC6.cjs +4 -0
  32. package/dist/chunk-CHFETMC6.cjs.map +1 -0
  33. package/dist/{chunk-I7M43BB4.cjs → chunk-D6L7LTA2.cjs} +2 -2
  34. package/dist/chunk-D6L7LTA2.cjs.map +1 -0
  35. package/dist/chunk-DDEQFR3M.cjs.map +1 -1
  36. package/dist/chunk-ENT2OSXT.mjs +2 -0
  37. package/dist/chunk-ENT2OSXT.mjs.map +1 -0
  38. package/dist/{chunk-74QD4JAH.mjs → chunk-GXV2JA36.mjs} +2 -2
  39. package/dist/chunk-GXV2JA36.mjs.map +1 -0
  40. package/dist/chunk-H6ZO4SLB.mjs +4 -0
  41. package/dist/chunk-H6ZO4SLB.mjs.map +1 -0
  42. package/dist/chunk-JDDRTHFG.mjs +2 -0
  43. package/dist/chunk-JDDRTHFG.mjs.map +1 -0
  44. package/dist/{chunk-T5FSQ3YE.mjs → chunk-JDZGYU5T.mjs} +2 -2
  45. package/dist/{chunk-T5FSQ3YE.mjs.map → chunk-JDZGYU5T.mjs.map} +1 -1
  46. package/dist/chunk-JIPSTWKO.mjs +2 -0
  47. package/dist/{chunk-KI66MQ43.mjs.map → chunk-JIPSTWKO.mjs.map} +1 -1
  48. package/dist/chunk-JSTCUTXP.cjs +2 -0
  49. package/dist/chunk-JSTCUTXP.cjs.map +1 -0
  50. package/dist/{chunk-MJZHJFZO.mjs → chunk-JXM5S4IU.mjs} +2 -2
  51. package/dist/chunk-K5L2B4DU.mjs +2 -0
  52. package/dist/{chunk-EFG3OYYQ.mjs.map → chunk-K5L2B4DU.mjs.map} +1 -1
  53. package/dist/chunk-KUQEX7H3.mjs +2 -0
  54. package/dist/chunk-KUQEX7H3.mjs.map +1 -0
  55. package/dist/chunk-NXXMW2O7.mjs +2 -0
  56. package/dist/chunk-NXXMW2O7.mjs.map +1 -0
  57. package/dist/chunk-OIYXOKTT.cjs.map +1 -1
  58. package/dist/chunk-OUD27MU7.cjs.map +1 -1
  59. package/dist/chunk-PRLVZIKD.mjs +2 -0
  60. package/dist/chunk-PRLVZIKD.mjs.map +1 -0
  61. package/dist/chunk-QVIAMSZ6.cjs +2 -0
  62. package/dist/chunk-QVIAMSZ6.cjs.map +1 -0
  63. package/dist/chunk-RCWM55DE.cjs +2 -0
  64. package/dist/chunk-RCWM55DE.cjs.map +1 -0
  65. package/dist/chunk-REWME3FY.cjs +2 -0
  66. package/dist/chunk-REWME3FY.cjs.map +1 -0
  67. package/dist/chunk-RJN36GBU.mjs +2 -0
  68. package/dist/chunk-RJN36GBU.mjs.map +1 -0
  69. package/dist/chunk-RWOICHRW.cjs.map +1 -1
  70. package/dist/chunk-S4CDSVLK.cjs +2 -0
  71. package/dist/chunk-S4CDSVLK.cjs.map +1 -0
  72. package/dist/chunk-WLJHFHKF.mjs +2 -0
  73. package/dist/chunk-WLJHFHKF.mjs.map +1 -0
  74. package/dist/chunk-WRFDB3QJ.cjs.map +1 -1
  75. package/dist/chunk-XNJLSA6P.cjs.map +1 -1
  76. package/dist/chunk-XZC34BHM.cjs +2 -0
  77. package/dist/chunk-XZC34BHM.cjs.map +1 -0
  78. package/dist/chunk-Y2FETC6T.cjs +2 -0
  79. package/dist/chunk-Y2FETC6T.cjs.map +1 -0
  80. package/dist/chunk-ZW2N63FI.mjs +2 -0
  81. package/dist/chunk-ZW2N63FI.mjs.map +1 -0
  82. package/dist/contexts/exports.cjs +1 -1
  83. package/dist/contexts/exports.cjs.map +1 -1
  84. package/dist/contexts/exports.mjs +1 -1
  85. package/dist/contexts/exports.mjs.map +1 -1
  86. package/dist/enum/exports.cjs +1 -1
  87. package/dist/enum/exports.cjs.map +1 -1
  88. package/dist/enum/exports.d.cts +1 -1
  89. package/dist/enum/exports.d.ts +1 -1
  90. package/dist/enum/exports.mjs +1 -1
  91. package/dist/enum/exports.mjs.map +1 -1
  92. package/dist/enum/governance/exports.cjs +2 -0
  93. package/dist/enum/governance/exports.cjs.map +1 -0
  94. package/dist/enum/governance/exports.d.cts +60 -0
  95. package/dist/enum/governance/exports.d.ts +60 -0
  96. package/dist/enum/governance/exports.mjs +2 -0
  97. package/dist/enum/governance/exports.mjs.map +1 -0
  98. package/dist/errors/exports.cjs +1 -1
  99. package/dist/errors/exports.cjs.map +1 -1
  100. package/dist/errors/exports.d.cts +3 -89
  101. package/dist/errors/exports.d.ts +3 -89
  102. package/dist/errors/exports.mjs +1 -1
  103. package/dist/{getValidatorQueuedOperatorAddress-BQXkSFd9.d.cts → getValidatorQueuedOperatorAddress-CPuIw7n5.d.cts} +2 -2
  104. package/dist/{getValidatorQueuedOperatorAddress-DUZOmxLV.d.ts → getValidatorQueuedOperatorAddress-CbZQ0kv2.d.ts} +2 -2
  105. package/dist/{global.d-6aSWIkV_.d.cts → global.d-B9nLZ7ul.d.cts} +3 -239
  106. package/dist/{global.d-SU9Epq0M.d.ts → global.d-ylUk_etZ.d.ts} +3 -239
  107. package/dist/hooks/exports.cjs +3 -3
  108. package/dist/hooks/exports.cjs.map +1 -1
  109. package/dist/hooks/exports.d.cts +19 -198
  110. package/dist/hooks/exports.d.ts +19 -198
  111. package/dist/hooks/exports.mjs +3 -3
  112. package/dist/hooks/exports.mjs.map +1 -1
  113. package/dist/hooks/governance/exports.cjs +2 -0
  114. package/dist/hooks/governance/exports.cjs.map +1 -0
  115. package/dist/hooks/governance/exports.d.cts +181 -0
  116. package/dist/hooks/governance/exports.d.ts +181 -0
  117. package/dist/hooks/governance/exports.mjs +2 -0
  118. package/dist/hooks/governance/exports.mjs.map +1 -0
  119. package/dist/pol.d-o6Iw75bK.d.cts +134 -0
  120. package/dist/pol.d-qR8bGEP5.d.ts +134 -0
  121. package/dist/{txnEnum-CCuQUFlh.d.cts → txnEnum-CwAJN4zV.d.cts} +3 -60
  122. package/dist/{txnEnum-CCuQUFlh.d.ts → txnEnum-CwAJN4zV.d.ts} +3 -60
  123. package/dist/types/exports.cjs.map +1 -1
  124. package/dist/types/exports.d.cts +7 -7
  125. package/dist/types/exports.d.ts +7 -7
  126. package/dist/types/governance/exports.cjs +1 -0
  127. package/dist/types/governance/exports.cjs.map +1 -0
  128. package/dist/types/governance/exports.d.cts +109 -0
  129. package/dist/types/governance/exports.d.ts +109 -0
  130. package/dist/types/governance/exports.mjs +1 -0
  131. package/dist/types/governance/exports.mjs.map +1 -0
  132. package/dist/utils/exports.cjs +1 -1
  133. package/dist/utils/exports.cjs.map +1 -1
  134. package/dist/utils/exports.d.cts +10 -2
  135. package/dist/utils/exports.d.ts +10 -2
  136. package/dist/utils/exports.mjs +1 -1
  137. package/dist/utils/exports.mjs.map +1 -1
  138. package/package.json +49 -8
  139. package/src/actions/clients/BeraApolloClient.ts +9 -0
  140. package/src/actions/clients/getApolloClient.ts +23 -6
  141. package/src/actions/dex/getOnChainPool.ts +1 -1
  142. package/src/actions/enso/getBendMultiplyBundle.ts +9 -2
  143. package/src/actions/enso/util.ts +6 -8
  144. package/src/actions/exports.ts +1 -10
  145. package/src/actions/governance/checkProposalField.ts +108 -54
  146. package/src/actions/governance/computeActualStatus.ts +7 -3
  147. package/src/actions/governance/exports.ts +9 -0
  148. package/src/actions/governance/getAllProposals.ts +15 -8
  149. package/src/actions/governance/getBodyErrors.ts +13 -5
  150. package/src/actions/governance/getDecodedFunctionData.ts +31 -22
  151. package/src/actions/governance/getProposalDetails.ts +8 -4
  152. package/src/actions/governance/getProposalFromTx.ts +19 -10
  153. package/src/actions/governance/getProposalParams.ts +17 -17
  154. package/src/actions/governance/getProposalVotes.ts +7 -3
  155. package/src/actions/governance/getQuorum.ts +7 -7
  156. package/src/actions/governance/parseProposalBody.ts +19 -9
  157. package/src/actions/honey/getChartData.ts +5 -5
  158. package/src/actions/honey/getHoney24hVolume.ts +30 -0
  159. package/src/actions/honey/getHoneyPythPriceOracle.ts +1 -1
  160. package/src/actions/honey/getHoneyRootPriceOracle.ts +1 -1
  161. package/src/actions/pol/getEarnedStakedBeraVault.ts +12 -2
  162. package/src/actions/pol/getRewardVaultBeaconImplementation.ts +1 -1
  163. package/src/actions/pol/getRewardVaultIncentives.ts +2 -2
  164. package/src/actions/pol/getStakingDailyAssets.ts +7 -1
  165. package/src/actions/pol/getTotalStakedAmount.ts +1 -1
  166. package/src/actions/pol/getUserClaimableIncentives.ts +1 -1
  167. package/src/actions/pol/getUserVaultsReward.ts +1 -1
  168. package/src/actions/tokens/getTokenInformation.ts +8 -15
  169. package/src/actions/tokens/getUnderlyingToken.ts +1 -1
  170. package/src/actions/validators/getUserBoosts.ts +1 -1
  171. package/src/enum/exports.ts +0 -1
  172. package/src/enum/governance/exports.ts +1 -0
  173. package/src/enum/txnEnum.ts +2 -0
  174. package/src/errors/BeraError.ts +7 -2
  175. package/src/errors/RequestError.ts +2 -1
  176. package/src/hooks/dex/usePoolHistoricalData.ts +1 -1
  177. package/src/hooks/enso/useBendZapSupply.ts +1 -1
  178. package/src/hooks/exports.ts +1 -15
  179. package/src/hooks/governance/exports.ts +14 -0
  180. package/src/hooks/honey/useHoney24hVolume.ts +16 -0
  181. package/src/hooks/perps/usePythUpdateFee.ts +1 -1
  182. package/src/hooks/validators/useValidatorRewardAllocation.ts +1 -1
  183. package/src/types/exports.ts +0 -1
  184. package/src/types/governance/exports.ts +1 -0
  185. package/src/utils/beraFetch.ts +70 -15
  186. package/src/utils/getErrorResponse.ts +1 -1
  187. package/dist/RequestError-A8XJ6QR9.d.cts +0 -57
  188. package/dist/RequestError-Dk97z8rm.d.ts +0 -57
  189. package/dist/chunk-2EN6PPAW.cjs +0 -2
  190. package/dist/chunk-2EN6PPAW.cjs.map +0 -1
  191. package/dist/chunk-2YBHAMDV.cjs +0 -2
  192. package/dist/chunk-2YBHAMDV.cjs.map +0 -1
  193. package/dist/chunk-57RINXU6.cjs +0 -2
  194. package/dist/chunk-57RINXU6.cjs.map +0 -1
  195. package/dist/chunk-74QD4JAH.mjs.map +0 -1
  196. package/dist/chunk-74WA35RI.cjs +0 -2
  197. package/dist/chunk-74WA35RI.cjs.map +0 -1
  198. package/dist/chunk-7ITWLMO7.cjs +0 -4
  199. package/dist/chunk-7ITWLMO7.cjs.map +0 -1
  200. package/dist/chunk-BEKH5EYT.mjs +0 -2
  201. package/dist/chunk-BEKH5EYT.mjs.map +0 -1
  202. package/dist/chunk-DK42F2ZM.cjs +0 -2
  203. package/dist/chunk-DK42F2ZM.cjs.map +0 -1
  204. package/dist/chunk-EFG3OYYQ.mjs +0 -2
  205. package/dist/chunk-GO5E7UUD.cjs +0 -2
  206. package/dist/chunk-GO5E7UUD.cjs.map +0 -1
  207. package/dist/chunk-I7M43BB4.cjs.map +0 -1
  208. package/dist/chunk-IDFMLLDY.mjs +0 -2
  209. package/dist/chunk-IDFMLLDY.mjs.map +0 -1
  210. package/dist/chunk-JE5GI2OC.mjs +0 -4
  211. package/dist/chunk-JE5GI2OC.mjs.map +0 -1
  212. package/dist/chunk-KI66MQ43.mjs +0 -2
  213. package/dist/chunk-NMH7LHPW.cjs.map +0 -1
  214. package/dist/chunk-NVHV2LDK.cjs +0 -2
  215. package/dist/chunk-NVHV2LDK.cjs.map +0 -1
  216. package/dist/chunk-PLIH6KQM.mjs +0 -2
  217. package/dist/chunk-PLIH6KQM.mjs.map +0 -1
  218. package/dist/chunk-QRAIGQF2.mjs +0 -2
  219. package/dist/chunk-QRAIGQF2.mjs.map +0 -1
  220. package/src/actions/honey/getHoneyGlobalData.ts +0 -21
  221. package/src/hooks/honey/useHoneyGlobalData.ts +0 -23
  222. /package/dist/{chunk-MJZHJFZO.mjs.map → chunk-JXM5S4IU.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/BeraFlags/BeraFlags.tsx","../src/contexts/BexStatusProvider.tsx","../src/contexts/block-time-provider.tsx","../src/contexts/HoneyConfigProvider.tsx","../src/hooks/enso/useEnsoUserTokensWithBalances.ts","../src/actions/enso/getEnsoUserTokensWithBalances.ts","../src/contexts/TokensProvider.tsx","../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 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 { 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 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","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","createContext","useMemo","isFlagEnabled","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
+ {"version":3,"sources":["../src/contexts/BeraFlags/BeraFlags.tsx","../src/contexts/BexStatusProvider.tsx","../src/contexts/block-time-provider.tsx","../src/contexts/HoneyConfigProvider.tsx","../src/hooks/enso/useEnsoUserTokensWithBalances.ts","../src/actions/enso/getEnsoUserTokensWithBalances.ts","../src/contexts/TokensProvider.tsx","../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 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 { 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 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","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","createContext","useMemo","isFlagEnabled","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"]}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } 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 _chunkQVIAMSZ6cjs = require('./chunk-QVIAMSZ6.cjs');var _chunkS4CDSVLKcjs = require('./chunk-S4CDSVLK.cjs');var _chunk6JJIZCVYcjs = require('./chunk-6JJIZCVY.cjs');var _client = require('@apollo/client');var _internal = require('@berachain/config/internal');var l=class extends _client.ApolloClient{constructor(n){super(n),this.url=n.url,this.serviceName=n.name}async query(n){let r=b(n.query),t={url:this.url,type:"graphql",name:this.serviceName},a={"operation.type":"query","operation.source.name":t.name,"operation.source.url":t.url,"operation.source.type":t.type,"operation.source.queryName":r};try{let e=()=>super.query(n),c=await _chunkS4CDSVLKcjs.a.startSpan({name:`GraphQL ${r}`,op:"BeraApolloClient.query",attributes:a},e);if(c.error||c.data===void 0)throw new (0, _chunk6JJIZCVYcjs.f)({level:"fatal",tags:a,message:"Bera Apollo Client: No data returned from query, but error should be thrown since errorPolicy is none"});return{data:c.data}}catch(e){throw!_internal.appConfig.env.isProduction&&console.error("BeraApolloClient error",e),_client.ServerError.is(e)?new (0, _chunk6JJIZCVYcjs.g)({response:e.response,cause:e,statusCode:e.statusCode,endpoint:t,tags:a}):e instanceof TypeError?new (0, _chunk6JJIZCVYcjs.g)({level:"fatal",reason:"TypeError",response:e,cause:e,endpoint:t,tags:a}):new (0, _chunk6JJIZCVYcjs.g)({response:e,tags:a,cause:e,endpoint:t})}}};function b(o){return _optionalChain([o, 'access', _ => _.definitions, 'access', _2 => _2.find, 'call', _3 => _3(r=>r.kind==="OperationDefinition"), 'optionalAccess', _4 => _4.name, 'optionalAccess', _5 => _5.value])}var _http = require('@apollo/client/link/http');var _config = require('@berachain/config');var _api = require('@berachain/graphql/dex/api'); var _api2 = _interopRequireDefault(_api);function E(o){let n=typeof o=="string"?void 0:o.headers,r=!!_internal.currentDapp,t=process.env.VERCEL_ENV==="test",a=_config.getUriFromLink.call(void 0, o),e=typeof o=="string"?"unknown":o.name;return{uri:a,name:e,headers:{...n,"x-graphql-client-name":`berachain.${r?"dapps":t?"test":"berajs"}`,"x-graphql-client-version":`${process.env.VERCEL_TARGET_ENV}.${process.env.VERCEL_GIT_COMMIT_SHA}`}}}function s(o,{ssrMode:n,inMemoryCacheOptions:r}={}){let t=_config.getUriFromLink.call(void 0, o),a=typeof o=="string"?void 0:o.headers,e=typeof o=="string"?void 0:o.name;return!e&&t.includes(_internal.goldskyBaseUrl)&&(e=t.replace(_internal.goldskyBaseUrl,"").replace("/gn","")),new l({url:t,name:_nullishCoalesce(e, () => ("unknown")),link:new (0, _http.HttpLink)({uri:t,headers:a}),defaultOptions:{query:{errorPolicy:"none",fetchPolicy:"no-cache"}},cache:new (0, _client.InMemoryCache)(r),ssrMode:n})}function R(o,{...n}){let{config:r}=_chunkQVIAMSZ6cjs.a.call(void 0, n);switch(o){case"api":return s(E(r.api),{inMemoryCacheOptions:{possibleTypes:_api2.default.possibleTypes}});case"bend.whisk":if(!r.bend.whiskApi)throw new (0, _chunk6JJIZCVYcjs.f)({message:"Bend whisk API is not configured on this chain",level:"error"});return s(r.bend.whiskApi);case"honey.subgraph":return s(r.honey.subgraph);case"pol.subgraph":return s(r.pol.subgraph);case"pol.fees":return s(r.pol.feesSubgraph);case"governance.subgraph":return s(r.governance.subgraph);case"bex.subgraph":return s(r.bex.subgraph)}}exports.a = l; exports.b = R; exports.c = _client.gql;
2
+ //# sourceMappingURL=chunk-JSTCUTXP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-JSTCUTXP.cjs","../src/actions/clients/BeraApolloClient.ts"],"names":["BeraApolloClient","ApolloClient","options","queryName","getQueryName","endpoint","tags","executeQuery","res","BeraTracing"],"mappings":"AAAA,y0BAAwC,wDAAyC,wDAAgD,wCCM1H,sDAEmB,IAYbA,CAAAA,CAAN,MAAA,QAA+BC,oBAAa,CAIvC,WAGV,CACEC,CAAAA,CAUA,CACA,KAAA,CAAMA,CAAO,CAAA,CACb,IAAA,CAAK,GAAA,CAAMA,CAAAA,CAAQ,GAAA,CACnB,IAAA,CAAK,WAAA,CAAcA,CAAAA,CAAQ,IAC7B,CAEA,MAAM,KAAA,CAKJA,CAAAA,CAIC,CACD,IAAMC,CAAAA,CAAYC,CAAAA,CAAaF,CAAAA,CAAQ,KAAK,CAAA,CAEtCG,CAAAA,CAAW,CACf,GAAA,CAAK,IAAA,CAAK,GAAA,CACV,IAAA,CAAM,SAAA,CACN,IAAA,CAAM,IAAA,CAAK,WACb,CAAA,CAEMC,CAAAA,CAAO,CACX,gBAAA,CAAkB,OAAA,CAClB,uBAAA,CAAyBD,CAAAA,CAAS,IAAA,CAClC,sBAAA,CAAwBA,CAAAA,CAAS,GAAA,CACjC,uBAAA,CAAyBA,CAAAA,CAAS,IAAA,CAClC,4BAAA,CAA8BF,CAChC,CAAA,CAEA,GAAI,CACF,IAAMI,CAAAA,CAAe,CAAA,CAAA,EACnB,KAAA,CAAM,KAAA,CACJL,CACF,CAAA,CAEIM,CAAAA,CAAM,MAAMC,mBAAAA,CAAY,SAAA,CAC5B,CACE,IAAA,CAAM,CAAA,QAAA,EAAWN,CAAS,CAAA,CAAA","file":"/Users/liammcaweeney/Work/bera/monobera/packages/berajs/dist/chunk-JSTCUTXP.cjs","sourcesContent":[null,"import {\n ApolloClient,\n type DocumentNode,\n type ErrorLike,\n type OperationVariables,\n ServerError,\n} from \"@apollo/client\";\n\nimport { appConfig } from \"@berachain/config/internal\";\n\nimport { BeraError } from \"../../errors/BeraError\";\nimport { BeraTracing } from \"../../errors/BeraTracing\";\nimport { RequestError } from \"../../errors/RequestError\";\n\n/**\n * This is a wrapper around the ApolloClient that throws a BeraError if the query returns an error or no data.\n *\n * It's mostly a typescript helper that keeps data always defined since we use errorPolicy: \"none\" by default.\n * Such setting will throw an error if the query returns an error, rather than returning an object with undefined data and an error property.\n */\nexport class BeraApolloClient extends ApolloClient {\n /**\n * The URL of the endpoint. Used for error reporting only.\n */\n protected url: string;\n\n protected serviceName: string;\n constructor(\n options: ApolloClient.Options & {\n /**\n * The URL of the endpoint. Used for error reporting only.\n */\n url: string;\n /**\n * The name of the graphql service. Used for error reporting only.\n */\n name: string;\n },\n ) {\n super(options);\n this.url = options.url;\n this.serviceName = options.name;\n }\n\n async query<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n >(\n // We handle errors in our custom logic so we don't need to pass errorPolicy here\n options: Omit<ApolloClient.QueryOptions<TData, TVariables>, \"errorPolicy\">,\n ): Promise<{\n // Only data is returned and we're sure it's not undefined due to errorPolicy\n data: TData;\n }> {\n const queryName = getQueryName(options.query);\n\n const endpoint = {\n url: this.url,\n type: \"graphql\",\n name: this.serviceName,\n } as const;\n\n const tags = {\n \"operation.type\": \"query\",\n \"operation.source.name\": endpoint.name,\n \"operation.source.url\": endpoint.url,\n \"operation.source.type\": endpoint.type,\n \"operation.source.queryName\": queryName,\n };\n\n try {\n const executeQuery = () =>\n super.query<TData, TVariables>(\n options as ApolloClient.QueryOptions<TData, TVariables>,\n );\n\n const res = await BeraTracing.startSpan(\n {\n name: `GraphQL ${queryName}`,\n op: \"BeraApolloClient.query\",\n attributes: tags,\n },\n executeQuery,\n );\n\n if (res.error || res.data === undefined) {\n throw new BeraError({\n level: \"fatal\",\n tags,\n message:\n \"Bera Apollo Client: No data returned from query, but error should be thrown since errorPolicy is none\",\n });\n }\n\n return { data: res.data } as const;\n } catch (error) {\n !appConfig.env.isProduction &&\n console.error(\"BeraApolloClient error\", error);\n\n if (ServerError.is(error)) {\n throw new RequestError({\n // reason: error,\n response: error.response,\n cause: error,\n statusCode: error.statusCode,\n endpoint,\n tags,\n });\n }\n if (error instanceof TypeError) {\n throw new RequestError({\n level: \"fatal\",\n reason: \"TypeError\",\n response: error,\n cause: error,\n endpoint,\n tags,\n });\n }\n throw new RequestError({\n response: error as ErrorLike,\n tags,\n cause: error,\n endpoint,\n });\n }\n }\n}\n\nfunction getQueryName(queryDefinition: DocumentNode) {\n const likelyNode = queryDefinition.definitions.find(\n (def) => def.kind === (\"OperationDefinition\" as const),\n );\n\n return likelyNode?.name?.value;\n}\n"]}
@@ -1,2 +1,2 @@
1
- import{a as t}from"./chunk-PLIH6KQM.mjs";import{c as T,e as a}from"./chunk-IDFMLLDY.mjs";function m(e){return{...e,...a(e,"BERA")&&T}}function d(e){return e.map(r=>m(r))}var g=(e,r,i,o)=>{if(!e||!r||!i||!o)return 0;let n=new t(e).times(i),s=new t(r).times(o);if(n.lt(.01)||s.lt(.01)||n.isZero()||s.isZero())return 0;let u=s.div(n);return Number(new t(1).minus(u).toFixed())};export{m as a,d as b,g as c};
2
- //# sourceMappingURL=chunk-MJZHJFZO.mjs.map
1
+ import{a as t}from"./chunk-JDDRTHFG.mjs";import{b as T,d as a}from"./chunk-WLJHFHKF.mjs";function m(e){return{...e,...a(e,"BERA")&&T}}function d(e){return e.map(r=>m(r))}var g=(e,r,i,o)=>{if(!e||!r||!i||!o)return 0;let n=new t(e).times(i),s=new t(r).times(o);if(n.lt(.01)||s.lt(.01)||n.isZero()||s.isZero())return 0;let u=s.div(n);return Number(new t(1).minus(u).toFixed())};export{m as a,d as b,g as c};
2
+ //# sourceMappingURL=chunk-JXM5S4IU.mjs.map
@@ -0,0 +1,2 @@
1
+ import{a as p}from"./chunk-NAXAZJJY.mjs";import{a as r,b,c as u}from"./chunk-5QAFKFM5.mjs";import{d}from"./chunk-WLJHFHKF.mjs";import{a as g}from"./chunk-KUQEX7H3.mjs";import{EnsoClient as h}from"@ensofinance/sdk";import{appConfig as k}from"@berachain/config/internal";var T=process.env.NODE_ENV!=="development"&&process.env.NODE_ENV!=="test";function U({useProxy:e=T,...n}={}){let{config:a}=g(n);return new h({baseURL:e?`${a.bex.aggregatorsProxyUrl}/enso/api/v1/`:void 0,apiKey:e?"":k.apiKeys.public.enso})}import{getChainId as w,getPublicClient as E}from"@wagmi/core";import{erc20Abi as P,formatUnits as v,isAddress as x}from"viem";function N({token:e,account:n,multicallAddress:a}){return d(e,"BERA")||d(e,"ETH")?{address:a,abi:p,functionName:"getEthBalance",args:[n]}:{address:e.address,abi:P,functionName:"balanceOf",args:[n]}}async function _({account:e,tokenList:n,wagmiConfig:a}){if(r(a,"config"),!e||!n)throw new Error("account or tokenList is not defined");u(e,"account");let C=n.filter(t=>x(t.address)),B=Object.groupBy(C,t=>t.chainId??w(a));return(await Promise.allSettled(Object.entries(B).map(async([t,o])=>{r(o,"tokens");let s=E(a,{chainId:Number(t)});b(s,`publicClient ${t}`),r(s.chain,"publicClient.chain"),r(s.chain.contracts,"publicClient.chain.contracts"),r(s.chain.contracts.multicall3,"publicClient.chain.contracts.multicall3");let{multicall3:c}=s.chain.contracts,f=typeof c=="string"?c:c.address;u(f,"multicall3Address");let A=o.map(i=>N({token:i,account:e,multicallAddress:f}));return(await s.multicall({contracts:A})).map((i,y)=>{let l=o[y];if(i.error)return{...l,balance:{raw:"0",formatted:"0"}};let m=v(i.result,l?.decimals||18);return{...l,balance:{raw:i.result.toString(),formatted:m.includes("e")?"0":m}}})}))).flatMap(t=>t.status==="fulfilled"?t.value:[])}export{U as a,N as b,_ as c};
2
+ //# sourceMappingURL=chunk-K5L2B4DU.mjs.map
@@ -1 +1 @@
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
+ {"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":"wKAAA,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"]}
@@ -0,0 +1,2 @@
1
+ import{h as a}from"./chunk-GXV2JA36.mjs";import{chainConfigs as o,defaultChainId as e}from"@berachain/config/internal";function t(n){let c=n.chainId??e,i=n.config??o[c];if(n.chainId&&n.chainId!==i.chainId)throw new a({property:"chainId",value:c,expected:`config.chainId: ${i.chainId}`});return{config:i,chainId:i.chainId}}export{t as a};
2
+ //# sourceMappingURL=chunk-KUQEX7H3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/parseBaseArgs.ts"],"sourcesContent":["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"],"mappings":"yCAAA,OAEE,gBAAAA,EACA,kBAAAC,MACK,6BAIA,SAASC,EAAcC,EAA+B,CAC3D,IAAMC,EAAUD,EAAK,SAAWE,EAC1BC,EAAqBH,EAAK,QAAUI,EAAaH,CAAO,EAE9D,GAAID,EAAK,SAAWA,EAAK,UAAYG,EAAO,QAE1C,MAAM,IAAIE,EAAqB,CAC7B,SAAU,UACV,MAAOJ,EACP,SAAU,mBAAmBE,EAAO,OAAO,EAC7C,CAAC,EAGH,MAAO,CAAE,OAAAA,EAAQ,QAASA,EAAO,OAAQ,CAC3C","names":["chainConfigs","defaultChainId","parseBaseArgs","args","chainId","defaultChainId","config","chainConfigs","InvalidArgumentError"]}
@@ -0,0 +1,2 @@
1
+ import{b}from"./chunk-ENT2OSXT.mjs";import{a as Ge}from"./chunk-NLVWRMGD.mjs";import{a as Qe,b as L}from"./chunk-RJN36GBU.mjs";import{a as E,b as H}from"./chunk-ZW2N63FI.mjs";import{a as _,b as B,c as ye}from"./chunk-5QAFKFM5.mjs";import{B as Oe,D as J,F as Ae,a as V,b as ne,c as Fe,d as qe,e as se,j as be,k as Ee,l as S,m as De,r as We,y as z,z as Ue}from"./chunk-JDDRTHFG.mjs";import{a as ie,c as Ie,d as R}from"./chunk-WLJHFHKF.mjs";import{a as u}from"./chunk-KUQEX7H3.mjs";import{c as oe,d as xe,e as Y,f as P,g as Te,h as G}from"./chunk-GXV2JA36.mjs";import{formatEther as Nt}from"viem";import{metaMorphoV11Abi as Gt}from"@berachain/abis/bend-metamorpho/metaMorphoV11";async function Oa({sharesAmount:e,vaultAddress:t,publicClient:r}){let a=await r.readContract({address:t,abi:Gt,functionName:"convertToAssets",args:[e]});return{raw:a,formatted:Nt(a)}}import{formatUnits as xt,isAddress as He,zeroAddress as Tt}from"viem";var Le=class e{static PATH_NOT_FOUND_REASON="NO_SWAP_PATHS";needsAccountForQuote=!1;notFoundMessages=[];config;chainId;constructor(t={}){let{config:r,chainId:a}=u(t);this.config=r,this.chainId=a}url="";parseAddresses(t,r){if(!He(t)||!He(r))throw new P({message:`Invalid address: ${t} or ${r}`,level:"error"});return{tokenInAddress:R(t,"BERA")?this.config.tokens.wbera:t,tokenOutAddress:R(r,"BERA")?this.config.tokens.wbera:r,isTokenInNative:R(t,"BERA"),isTokenOutNative:R(r,"BERA")}}getAmountAfterFees(t,r){if(r===void 0)throw new P({message:"aggregatorsFeeBps is required",level:"error"});let a=new V(t).times(r).dividedBy(1e4).toFixed(0,V.ROUND_DOWN);return new V(t).minus(a).toFixed(0,V.ROUND_DOWN)}getInputData({tokenIn:t,amountIn:r,isNative:a,isPermit2Approval:o=!1,permit2SpenderAddress:s}){return{tokenIn:t,amountIn:BigInt(r),isNative:a,isPermit2Approval:o,permit2SpenderAddress:s??Tt}}getMinAmountOut(t,r){if(r===void 0)throw new P({message:"slippage is required",level:"error"});let a=new V(t).times(1-r/100);return a.isNaN()||a.isZero()?0n:BigInt(a.toFixed(0))}parseAllowanceRequirements({tokenIn:t,rawAmount:r,spender:a}){return R(t,"BERA")?[]:[{token:t,amount:{raw:r,formatted:xt(BigInt(r),t.decimals)},spender:a}]}checkChainSupport({tokenIn:t,tokenOut:r}){return this.supportedChains===null?!0:this.supportedChains.includes(t.chainId)&&this.supportedChains.includes(r.chainId)}assertChainSupport({tokenIn:t,tokenOut:r,underlyingToken:a}){if(!this.checkChainSupport({tokenIn:t,tokenOut:r,underlyingToken:a}))throw new P({message:`${this.name} does not support tokens chain ID: ${t.chainId} and ${r.chainId}`,level:"error"})}async fetch(t,r){try{return await Fe({url:t,name:this.name,type:this.type},{method:"GET",headers:{"Content-Type":"application/json"},...r})}catch(a){let o=E({cause:a});throw this.notFoundMessages.some(s=>o.message.includes(s))&&(o.reason=e.PATH_NOT_FOUND_REASON),o}}};import{API_CHAIN_NAMES as Ft,BALANCER_QUERIES as qt,BALANCER_RELAYER as It,BalancerApi as Xa,CHAINS as Et,COMPOSABLE_STABLE_POOL_FACTORY as Dt,NATIVE_ASSETS as Wt,Token as Qt,VAULT as Ut,WEIGHTED_POOL_FACTORY_BALANCER_V2 as Ot}from"@berachain-foundation/berancer-sdk";import{zeroAddress as he}from"viem";import{berachain as Me,berachainBepolia as Ht}from"viem/chains";import{chainConfigs as Lt}from"@berachain/config/internal";for(let e of Object.keys(Lt)){let{config:t,chainId:r}=u({chainId:Number(e)});Ft[r]=t.bex.chainName,Et[r]=r===Me.id?Me:Ht,It[r]=t.bex.relayer,Ut[r]=t.bex.vault,qt[r]=t.bex.queries,Ot[r]=he,Dt[r]=he;let a=new Qt(r,he,ie.decimals,ie.name,ie.symbol,t.tokens.wbera);Wt[r]=a}import{GetPools as Mt}from"@berachain/graphql/dex/api";import{GqlPoolOrderBy as _t,GqlPoolOrderDirection as Jt}from"@berachain/graphql/pol/api";async function uo({textSearch:e,chain:t,first:r,orderBy:a,orderDirection:o,skip:s,fetchPolicy:l,userAddress:n,blacklistedPoolIds:i,...m}={}){let{config:d}=u(m),f=await b("api",m).query({query:Mt,variables:{textSearch:e,chain:t??d.bex.chainName,first:r,orderBy:a??_t.TotalLiquidity,orderDirection:o??Jt.Desc,skip:s,userAddress:n,blacklistedPoolIds:i},fetchPolicy:l});return{pools:f.data.poolGetPools??[],count:f.data.count??0}}import{GetPool as $t}from"@berachain/graphql/dex/api";async function go({poolId:e,account:t,...r}){let{config:a}=u(r),l=(await b("api",r).query({query:$t,variables:{id:e,userAddress:t,chain:a.bex.chainName},fetchPolicy:"no-cache"})).data.poolGetPool;if(!l)throw new Error(`Pool not found for id: ${e} and user ${t}`);return l}import{GetGlobalLiquidityAndSwapVolume as jt}from"@berachain/graphql/dex/api";async function wo(e={}){let{config:t}=u(e);return(await b("api",e).query({query:jt,variables:{chain:t.bex.chainName}})).data}import{weightedPoolV4Abi_V2 as Kt}from"@berachain-foundation/berancer-sdk";async function _e({publicClient:e,poolAddress:t}){let r=Kt,a=await e.multicall({contracts:[{address:t,abi:r,functionName:"inRecoveryMode"},{address:t,abi:r,functionName:"getPausedState"}],allowFailure:!1});return{isPoolInRecoveryMode:a[0],isPoolPaused:a[1][0]}}import{stablePoolAbi_V3 as Yt,vaultV2Abi as zt,weightedPoolFactoryAbi_V3 as Je,weightedPoolV4Abi_V2 as le}from"@berachain-foundation/berancer-sdk";import{erc20Abi as $e,formatEther as je,formatUnits as Xt,isAddress as Zt,isHex as er}from"viem";import{GqlPoolType as Ke}from"@berachain/graphql/pol/api";async function xo({poolId:e,publicClient:t,...r}){let{config:a}=u(r),o=e.slice(0,42);if(!Zt(o)||!er(e))throw new G({property:"poolId",value:e,expected:"Hex"});try{let[s,l,n,i,m,d,c,f,g]=await Promise.all([t.readContract({address:o,abi:$e,functionName:"name"}),t.readContract({address:a.bex.vault,abi:zt,functionName:"getPoolTokens",args:[e]}),t.readContract({address:o,abi:$e,functionName:"totalSupply"}),t.readContract({address:o,abi:le,functionName:"getSwapFeePercentage"}),t.readContract({address:o,abi:le,functionName:"version"}),t.readContract({address:o,abi:le,functionName:"decimals"}),t.readContract({address:a.bex.factories.composableStable,abi:Je,functionName:"isPoolFromFactory",args:[o]}),t.readContract({address:a.bex.factories.weighted,abi:Je,functionName:"isPoolFromFactory",args:[o]}),_e({publicClient:t,poolAddress:o})]),p=Number(d),A=JSON.parse(m),h,C,y;if(c?[h,y]=await Promise.all([t.readContract({address:o,abi:[{type:"function",name:"getActualSupply",stateMutability:"view",inputs:[],outputs:[{type:"uint256"}]}],functionName:"getActualSupply"}),t.readContract({address:o,abi:Yt,functionName:"getAmplificationParameter"})]):A.name==="WeightedPool"&&(C=await t.readContract({address:o,abi:le,functionName:"getNormalizedWeights"})),!c&&!f)throw new Error(`Pool ${o} is not a valid BEX pool`);return{name:s,address:o,id:e,poolTokens:[l[0],l[1].map(String),Number(l[2])],totalSupply:Xt(h??n,p),swapFee:je(i),decimals:p,weights:C?.map(q=>je(q)),version:A,factory:c?a.bex.factories.composableStable:a.bex.factories.weighted,type:c?Ke.Stable:Ke.Weighted,amplificationParameter:y?[Number(y[0]),y[1],Number(y[2])]:void 0,pausedState:g}}catch(s){throw E({cause:s})}}import{GetPoolEvents as tr}from"@berachain/graphql/dex/api";async function Eo({poolId:e,typeInArray:t,...r}){let{config:a}=u(r);return(await b("api",r).query({query:tr,variables:{poolId:e,typeIn:t,chain:a.bex.chainName}})).data}import{isHex as rr}from"viem";import{GetPoolHistoricalData as ar}from"@berachain/graphql/dex/api";async function Ho({poolId:e,chain:t,...r}){if(!e||!rr(e))throw new G({property:"poolId",value:e,expected:"hex string"});let a=b("api",r),{data:o}=await a.query({query:ar,variables:{poolId:e,chain:t}});return o.poolGetSnapshots}import{Aggregation_Interval as or,GetSnapshots as nr}from"@berachain/graphql/honey";async function Jo({days:e,...t}){return(await b("honey.subgraph",t).query({query:nr,variables:{interval:or.Day,first:e}})).data}import{honeyFactoryAbi as ir}from"@berachain/abis/honey/honeyFactory";async function Yo({client:e,collateralList:t,...r}){let{config:a}=u(r);try{let o=await e.readContract({address:a.honey.factory,abi:ir,functionName:"getWeights"});return t.reduce((l,n,i)=>Object.assign(l,{[n.address]:o[i]}),{})}catch(o){throw console.log(o),o}}import{erc20Abi as we}from"viem";async function Ye({address:e,publicClient:t,chainId:r}){try{B(t);let[a,o,s]=await Promise.all([t.readContract({address:e,abi:we,functionName:"decimals"}),t.readContract({address:e,abi:we,functionName:"name"}),t.readContract({address:e,abi:we,functionName:"symbol"})]);return{address:e,decimals:a,name:o,symbol:s,chainId:r}}catch(a){throw E({cause:a})}}import{honeyFactoryAbi as Ce}from"@berachain/abis/honey/honeyFactory";async function Pe({client:e,tokenData:t,preferredCollateralOrder:r,...a}){let{config:o}=u(a),[s,l]=await Promise.all([e.readContract({address:o.honey.factory,abi:Ce,functionName:"numRegisteredAssets"}),e.readContract({address:o.honey.factory,abi:Ce,functionName:"referenceCollateral"})]),n=[];for(let f=0;f<s;f++)n.push(e.readContract({address:o.honey.factory,abi:Ce,functionName:"registeredAssets",args:[BigInt(f)]}));let i=await Promise.all(n),d=(await Promise.all(i.map(f=>{let g=t?.find(p=>R(p,f));return g||Ye({address:f,chainId:o.chainId,publicClient:e})}))).filter(f=>!!f).sort((f,g)=>i.indexOf(f.address)-i.indexOf(g.address)).map((f,g)=>({...f,order:g}));if(r?.length){let f=[];for(let g of r){let p=d.find(A=>R(A.address,g.address));p&&(f.push(p),d.splice(d.indexOf(p),1))}d.unshift(...f)}let c=d.find(f=>R(f,l));if(!d)throw new Error("Collateral tokens not found");if(!c)throw new Error("Reference collateral address not found");return{collaterals:d,referenceCollateral:c}}import{parseUnits as sr}from"viem";import{honeyFactoryAbi as ze}from"@berachain/abis/honey/honeyFactory";import{honeyFactoryReaderAbi as lr}from"@berachain/abis/honey/honeyFactoryReader";async function Xe({client:e,collateral:t,latestPrices:r,isPythWrapperEnabled:a,...o}){let{config:s}=u(o);try{let l=e.readContract({address:s.honey.factory,abi:ze,functionName:"isBadCollateralAsset",args:[t.address]}),n=e.readContract({address:s.honey.factory,abi:ze,functionName:"isPegged",args:[t.address]});if(a&&r){let d=r.prices.map(c=>sr(c,18));n=e.readContract({address:s.honey.reader,abi:lr,functionName:"isPeggedWithPrice",args:[t.address,d[0]]})}let[i,m]=await Promise.all([l,n]);return{isBlacklisted:i,isDepegged:!m}}catch(l){throw console.log(l),l}}import{parseEther as et}from"viem";import{honeyFactoryAbi as cr}from"@berachain/abis/honey/honeyFactory";import{parseEther as dr}from"viem";import{collateralVaultAbi as ur}from"@berachain/abis/honey/collateralVault";import{honeyFactoryAbi as Ze}from"@berachain/abis/honey/honeyFactory";async function X({client:e,asset:t,amount:r,...a}){let{config:o}=u(a);try{let[s,l]=await Promise.all([e.readContract({address:o.honey.factory,abi:Ze,functionName:"vaults",args:[t]}),e.readContract({address:o.honey.factory,abi:Ze,functionName:"collectedFees",args:[o.honey.factory,t]})]);return await e.readContract({address:s,abi:ur,functionName:"balanceOf",args:[o.honey.factory]})+dr(r??"0")-l}catch(s){throw console.log(s),s}}var mr=et("1");async function Rn({client:e,asset:t,amount:r,isMint:a,isPythWrapperEnabled:o,latestPrices:s,...l}){let{config:n}=u(l);try{let i=await e.readContract({address:n.honey.factory,abi:cr,functionName:"globalCap"});if(i>=mr)return!1;let[{collaterals:m},d]=await Promise.all([Pe({client:e}),pr({client:e,asset:t,amount:r,latestPrices:s,isPythWrapperEnabled:o})]);if(!d)return;for(let c in d)if((a&&R(m[c],t)||!a&&R(m[c],t))&&d[c]>i-se)return!0;return!1}catch(i){throw console.log(i),i}}async function pr({client:e,asset:t,amount:r,latestPrices:a,isPythWrapperEnabled:o}){let{collaterals:s}=await Pe({client:e}),l=0n,n=[];for(let i of s){let m=await Xe({client:e,collateral:t,latestPrices:a,isPythWrapperEnabled:o});if(m?.isBlacklisted||m?.isDepegged)continue;let d=await X({client:e,asset:i.address,amount:R(i,t)?r:"0"});d&&(l+=d,n.push(d))}if(l===0n)return n;for(let i in s)n[i]=et(n[i].toString())/l;return n}import{Aggregation_Interval as fr,GetSnapshots as gr}from"@berachain/graphql/honey";async function xn({...e}={}){return(await b("honey.subgraph",e).query({query:gr,variables:{interval:fr.Hour,first:24}})).data?.honeySnapshots.reduce((a,o)=>new V(o.totalVolume).plus(a),new V(0))}import{parseUnits as tt}from"viem";import{honeyFactoryReaderAbi as rt}from"@berachain/abis/honey/honeyFactoryReader";var br=(i=>(i.Mint="previewMintHoney",i.MintWithPrice="previewMintHoneyWithPrices",i.RequiredCollateral="previewMintCollaterals",i.RequiredCollateralWithPrice="previewMintCollateralsWithPrices",i.Redeem="previewRedeemCollaterals",i.RedeemWithPrice="previewRedeemCollateralsWithPrices",i.HoneyToRedeem="previewRedeemHoney",i.HoneyToRedeemWithPrice="previewRedeemHoneyWithPrices",i))(br||{});async function En({client:e,collateral:t,collateralList:r,amount:a,method:o,latestPrices:s,isPythWrapperEnabled:l,...n}){let{config:i}=u(n);try{let m=o==="previewMintHoney"||o==="previewRedeemHoney"||o==="previewMintHoneyWithPrices"||o==="previewRedeemHoneyWithPrices",d=tt(a,m?t.decimals:18),c,f=[t.address,d];if(l&&s){let p=s.prices.map(A=>tt(A,18));f=[t.address,d,p]}if(m){let p=await e.readContract({address:i.honey.reader,abi:rt,functionName:o,args:f});c={collaterals:p[0],honey:p[1]}}else c={collaterals:await e.readContract({address:i.honey.reader,abi:rt,functionName:o,args:f}),honey:d};let g=r.reduce((p,A)=>{let h=A.order;return A.address===t.address&&c.collaterals[h]===BigInt(0)?Object.assign(p,{[A.address]:c.collaterals[0]}):Object.assign(p,{[A.address]:c.collaterals[h]})},{});return g[t.address]===BigInt(0)&&(g[t.address]=c.collaterals[0]),{collaterals:g,honey:c.honey}}catch(m){throw console.log("error",m),m}}import{formatUnits as yr}from"viem";import{collateralVaultAbi as Be}from"@berachain/abis/honey/collateralVault";import{honeyFactoryAbi as at}from"@berachain/abis/honey/honeyFactory";async function Hn({client:e,collateralList:t,honeyFactoryAddress:r,...a}){let{config:o}=u(a),s=r??o.honey.factory;return await Promise.all(t.map(async n=>{let i=await e.readContract({address:o.honey.factory,abi:at,functionName:"vaults",args:[n.address]}),[m,d,[c,f]]=await Promise.all([e.readContract({address:i,abi:Be,functionName:"balanceOf",args:[s]}),e.readContract({address:s,abi:at,functionName:"collectedAssetFees",args:[n.address]}),e.readContract({address:i,abi:Be,functionName:"custodyInfo"})]),g=await e.readContract({address:i,abi:Be,functionName:"convertToAssets",args:[m-d]});return{...n,balance:{raw:g.toString(),formatted:yr(g,n.decimals)},vault:c?f:i}}))}import{HermesClient as Ar}from"@pythnetwork/hermes-client";import{formatUnits as hr}from"viem";var wr="https://hermes.pyth.network";async function ot({priceFeedId:e}){let r=await new Ar(wr,{}).getLatestPriceUpdates(e,{encoding:"hex",parsed:!0});return{calldata:r.binary.data.map(a=>`0x${a}`),prices:r.parsed?.flatMap(a=>hr(BigInt(a.price.price),a.price.expo*-1))??[]}}import{parseEther as Cr}from"viem";import{honeyFactoryAbi as Pr}from"@berachain/abis/honey/honeyFactory";async function Xn({client:e,asset:t,amount:r,isMint:a,referenceCollateral:o,...s}){let{config:l}=u(s);if(t===o.address)return!1;try{let[n]=await Promise.all([e.readContract({address:l.honey.factory,abi:Pr,functionName:"relativeCap",args:[t]})]),[i,m]=await Promise.all([X({client:e,asset:t,amount:a?r:void 0}),X({client:e,asset:o.address,amount:a?void 0:r})]);return m===0n?i!==0n:Cr((i??0n).toString())/(m??0n)>=n-se}catch(n){throw console.log(n),n}}async function nt({client:e,priceFeedId:t,...r}){let{config:a}=u(r);try{return await e.readContract({address:a.external.pyth,abi:Ge,functionName:"getUpdateFee",args:[t]})}catch(o){throw console.error("getPythUpdateFee",o),o}}import{parseUnits as it}from"viem";import{honeyFactoryAbi as Br}from"@berachain/abis/honey/honeyFactory";import{honeyFactoryPythWrapperAbi as vr}from"@berachain/abis/honey/honeyFactoryPythWrapper";var ci=async({state:e,publicClient:t,priceFeedMap:r,collateralList:a,isPythWrapperEnabled:o,...s})=>{let{config:l}=u(s),n=Ie(s),{actionType:i,fromAmount:m,collaterals:d,isBasketModeEnabled:c}=e,f=o?l.honey.pythWrapper:l.honey.factory,g=a.map(p=>p.address);if(m[0]&&g.length){let p=i==="mint";if(o&&t&&r){let h=(await ot({priceFeedId:Object.values(r)})).calldata,C=0n;try{C=await nt({client:t,priceFeedId:h})}catch{C=Ee(d.length)}return({account:y})=>{let q=[h,d[0]?.address,it(m[0],(p?d[0]?.decimals:n?.decimals)??18),y,!!c];return{address:f,abi:vr,functionName:p?"mint":"redeem",params:q,value:C}}}return({account:A})=>{let h=[d[0]?.address,it(m[0],(p?d[0]?.decimals:n?.decimals)??18),A,!!c];return{value:0n,address:f,abi:Br,functionName:p?"mint":"redeem",params:h}}}throw new Error("Something went wrong while creating the Honey swap payload")};import{parseUnits as Vr}from"viem";import{honeyFactoryAbi as Rr}from"@berachain/abis/honey/honeyFactory";import{honeyFactoryReaderAbi as Sr}from"@berachain/abis/honey/honeyFactoryReader";async function yi({client:e,isMint:t,collateralList:r,latestPrices:a,isPythWrapperEnabled:o,...s}){let{config:l}=u(s);if(o&&a){if(r.length===0)return;let i=a.prices.map(d=>Vr(d,18));return await e.readContract({address:l.honey.reader,abi:Sr,functionName:"isBasketModeEnabledWithPrices",args:[t,i]})}return await e.readContract({address:l.honey.factory,abi:Rr,functionName:"isBasketModeEnabled",args:[t]})}async function Ci({block:e,currentBlock:t,blockTime:r,publicClient:a}){if(_(e,"block"),B(a),t>e){let s=await a.getBlock({blockNumber:BigInt(e),includeTransactions:!1});return{timestamp:Number(s.timestamp)}}return{timestamp:S(Date.now())+r*(Number(e)-Number(t))}}import{formatUnits as ve}from"viem";import{rewardVaultAbi as $}from"@berachain/abis/pol/rewards/rewardVault";var kr=(a=>(a.Duration="duration",a.TargetRate="targetRate",a.TargetApr="targetApr",a))(kr||{});async function Ri(e,t){let[r,a,o,s,l,n]=await Promise.all([t.readContract({address:e,abi:$,functionName:"rewardsDuration"}),t.readContract({address:e,abi:$,functionName:"rewardVaultManager"}),t.readContract({address:e,abi:$,functionName:"rewardRate"}),t.readContract({address:e,abi:$,functionName:"periodFinish"}),t.readContract({address:e,abi:$,functionName:"targetRewardsPerSecond"}),t.readContract({address:e,abi:$,functionName:"minRewardDurationForTargetRate"})]),i=o*(s-BigInt(S(Date.now())))/10n**18n;return{rewardsDuration:Number(r),mode:l===0n?"duration":"targetRate",manager:a,rewardRate:ve(o,36),periodFinish:Number(s),availableRewards:ve(i,18),minRewardDurationForTargetRate:Number(n),targetRewardsPerSecond:ve(l,36)}}function de(e,t,r){return e?r*t*z(1)/e:null}function Nr(e,t,r){return r?e*r/(t*z(1)):0}function Ni({availableRewards:e,periodFinish:t,tvl:r,bgtPrice:a,MIN_REWARD_DURATION:o,MAX_REWARD_DURATION:s,...l}){let n=S(Date.now());if(n>t)return{apr:0,duration:0,rewardRate:0,targetRate:null,periodFinish:0,mode:null};if(l.mode==="targetRate"||l.mode==="targetApr"){let c,{minRewardDurationForTargetRate:f,currentDuration:g}=l;if(l.mode==="targetRate"?c=l.rewardRate:c=Nr(l.apr,a,r),c===0){let h=Math.min(g,s),C=e?e/h:0;return{apr:de(r,a,C),duration:h,rewardRate:C,targetRate:null,periodFinish:h+n,mode:"duration"}}let p=f||o,A=e?e/c:0;if(A<p){let h=e?e/p:0;return{apr:de(r,a,h),duration:p,rewardRate:h,targetRate:h.toString(),periodFinish:p+n,mode:null}}return{apr:de(r,a,c),duration:A,rewardRate:c,targetRate:c.toString(),periodFinish:A+n,mode:null}}let{duration:i}=l,m=e/i;return{apr:de(r,a,m),mode:null,targetRate:null,duration:i,rewardRate:m,periodFinish:i+n}}import{getUriFromLink as Gr}from"@berachain/config";async function qi({address:e,account:t,...r}){let{config:a}=u(r),o=`${Gr(a.staking)}/vaults/${e}/earnings/${t}`;return qe({url:o,name:typeof a.staking=="string"?"backend-railway":a.staking.name,type:"rest"})}import{formatUnits as xr}from"viem";import{rewardVaultAbi as Tr}from"@berachain/abis/pol/rewards/rewardVault";import{GetVaults as Fr}from"@berachain/graphql/pol/api";async function ue({filter:e,publicClient:t,...r}={}){let o=await b("api",r).query({query:Fr,variables:e}),s=await Promise.allSettled(o.data.polGetRewardVaults.vaults.map(async n=>{if(t)return Promise.allSettled(n.activeIncentives.map(i=>t.readContract({abi:Tr,address:n.address,functionName:"incentives",args:[i.tokenAddress]})))})),l=o.data.polGetRewardVaults.vaults.map((n,i)=>{let m=0,d=n.activeIncentives.map((c,f)=>{let g=Number(c.remainingAmountUsd)&&Number(c.remainingAmount)?Number(c.remainingAmountUsd)/Number(c.remainingAmount):0,p=s[i]?.status==="fulfilled"&&s[i]?.value?.[f]?.status==="fulfilled"?xr(BigInt(s[i].value[f].value[2]),c.token.decimals):c.remainingAmount;return m+=Number(p)*Number(g),{...c,remainingAmount:p}});return{...n,dynamicData:{...n.dynamicData,allTimeReceivedBGTAmount:n.dynamicData?.allTimeReceivedBGTAmount??"0",bgtCapturePercentage:n.dynamicData?.bgtCapturePercentage??"0",activeIncentivesValueUsd:m.toString(),activeIncentivesRateUsd:n.dynamicData?.activeIncentivesRateUsd??"0",bgtCapturePerBlock:n.dynamicData?.bgtCapturePerBlock??"0"},activeIncentives:d}});return{pagination:o.data.polGetRewardVaults.pagination,gaugeList:l}}import{GlobalData as qr}from"@berachain/graphql/pol/api";async function st(e={}){let{config:t}=u(e),a=await b("api",e).query({query:qr,variables:{chain:t.bex.chainName}});return{...a.data.polGetGlobalInfo,top3EmittingValidators:a.data.top3EmittingValidators.validators,allValidatorsCount:a.data.allValidatorsCount.pagination.totalCount}}import{formatEther as Ir}from"viem";import{bgtAbi as Er}from"@berachain/abis/pol/bgt";async function lt({publicClient:e,...t}){let{config:r}=u(t);B(e);try{let a=await e.readContract({address:r.tokens.bgt,abi:Er,functionName:"totalBoosts",args:[]});return Ir(a)}catch(a){throw console.log(a),a}}import{erc20Abi as Dr,formatEther as Wr}from"viem";async function dt({publicClient:e,...t}){let{config:r}=u(t);B(e);try{let a=await e.readContract({address:r.tokens.bgt,abi:Dr,functionName:"totalSupply",args:[]});return Wr(a??0n)}catch(a){throw console.log(a),a}}import{GqlRewardVaultOrderBy as Qr,GqlRewardVaultOrderDirection as Ur}from"@berachain/graphql/pol/api";async function ut(e){let{gaugeList:t}=await ue({filter:{orderBy:Qr.Apr,orderDirection:Ur.Desc,pageSize:e,where:{includeNonWhitelisted:!1}}});return t}async function ds(e){let[t,r,a,o]=await Promise.allSettled([st(),ut(300),dt({publicClient:e}),lt({publicClient:e})]);return t.status==="rejected"&&H.captureException(E({cause:t.reason,level:"warning"})),r.status==="rejected"&&H.captureException(E({cause:r.reason,level:"warning"})),a.status==="rejected"&&H.captureException(E({cause:a.reason,level:"warning"})),o.status==="rejected"&&H.captureException(E({cause:o.reason,level:"warning"})),{bgtTotalSupply:a.status==="fulfilled"?a.value:void 0,globalCuttingBoard:r.status==="fulfilled"?r.value:[],bgtTotalBoosts:o.status==="fulfilled"?o.value:void 0,...t.status==="fulfilled"?t.value:{}}}import{GetIncentiveFeeClaimStats as Or}from"@berachain/graphql/pol/fees";async function ct({...e}){let t=b("pol.fees",e),{data:r}=await t.query({query:Or});if(r.incentiveFeeClaims.length>0){let a=r?.incentiveFeeClaims.reduce((l,n)=>l+Number(n.payoutAmount),3e4),s=(r?.incentiveFeeClaims.filter(l=>Number(l.timestamp)/1e3>Date.now()-We(1))).reduce((l,n)=>l+Number(n.payoutAmount),0);return{sumAllClaims:a,sumClaimsInLast24Hours:s}}return{sumAllClaims:0,sumClaimsInLast24Hours:0}}async function bs(e={}){let{config:t}=u(e);try{let a=await(await fetch(t.lists.rewardVaultList)).json();if(!a.protocols)throw new Error("Missing protocols in market list");return{marketList:a.protocols,marketDictionary:a.protocols.reduce((o,s)=>(o[s.name]=s,o),{})}}catch(r){throw console.error("Error fetching validator information",r),r}}async function Cs({account:e,validator:t,page:r=1,perPage:a=1e3,...o}){let{config:s}=u(o),l=await fetch(`${s.pol.bribeBoostApi}/api/v1/wallets/${e.toLowerCase()}/proofs/validator/${t.toLowerCase()}?page=${r}&per_page=${a}`,{cache:"no-store"});if(!l.ok){let i=await ne(l);throw new P({message:"Failed to fetch proofs on server",cause:{error:i,result:l,account:e,validator:t},reason:i?.reason})}return await l.json()}import{formatUnits as Hr,parseUnits as Lr}from"viem";import{wberaStakerVaultAbi as Mr}from"@berachain/abis/pol/wberaStakerVault";async function Rs({address:e,publicClient:t}){return B(t),t.readContract({address:e,abi:Mr,functionName:"previewRedeem",args:[Lr("1",18)]}).then(r=>Number(Hr(r,18))).catch(()=>0)}import{GetRewardVault as _r}from"@berachain/graphql/pol/api";async function Ts({address:e,chainName:t,...r}){let{config:a}=u(r),o=t??a.bex.chainName,s=b("api",r),{data:l}=await s.query({query:_r,variables:{vaultId:e,chain:o}});if(!l?.rewardVault)throw new Qe({resource:"Reward vault",id:e,chainId:a.chainId});return l.rewardVault}import{isSameAddress as mt}from"@berachain-foundation/berancer-sdk";import{erc20Abi as ce,formatUnits as Z}from"viem";import{rewardVaultAbi as Ve}from"@berachain/abis/pol/rewards/rewardVault";function ee(e,t){return e.status==="success"?e.result:t}async function Qs({address:e,stakingToken:t,publicClient:r}){let a=await r.readContract({address:e,abi:Ve,functionName:"getWhitelistedTokens"}),s=a.findIndex(n=>mt(t,n))!==-1?await r.readContract({address:e,abi:Ve,functionName:"totalSupply"}):0n,l=await Promise.allSettled(a.map(async n=>{let[i,m,d,c,f]=await r.multicall({allowFailure:!0,contracts:[{address:e,abi:Ve,functionName:"incentives",args:[n]},{address:n,abi:ce,functionName:"decimals"},{address:n,abi:ce,functionName:"name"},{address:n,abi:ce,functionName:"symbol"},{address:n,abi:ce,functionName:"balanceOf",args:[e]}]});if(i.status==="failure")throw new P({cause:i.error,message:"Failed to get incentive info. This is not possible.",level:"error",extra:{token:n,address:e}});let[g,p,A,h]=i.result,C=ee(m,18);return{token:n,manager:h,minIncentiveRate:Z(g,C),incentiveRate:Z(p,C),remainingAmount:Z(A,C),name:ee(d,void 0),symbol:ee(c,void 0),decimals:C,pendingAmount:mt(t,n)?Z(ee(f,0n)-s-A,C):Z(ee(f,0n)-A,C)}}));return l.forEach((n,i)=>{n.status==="rejected"&&H.captureException(new P({reason:n.reason,message:"Incorrect incentives token received.",level:"error",extra:{token:a[i],address:e,error:n.reason}}))}),l.map(n=>n.status==="fulfilled"?n.value:null).filter(n=>n!==null)}import{rewardVaultAbi as Jr}from"@berachain/abis/pol/rewards/rewardVault";async function Hs({address:e,publicClient:t}){return await t.readContract({address:e,abi:Jr,functionName:"stakeToken"})}import{GetSWberaVaultMetadata as $r,GqlSWberaVaultMetadataResolution as pt}from"@berachain/graphql/pol/api";function jr(e){return e==="DAY"?pt.OneDay:pt.SevenDays}async function $s({window:e,...t}){let{config:r}=u(t),a=b("api",t);try{let o=await a.query({query:$r,variables:{chain:r.bex.chainName,resolution:jr(e??"DAY")}}),{apr:s}=o.data.polGetSWberaVaultMetadata;return Number(s)}catch(o){throw console.error("Failed to get SW Bera APR",o),o}}import{GetSWberaVaultSnapshots as Kr,GqlVaultSnapshotDataRange as Yr}from"@berachain/graphql/pol/api";async function Xs({chain:e,range:t=Yr.ThirtyDays,...r}={}){let{config:a}=u(r),o=b("api",r);try{return(await o.query({query:Kr,variables:{chain:e??a.bex.chainName,range:t}})).data.polGetSWberaVaultSnapshots}catch(s){throw console.error("Failed to get SW Bera Snapshots",s),s}}import{wberaStakerVaultAbi as zr}from"@berachain/abis/pol/wberaStakerVault";async function te({publicClient:e,address:t}){let r=await e.readContract({address:t,abi:zr,functionName:"WITHDRAWAL_COOLDOWN"});return Number(r)}import{erc20Abi as me,erc4626Abi as re}from"viem";async function sl({address:e,underlyingAsset:t,publicClient:r,blockTime:a}){B(r);let o=26;try{let s=await r.getBlock({blockTag:"latest"}),l=Math.floor(o*60*60/a),n=s.number-BigInt(l),[i,m,d,c,f,g,p,A,h,C,y]=await Promise.all([r.readContract({address:e,abi:re,functionName:"totalAssets"}),r.readContract({address:e,abi:re,functionName:"totalSupply"}),r.readContract({address:e,abi:re,functionName:"previewRedeem",args:[10n**18n],blockNumber:s.number}),r.readContract({address:t,abi:me,functionName:"balanceOf",args:[e]}),r.readContract({address:e,abi:re,functionName:"totalAssets",blockNumber:n}),r.readContract({address:e,abi:me,functionName:"totalSupply",blockNumber:n}),r.readContract({address:e,abi:re,functionName:"previewRedeem",args:[10n**18n],blockNumber:n}),r.readContract({address:t,abi:me,functionName:"balanceOf",args:[e],blockNumber:n}),r.readContract({address:t,abi:me,functionName:"totalSupply"}),te({publicClient:r,address:e}),ct({})]),q=new V(p.toString()),k=new V(d.toString());return{address:e,current:{exchangeRate:k.toString(),totalSupply:new V(m.toString()).dividedBy(1e18).toString(),totalAssets:new V(i.toString()).dividedBy(1e18).toString(),tvl:new V(c.toString()).dividedBy(1e18).toString()},previous:{exchangeRate:q.toString(),totalSupply:new V(g.toString()).dividedBy(1e18).toString(),totalAssets:new V(f.toString()).dividedBy(1e18).toString(),tvl:new V(A.toString()).dividedBy(1e18).toString()},totalWBeraIssued:new V(h.toString()).dividedBy(1e18).toString(),lockPeriod:C,totalBuyBacks:y.sumAllClaims,totalBuyBacksInLast24Hours:y.sumClaimsInLast24Hours}}catch(s){throw console.error("Failed to get SW Bera Vault Metadata",s),s}}import{wberaStakerVaultAbi as pe}from"@berachain/abis/pol/wberaStakerVault";function ft(e){let t=Date.now(),r=e*1e3-t;if(r<=0)return;let a=S(r);return Oe(a,!0,!0)}async function fl({contractAddress:e,accountAddress:t,publicClient:r,version:a}){let o=[];function s(l,n){let[i,m,d]=l,c=i,f=Number(d)+Number(n),g=S(Date.now()),p=f-g;if(c>0){let A=ft(p<=0?0:f);o.push({receiptTokenAddress:e,withdrawalAmount:c,timeRemaining:A})}}switch(a){case"V1":{let[l,n]=await Promise.all([r.readContract({address:e,abi:pe,functionName:"withdrawalRequests",args:[t]}),te({publicClient:r,address:e})]);return s(l,n),o}case"V2":{let[l,n]=await Promise.all([r.readContract({address:e,abi:pe,functionName:"getERC721WithdrawalRequestIds",args:[t]}),te({publicClient:r,address:e})]);if(R(e,"SWBERA")){let d=await r.readContract({address:e,abi:pe,functionName:"withdrawalRequests",args:[t]});s(d,n)}let m=(await Promise.all(l.map(async d=>{let c=await r.readContract({address:e,abi:pe,functionName:"getERC721WithdrawalRequest",args:[d]}),{assets:f,requestTime:g}=c;if(!f||!g)throw new Error("Invalid withdrawal request");let p=f,A=Number(g)+Number(n),h=S(Date.now()),C=A-h;if(p>0){let y=ft(C<=0?0:A);return{withdrawalAmount:p,timeRemaining:y,withdrawalRequestId:d,receiptTokenAddress:e}}return null}))).filter(d=>d!==null);return o.push(...m),o}}}import{wberaStakerVaultAbi as Xr}from"@berachain/abis/pol/wberaStakerVault";async function Al({vaultAddresses:e,publicClient:t}){B(t);try{let r=await Promise.all(e.map(async o=>t.readContract({address:o,abi:Xr,functionName:"totalAssets"})));return e.reduce((o,s,l)=>(o[s]=r[l],o),{})}catch(r){throw console.error("Failed to get total staked amount",r),r}}async function Bl({account:e,...t}){let{config:r}=u(t),a=await fetch(`${r.pol.bribeBoostApi}/api/v1/wallets/${e.toLowerCase()}/rewards/aggregation`,{cache:"no-store"});if(!a.ok){let o=await ne(a);throw new P({message:"Failed to fetch incentives on server",cause:{error:o,result:a,account:e},reason:o?.error})}return a.json()}import{rewardVaultAbi as Zr}from"@berachain/abis/pol/rewards/rewardVault";async function gt({account:e,vaultAddress:t,publicClient:r}){if(!r)throw new Error("Missing public client");if(!e)throw new Error("Missing user account");if(!t)throw new Error("Missing vault address");return r.readContract({address:t,abi:Zr,functionName:"earned",args:[e]})}import{formatEther as Re}from"viem";import{rewardVaultAbi as bt}from"@berachain/abis/pol/rewards/rewardVault";async function yt({account:e,vaultAddress:t,publicClient:r}){B(r),ye(e,"account"),ye(t,"vaultAddress");try{let[a,o]=await Promise.all([r.readContract({address:t,abi:bt,functionName:"balanceOf",args:[e]}),r.readContract({address:t,abi:bt,functionName:"getTotalDelegateStaked",args:[e]})]);return{balance:a,delegated:o}}catch(a){throw console.log(a),a}}import{rewardVaultAbi as ea}from"@berachain/abis/pol/rewards/rewardVault";async function At({vaultAddress:e,publicClient:t}){if(!t)throw new Error("Missing public client");if(!e)throw new Error("Missing vault address");try{return await t.readContract({address:e,abi:ea,functionName:"totalSupply",args:[]})}catch(r){throw console.log(r),r}}async function El({account:e,vaultAddress:t,publicClient:r}){let[a,o,s]=await Promise.all([yt({account:e,vaultAddress:t,publicClient:r}),gt({account:e,vaultAddress:t,publicClient:r}),At({vaultAddress:t,publicClient:r})]),l=a.balance-a.delegated,n=s>0n?Number(Number.parseFloat(Re(a.balance))/Number.parseFloat(Re(s))).toString():"0";return{balance:a.balance,delegatedBalance:a.delegated,withdrawableBalance:l,rewards:Re(o),percentage:n}}import{formatUnits as Se}from"viem";import{rewardVaultAbi as ht}from"@berachain/abis/pol/rewards/rewardVault";import{GetUserVaults as ta}from"@berachain/graphql/pol/api";async function _l({account:e,publicClient:t,...r}){let{config:a}=u(r),l=(await b("api",r).query({query:ta,variables:{userId:e,chain:a.bex.chainName}})).data?.userVaultDeposits?.deposits;if(!l)return{totalBgtRewards:"0",vaults:[],totalStakedValue:0};let[n,i]=await Promise.all([t.multicall({allowFailure:!1,contracts:l.map(g=>({address:g.vaultAddress,abi:ht,functionName:"earned",args:[e]}))}),t.multicall({allowFailure:!1,contracts:l.map(g=>({address:g.vaultAddress,abi:ht,functionName:"balanceOf",args:[e]}))})]),{userVaults:m,total:d}=l.reduce((g,p,A)=>{let h=n[A],C=i[A];if(g.total+=h,!p.vault)return H.captureException(new P({message:"Deposit data from API is missing vault",level:"error",extra:{deposit:p}})),console.error("Deposit data from API is missing vault",p),g;if(h>0n||C>0n){let y=p.vault.dynamicData?.tvl&&Number(p.vault.stakingTokenAmount)!==0?Number(p.vault.dynamicData?.tvl??0)/Number(p.vault.stakingTokenAmount):null;g.userVaults.push({...p,vault:p.vault,unclaimedBgt:Se(h,18),formattedBalance:Se(C,p.vault.stakingToken.decimals),stakingTokenPrice:y})}return g},{userVaults:[],total:0n}),c=[...m].sort((g,p)=>{if(g.vault.isVaultWhitelisted&&!p.vault.isVaultWhitelisted)return-1;if(!g.vault.isVaultWhitelisted&&p.vault.isVaultWhitelisted)return 1;let A=Number.parseFloat(g.unclaimedBgt);return Number.parseFloat(p.unclaimedBgt)-A});return{totalStakedValue:c.reduce((g,p)=>{let A=Number(p.vault.dynamicData?.tvl??0);if(A===0)return g;let h=Number.parseFloat(p.vault.stakingTokenAmount),C=A/h;return g+C*Number(p.formattedBalance)},0),totalBgtRewards:Se(d,18),vaults:c}}import{GetVaultHistory as ra}from"@berachain/graphql/pol/api";async function Yl({vault:e,chain:t,...r}){let{config:a}=u(r);return(await b("api",r).query({query:ra,variables:{...r,vaultId:e,chain:t??a.bex.chainName}})).data.polGetRewardVaultSnapshots}import{GetVaultValidators as aa}from"@berachain/graphql/pol/api";async function ed({address:e,onlyActiveValidators:t,...r}){return(await b("api",r).query({query:aa,variables:{vaultId:e,isActive:t}})).data.validators.validators??[]}import{getAddress as oa,zeroAddress as na}from"viem";import{GetTokenCurrentPrices as ia}from"@berachain/graphql/dex/api";async function ld({addressIn:e,...t}){let{config:r,chainId:a}=u(t),o=e.map(n=>n.toLowerCase()).filter((n,i,m)=>n&&m.indexOf(n)===i),s=b("api",t),{data:l}=await s.query({query:ia,variables:{chains:[r.bex.chainName],addressIn:o}});return l.tokenGetCurrentPrices.reduce((n,i)=>{if(!i.price||!i.address)return n;let m=i.address;return n[oa(m)]={price:J(i.price.toString()),updatedAt:i.updatedAt,chainId:a},n[m.toLowerCase()]={price:J(i.price.toString()),updatedAt:i.updatedAt,chainId:a},R(m,"WBERA")&&(n[na]={price:J(i.price.toString()),updatedAt:i.updatedAt,chainId:a},n[r.tokens.bgt.toLowerCase()]={price:J(i.price.toString()),updatedAt:i.updatedAt,chainId:a},n[r.tokens.bgt]={price:J(i.price.toString()),updatedAt:i.updatedAt,chainId:a}),n},{})}import{getPublicClient as sa}from"@wagmi/core";import{erc20Abi as la,formatUnits as da}from"viem";async function pd({items:e,account:t,config:r}){_(e,"items"),_(r,"config"),_(t,"account");let a=Object.groupBy(e,s=>s.token.chainId);return(await Promise.allSettled(Object.entries(a).map(async([s,l])=>{if(!l)return[];let n=sa(r,{chainId:Number(s)});return B(n,`publicClient ${s}`),(await n.multicall({contracts:l.map(d=>({address:d.token.address,abi:la,functionName:"allowance",args:[t,d.spender]}))})).map((d,c)=>{let f=l[c];return d.error?void 0:{token:f.token,spender:f.spender,amount:f.amount,allowance:{raw:d.result.toString(),formatted:da(d.result,f.token.decimals)},needsApproval:d.result<BigInt(f.amount.raw)}}).filter(d=>!!d)}))).flatMap(s=>s.status==="fulfilled"?s.value:void 0).filter(s=>!!s)}import{getPublicClient as ma,getWalletClient as pa,switchChain as fa}from"@wagmi/core";import{BaseError as ga,createWalletClient as ba,decodeErrorResult as ya,HttpRequestError as Aa,http as ha}from"viem";import{ChainId as wa,defaultChainId as Pt}from"@berachain/config/internal";import{AbiFunctionSignatureNotFoundError as ua,decodeFunctionData as ca}from"viem";async function wt({publicClient:e,abi:t,...r}){let a=[...oe,...t??[]],o,s,l,n,i,m,d;if("txHash"in r){let c=await e.getTransaction({hash:r.txHash});if(!c.to)throw new G({property:"tx",value:c,expected:"Transaction",message:"Trying to get revert reason for a contract creation"});i=c.input,s=c.to,l=c.from,n=c.value,o=c.blockNumber}else if(o=r.blockNumber,s=r.to,l=r.account,n=r.value,"data"in r)i=r.data;else if("functionName"in r&&"args"in r)m=r.functionName,d=r.args;else if(!n)throw new G({property:"dataOrFunctionNameAndArgs",value:r,expected:"Hex or FunctionName and Args"});try{if(!a)if(i)await e.call({data:i,to:s,account:l,blockNumber:o,value:n});else throw new Error("Data is required if abi is not provided");if("functionName"in r&&"args"in r&&r.functionName)m=r.functionName,d=r.args;else if(i){if(!a){let c=await e.call({data:i,to:s,account:l,blockNumber:o,value:n});throw new Error(`Getting revert reason for successful simulation. Data: ${i}`,{cause:c})}try{let c=ca({abi:a,data:i});m=c.functionName,d=c.args}catch(c){throw c instanceof ua&&await e.call({data:i,to:s,account:l,blockNumber:o,value:n}),new Error("Data is required if abi is not provided")}}else throw new Error("No data or function name and args provided");throw a&&m?(await e.simulateContract({functionName:m,args:d,abi:a,address:s,account:l,blockNumber:o}),new L({message:"Getting revert reason for successful simulation",functionName:m,to:s,txHash:"txHash"in r?r.txHash:void 0,input:r})):new Error("No data or function name and args provided")}catch(c){if(c instanceof Error)return Y({error:c,abi:a,revertIfUnknown:!0});throw c}}var Ca=De(1),Ct=(e,t)=>e*(100n+BigInt(t))/100n;function ke({nonceResult:e,onWarning:t}){if(e.status==="fulfilled"){if(e.value&&e.value>Number.MAX_SAFE_INTEGER){t?.(new P({message:"Nonce is too large. No nonce will be provided to avoid IntegerOutOfRangeError.",cause:e.value,level:"debug"}));return}return e.value}}function Pa(e=Pt){return e===wa.BEPOLIA?process.env.NEXT_PUBLIC_80069_ANVIL_IMPERSONATE_ACCOUNT==="true":process.env.NEXT_PUBLIC_80094_ANVIL_IMPERSONATE_ACCOUNT==="true"}async function Id(e){if(process.env.NODE_ENV==="development"&&!e.contractName&&e.address&&!("calls"in e||e.calls))throw console.warn("beraWriteContract: Contract name is required. Either update the contract mapping in devrel or provide a contract name in ContractName enum","This is a development error and will be thrown in development mode only."),new G({property:"contractName",value:e.contractName,expected:"ContractName",displayMessage:`[DEV] Contract name is required as it's not mapped in the devrel's contract mapping ${e.address}`,level:"error"});let{address:t,calls:r,value:a,gasLimit:o,onLoading:s,onSuccess:l,onWarning:n,onError:i,onSubmission:m,wagmiConfig:d,walletClient:c,account:f,txConfirmationTimeout:g=12e4,chainId:p=Pt,impersonateAccount:A=Pa(p),errorsAbi:h=[],pollingInterval:C=Ca,...y}=e;s?.(e);let q="data"in y?y.data:void 0,k=[...oe,...h,..."abi"in y&&y.abi&&Array.isArray(y.abi)?y.abi:[]],x=c;if(!d){i?.(new G({property:"wagmiConfig",value:d,expected:"Config"}),e);return}if(!(x?.account?.type==="local"))try{await fa(d,{chainId:p})}catch(v){let N=v;i?.(new P({cause:N,displayMessage:"There was an error switching to the chain."}),e);return}if(!x)try{x=await pa(d,{chainId:p})}catch(v){i?.(new P({cause:v,displayMessage:"There was an error connecting to the wallet."}),e);return}if(!x){i?.(new G({displayMessage:"There was an error connecting to the wallet.",property:"walletClient",value:x,expected:"WalletClient"}),e);return}let I=f||x.account;if(!I){i?.(new G({property:"account",value:I,expected:"Account"}),e);return}let ae=typeof I=="string"?I:I.address,Q=ma(d,{chainId:p});try{B(Q)}catch(v){i?.(v,e);return}if(A){let v=Ae(p);await v.impersonateAccount({address:ae}),x=ba({transport:ha(v.transport.url),account:I,chain:x.chain})}let T,K={calls:"calls"in y?y.calls:void 0,params:"params"in y?y.params:void 0,value:a,data:"data"in y?y.data:void 0};try{let v=Q.getTransactionCount({address:ae,blockTag:"latest"}).catch(()=>{}),N={account:ae,to:t,address:t,chainId:p,value:a};if(r){let F=r.map(w=>{if("abi"in w&&Array.isArray(k)&&k.push(...w.abi),"data"in w)return{to:w.address,data:w.data,value:w.value??0n};if("abi"in w&&"functionName"in w){let U="params"in w?w.params:void 0;return{to:w.address,abi:w.abi,functionName:w.functionName,args:U,value:w.value??0n}}return{to:w.address,value:w.value??0n}});if(e.enableSimulateCalls){let w=await Q.simulateCalls({calls:F,account:I}),U=w.results.findIndex(O=>O.status==="failure");if(U!==-1){if(w.block.number===null)throw new G({property:"blockNumber",value:w.block.number,expected:"bigint",message:"Block number is null"});let O=w.results[U],{reason:ge}=O.data&&O.data!=="0x"?{reason:xe(ya({data:O.data,abi:k}))}:Y({error:O.error,revertIfUnknown:!1,abi:k});i?.(new L({cause:O.error,txHash:T,chainId:p,reason:ge,abi:k,input:K,blockNumber:w.block.number}),e);return}}if(process.env.NODE_ENV==="test")throw new G({displayMessage:"Batch calls are not supported in test environment",expected:"not test",property:"NODE_ENV",value:process.env.NODE_ENV,level:"fatal"});let D=await x.sendCalls({calls:F,account:I,forceAtomic:!0});m?.({id:D.id},e);let W=await x.waitForCallsStatus({id:D.id,pollingInterval:C,timeout:g});if(W.status==="success"){let w=W.receipts?.[0];if(!w)throw new P({message:"Call status is success but no receipt was found",cause:W,level:"error",reason:"CALL_STATUS_SUCCESS_BUT_NO_RECEIPT"});return l?.(w,e),w}throw console.error("wallet_sendCalls: Call failed",W),new L({cause:W,level:"error",input:K,txHash:T,abi:k,chainId:p})}if(q){let[F,D,W]=await Promise.allSettled([Q.call({...N,data:q}),o??Q.estimateGas({...N,data:q}),v]);if(F.status==="rejected")throw F.reason;let w=D.status==="fulfilled"?Ct(D.value,10):be;T=await x.sendTransaction({data:q,to:t,account:I,gas:w,chainId:p,nonce:ke({nonceResult:W,onWarning(U){n?.(U,e)}}),value:a}),m?.({txHash:T},e)}else if("abi"in y&&"functionName"in y){let{abi:F,functionName:D}=y,W="params"in y?y.params:void 0,[w,U,O]=await Promise.allSettled([Q.simulateContract({...N,abi:k,functionName:D,args:W,account:I}),o??Q.estimateContractGas({...N,abi:k,functionName:D,args:W}),v]);if(w.status==="rejected")throw w.reason;let ge=o??(U.status==="fulfilled"?Ct(U.value,10):be);T=await x.writeContract({...w.value.request,chainId:p,gas:ge,nonce:ke({nonceResult:O,onWarning(kt){n?.(kt,e)}})}),m?.({txHash:T},e)}else{let[F]=await Promise.allSettled([v]);T=await x.sendTransaction({chainId:p,to:t,value:a,account:I,nonce:ke({nonceResult:F,onWarning(D){n?.(D,e)}})}),m?.({txHash:T},e)}process.env.NODE_ENV==="test"&&await Ae(p).mine({blocks:1});let M=await Q.waitForTransactionReceipt({hash:T,pollingInterval:C,timeout:g,confirmations:1});if(M.status==="success")l?.(M,e);else{let F=await wt({publicClient:Q,blockNumber:M.blockNumber,to:t,account:ae,abi:k,args:"params"in y?y.params:void 0,functionName:"functionName"in y?y.functionName:void 0,value:a,data:q});process.env.NODE_ENV==="test"&&console.error("beraWriteContract: Revert reason",F),i?.(new L({reason:F.reason,txHash:T,receipt:M,to:t,functionName:"functionName"in y?y.functionName:void 0,input:K,chainId:p,abi:k,blockNumber:M.blockNumber}),e)}return M}catch(v){if(v instanceof P)i?.(v,e);else if(v instanceof Error){let N=Y({error:v,revertIfUnknown:!1,abi:k});if(N&&N.rootCause instanceof ga&&"url"in N.rootCause){i?.(new Te({cause:N.rootCause,response:void 0,endpoint:{url:N.rootCause.url,type:"rpc"},statusCode:N.rootCause instanceof Aa?N.rootCause.status:void 0}),e);return}i?.(new L({cause:v,to:t,txHash:T,chainId:p,abi:k,functionName:"functionName"in y?y.functionName:void 0,input:K}),e)}else i?.(new L({cause:v,txHash:T,to:t,chainId:p,functionName:"functionName"in y?y.functionName:void 0,input:K,abi:k}),e)}}import{GetValidators as Ba}from"@berachain/graphql/pol/api";async function Bt({variables:e={},...t}={}){let{config:r}=u(t);return(await b("api",t).query({query:Ba,variables:{chain:r.bex.chainName,...e}})).data}import{isAddressEqual as va}from"viem";async function Ld({allocation:e}){let t=await ue({filter:{where:{vaultAddressIn:e.weights.map(a=>a.receiver)}}}),r=e?.start.blockNumber??0;return e?.weights.map(a=>({percentage:a.percentage,receiver:a.receiver,startBlock:r,receivingVault:t?.gaugeList.find(o=>va(o.address,a.receiver))}))}import{GetValidator as Va}from"@berachain/graphql/pol/api";async function jd({id:e,...t}){let{config:r}=u(t);return(await b("api",t).query({query:Va,variables:{id:e,chain:r.bex.chainName}})).data}import{GetValidatorBlockStats as Ra}from"@berachain/graphql/pol/subgraph";async function Xd({pubKey:e,first:t=1,...r}){let a=b("pol.subgraph",r);try{return(await a.query({query:Ra,variables:{pubKey:e,first:t}})).data}catch(o){throw console.error("GetValidatorBlockStats:",o),o}}import{beraChefAbi as vt}from"@berachain/abis/pol/rewards/beraChef";function j(e,t){return{start:{blockNumber:Number(e.startBlock),timestamp:e.startBlock!==0n?t:0},weights:e.weights.map(r=>({receiver:r.receiver,percentage:Number(r.percentageNumerator)/1e4}))}}function Sa(e,t){return e.start.blockNumber===t.start.blockNumber&&e.weights.every((r,a)=>r.percentage===t.weights[a].percentage)}async function ru({client:e,pubKey:t,...r}){let{config:a}=u(r);try{let[o,s]=await Promise.all([e.readContract({address:a.pol.beraChef,abi:vt,functionName:"getActiveRewardAllocation",args:[t]}),e.readContract({address:a.pol.beraChef,abi:vt,functionName:"getSetActiveRewardAllocation",args:[t]})]),[l,n]=await Promise.all([o.startBlock!==0n?e.getBlock({blockNumber:BigInt(o.startBlock)}):{timestamp:0},s.startBlock!==0n?e.getBlock({blockNumber:BigInt(s.startBlock)}):{timestamp:0}]),i=j(o,Number(l.timestamp)),m=j(s,Number(n.timestamp)),d=!1;return m.start.blockNumber===0?d=!0:d=!Sa(m,i),{activeRewardAllocation:i,setRewardAllocation:m,isBaseline:d,isNeverSet:m?.start.blockNumber===0}}catch(o){throw console.log("getValidatorRewardAllocation:",o),o}}import{beraChefAbi as ka}from"@berachain/abis/pol/rewards/beraChef";function su(e){return e.start.blockNumber===0}async function lu({client:e,...t}){let{config:r}=u(t),a=await e.readContract({address:r.pol.beraChef,abi:ka,functionName:"getDefaultRewardAllocation",args:[]});return j({...a,startBlock:0n},0)}async function uu({client:e,valPubKey:t}){return 5614}import{formatEther as fe}from"viem";import{bgtAbi as Ne}from"@berachain/abis/pol/bgt";async function Vt({account:e,pubkey:t,publicClient:r,...a}){let{config:o}=u(a);if(!e)throw new Error("account is required");if(!r)throw new Error("publicClient is required");let[s,l,n]=await Promise.all([r.readContract({address:o.tokens.bgt,abi:Ne,functionName:"boosted",args:[e,t]}),r.readContract({address:o.tokens.bgt,abi:Ne,functionName:"boostedQueue",args:[e,t]}),r.readContract({address:o.tokens.bgt,abi:Ne,functionName:"dropBoostQueue",args:[e,t]})]),i=s-n[1];return{pubkey:t,droppableBoostAmount:fe(i),activeBoostAmount:fe(s),queuedBoostAmount:fe(l[1]),queuedDropBoostAmount:fe(n[1]),queuedBoostStartBlock:l[0],queuedDropBoostStartBlock:n[0],hasPendingBoosts:l[1]>0n||n[1]>0n,hasActiveBoosts:s>0n,hasDroppableBoosts:i>0n}}import{formatEther as Ga,parseEther as St}from"viem";import{GetUserValidatorInformation as Na}from"@berachain/graphql/pol/api";async function Rt({account:e,...t}){let{config:r}=u(t);return b("api",t).query({query:Na,variables:{address:e.toLowerCase(),chain:r.bex.chainName}})}async function Vu({account:e,publicClient:t,chain:r,...a}){let{config:o}=u(a),s=r??o.bex.chainName,l=await Rt({account:e}),[n,i]=await Promise.all([Bt({variables:{chain:s,where:{idIn:l.data.polGetValidatorBoosts.boosts.map(m=>m.validatorId)}}}),Promise.all(l.data.polGetValidatorBoosts.boosts.filter(m=>!!m.validator).map(m=>Vt({account:e,pubkey:m.validator.pubkey,publicClient:t})))]);return n?.validators.validators.map(m=>{let d=i.find(f=>f.pubkey.toLowerCase()===m.pubkey.toLowerCase());if(!d)throw new Error("User deposited not found");let c=St(d?.activeBoostAmount??"0")-St(d?.queuedDropBoostAmount);return{...m,userBoosts:{pubkey:d.pubkey,activeBoostAmount:d?.activeBoostAmount,queuedBoostAmount:d?.queuedBoostAmount,queuedBoostStartBlock:Number(d?.queuedBoostStartBlock),queuedDropBoostAmount:d?.queuedDropBoostAmount,queuedDropBoostStartBlock:Number(d?.queuedDropBoostStartBlock),droppableBoostAmount:Ga(c),hasPendingBoosts:Number(d?.queuedBoostAmount)>0||Number(d?.queuedDropBoostAmount)>0,hasActiveBoosts:Number(d?.activeBoostAmount)>0,hasDroppableBoosts:c>0n}}})}var xa=[{validatorAddress:"0x8f51e63d9921a461be29e73dca1c2385e1adc5943fbb36ded4ba96025ee8a783184d1118da08171f6ea831153c878a6d",earning:.045,staked:{amount:16114000000000000000n,formattedAmount:"161.14"},rewards:{amount:15214000000000000000n,formattedAmount:"152.14"}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0x97b21253b17f4e814fe7505c15c18e68c85ab2477274ad370a762df50e3eb4cb1a48451e089bc22e158d7448549a8ab9",earning:.045,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{stake:[{amount:16159000000000000000n,formattedAmount:"161.59"}],unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0xa2705d6b27891f3f5651f26547d1bb79e256f95f249d1ad717cef087d77d38b037e5d6dbaa2538930fd0731ec9b02f3a",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0xa2705d6b27891f3f5651f26547d1bb79e256f95f249d1ad717cef087d77d38b037e5d6dbaa2538930fd0731ec9b02f3a",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0xa2705d6b27891f3f5651f26547d1bb79e256f95f249d1ad717cef087d77d38b037e5d6dbaa2538930fd0731ec9b02f3a",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0xa2705d6b27891f3f5651f26547d1bb79e256f95f249d1ad717cef087d77d38b037e5d6dbaa2538930fd0731ec9b02f3a",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},validatorAddress:"0xa2705d6b27891f3f5651f26547d1bb79e256f95f249d1ad717cef087d77d38b037e5d6dbaa2538930fd0731ec9b02f3a",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:16159000000000000000n,formattedAmount:"161.59",timestamp:S(Date.now()-72e6)}]}},{staked:{amount:241514000000000000000n,formattedAmount:"2415.14"},validatorAddress:"0xa4e4b63514f54d61da5197359f11ff1fc2930788ba2ffdd30c2fc059cbe0221020197bf9446b16ac347f36c7517a8686",earning:.145,rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{unstake:[{amount:1159000000000000000n,formattedAmount:"11.59",timestamp:S(Date.now()-36e6)}]}},{validatorAddress:"0xb0511ec039591e98bd4e183ba70b85572214a7ad8ca1a43e96ad3495d3821054927bc542e5482ec9733e35b7ef0b1f03",earning:.045,staked:{amount:141514000000000000000n,formattedAmount:"1415.14"},rewards:{amount:15414000000000000000n,formattedAmount:"154.14"},queueData:{stake:[{amount:1159000000000000000n,formattedAmount:"11.59"}]}}];async function ku(e){return await new Promise(t=>setTimeout(t,2e3)),e==="0x4C368fFE3650379d6318C8d4630bc51f8Ad12bB6"?xa:[]}import{GetValidatorAnalytics as Ta}from"@berachain/graphql/pol/subgraph";async function Fu({pubkey:e,dayRange:t,...r}){return(await b("pol.subgraph",r).query({query:Ta,variables:{pubKey:e,timestamp:Ue(t).toString()}})).data}import{beraChefAbi as Fa}from"@berachain/abis/pol/rewards/beraChef";async function Du({client:e,pubKey:t,...r}){let{config:a}=u(r),o=await e.readContract({address:a.pol.beraChef,abi:Fa,functionName:"getValCommissionOnIncentiveTokens",args:[t]});return Number(o??0n)/1e4}var Uu=(e,t,r)=>{if(!t||!e)return 0;let a=z(1)/r;return(t?a*(Number(e.dynamicData?.stakedBeraAmount)/t):0)*Number.parseFloat(e.dynamicData?.rewardRate??"0")};import{beaconDepositAbi as qa}from"@berachain/abis/pol/beaconDeposit";async function Mu({client:e,pubKey:t,...r}){let{config:a}=u(r);try{return await e.readContract({address:a.depositContract,abi:qa,functionName:"getOperator",args:[t]})}catch(o){throw console.log("getValidatorOperatorAddress:",o),o}}import{beraChefAbi as Ia}from"@berachain/abis/pol/rewards/beraChef";async function ju({client:e,pubKey:t,...r}){let{config:a}=u(r),o=await e.readContract({address:a.pol.beraChef,abi:Ia,functionName:"getValQueuedCommissionOnIncentiveTokens",args:[t]});return{blockNumberLast:o.blockNumberLast,commissionRate:Number(o.commissionRate)/1e4}}import{beaconDepositAbi as Ea}from"@berachain/abis/pol/beaconDeposit";async function Xu({client:e,pubKey:t,...r}){let{config:a}=u(r);try{return await e.readContract({address:a.depositContract,abi:Ea,functionName:"queuedOperator",args:[t]})}catch(o){throw console.log("getValidatorQueuedOperatorAddress:",o),o}}import{beraChefAbi as Da}from"@berachain/abis/pol/rewards/beraChef";async function ac({client:e,pubKey:t,...r}){let{config:a}=u(r);try{let o=await e.readContract({address:a.pol.beraChef,abi:Da,functionName:"getQueuedRewardAllocation",args:[t]});return j(o,0)}catch(o){throw console.log("getValidatorQueuedRewardAllocation:",o),o}}export{Oa as a,Le as b,Xa as c,uo as d,go as e,wo as f,_e as g,xo as h,Eo as i,Ho as j,Jo as k,Yo as l,Ye as m,Pe as n,Xe as o,Rn as p,xn as q,br as r,En as s,Hn as t,ot as u,Xn as v,nt as w,ci as x,yi as y,Ci as z,kr as A,Ri as B,Ni as C,qi as D,ue as E,ds as F,ct as G,bs as H,Cs as I,Rs as J,Ts as K,Qs as L,Hs as M,$s as N,Xs as O,te as P,sl as Q,fl as R,Al as S,Bl as T,gt as U,El as V,_l as W,Yl as X,ed as Y,ld as Z,pd as _,Pa as $,Id as aa,Bt as ba,Ld as ca,jd as da,Xd as ea,j as fa,Sa as ga,ru as ha,su as ia,lu as ja,uu as ka,Vt as la,Vu as ma,ku as na,Fu as oa,Du as pa,Uu as qa,Mu as ra,ju as sa,Xu as ta,ac as ua};
2
+ //# sourceMappingURL=chunk-NXXMW2O7.mjs.map