@berachain/berajs 0.2.8-beta.9 → 0.2.10

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 (254) hide show
  1. package/dist/{BeraError-_mQdkanr.d.cts → BeraError-7-A5JYy_.d.ts} +31 -2
  2. package/dist/{HoneyConfigProvider-DVP_9KZn.d.ts → HoneyConfigProvider-Dkj-_a5x.d.ts} +1 -1
  3. package/dist/{RequestError-BRIiJgHk.d.ts → RequestError-DBOIV65x.d.ts} +1 -1
  4. package/dist/abi/exports.mjs +4452 -2
  5. package/dist/actions/clients/exports.d.ts +78 -0
  6. package/dist/actions/clients/exports.mjs +21 -0
  7. package/dist/actions/exports.d.ts +154 -207
  8. package/dist/actions/exports.mjs +853 -2
  9. package/dist/actions/governance/exports.d.ts +140 -0
  10. package/dist/actions/governance/exports.mjs +226 -0
  11. package/dist/actions/server/exports.d.ts +13 -0
  12. package/dist/actions/server/exports.mjs +27 -0
  13. package/dist/chunk-3JJLQ2JX.mjs +211 -0
  14. package/dist/chunk-7YVNSDXG.mjs +86 -0
  15. package/dist/chunk-AUOPN6NK.mjs +96 -0
  16. package/dist/chunk-BGMRHTBQ.mjs +23 -0
  17. package/dist/chunk-CDK4YV3D.mjs +571 -0
  18. package/dist/chunk-DKMAIU74.mjs +62 -0
  19. package/dist/chunk-DQRH5VE3.mjs +25 -0
  20. package/dist/chunk-E7YFXBBQ.mjs +349 -0
  21. package/dist/chunk-GUURQAME.mjs +326 -0
  22. package/dist/chunk-GY6B3PD5.mjs +89 -0
  23. package/dist/chunk-HQCOU6GY.mjs +243 -0
  24. package/dist/chunk-HYDP32P6.mjs +135 -0
  25. package/dist/chunk-IXIBY5FP.mjs +80 -0
  26. package/dist/chunk-KHXJDYA4.mjs +1776 -0
  27. package/dist/chunk-NBYLMO2L.mjs +14 -0
  28. package/dist/chunk-O2NQFKJK.mjs +170 -0
  29. package/dist/chunk-P5WXXULM.mjs +54 -0
  30. package/dist/chunk-QBBOWFMH.mjs +4129 -0
  31. package/dist/chunk-QVHEM4BG.mjs +35 -0
  32. package/dist/chunk-SGIJVHZO.mjs +12 -0
  33. package/dist/chunk-SZ5C44L5.mjs +35 -0
  34. package/dist/chunk-WNBWX23Q.mjs +426 -0
  35. package/dist/chunk-Y6THHG77.mjs +126 -0
  36. package/dist/chunk-ZLTMIFCZ.mjs +165 -0
  37. package/dist/contexts/exports.d.ts +2 -2
  38. package/dist/contexts/exports.mjs +85 -2
  39. package/dist/enum/exports.d.ts +1 -1
  40. package/dist/enum/exports.mjs +46 -2
  41. package/dist/enum/governance/exports.d.ts +60 -0
  42. package/dist/enum/governance/exports.mjs +14 -0
  43. package/dist/errors/exports.d.ts +4 -3
  44. package/dist/errors/exports.mjs +48 -2
  45. package/dist/getApolloClient-BcUTGFUb.d.ts +40 -0
  46. package/dist/{getValidatorQueuedOperatorAddress-BcyxE9uw.d.ts → getValidatorQueuedOperatorAddress-DphU3qhE.d.ts} +2 -2
  47. package/dist/{global.d-5w_lvl2J.d.ts → global.d-BuGDKh4k.d.ts} +4 -240
  48. package/dist/hooks/exports.d.ts +83 -226
  49. package/dist/hooks/exports.mjs +7463 -4
  50. package/dist/hooks/governance/exports.d.ts +181 -0
  51. package/dist/hooks/governance/exports.mjs +888 -0
  52. package/dist/pol.d-Dw5SQcRX.d.ts +153 -0
  53. package/dist/{txnEnum-7_o92X3N.d.cts → txnEnum-ByI5dtDi.d.ts} +2 -60
  54. package/dist/types/exports.d.ts +9 -9
  55. package/dist/types/exports.mjs +0 -1
  56. package/dist/types/governance/exports.d.ts +109 -0
  57. package/dist/types/governance/exports.mjs +0 -0
  58. package/dist/{useHoneySwapState-B494PQDl.d.ts → useHoneySwapState-vFmuFF0g.d.ts} +1 -1
  59. package/dist/utils/exports.d.ts +15 -6
  60. package/dist/utils/exports.mjs +827 -2
  61. package/package.json +49 -13
  62. package/src/actions/__test/transports.ts +61 -0
  63. package/src/actions/clients/exports.ts +7 -0
  64. package/src/actions/clients/fetchBeep.ts +34 -0
  65. package/src/actions/clients/fetchOpenApi.ts +93 -0
  66. package/src/actions/clients/fetchOpenApi.unit.test.ts +223 -0
  67. package/src/actions/clients/fetchRailwayBackend.ts +34 -0
  68. package/src/actions/clients/getApolloClient.ts +58 -23
  69. package/src/actions/clients/getEnsoClient.ts +20 -9
  70. package/src/actions/dex/aggregators/enso/enso.ts +27 -17
  71. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +2 -2
  72. package/src/actions/dex/aggregators/kyberswap.ts +18 -23
  73. package/src/actions/enso/__tests__/getEnsoUserTokensWithBalances.debug.test.ts +3 -6
  74. package/src/actions/enso/getEnsoUserTokensWithBalances.ts +18 -0
  75. package/src/actions/exports.ts +5 -9
  76. package/src/actions/governance/exports.ts +9 -0
  77. package/src/actions/governance/getAllProposals.ts +10 -65
  78. package/src/actions/governance/getProposalDetails.ts +6 -33
  79. package/src/actions/governance/getProposalVotes.ts +8 -15
  80. package/src/actions/honey/getChartData.ts +27 -21
  81. package/src/actions/honey/getHoney24hVolume.ts +19 -22
  82. package/src/actions/honey/getPythLatestPrices.ts +7 -0
  83. package/src/actions/pol/__tests__/rewardVaults.integration.test.ts +1 -1
  84. package/src/actions/pol/getAutoclaimedIncentives.ts +41 -0
  85. package/src/actions/pol/getAutoclaimedIncentivesTxHash.ts +41 -0
  86. package/src/actions/pol/getBeraTokenTotalSupply.ts +45 -0
  87. package/src/actions/pol/getBgtIncentiveDistributorPaused.ts +28 -0
  88. package/src/actions/pol/getEarnedStakedBeraVault.ts +20 -20
  89. package/src/actions/pol/getGlobalData.ts +1 -0
  90. package/src/actions/pol/getHeroEarnVaults.ts +62 -0
  91. package/src/actions/pol/getIncentiveFeeClaimStats.ts +19 -38
  92. package/src/actions/pol/getRewardVaults.ts +4 -4
  93. package/src/actions/pol/getSWBeraVaultMetadata.ts +1 -1
  94. package/src/actions/pol/getStakingDailyAssets.ts +18 -17
  95. package/src/actions/server/exports.ts +1 -0
  96. package/src/actions/server/getDailyValidatorBlockStats.ts +33 -0
  97. package/src/actions/tokens/getWalletBalances.integration.test.ts +3 -6
  98. package/src/actions/transactions/beraWriteContract.integration.test.ts +3 -6
  99. package/src/actions/validators/getDailyValidatorBlockStats.ts +25 -24
  100. package/src/actions/validators/getValidatorAnalytics.ts +20 -21
  101. package/src/actions/validators/getValidatorIncentiveDistribution.ts +33 -0
  102. package/src/actions/validators/utils/getValidatorBoostApy.ts +1 -1
  103. package/src/enum/contracts.ts +1 -0
  104. package/src/enum/exports.ts +0 -1
  105. package/src/enum/governance/exports.ts +1 -0
  106. package/src/errors/BeraError.ts +47 -7
  107. package/src/errors/BeraTracing.unit.test.ts +65 -0
  108. package/src/errors/RequestError.ts +25 -4
  109. package/src/errors/RequestError.unit.test.ts +55 -0
  110. package/src/errors/errorMap.ts +8 -0
  111. package/src/errors/exports.ts +5 -0
  112. package/src/errors/getRevertReason.integration.test.ts +3 -3
  113. package/src/errors/spanStatus.ts +78 -0
  114. package/src/errors/spanStatus.unit.test.ts +62 -0
  115. package/src/hooks/dex/useCreatePool.ts +1 -88
  116. package/src/hooks/dex/useOnChainPoolData.ts +27 -2
  117. package/src/hooks/dex/usePriceImpact.ts +12 -5
  118. package/src/hooks/enso/useBendDemultiply.ts +9 -1
  119. package/src/hooks/enso/useBendMultiply.ts +9 -1
  120. package/src/hooks/enso/useBendZapSupply.ts +26 -7
  121. package/src/hooks/enso/useEnsoSwapBundle.ts +17 -3
  122. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +13 -2
  123. package/src/hooks/exports.ts +3 -15
  124. package/src/hooks/governance/exports.ts +14 -0
  125. package/src/hooks/pol/useAutoclaimedIncentives.ts +40 -0
  126. package/src/hooks/pol/useAutoclaimedIncentivesTxHash.ts +45 -0
  127. package/src/hooks/pol/useStakedAPR.ts +2 -2
  128. package/src/hooks/pol/useStakedSnapshots.ts +5 -9
  129. package/src/hooks/validators/useValidator.ts +6 -8
  130. package/src/hooks/validators/useValidatorIncentiveDistribution.ts +39 -0
  131. package/src/types/bribe-boost.d.ts +19 -0
  132. package/src/types/exports.ts +0 -1
  133. package/src/types/governance/exports.ts +1 -0
  134. package/src/utils/beraFetch.ts +9 -3
  135. package/src/utils/exports.ts +1 -0
  136. package/src/utils/getServerSideClient.ts +4 -2
  137. package/src/utils/polyfillAbortSignalAny.ts +53 -0
  138. package/src/utils/polyfillAbortSignalAny.unit.test.ts +81 -0
  139. package/src/utils/sanitizeRpcUrl.ts +22 -0
  140. package/src/utils/tracedTransport.ts +35 -0
  141. package/dist/BeraError-_mQdkanr.d.ts +0 -94
  142. package/dist/BexStatusProvider-DRymVlQf.d.cts +0 -70
  143. package/dist/HoneyConfigProvider-DfkjmzEf.d.cts +0 -390
  144. package/dist/RequestError-DSUzJ1Iy.d.cts +0 -144
  145. package/dist/abi/exports.cjs +0 -2
  146. package/dist/abi/exports.cjs.map +0 -1
  147. package/dist/abi/exports.d.cts +0 -6574
  148. package/dist/abi/exports.mjs.map +0 -1
  149. package/dist/actions/exports.cjs +0 -2
  150. package/dist/actions/exports.cjs.map +0 -1
  151. package/dist/actions/exports.d.cts +0 -1650
  152. package/dist/actions/exports.mjs.map +0 -1
  153. package/dist/chunk-45HIEVNI.cjs +0 -4
  154. package/dist/chunk-45HIEVNI.cjs.map +0 -1
  155. package/dist/chunk-47ILYVHC.mjs +0 -2
  156. package/dist/chunk-47ILYVHC.mjs.map +0 -1
  157. package/dist/chunk-575OK77P.mjs +0 -2
  158. package/dist/chunk-575OK77P.mjs.map +0 -1
  159. package/dist/chunk-5NVZG5N6.mjs +0 -2
  160. package/dist/chunk-5NVZG5N6.mjs.map +0 -1
  161. package/dist/chunk-6DIA6PXV.cjs +0 -2
  162. package/dist/chunk-6DIA6PXV.cjs.map +0 -1
  163. package/dist/chunk-6JJIZCVY.cjs +0 -2
  164. package/dist/chunk-6JJIZCVY.cjs.map +0 -1
  165. package/dist/chunk-7F72ZH4Q.mjs +0 -2
  166. package/dist/chunk-7F72ZH4Q.mjs.map +0 -1
  167. package/dist/chunk-AUA42YIG.mjs +0 -4
  168. package/dist/chunk-AUA42YIG.mjs.map +0 -1
  169. package/dist/chunk-BC2WX6O6.cjs +0 -2
  170. package/dist/chunk-BC2WX6O6.cjs.map +0 -1
  171. package/dist/chunk-CJOZC5Z2.cjs +0 -2
  172. package/dist/chunk-CJOZC5Z2.cjs.map +0 -1
  173. package/dist/chunk-D6L7LTA2.cjs +0 -2
  174. package/dist/chunk-D6L7LTA2.cjs.map +0 -1
  175. package/dist/chunk-DDEQFR3M.cjs +0 -2
  176. package/dist/chunk-DDEQFR3M.cjs.map +0 -1
  177. package/dist/chunk-GXV2JA36.mjs +0 -2
  178. package/dist/chunk-GXV2JA36.mjs.map +0 -1
  179. package/dist/chunk-ISYNEDET.mjs +0 -2
  180. package/dist/chunk-ISYNEDET.mjs.map +0 -1
  181. package/dist/chunk-JDDRTHFG.mjs +0 -2
  182. package/dist/chunk-JDDRTHFG.mjs.map +0 -1
  183. package/dist/chunk-JDZGYU5T.mjs +0 -2
  184. package/dist/chunk-JDZGYU5T.mjs.map +0 -1
  185. package/dist/chunk-LVOXBZMA.cjs +0 -2
  186. package/dist/chunk-LVOXBZMA.cjs.map +0 -1
  187. package/dist/chunk-MK5NS5B5.mjs +0 -2
  188. package/dist/chunk-MK5NS5B5.mjs.map +0 -1
  189. package/dist/chunk-NAXAZJJY.mjs +0 -2
  190. package/dist/chunk-NAXAZJJY.mjs.map +0 -1
  191. package/dist/chunk-NLVWRMGD.mjs +0 -2
  192. package/dist/chunk-NLVWRMGD.mjs.map +0 -1
  193. package/dist/chunk-OGBD5YOG.mjs +0 -2
  194. package/dist/chunk-OGBD5YOG.mjs.map +0 -1
  195. package/dist/chunk-OGJMSGB2.mjs +0 -2
  196. package/dist/chunk-OGJMSGB2.mjs.map +0 -1
  197. package/dist/chunk-OIYXOKTT.cjs +0 -2
  198. package/dist/chunk-OIYXOKTT.cjs.map +0 -1
  199. package/dist/chunk-OUD27MU7.cjs +0 -2
  200. package/dist/chunk-OUD27MU7.cjs.map +0 -1
  201. package/dist/chunk-PRLVZIKD.mjs +0 -2
  202. package/dist/chunk-PRLVZIKD.mjs.map +0 -1
  203. package/dist/chunk-Q2SNRLW3.cjs +0 -2
  204. package/dist/chunk-Q2SNRLW3.cjs.map +0 -1
  205. package/dist/chunk-REWME3FY.cjs +0 -2
  206. package/dist/chunk-REWME3FY.cjs.map +0 -1
  207. package/dist/chunk-RJN36GBU.mjs +0 -2
  208. package/dist/chunk-RJN36GBU.mjs.map +0 -1
  209. package/dist/chunk-RWOICHRW.cjs +0 -2
  210. package/dist/chunk-RWOICHRW.cjs.map +0 -1
  211. package/dist/chunk-S4CDSVLK.cjs +0 -2
  212. package/dist/chunk-S4CDSVLK.cjs.map +0 -1
  213. package/dist/chunk-SFEULGSX.cjs +0 -2
  214. package/dist/chunk-SFEULGSX.cjs.map +0 -1
  215. package/dist/chunk-WBTS6KFG.mjs +0 -2
  216. package/dist/chunk-WBTS6KFG.mjs.map +0 -1
  217. package/dist/chunk-WRFDB3QJ.cjs +0 -2
  218. package/dist/chunk-WRFDB3QJ.cjs.map +0 -1
  219. package/dist/chunk-XNJLSA6P.cjs +0 -2
  220. package/dist/chunk-XNJLSA6P.cjs.map +0 -1
  221. package/dist/contexts/exports.cjs +0 -2
  222. package/dist/contexts/exports.cjs.map +0 -1
  223. package/dist/contexts/exports.d.cts +0 -66
  224. package/dist/contexts/exports.mjs.map +0 -1
  225. package/dist/defaultFlags-D6KfkTZx.d.cts +0 -10
  226. package/dist/dex-C_BB0b0O.d.cts +0 -37
  227. package/dist/enum/exports.cjs +0 -2
  228. package/dist/enum/exports.cjs.map +0 -1
  229. package/dist/enum/exports.d.cts +0 -23
  230. package/dist/enum/exports.mjs.map +0 -1
  231. package/dist/errors/exports.cjs +0 -2
  232. package/dist/errors/exports.cjs.map +0 -1
  233. package/dist/errors/exports.d.cts +0 -327
  234. package/dist/errors/exports.mjs.map +0 -1
  235. package/dist/getValidatorQueuedOperatorAddress-Cql_D50j.d.cts +0 -562
  236. package/dist/global.d-B7IeayVX.d.cts +0 -474
  237. package/dist/honey-CYm0RWf4.d.cts +0 -14
  238. package/dist/hooks/exports.cjs +0 -4
  239. package/dist/hooks/exports.cjs.map +0 -1
  240. package/dist/hooks/exports.d.cts +0 -1734
  241. package/dist/hooks/exports.mjs.map +0 -1
  242. package/dist/polling-BKnyavLI.d.cts +0 -8
  243. package/dist/txnEnum-7_o92X3N.d.ts +0 -164
  244. package/dist/types/exports.cjs +0 -1
  245. package/dist/types/exports.cjs.map +0 -1
  246. package/dist/types/exports.d.cts +0 -90
  247. package/dist/types/exports.mjs.map +0 -1
  248. package/dist/useHoneySwapState-D6vpv19r.d.cts +0 -32
  249. package/dist/utils/exports.cjs +0 -2
  250. package/dist/utils/exports.cjs.map +0 -1
  251. package/dist/utils/exports.d.cts +0 -420
  252. package/dist/utils/exports.mjs.map +0 -1
  253. package/src/actions/dex/getIsTokenExploited.ts +0 -63
  254. package/src/hooks/dex/useExploitedTokens.ts +0 -57
