@berachain/berajs 0.2.8-beta.2 → 0.2.8-beta.4

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 (153) hide show
  1. package/dist/abi/exports.cjs +4452 -1
  2. package/dist/abi/exports.cjs.map +1 -1
  3. package/dist/abi/exports.mjs +4452 -1
  4. package/dist/abi/exports.mjs.map +1 -1
  5. package/dist/actions/exports.cjs +918 -1
  6. package/dist/actions/exports.cjs.map +1 -1
  7. package/dist/actions/exports.mjs +918 -1
  8. package/dist/actions/exports.mjs.map +1 -1
  9. package/dist/chunk-24HMIYTN.cjs +36 -0
  10. package/dist/chunk-24HMIYTN.cjs.map +1 -0
  11. package/dist/chunk-2LL77B3T.cjs +135 -0
  12. package/dist/chunk-2LL77B3T.cjs.map +1 -0
  13. package/dist/chunk-3LXVARBJ.cjs +417 -0
  14. package/dist/chunk-3LXVARBJ.cjs.map +1 -0
  15. package/dist/chunk-4HDIUUSV.cjs +130 -0
  16. package/dist/chunk-4HDIUUSV.cjs.map +1 -0
  17. package/dist/chunk-7ONKBHXY.cjs +169 -0
  18. package/dist/chunk-7ONKBHXY.cjs.map +1 -0
  19. package/dist/chunk-7TFV6UKF.mjs +24 -0
  20. package/dist/{chunk-MK5NS5B5.mjs.map → chunk-7TFV6UKF.mjs.map} +1 -1
  21. package/dist/chunk-A4FPM7U3.cjs +63 -0
  22. package/dist/chunk-A4FPM7U3.cjs.map +1 -0
  23. package/dist/chunk-A7P3JVU7.cjs +4694 -0
  24. package/dist/chunk-A7P3JVU7.cjs.map +1 -0
  25. package/dist/chunk-ALPEMPZI.mjs +417 -0
  26. package/dist/chunk-ALPEMPZI.mjs.map +1 -0
  27. package/dist/chunk-BEHP54S3.cjs +24 -0
  28. package/dist/chunk-BEHP54S3.cjs.map +1 -0
  29. package/dist/chunk-CYBZH6U3.mjs +135 -0
  30. package/dist/{chunk-FM3WDBFH.mjs.map → chunk-CYBZH6U3.mjs.map} +1 -1
  31. package/dist/chunk-EWBKSMPG.cjs +13 -0
  32. package/dist/chunk-EWBKSMPG.cjs.map +1 -0
  33. package/dist/chunk-GLWPRM33.mjs +13 -0
  34. package/dist/{chunk-575OK77P.mjs.map → chunk-GLWPRM33.mjs.map} +1 -1
  35. package/dist/chunk-GWSTVITN.mjs +572 -0
  36. package/dist/{chunk-NLVWRMGD.mjs.map → chunk-GWSTVITN.mjs.map} +1 -1
  37. package/dist/chunk-H3Z37RYU.cjs +15 -0
  38. package/dist/chunk-H3Z37RYU.cjs.map +1 -0
  39. package/dist/chunk-HCC4FJTD.cjs +97 -0
  40. package/dist/chunk-HCC4FJTD.cjs.map +1 -0
  41. package/dist/chunk-J6EHBYSV.mjs +97 -0
  42. package/dist/{chunk-IDFMLLDY.mjs.map → chunk-J6EHBYSV.mjs.map} +1 -1
  43. package/dist/chunk-JA4DHMTG.mjs +15 -0
  44. package/dist/{chunk-OGBD5YOG.mjs.map → chunk-JA4DHMTG.mjs.map} +1 -1
  45. package/dist/chunk-KL6YZ5VR.mjs +63 -0
  46. package/dist/{chunk-OGJMSGB2.mjs.map → chunk-KL6YZ5VR.mjs.map} +1 -1
  47. package/dist/chunk-MILSHCKW.cjs +168 -0
  48. package/dist/chunk-MILSHCKW.cjs.map +1 -0
  49. package/dist/chunk-MKS6W5NI.mjs +403 -0
  50. package/dist/{chunk-COMMLZ3O.mjs.map → chunk-MKS6W5NI.mjs.map} +1 -1
  51. package/dist/chunk-MXWPP6MS.cjs +572 -0
  52. package/dist/chunk-MXWPP6MS.cjs.map +1 -0
  53. package/dist/chunk-OWUI3VPI.mjs +169 -0
  54. package/dist/{chunk-QRAIGQF2.mjs.map → chunk-OWUI3VPI.mjs.map} +1 -1
  55. package/dist/chunk-PBCE7JTE.mjs +36 -0
  56. package/dist/{chunk-MJZHJFZO.mjs.map → chunk-PBCE7JTE.mjs.map} +1 -1
  57. package/dist/chunk-QISQSMCV.cjs +1843 -0
  58. package/dist/chunk-QISQSMCV.cjs.map +1 -0
  59. package/dist/chunk-SYWYIMY7.mjs +4694 -0
  60. package/dist/chunk-SYWYIMY7.mjs.map +1 -0
  61. package/dist/chunk-TDW5SPXR.cjs +244 -0
  62. package/dist/chunk-TDW5SPXR.cjs.map +1 -0
  63. package/dist/chunk-TGHG6Q3C.cjs +403 -0
  64. package/dist/chunk-TGHG6Q3C.cjs.map +1 -0
  65. package/dist/chunk-WAFQFAI7.mjs +130 -0
  66. package/dist/{chunk-BEKH5EYT.mjs.map → chunk-WAFQFAI7.mjs.map} +1 -1
  67. package/dist/chunk-WEULAXBE.mjs +168 -0
  68. package/dist/{chunk-T5FSQ3YE.mjs.map → chunk-WEULAXBE.mjs.map} +1 -1
  69. package/dist/chunk-ZCEFC2TK.mjs +244 -0
  70. package/dist/{chunk-NAXAZJJY.mjs.map → chunk-ZCEFC2TK.mjs.map} +1 -1
  71. package/dist/chunk-ZV7DCQQY.mjs +1843 -0
  72. package/dist/{chunk-74QD4JAH.mjs.map → chunk-ZV7DCQQY.mjs.map} +1 -1
  73. package/dist/contexts/exports.cjs +82 -1
  74. package/dist/contexts/exports.cjs.map +1 -1
  75. package/dist/contexts/exports.mjs +82 -1
  76. package/dist/contexts/exports.mjs.map +1 -1
  77. package/dist/enum/exports.cjs +58 -1
  78. package/dist/enum/exports.cjs.map +1 -1
  79. package/dist/enum/exports.mjs +58 -1
  80. package/dist/enum/exports.mjs.map +1 -1
  81. package/dist/errors/exports.cjs +38 -1
  82. package/dist/errors/exports.cjs.map +1 -1
  83. package/dist/errors/exports.mjs +38 -1
  84. package/dist/hooks/exports.cjs +8327 -3
  85. package/dist/hooks/exports.cjs.map +1 -1
  86. package/dist/hooks/exports.mjs +8327 -3
  87. package/dist/hooks/exports.mjs.map +1 -1
  88. package/dist/utils/exports.cjs +786 -1
  89. package/dist/utils/exports.cjs.map +1 -1
  90. package/dist/utils/exports.mjs +786 -1
  91. package/dist/utils/exports.mjs.map +1 -1
  92. package/package.json +4 -4
  93. package/src/actions/dex/aggregators/base.ts +3 -1
  94. package/src/actions/governance/getDecodedFunctionData.ts +6 -1
  95. package/src/actions/honey/getHoneyPythPriceOracle.ts +1 -1
  96. package/src/actions/honey/getHoneyRootPriceOracle.ts +1 -1
  97. package/src/actions/pol/getRewardVaultBeaconImplementation.ts +1 -1
  98. package/src/actions/pol/getTotalStakedAmount.ts +1 -1
  99. package/src/actions/pol/getUserClaimableIncentives.ts +1 -1
  100. package/src/actions/pol/getUserVaultsReward.ts +1 -1
  101. package/src/actions/tokens/getUnderlyingToken.ts +3 -1
  102. package/src/actions/validators/getUserBoosts.ts +1 -1
  103. package/src/utils/getErrorResponse.ts +1 -1
  104. package/dist/chunk-2YBHAMDV.cjs +0 -2
  105. package/dist/chunk-2YBHAMDV.cjs.map +0 -1
  106. package/dist/chunk-3YEM767C.mjs +0 -4
  107. package/dist/chunk-3YEM767C.mjs.map +0 -1
  108. package/dist/chunk-575OK77P.mjs +0 -2
  109. package/dist/chunk-57RINXU6.cjs +0 -2
  110. package/dist/chunk-57RINXU6.cjs.map +0 -1
  111. package/dist/chunk-64OF6RU5.cjs +0 -4
  112. package/dist/chunk-64OF6RU5.cjs.map +0 -1
  113. package/dist/chunk-74QD4JAH.mjs +0 -2
  114. package/dist/chunk-74WA35RI.cjs +0 -2
  115. package/dist/chunk-74WA35RI.cjs.map +0 -1
  116. package/dist/chunk-BEKH5EYT.mjs +0 -2
  117. package/dist/chunk-CF3LFNXG.cjs +0 -2
  118. package/dist/chunk-CF3LFNXG.cjs.map +0 -1
  119. package/dist/chunk-COMMLZ3O.mjs +0 -2
  120. package/dist/chunk-DDEQFR3M.cjs +0 -2
  121. package/dist/chunk-DDEQFR3M.cjs.map +0 -1
  122. package/dist/chunk-DK42F2ZM.cjs +0 -2
  123. package/dist/chunk-DK42F2ZM.cjs.map +0 -1
  124. package/dist/chunk-FM3WDBFH.mjs +0 -2
  125. package/dist/chunk-I7M43BB4.cjs +0 -2
  126. package/dist/chunk-I7M43BB4.cjs.map +0 -1
  127. package/dist/chunk-IDFMLLDY.mjs +0 -2
  128. package/dist/chunk-LNVR4BW6.cjs +0 -2
  129. package/dist/chunk-LNVR4BW6.cjs.map +0 -1
  130. package/dist/chunk-MJZHJFZO.mjs +0 -2
  131. package/dist/chunk-MK5NS5B5.mjs +0 -2
  132. package/dist/chunk-NAXAZJJY.mjs +0 -2
  133. package/dist/chunk-NLVWRMGD.mjs +0 -2
  134. package/dist/chunk-NMH7LHPW.cjs +0 -2
  135. package/dist/chunk-NMH7LHPW.cjs.map +0 -1
  136. package/dist/chunk-NVHV2LDK.cjs +0 -2
  137. package/dist/chunk-NVHV2LDK.cjs.map +0 -1
  138. package/dist/chunk-OGBD5YOG.mjs +0 -2
  139. package/dist/chunk-OGJMSGB2.mjs +0 -2
  140. package/dist/chunk-OIYXOKTT.cjs +0 -2
  141. package/dist/chunk-OIYXOKTT.cjs.map +0 -1
  142. package/dist/chunk-OUD27MU7.cjs +0 -2
  143. package/dist/chunk-OUD27MU7.cjs.map +0 -1
  144. package/dist/chunk-PLIH6KQM.mjs +0 -2
  145. package/dist/chunk-PLIH6KQM.mjs.map +0 -1
  146. package/dist/chunk-QRAIGQF2.mjs +0 -2
  147. package/dist/chunk-RWOICHRW.cjs +0 -2
  148. package/dist/chunk-RWOICHRW.cjs.map +0 -1
  149. package/dist/chunk-T5FSQ3YE.mjs +0 -2
  150. package/dist/chunk-WRFDB3QJ.cjs +0 -2
  151. package/dist/chunk-WRFDB3QJ.cjs.map +0 -1
  152. package/dist/chunk-XNJLSA6P.cjs +0 -2
  153. package/dist/chunk-XNJLSA6P.cjs.map +0 -1
