@berachain/berajs 0.2.8-beta.9 → 0.2.9

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 (237) 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 +2 -0
  6. package/dist/actions/clients/exports.mjs +12 -0
  7. package/dist/actions/exports.d.ts +104 -189
  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-3EARVV7K.mjs +414 -0
  14. package/dist/chunk-4Z4AK6SH.mjs +211 -0
  15. package/dist/chunk-75M6TF7M.mjs +25 -0
  16. package/dist/chunk-AFN4CVD3.mjs +326 -0
  17. package/dist/chunk-BGMRHTBQ.mjs +23 -0
  18. package/dist/chunk-CDFWPU2R.mjs +473 -0
  19. package/dist/chunk-CDK4YV3D.mjs +571 -0
  20. package/dist/chunk-DKMAIU74.mjs +62 -0
  21. package/dist/chunk-EXIUPSFN.mjs +86 -0
  22. package/dist/chunk-FFB5LFDW.mjs +35 -0
  23. package/dist/chunk-HQCOU6GY.mjs +243 -0
  24. package/dist/chunk-HSSJKHZ4.mjs +135 -0
  25. package/dist/chunk-J5I45WGQ.mjs +1769 -0
  26. package/dist/chunk-KQUMKB66.mjs +89 -0
  27. package/dist/chunk-NBYLMO2L.mjs +14 -0
  28. package/dist/chunk-NPBQLVL3.mjs +80 -0
  29. package/dist/chunk-O2NQFKJK.mjs +170 -0
  30. package/dist/chunk-QJIXTYTZ.mjs +4054 -0
  31. package/dist/chunk-SGIJVHZO.mjs +12 -0
  32. package/dist/chunk-SZ5C44L5.mjs +35 -0
  33. package/dist/chunk-WXXOISTU.mjs +96 -0
  34. package/dist/chunk-XIYN6AL6.mjs +160 -0
  35. package/dist/contexts/exports.d.ts +2 -2
  36. package/dist/contexts/exports.mjs +85 -2
  37. package/dist/enum/exports.d.ts +1 -1
  38. package/dist/enum/exports.mjs +46 -2
  39. package/dist/enum/governance/exports.d.ts +60 -0
  40. package/dist/enum/governance/exports.mjs +14 -0
  41. package/dist/errors/exports.d.ts +4 -3
  42. package/dist/errors/exports.mjs +48 -2
  43. package/dist/exports-BcUTGFUb.d.ts +40 -0
  44. package/dist/{getValidatorQueuedOperatorAddress-BcyxE9uw.d.ts → getValidatorQueuedOperatorAddress-Dw5KN5sh.d.ts} +2 -2
  45. package/dist/{global.d-5w_lvl2J.d.ts → global.d-BuGDKh4k.d.ts} +4 -240
  46. package/dist/hooks/exports.d.ts +69 -211
  47. package/dist/hooks/exports.mjs +7434 -4
  48. package/dist/hooks/governance/exports.d.ts +181 -0
  49. package/dist/hooks/governance/exports.mjs +888 -0
  50. package/dist/pol.d-CqPA9K6m.d.ts +142 -0
  51. package/dist/{txnEnum-7_o92X3N.d.cts → txnEnum-ByI5dtDi.d.ts} +2 -60
  52. package/dist/types/exports.d.ts +9 -9
  53. package/dist/types/exports.mjs +0 -1
  54. package/dist/types/governance/exports.d.ts +109 -0
  55. package/dist/types/governance/exports.mjs +0 -0
  56. package/dist/{useHoneySwapState-B494PQDl.d.ts → useHoneySwapState-vFmuFF0g.d.ts} +1 -1
  57. package/dist/utils/exports.d.ts +15 -6
  58. package/dist/utils/exports.mjs +825 -2
  59. package/package.json +49 -13
  60. package/src/actions/__test/transports.ts +61 -0
  61. package/src/actions/clients/exports.ts +4 -0
  62. package/src/actions/clients/getApolloClient.ts +58 -23
  63. package/src/actions/clients/getEnsoClient.ts +20 -9
  64. package/src/actions/dex/aggregators/enso/enso.ts +27 -17
  65. package/src/actions/dex/aggregators/enso/ensoErc4626.ts +2 -2
  66. package/src/actions/dex/aggregators/kyberswap.ts +18 -23
  67. package/src/actions/enso/__tests__/getEnsoUserTokensWithBalances.debug.test.ts +3 -6
  68. package/src/actions/exports.ts +4 -9
  69. package/src/actions/governance/exports.ts +9 -0
  70. package/src/actions/governance/getAllProposals.ts +10 -65
  71. package/src/actions/governance/getProposalDetails.ts +6 -33
  72. package/src/actions/governance/getProposalVotes.ts +8 -15
  73. package/src/actions/honey/getChartData.ts +27 -21
  74. package/src/actions/honey/getHoney24hVolume.ts +19 -22
  75. package/src/actions/pol/getAutoclaimedIncentives.ts +30 -0
  76. package/src/actions/pol/getBeraTokenTotalSupply.ts +45 -0
  77. package/src/actions/pol/getBgtIncentiveDistributorPaused.ts +35 -0
  78. package/src/actions/pol/getEarnedStakedBeraVault.ts +7 -11
  79. package/src/actions/pol/getGlobalData.ts +1 -0
  80. package/src/actions/pol/getHeroEarnVaults.ts +62 -0
  81. package/src/actions/pol/getIncentiveFeeClaimStats.ts +19 -38
  82. package/src/actions/pol/getSWBeraVaultMetadata.ts +1 -1
  83. package/src/actions/pol/getStakingDailyAssets.ts +7 -10
  84. package/src/actions/server/exports.ts +1 -0
  85. package/src/actions/server/getDailyValidatorBlockStats.ts +33 -0
  86. package/src/actions/tokens/getWalletBalances.integration.test.ts +3 -6
  87. package/src/actions/transactions/beraWriteContract.integration.test.ts +3 -6
  88. package/src/actions/validators/getDailyValidatorBlockStats.ts +25 -24
  89. package/src/actions/validators/getValidatorAnalytics.ts +20 -21
  90. package/src/actions/validators/getValidatorIncentiveDistribution.ts +33 -0
  91. package/src/enum/contracts.ts +1 -0
  92. package/src/enum/exports.ts +0 -1
  93. package/src/enum/governance/exports.ts +1 -0
  94. package/src/errors/BeraError.ts +47 -7
  95. package/src/errors/BeraTracing.unit.test.ts +65 -0
  96. package/src/errors/RequestError.ts +13 -1
  97. package/src/errors/exports.ts +5 -0
  98. package/src/errors/getRevertReason.integration.test.ts +3 -3
  99. package/src/errors/spanStatus.ts +78 -0
  100. package/src/errors/spanStatus.unit.test.ts +62 -0
  101. package/src/hooks/dex/useCreatePool.ts +1 -88
  102. package/src/hooks/dex/useOnChainPoolData.ts +27 -2
  103. package/src/hooks/dex/usePriceImpact.ts +12 -5
  104. package/src/hooks/enso/useBendDemultiply.ts +9 -1
  105. package/src/hooks/enso/useBendMultiply.ts +9 -1
  106. package/src/hooks/enso/useBendZapSupply.ts +26 -7
  107. package/src/hooks/enso/useEnsoSwapBundle.ts +17 -3
  108. package/src/hooks/enso/useEnsoUserTokensWithBalances.ts +13 -2
  109. package/src/hooks/exports.ts +2 -15
  110. package/src/hooks/governance/exports.ts +14 -0
  111. package/src/hooks/pol/useAutoclaimedIncentives.ts +49 -0
  112. package/src/hooks/pol/useStakedAPR.ts +2 -2
  113. package/src/hooks/pol/useStakedSnapshots.ts +5 -9
  114. package/src/hooks/validators/useValidator.ts +2 -0
  115. package/src/hooks/validators/useValidatorIncentiveDistribution.ts +39 -0
  116. package/src/types/bribe-boost.d.ts +8 -0
  117. package/src/types/exports.ts +0 -1
  118. package/src/types/governance/exports.ts +1 -0
  119. package/src/utils/beraFetch.ts +9 -3
  120. package/src/utils/exports.ts +1 -0
  121. package/src/utils/getServerSideClient.ts +4 -2
  122. package/src/utils/sanitizeRpcUrl.ts +22 -0
  123. package/src/utils/tracedTransport.ts +35 -0
  124. package/dist/BeraError-_mQdkanr.d.ts +0 -94
  125. package/dist/BexStatusProvider-DRymVlQf.d.cts +0 -70
  126. package/dist/HoneyConfigProvider-DfkjmzEf.d.cts +0 -390
  127. package/dist/RequestError-DSUzJ1Iy.d.cts +0 -144
  128. package/dist/abi/exports.cjs +0 -2
  129. package/dist/abi/exports.cjs.map +0 -1
  130. package/dist/abi/exports.d.cts +0 -6574
  131. package/dist/abi/exports.mjs.map +0 -1
  132. package/dist/actions/exports.cjs +0 -2
  133. package/dist/actions/exports.cjs.map +0 -1
  134. package/dist/actions/exports.d.cts +0 -1650
  135. package/dist/actions/exports.mjs.map +0 -1
  136. package/dist/chunk-45HIEVNI.cjs +0 -4
  137. package/dist/chunk-45HIEVNI.cjs.map +0 -1
  138. package/dist/chunk-47ILYVHC.mjs +0 -2
  139. package/dist/chunk-47ILYVHC.mjs.map +0 -1
  140. package/dist/chunk-575OK77P.mjs +0 -2
  141. package/dist/chunk-575OK77P.mjs.map +0 -1
  142. package/dist/chunk-5NVZG5N6.mjs +0 -2
  143. package/dist/chunk-5NVZG5N6.mjs.map +0 -1
  144. package/dist/chunk-6DIA6PXV.cjs +0 -2
  145. package/dist/chunk-6DIA6PXV.cjs.map +0 -1
  146. package/dist/chunk-6JJIZCVY.cjs +0 -2
  147. package/dist/chunk-6JJIZCVY.cjs.map +0 -1
  148. package/dist/chunk-7F72ZH4Q.mjs +0 -2
  149. package/dist/chunk-7F72ZH4Q.mjs.map +0 -1
  150. package/dist/chunk-AUA42YIG.mjs +0 -4
  151. package/dist/chunk-AUA42YIG.mjs.map +0 -1
  152. package/dist/chunk-BC2WX6O6.cjs +0 -2
  153. package/dist/chunk-BC2WX6O6.cjs.map +0 -1
  154. package/dist/chunk-CJOZC5Z2.cjs +0 -2
  155. package/dist/chunk-CJOZC5Z2.cjs.map +0 -1
  156. package/dist/chunk-D6L7LTA2.cjs +0 -2
  157. package/dist/chunk-D6L7LTA2.cjs.map +0 -1
  158. package/dist/chunk-DDEQFR3M.cjs +0 -2
  159. package/dist/chunk-DDEQFR3M.cjs.map +0 -1
  160. package/dist/chunk-GXV2JA36.mjs +0 -2
  161. package/dist/chunk-GXV2JA36.mjs.map +0 -1
  162. package/dist/chunk-ISYNEDET.mjs +0 -2
  163. package/dist/chunk-ISYNEDET.mjs.map +0 -1
  164. package/dist/chunk-JDDRTHFG.mjs +0 -2
  165. package/dist/chunk-JDDRTHFG.mjs.map +0 -1
  166. package/dist/chunk-JDZGYU5T.mjs +0 -2
  167. package/dist/chunk-JDZGYU5T.mjs.map +0 -1
  168. package/dist/chunk-LVOXBZMA.cjs +0 -2
  169. package/dist/chunk-LVOXBZMA.cjs.map +0 -1
  170. package/dist/chunk-MK5NS5B5.mjs +0 -2
  171. package/dist/chunk-MK5NS5B5.mjs.map +0 -1
  172. package/dist/chunk-NAXAZJJY.mjs +0 -2
  173. package/dist/chunk-NAXAZJJY.mjs.map +0 -1
  174. package/dist/chunk-NLVWRMGD.mjs +0 -2
  175. package/dist/chunk-NLVWRMGD.mjs.map +0 -1
  176. package/dist/chunk-OGBD5YOG.mjs +0 -2
  177. package/dist/chunk-OGBD5YOG.mjs.map +0 -1
  178. package/dist/chunk-OGJMSGB2.mjs +0 -2
  179. package/dist/chunk-OGJMSGB2.mjs.map +0 -1
  180. package/dist/chunk-OIYXOKTT.cjs +0 -2
  181. package/dist/chunk-OIYXOKTT.cjs.map +0 -1
  182. package/dist/chunk-OUD27MU7.cjs +0 -2
  183. package/dist/chunk-OUD27MU7.cjs.map +0 -1
  184. package/dist/chunk-PRLVZIKD.mjs +0 -2
  185. package/dist/chunk-PRLVZIKD.mjs.map +0 -1
  186. package/dist/chunk-Q2SNRLW3.cjs +0 -2
  187. package/dist/chunk-Q2SNRLW3.cjs.map +0 -1
  188. package/dist/chunk-REWME3FY.cjs +0 -2
  189. package/dist/chunk-REWME3FY.cjs.map +0 -1
  190. package/dist/chunk-RJN36GBU.mjs +0 -2
  191. package/dist/chunk-RJN36GBU.mjs.map +0 -1
  192. package/dist/chunk-RWOICHRW.cjs +0 -2
  193. package/dist/chunk-RWOICHRW.cjs.map +0 -1
  194. package/dist/chunk-S4CDSVLK.cjs +0 -2
  195. package/dist/chunk-S4CDSVLK.cjs.map +0 -1
  196. package/dist/chunk-SFEULGSX.cjs +0 -2
  197. package/dist/chunk-SFEULGSX.cjs.map +0 -1
  198. package/dist/chunk-WBTS6KFG.mjs +0 -2
  199. package/dist/chunk-WBTS6KFG.mjs.map +0 -1
  200. package/dist/chunk-WRFDB3QJ.cjs +0 -2
  201. package/dist/chunk-WRFDB3QJ.cjs.map +0 -1
  202. package/dist/chunk-XNJLSA6P.cjs +0 -2
  203. package/dist/chunk-XNJLSA6P.cjs.map +0 -1
  204. package/dist/contexts/exports.cjs +0 -2
  205. package/dist/contexts/exports.cjs.map +0 -1
  206. package/dist/contexts/exports.d.cts +0 -66
  207. package/dist/contexts/exports.mjs.map +0 -1
  208. package/dist/defaultFlags-D6KfkTZx.d.cts +0 -10
  209. package/dist/dex-C_BB0b0O.d.cts +0 -37
  210. package/dist/enum/exports.cjs +0 -2
  211. package/dist/enum/exports.cjs.map +0 -1
  212. package/dist/enum/exports.d.cts +0 -23
  213. package/dist/enum/exports.mjs.map +0 -1
  214. package/dist/errors/exports.cjs +0 -2
  215. package/dist/errors/exports.cjs.map +0 -1
  216. package/dist/errors/exports.d.cts +0 -327
  217. package/dist/errors/exports.mjs.map +0 -1
  218. package/dist/getValidatorQueuedOperatorAddress-Cql_D50j.d.cts +0 -562
  219. package/dist/global.d-B7IeayVX.d.cts +0 -474
  220. package/dist/honey-CYm0RWf4.d.cts +0 -14
  221. package/dist/hooks/exports.cjs +0 -4
  222. package/dist/hooks/exports.cjs.map +0 -1
  223. package/dist/hooks/exports.d.cts +0 -1734
  224. package/dist/hooks/exports.mjs.map +0 -1
  225. package/dist/polling-BKnyavLI.d.cts +0 -8
  226. package/dist/txnEnum-7_o92X3N.d.ts +0 -164
  227. package/dist/types/exports.cjs +0 -1
  228. package/dist/types/exports.cjs.map +0 -1
  229. package/dist/types/exports.d.cts +0 -90
  230. package/dist/types/exports.mjs.map +0 -1
  231. package/dist/useHoneySwapState-D6vpv19r.d.cts +0 -32
  232. package/dist/utils/exports.cjs +0 -2
  233. package/dist/utils/exports.cjs.map +0 -1
  234. package/dist/utils/exports.d.cts +0 -420
  235. package/dist/utils/exports.mjs.map +0 -1
  236. package/src/actions/dex/getIsTokenExploited.ts +0 -63
  237. package/src/hooks/dex/useExploitedTokens.ts +0 -57