@@ -0,0 +1,45 @@
1
+ import { ChainId } from "@berachain/config";
2
+
3
+ import { beraFetchJson } from "../../utils/beraFetch";
4
+ import { parseBaseArgs } from "../../utils/parseBaseArgs";
5
+
6
+ interface SupplyMonitorBeraStatsResponse {
7
+ /** Total BERA supply, in whole BERA units. */
8
+ totalSupply: number;
9
+ /** Circulating BERA supply, in whole BERA units. */
10
+ circulatingSupply: number;
11
+ }
12
+
13
+ export type GetBeraTokenTotalSupplyArgs = BeraJS.BaseFunctionArgs;
14
+
15
+ /**
16
+ * Fetches the native BERA total supply (in whole BERA units) from the
17
+ * Berachain supply-monitor service.
18
+ */
19
+ export async function getBeraTokenTotalSupply(
20
+ args: GetBeraTokenTotalSupplyArgs = {},
21
+ ): Promise<string> {
22
+ const { config } = parseBaseArgs(args);
23
+ // supply-monitor only exposes BERA stats for mainnet/bepolia; returns 0 on other chains.
24
+ const network = config.chainId === ChainId.MAINNET ? "mainnet" : "bepolia";
25
+
26
+ // `supplyMonitor` is typed as `HttpLink` (string | { uri, name, ... }).
27
+ // Both forms are accepted; pick the URL out of whichever shape was used.
28
+ const supplyMonitor = config.pol.supplyMonitor;
29
+ const baseUrl =
30
+ typeof supplyMonitor === "string" ? supplyMonitor : supplyMonitor.uri;
31
+
32
+ const data = await beraFetchJson<SupplyMonitorBeraStatsResponse>(
33
+ {
34
+ url: `${baseUrl}/api/stats/bera?network=${network}`,
35
+ name:
36
+ typeof supplyMonitor === "string"
37
+ ? "supply-monitor-bera"
38
+ : supplyMonitor.name,
39
+ type: "rest",
40
+ },
41
+ { cache: "no-store" },
42
+ );
43
+
44
+ return data.totalSupply.toString();
45
+ }
@@ -0,0 +1,28 @@
1
+ import type { PublicClient } from "viem";
2
+
3
+ import { bgtIncentiveDistributorAbi } from "@berachain/abis/pol/rewards/bgtIncentiveDistributor";
4
+
5
+ import { assertPublicClient } from "../../errors/assert";
6
+ import { parseBaseArgs } from "../../utils/parseBaseArgs";
7
+
8
+ /**
9
+ * Reads `paused()` on the BGT incentive distributor. Used to gate the
10
+ * autoclaim banner — when `true`, users can no longer self-claim and the
11
+ * bot is responsible for distributing incentives on their behalf.
12
+ */
13
+ export async function getBgtIncentiveDistributorPaused({
14
+ publicClient,
15
+ ...args
16
+ }: {
17
+ publicClient: PublicClient | undefined;
18
+ } & BeraJS.BaseFunctionArgs): Promise<boolean> {
19
+ assertPublicClient(publicClient);
20
+
21
+ const { config } = parseBaseArgs(args);
22
+
23
+ return publicClient.readContract({
24
+ address: config.pol.bgtIncentiveDistributor,
25
+ abi: bgtIncentiveDistributorAbi,
26
+ functionName: "paused",
27
+ });
28
+ }
@@ -1,15 +1,8 @@
1
1
  import type { Address } from "viem";
