@berachain/berajs 0.2.8-beta.7 → 0.2.8-beta.8

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 (140) 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 +913 -1
  6. package/dist/actions/exports.cjs.map +1 -1
  7. package/dist/actions/exports.mjs +913 -1
  8. package/dist/actions/exports.mjs.map +1 -1
  9. package/dist/chunk-2R73G2PO.mjs +4698 -0
  10. package/dist/{chunk-MASD43N5.mjs.map → chunk-2R73G2PO.mjs.map} +1 -1
  11. package/dist/chunk-3M47ZRXT.mjs +417 -0
  12. package/dist/{chunk-ESAVA5OD.mjs.map → chunk-3M47ZRXT.mjs.map} +1 -1
  13. package/dist/chunk-4GFN4LEP.mjs +97 -0
  14. package/dist/{chunk-5W7UKRHX.mjs.map → chunk-4GFN4LEP.mjs.map} +1 -1
  15. package/dist/chunk-5N7QQS55.cjs +130 -0
  16. package/dist/chunk-5N7QQS55.cjs.map +1 -0
  17. package/dist/chunk-5NMATIH4.mjs +130 -0
  18. package/dist/{chunk-SSPFPAWX.mjs.map → chunk-5NMATIH4.mjs.map} +1 -1
  19. package/dist/chunk-7QKRRIHI.mjs +1844 -0
  20. package/dist/{chunk-RSDCKN4Q.mjs.map → chunk-7QKRRIHI.mjs.map} +1 -1
  21. package/dist/chunk-7TFV6UKF.mjs +24 -0
  22. package/dist/{chunk-MK5NS5B5.mjs.map → chunk-7TFV6UKF.mjs.map} +1 -1
  23. package/dist/chunk-A4FPM7U3.cjs +63 -0
  24. package/dist/chunk-A4FPM7U3.cjs.map +1 -0
  25. package/dist/chunk-BDHINMWQ.cjs +417 -0
  26. package/dist/chunk-BDHINMWQ.cjs.map +1 -0
  27. package/dist/chunk-BEHP54S3.cjs +24 -0
  28. package/dist/chunk-BEHP54S3.cjs.map +1 -0
  29. package/dist/chunk-EGDXV2PT.cjs +36 -0
  30. package/dist/chunk-EGDXV2PT.cjs.map +1 -0
  31. package/dist/chunk-EWBKSMPG.cjs +13 -0
  32. package/dist/chunk-EWBKSMPG.cjs.map +1 -0
  33. package/dist/chunk-F6ZW7ZDD.cjs +403 -0
  34. package/dist/chunk-F6ZW7ZDD.cjs.map +1 -0
  35. package/dist/chunk-FTXTRUYT.cjs +170 -0
  36. package/dist/chunk-FTXTRUYT.cjs.map +1 -0
  37. package/dist/chunk-GLWPRM33.mjs +13 -0
  38. package/dist/{chunk-575OK77P.mjs.map → chunk-GLWPRM33.mjs.map} +1 -1
  39. package/dist/chunk-GWSTVITN.mjs +572 -0
  40. package/dist/{chunk-NLVWRMGD.mjs.map → chunk-GWSTVITN.mjs.map} +1 -1
  41. package/dist/chunk-H3Z37RYU.cjs +15 -0
  42. package/dist/chunk-H3Z37RYU.cjs.map +1 -0
  43. package/dist/chunk-I3FTWD6I.mjs +170 -0
  44. package/dist/{chunk-JDZGYU5T.mjs.map → chunk-I3FTWD6I.mjs.map} +1 -1
  45. package/dist/chunk-JA4DHMTG.mjs +15 -0
  46. package/dist/{chunk-OGBD5YOG.mjs.map → chunk-JA4DHMTG.mjs.map} +1 -1
  47. package/dist/chunk-KL6YZ5VR.mjs +63 -0
  48. package/dist/{chunk-OGJMSGB2.mjs.map → chunk-KL6YZ5VR.mjs.map} +1 -1
  49. package/dist/chunk-MXWPP6MS.cjs +572 -0
  50. package/dist/chunk-MXWPP6MS.cjs.map +1 -0
  51. package/dist/chunk-SGZP4O6R.mjs +135 -0
  52. package/dist/{chunk-6K252BGM.mjs.map → chunk-SGZP4O6R.mjs.map} +1 -1
  53. package/dist/chunk-TDW5SPXR.cjs +244 -0
  54. package/dist/chunk-TDW5SPXR.cjs.map +1 -0
  55. package/dist/chunk-TGK3IXDN.cjs +169 -0
  56. package/dist/chunk-TGK3IXDN.cjs.map +1 -0
  57. package/dist/chunk-TJEW6YCJ.cjs +97 -0
  58. package/dist/chunk-TJEW6YCJ.cjs.map +1 -0
  59. package/dist/chunk-VA3BQ34H.mjs +403 -0
  60. package/dist/{chunk-UENDEN3M.mjs.map → chunk-VA3BQ34H.mjs.map} +1 -1
  61. package/dist/chunk-VA5L5FDG.mjs +36 -0
  62. package/dist/{chunk-3MZ7MLKF.mjs.map → chunk-VA5L5FDG.mjs.map} +1 -1
  63. package/dist/chunk-XSGCRLSD.cjs +1844 -0
  64. package/dist/chunk-XSGCRLSD.cjs.map +1 -0
  65. package/dist/chunk-XV3GG3HC.cjs +135 -0
  66. package/dist/chunk-XV3GG3HC.cjs.map +1 -0
  67. package/dist/chunk-Y5B224UX.cjs +4698 -0
  68. package/dist/chunk-Y5B224UX.cjs.map +1 -0
  69. package/dist/chunk-ZBTRKBSI.mjs +169 -0
  70. package/dist/{chunk-CWKDFUFR.mjs.map → chunk-ZBTRKBSI.mjs.map} +1 -1
  71. package/dist/chunk-ZCEFC2TK.mjs +244 -0
  72. package/dist/{chunk-NAXAZJJY.mjs.map → chunk-ZCEFC2TK.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 +8332 -3
  85. package/dist/hooks/exports.cjs.map +1 -1
  86. package/dist/hooks/exports.mjs +8332 -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 +1 -1
  93. package/dist/chunk-3MZ7MLKF.mjs +0 -2
  94. package/dist/chunk-53TSJM6P.cjs +0 -2
  95. package/dist/chunk-53TSJM6P.cjs.map +0 -1
  96. package/dist/chunk-575OK77P.mjs +0 -2
  97. package/dist/chunk-5W7UKRHX.mjs +0 -2
  98. package/dist/chunk-6K252BGM.mjs +0 -2
  99. package/dist/chunk-CWKDFUFR.mjs +0 -2
  100. package/dist/chunk-D6L7LTA2.cjs +0 -2
  101. package/dist/chunk-D6L7LTA2.cjs.map +0 -1
  102. package/dist/chunk-DDEQFR3M.cjs +0 -2
  103. package/dist/chunk-DDEQFR3M.cjs.map +0 -1
  104. package/dist/chunk-DKY4QPWU.cjs +0 -2
  105. package/dist/chunk-DKY4QPWU.cjs.map +0 -1
  106. package/dist/chunk-DTBJO6VT.cjs +0 -2
  107. package/dist/chunk-DTBJO6VT.cjs.map +0 -1
  108. package/dist/chunk-ESAVA5OD.mjs +0 -2
  109. package/dist/chunk-JDZGYU5T.mjs +0 -2
  110. package/dist/chunk-JLFBRMOF.cjs +0 -2
  111. package/dist/chunk-JLFBRMOF.cjs.map +0 -1
  112. package/dist/chunk-KT6L4K4K.cjs +0 -2
  113. package/dist/chunk-KT6L4K4K.cjs.map +0 -1
  114. package/dist/chunk-MASD43N5.mjs +0 -4
  115. package/dist/chunk-MGGPHKA2.cjs +0 -4
  116. package/dist/chunk-MGGPHKA2.cjs.map +0 -1
  117. package/dist/chunk-MK5NS5B5.mjs +0 -2
  118. package/dist/chunk-NAXAZJJY.mjs +0 -2
  119. package/dist/chunk-NLVWRMGD.mjs +0 -2
  120. package/dist/chunk-OGBD5YOG.mjs +0 -2
  121. package/dist/chunk-OGJMSGB2.mjs +0 -2
  122. package/dist/chunk-OIYXOKTT.cjs +0 -2
  123. package/dist/chunk-OIYXOKTT.cjs.map +0 -1
  124. package/dist/chunk-OUD27MU7.cjs +0 -2
  125. package/dist/chunk-OUD27MU7.cjs.map +0 -1
  126. package/dist/chunk-QFLDL4UV.cjs +0 -2
  127. package/dist/chunk-QFLDL4UV.cjs.map +0 -1
  128. package/dist/chunk-RSDCKN4Q.mjs +0 -2
  129. package/dist/chunk-RWOICHRW.cjs +0 -2
  130. package/dist/chunk-RWOICHRW.cjs.map +0 -1
  131. package/dist/chunk-SSPFPAWX.mjs +0 -2
  132. package/dist/chunk-UENDEN3M.mjs +0 -2
  133. package/dist/chunk-UFIM7WQ4.cjs +0 -2
  134. package/dist/chunk-UFIM7WQ4.cjs.map +0 -1
  135. package/dist/chunk-WRFDB3QJ.cjs +0 -2
  136. package/dist/chunk-WRFDB3QJ.cjs.map +0 -1
  137. package/dist/chunk-XNJLSA6P.cjs +0 -2
  138. package/dist/chunk-XNJLSA6P.cjs.map +0 -1
  139. package/dist/chunk-ZYXVUXFQ.cjs +0 -2
  140. package/dist/chunk-ZYXVUXFQ.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/pong/coding/monobera/packages/berajs/dist/chunk-TGK3IXDN.cjs","../src/errors/initBeraError.ts","../src/errors/assert.ts","../src/utils/createEmitter.ts","../src/errors/BeraMonitoring.ts"],"names":["value"],"mappings":"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","file":"/Users/pong/coding/monobera/packages/berajs/dist/chunk-TGK3IXDN.cjs","sourcesContent":[null,"import { BaseError } from \"viem\";\n\nimport { BeraError } from \"./BeraError\";\nimport { parseViemError } from \"./parseViemError\";\nimport { RequestError } from \"./RequestError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * The preferred way to normalize any unknown error into a BeraError.\n *\n * This function acts as a smart factory that picks the correct BeraError subclass:\n *\n * 1. If `cause` is already a `BeraError`, returns it as-is (no double-wrapping).\n * 2. If `cause` is a viem `BaseError`, runs `parseViemError` to classify it:\n * - If the root cause is an `HttpRequestError` (RPC transport failure), wraps it\n * in a `RequestError` with the endpoint URL extracted from the error.\n * 3. Otherwise, wraps in a new `BeraError` — which triggers the automatic reason\n * detection pipeline in the BeraError constructor (parseViemError → errorMap → displayMessage).\n *\n * **Use this instead of `new BeraError({ cause })` when you don't know the error type.**\n * It ensures RequestErrors are correctly classified (important for Sentry filtering\n * and fingerprinting — RequestErrors are skipped from transaction error grouping).\n *\n * @example\n * ```ts\n * try {\n * await someOperation();\n * } catch (error) {\n * // Normalizes to the right subclass, reason auto-detected\n * throw initBeraError({ cause: error });\n * }\n * ```\n *\n * @example\n * ```ts\n * // Reporting to Sentry without rethrowing\n * catch (error) {\n * captureException(initBeraError({ cause: error }));\n * }\n * ```\n */\nexport function initBeraError({\n cause: error,\n level,\n}: {\n cause: unknown;\n /**\n * The severity level of the error, only used if the error is not a BeraError.\n */\n level?: SeverityLevel;\n}): BeraError {\n // ── Step 1: Check if it's a viem BaseError that wraps an RPC transport failure ──\n // parseViemError with revertIfUnknown=false won't throw — it returns { reason: undefined }\n // if the error chain doesn't match any known type.\n if (error instanceof BaseError) {\n const parsed = parseViemError({\n error,\n revertIfUnknown: false,\n });\n if (\n parsed.isRequestError &&\n parsed.rootCause instanceof BaseError &&\n \"url\" in parsed.rootCause &&\n typeof parsed.rootCause.url === \"string\"\n ) {\n // RPC transport failure (e.g. HTTP 502 from the RPC endpoint).\n // Wrapping in RequestError gives it proper endpoint tagging and level=\"warning\".\n return new RequestError({\n cause: parsed.rootCause,\n response: undefined,\n endpoint: {\n url: parsed.rootCause.url as string,\n type: \"rpc\",\n },\n level,\n });\n }\n }\n\n // ── Step 2: Return as-is if already a BeraError, otherwise wrap ──────────\n // The BeraError constructor will run automatic reason detection on the cause.\n const err =\n error instanceof BeraError\n ? error\n : new BeraError({\n cause: error,\n level,\n });\n\n return err;\n}\n","import type { GetPublicClientReturnType } from \"@wagmi/core\";\nimport { type Address, isAddress, type PublicClient } from \"viem\";\n\nimport { InvalidArgumentError } from \"./InvalidArgumentError\";\n\nfunction _isDefined<T>(value: T): value is NonNullable<T> {\n return value !== undefined && value !== null;\n}\n\ntype _AssertFn<T> = (value: T) => { expectedType: string; isValid: boolean };\n\n/**\n * Internal assertion function.\n * @throws An InvalidArgumentError if the value is not valid.\n */\nfunction _assert<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: _AssertFn<T>;\n}) {\n const result = fn(value);\n if (!result.isValid) {\n throw new InvalidArgumentError({\n property,\n value,\n expected: result.expectedType,\n });\n }\n}\n\nfunction _assertDefined<T>({\n value,\n property,\n fn,\n}: {\n value: T;\n property: string;\n fn: (value: T) => { expectedType: string; isValid: boolean };\n}) {\n _assert({\n value,\n property,\n fn: (value) => {\n const isDefined = _isDefined(value);\n const { isValid, expectedType } = fn(value);\n return {\n expectedType,\n isValid: isDefined && isValid,\n };\n },\n });\n}\n\n/**\n * Asserts that a value is defined.\n * @throws An InvalidArgumentError if the value is undefined or null.\n */\nexport function assertDefined<T>(\n /**\n * The value to assert.\n */\n value: T,\n /**\n * The property name.\n */\n property: string,\n): asserts value is NonNullable<T> {\n _assertDefined({\n value,\n property,\n fn: (value) => ({ expectedType: \"defined\", isValid: _isDefined(value) }),\n });\n}\n\n/**\n * Asserts that a value is a PublicClient.\n * @throws An InvalidArgumentError if the value is undefined or not a PublicClient.\n */\nexport function assertPublicClient(\n /**\n * The value to assert.\n */\n value: // it's important to have both types here because it helps with typescript build performance\n PublicClient | GetPublicClientReturnType | undefined,\n /**\n * The property name.\n */\n property: string = \"publicClient\",\n): asserts value is PublicClient {\n // there's no current way to check if a value is a PublicClient, so we just assert it's defined and `value: PublicClient` will do the rest\n assertDefined(value, property);\n}\n\n/**\n * Asserts that a value is an address (20 bytes).\n * @throws An InvalidArgumentError if the value is undefined, null, not a string, or not an address.\n */\nexport function assertAddress(\n /**\n * The value to assert.\n */\n value: string | undefined | null,\n /**\n * The property name.\n */\n property: string,\n): asserts value is Address {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"Address\",\n isValid: typeof value === \"string\" && isAddress(value),\n }),\n });\n}\n\n/**\n * Asserts that a value is positive (> 0).\n * @throws An InvalidArgumentError if the value is not positive.\n */\nexport function assertPositive(\n value: string | bigint | number,\n property: string,\n): void {\n const isPositive = typeof value === \"bigint\" ? value > 0n : Number(value) > 0;\n if (!isPositive) {\n throw new InvalidArgumentError({\n property,\n value,\n expected: \"positive amount\",\n });\n }\n}\n\n/**\n * Asserts that a value is a number greater than 0.\n * @throws An InvalidArgumentError if the value is undefined, null, not a string or number, or not a number greater than 0.\n */\nexport function assertAmount(\n /**\n * The value to assert.\n */\n value: unknown,\n /**\n * The property name.\n */\n property: string,\n): asserts value is string | number {\n _assertDefined({\n value,\n property,\n fn: (value) => ({\n expectedType: \"number\",\n isValid:\n (typeof value === \"string\" || typeof value === \"number\") &&\n Number(value) > 0,\n }),\n });\n}\n","interface EventsMap {\n [event: string]: any;\n}\n\ninterface DefaultEvents extends EventsMap {\n [event: string]: (...args: any) => void;\n}\n\nexport type Unsubscribe = () => void;\n\nexport interface Emitter<Events extends EventsMap = DefaultEvents> {\n /**\n * Calls each of the listeners registered for a given event.\n *\n * ```js\n * ee.emit('tick', tickType, tickDuration)\n * ```\n *\n * @param event The event name.\n * @param args The arguments for listeners.\n */\n emit<K extends keyof Events>(event: K, ...args: Parameters<Events[K]>): void;\n\n /**\n * Add a listener for a given event.\n *\n * ```js\n * const unbind = ee.on('tick', (tickType, tickDuration) => {\n * count += 1\n * })\n *\n * disable () {\n * unbind()\n * }\n * ```\n *\n * @param event The event name.\n * @param cb The listener function.\n * @returns Unbind listener from event.\n */\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n events: Partial<{ [E in keyof Events]: Events[E][] }>;\n}\n\n/**\n * An interface for mixins that expose the `on` function (without the emitter\n * bound to `this`)\n *\n * ```js\n * import { createEmitter } from '~utils/createEmitter'\n *\n * class Ticker implements EmitterMixin<Events> {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n */\nexport interface EmitterMixin<Events extends EventsMap = DefaultEvents> {\n on<K extends keyof Events>(event: K, cb: Events[K]): Unsubscribe;\n}\n\n/**\n * Create event emitter.\n *\n * ```js\n * import { createEmitter } from './createEmitter'\n *\n * class Ticker {\n * constructor() {\n * this.emitter = createEmitter()\n * }\n * on(...args) {\n * return this.emitter.on(...args)\n * }\n * tick() {\n * this.emitter.emit('tick')\n * }\n * }\n * ```\n *\n * Inspired by {@link https://github.com/ai/nanoevents}\n */\nexport function createEmitter<\n Events extends EventsMap = DefaultEvents,\n>(): Emitter<Events> {\n /**\n * Event names in keys and arrays with listeners in values.\n *\n * ```js\n * emitter1.events = emitter2.events\n * emitter2.events = { }\n * ```\n */\n const events: Partial<{ [E in keyof Events]: Events[E][] }> = {};\n\n return {\n emit(event, ...args) {\n for (const callback of events[event] || []) {\n callback(...args);\n }\n },\n events,\n on(event, cb) {\n if (!events[event]) {\n events[event] = [];\n }\n\n events[event].push(cb);\n\n return () => {\n events[event] = events[event]?.filter((i) => cb !== i);\n };\n },\n };\n}\n","import { createEmitter, type EmitterMixin } from \"../utils/createEmitter\";\nimport type { BeraError } from \"./BeraError\";\nimport type { SeverityLevel } from \"./severity\";\n\n/**\n * Context passed alongside captured exceptions.\n * Mirrors the subset of Sentry's CaptureContext that berajs actually uses.\n */\nexport interface CaptureContext {\n level: SeverityLevel;\n extra?: Record<string, unknown>;\n tags?: Record<string, string | number | boolean | null | undefined>;\n fingerprint?: string[];\n data?: Record<string, unknown>;\n}\n\nexport interface ErrorEvent {\n exception: BeraError;\n timestamp: number;\n}\n\nconst _emitter = createEmitter<{ exception: (event: ErrorEvent) => void }>();\n\n/**\n * A generic error reporter for berajs.\n *\n * Instead of calling Sentry.captureException directly, berajs calls\n * `BeraMonitoring.captureException()`. Consumer apps subscribe via `.on()` and\n * forward events to their monitoring provider (Sentry, Datadog, etc.).\n *\n * @example\n * ```ts\n * // In berajs code:\n * import { BeraMonitoring } from \"./BeraMonitoring\";\n * BeraMonitoring.captureExceptionException(error);\n *\n * // In app instrumentation:\n * import { BeraMonitoring } from \"@berachain/berajs/errors\";\n * BeraMonitoring.on((event) => {\n * if (event.type === \"exception\") {\n * Sentry.captureException(event.exception);\n * }\n * });\n * ```\n */\nexport const BeraMonitoring: {\n captureException: (exception: BeraError) => void;\n} & EmitterMixin<{ exception: (event: ErrorEvent) => void }> = {\n /**\n * Capture an exception. Notifies all subscribers.\n */\n captureException(exception: BeraError): void {\n const event: ErrorEvent = {\n exception,\n timestamp: Date.now(),\n };\n _emitter.emit(\"exception\", event);\n },\n /**\n * Subscribe to error events.\n * @returns An unsubscribe function.\n */\n on(...args) {\n return _emitter.on(...args);\n },\n};\n"]}