@@ -1,24 +1,17 @@
1
- import {
2
- GetProposalVotes,
3
- type GetProposalVotesQuery,
4
- type GetProposalVotesQueryVariables,
1
+ import type {
2
+ GetProposalVotesQuery,
3
+ GetProposalVotesQueryVariables,
5
4
  } from "@berachain/graphql/governance";
6
5
 
7
- import { getApolloClient } from "../clients/getApolloClient";
8
-
9
6
  export type GetProposalVotesArgs = BeraJS.BaseFunctionArgs & {
10
7
  /** GraphQL variables forwarded to the GetProposalVotes query */
11
8
  variables: GetProposalVotesQueryVariables;
12
9
  };
13
10
 
14
11
  /** Fetches the votes for a proposal from the subgraph */
15
- export async function getProposalVotes({
16
- variables,
17
- ...args
18
- }: GetProposalVotesArgs) {
19
- const governanceClient = getApolloClient("governance.subgraph", args);
20
- return governanceClient.query<GetProposalVotesQuery>({
21
- query: GetProposalVotes,
22
- variables,
23
- });
12
+ export async function getProposalVotes(
13
+ _args: GetProposalVotesArgs,
14
+ ): Promise<{ data: GetProposalVotesQuery }> {
15
+ // Governance subgraph not live — return empty until indexer is available
16
+ return { data: { votes: [] } };
24
17
  }
@@ -1,27 +1,33 @@
1
- import {
2
- Aggregation_Interval,
3
- GetSnapshots,
4
- type GetSnapshotsQuery,
5
- type GetSnapshotsQueryVariables,
6
- } from "@berachain/graphql/honey";
1
+ import type { GetSnapshotsQuery } from "@berachain/graphql/honey";
7
2
 
8
- import { getApolloClient } from "../clients/getApolloClient";
3
+ import { BeraError } from "../../errors/BeraError";
4
+ import { beraFetchJson } from "../../utils/beraFetch";
5
+
6
+ /**
7
+ * Browser-only. Hits the typed `/api/honey/snapshots` endpoint.
8
+ * Server callers must compose the upstream query directly (this action is
9
+ * not server-safe — `fetch` against a relative URL has no origin off-browser).
10
+ */
9
11
  export async function getChartData({
10
12
  days,
11
- ...args
12
- }: BeraJS.BaseFunctionArgs & {
13
+ }: {
13
14
  days: number;
14
- }) {
15
- const client = getApolloClient("honey.subgraph", args);
15
+ }): Promise<GetSnapshotsQuery> {
16
+ if (typeof window === "undefined") {
17
+ throw new BeraError({
18
+ message:
19
+ "getChartData is browser-only; call from a Client Component / SWR hook",
20
+ level: "error",
21
+ });
22
+ }
16
23
 
17
- const res = await client.query<GetSnapshotsQuery, GetSnapshotsQueryVariables>(
18
- {
19
- query: GetSnapshots,
20
- variables: {
21
- interval: Aggregation_Interval.Day,
22
- first: days,
23
- },
24
- },
25
- );
26
- return res.data;
24
+ const params = new URLSearchParams({ interval: "day", first: String(days) });
25
+ const honeySnapshots = await beraFetchJson<
26
+ GetSnapshotsQuery["honeySnapshots"]
27
+ >({
28
+ url: `/api/honey/snapshots?${params}`,
29
+ name: "honey-snapshots",
30
+ type: "rest",
31
+ });
32
+ return { honeySnapshots };
27
33
  }
@@ -1,29 +1,26 @@
1
- import {
2
- Aggregation_Interval,
3
- GetSnapshots,
4
- type GetSnapshotsQuery,
5
- type GetSnapshotsQueryVariables,
6
- } from "@berachain/graphql/honey";
1
+ import type { GetSnapshotsQuery } from "@berachain/graphql/honey";
7
2
  import BigNumber from "@berachain/utils/pkg/bignumber.js";
8
3
 
9
- import { getApolloClient } from "../clients/getApolloClient";
4
+ import { BeraError } from "../../errors/BeraError";
5
+ import { beraFetchJson } from "../../utils/beraFetch";
10
6
 
11
- export async function getHoney24hVolume({
12
- ...args
13
- }: BeraJS.BaseFunctionArgs = {}) {
14
- const client = getApolloClient("honey.subgraph", args);
15
- const result = await client.query<
16
- GetSnapshotsQuery,
17
- GetSnapshotsQueryVariables
18
- >({
19
- query: GetSnapshots,
20
- variables: {
21
- interval: Aggregation_Interval.Hour,
22
- first: 24,
23
- },
24
- });
7
+ /** Browser-only. Hits `/api/honey/snapshots?interval=hour&first=24` and reduces. */
8
+ export async function getHoney24hVolume(): Promise<BigNumber | undefined> {
9
+ if (typeof window === "undefined") {
10
+ throw new BeraError({
11
+ message:
12
+ "getHoney24hVolume is browser-only; call from a Client Component / SWR hook",
13
+ level: "error",
14
+ });
15
+ }
25
16
 
26
- return result.data?.honeySnapshots.reduce(
17
+ const params = new URLSearchParams({ interval: "hour", first: "24" });
18
+ const snapshots = await beraFetchJson<GetSnapshotsQuery["honeySnapshots"]>({
19
+ url: `/api/honey/snapshots?${params}`,
20
+ name: "honey-snapshots",
21
+ type: "rest",
22
+ });
23
+ return snapshots.reduce(
27
24
  (acc, curr) => new BigNumber(curr.totalVolume).plus(acc),
28
25
  new BigNumber(0),
29
26
  );
@@ -0,0 +1,30 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { AutoclaimedIncentivesResponse } from "../../types/bribe-boost";
4
+ import { beraFetchJson } from "../../utils/beraFetch";
5
+ import { parseBaseArgs } from "../../utils/parseBaseArgs";
6
+
7
+ /**
8
+ * Server-side function to fetch the incentives the bot autoclaimed on behalf
9
+ * of a wallet during the BGT → BERA cutover. Only valid to call once the
10
+ * bgtIncentiveDistributor contract is paused.
11
+ */
12
+ export async function getAutoclaimedIncentives({
13
+ account,
14
+ ...args
15
+ }: {
16
+ account: Address;
17
+ } & BeraJS.BaseFunctionArgs): Promise<AutoclaimedIncentivesResponse | null> {
18
+ const { config } = parseBaseArgs(args);
19
+
20
+ return beraFetchJson<AutoclaimedIncentivesResponse>(
21
+ {
22
+ url: `${
23
+ config.pol.bribeBoostApi
24
+ }/api/v1/wallets/${account.toLowerCase()}/autoclaimed`,
25
+ name: "pol-autoclaimed-incentives",
26
+ type: "rest",
27
+ },
28
+ { cache: "no-store" },
29
+ );
30
+ }
@@ -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,35 @@
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
+ * Fails closed: any read error returns `false` so the banner stays hidden.
14
+ */
15
+ export async function getBgtIncentiveDistributorPaused({
16
+ publicClient,
17
+ ...args
18
+ }: {
19
+ publicClient: PublicClient | undefined;
20
+ } & BeraJS.BaseFunctionArgs): Promise<boolean> {
21
+ assertPublicClient(publicClient);
22
+
23
+ const { config } = parseBaseArgs(args);
24
+
25
+ try {
26
+ const paused = await publicClient.readContract({
27
+ address: config.pol.bgtIncentiveDistributor,
28
+ abi: bgtIncentiveDistributorAbi,
29
+ functionName: "paused",
30
+ });
31
+ return paused;
32
+ } catch {
33
+ return false;
34
+ }
35
+ }
@@ -2,15 +2,11 @@ import type { Address } from "viem";
2
2
 
3
3
  import { getUriFromLink } from "@berachain/config";
4
4
 
5
+ import type { VaultEarningResponse } from "@berachain/graphql/api";
6
+
5
7
  import { beraFetchJson } from "../../utils/beraFetch";
6
8
  import { parseBaseArgs } from "../../utils/parseBaseArgs";
7
9
 
8
- type StakingHistoryData = {
9
- currentDepositRate: string;
10
- earningsRealized: string;
11
- earningsTotal: string;
12
- };
13
-
14
10
  type GetEarnedStakedBeraVaultArgs = {
15
11
  /**
16
12
  * The token that the user has staked
@@ -26,16 +22,16 @@ export async function getEarnedStakedBeraVault({
26
22
  account,
27
23
  ...args
28
24
  }: BeraJS.BaseFunctionArgs &
29
- GetEarnedStakedBeraVaultArgs): Promise<StakingHistoryData> {
25
+ GetEarnedStakedBeraVaultArgs): Promise<VaultEarningResponse> {
30
26
  const { config } = parseBaseArgs(args);
31
27
 
32
- const url = `${getUriFromLink(config.staking)}/vaults/${address}/earnings/${account}`;
33
- return beraFetchJson<StakingHistoryData>({
28
+ const url = `${getUriFromLink(config.backend)}/vaults/${address}/earnings/${account}`;
29
+ return beraFetchJson<VaultEarningResponse>({
34
30
  url,
35
31
  name:
36
- typeof config.staking === "string"
32
+ typeof config.backend === "string"
37
33
  ? "backend-railway"
38
- : config.staking.name,
34
+ : config.backend.name,
39
35
  type: "rest",
40
36
  });
41
37
  }
@@ -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
  }
@@ -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(),
@@ -2,6 +2,8 @@ import type { Address } from "viem";
2
2
 
3
3
  import { getUriFromLink } from "@berachain/config";
4
4
 
5
+ import type { VaultStatsByDayResponse } from "@berachain/graphql/api";
6
+
5
7
  import { beraFetchJson } from "../../utils/beraFetch";
6
8
  import { parseBaseArgs } from "../../utils/parseBaseArgs";
7
9
 
@@ -11,20 +13,15 @@ export async function getStakingDailyAssets({
11
13
  }: {
12
14
  address: Address;
13
15
  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
-
16
+ }): Promise<VaultStatsByDayResponse> {
20
17
  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 }[]>({
18
+ const url = `${getUriFromLink(config.backend)}/vaults/${address}/stats-by-day?days=${range}`;
19
+ return beraFetchJson<VaultStatsByDayResponse>({
23
20
  url,
24
21
  name:
25
- typeof config.staking === "string"
22
+ typeof config.backend === "string"
26
23
  ? "backend-railway"
27
- : config.staking.name,
24
+ : config.backend.name,
28
25
  type: "rest",
29
26
  });
30
27
  }
@@ -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
  }