2
2
 
3
- import { getUriFromLink } from "@berachain/config";
4
-
5
- import { beraFetchJson } from "../../utils/beraFetch";
6
3
  import { parseBaseArgs } from "../../utils/parseBaseArgs";
7
-
8
- type StakingHistoryData = {
9
- currentDepositRate: string;
10
- earningsRealized: string;
11
- earningsTotal: string;
12
- };
4
+ import { fetchBeep } from "../clients/fetchBeep";
5
+ import { fetchRailwayBackend } from "../clients/fetchRailwayBackend";
13
6
 
14
7
  type GetEarnedStakedBeraVaultArgs = {
15
8
  /**
@@ -25,17 +18,24 @@ export async function getEarnedStakedBeraVault({
25
18
  address,
26
19
  account,
27
20
  ...args
28
- }: BeraJS.BaseFunctionArgs &
29
- GetEarnedStakedBeraVaultArgs): Promise<StakingHistoryData> {
21
+ }: BeraJS.BaseFunctionArgs & GetEarnedStakedBeraVaultArgs) {
30
22
  const { config } = parseBaseArgs(args);
31
23
 
32
- const url = `${getUriFromLink(config.staking)}/vaults/${address}/earnings/${account}`;
33
- return beraFetchJson<StakingHistoryData>({
34
- url,
35
- name:
36
- typeof config.staking === "string"
37
- ? "backend-railway"
38
- : config.staking.name,
39
- type: "rest",
40
- });
24
+ // TODO(beep): remove this entire block once `beep` is deployed on every
25
+ // chain. It is the only legacy-Railway-specific code left here; deleting it
26
+ // leaves the `beep` path below as the sole implementation.
27
+ if (!config.beep) {
28
+ return fetchRailwayBackend(
29
+ "/vaults/{vault}/earnings/{owner}",
30
+ { path: { vault: address, owner: account } },
31
+ args,
32
+ );
33
+ }
34
+
35
+ // beep backend (next-gen), typed against `@berachain/graphql/beep`.
36
+ return fetchBeep(
37
+ "/v0/stake/{vault}/earnings/{owner}",
38
+ { path: { vault: address, owner: account } },
39
+ args,
40
+ );
41
41
  }
@@ -14,6 +14,7 @@ export interface GlobalData extends GlobalInfo {
14
14
  bgtTotalSupply: string | undefined;
15
15
  bgtTotalBoosts: string | undefined;
16
16
  }
17
+
17
18
  export async function getGlobalData(
18
19
  publicClient: PublicClient,
19
20
  ): Promise<GlobalData> {
@@ -0,0 +1,62 @@
1
+ import {
2
+ type ApiVaultFragment,
3
+ GetHeroEarnVaults,
4
+ type GetHeroEarnVaultsQuery,
5
+ type GetHeroEarnVaultsQueryVariables,
6
+ } from "@berachain/graphql/pol/api";
7
+
8
+ import { getApolloClient } from "../clients/getApolloClient";
9
+
10
+ export interface HeroEarnVaults {
11
+ /**
12
+ * Top-APR PoL reward vaults, ordered by APR descending. Callers typically
13
+ * read `[0]` for the "Earn with PoL" hero subtitle. `bestAprExcludedAddresses`
14
+ * lets callers filter out non-incentivized earn actions whose APR figures
15
+ * would otherwise dominate the listing and mislead users.
16
+ */
17
+ bestApr: ApiVaultFragment[];
18
+ /**
19
+ * Highest-APR PoL reward vault among vaults whose protocol is "bend".
20
+ * Its `stakingToken.address` is a Bend vault share token — match it back
21
+ * against `bendVaults` to combine the PoL reward APR with the underlying
22
+ * Bend native supply APY.
23
+ */
24
+ bendRewardVault: ApiVaultFragment[];
25
+ /**
26
+ * Minimal Bend native vault data (address + `totalApy`) used to look up the
27
+ * underlying Bend supply APY for whichever Bend vault `bendRewardVault`
28
+ * resolves to.
29
+ */
30
+ bendVaults: GetHeroEarnVaultsQuery["bendVaults"];
31
+ }
32
+
33
+ /**
34
+ * Batched fetch for the hub home page hero cards. Issues a single GraphQL
35
+ * request to the BEX API that returns:
36
+ * - the top-APR PoL reward vaults (for the "Earn with PoL" card)
37
+ * - the highest-APR Bend-protocol PoL reward vault (for the "Lend" card)
38
+ * - minimal Bend native vault data, so callers can add the Bend supply APY
39
+ * on top of the PoL reward APR when displaying the combined Lend APY
40
+ */
41
+ export async function getHeroEarnVaults({
42
+ bestAprExcludedAddresses = [],
43
+ ...args
44
+ }: {
45
+ bestAprExcludedAddresses?: string[];
46
+ } & BeraJS.BaseFunctionArgs = {}): Promise<HeroEarnVaults> {
47
+ const bexApiGraphqlClient = getApolloClient("api", args);
48
+
49
+ const res = await bexApiGraphqlClient.query<
50
+ GetHeroEarnVaultsQuery,
51
+ GetHeroEarnVaultsQueryVariables
52
+ >({
53
+ query: GetHeroEarnVaults,
54
+ variables: { bestAprExcludedAddresses },
55
+ });
56
+
57
+ return {
58
+ bestApr: res.data.bestApr.vaults,
59
+ bendRewardVault: res.data.bendRewardVault.vaults,
60
+ bendVaults: res.data.bendVaults,
61
+ };
62
+ }
@@ -1,43 +1,24 @@
1
- import {
2
- GetIncentiveFeeClaimStats,
3
- type GetIncentiveFeeClaimStatsQuery,
4
- type GetIncentiveFeeClaimStatsQueryVariables,
5
- } from "@berachain/graphql/pol/fees";
1
+ import { BeraError } from "../../errors/BeraError";
2
+ import { beraFetchJson } from "../../utils/beraFetch";
6
3
 