@@ -0,0 +1,97 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
+
3
+ var _chunkXSGCRLSDcjs = require('./chunk-XSGCRLSD.cjs');
4
+
5
+ // src/utils/parseBaseArgs.ts
6
+
7
+
8
+
9
+ var _internal = require('@berachain/config/internal');
10
+ function parseBaseArgs(args) {
11
+ const chainId = _nullishCoalesce(args.chainId, () => ( _internal.defaultChainId));
12
+ const config = _nullishCoalesce(args.config, () => ( _internal.chainConfigs[chainId]));
13
+ if (args.chainId && args.chainId !== config.chainId) {
14
+ throw new (0, _chunkXSGCRLSDcjs.InvalidArgumentError)({
15
+ property: "chainId",
16
+ value: chainId,
17
+ expected: `config.chainId: ${config.chainId}`
18
+ });
19
+ }
20
+ return { config, chainId: config.chainId };
21
+ }
22
+
23
+ // src/utils/tokens.ts
24
+ var _viem = require('viem');
25
+ var _mainnet = require('@berachain/config/mainnet');
26
+ var beraToken = {
27
+ address: _viem.zeroAddress,
28
+ decimals: 18,
29
+ name: "Bera",
30
+ symbol: "BERA",
31
+ logoURI: "https://imagedelivery.net/qNj7Q3MCke89zoKzav7eDQ/tokens/0x0000000000000000000000000000000000000000.png/public"
32
+ };
33
+ var wBeraToken = {
34
+ address: _mainnet.mainnet.tokens.wbera,
35
+ decimals: 18,
36
+ name: "WBera",
37
+ symbol: "WBERA"
38
+ };
39
+ function getHoneyToken(baseArgs) {
40
+ const { config, chainId } = parseBaseArgs(baseArgs);
41
+ return {
42
+ address: config.honey.token,
43
+ symbol: "HONEY",
44
+ name: "Honey",
45
+ decimals: 18,
46
+ chainId
47
+ };
48
+ }
49
+ function isToken(...args) {
50
+ const [token, compareTo, baseArgs] = args;
51
+ if (token === void 0) return false;
52
+ const tokenAddress = typeof token === "string" ? token : token.address;
53
+ if (typeof compareTo === "string" && !_viem.isAddress.call(void 0, compareTo) && // this is a safeguard against weird inputs from enso. `0x00`
54
+ !compareTo.startsWith("0x")) {
55
+ if (compareTo === "BERA") {
56
+ return tokenAddress.toLowerCase() === _viem.zeroAddress;
57
+ }
58
+ if (compareTo === "WBERA") {
59
+ return tokenAddress.toLowerCase() === _mainnet.mainnet.tokens.wbera;
60
+ }
61
+ if (compareTo === "ETH") {
62
+ return tokenAddress.toLowerCase() === _viem.ethAddress;
63
+ }
64
+ if (compareTo === "SWBERA") {
65
+ return tokenAddress.toLowerCase() === _mainnet.mainnet.tokens.swbera.toLowerCase();
66
+ }
67
+ if (baseArgs === void 0) {
68
+ throw new (0, _chunkXSGCRLSDcjs.InvalidArgumentError)({
69
+ property: "baseArgs",
70
+ value: baseArgs,
71
+ expected: "BeraJS.BaseFunctionArgs",
72
+ message: "baseArgs is required when compared to a known token different than BERA or WBERA. Checking against token: " + compareTo + " and token address: " + tokenAddress
73
+ });
74
+ }
75
+ const { config } = parseBaseArgs(baseArgs);
76
+ const tokenMap = {
77
+ BGT: config.tokens.bgt,
78
+ HONEY: config.honey.token,
79
+ SWBERA: config.tokens.swbera,
80
+ ETH: _viem.ethAddress
81
+ };
82
+ if (compareTo in tokenMap) {
83
+ return tokenAddress.toLowerCase() === tokenMap[compareTo].toLowerCase();
84
+ }
85
+ }
86
+ const compareToAddress = typeof compareTo === "object" ? compareTo.address : compareTo;
87
+ return tokenAddress.toLowerCase() === compareToAddress.toLowerCase();
88
+ }
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ exports.parseBaseArgs = parseBaseArgs; exports.beraToken = beraToken; exports.wBeraToken = wBeraToken; exports.getHoneyToken = getHoneyToken; exports.isToken = isToken;
97
+ //# sourceMappingURL=chunk-TJEW6YCJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/pong/coding/monobera/packages/berajs/dist/chunk-TJEW6YCJ.cjs","../src/utils/parseBaseArgs.ts","../src/utils/tokens.ts"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACJA;AAEE;AACA;AAAA,sDACK;AAIA,SAAS,aAAA,CAAc,IAAA,EAA+B;AAC3D,EAAA,MAAM,QAAA,mBAAU,IAAA,CAAK,OAAA,UAAW,0BAAA;AAChC,EAAA,MAAM,OAAA,mBAAqB,IAAA,CAAK,MAAA,UAAU,sBAAA,CAAa,OAAO,GAAA;AAE9D,EAAA,GAAA,CAAI,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,OAAA,EAAS;AAEnD,IAAA,MAAM,IAAI,2CAAA,CAAqB;AAAA,MAC7B,QAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,QAAA,EAAU,CAAA,gBAAA,EAAmB,MAAA,CAAO,OAAO,CAAA;AAAA,IAAA;AAC5C,EAAA;AAGH,EAAA;AACF;ADDA;AACA;AEtBA;AAEA;AAMO;AAAkB,EAAA;AACd,EAAA;AACC,EAAA;AACJ,EAAA;AACE,EAAA;AAGV;AAEO;AAAmB,EAAA;AACA,EAAA;AACd,EAAA;AACJ,EAAA;AAER;AAEO;AACL,EAAA;AAEA,EAAA;AAAO,IAAA;AACiB,IAAA;AACd,IAAA;AACF,IAAA;AACI,IAAA;AACV,EAAA;AAEJ;AAyBO;AACL,EAAA;AAEA,EAAA;AAEA,EAAA;AAEA,EAAA;AAEsB,EAAA;AAIpB,IAAA;AACE,MAAA;AAAsC,IAAA;AAExC,IAAA;AAEE,MAAA;AAAqD,IAAA;AAGvD,IAAA;AACE,MAAA;AAAsC,IAAA;AAGxC,IAAA;AAEE,MAAA;AAAwE,IAAA;AAG1E,IAAA;AACE,MAAA;AAA+B,QAAA;AACnB,QAAA;AACH,QAAA;AACG,QAAA;AAKR,MAAA;AACH,IAAA;AAEH,IAAA;AAEA,IAAA;AAA0E,MAAA;AACrD,MAAA;AACC,MAAA;AACE,MAAA;AACjB,IAAA;AAEP,IAAA;AACE,MAAA;AAE2D,IAAA;AAE7D,EAAA;AAGF,EAAA;AAGA,EAAA;AACF;AFjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/Users/pong/coding/monobera/packages/berajs/dist/chunk-TJEW6YCJ.cjs","sourcesContent":[null,"import {\n type BeraConfig,\n chainConfigs,\n defaultChainId,\n} from \"@berachain/config/internal\";\n\nimport { InvalidArgumentError } from \"../errors/InvalidArgumentError\";\n\nexport function parseBaseArgs(args: BeraJS.BaseFunctionArgs) {\n const chainId = args.chainId ?? defaultChainId;\n const config: BeraConfig = args.config ?? chainConfigs[chainId];\n\n if (args.chainId && args.chainId !== config.chainId) {\n // this matches unless the config is explicitly provided\n throw new InvalidArgumentError({\n property: \"chainId\",\n value: chainId,\n expected: `config.chainId: ${config.chainId}`,\n });\n }\n\n return { config, chainId: config.chainId };\n}\n","import { type Address, ethAddress, isAddress, zeroAddress } from \"viem\";\n\nimport { mainnet } from \"@berachain/config/mainnet\";\n\nimport { InvalidArgumentError } from \"../errors/InvalidArgumentError\";\nimport type { TokenWithMetadata } from \"../types/dex\";\nimport { parseBaseArgs } from \"./parseBaseArgs\";\n\nexport const beraToken = {\n address: zeroAddress,\n decimals: 18,\n name: \"Bera\",\n symbol: \"BERA\",\n logoURI:\n \"https://imagedelivery.net/qNj7Q3MCke89zoKzav7eDQ/tokens/0x0000000000000000000000000000000000000000.png/public\",\n} as const satisfies Omit<TokenWithMetadata, \"chainId\">;\n\nexport const wBeraToken = {\n address: mainnet.tokens.wbera,\n decimals: 18,\n name: \"WBera\",\n symbol: \"WBERA\",\n} as const satisfies Omit<TokenWithMetadata, \"chainId\">;\n\nexport function getHoneyToken(baseArgs: BeraJS.BaseFunctionArgs) {\n const { config, chainId } = parseBaseArgs(baseArgs);\n\n return {\n address: config.honey.token,\n symbol: \"HONEY\",\n name: \"Honey\",\n decimals: 18,\n chainId,\n } as const satisfies TokenWithMetadata;\n}\n\ntype KnownTokens = \"BERA\" | \"WBERA\" | \"BGT\" | \"HONEY\" | \"SWBERA\" | \"ETH\";\n\ntype BaseToken =\n | {\n address: Address | string;\n }\n | Address;\n\ntype InputToken = BaseToken | string | undefined;\n\ntype IsTokenParams =\n | [\n token: InputToken,\n compareTo:\n | BaseToken\n | Extract<KnownTokens, \"BERA\" | \"WBERA\" | \"ETH\" | \"SWBERA\">,\n ]\n | [\n token: InputToken,\n compareTo: BaseToken | KnownTokens,\n baseArgs: BeraJS.BaseFunctionArgs,\n ];\n\nexport function isToken(...args: IsTokenParams): boolean {\n const [token, compareTo, baseArgs] = args;\n\n if (token === undefined) return false;\n\n const tokenAddress = typeof token === \"string\" ? token : token.address;\n\n if (\n typeof compareTo === \"string\" &&\n !isAddress(compareTo) &&\n // this is a safeguard against weird inputs from enso. `0x00`\n !compareTo.startsWith(\"0x\")\n ) {\n if (compareTo === \"BERA\") {\n return tokenAddress.toLowerCase() === zeroAddress;\n }\n if (compareTo === \"WBERA\") {\n // we are sure that wbera token is the same on all chains because it's checked on the config and forced as types\n return tokenAddress.toLowerCase() === mainnet.tokens.wbera;\n }\n\n if (compareTo === \"ETH\") {\n return tokenAddress.toLowerCase() === ethAddress;\n }\n\n if (compareTo === \"SWBERA\") {\n // we are sure that wbera token is the same on all chains because it's checked on the config and forced as types\n return tokenAddress.toLowerCase() === mainnet.tokens.swbera.toLowerCase();\n }\n\n if (baseArgs === undefined) {\n throw new InvalidArgumentError({\n property: \"baseArgs\",\n value: baseArgs,\n expected: \"BeraJS.BaseFunctionArgs\",\n message:\n \"baseArgs is required when compared to a known token different than BERA or WBERA. Checking against token: \" +\n compareTo +\n \" and token address: \" +\n tokenAddress,\n });\n }\n const { config } = parseBaseArgs(baseArgs);\n\n const tokenMap: Record<Exclude<KnownTokens, \"BERA\" | \"WBERA\">, Address> = {\n BGT: config.tokens.bgt,\n HONEY: config.honey.token,\n SWBERA: config.tokens.swbera,\n ETH: ethAddress as Address,\n } as const;\n if (compareTo in tokenMap) {\n return (\n tokenAddress.toLowerCase() ===\n tokenMap[compareTo as keyof typeof tokenMap].toLowerCase()\n );\n }\n }\n\n const compareToAddress =\n typeof compareTo === \"object\" ? compareTo.address : compareTo;\n\n return tokenAddress.toLowerCase() === compareToAddress.toLowerCase();\n}\n"]}
@@ -0,0 +1,403 @@
1
+ import {
2
+ getBalanceCall,
3
+ getEnsoClient
4
+ } from "./chunk-SGZP4O6R.mjs";
5
+ import {
6
+ BeraMonitoring,
7
+ initBeraError
8
+ } from "./chunk-ZBTRKBSI.mjs";
9
+ import {
10
+ defaultFlags
11
+ } from "./chunk-7TFV6UKF.mjs";
12
+ import {
13
+ beraToken,
14
+ isToken,
15
+ parseBaseArgs
16
+ } from "./chunk-4GFN4LEP.mjs";
17
+ import {
18
+ BeraError,
19
+ InvalidArgumentError
20
+ } from "./chunk-7QKRRIHI.mjs";
21
+
22
+ // src/contexts/BeraFlags/BeraFlags.tsx
23
+ import { createContext, useContext } from "react";
24
+ import {
25
+ isFlagEnabled
26
+ } from "@berachain/config/internal/edge-config";
27
+ import { jsx } from "react/jsx-runtime";
28
+ var BeraFlagContext = createContext(
29
+ void 0
30
+ );
31
+ function BeraFlagsProvider({
32
+ children,
33
+ flags,
34
+ aggregators,
35
+ swberaAprWindow = "DAY"
36
+ }) {
37
+ return /* @__PURE__ */ jsx(
38
+ BeraFlagContext.Provider,
39
+ {
40
+ value: {
41
+ ...defaultFlags,
42
+ ...flags,
43
+ aggregators: aggregators ? Object.entries(aggregators).filter(([, value]) => isFlagEnabled(value)).map(([key]) => key) : void 0,
44
+ swberaAprWindow
45
+ },
46
+ children
47
+ }
48
+ );
49
+ }
50
+ function useBeraFlags() {
51
+ const context = useContext(BeraFlagContext);
52
+ if (!context) {
53
+ throw new Error("BeraFlagsProvider not found");
54
+ }
55
+ return context;
56
+ }
57
+ function useBeraFlag(key) {
58
+ const flags = useBeraFlags();
59
+ return flags[key];
60
+ }
61
+
62
+ // src/contexts/BexStatusProvider.tsx
63
+ import {
64
+ createContext as createContext2,
65
+ useContext as useContext2,
66
+ useState
67
+ } from "react";
68
+ import { jsx as jsx2 } from "react/jsx-runtime";
69
+ var BexStateContext = createContext2({
70
+ protocol: {
71
+ isPaused: false,
72
+ factories: {
73
+ composableStable: "enabled",
74
+ weighted: "enabled",
75
+ allPaused: false
76
+ }
77
+ },
78
+ onPoolChange: () => {
79
+ },
80
+ pool: void 0
81
+ });
82
+ function useBexStatus() {
83
+ const context = useContext2(BexStateContext);
84
+ if (!context) {
85
+ throw new BeraError({
86
+ level: "fatal",
87
+ message: "BexStateContext is not defined"
88
+ });
89
+ }
90
+ return context;
91
+ }
92
+ function BexStatusProvider({
93
+ children,
94
+ isVaultPaused,
95
+ labels,
96
+ factories
97
+ }) {
98
+ const [poolState, setPoolState] = useState();
99
+ const disablePoolWithdrawals = (poolState?.isPaused && !poolState?.isInRecoveryMode) ?? false;
100
+ const disablePoolDeposits = isVaultPaused || poolState?.isPaused;
101
+ return /* @__PURE__ */ jsx2(
102
+ BexStateContext.Provider,
103
+ {
104
+ value: {
105
+ protocol: {
106
+ isPaused: isVaultPaused,
107
+ factories: {
108
+ ...factories,
109
+ allPaused: factories.composableStable === "paused" && factories.weighted === "paused"
110
+ }
111
+ },
112
+ labels,
113
+ onPoolChange: setPoolState,
114
+ pool: poolState ? {
115
+ ...poolState,
116
+ disablePoolWithdrawals: !!disablePoolWithdrawals,
117
+ disablePoolDeposits: !!disablePoolDeposits
118
+ } : void 0
119
+ },
120
+ children
121
+ }
122
+ );
123
+ }
124
+
125
+ // src/contexts/block-time-provider.tsx
126
+ import { createContext as createContext3, useContext as useContext3 } from "react";
127
+ import { mainnet } from "@berachain/config/mainnet";
128
+ import { jsx as jsx3 } from "react/jsx-runtime";
129
+ function useBlockTime() {
130
+ return useContext3(BlockTimeContext);
131
+ }
132
+ var BlockTimeContext = createContext3(
133
+ // this is the default block time for berachain, but actually overridden by the block time provider
134
+ mainnet.averageBlockTime
135
+ );
136
+ function BlockTimeProvider({
137
+ children,
138
+ blockTime,
139
+ ...args
140
+ }) {
141
+ const { config } = parseBaseArgs(args);
142
+ return /* @__PURE__ */ jsx3(BlockTimeContext.Provider, { value: blockTime ?? config.averageBlockTime, children });
143
+ }
144
+
145
+ // src/contexts/HoneyConfigProvider.tsx
146
+ import { createContext as createContext4, useContext as useContext4 } from "react";
147
+ import { jsx as jsx4 } from "react/jsx-runtime";
148
+ var HoneyConfigContext = createContext4(void 0);
149
+ function HoneyConfigProvider({
150
+ children,
151
+ ...props
152
+ }) {
153
+ return /* @__PURE__ */ jsx4(HoneyConfigContext.Provider, { value: props, children });
154
+ }
155
+ function useHoneyConfig() {
156
+ const context = useContext4(HoneyConfigContext);
157
+ if (!context) {
158
+ throw new Error("useHoneyConfig must be used within a HoneyConfigProvider");
159
+ }
160
+ return context;
161
+ }
162
+
163
+ // src/hooks/enso/useEnsoUserTokensWithBalances.ts
164
+ import useSWR from "swr";
165
+ import { useBeraWallet, useConfig } from "@berachain/wagmi/hooks";
166
+
167
+ // src/actions/enso/getEnsoUserTokensWithBalances.ts
168
+ import { getChains, multicall } from "@wagmi/core";
169
+ import { formatUnits } from "viem";
170
+ async function getEnsoUserTokensWithBalances({
171
+ account,
172
+ wagmiConfig,
173
+ chainId,
174
+ ensoClient
175
+ }) {
176
+ const ensoBalances = await ensoClient.getBalances({
177
+ useEoa: true,
178
+ chainId: chainId ?? "all",
179
+ eoaAddress: account
180
+ });
181
+ const tokens = ensoBalances.map(
182
+ (balance) => ({
183
+ name: balance.name,
184
+ symbol: balance.symbol,
185
+ decimals: balance.decimals,
186
+ address: isToken(balance.token, "ETH") ? beraToken.address : balance.token,
187
+ logoURI: balance.logoUri,
188
+ balance: {
189
+ raw: balance.amount.toString(),
190
+ formatted: formatUnits(BigInt(balance.amount), balance.decimals)
191
+ },
192
+ chainId: Number(
193
+ // @ts-expect-error - balance.chainId is defined just not typed by enso
194
+ balance.chainId
195
+ ),
196
+ price: Number(balance.price)
197
+ })
198
+ );
199
+ const tokenByChainId = Object.groupBy(tokens, (a) => a.chainId ?? 0);
200
+ const balances = await Promise.allSettled(
201
+ Object.entries(tokenByChainId).map(async ([chainId2, chainTokens]) => {
202
+ if (!chainTokens) return void 0;
203
+ const chainConfig = getChains(wagmiConfig).find(
204
+ (chain) => chain.id === Number(chainId2)
205
+ );
206
+ if (!chainConfig) {
207
+ return void 0;
208
+ }
209
+ const multicall3 = chainConfig.contracts?.multicall3;
210
+ const multicallAddress = multicall3?.address;
211
+ if (!multicallAddress) {
212
+ BeraMonitoring.captureException(
213
+ new InvalidArgumentError({
214
+ property: "multicallAddress",
215
+ value: multicallAddress,
216
+ expected: "Address",
217
+ chainId: Number(chainId2)
218
+ })
219
+ );
220
+ return chainTokens;
221
+ }
222
+ const balances2 = await multicall(wagmiConfig, {
223
+ chainId: Number(chainId2),
224
+ contracts: chainTokens.map(
225
+ (token) => getBalanceCall({
226
+ token,
227
+ account,
228
+ multicallAddress
229
+ })
230
+ ),
231
+ allowFailure: true
232
+ });
233
+ const tokensWithBalances = [];
234
+ for (let index = 0; index < chainTokens.length; index++) {
235
+ const token = chainTokens[index];
236
+ if (balances2[index].status === "success") {
237
+ const balance = balances2[index].result;
238
+ tokensWithBalances.push({
239
+ ...token,
240
+ balance: {
241
+ raw: balance?.toString() ?? "0",
242
+ formatted: formatUnits(balance ?? 0n, token.decimals)
243
+ }
244
+ });
245
+ } else {
246
+ console.error("error getting balance", balances2[index].error);
247
+ BeraMonitoring.captureException(
248
+ initBeraError({ cause: balances2[index].error })
249
+ );
250
+ tokensWithBalances.push(token);
251
+ }
252
+ }
253
+ return tokensWithBalances;
254
+ })
255
+ );
256
+ const flattenedBalances = [];
257
+ for (const result of balances) {
258
+ if (result.status === "fulfilled") {
259
+ flattenedBalances.push(...result.value ?? []);
260
+ } else {
261
+ BeraMonitoring.captureException(initBeraError({ cause: result.reason }));
262
+ }
263
+ }
264
+ return flattenedBalances.sort((a, b) => {
265
+ const aValue = Number(a.balance.formatted) * (a.price ?? 0);
266
+ const bValue = Number(b.balance.formatted) * (b.price ?? 0);
267
+ return bValue - aValue;
268
+ });
269
+ }
270
+
271
+ // src/hooks/enso/useEnsoUserTokensWithBalances.ts
272
+ function useEnsoUserTokensWithBalances({ chainId } = {}, options) {
273
+ const { address: fromAddress } = useBeraWallet();
274
+ const wagmiConfig = useConfig();
275
+ const isEnabled = !!fromAddress && (options?.opts?.isEnabled ?? true);
276
+ const QUERY_KEY = isEnabled && wagmiConfig ? ["useEnsoUserTokensWithBalances", fromAddress, chainId] : null;
277
+ const swrResponse = useSWR(
278
+ QUERY_KEY,
279
+ async ([, fromAddress2, chainId2]) => getEnsoUserTokensWithBalances({
280
+ account: fromAddress2,
281
+ wagmiConfig,
282
+ chainId: chainId2 ?? "all",
283
+ ensoClient: getEnsoClient()
284
+ }),
285
+ {
286
+ refreshInterval: 1e5 /* NORMAL */,
287
+ isEnabled,
288
+ ...options?.opts
289
+ }
290
+ );
291
+ return {
292
+ ...swrResponse,
293
+ refresh: () => swrResponse.mutate()
294
+ };
295
+ }
296
+
297
+ // src/contexts/TokensProvider.tsx
298
+ import { createContext as createContext5, useMemo } from "react";
299
+ import {
300
+ isFlagEnabled as isFlagEnabled2
301
+ } from "@berachain/config/internal/edge-config";
302
+
303
+ // src/utils/formatTokenList.ts
304
+ function formatTokenList({
305
+ defaultTokenList = [],
306
+ externalList = []
307
+ }) {
308
+ if (defaultTokenList.length === 0) {
309
+ return {
310
+ tokenList: externalList,
311
+ customTokenList: externalList,
312
+ featuredTokenList: []
313
+ };
314
+ }
315
+ const defaultList = defaultTokenList.map((token) => {
316
+ return { ...token, default: true };
317
+ });
318
+ const featuredTokenList = defaultList.filter((token) => {
319
+ return token.tags?.some((tag) => tag === "featured");
320
+ });
321
+ const mergedList = [...defaultList, ...externalList];
322
+ const uniqueList = mergedList.filter(
323
+ (item, index) => mergedList.findIndex((i) => isToken(i, item)) === index
324
+ );
325
+ return {
326
+ tokenList: uniqueList,
327
+ customTokenList: externalList,
328
+ featuredTokenList
329
+ };
330
+ }
331
+
332
+ // src/contexts/TokensProvider.tsx
333
+ import { jsx as jsx5 } from "react/jsx-runtime";
334
+ var TokenContext = createContext5(
335
+ void 0
336
+ );
337
+ function TokensProvider({
338
+ children,
339
+ defaultTokens,
340
+ edgeConfigTokenList,
341
+ userTokens,
342
+ onAddToken,
343
+ onRemoveToken
344
+ }) {
345
+ const { data: ensoTokens, refresh } = useEnsoUserTokensWithBalances();
346
+ const { tokenList = [], featuredTokenList = [] } = useMemo(
347
+ () => formatTokenList({
348
+ defaultTokenList: [
349
+ ...defaultTokens,
350
+ ...edgeConfigTokenList?.filter(
351
+ (token) => isFlagEnabled2(token.enabled)
352
+ )
353
+ ],
354
+ externalList: [
355
+ ...userTokens,
356
+ ...(ensoTokens ?? []).map((t) => ({
357
+ ...t,
358
+ balance: void 0,
359
+ price: void 0
360
+ }))
361
+ ]
362
+ }),
363
+ [defaultTokens, userTokens, edgeConfigTokenList, ensoTokens]
364
+ );
365
+ return /* @__PURE__ */ jsx5(
366
+ TokenContext.Provider,
367
+ {
368
+ value: {
369
+ tokenList,
370
+ userTokens,
371
+ featuredTokens: featuredTokenList,
372
+ ensoTokens,
373
+ onAddToken(tk) {
374
+ onAddToken(tk, { defaultTokens, userTokens, tokenList });
375
+ },
376
+ onRemoveToken,
377
+ refresh: () => {
378
+ refresh();
379
+ }
380
+ },
381
+ children
382
+ }
383
+ );
384
+ }
385
+
386
+ export {
387
+ BeraFlagsProvider,
388
+ useBeraFlags,
389
+ useBeraFlag,
390
+ BexStateContext,
391
+ useBexStatus,
392
+ BexStatusProvider,
393
+ useBlockTime,
394
+ BlockTimeContext,
395
+ BlockTimeProvider,
396
+ HoneyConfigContext,
397
+ HoneyConfigProvider,
398
+ useHoneyConfig,
399
+ useEnsoUserTokensWithBalances,
400
+ TokenContext,
401
+ TokensProvider
402
+ };
403
+ //# sourceMappingURL=chunk-VA3BQ34H.mjs.map