{"version":3,"sources":["../src/addTrailingSlash.ts","../src/BigMath.ts","../src/deferred.ts","../src/firstThenDebounce.ts","../src/formatDecimals.ts","../src/formatPrice.ts","../src/getLoadable.ts","../src/getLoadableQuery.ts","../src/getQuery.ts","../src/getSharedObservable.ts","../src/hasOwnProperty.ts","../src/isAbortError.ts","../src/isArrayOf.ts","../src/isAscii.ts","../src/isBigInt.ts","../src/isBooleanTrue.ts","../src/isHexString.ts","../src/isNotNil.ts","../src/isPromise.ts","../src/isSubject.ts","../src/isTruthy.ts","../src/keepAlive.ts","../src/planckToTokens.ts","../src/replaySubjectFrom.ts","../src/sleep.ts","../src/splitSubject.ts","../src/throwAfter.ts","../src/tokensToPlanck.ts","../src/validateHexString.ts"],"sourcesContent":["export const addTrailingSlash = (url: string) => {\n  if (url.endsWith(\"/\")) {\n    return url\n  }\n\n  return `${url}/`\n}\n","/**\n * Javascript's `Math` library for `BigInt`.\n * Taken from https://stackoverflow.com/questions/51867270/is-there-a-library-similar-to-math-that-supports-javascript-bigint/64953280#64953280\n */\nexport const BigMath = {\n  abs(x: bigint) {\n    return x < 0n ? -x : x\n  },\n  sign(x: bigint) {\n    if (x === 0n) return 0n\n    return x < 0n ? -1n : 1n\n  },\n  // TODO: Improve our babel/tsc config to let us use the `**` operator on bigint values.\n  // Error thrown: Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later. ts(2791)\n  // pow(base: bigint, exponent: bigint) {\n  //   return base ** exponent\n  // },\n  min(value: bigint, ...values: bigint[]) {\n    for (const v of values) if (v < value) value = v\n    return value\n  },\n  max(value: bigint, ...values: bigint[]) {\n    for (const v of values) if (v > value) value = v\n    return value\n  },\n}\n","/**\n * In TypeScript, a deferred promise refers to a pattern that involves creating a promise that can be\n * resolved or rejected at a later point in time, typically by code outside of the current function scope.\n *\n * This pattern is often used when dealing with asynchronous operations that involve multiple steps or when\n * the result of an operation cannot be immediately determined.\n */\nexport function Deferred<T>(): {\n  promise: Promise<T>\n  resolve: (value: T | PromiseLike<T>) => void\n  reject: (reason?: unknown) => void\n  isPending: () => boolean\n  isResolved: () => boolean\n  isRejected: () => boolean\n} {\n  let resolve!: (value: T | PromiseLike<T>) => void\n  let reject!: (reason?: unknown) => void\n\n  let isPending = true\n  let isResolved = false\n  let isRejected = false\n\n  const promise = new Promise<T>((innerResolve, innerReject) => {\n    resolve = (value) => {\n      isPending = false\n      isResolved = true\n      innerResolve(value)\n    }\n    reject = (reason) => {\n      isPending = false\n      isRejected = true\n      innerReject(reason)\n    }\n  })\n\n  return {\n    promise,\n    resolve,\n    reject,\n    isPending: () => isPending,\n    isResolved: () => isResolved,\n    isRejected: () => isRejected,\n  }\n}\n","import { concat, debounceTime, type Observable, type OperatorFunction, skip, take } from \"rxjs\"\n\n/**\n * An rxjs operator which:\n *\n * 1. Emits the first value it receives from the source observable, then:\n * 2. Debounces any future values by `timeout` ms.\n */\nexport const firstThenDebounce =\n  <T>(timeout: number): OperatorFunction<T, T> =>\n  (source: Observable<T>) =>\n    concat(source.pipe(take(1)), source.pipe(skip(1)).pipe(debounceTime(timeout)))\n","import BigNumber from \"bignumber.js\"\n\nconst MIN_DIGITS = 4 // less truncates more than what compact formating is\nexport const MAX_DECIMALS_FORMAT = 12\n\n/**\n * Custom decimal number formatting for Talisman\n * note that the NumberFormat().format() call is the ressource heavy part, it's not worth trying to optimize other parts\n * @param num input number\n * @param digits number of significant digits to display\n * @param locale locale used to format the number\n * @param options formatting options\n * @returns the formatted value\n */\nexport const formatDecimals = (\n  num?: string | number | null | BigNumber,\n  digits = MIN_DIGITS,\n  options: Partial<Intl.NumberFormatOptions> = {},\n  locale = \"en-US\"\n): string => {\n  if (num === null || num === undefined) return \"\"\n  if (digits < MIN_DIGITS) digits = MIN_DIGITS\n\n  const value = new BigNumber(num)\n  // very small numbers should display \"< 0.0001\"\n  const minDisplayVal = 1 / 10 ** digits\n\n  if (value.gt(0) && value.lt(minDisplayVal)) return `< ${formatDecimals(minDisplayVal)}`\n\n  // count digits\n  const flooredValue = value.integerValue()\n  const intDigits = flooredValue.isEqualTo(0) ? 0 : flooredValue.toString().length\n\n  // we never want to display a rounded up value\n  // to prevent JS default rounding, we will remove/truncate insignificant digits ourselves before formatting\n  let truncatedValue = value\n  //remove insignificant fraction digits\n  const excessFractionDigitsPow10 = new BigNumber(10).pow(\n    digits > intDigits ? digits - intDigits : 0\n  )\n\n  truncatedValue = truncatedValue\n    .multipliedBy(excessFractionDigitsPow10)\n    .integerValue()\n    .dividedBy(excessFractionDigitsPow10)\n\n  //remove insignificant integer digits\n  const excessIntegerDigits = new BigNumber(intDigits > digits ? intDigits - digits : 0)\n  const excessIntegerDigitsPow10 = new BigNumber(10).pow(excessIntegerDigits)\n  if (excessIntegerDigits.gt(0))\n    truncatedValue = truncatedValue\n      .dividedBy(excessIntegerDigitsPow10)\n      .integerValue()\n      .multipliedBy(excessIntegerDigitsPow10)\n\n  // format\n\n  return Intl.NumberFormat(locale, {\n    // compact notation (K, M, B) if above 9999\n    notation: truncatedValue.abs().gt(9999) ? \"compact\" : \"standard\",\n    // NOTE: possible values are from `0` to `21`\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#maximumsignificantdigits\n    maximumSignificantDigits: Math.max(1, Math.min(digits + (truncatedValue.lt(1) ? 1 : 0), 21)),\n    ...options,\n  }).format(truncatedValue.toNumber())\n}\n","export const formatPrice = (price: number, currency: string, compact: boolean) => {\n  return Intl.NumberFormat(undefined, {\n    style: \"currency\",\n    currency,\n    currencyDisplay: currency === \"usd\" ? \"narrowSymbol\" : \"symbol\",\n    minimumSignificantDigits: 3,\n    maximumSignificantDigits: compact ? (price < 1 ? 3 : 4) : undefined,\n    roundingPriority: compact ? \"auto\" : \"morePrecision\",\n    notation: compact ? \"compact\" : \"standard\",\n  }).format(price)\n}\n","import { catchError, from, map, type Observable, of, startWith, switchMap, timer } from \"rxjs\"\n\n// Designed to be serializable as it can be sent to the frontend\ntype LoadableError = {\n  name: string // can be used to identify the error type\n  message: string // display message\n}\n\nexport type Loadable<T = unknown> =\n  | { status: \"loading\"; data?: T; error?: undefined }\n  | { status: \"success\"; data: T; error?: undefined }\n  | { status: \"error\"; data?: T; error: LoadableError }\n\nexport type LoadableStatus = Loadable[\"status\"]\n\nexport type LoadableOptions = {\n  getError?: (error: unknown) => LoadableError\n  refreshInterval?: number\n}\n\nexport function getLoadable$<T>(\n  factory: () => Promise<T>,\n  options: LoadableOptions = {}\n): Observable<Loadable<T>> {\n  const { getError, refreshInterval } = options\n\n  const createLoadableStream = () =>\n    from(factory()).pipe(\n      map(\n        (data): Loadable<T> => ({\n          status: \"success\",\n          data,\n        })\n      ),\n      catchError((error) =>\n        of<Loadable<T>>({\n          status: \"error\",\n          error: getError ? getError(error) : getGenericError(error),\n        })\n      )\n    )\n\n  const source$ = refreshInterval\n    ? timer(0, refreshInterval).pipe(switchMap(() => createLoadableStream()))\n    : createLoadableStream()\n\n  return source$.pipe(\n    startWith<Loadable<T>>({\n      status: \"loading\",\n    } as Loadable<T>)\n  )\n}\n\nconst getGenericError = (error: unknown): LoadableError => ({\n  name: \"Error\",\n  message: getGenericErrorMessage(error),\n})\n\nconst getGenericErrorMessage = (error: unknown): string => {\n  if (typeof error === \"string\") {\n    return error\n  } else if (error instanceof Error) {\n    return error.message\n  } else if (error && typeof error === \"object\" && \"message\" in error) {\n    return (error as { message: string }).message\n  }\n  return String(error) || \"Unknown error\"\n}\n","import { map, type Observable, startWith } from \"rxjs\"\n\nimport type { Loadable } from \"./getLoadable\"\nimport { getQuery$, type QueryResult } from \"./getQuery\"\n\nexport type GetLoadableQueryParams<TArgs extends unknown[], TResult> = {\n  namespace: string\n  args: TArgs\n  queryFn: (args: TArgs, signal: AbortSignal) => Promise<TResult>\n  refreshInterval?: number\n  defaultValue?: TResult\n}\n\n/**\n * Thin wrapper around getQuery$ that returns Loadable<T> and optionally\n * primes the stream with a loading state using the provided default value.\n *\n * TODO: consolidate with getQuery$\n */\nexport const getLoadableQuery$ = <TArgs extends unknown[], TResult>(\n  params: GetLoadableQueryParams<TArgs, TResult>\n): Observable<Loadable<TResult>> => {\n  const initial =\n    params.defaultValue === undefined\n      ? []\n      : ([{ status: \"loading\", data: params.defaultValue }] as Loadable<TResult>[])\n\n  return getQuery$(params).pipe(\n    map((val: QueryResult<TResult>): Loadable<TResult> => {\n      switch (val.status) {\n        case \"loading\":\n          return { status: \"loading\", data: val.data }\n        case \"loaded\":\n          return { status: \"success\", data: val.data }\n        case \"error\": {\n          const err = val.error as Error | undefined\n          return {\n            status: \"error\",\n            error: {\n              name: err?.name ?? \"QueryError\",\n              message: err?.message ?? \"Failed to execute query\",\n            },\n          }\n        }\n      }\n    }),\n    startWith(...initial)\n  )\n}\n","import { isEqual } from \"lodash-es\"\nimport { BehaviorSubject, distinctUntilChanged, Observable, shareReplay } from \"rxjs\"\n\nimport { getSharedObservable } from \"./getSharedObservable\"\n\nexport type QueryStatus = \"loading\" | \"loaded\" | \"error\"\n\nexport type QueryResult<\n  T,\n  S extends QueryStatus = \"loading\" | \"loaded\" | \"error\",\n> = S extends \"loading\"\n  ? { status: \"loading\"; data: T | undefined; error: undefined }\n  : S extends \"loaded\"\n    ? { status: \"loaded\"; data: T; error: undefined }\n    : { status: \"error\"; data: undefined; error: unknown }\n\ntype QueryOptions<Output, Args> = {\n  namespace: string\n  args: Args\n  queryFn: (args: Args, signal: AbortSignal) => Promise<Output>\n  defaultValue?: Output\n  refreshInterval?: number\n  serializer?: (args: Args) => string\n}\n\n/**\n * Creates a shared observable for executing queries with caching, loading states, and automatic refresh capabilities.\n *\n * @example\n * ```typescript\n * const userQuery$ = getQuery$({\n *   namespace: 'users',\n *   args: { userId: 123 },\n *   queryFn: async ({ userId }) => fetchUser(userId),\n *   defaultValue: null,\n *   refreshInterval: 30000\n * });\n *\n * userQuery$.subscribe(result => {\n *   if (result.status === 'loaded') {\n *     console.log(result.data);\n *   }\n * });\n * ```\n *\n * @deprecated use getLoadableQuery$ instead\n */\nexport const getQuery$ = <Output, Args>({\n  namespace,\n  args,\n  queryFn,\n  defaultValue,\n  refreshInterval,\n  serializer = (args) => JSON.stringify(args),\n}: QueryOptions<Output, Args>): Observable<QueryResult<Output>> => {\n  return getSharedObservable(\n    namespace,\n    args,\n    () =>\n      new Observable<QueryResult<Output>>((subscriber) => {\n        const controller = new AbortController()\n\n        const result = new BehaviorSubject<QueryResult<Output>>({\n          status: \"loading\",\n          data: defaultValue,\n          error: undefined,\n        })\n\n        // result subscription\n        const sub = result\n          .pipe(distinctUntilChanged<QueryResult<Output>>(isEqual))\n          .subscribe(subscriber)\n\n        // biome-ignore lint/suspicious/noExplicitAny: legacy\n        let timeout: any = null\n\n        // fetch result subscription\n        const run = () => {\n          if (controller.signal.aborted) return\n\n          queryFn(args, controller.signal)\n            .then((data) => {\n              if (controller.signal.aborted) return\n              result.next({ status: \"loaded\", data, error: undefined })\n            })\n            .catch((error) => {\n              if (controller.signal.aborted) return\n              result.next({ status: \"error\", data: undefined, error })\n            })\n            .finally(() => {\n              if (controller.signal.aborted) return\n              if (refreshInterval) timeout = setTimeout(run, refreshInterval)\n            })\n        }\n\n        run()\n\n        return () => {\n          sub.unsubscribe()\n          if (timeout) clearTimeout(timeout)\n          controller.abort(new Error(\"getQuery$ unsubscribed\"))\n        }\n      }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n    serializer\n  )\n}\n","import { type Observable, shareReplay } from \"rxjs\"\n\nconst CACHE = new Map<string, unknown>()\n\n/**\n * When using react-rxjs hooks and state observables, the options are used as weak map keys.\n * This means that if the options object is recreated on each render, the observable will be recreated as well.\n * This utility function allows you to create a shared observable based on a namespace and arguments that, so react-rxjs can reuse the same observables\n *\n * @param namespace\n * @param args\n * @param createObservable\n * @param serializer\n * @returns\n */\nexport const getSharedObservable = <Args, Output, ObsOutput = Observable<Output>>(\n  namespace: string,\n  args: Args,\n  createObservable: (args: Args) => ObsOutput,\n  serializer = (args: Args): string => JSON.stringify(args)\n): ObsOutput => {\n  const cacheKey = `${namespace}:${serializer(args)}`\n\n  if (CACHE.has(cacheKey)) return CACHE.get(cacheKey) as ObsOutput\n\n  const obs = createObservable(args) as Observable<unknown>\n  const sharedObs = obs.pipe(shareReplay({ bufferSize: 1, refCount: true }))\n\n  CACHE.set(cacheKey, sharedObs)\n\n  return sharedObs as ObsOutput\n}\n","// biome-ignore lint/suspicious/noShadowRestrictedNames: legacy\nexport function hasOwnProperty<X, Y extends PropertyKey>(\n  obj: X,\n  prop: Y\n): obj is X & Record<Y, unknown> {\n  if (typeof obj !== \"object\") return false\n  if (obj === null) return false\n  return prop in obj\n}\n","export const isAbortError = (error: unknown): boolean => {\n  return error instanceof Error && error.name === \"AbortError\"\n}\n","export function isArrayOf<T, P extends Array<unknown>>(\n  array: unknown[],\n  func: new (...args: P) => T\n): array is T[] {\n  if (array.length > 0 && array[0] instanceof func) return true\n  return false\n}\n","export const isAscii = (str: string): boolean => {\n  return [...str].every((char) => char.charCodeAt(0) <= 127)\n}\n","export const isBigInt = (value: unknown): value is bigint => typeof value === \"bigint\"\n","export const isBooleanTrue = <T>(x: T | null | undefined): x is T => !!x\n","export type HexString = `0x${string}`\n\nexport const REGEX_HEX_STRING = /^0x[0-9a-fA-F]*$/\n\nexport const isHexString = (value: unknown): value is HexString => {\n  return typeof value === \"string\" && REGEX_HEX_STRING.test(value)\n}\n","/**\n * WARNING: This function only checks against null or undefined, it does not coerce the value.\n * ie: false and 0 are considered not nil\n * Use isTruthy instead for a regular coercion check.\n *\n * @param value\n * @returns whether the value is neither null nor undefined\n */\nexport const isNotNil = <T>(value: T | null | undefined): value is T =>\n  value !== null && value !== undefined\n","// biome-ignore lint/suspicious/noExplicitAny: legacy\nexport const isPromise = <T = any>(value: any): value is Promise<T> =>\n  !!value &&\n  (typeof value === \"object\" || typeof value === \"function\") &&\n  typeof value.then === \"function\"\n","import { Subject } from \"rxjs\"\n\n/**\n * Tests to see if an object is an RxJS {@link Subject}.\n */\nexport function isSubject<T>(object?: Subject<T> | object): object is Subject<T> {\n  if (!object) return false\n  if (object instanceof Subject) return true\n  return (\n    \"asObservable\" in object &&\n    isFn(object.asObservable) &&\n    \"complete\" in object &&\n    isFn(object.complete) &&\n    \"error\" in object &&\n    isFn(object.error) &&\n    \"forEach\" in object &&\n    isFn(object.forEach) &&\n    \"next\" in object &&\n    isFn(object.next) &&\n    \"pipe\" in object &&\n    isFn(object.pipe) &&\n    \"subscribe\" in object &&\n    isFn(object.subscribe) &&\n    \"unsubscribe\" in object &&\n    isFn(object.unsubscribe) &&\n    \"closed\" in object &&\n    isBool(object.closed) &&\n    \"observed\" in object &&\n    isBool(object.observed)\n  )\n}\n\n/**\n * Returns `true` if `value` is a function.\n */\nfunction isFn(value: unknown): value is (...args: unknown[]) => unknown {\n  return typeof value === \"function\"\n}\n\n/**\n * Returns `true` if `value` is a boolean.\n */\nfunction isBool(value: unknown): value is boolean {\n  return typeof value === \"boolean\"\n}\n","export const isTruthy = <T>(value: T | null | undefined): value is T => Boolean(value)\n","import type { OperatorFunction } from \"rxjs\"\nimport { type Observable, shareReplay, tap } from \"rxjs\"\n\n/**\n * An RxJS operator that keeps the source observable alive for a specified duration\n * after all subscribers have unsubscribed. This prevents expensive re-subscriptions\n * when subscribers come and go frequently.\n *\n * @param keepAliveMs - Duration in milliseconds to keep the source alive after last unsubscription\n * @returns MonoTypeOperatorFunction that can be used in pipe()\n *\n * @example\n * ```typescript\n * const data$ = expensive_api_call$.pipe(\n *   keepAlive(3000) // Keep alive for 3 seconds\n * );\n * ```\n */\nexport const keepAlive = <T>(timeout: number): OperatorFunction<T, T> => {\n  let release: ReturnType<typeof keepSourceSubscribed> | null\n\n  return (source: Observable<T>) =>\n    source.pipe(\n      tap({\n        subscribe: () => {\n          release = keepSourceSubscribed(source, timeout)\n        },\n        unsubscribe: () => {\n          release?.()\n        },\n      }),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    )\n}\n\nconst keepSourceSubscribed = (observable: Observable<unknown>, ms: number) => {\n  const sub = observable.subscribe()\n  return () => setTimeout(() => sub.unsubscribe(), ms)\n}\n","import BigNumber from \"bignumber.js\"\n\nexport function planckToTokens(planck: string, tokenDecimals: number): string\nexport function planckToTokens(planck: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined\nexport function planckToTokens(planck?: string, tokenDecimals?: number): string | undefined {\n  if (typeof planck !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n  const base = 10\n  const exponent = -1 * tokenDecimals\n  const multiplier = base ** exponent\n\n  return new BigNumber(planck).multipliedBy(multiplier).toString(10)\n}\n","import { ReplaySubject } from \"rxjs\"\n\nimport { isPromise } from \"./isPromise\"\n\n/**\n * Turns a value into a {@link ReplaySubject} of size 1.\n *\n * If the value is already a {@link ReplaySubject}, it will be returned as-is.\n *\n * If the value is a {@link Promise}, it will be awaited,\n * and the awaited value will be published into the {@link ReplaySubject} when it becomes available.\n *\n * For any other type of value, it will be immediately published into the {@link ReplaySubject}.\n */\nexport const replaySubjectFrom = <T>(\n  initialValue: T | Promise<T> | ReplaySubject<T>\n): ReplaySubject<T> => {\n  if (initialValue instanceof ReplaySubject) return initialValue\n\n  const subject = new ReplaySubject<T>(1)\n\n  // if initialValue is a promise, await it and then call `subject.next()` with the awaited value\n  if (isPromise(initialValue)) {\n    initialValue.then(\n      (value) => subject.next(value),\n      (error) => subject.error(error)\n    )\n    return subject\n  }\n\n  // if initialValue is not a promise, immediately call `subject.next()` with the value\n  subject.next(initialValue)\n  return subject\n}\n","export const sleep = (ms: number) =>\n  new Promise<void>((resolve) => {\n    if (process.env.NODE_ENV === \"test\") resolve()\n    else setTimeout(resolve, ms)\n  })\n","import type { Observable, Subject } from \"rxjs\"\n\n/**\n * Takes a subject and splits it into two parts:\n *\n * 1. A function to submit new values into the subject.\n * 2. An observable for subscribing to new values from the subject.\n *\n * This can be helpful when, to avoid bugs, you want to expose only one\n * of these parts to external code and keep the other part private.\n */\nexport function splitSubject<T>(subject: Subject<T>) {\n  const next = (value: T) => subject.next(value)\n  const observable: Observable<T> = subject.asObservable()\n\n  return [next, observable] as const\n}\n","export const throwAfter = (ms: number, reason: string) =>\n  new Promise<never>((_, reject) => setTimeout(() => reject(new Error(reason)), ms))\n","import BigNumber from \"bignumber.js\"\n\nexport function tokensToPlanck(tokens: string, tokenDecimals: number): string\nexport function tokensToPlanck(tokens: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined\nexport function tokensToPlanck(tokens?: string, tokenDecimals?: number): string | undefined {\n  if (typeof tokens !== \"string\" || typeof tokenDecimals !== \"number\") return\n\n  const base = 10\n  const exponent = tokenDecimals\n  const multiplier = base ** exponent\n\n  return new BigNumber(tokens).multipliedBy(multiplier).toString(10)\n}\n","/**\n * @name validateHexString\n * @description Checks if a string is a hex string. Required to account for type differences between different polkadot libraries\n * @param {string} str - string to check\n * @returns {`0x${string}`} - boolean\n * @example\n * validateHexString(\"0x1234\") // \"0x1234\"\n * validateHexString(\"1234\") // Error: Expected a hex string\n * validateHexString(1234) // Error: Expected a string\n **/\nexport const validateHexString = (str: string): `0x${string}` => {\n  if (typeof str !== \"string\") {\n    throw new Error(\"Expected a string\")\n  }\n\n  if (str.startsWith(\"0x\")) {\n    return str as `0x${string}`\n  }\n  throw new Error(\"Expected a hex string\")\n}\n"],"mappings":"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","names":["map","startWith","shareReplay","args","args","shareReplay","map","startWith","shareReplay","BigNumber","BigNumber"]}