7
- import { days } from "../../utils/time";
8
- import { getApolloClient } from "../clients/getApolloClient";
4
+ export type IncentiveFeeClaimStats = {
5
+ sumAllClaims: number;
6
+ sumClaimsInLast24Hours: number;
7
+ };
9
8
 
10
- export async function getIncentiveFeeClaimStats({
11
- ...args
12
- }: BeraJS.BaseFunctionArgs) {
13
- const bgtClient = getApolloClient("pol.fees", args);
14
- const { data } = await bgtClient.query<
15
- GetIncentiveFeeClaimStatsQuery,
16
- GetIncentiveFeeClaimStatsQueryVariables
17
- >({
18
- query: GetIncentiveFeeClaimStats,
19
- });
20
-
21
- if (data.incentiveFeeClaims.length > 0) {
22
- const sumAllClaims = data?.incentiveFeeClaims.reduce(
23
- (acc, curr) => acc + Number(curr.payoutAmount),
24
- 30_000, // this is due to a bug in the subgraph, where the first claim of 50_000 was counted as 20_000, once hunter pushed the fix we can upgrade it.
25
- );
26
- const claimsInLast24Hours = data?.incentiveFeeClaims.filter(
27
- (claim) => Number(claim.timestamp) / 1000 > Date.now() - days(1),
28
- );
29
- const sumClaimsInLast24Hours = claimsInLast24Hours.reduce(
30
- (acc, curr) => acc + Number(curr.payoutAmount),
31
- 0,
32
- );
33
- return {
34
- sumAllClaims,
35
- sumClaimsInLast24Hours,
36
- };
9
+ /** Browser-only. Hits `/api/pol/incentive-fee-claims` (server computes totals). */
10
+ export async function getIncentiveFeeClaimStats(): Promise<IncentiveFeeClaimStats> {
11
+ if (typeof window === "undefined") {
12
+ throw new BeraError({
13
+ message:
14
+ "getIncentiveFeeClaimStats is browser-only; call from a Client Component / SWR hook",
15
+ level: "error",
16
+ });
37
17
  }
38
18
 
39
- return {
40
- sumAllClaims: 0,
41
- sumClaimsInLast24Hours: 0,
42
- };
19
+ return beraFetchJson<IncentiveFeeClaimStats>({
20
+ url: "/api/pol/incentive-fee-claims",
21
+ name: "pol-incentive-fee-claims",
22
+ type: "rest",
23
+ });
43
24
  }
@@ -87,13 +87,13 @@ export async function getRewardVaults({
87
87
  ...vault,
88
88
  dynamicData: {
89
89
  ...vault.dynamicData,
90
- allTimeReceivedBGTAmount:
91
- vault.dynamicData?.allTimeReceivedBGTAmount ?? "0",
92
- bgtCapturePercentage: vault.dynamicData?.bgtCapturePercentage ?? "0",
90
+ allTimeRewards: vault.dynamicData?.allTimeRewards ?? "0",
91
+ rewardCapturePercentage:
92
+ vault.dynamicData?.rewardCapturePercentage ?? 0,
93
93
  activeIncentivesValueUsd: totalIncentiveInUsdc.toString(),
94
94
  activeIncentivesRateUsd:
95
95
  vault.dynamicData?.activeIncentivesRateUsd ?? "0",
96
- bgtCapturePerBlock: vault.dynamicData?.bgtCapturePerBlock ?? "0",
96
+ rewardCapturePerBlock: vault.dynamicData?.rewardCapturePerBlock ?? 0,
97
97
  },
98
98
  activeIncentives: incentivesArray,
99
99
  } satisfies typeof vault;
@@ -123,7 +123,7 @@ export async function getSWBeraVaultMetadata({
123
123
  publicClient,
124
124
  address,
125
125
  }),
126
- getIncentiveFeeClaimStats({}),
126
+ getIncentiveFeeClaimStats(),
127
127
  ]);
128
128
  const exchangeRateWindowAgo = new BigNumber(
129
129
  oneShareWorthWindowAgo.toString(),
@@ -1,9 +1,8 @@
1
1
  import type { Address } from "viem";
2
2
 
3
- import { getUriFromLink } from "@berachain/config";
4
-
5
- import { beraFetchJson } from "../../utils/beraFetch";
6
3
  import { parseBaseArgs } from "../../utils/parseBaseArgs";
4
+ import { fetchBeep } from "../clients/fetchBeep";
5
+ import { fetchRailwayBackend } from "../clients/fetchRailwayBackend";
7
6
 
8
7
  export async function getStakingDailyAssets({
9
8
  address,
@@ -11,20 +10,22 @@ export async function getStakingDailyAssets({
11
10
  }: {
12
11
  address: Address;
13
12
  range: 30 | 60 | 90;
14
- }): Promise<{ _timestamp: number; total_assets: string }[]> {
15
- const now = new Date();
16
- const startDayDate = new Date(
17
- now.getTime() - Number(range) * 24 * 60 * 60 * 1000,
18
- );
19
-
13
+ }) {
20
14
  const { config } = parseBaseArgs({});
21
- const url = `${getUriFromLink(config.staking)}/vaults/${address}/total-assets-by-day?start=${startDayDate.toISOString().split("T")[0]}`;
22
- return beraFetchJson<{ _timestamp: number; total_assets: string }[]>({
23
- url,
24
- name:
25
- typeof config.staking === "string"
26
- ? "backend-railway"
27
- : config.staking.name,
28
- type: "rest",
15
+
16
+ // TODO(beep): remove this entire block once `beep` is deployed on every
17
+ // chain. It is the only legacy-Railway-specific code left here; deleting it
18
+ // leaves the `beep` path below as the sole implementation.
19
+ if (!config.beep) {
20
+ return fetchRailwayBackend("/vaults/{vault}/stats-by-day", {
21
+ path: { vault: address },
22
+ query: { days: `${range}` },
23
+ });
24
+ }
25
+
26
+ // beep backend (next-gen), typed against `@berachain/graphql/beep`.
27
+ return fetchBeep("/v0/stake/{vault}/stats-by-day", {
28
+ path: { vault: address },
29
+ query: { days: `${range}` },
29
30
  });
30
31
  }
@@ -0,0 +1 @@
1
+ export * from "./getDailyValidatorBlockStats";
@@ -0,0 +1,33 @@
1
+ import type { Address } from "viem";
2
+
3
+ import {
4
+ GetValidatorBlockStats,
5
+ type GetValidatorBlockStatsQuery,
6
+ type GetValidatorBlockStatsQueryVariables,
7
+ } from "@berachain/graphql/pol/subgraph";
8
+
9
+ import { getApolloClient } from "../clients/getApolloClient";
10
+
11
+ /**
12
+ * Server-only RSC variant. Goes directly to the pol subgraph upstream
13
+ * (no auth required) through the shared Apollo client factory.
14
+ */
15
+ export async function getDailyValidatorBlockStats({
16
+ pubKey,
17
+ first = 1,
18
+ ...args
19
+ }: BeraJS.BaseFunctionArgs & {
20
+ pubKey: Address;
21
+ first?: number;
22
+ }): Promise<GetValidatorBlockStatsQuery | undefined> {
23
+ const client = getApolloClient("pol.subgraph", args);
24
+
25
+ const result = await client.query<
26
+ GetValidatorBlockStatsQuery,
27
+ GetValidatorBlockStatsQueryVariables
28
+ >({
29
+ query: GetValidatorBlockStats,
30
+ variables: { pubKey, first },
31
+ });
32
+ return result.data;
33
+ }
@@ -2,15 +2,12 @@ import { ethAddress } from "viem";
2
2
  import { assert, describe, expect, it } from "vitest";
3
3
 
4
4
  import { appConfig } from "@berachain/config/internal";
5
- import {
6
- defaultChain,
7
- externalChains,
8
- transports,
9
- } from "@berachain/config/internal/wagmi";
5
+ import { defaultChain, externalChains } from "@berachain/config/internal/wagmi";
10
6
 
11
7
  import { getConfig } from "@berachain/wagmi/config";
12
8
 
13
9
  import { isToken } from "../../utils/tokens";
10
+ import { testTransports } from "../__test/transports";
14
11
  import { getTokens } from "./getTokens";
15
12
  import { getWalletBalances } from "./getWalletBalances";
16
13
 
@@ -22,7 +19,7 @@ import { getWalletBalances } from "./getWalletBalances";
22
19
  const account = "0x08194D89A52C1410F4bcc46FE11AC2387aC69de8";
23
20
  describe("getWalletBalances", async () => {
24
21
  const { wagmi: wagmiConfig } = getConfig({
25
- transports,
22
+ transports: testTransports,
26
23
  defaultChain,
27
24
  chains: externalChains,
28
25
  thirdweb: { clientId: appConfig.apiKeys.public.thirdweb },
@@ -11,11 +11,7 @@ import { mnemonicToAccount } from "viem/accounts";
11
11
  import { assert, describe, expect, it } from "vitest";
12
12
 
13
13
  import { appConfig, ChainId, getRpcUrls } from "@berachain/config/internal";
14
- import {
15
- defaultChain,
16
- externalChains,
17
- transports,
18
- } from "@berachain/config/internal/wagmi";
14
+ import { defaultChain, externalChains } from "@berachain/config/internal/wagmi";
19
15
 
20
16
  import { bgtAbi } from "@berachain/abis/pol/bgt";
21
17
  import { rewardVaultAbi } from "@berachain/abis/pol/rewards/rewardVault";
@@ -28,6 +24,7 @@ import { getServerSidePublicClient } from "../../utils/getServerSideClient";
28
24
  import { getTestClient } from "../../utils/getTestClient";
29
25
  import { parseBaseArgs } from "../../utils/parseBaseArgs";
30
26
  import { anvilMnemonic } from "../../utils/test-utils";
27
+ import { testTransports } from "../__test/transports";
31
28
  import { getUserVaults } from "../pol/getUserVaults";
32
29
  import { beraWriteContract } from "./beraWriteContract";
33
30
 
@@ -38,7 +35,7 @@ const testFn: IContractWriteFn = async (_args) => {
38
35
  describe("beraWriteContract", () => {
39
36
  const { config } = parseBaseArgs({ chainId: defaultChain.id });
40
37
  const beraWagmiConfig = getConfig({
41
- transports,
38
+ transports: testTransports,
42
39
  defaultChain,
43
40
  chains: externalChains,
44
41
  thirdweb: { clientId: appConfig.apiKeys.public.thirdweb },
@@ -1,37 +1,38 @@
1
1
  import type { Address } from "viem";
2
2
 
3
- import {
4
- GetValidatorBlockStats,
5
- type GetValidatorBlockStatsQuery,
6
- type GetValidatorBlockStatsQueryVariables,
7
- } from "@berachain/graphql/pol/subgraph";
3
+ import type { GetValidatorBlockStatsQuery } from "@berachain/graphql/pol/subgraph";
8
4
 
9
- import { getApolloClient } from "../clients/getApolloClient";
5
+ import { BeraError } from "../../errors/BeraError";
6
+ import { beraFetchJson } from "../../utils/beraFetch";
10
7
 
8
+ /**
9
+ * Browser-only. Hits `/api/pol/validator-block-stats`. Server callers (RSC)
10
+ * should import from `@berachain/berajs/actions/server` instead — that path
11
+ * has the static Apollo + GraphQL imports and does not pass through the
12
+ * browser endpoint.
13
+ */
11
14
  export async function getDailyValidatorBlockStats({
12
15
  pubKey,
13
16
  first = 1,
14
- ...args
15
- }: BeraJS.BaseFunctionArgs & {
17
+ }: {
16
18
  pubKey: Address;
17
19
  first?: number;
18
20
  }): Promise<GetValidatorBlockStatsQuery | undefined> {
19
- const bgtClient = getApolloClient("pol.subgraph", args);
20
- try {
21
- const result = await bgtClient.query<
22
- GetValidatorBlockStatsQuery,
23
- GetValidatorBlockStatsQueryVariables
24
- >({
25
- query: GetValidatorBlockStats,
26
- variables: {
27
- pubKey,
28
- first,
29
- },
21
+ if (typeof window === "undefined") {
22
+ throw new BeraError({
23
+ message:
24
+ "getDailyValidatorBlockStats is browser-only; for RSC use @berachain/berajs/actions/server",
25
+ level: "error",
30
26
  });
31
-
32
- return result.data;
33
- } catch (e) {
34
- console.error("GetValidatorBlockStats:", e);
35
- throw e;
36
27
  }
28
+
29
+ const params = new URLSearchParams({
30
+ pubkey: pubKey,
31
+ first: String(first),
32
+ });
33
+ return beraFetchJson<GetValidatorBlockStatsQuery>({
34
+ url: `/api/pol/validator-block-stats?${params}`,
35
+ name: "pol-validator-block-stats",
36
+ type: "rest",
37
+ });
37
38
  }
@@ -1,34 +1,33 @@
1
1
  import type { Address } from "viem";
2
2
 
3
- import {
4
- GetValidatorAnalytics,
5
- type GetValidatorAnalyticsQuery,
6
- type GetValidatorAnalyticsQueryVariables,
7
- } from "@berachain/graphql/pol/subgraph";
3
+ import type { GetValidatorAnalyticsQuery } from "@berachain/graphql/pol/subgraph";
8
4
 
9
- import { calculateTimestampFromDays } from "../../utils/formatTimestamps";
10
- import { getApolloClient } from "../clients/getApolloClient";
5
+ import { BeraError } from "../../errors/BeraError";
6
+ import { beraFetchJson } from "../../utils/beraFetch";
11
7
 
8
+ /** Browser-only. Hits `/api/pol/validator-analytics`. */
12
9
  export async function getValidatorAnalytics({
13
10
  pubkey,
14
11
  dayRange,
15
- ...args
16
- }: BeraJS.BaseFunctionArgs & {
12
+ }: {
17
13
  pubkey: Address;
18
14
  dayRange: number;
19
15
  }): Promise<GetValidatorAnalyticsQuery | undefined> {
20
- const bgtClient = getApolloClient("pol.subgraph", args);
16
+ if (typeof window === "undefined") {
17
+ throw new BeraError({
18
+ message:
19
+ "getValidatorAnalytics is browser-only; call from a Client Component / SWR hook",
20
+ level: "error",
21
+ });
22
+ }
21
23
 
22
- const result = await bgtClient.query<
23
- GetValidatorAnalyticsQuery,
24
- GetValidatorAnalyticsQueryVariables
25
- >({
26
- query: GetValidatorAnalytics,
27
- variables: {
28
- pubKey: pubkey,
29
- timestamp: calculateTimestampFromDays(dayRange).toString(),
30
- },
24
+ const params = new URLSearchParams({
25
+ pubkey,
26
+ dayRange: String(dayRange),
27
+ });
28
+ return beraFetchJson<GetValidatorAnalyticsQuery>({
29
+ url: `/api/pol/validator-analytics?${params}`,
30
+ name: "pol-validator-analytics",
31
+ type: "rest",
31
32
  });
32
-
33
- return result.data;
34
33
  }
@@ -0,0 +1,33 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { GetValidatorIncentiveDistributionQuery } from "@berachain/graphql/pol/subgraph";
4
+
5
+ import { BeraError } from "../../errors/BeraError";
6
+ import { beraFetchJson } from "../../utils/beraFetch";
7
+
8
+ /** Browser-only. Hits `/api/pol/validator-incentive-distribution`. */
9
+ export async function getValidatorIncentiveDistribution({
10
+ pubkey,
11
+ dayRange,
12
+ }: {
13
+ pubkey: Address;
14
+ dayRange: number;
15
+ }): Promise<GetValidatorIncentiveDistributionQuery | undefined> {
16
+ if (typeof window === "undefined") {
17
+ throw new BeraError({
18
+ message:
19
+ "getValidatorIncentiveDistribution is browser-only; call from a Client Component / SWR hook",
20
+ level: "error",
21
+ });
22
+ }
23
+
24
+ const params = new URLSearchParams({
25
+ pubkey,
26
+ dayRange: String(dayRange),
27
+ });
28
+ return beraFetchJson<GetValidatorIncentiveDistributionQuery>({
29
+ url: `/api/pol/validator-incentive-distribution?${params}`,
30
+ name: "pol-validator-incentive-distribution",
31
+ type: "rest",
32
+ });
33
+ }
@@ -51,7 +51,7 @@ export function getValidatorBoostApy({
51
51
 
52
52
  const boostApy =
53
53
  (returnPerBgt *
54
- Number(validator.dynamicData?.lastDayDistributedBGTAmount ?? 0) *
54
+ Number(validator.dynamicData?.lastDayDistributedRewards ?? 0) *
55
55
  365) /
56
56
  (validatorActiveBoostAmount * bgtPrice);
57
57
 
@@ -4,6 +4,7 @@
4
4
  export enum ContractName {
5
5
  ENSO_ROUTER = "enso.router",
6
6
  POL_REWARD_VAULT = "pol.rewardVault",
7
+ POL_REWARD_VAULT_HELPER = "pol.rewardVaultHelper",
7
8
  BEX_POOL = "bex.pool",
8
9
  ERC20 = "others.erc20",
9
10
  ERC4626 = "others.erc4626",
@@ -1,6 +1,5 @@
1
1
  export * from "./contracts";
2
2
  export * from "./dex";
3
- export * from "./governance";
4
3
  export * from "./honey";
5
4
  export * from "./polling";
6
5
  export * from "./slippage";
@@ -0,0 +1 @@
1
+ export * from "../governance";