@@ -0,0 +1,417 @@
1
+ import {
2
+ RequestError
3
+ } from "./chunk-ZV7DCQQY.mjs";
4
+
5
+ // src/utils/getErrorResponse.ts
6
+ async function getErrorResponse(response) {
7
+ const contentType = response.headers.get("content-type");
8
+ if (contentType?.includes("application/json")) {
9
+ return response.json();
10
+ } else {
11
+ const text = await response.text();
12
+ try {
13
+ return JSON.parse(text);
14
+ } catch {
15
+ return {
16
+ message: "Unknown error, can't decode response into JSON",
17
+ cause: text
18
+ };
19
+ }
20
+ }
21
+ }
22
+
23
+ // src/utils/beraFetch.ts
24
+ async function beraFetch(endpoint, options) {
25
+ try {
26
+ const response = await fetch(
27
+ typeof endpoint === "string" || endpoint instanceof URL ? endpoint : endpoint.url,
28
+ {
29
+ ...options
30
+ }
31
+ );
32
+ if (!response.ok) {
33
+ const error = await getErrorResponse(response);
34
+ throw new RequestError({
35
+ cause: error,
36
+ // @to-do import getErrorResponse logic in this function
37
+ // when it's removed from other places
38
+ response,
39
+ endpoint
40
+ });
41
+ }
42
+ return response;
43
+ } catch (error) {
44
+ if (error instanceof RequestError) {
45
+ throw error;
46
+ }
47
+ throw new RequestError({
48
+ cause: error,
49
+ endpoint,
50
+ response: void 0
51
+ });
52
+ }
53
+ }
54
+ async function beraFetchJson(endpoint, options) {
55
+ const response = await beraFetch(endpoint, {
56
+ ...options,
57
+ headers: {
58
+ Accept: "application/json",
59
+ ...options?.headers
60
+ }
61
+ });
62
+ return response.json();
63
+ }
64
+
65
+ // src/utils/constants.ts
66
+ import { parseEther } from "viem";
67
+ var CAP_LIMIT_BUFFER = parseEther("0.005");
68
+ var MAX_CUSTOM_DEADLINE = 1e5;
69
+ var MIN_CUSTOM_DEADLINE = 1;
70
+ var MIN_CUSTOM_SLIPPAGE = 0.1;
71
+ var MAX_CUSTOM_SLIPPAGE = 50;
72
+ var DEFAULT_METAMASK_GAS_LIMIT = 7920027n;
73
+
74
+ // src/utils/pythHoneyUtils.ts
75
+ var getPythDefaultUpdateFee = (tokenListLength) => {
76
+ return 2n * BigInt(tokenListLength);
77
+ };
78
+
79
+ // src/utils/time.ts
80
+ function msToSeconds(ms) {
81
+ return Math.floor(ms / 1e3);
82
+ }
83
+ function seconds(seconds2) {
84
+ return seconds2 * 1e3;
85
+ }
86
+ function minutes(minutes2) {
87
+ return minutes2 * seconds(60);
88
+ }
89
+ function minutesInSeconds(minutes2) {
90
+ return minutes2 * 60;
91
+ }
92
+ function hours(hours2) {
93
+ return hours2 * minutes(60);
94
+ }
95
+ function hoursInSeconds(hours2) {
96
+ return hours2 * minutesInSeconds(60);
97
+ }
98
+ function days(days2) {
99
+ return days2 * hours(24);
100
+ }
101
+ function daysInSeconds(days2) {
102
+ return days2 * hoursInSeconds(24);
103
+ }
104
+ function weeks(weeks2) {
105
+ return weeks2 * days(7);
106
+ }
107
+ function weeksInSeconds(weeks2) {
108
+ return weeks2 * daysInSeconds(7);
109
+ }
110
+ function months(months2) {
111
+ return months2 * days(30);
112
+ }
113
+ function monthsInSeconds(months2) {
114
+ return months2 * daysInSeconds(30);
115
+ }
116
+ function years(years2) {
117
+ return years2 * days(365);
118
+ }
119
+ function yearsInSeconds(years2) {
120
+ return years2 * daysInSeconds(365);
121
+ }
122
+
123
+ // src/utils/formatTimestamps.ts
124
+ function calculateTimestampFromDays(daysRange) {
125
+ const currentDate = /* @__PURE__ */ new Date();
126
+ return currentDate.setDate(currentDate.getDate() - daysRange) * 1e3;
127
+ }
128
+ var monthNames = [
129
+ "January",
130
+ "February",
131
+ "March",
132
+ "April",
133
+ "May",
134
+ "June",
135
+ "July",
136
+ "August",
137
+ "September",
138
+ "October",
139
+ "November",
140
+ "December"
141
+ ];
142
+ var shortMonthNames = [
143
+ "Jan",
144
+ "Feb",
145
+ "Mar",
146
+ "Apr",
147
+ "May",
148
+ "Jun",
149
+ "Jul",
150
+ "Aug",
151
+ "Sep",
152
+ "Oct",
153
+ "Nov",
154
+ "Dec"
155
+ ];
156
+ function formatUnixTimestamp(unixTimestamp, isShort) {
157
+ const date = new Date(unixTimestamp * 1e3);
158
+ const day = date.getDate();
159
+ let daySuffix = "th";
160
+ if (day === 1 || day === 21 || day === 31) {
161
+ daySuffix = "st";
162
+ } else if (day === 2 || day === 22) {
163
+ daySuffix = "nd";
164
+ } else if (day === 3 || day === 23) {
165
+ daySuffix = "rd";
166
+ }
167
+ if (isShort) {
168
+ return `${shortMonthNames[date.getMonth()]} ${day}`;
169
+ }
170
+ return `${monthNames[date.getMonth()]} ${day}${daySuffix}, ${date.getFullYear()}`;
171
+ }
172
+ function formatTimeLeft(...args) {
173
+ const timeLeftInSeconds = args[0];
174
+ let condensed;
175
+ let showDays;
176
+ let showMinutes;
177
+ let showSeconds;
178
+ if (typeof args[1] !== "object") {
179
+ condensed = args[1] ?? false;
180
+ showDays = args[2] ?? false;
181
+ showSeconds = args[3] ?? false;
182
+ showMinutes = true;
183
+ } else {
184
+ const opts = args[1];
185
+ condensed = opts.condensed ?? false;
186
+ const greaterUnit = opts.greaterUnit ?? "hours";
187
+ if (greaterUnit === "days") {
188
+ showDays = true;
189
+ showMinutes = true;
190
+ } else if (greaterUnit === "hours") {
191
+ showDays = false;
192
+ showMinutes = true;
193
+ showSeconds = false;
194
+ } else {
195
+ showDays = false;
196
+ showMinutes = true;
197
+ }
198
+ showSeconds = opts.showSeconds ?? false;
199
+ }
200
+ let days2 = Math.floor(timeLeftInSeconds / (3600 * 24));
201
+ let hours2 = Math.floor(timeLeftInSeconds % (3600 * 24) / 3600);
202
+ const minutes2 = Math.floor(timeLeftInSeconds % 3600 / 60);
203
+ const seconds2 = timeLeftInSeconds % 60;
204
+ if (!showDays) {
205
+ hours2 += days2 * 24;
206
+ days2 = 0;
207
+ }
208
+ if (days2 === 0 && hours2 === 0 && minutes2 === 0) {
209
+ return condensed ? "< 1 M" : "less than a minute";
210
+ }
211
+ const daysDisplay = days2 > 0 ? `${days2}${condensed ? "D" : " day"}${!condensed && days2 !== 1 ? "s" : ""}` : "";
212
+ const hoursDisplay = hours2 > 0 ? `${hours2}${condensed ? "H" : " hour"}${!condensed && hours2 !== 1 ? "s" : ""}` : "";
213
+ const minutesDisplay = minutes2 > 0 && showMinutes || !days2 && !hours2 ? `${minutes2}${condensed ? "M" : " minute"}${!condensed && minutes2 !== 1 ? "s" : ""}` : "";
214
+ const secondsDisplay = seconds2 > 0 && showSeconds ? `${seconds2}${condensed ? "S" : " second"}${!condensed && seconds2 !== 1 ? "s" : ""}` : "";
215
+ return [daysDisplay, hoursDisplay, minutesDisplay, secondsDisplay].filter(Boolean).join(condensed ? " " : ", ");
216
+ }
217
+
218
+ // ../utils/src/pkg/bignumber.js.ts
219
+ import BigNumber from "bignumber.js";
220
+ BigNumber.set({
221
+ // The EXPONENTIAL_AT option defines the exponent value(s) at which toString returns exponential notation.
222
+ // - Single number: the exponent magnitude at and above which exponential notation is used (e.g., `1e9` here disables it for almost all values).
223
+ // - 1e9 is the maximum value supported by BigNumber.js.
224
+ // See: https://mikemcl.github.io/bignumber.js/#exponential-at
225
+ EXPONENTIAL_AT: 1e9
226
+ });
227
+ var bignumber_js_default = BigNumber;
228
+
229
+ // src/utils/formatNumber.ts
230
+ var POSTFIXES = ["", "K", "M", "B", "T", "P", "E", "Z", "Y"];
231
+ function valueToBigNumber(amount) {
232
+ if (amount instanceof bignumber_js_default) return amount;
233
+ return new bignumber_js_default(amount);
234
+ }
235
+ function normalizeBN(n, decimals) {
236
+ return valueToBigNumber(n).shiftedBy(decimals * -1);
237
+ }
238
+ function formatNumber(value, options = {}) {
239
+ if (typeof options === "number") {
240
+ const decimals2 = options;
241
+ if (value === void 0 || value === null) {
242
+ return "";
243
+ }
244
+ if (typeof value === "object") {
245
+ throw new Error("Value must be a number if using deprecated version");
246
+ }
247
+ let formatted = Number(value).toFixed(decimals2);
248
+ formatted = formatted.replace(/(\.\d*?[1-9])0+$|\.0*$/, "$1");
249
+ return formatted;
250
+ }
251
+ const {
252
+ visibleDecimals,
253
+ compact = true,
254
+ percent = false,
255
+ roundDown = false,
256
+ roundUp = false,
257
+ compactThreshold,
258
+ maxValue,
259
+ symbol,
260
+ prefixText = "",
261
+ suffixText = "",
262
+ showIsSmallerThanMin = true,
263
+ ifNullish = ""
264
+ } = options || {};
265
+ if (value === void 0 || value === null) {
266
+ return ifNullish;
267
+ }
268
+ const number = percent ? Number(value) * 100 : Number(value);
269
+ if (Number.isNaN(number)) {
270
+ return "NaN";
271
+ }
272
+ if (number === Number.POSITIVE_INFINITY) {
273
+ return "Infinity";
274
+ }
275
+ if (number === Number.NEGATIVE_INFINITY) {
276
+ return "-Infinity";
277
+ }
278
+ let decimals = visibleDecimals ?? 0;
279
+ if (number === 0) {
280
+ decimals = 0;
281
+ } else if (visibleDecimals === void 0) {
282
+ if (Math.abs(number) > 1 || percent || symbol === "USD") {
283
+ decimals = 2;
284
+ } else {
285
+ decimals = 7;
286
+ }
287
+ }
288
+ const minValue = 10 ** -decimals;
289
+ const isSmallerThanMin = number !== 0 && Math.abs(number) < Math.abs(minValue);
290
+ const isNegative = number < 0;
291
+ const isBiggerThanMax = maxValue ? Math.abs(number) > maxValue : false;
292
+ let formattedNumber = isSmallerThanMin ? minValue : number;
293
+ const forceCompact = compact && (!compactThreshold || Math.abs(number) > compactThreshold);
294
+ if (roundDown && !forceCompact) {
295
+ formattedNumber = Math.trunc(Number(formattedNumber) * 10 ** decimals) / 10 ** decimals;
296
+ } else if (roundUp && !forceCompact) {
297
+ formattedNumber = Math.ceil(Number(formattedNumber) * 10 ** decimals) / 10 ** decimals;
298
+ }
299
+ let formattedValue;
300
+ if (isBiggerThanMax) {
301
+ formattedValue = number > maxValue ? "\u221E" : "-\u221E";
302
+ } else if (!forceCompact) {
303
+ const absFormatted = new Intl.NumberFormat("en-US", {
304
+ maximumFractionDigits: decimals,
305
+ minimumFractionDigits: decimals
306
+ }).format(Math.abs(formattedNumber));
307
+ formattedValue = `${isNegative ? "-" : ""}${absFormatted}`;
308
+ } else {
309
+ const bnValue = valueToBigNumber(formattedNumber);
310
+ let integerPlaces = bnValue.abs().toFixed(0).length;
311
+ if (compactThreshold && Math.abs(number) <= compactThreshold) {
312
+ integerPlaces = 0;
313
+ }
314
+ const significantDigitsGroup = Math.min(
315
+ Math.floor(integerPlaces ? (integerPlaces - 1) / 3 : 0),
316
+ POSTFIXES.length - 1
317
+ );
318
+ const postfix = POSTFIXES[significantDigitsGroup];
319
+ let compactValue = normalizeBN(
320
+ bnValue,
321
+ 3 * significantDigitsGroup
322
+ ).toNumber();
323
+ if (roundDown) {
324
+ compactValue = Math.trunc(Number(compactValue) * 10 ** decimals) / 10 ** decimals;
325
+ } else if (roundUp) {
326
+ compactValue = Math.ceil(Number(compactValue) * 10 ** decimals) / 10 ** decimals;
327
+ }
328
+ const prefix = new Intl.NumberFormat("en-US", {
329
+ maximumFractionDigits: decimals,
330
+ minimumFractionDigits: decimals
331
+ }).format(compactValue);
332
+ formattedValue = `${prefix}${postfix}`;
333
+ }
334
+ const parts = [];
335
+ if (prefixText) {
336
+ parts.push(prefixText);
337
+ }
338
+ if (isSmallerThanMin && showIsSmallerThanMin) {
339
+ parts.push(number < 0 ? ">" : "<");
340
+ }
341
+ if (symbol?.toLowerCase() === "usd" && !percent) {
342
+ parts.push("$");
343
+ }
344
+ parts.push(formattedValue);
345
+ if (percent) {
346
+ parts.push("%");
347
+ }
348
+ if (symbol?.toLowerCase() !== "usd" && typeof symbol !== "undefined") {
349
+ parts.push(" ", symbol);
350
+ }
351
+ if (suffixText) {
352
+ parts.push(suffixText);
353
+ }
354
+ return parts.join("");
355
+ }
356
+ var getSafeNumber = (value) => {
357
+ if (!value) return 0;
358
+ return Number(value) > Number.MAX_SAFE_INTEGER ? Number.MAX_SAFE_INTEGER : Number(value) ?? 0;
359
+ };
360
+ var truncateDecimal = (value, maxDecimal) => {
361
+ if (!value) return "0";
362
+ const [integerPart = "0", decimalPart = "0"] = `${value}`.split(".");
363
+ return `${integerPart}.${decimalPart.substring(0, maxDecimal)}`;
364
+ };
365
+
366
+ // src/utils/getTestClient.ts
367
+ import { createTestClient, http } from "viem";
368
+ import {
369
+ defaultChainId,
370
+ getRpcUrls
371
+ } from "@berachain/config/internal";
372
+ function getTestClient(chainId = defaultChainId) {
373
+ const rpc = getRpcUrls(chainId);
374
+ if (!rpc.isAnvil) {
375
+ throw new Error("No anvil RPC URL found");
376
+ }
377
+ return createTestClient({
378
+ mode: "anvil",
379
+ transport: http(rpc.jsonRpcUrl)
380
+ });
381
+ }
382
+
383
+ export {
384
+ bignumber_js_default,
385
+ getErrorResponse,
386
+ beraFetch,
387
+ beraFetchJson,
388
+ CAP_LIMIT_BUFFER,
389
+ MAX_CUSTOM_DEADLINE,
390
+ MIN_CUSTOM_DEADLINE,
391
+ MIN_CUSTOM_SLIPPAGE,
392
+ MAX_CUSTOM_SLIPPAGE,
393
+ DEFAULT_METAMASK_GAS_LIMIT,
394
+ getPythDefaultUpdateFee,
395
+ msToSeconds,
396
+ seconds,
397
+ minutes,
398
+ minutesInSeconds,
399
+ hours,
400
+ hoursInSeconds,
401
+ days,
402
+ daysInSeconds,
403
+ weeks,
404
+ weeksInSeconds,
405
+ months,
406
+ monthsInSeconds,
407
+ years,
408
+ yearsInSeconds,
409
+ calculateTimestampFromDays,
410
+ formatUnixTimestamp,
411
+ formatTimeLeft,
412
+ formatNumber,
413
+ getSafeNumber,
414
+ truncateDecimal,
415
+ getTestClient
416
+ };
417
+ //# sourceMappingURL=chunk-ALPEMPZI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/getErrorResponse.ts","../src/utils/beraFetch.ts","../src/utils/constants.ts","../src/utils/pythHoneyUtils.ts","../src/utils/time.ts","../src/utils/formatTimestamps.ts","../../utils/src/pkg/bignumber.js.ts","../src/utils/formatNumber.ts","../src/utils/getTestClient.ts"],"sourcesContent":["/**\n * @deprecated use beraFetch instead\n */\nexport async function getErrorResponse(response: Response) {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes(\"application/json\")) {\n return response.json();\n } else {\n const text = await response.text();\n try {\n return JSON.parse(text);\n } catch {\n return {\n message: \"Unknown error, can't decode response into JSON\",\n cause: text,\n };\n }\n }\n}\n","import { RequestError } from \"../errors/RequestError\";\nimport { getErrorResponse } from \"./getErrorResponse\";\n\ntype RequestOptions = RequestInit;\n\nexport async function beraFetch(\n endpoint: ConstructorParameters<typeof RequestError>[0][\"endpoint\"],\n options?: RequestOptions,\n) {\n try {\n const response = await fetch(\n typeof endpoint === \"string\" || endpoint instanceof URL\n ? endpoint\n : endpoint.url,\n {\n ...options,\n },\n );\n if (!response.ok) {\n const error = await getErrorResponse(response);\n throw new RequestError({\n cause: error,\n // @to-do import getErrorResponse logic in this function\n // when it's removed from other places\n response: response,\n endpoint,\n });\n }\n return response;\n } catch (error) {\n if (error instanceof RequestError) {\n throw error;\n }\n\n throw new RequestError({\n cause: error,\n endpoint,\n response: undefined,\n });\n }\n}\n\nexport async function beraFetchJson<T>(\n endpoint: ConstructorParameters<typeof RequestError>[0][\"endpoint\"],\n options?: RequestOptions,\n) {\n const response = await beraFetch(endpoint, {\n ...options,\n headers: {\n Accept: \"application/json\",\n ...options?.headers,\n },\n });\n return response.json() as Promise<T>;\n}\n","import { parseEther } from \"viem\";\n\n// the buffer of the cap limit, if the user gets close to 10% of the cap limit\n// they should be warned\nexport const CAP_LIMIT_BUFFER = parseEther(\"0.005\");\n\n/**\n * Maximum allowed input for a custom deadline in seconds.\n * @type {number}\n */\nexport const MAX_CUSTOM_DEADLINE = 100000;\n\n/**\n * Minimum allowed input for a custom deadline in seconds.\n * @type {number}\n */\nexport const MIN_CUSTOM_DEADLINE = 1;\n\n/**\n * Minimum allowed input for a custom slippage tolerance percentage.\n * @type {number}\n */\nexport const MIN_CUSTOM_SLIPPAGE = 0.1;\n\n/**\n * Maximum allowed input for a custom slippage tolerance percentage.\n * @type {number}\n */\nexport const MAX_CUSTOM_SLIPPAGE = 50;\n\n/**\n * Default gas limit used by MetaMask\n * @see {@link https://github.com/MetaMask/metamask-extension/blob/06cf7459b963e26d0ae60312d4f9a342d07ab89d/ui/pages/confirmations/send/send.constants.js#L8}\n */\nexport const DEFAULT_METAMASK_GAS_LIMIT = 7920027n;\n","export const getPythDefaultUpdateFee = (tokenListLength: number) => {\n return 2n * BigInt(tokenListLength);\n};\n","/**\n * Convert milliseconds to seconds\n */\nexport function msToSeconds(ms: number): number {\n return Math.floor(ms / 1000);\n}\n\n/**\n * Time utility functions for converting between different time units.\n *\n * This utility file provides functions to convert between seconds, minutes, hours, and days.\n * Note on naming conventions: We use \"seconds\" instead of \"secondsToMs\" because JavaScript\n * is typically based in milliseconds, so the conversion to milliseconds is the more common\n * and expected operation. We use \"xxxInSeconds\" when converting to second-based units.\n */\n\n/**\n * Convert seconds to milliseconds\n */\nexport function seconds(seconds: number): number {\n return seconds * 1000;\n}\n\n/**\n * Convert minutes to milliseconds\n */\nexport function minutes(minutes: number): number {\n return minutes * seconds(60);\n}\n\n/**\n * Convert minutes to seconds\n */\nexport function minutesInSeconds(minutes: number): number {\n return minutes * 60;\n}\n\n/**\n * Convert hours to milliseconds\n */\nexport function hours(hours: number): number {\n return hours * minutes(60);\n}\n\n/**\n * Convert hours to seconds\n */\nexport function hoursInSeconds(hours: number): number {\n return hours * minutesInSeconds(60);\n}\n\n/**\n * Convert days to milliseconds\n */\nexport function days(days: number): number {\n return days * hours(24);\n}\n\n/**\n * Convert days to seconds\n */\nexport function daysInSeconds(days: number): number {\n return days * hoursInSeconds(24);\n}\n\n/**\n * Convert weeks to milliseconds\n */\nexport function weeks(weeks: number): number {\n return weeks * days(7);\n}\n\n/**\n * Convert weeks to seconds\n */\nexport function weeksInSeconds(weeks: number): number {\n return weeks * daysInSeconds(7);\n}\n\n/**\n * Convert months to milliseconds using 30 days per month\n */\nexport function months(months: number): number {\n return months * days(30);\n}\n\n/**\n * Convert months to seconds using 30 days per month\n */\nexport function monthsInSeconds(months: number): number {\n return months * daysInSeconds(30);\n}\n\n/**\n * Convert years to milliseconds using 365 days per year\n */\nexport function years(years: number): number {\n return years * days(365);\n}\n\n/**\n * Convert years to seconds using 365 days per year\n */\nexport function yearsInSeconds(years: number): number {\n return years * daysInSeconds(365);\n}\n","export function calculateTimestampFromDays(daysRange: number): number {\n const currentDate = new Date();\n return currentDate.setDate(currentDate.getDate() - daysRange) * 1000;\n}\n\nconst monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nconst shortMonthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport function formatUnixTimestamp(unixTimestamp: number, isShort?: boolean) {\n const date = new Date(unixTimestamp * 1000);\n\n const day = date.getDate();\n let daySuffix = \"th\";\n\n if (day === 1 || day === 21 || day === 31) {\n daySuffix = \"st\";\n } else if (day === 2 || day === 22) {\n daySuffix = \"nd\";\n } else if (day === 3 || day === 23) {\n daySuffix = \"rd\";\n }\n\n if (isShort) {\n return `${shortMonthNames[date.getMonth()]} ${day}`;\n }\n\n return `${\n monthNames[date.getMonth()]\n } ${day}${daySuffix}, ${date.getFullYear()}`;\n}\n\ntype LegacyArgs = [number, boolean?, boolean?, boolean?];\ntype FormatTimeLeftArgs = [\n number,\n {\n condensed?: boolean;\n greaterUnit?: \"days\" | \"hours\" | \"minutes\";\n showSeconds?: boolean;\n },\n];\n\n/**\n * Formats the time left into a string like \"8 hours, 23 minutes\".\n *\n * @param timeLeftInSeconds - The time left in seconds.\n * @returns A formatted string representing the time left.\n */\nexport function formatTimeLeft(\n ...args: FormatTimeLeftArgs | LegacyArgs\n): string {\n const timeLeftInSeconds = args[0];\n let condensed: boolean;\n\n let showDays: boolean;\n\n let showMinutes: boolean;\n let showSeconds: boolean;\n\n if (typeof args[1] !== \"object\") {\n condensed = args[1] ?? false;\n showDays = args[2] ?? false;\n showSeconds = args[3] ?? false;\n showMinutes = true;\n } else {\n const opts = args[1];\n condensed = opts.condensed ?? false;\n const greaterUnit = opts.greaterUnit ?? \"hours\";\n\n if (greaterUnit === \"days\") {\n showDays = true;\n showMinutes = true;\n } else if (greaterUnit === \"hours\") {\n showDays = false;\n showMinutes = true;\n showSeconds = false;\n } else {\n // minutes is the default\n showDays = false;\n showMinutes = true;\n }\n showSeconds = opts.showSeconds ?? false;\n }\n\n let days = Math.floor(timeLeftInSeconds / (3600 * 24));\n let hours = Math.floor((timeLeftInSeconds % (3600 * 24)) / 3600);\n const minutes = Math.floor((timeLeftInSeconds % 3600) / 60);\n const seconds = timeLeftInSeconds % 60;\n\n // If showDays=false, roll days into hours\n if (!showDays) {\n hours += days * 24;\n days = 0;\n }\n\n if (days === 0 && hours === 0 && minutes === 0) {\n return condensed ? \"< 1 M\" : \"less than a minute\";\n }\n\n const daysDisplay =\n days > 0\n ? `${days}${condensed ? \"D\" : \" day\"}${\n !condensed && days !== 1 ? \"s\" : \"\"\n }`\n : \"\";\n\n const hoursDisplay =\n hours > 0\n ? `${hours}${condensed ? \"H\" : \" hour\"}${\n !condensed && hours !== 1 ? \"s\" : \"\"\n }`\n : \"\";\n\n const minutesDisplay =\n (minutes > 0 && showMinutes) || (!days && !hours)\n ? `${minutes}${condensed ? \"M\" : \" minute\"}${\n !condensed && minutes !== 1 ? \"s\" : \"\"\n }`\n : \"\";\n const secondsDisplay =\n seconds > 0 && showSeconds\n ? `${seconds}${condensed ? \"S\" : \" second\"}${\n !condensed && seconds !== 1 ? \"s\" : \"\"\n }`\n : \"\";\n return [daysDisplay, hoursDisplay, minutesDisplay, secondsDisplay]\n .filter(Boolean)\n .join(condensed ? \" \" : \", \");\n}\n","// biome-ignore lint/style/noRestrictedImports: the only import of bignumber.js is allowed here\nimport BigNumber from \"bignumber.js\";\n\nBigNumber.set({\n // The EXPONENTIAL_AT option defines the exponent value(s) at which toString returns exponential notation.\n // - Single number: the exponent magnitude at and above which exponential notation is used (e.g., `1e9` here disables it for almost all values).\n // - 1e9 is the maximum value supported by BigNumber.js.\n // See: https://mikemcl.github.io/bignumber.js/#exponential-at\n EXPONENTIAL_AT: 1e9,\n});\n\nexport default BigNumber;\n","import BigNumber from \"@berachain/utils/pkg/bignumber.js\";\n\nexport type BigNumberValue = string | number | BigNumber;\n\nexport interface FormatNumberOptions {\n /** Number of visible decimal places */\n visibleDecimals?: number;\n /** Whether to use compact notation (K, M, B, etc.) */\n compact?: boolean;\n /** Show as percentage */\n percent?: boolean;\n /** Round down instead of normal rounding */\n roundDown?: boolean;\n /** Round up instead of normal rounding */\n roundUp?: boolean;\n /** Threshold above which compact notation is used */\n compactThreshold?: number;\n /** Maximum value to display (shows ∞ if exceeded) */\n maxValue?: number;\n /** Currency symbol (e.g., \"USD\" for $) */\n symbol?: string;\n /** Prefix text */\n prefixText?: string;\n /** Suffix text */\n suffixText?: string;\n /** Show \"< min\" or \"> min\" indicators for very small values */\n showIsSmallerThanMin?: boolean;\n /** Text to show if value is null/undefined */\n ifNullish?: string;\n}\n\nconst POSTFIXES = [\"\", \"K\", \"M\", \"B\", \"T\", \"P\", \"E\", \"Z\", \"Y\"];\n\nfunction valueToBigNumber(amount: BigNumberValue): BigNumber {\n if (amount instanceof BigNumber) return amount;\n return new BigNumber(amount);\n}\n\nfunction normalizeBN(n: BigNumberValue, decimals: number): BigNumber {\n return valueToBigNumber(n).shiftedBy(decimals * -1);\n}\n\nexport function formatNumber(\n value: BigNumberValue | undefined | null,\n options: FormatNumberOptions | number = {},\n): string {\n if (typeof options === \"number\") {\n const decimals = options;\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (typeof value === \"object\") {\n throw new Error(\"Value must be a number if using deprecated version\");\n }\n\n // Convert to string with up to 8 decimal places\n let formatted = Number(value).toFixed(decimals);\n // Remove trailing zeros and decimal point if not needed\n formatted = formatted.replace(/(\\.\\d*?[1-9])0+$|\\.0*$/, \"$1\");\n return formatted;\n }\n\n const {\n visibleDecimals,\n compact = true,\n percent = false,\n roundDown = false,\n roundUp = false,\n compactThreshold,\n maxValue,\n symbol,\n prefixText = \"\",\n suffixText = \"\",\n showIsSmallerThanMin = true,\n ifNullish = \"\",\n } = options || {};\n\n // Handle null/undefined values\n if (value === undefined || value === null) {\n return ifNullish;\n }\n\n const number = percent ? Number(value) * 100 : Number(value);\n\n // Handle special numeric values\n if (Number.isNaN(number)) {\n return \"NaN\";\n }\n if (number === Number.POSITIVE_INFINITY) {\n return \"Infinity\";\n }\n if (number === Number.NEGATIVE_INFINITY) {\n return \"-Infinity\";\n }\n\n // Determine decimal places\n let decimals: number = visibleDecimals ?? 0;\n if (number === 0) {\n decimals = 0;\n } else if (visibleDecimals === undefined) {\n if (Math.abs(number) > 1 || percent || symbol === \"USD\") {\n decimals = 2;\n } else {\n decimals = 7;\n }\n }\n\n const minValue = 10 ** -(decimals as number);\n const isSmallerThanMin =\n number !== 0 && Math.abs(number) < Math.abs(minValue);\n const isNegative = number < 0;\n const isBiggerThanMax = maxValue ? Math.abs(number) > maxValue : false;\n\n let formattedNumber = isSmallerThanMin ? minValue : number;\n const forceCompact =\n compact && (!compactThreshold || Math.abs(number) > compactThreshold);\n\n // Apply rounding for non-compact numbers\n if (roundDown && !forceCompact) {\n formattedNumber =\n Math.trunc(Number(formattedNumber) * 10 ** decimals) / 10 ** decimals;\n } else if (roundUp && !forceCompact) {\n formattedNumber =\n Math.ceil(Number(formattedNumber) * 10 ** decimals) / 10 ** decimals;\n }\n\n let formattedValue: string;\n\n if (isBiggerThanMax) {\n formattedValue = number > maxValue! ? \"∞\" : \"-∞\";\n } else if (!forceCompact) {\n const absFormatted = new Intl.NumberFormat(\"en-US\", {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(Math.abs(formattedNumber));\n formattedValue = `${isNegative ? \"-\" : \"\"}${absFormatted}`;\n } else {\n // Compact number formatting\n const bnValue = valueToBigNumber(formattedNumber);\n let integerPlaces = bnValue.abs().toFixed(0).length;\n if (compactThreshold && Math.abs(number) <= compactThreshold) {\n integerPlaces = 0;\n }\n\n const significantDigitsGroup = Math.min(\n Math.floor(integerPlaces ? (integerPlaces - 1) / 3 : 0),\n POSTFIXES.length - 1,\n );\n\n const postfix = POSTFIXES[significantDigitsGroup];\n let compactValue = normalizeBN(\n bnValue,\n 3 * significantDigitsGroup,\n ).toNumber();\n\n if (roundDown) {\n compactValue =\n Math.trunc(Number(compactValue) * 10 ** decimals) / 10 ** decimals;\n } else if (roundUp) {\n compactValue =\n Math.ceil(Number(compactValue) * 10 ** decimals) / 10 ** decimals;\n }\n\n const prefix = new Intl.NumberFormat(\"en-US\", {\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals,\n }).format(compactValue);\n\n formattedValue = `${prefix}${postfix}`;\n }\n\n // Build the final formatted string\n const parts: string[] = [];\n\n // Add prefix text\n if (prefixText) {\n parts.push(prefixText);\n }\n\n // Add smaller than indicator\n if (isSmallerThanMin && showIsSmallerThanMin) {\n parts.push(number < 0 ? \">\" : \"<\");\n }\n\n // Add USD symbol\n if (symbol?.toLowerCase() === \"usd\" && !percent) {\n parts.push(\"$\");\n }\n\n // Add the formatted number\n parts.push(formattedValue);\n\n // Add percentage symbol\n if (percent) {\n parts.push(\"%\");\n }\n\n // Add other symbols\n if (symbol?.toLowerCase() !== \"usd\" && typeof symbol !== \"undefined\") {\n parts.push(\" \", symbol);\n }\n\n // Add suffix text\n if (suffixText) {\n parts.push(suffixText);\n }\n\n return parts.join(\"\");\n}\nexport const getSafeNumber = (value: string | undefined): number => {\n if (!value) return 0;\n return Number(value) > Number.MAX_SAFE_INTEGER\n ? Number.MAX_SAFE_INTEGER\n : (Number(value) ?? 0);\n};\n\nexport const truncateDecimal = (\n value: string | number | undefined,\n maxDecimal: number,\n): string => {\n if (!value) return \"0\";\n const [integerPart = \"0\", decimalPart = \"0\"] = `${value}`.split(\".\");\n return `${integerPart}.${decimalPart.substring(0, maxDecimal)}`;\n};\n","import { createTestClient, http } from \"viem\";\n\nimport {\n type ChainId,\n defaultChainId,\n getRpcUrls,\n} from \"@berachain/config/internal\";\n\nexport function getTestClient(chainId: ChainId = defaultChainId) {\n const rpc = getRpcUrls(chainId);\n\n if (!rpc.isAnvil) {\n throw new Error(\"No anvil RPC URL found\");\n }\n return createTestClient({\n mode: \"anvil\",\n transport: http(rpc.jsonRpcUrl),\n });\n}\n"],"mappings":";;;;;AAGA,eAAsB,iBAAiB,UAAoB;AACzD,QAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAEvD,MAAI,aAAa,SAAS,kBAAkB,GAAG;AAC7C,WAAO,SAAS,KAAK;AAAA,EACvB,OAAO;AACL,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;ACdA,eAAsB,UACpB,UACA,SACA;AACA,MAAI;AACF,UAAM,WAAW,MAAM;AAAA,MACrB,OAAO,aAAa,YAAY,oBAAoB,MAChD,WACA,SAAS;AAAA,MACb;AAAA,QACE,GAAG;AAAA,MACL;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,iBAAiB,QAAQ;AAC7C,YAAM,IAAI,aAAa;AAAA,QACrB,OAAO;AAAA;AAAA;AAAA,QAGP;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iBAAiB,cAAc;AACjC,YAAM;AAAA,IACR;AAEA,UAAM,IAAI,aAAa;AAAA,MACrB,OAAO;AAAA,MACP;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,cACpB,UACA,SACA;AACA,QAAM,WAAW,MAAM,UAAU,UAAU;AAAA,IACzC,GAAG;AAAA,IACH,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,GAAG,SAAS;AAAA,IACd;AAAA,EACF,CAAC;AACD,SAAO,SAAS,KAAK;AACvB;;;ACtDA,SAAS,kBAAkB;AAIpB,IAAM,mBAAmB,WAAW,OAAO;AAM3C,IAAM,sBAAsB;AAM5B,IAAM,sBAAsB;AAM5B,IAAM,sBAAsB;AAM5B,IAAM,sBAAsB;AAM5B,IAAM,6BAA6B;;;AClCnC,IAAM,0BAA0B,CAAC,oBAA4B;AAClE,SAAO,KAAK,OAAO,eAAe;AACpC;;;ACCO,SAAS,YAAY,IAAoB;AAC9C,SAAO,KAAK,MAAM,KAAK,GAAI;AAC7B;AAcO,SAAS,QAAQA,UAAyB;AAC/C,SAAOA,WAAU;AACnB;AAKO,SAAS,QAAQC,UAAyB;AAC/C,SAAOA,WAAU,QAAQ,EAAE;AAC7B;AAKO,SAAS,iBAAiBA,UAAyB;AACxD,SAAOA,WAAU;AACnB;AAKO,SAAS,MAAMC,QAAuB;AAC3C,SAAOA,SAAQ,QAAQ,EAAE;AAC3B;AAKO,SAAS,eAAeA,QAAuB;AACpD,SAAOA,SAAQ,iBAAiB,EAAE;AACpC;AAKO,SAAS,KAAKC,OAAsB;AACzC,SAAOA,QAAO,MAAM,EAAE;AACxB;AAKO,SAAS,cAAcA,OAAsB;AAClD,SAAOA,QAAO,eAAe,EAAE;AACjC;AAKO,SAAS,MAAMC,QAAuB;AAC3C,SAAOA,SAAQ,KAAK,CAAC;AACvB;AAKO,SAAS,eAAeA,QAAuB;AACpD,SAAOA,SAAQ,cAAc,CAAC;AAChC;AAKO,SAAS,OAAOC,SAAwB;AAC7C,SAAOA,UAAS,KAAK,EAAE;AACzB;AAKO,SAAS,gBAAgBA,SAAwB;AACtD,SAAOA,UAAS,cAAc,EAAE;AAClC;AAKO,SAAS,MAAMC,QAAuB;AAC3C,SAAOA,SAAQ,KAAK,GAAG;AACzB;AAKO,SAAS,eAAeA,QAAuB;AACpD,SAAOA,SAAQ,cAAc,GAAG;AAClC;;;ACzGO,SAAS,2BAA2B,WAA2B;AACpE,QAAM,cAAc,oBAAI,KAAK;AAC7B,SAAO,YAAY,QAAQ,YAAY,QAAQ,IAAI,SAAS,IAAI;AAClE;AAEA,IAAM,aAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,oBAAoB,eAAuB,SAAmB;AAC5E,QAAM,OAAO,IAAI,KAAK,gBAAgB,GAAI;AAE1C,QAAM,MAAM,KAAK,QAAQ;AACzB,MAAI,YAAY;AAEhB,MAAI,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI;AACzC,gBAAY;AAAA,EACd,WAAW,QAAQ,KAAK,QAAQ,IAAI;AAClC,gBAAY;AAAA,EACd,WAAW,QAAQ,KAAK,QAAQ,IAAI;AAClC,gBAAY;AAAA,EACd;AAEA,MAAI,SAAS;AACX,WAAO,GAAG,gBAAgB,KAAK,SAAS,CAAC,CAAC,IAAI,GAAG;AAAA,EACnD;AAEA,SAAO,GACL,WAAW,KAAK,SAAS,CAAC,CAC5B,IAAI,GAAG,GAAG,SAAS,KAAK,KAAK,YAAY,CAAC;AAC5C;AAkBO,SAAS,kBACX,MACK;AACR,QAAM,oBAAoB,KAAK,CAAC;AAChC,MAAI;AAEJ,MAAI;AAEJ,MAAI;AACJ,MAAI;AAEJ,MAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC/B,gBAAY,KAAK,CAAC,KAAK;AACvB,eAAW,KAAK,CAAC,KAAK;AACtB,kBAAc,KAAK,CAAC,KAAK;AACzB,kBAAc;AAAA,EAChB,OAAO;AACL,UAAM,OAAO,KAAK,CAAC;AACnB,gBAAY,KAAK,aAAa;AAC9B,UAAM,cAAc,KAAK,eAAe;AAExC,QAAI,gBAAgB,QAAQ;AAC1B,iBAAW;AACX,oBAAc;AAAA,IAChB,WAAW,gBAAgB,SAAS;AAClC,iBAAW;AACX,oBAAc;AACd,oBAAc;AAAA,IAChB,OAAO;AAEL,iBAAW;AACX,oBAAc;AAAA,IAChB;AACA,kBAAc,KAAK,eAAe;AAAA,EACpC;AAEA,MAAIC,QAAO,KAAK,MAAM,qBAAqB,OAAO,GAAG;AACrD,MAAIC,SAAQ,KAAK,MAAO,qBAAqB,OAAO,MAAO,IAAI;AAC/D,QAAMC,WAAU,KAAK,MAAO,oBAAoB,OAAQ,EAAE;AAC1D,QAAMC,WAAU,oBAAoB;AAGpC,MAAI,CAAC,UAAU;AACb,IAAAF,UAASD,QAAO;AAChB,IAAAA,QAAO;AAAA,EACT;AAEA,MAAIA,UAAS,KAAKC,WAAU,KAAKC,aAAY,GAAG;AAC9C,WAAO,YAAY,UAAU;AAAA,EAC/B;AAEA,QAAM,cACJF,QAAO,IACH,GAAGA,KAAI,GAAG,YAAY,MAAM,MAAM,GAChC,CAAC,aAAaA,UAAS,IAAI,MAAM,EACnC,KACA;AAEN,QAAM,eACJC,SAAQ,IACJ,GAAGA,MAAK,GAAG,YAAY,MAAM,OAAO,GAClC,CAAC,aAAaA,WAAU,IAAI,MAAM,EACpC,KACA;AAEN,QAAM,iBACHC,WAAU,KAAK,eAAiB,CAACF,SAAQ,CAACC,SACvC,GAAGC,QAAO,GAAG,YAAY,MAAM,SAAS,GACtC,CAAC,aAAaA,aAAY,IAAI,MAAM,EACtC,KACA;AACN,QAAM,iBACJC,WAAU,KAAK,cACX,GAAGA,QAAO,GAAG,YAAY,MAAM,SAAS,GACtC,CAAC,aAAaA,aAAY,IAAI,MAAM,EACtC,KACA;AACN,SAAO,CAAC,aAAa,cAAc,gBAAgB,cAAc,EAC9D,OAAO,OAAO,EACd,KAAK,YAAY,MAAM,IAAI;AAChC;;;ACzJA,OAAO,eAAe;AAEtB,UAAU,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAKZ,gBAAgB;AAClB,CAAC;AAED,IAAO,uBAAQ;;;ACoBf,IAAM,YAAY,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAE7D,SAAS,iBAAiB,QAAmC;AAC3D,MAAI,kBAAkB,qBAAW,QAAO;AACxC,SAAO,IAAI,qBAAU,MAAM;AAC7B;AAEA,SAAS,YAAY,GAAmB,UAA6B;AACnE,SAAO,iBAAiB,CAAC,EAAE,UAAU,WAAW,EAAE;AACpD;AAEO,SAAS,aACd,OACA,UAAwC,CAAC,GACjC;AACR,MAAI,OAAO,YAAY,UAAU;AAC/B,UAAMC,YAAW;AACjB,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,IAAI,MAAM,oDAAoD;AAAA,IACtE;AAGA,QAAI,YAAY,OAAO,KAAK,EAAE,QAAQA,SAAQ;AAE9C,gBAAY,UAAU,QAAQ,0BAA0B,IAAI;AAC5D,WAAO;AAAA,EACT;AAEA,QAAM;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,aAAa;AAAA,IACb,uBAAuB;AAAA,IACvB,YAAY;AAAA,EACd,IAAI,WAAW,CAAC;AAGhB,MAAI,UAAU,UAAa,UAAU,MAAM;AACzC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,UAAU,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK;AAG3D,MAAI,OAAO,MAAM,MAAM,GAAG;AACxB,WAAO;AAAA,EACT;AACA,MAAI,WAAW,OAAO,mBAAmB;AACvC,WAAO;AAAA,EACT;AACA,MAAI,WAAW,OAAO,mBAAmB;AACvC,WAAO;AAAA,EACT;AAGA,MAAI,WAAmB,mBAAmB;AAC1C,MAAI,WAAW,GAAG;AAChB,eAAW;AAAA,EACb,WAAW,oBAAoB,QAAW;AACxC,QAAI,KAAK,IAAI,MAAM,IAAI,KAAK,WAAW,WAAW,OAAO;AACvD,iBAAW;AAAA,IACb,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,CAAE;AACzB,QAAM,mBACJ,WAAW,KAAK,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ;AACtD,QAAM,aAAa,SAAS;AAC5B,QAAM,kBAAkB,WAAW,KAAK,IAAI,MAAM,IAAI,WAAW;AAEjE,MAAI,kBAAkB,mBAAmB,WAAW;AACpD,QAAM,eACJ,YAAY,CAAC,oBAAoB,KAAK,IAAI,MAAM,IAAI;AAGtD,MAAI,aAAa,CAAC,cAAc;AAC9B,sBACE,KAAK,MAAM,OAAO,eAAe,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,EACjE,WAAW,WAAW,CAAC,cAAc;AACnC,sBACE,KAAK,KAAK,OAAO,eAAe,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,EAChE;AAEA,MAAI;AAEJ,MAAI,iBAAiB;AACnB,qBAAiB,SAAS,WAAY,WAAM;AAAA,EAC9C,WAAW,CAAC,cAAc;AACxB,UAAM,eAAe,IAAI,KAAK,aAAa,SAAS;AAAA,MAClD,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,CAAC,EAAE,OAAO,KAAK,IAAI,eAAe,CAAC;AACnC,qBAAiB,GAAG,aAAa,MAAM,EAAE,GAAG,YAAY;AAAA,EAC1D,OAAO;AAEL,UAAM,UAAU,iBAAiB,eAAe;AAChD,QAAI,gBAAgB,QAAQ,IAAI,EAAE,QAAQ,CAAC,EAAE;AAC7C,QAAI,oBAAoB,KAAK,IAAI,MAAM,KAAK,kBAAkB;AAC5D,sBAAgB;AAAA,IAClB;AAEA,UAAM,yBAAyB,KAAK;AAAA,MAClC,KAAK,MAAM,iBAAiB,gBAAgB,KAAK,IAAI,CAAC;AAAA,MACtD,UAAU,SAAS;AAAA,IACrB;AAEA,UAAM,UAAU,UAAU,sBAAsB;AAChD,QAAI,eAAe;AAAA,MACjB;AAAA,MACA,IAAI;AAAA,IACN,EAAE,SAAS;AAEX,QAAI,WAAW;AACb,qBACE,KAAK,MAAM,OAAO,YAAY,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,IAC9D,WAAW,SAAS;AAClB,qBACE,KAAK,KAAK,OAAO,YAAY,IAAI,MAAM,QAAQ,IAAI,MAAM;AAAA,IAC7D;AAEA,UAAM,SAAS,IAAI,KAAK,aAAa,SAAS;AAAA,MAC5C,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,IACzB,CAAC,EAAE,OAAO,YAAY;AAEtB,qBAAiB,GAAG,MAAM,GAAG,OAAO;AAAA,EACtC;AAGA,QAAM,QAAkB,CAAC;AAGzB,MAAI,YAAY;AACd,UAAM,KAAK,UAAU;AAAA,EACvB;AAGA,MAAI,oBAAoB,sBAAsB;AAC5C,UAAM,KAAK,SAAS,IAAI,MAAM,GAAG;AAAA,EACnC;AAGA,MAAI,QAAQ,YAAY,MAAM,SAAS,CAAC,SAAS;AAC/C,UAAM,KAAK,GAAG;AAAA,EAChB;AAGA,QAAM,KAAK,cAAc;AAGzB,MAAI,SAAS;AACX,UAAM,KAAK,GAAG;AAAA,EAChB;AAGA,MAAI,QAAQ,YAAY,MAAM,SAAS,OAAO,WAAW,aAAa;AACpE,UAAM,KAAK,KAAK,MAAM;AAAA,EACxB;AAGA,MAAI,YAAY;AACd,UAAM,KAAK,UAAU;AAAA,EACvB;AAEA,SAAO,MAAM,KAAK,EAAE;AACtB;AACO,IAAM,gBAAgB,CAAC,UAAsC;AAClE,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO,OAAO,KAAK,IAAI,OAAO,mBAC1B,OAAO,mBACN,OAAO,KAAK,KAAK;AACxB;AAEO,IAAM,kBAAkB,CAC7B,OACA,eACW;AACX,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,CAAC,cAAc,KAAK,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG;AACnE,SAAO,GAAG,WAAW,IAAI,YAAY,UAAU,GAAG,UAAU,CAAC;AAC/D;;;AChOA,SAAS,kBAAkB,YAAY;AAEvC;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AAEA,SAAS,cAAc,UAAmB,gBAAgB;AAC/D,QAAM,MAAM,WAAW,OAAO;AAE9B,MAAI,CAAC,IAAI,SAAS;AAChB,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,SAAO,iBAAiB;AAAA,IACtB,MAAM;AAAA,IACN,WAAW,KAAK,IAAI,UAAU;AAAA,EAChC,CAAC;AACH;","names":["seconds","minutes","hours","days","weeks","months","years","days","hours","minutes","seconds","decimals"]}
@@ -0,0 +1,24 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/contexts/BeraFlags/defaultFlags.ts
2
+ var defaultFlags = {
3
+ isGovernanceEnabled: true,
4
+ enableEip5792: false,
5
+ proxyAggregatorsThroughVercel: false,
6
+ isEmbeddedWalletsEnabled: true,
7
+ sponsorGas: false,
8
+ enableSimulateCalls: false,
9
+ isBendVaultDataHourly: true,
10
+ isBendLoopingEnabled: false,
11
+ isMultiChainZapBendEnabled: false,
12
+ isZapStakeBeraEnabled: false,
13
+ mockValidatorOperator: false,
14
+ mockValidatorRewardAllocator: false,
15
+ isBgtPolRewardToken: true,
16
+ mockRewardDurationManager: false,
17
+ mockIncentiveManager: false,
18
+ isHoneyPythWrapperEnabled: true
19
+ };
20
+
21
+
22
+
23
+ exports.defaultFlags = defaultFlags;
24
+ //# sourceMappingURL=chunk-BEHP54S3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/pong/coding/monobera/packages/berajs/dist/chunk-BEHP54S3.cjs","../src/contexts/BeraFlags/defaultFlags.ts"],"names":[],"mappings":"AAAA;ACgCO,IAAM,aAAA,EAA0B;AAAA,EACrC,mBAAA,EAAqB,IAAA;AAAA,EACrB,aAAA,EAAe,KAAA;AAAA,EACf,6BAAA,EAA+B,KAAA;AAAA,EAC/B,wBAAA,EAA0B,IAAA;AAAA,EAC1B,UAAA,EAAY,KAAA;AAAA,EACZ,mBAAA,EAAqB,KAAA;AAAA,EACrB,qBAAA,EAAuB,IAAA;AAAA,EACvB,oBAAA,EAAsB,KAAA;AAAA,EACtB,0BAAA,EAA4B,KAAA;AAAA,EAC5B,qBAAA,EAAuB,KAAA;AAAA,EACvB,qBAAA,EAAuB,KAAA;AAAA,EACvB,4BAAA,EAA8B,KAAA;AAAA,EAC9B,mBAAA,EAAqB,IAAA;AAAA,EACrB,yBAAA,EAA2B,KAAA;AAAA,EAC3B,oBAAA,EAAsB,KAAA;AAAA,EACtB,yBAAA,EAA2B;AAC7B,CAAA;AD9BA;AACA;AACE;AACF,oCAAC","file":"/Users/pong/coding/monobera/packages/berajs/dist/chunk-BEHP54S3.cjs","sourcesContent":[null,"import type { flags } from \"@berachain/config/internal/flags\";\n\ntype ClientSideFlags = keyof typeof flags;\n\nexport type BeraFlags = Record<\n Extract<\n ClientSideFlags,\n // We don't want to have all flags on the context. Just the ones that cannot be used server side only\n // this is because we generally should prefer server side flags, also according to flag-sdk docs\n | \"isGovernanceEnabled\"\n | \"enableEip5792\"\n | \"proxyAggregatorsThroughVercel\"\n | \"isEmbeddedWalletsEnabled\"\n | \"sponsorGas\"\n | \"enableSimulateCalls\"\n | \"isBendVaultDataHourly\"\n | \"isBendLoopingEnabled\"\n | \"isMultiChainZapBendEnabled\"\n | \"isZapStakeBeraEnabled\"\n | \"mockValidatorOperator\"\n | \"mockValidatorRewardAllocator\"\n | \"isBgtPolRewardToken\"\n | \"mockRewardDurationManager\"\n | \"mockIncentiveManager\"\n | \"isHoneyPythWrapperEnabled\"\n >,\n boolean | undefined\n>;\n\n/**\n * @private\n */\nexport const defaultFlags: BeraFlags = {\n isGovernanceEnabled: true,\n enableEip5792: false,\n proxyAggregatorsThroughVercel: false,\n isEmbeddedWalletsEnabled: true,\n sponsorGas: false,\n enableSimulateCalls: false,\n isBendVaultDataHourly: true,\n isBendLoopingEnabled: false,\n isMultiChainZapBendEnabled: false,\n isZapStakeBeraEnabled: false,\n mockValidatorOperator: false,\n mockValidatorRewardAllocator: false,\n isBgtPolRewardToken: true,\n mockRewardDurationManager: false,\n mockIncentiveManager: false,\n isHoneyPythWrapperEnabled: true,\n};\n"]}
@@ -0,0 +1,135 @@
1
+ import {
2
+ multicall3Abi
3
+ } from "./chunk-ZCEFC2TK.mjs";
4
+ import {
5
+ assertAddress,
6
+ assertDefined,
7
+ assertPublicClient
8
+ } from "./chunk-OWUI3VPI.mjs";
9
+ import {
10
+ isToken,
11
+ parseBaseArgs
12
+ } from "./chunk-J6EHBYSV.mjs";
13
+
14
+ // src/actions/clients/getEnsoClient.ts
15
+ import { EnsoClient } from "@ensofinance/sdk";
16
+ import { appConfig } from "@berachain/config/internal";
17
+ var isProduction = process.env.NODE_ENV !== "development" && process.env.NODE_ENV !== "test";
18
+ function getEnsoClient({
19
+ useProxy = isProduction,
20
+ ...args
21
+ } = {}) {
22
+ const { config } = parseBaseArgs(args);
23
+ return new EnsoClient({
24
+ baseURL: useProxy ? `${config.bex.aggregatorsProxyUrl}/enso/api/v1/` : void 0,
25
+ apiKey: useProxy ? (
26
+ // no API key since proxy has CORS for .berachain.com domains
27
+ ""
28
+ ) : appConfig.apiKeys.public.enso
29
+ });
30
+ }
31
+
32
+ // src/actions/tokens/getWalletBalances.ts
33
+ import { getChainId, getPublicClient } from "@wagmi/core";
34
+ import {
35
+ erc20Abi,
36
+ formatUnits,
37
+ isAddress
38
+ } from "viem";
39
+ function getBalanceCall({
40
+ token,
41
+ account,
42
+ multicallAddress
43
+ }) {
44
+ if (isToken(token, "BERA") || isToken(token, "ETH")) {
45
+ return {
46
+ address: multicallAddress,
47
+ abi: multicall3Abi,
48
+ functionName: "getEthBalance",
49
+ args: [account]
50
+ };
51
+ }
52
+ return {
53
+ address: token.address,
54
+ abi: erc20Abi,
55
+ functionName: "balanceOf",
56
+ args: [account]
57
+ };
58
+ }
59
+ async function getWalletBalances({
60
+ account,
61
+ tokenList,
62
+ wagmiConfig: config
63
+ }) {
64
+ assertDefined(config, "config");
65
+ if (!account || !tokenList)
66
+ throw new Error("account or tokenList is not defined");
67
+ assertAddress(account, "account");
68
+ const filteredTokenList = tokenList.filter(
69
+ (token) => isAddress(token.address)
70
+ );
71
+ const tokensByChainId = Object.groupBy(
72
+ filteredTokenList,
73
+ (token) => token.chainId ?? getChainId(config)
74
+ );
75
+ const res = await Promise.allSettled(
76
+ Object.entries(tokensByChainId).map(async ([chainId, tokens]) => {
77
+ assertDefined(tokens, "tokens");
78
+ const publicClient = getPublicClient(config, {
79
+ chainId: Number(chainId)
80
+ });
81
+ assertPublicClient(publicClient, `publicClient ${chainId}`);
82
+ assertDefined(publicClient.chain, "publicClient.chain");
83
+ assertDefined(
84
+ publicClient.chain.contracts,
85
+ "publicClient.chain.contracts"
86
+ );
87
+ assertDefined(
88
+ publicClient.chain.contracts.multicall3,
89
+ "publicClient.chain.contracts.multicall3"
90
+ );
91
+ const { multicall3 } = publicClient.chain.contracts;
92
+ const multicall3Address = typeof multicall3 === "string" ? multicall3 : multicall3.address;
93
+ assertAddress(multicall3Address, "multicall3Address");
94
+ const call = tokens.map(
95
+ (token) => getBalanceCall({
96
+ token,
97
+ account,
98
+ multicallAddress: multicall3Address
99
+ })
100
+ );
101
+ const result = await publicClient.multicall({
102
+ contracts: call
103
+ });
104
+ return result.map((item, index) => {
105
+ const token = tokens[index];
106
+ if (item.error) {
107
+ return { ...token, balance: { raw: "0", formatted: "0" } };
108
+ }
109
+ const formattedBalance = formatUnits(
110
+ item.result,
111
+ token?.decimals || 18
112
+ );
113
+ const resultBalanceToken = {
114
+ ...token,
115
+ balance: {
116
+ raw: item.result.toString(),
117
+ // TODO: this was done 10 months ago, i'm not sure it's a good solution.
118
+ formatted: formattedBalance.includes("e") ? "0" : formattedBalance
119
+ }
120
+ };
121
+ return resultBalanceToken;
122
+ });
123
+ })
124
+ );
125
+ return res.flatMap(
126
+ (result) => result.status === "fulfilled" ? result.value : []
127
+ );
128
+ }
129
+
130
+ export {
131
+ getEnsoClient,
132
+ getBalanceCall,
133
+ getWalletBalances
134
+ };
135
+ //# sourceMappingURL=chunk-CYBZH6U3.mjs.map