PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/@polkadot-api/observable-client/dist

Просмотр файла: index.mjs.map

{"version":3,"sources":["../src/utils/shareLatest.ts","../src/utils/concatMapEager.ts","../src/utils/with-default-value.ts","../src/chainHead/chainHead.ts","../src/chainHead/enhancers/operationLimitRecovery.ts","../src/chainHead/enhancers/optionalHash.ts","../src/chainHead/enhancers/fromAbortControllerFn.ts","../src/chainHead/enhancers/lazyFollower.ts","../src/chainHead/enhancers/whileBestBlock.ts","../src/chainHead/errors.ts","../src/chainHead/streams/follow.ts","../src/chainHead/streams/get-runtime-creator.ts","../src/chainHead/streams/pinned-blocks.ts","../src/chainHead/streams/block-operations.ts","../src/chainHead/enhancers/withStopRecovery.ts","../src/chainHead/enhancers/operationInaccessibleRecovery.ts","../src/chainHead/storage-queries.ts","../src/chainHead/track-tx.ts","../src/chainHead/validate-tx.ts","../src/tx.ts","../src/getObservableClient.ts"],"sourcesContent":["import { Observable, ReplaySubject, share } from \"rxjs\"\n\nexport const shareLatest: <T>(base: Observable<T>) => Observable<T> = share({\n  connector: () => new ReplaySubject(1),\n  resetOnError: true,\n  resetOnComplete: true,\n  resetOnRefCountZero: true,\n})\n","import { defer, Observable, ObservableInput, Subscription } from \"rxjs\"\n\nexport const concatMapEager =\n  <I, O>(\n    mapper: (outterValue: I, index: number) => ObservableInput<O>,\n    concurrent = Infinity,\n  ) =>\n  (source$: Observable<I>) =>\n    new Observable<O>((observer) => {\n      let topSubscription: Subscription\n      const queues = new Map<number, Observable<O>>()\n      const innerSubscriptions = new Map<number, Subscription>()\n      const results = new Map<number, O[]>()\n\n      let mapperIdx = 0\n      let subscriptionIdx = 0\n      let observerIdx = 0\n\n      const nextSubscription = () => {\n        const inner$ = queues.get(subscriptionIdx)\n        if (!inner$) {\n          if (\n            innerSubscriptions.size === 0 &&\n            (typeof topSubscription === \"undefined\" || topSubscription.closed)\n          ) {\n            observer.complete()\n          }\n          return\n        }\n        const idx = subscriptionIdx++\n        queues.delete(idx)\n        if (observerIdx !== idx) {\n          results.set(idx, [])\n        }\n        innerSubscriptions.set(\n          idx,\n          inner$.subscribe({\n            next(x: O) {\n              if (observerIdx === idx) {\n                observer.next(x)\n              } else {\n                results.get(idx)!.push(x)\n              }\n            },\n            complete() {\n              innerSubscriptions.delete(idx)\n              if (idx === observerIdx) {\n                observerIdx++\n                while (results.has(observerIdx)) {\n                  results.get(observerIdx)!.forEach((x) => observer.next(x))\n                  results.delete(observerIdx)\n                  if (innerSubscriptions.has(observerIdx)) {\n                    break\n                  }\n                  observerIdx++\n                }\n              }\n              nextSubscription()\n            },\n            error(e: any) {\n              observer.error(e)\n            },\n          }),\n        )\n      }\n\n      topSubscription = source$.subscribe({\n        next(outterValue: I) {\n          const idx = mapperIdx++\n          queues.set(\n            idx,\n            defer(() => mapper(outterValue, idx)),\n          )\n          if (innerSubscriptions.size < concurrent) {\n            nextSubscription()\n          }\n        },\n        error(e: any) {\n          observer.error(e)\n        },\n        complete() {\n          if (innerSubscriptions.size === 0) {\n            observer.complete()\n          }\n        },\n      })\n\n      return () => {\n        innerSubscriptions.forEach((subscription) => subscription.unsubscribe())\n        topSubscription.unsubscribe()\n        queues.clear()\n        results.clear()\n      }\n    })\n","import { Observable } from \"rxjs\"\n\nexport const withDefaultValue =\n  <V, T>(defaultValue: V) =>\n  (source$: Observable<T>): Observable<V | T> =>\n    new Observable((observer) => {\n      let hasEmited = false\n\n      const subscription = source$.subscribe({\n        next(v) {\n          hasEmited = true\n          observer.next(v)\n        },\n        error(e) {\n          observer.error(e)\n        },\n        complete() {\n          observer.complete()\n        },\n      })\n\n      if (!hasEmited) observer.next(defaultValue)\n\n      return subscription\n    })\n","import { concatMapEager, shareLatest } from \"@/utils\"\nimport { blockHeader } from \"@polkadot-api/substrate-bindings\"\nimport {\n  ChainHead,\n  DisjointError,\n  FollowEventWithRuntime,\n  StorageItemInput,\n  StorageResult,\n} from \"@polkadot-api/substrate-client\"\nimport {\n  Observable,\n  ReplaySubject,\n  Subject,\n  defer,\n  distinctUntilChanged,\n  map,\n  merge,\n  mergeMap,\n  of,\n  scan,\n  share,\n  switchMap,\n  take,\n  tap,\n} from \"rxjs\"\n\nimport { withDefaultValue } from \"@/utils\"\nimport {\n  fromAbortControllerFn,\n  getWithOptionalhash$,\n  getWithRecovery,\n  withEnsureCanonicalChain,\n  withLazyFollower,\n  withOperationInaccessibleRecovery,\n  withStopRecovery,\n} from \"./enhancers\"\nimport { BlockNotPinnedError } from \"./errors\"\nimport { getRecoveralStorage$ } from \"./storage-queries\"\nimport type {\n  BlockUsageEvent,\n  PinnedBlocks,\n  PinnedBlock,\n  RuntimeContext,\n  SystemEvent,\n} from \"./streams\"\nimport { getFollow$, getPinnedBlocks$ } from \"./streams\"\nimport { getTrackTx } from \"./track-tx\"\nimport { getValidateTx } from \"./validate-tx\"\n\nexport type {\n  PinnedBlocks,\n  PinnedBlock,\n  FollowEventWithRuntime,\n  RuntimeContext,\n  SystemEvent,\n}\n\nexport type BlockInfo = {\n  hash: string\n  number: number\n  parent: string\n}\n\nconst toBlockInfo = ({ hash, number, parent }: PinnedBlock): BlockInfo => ({\n  hash,\n  number,\n  parent,\n})\n\nexport const getChainHead$ = (chainHead: ChainHead) => {\n  const { getFollower, unfollow, follow$ } = getFollow$(chainHead)\n  const lazyFollower = withLazyFollower(getFollower)\n  const { withRecovery, withRecoveryFn } = getWithRecovery()\n\n  const blockUsage$ = new Subject<BlockUsageEvent>()\n  const withRefcount =\n    <A extends Array<any>, T>(\n      fn: (hash: string, ...args: A) => Observable<T>,\n    ): ((hash: string, ...args: A) => Observable<T>) =>\n    (hash, ...args) =>\n      new Observable((observer) => {\n        blockUsage$.next({ type: \"blockUsage\", value: { type: \"hold\", hash } })\n        const subscription = fn(hash, ...args).subscribe(observer)\n        return () => {\n          setTimeout(() => {\n            blockUsage$.next({\n              type: \"blockUsage\",\n              value: { type: \"release\", hash },\n            })\n          }, 0)\n          subscription.unsubscribe()\n        }\n      })\n\n  const withInMemory =\n    <A extends Array<any>, T>(\n      fn: (hash: string, ...args: A) => Observable<T>,\n    ): ((hash: string, ...args: A) => Observable<T>) =>\n    (hash, ...args) =>\n      new Observable((observer) => {\n        let isPresent = false\n        pinnedBlocks$.pipe(take(1)).subscribe((blocks) => {\n          const block = blocks.blocks.get(hash)\n          isPresent = !!block && !block.unpinned\n        })\n\n        return isPresent\n          ? fn(hash, ...args).subscribe(observer)\n          : observer.error(new BlockNotPinnedError())\n      })\n\n  const getHeader = (hash: string) =>\n    getFollower().header(hash).then(blockHeader.dec)\n\n  const unpin = (hashes: string[]) =>\n    getFollower()\n      .unpin(hashes)\n      .catch((e) => {\n        if (e instanceof DisjointError) return\n        throw e\n      })\n\n  const commonEnhancer = <A extends Array<any>, T>(\n    fn: (\n      key: string,\n      ...args: [...A, ...[abortSignal: AbortSignal]]\n    ) => Promise<T>,\n  ) => {\n    const canonicalChain = (_fn: (hash: string, ...args: A) => Observable<T>) =>\n      withEnsureCanonicalChain(pinnedBlocks$, follow$, _fn)\n\n    return withInMemory(\n      withRefcount(\n        canonicalChain(\n          withStopRecovery(\n            pinnedBlocks$,\n            withOperationInaccessibleRecovery(\n              withRecoveryFn(fromAbortControllerFn(fn)),\n            ),\n          ),\n        ),\n      ),\n    )\n  }\n\n  const withCanonicalChain: <Args extends Array<any>, T>(\n    fn: (\n      hash: string | null,\n      withCanonical: boolean,\n      ...args: Args\n    ) => Observable<T>,\n    withCanonicalChain?: boolean,\n  ) => (hash: string | null, ...args: Args) => Observable<T> =\n    (fn, withCanonicalChain = true) =>\n    (hash, ...args) =>\n      fn(hash, withCanonicalChain, ...args)\n\n  const _call$ = withOperationInaccessibleRecovery(\n    withRecoveryFn(fromAbortControllerFn(lazyFollower(\"call\"))),\n  )\n\n  const cache = new Map<string, Map<string, Observable<any>>>()\n  const pinnedBlocks$ = getPinnedBlocks$(\n    follow$,\n    getHeader,\n    withRefcount(_call$),\n    blockUsage$,\n    (blocks) => {\n      unpin(blocks)\n      blocks.forEach((hash) => {\n        cache.delete(hash)\n      })\n    },\n  )\n\n  const getRuntimeContext$ = withRefcount((hash: string) =>\n    pinnedBlocks$.pipe(\n      take(1),\n      mergeMap(\n        (pinned) => pinned.runtimes[pinned.blocks.get(hash)!.runtime].runtime,\n      ),\n    ),\n  )\n\n  const withRuntime =\n    <T>(mapper: (x: T) => string) =>\n    (source$: Observable<T>): Observable<[T, RuntimeContext]> =>\n      source$.pipe(\n        concatMapEager((x) =>\n          getRuntimeContext$(mapper(x)).pipe(map((runtime) => [x, runtime])),\n        ),\n      )\n\n  const upsertCachedStream = <T>(\n    hash: string,\n    key: string,\n    stream: Observable<T>,\n  ): Observable<T> => {\n    const hashCache = cache.get(hash) ?? new Map()\n    const cached = hashCache.get(key)\n    if (cached) return cached\n\n    cache.set(hash, hashCache)\n\n    const connector = new ReplaySubject<T>()\n    const result = stream.pipe(\n      share({\n        connector: () => connector,\n      }),\n      tap({\n        complete() {\n          hashCache.set(key, connector)\n        },\n      }),\n    )\n    hashCache.set(key, result)\n\n    return result\n  }\n\n  const finalized$ = pinnedBlocks$.pipe(\n    distinctUntilChanged((a, b) => a.finalized === b.finalized),\n    map((pinned) => toBlockInfo(pinned.blocks.get(pinned.finalized)!)),\n    shareLatest,\n  )\n\n  const best$ = pinnedBlocks$.pipe(\n    distinctUntilChanged((a, b) => a.best === b.best),\n    map((pinned) => toBlockInfo(pinned.blocks.get(pinned.best)!)),\n    shareLatest,\n  )\n\n  const bestBlocks$ = pinnedBlocks$.pipe(\n    distinctUntilChanged(\n      (prev, current) =>\n        prev.finalized === current.finalized && prev.best === current.best,\n    ),\n    scan((acc, pinned) => {\n      const getBlockInfo = (hash: string) =>\n        acc.get(hash) || toBlockInfo(pinned.blocks.get(hash)!)\n\n      const best = getBlockInfo(pinned.best)\n      const finalized = getBlockInfo(pinned.finalized)\n\n      const len = best.number - finalized.number + 1\n      const result = new Array<BlockInfo>(len)\n      for (let i = 0, hash = best.hash; i < len; i++) {\n        result[i] = getBlockInfo(hash)\n        hash = result[i].parent\n      }\n\n      return new Map(result.map((b) => [b.hash, b]))\n    }, new Map<string, BlockInfo>()),\n    map((x) => [...x.values()]),\n    shareLatest,\n  )\n\n  const runtime$ = pinnedBlocks$.pipe(\n    distinctUntilChanged((a, b) => a.finalizedRuntime === b.finalizedRuntime),\n    switchMap(({ finalizedRuntime: { runtime } }) =>\n      runtime.pipe(withDefaultValue(null)),\n    ),\n    shareLatest,\n  )\n\n  const metadata$ = runtime$.pipe(map((x) => x?.metadata ?? null))\n\n  const withOptionalHash$ = getWithOptionalhash$(\n    finalized$.pipe(map((b) => b.hash)),\n    best$.pipe(map((b) => b.hash)),\n  )\n\n  const _body$ = commonEnhancer(lazyFollower(\"body\"))\n  const body$ = (hash: string) =>\n    upsertCachedStream(hash, \"body\", _body$(hash, true))\n\n  const _storage$ = commonEnhancer(lazyFollower(\"storage\"))\n\n  const storage$ = withOptionalHash$(\n    <Type extends StorageItemInput[\"type\"], T>(\n      hash: string,\n      withCanonicalChain: boolean,\n      type: Type,\n      keyMapper: (ctx: RuntimeContext) => string,\n      childTrie: string | null = null,\n      mapper?: (data: StorageResult<Type>, ctx: RuntimeContext) => T,\n    ): Observable<unknown extends T ? StorageResult<Type> : T> =>\n      pinnedBlocks$.pipe(\n        take(1),\n        mergeMap(\n          (pinned) => pinned.runtimes[pinned.blocks.get(hash)!.runtime].runtime,\n        ),\n        mergeMap((ctx) => {\n          const key = keyMapper(ctx)\n          const unMapped$ = upsertCachedStream(\n            hash,\n            `storage-${type}-${key}-${childTrie ?? \"\"}`,\n            _storage$(hash, withCanonicalChain, type, key, childTrie),\n          )\n\n          return mapper\n            ? upsertCachedStream(\n                hash,\n                `storage-${type}-${key}-${childTrie ?? \"\"}-dec`,\n                unMapped$.pipe(map((x) => mapper(x, ctx))),\n              )\n            : unMapped$\n        }),\n      ) as Observable<unknown extends T ? StorageResult<Type> : T>,\n  )\n\n  const recoveralStorage$ = getRecoveralStorage$(getFollower, withRecovery)\n  const storageQueries$ = withOperationInaccessibleRecovery(\n    withOptionalHash$(\n      withRefcount(\n        withStopRecovery(\n          pinnedBlocks$,\n          (\n            hash: string,\n            queries: Array<StorageItemInput>,\n            childTrie?: string,\n          ) => recoveralStorage$(hash, queries, childTrie ?? null, false),\n        ),\n      ),\n    ),\n  )\n\n  const header$ = withOptionalHash$(\n    withRefcount(\n      withStopRecovery(pinnedBlocks$, (hash: string) =>\n        defer(() => getHeader(hash)),\n      ),\n    ),\n  )\n\n  // calling `unfollow` also kills the subscription due to the fact\n  // that `follow$` completes, which makes all other streams to\n  // also complete (or error, in the case of ongoing operations)\n  merge(runtime$, bestBlocks$).subscribe()\n\n  const eventsAt$ = (hash: string | null, canonical = false) =>\n    storage$(\n      hash,\n      canonical,\n      \"value\",\n      (ctx) => ctx.events.key,\n      null,\n      (x, ctx) => ctx.events.dec(x!),\n    )\n\n  const __call$ = commonEnhancer(lazyFollower(\"call\"))\n  const call$ = withOptionalHash$(\n    (hash: string, canonical: boolean, fn: string, args: string) =>\n      upsertCachedStream(\n        hash,\n        `call-${fn}-${args}`,\n        __call$(hash, canonical, fn, args),\n      ),\n  )\n\n  const validateTx$ = getValidateTx(withCanonicalChain(call$, false))\n\n  const innerBody$ = (hash: string) =>\n    upsertCachedStream(hash, \"body\", _body$(hash, false))\n\n  const trackTx$ = getTrackTx(pinnedBlocks$, innerBody$, validateTx$, eventsAt$)\n  const trackTxWithoutEvents$ = getTrackTx(\n    pinnedBlocks$,\n    innerBody$,\n    validateTx$,\n    () => of(),\n  )\n\n  return {\n    follow$,\n    finalized$,\n    best$,\n    bestBlocks$,\n    runtime$,\n    metadata$,\n\n    header$,\n    body$,\n    call$: withCanonicalChain(call$),\n    storage$: withCanonicalChain(storage$),\n    storageQueries$,\n    eventsAt$: withCanonicalChain(eventsAt$),\n\n    trackTx$,\n    trackTxWithoutEvents$,\n    validateTx$,\n    pinnedBlocks$,\n    withRuntime,\n    getRuntimeContext$: withOptionalHash$(getRuntimeContext$),\n    unfollow,\n  }\n}\nexport type ChainHead$ = ReturnType<typeof getChainHead$>\n","import { OperationLimitError } from \"@polkadot-api/substrate-client\"\nimport type { Subscriber } from \"rxjs\"\nimport { Observable } from \"rxjs\"\n\ninterface PendingTaskNode<T> {\n  value: T\n  next?: PendingTaskNode<T>\n  prev?: PendingTaskNode<T>\n}\n\nexport default class PendingTaskQueue<T> {\n  private first?: PendingTaskNode<T>\n  private last?: PendingTaskNode<T>\n\n  private getRemoveFn(node: PendingTaskNode<T>) {\n    return () => {\n      if (node.prev) {\n        node.prev.next = node.next\n      } else {\n        this.first = node.next\n      }\n\n      if (node.next) {\n        node.next.prev = node.prev\n      } else {\n        this.last = node.prev\n      }\n\n      delete node.prev\n      delete node.next\n    }\n  }\n\n  push(value: T) {\n    const newNode: PendingTaskNode<T> = { value }\n\n    if (this.last === undefined) {\n      this.last = this.first = newNode\n    } else {\n      this.last.next = newNode\n      newNode.prev = this.last\n\n      this.last = newNode\n    }\n\n    return this.getRemoveFn(newNode)\n  }\n\n  unshift(value: T) {\n    this.first = { value, next: this.first }\n    this.first.next && (this.first.next.prev = this.first)\n    this.last ||= this.first\n    return this.getRemoveFn(this.first)\n  }\n\n  pop() {\n    const result = this.first?.value\n\n    if (this.first) {\n      this.first = this.first.next\n\n      if (!this.first) {\n        this.last = undefined\n      } else {\n        delete this.first.prev?.next\n        delete this.first.prev\n      }\n    }\n\n    return result\n  }\n\n  isEmpty() {\n    return !this.first\n  }\n}\n\nexport const getWithRecovery = () => {\n  const tearDownOperations = new Map<Observable<any>, () => void>()\n\n  const setTeardown = (observable: Observable<any>, cb: () => void) => {\n    tearDownOperations.set(observable, () => {\n      tearDownOperations.delete(observable)\n      cb()\n    })\n  }\n\n  const teardown = (observable: Observable<any>) => {\n    tearDownOperations.get(observable)?.()\n  }\n\n  const pendingTasks = new PendingTaskQueue<{\n    observer: Subscriber<any>\n    source$: Observable<any>\n  }>()\n  const unshift = pendingTasks.unshift.bind(pendingTasks)\n  const push = pendingTasks.push.bind(pendingTasks)\n\n  const addTask = (\n    task: {\n      observer: Subscriber<any>\n      source$: Observable<any>\n    },\n    topPriority: boolean,\n  ) => {\n    const fn = topPriority ? unshift : push\n    setTeardown(task.source$, fn(task))\n  }\n\n  const onEmptySlot = () => {\n    const data = pendingTasks.pop()\n    if (!data) return\n\n    tearDownOperations.delete(data.source$)\n    process(data)\n  }\n\n  const process = <T>(data: {\n    observer: Subscriber<T>\n    source$: Observable<T>\n  }) => {\n    const { source$, observer } = data\n\n    let isOperationLimit = false\n    const subscription = source$.subscribe({\n      next(x) {\n        observer.next(x)\n      },\n      error(e) {\n        ;(isOperationLimit = e instanceof OperationLimitError)\n          ? addTask(data, true)\n          : observer.error(e)\n      },\n      complete() {\n        observer.complete()\n      },\n    })\n\n    if (!subscription.closed) {\n      setTeardown(source$, () => {\n        subscription.unsubscribe()\n        onEmptySlot()\n      })\n    } else if (!isOperationLimit) onEmptySlot()\n  }\n\n  const withRecovery =\n    (topPriority = false) =>\n    <T>(source$: Observable<T>): Observable<T> =>\n      new Observable((observer) => {\n        const pendingTask = { observer, source$ }\n\n        if (pendingTasks.isEmpty()) {\n          process(pendingTask)\n        } else {\n          addTask(pendingTask, topPriority)\n        }\n\n        return () => {\n          teardown(source$)\n        }\n      })\n\n  const withNormalRecovery = withRecovery()\n  const withRecoveryFn =\n    <Args extends Array<any>, T>(fn: (...args: Args) => Observable<T>) =>\n    (...args: Args) =>\n      withNormalRecovery(fn(...args))\n\n  return { withRecovery, withRecoveryFn }\n}\n","import { Observable, mergeMap, of, take } from \"rxjs\"\n\nexport const getWithOptionalhash$ = (\n  finalized$: Observable<string>,\n  best$: Observable<string>,\n) => {\n  return <Args extends Array<any>, T>(\n      fn: (hash: string, ...args: Args) => Observable<T>,\n    ) =>\n    (hash: string | null, ...args: Args) => {\n      const hash$ =\n        hash === null || hash === \"finalized\"\n          ? finalized$\n          : hash === \"best\"\n            ? best$\n            : of(hash)\n\n      return hash$.pipe(\n        take(1),\n        mergeMap((h) => fn(h, ...args)),\n      )\n    }\n}\n","import { Observable } from \"rxjs\"\n\nexport const fromAbortControllerFn =\n  <A extends Array<any>, T>(\n    fn: (...args: [...A, ...[abortSignal: AbortSignal]]) => Promise<T>,\n  ) =>\n  (...args: A): Observable<T> =>\n    new Observable((observer) => {\n      let aborter: AbortController | undefined = new AbortController()\n\n      fn(...[...args, aborter.signal]).then(\n        (value: any) => {\n          observer.next(value)\n          observer.complete()\n        },\n        (error: any) => {\n          observer.error(error)\n        },\n      )\n\n      return () => {\n        observer.unsubscribe()\n        aborter!.abort()\n        aborter = undefined\n      }\n    })\n","import { FollowResponse } from \"@polkadot-api/substrate-client\"\n\nexport const withLazyFollower =\n  (getFollower: () => FollowResponse) =>\n  <Key extends keyof FollowResponse>(key: Key): FollowResponse[Key] =>\n  (...args: any[]) =>\n    (getFollower() as any)[key](...args)\n","import {\n  Finalized,\n  FollowEventWithRuntime,\n} from \"@polkadot-api/substrate-client\"\nimport {\n  Observable,\n  filter,\n  mergeMap,\n  pipe,\n  switchMap,\n  take,\n  throwError,\n} from \"rxjs\"\nimport { BlockPrunedError, NotBestBlockError } from \"../errors\"\nimport { PinnedBlocks, retryOnStopError } from \"../streams\"\nimport { isBestOrFinalizedBlock } from \"../streams/block-operations\"\n\nexport function withEnsureCanonicalChain<A extends Array<any>, T>(\n  blocks$: Observable<PinnedBlocks>,\n  follow$: Observable<FollowEventWithRuntime>,\n  fn: (hash: string, ...args: A) => Observable<T>,\n): (hash: string, ensureCanonical: boolean, ...args: A) => Observable<T> {\n  return (hash: string, ensureCanonical, ...args: A) => {\n    const enhancer: <T>(x: Observable<T>) => Observable<T> = ensureCanonical\n      ? pipe(\n          throwWhenPrune(\n            hash,\n            follow$.pipe(\n              retryOnStopError(),\n              filter((evt): evt is Finalized => evt.type === \"finalized\"),\n              mergeMap((evt) => evt.prunedBlockHashes),\n            ),\n          ),\n          onlyIfIsBestOrFinalized(hash, blocks$),\n        )\n      : (x) => x\n\n    return enhancer(fn(hash, ...args))\n  }\n}\n\nconst onlyIfIsBestOrFinalized =\n  <T>(hash: string, blocks$: Observable<PinnedBlocks>) =>\n  (source$: Observable<T>) =>\n    isBestOrFinalizedBlock(blocks$, hash).pipe(\n      take(1),\n      switchMap((isBest) =>\n        isBest ? source$ : throwError(() => new NotBestBlockError()),\n      ),\n    )\n\nconst throwWhenPrune =\n  <T>(hash: string, pruned$: Observable<string>) =>\n  (source$: Observable<T>) =>\n    new Observable<T>((subscriber) => {\n      const prunedSubscription = pruned$\n        .pipe(filter((h) => h === hash))\n        .subscribe(() => {\n          subscriber.error(new BlockPrunedError())\n        })\n      const sourceSubscription = source$.subscribe(subscriber)\n\n      return () => {\n        prunedSubscription.unsubscribe()\n        sourceSubscription.unsubscribe()\n      }\n    })\n","export class BlockNotPinnedError extends Error {\n  constructor() {\n    super(\"Block is not pinned\")\n    this.name = \"BlockNotPinnedError\"\n  }\n}\n\nexport class BlockPrunedError extends Error {\n  constructor() {\n    super(\"Block pruned\")\n    this.name = \"BlockPrunedError\"\n  }\n}\n\nexport class NotBestBlockError extends Error {\n  constructor() {\n    super(\"Block is not best block or finalized\")\n    this.name = \"NotBestBlockError\"\n  }\n}\n","import {\n  ChainHead,\n  FollowEventWithRuntime,\n  FollowResponse,\n  StopError,\n} from \"@polkadot-api/substrate-client\"\nimport { Observable, Subscription, noop, share } from \"rxjs\"\n\nexport const getFollow$ = (chainHead: ChainHead) => {\n  let follower: FollowResponse | null = null\n  let unfollow: () => void = noop\n\n  const follow$ = new Observable<FollowEventWithRuntime>((observer) => {\n    follower = chainHead(\n      true,\n      (e) => {\n        observer.next(e)\n      },\n      (e) => {\n        follower = null\n        observer.error(e)\n      },\n    )\n    unfollow = () => {\n      observer.complete()\n      follower?.unfollow()\n    }\n  }).pipe(share())\n\n  return {\n    getFollower: () => {\n      if (!follower) throw new Error(\"Missing chainHead subscription\")\n      return follower\n    },\n    unfollow: () => {\n      unfollow()\n    },\n    follow$,\n  }\n}\n\nexport const retryOnStopError =\n  <T extends { type: string }>() =>\n  (source$: Observable<T>) =>\n    new Observable<\n      | T\n      | {\n          type: \"stop-error\"\n        }\n    >((observer) => {\n      const subscription = new Subscription()\n      const subscribe = () =>\n        source$.subscribe({\n          next: (v) => observer.next(v),\n          error: (e) => {\n            if (e instanceof StopError) {\n              observer.next({ type: \"stop-error\" })\n              subscription.add(subscribe())\n            } else {\n              observer.error(e)\n            }\n          },\n          complete: () => observer.complete(),\n        })\n      subscription.add(subscribe())\n      return subscription\n    })\n","import {\n  getChecksumBuilder,\n  getDynamicBuilder,\n  getLookupFn,\n} from \"@polkadot-api/metadata-builders\"\nimport {\n  AccountId,\n  Codec,\n  Decoder,\n  SS58String,\n  Option,\n  V15,\n  u32,\n  Encoder,\n  _void,\n  Bytes,\n  metadata as metadataCodec,\n  V14,\n  Vector,\n  Tuple,\n  compact,\n} from \"@polkadot-api/substrate-bindings\"\nimport { toHex } from \"@polkadot-api/utils\"\nimport {\n  Observable,\n  catchError,\n  map,\n  mergeMap,\n  of,\n  shareReplay,\n  switchMap,\n  take,\n} from \"rxjs\"\nimport { BlockNotPinnedError } from \"../errors\"\n\nexport type SystemEvent = {\n  phase:\n    | { type: \"ApplyExtrinsic\"; value: number }\n    | { type: \"Finalization\" }\n    | { type: \"Initialization\" }\n  event: {\n    type: string\n    value: {\n      type: string\n      value: any\n    }\n  }\n  topics: Array<any>\n}\n\nexport interface RuntimeContext {\n  metadataRaw: Uint8Array\n  metadata: V15 | V14\n  checksumBuilder: ReturnType<typeof getChecksumBuilder>\n  dynamicBuilder: ReturnType<typeof getDynamicBuilder>\n  events: {\n    key: string\n    dec: Decoder<Array<SystemEvent>>\n  }\n  accountId: Codec<SS58String>\n  asset: [Encoder<any>, string | null]\n}\n\nexport interface Runtime {\n  at: string\n  runtime: Observable<RuntimeContext>\n  addBlock: (block: string) => Runtime\n  deleteBlocks: (blocks: string[]) => number\n  usages: Set<string>\n}\n\nconst v15Args = toHex(u32.enc(15))\nconst opaqueMeta14 = Tuple(compact, Bytes())\nconst opaqueMeta15 = Option(Bytes())\nconst u32ListDecoder = Vector(u32).dec\n\nexport const getRuntimeCreator = (\n  call$: (hash: string, method: string, args: string) => Observable<string>,\n  finalized$: Observable<string>,\n) => {\n  const getMetadata$ = (\n    hash: string,\n  ): Observable<{ metadataRaw: Uint8Array; metadata: V14 | V15 }> => {\n    const recoverCall$ = (\n      hash: string,\n      method: string,\n      args: string,\n    ): Observable<string> =>\n      call$(hash, method, args).pipe(\n        catchError((e) => {\n          if (e instanceof BlockNotPinnedError) {\n            return finalized$.pipe(\n              take(1),\n              switchMap((newHash) => recoverCall$(newHash, method, args)),\n            )\n          }\n          throw e\n        }),\n      )\n\n    const versions = recoverCall$(hash, \"Metadata_metadata_versions\", \"\").pipe(\n      map(u32ListDecoder),\n    )\n\n    const v14 = recoverCall$(hash, \"Metadata_metadata\", \"\").pipe(\n      map((x) => {\n        const [, metadataRaw] = opaqueMeta14.dec(x)!\n        const metadata = metadataCodec.dec(metadataRaw)\n        return { metadata: metadata.metadata.value as V14, metadataRaw }\n      }),\n    )\n\n    const v15 = recoverCall$(\n      hash,\n      \"Metadata_metadata_at_version\",\n      v15Args,\n    ).pipe(\n      map((x) => {\n        const metadataRaw = opaqueMeta15.dec(x)!\n        const metadata = metadataCodec.dec(metadataRaw)\n        return { metadata: metadata.metadata.value as V15, metadataRaw }\n      }),\n    )\n\n    return versions.pipe(\n      catchError(() => of([14])),\n      mergeMap((v) => (v.includes(15) ? v15 : v14)),\n    )\n  }\n\n  return (hash: string): Runtime => {\n    const usages = new Set<string>([hash])\n\n    const runtimeContext$: Observable<RuntimeContext> = getMetadata$(hash).pipe(\n      map(({ metadata, metadataRaw }) => {\n        const checksumBuilder = getChecksumBuilder(metadata)\n        const dynamicBuilder = getDynamicBuilder(metadata)\n        const events = dynamicBuilder.buildStorage(\"System\", \"Events\")\n\n        const assetPayment = metadata.extrinsic.signedExtensions.find(\n          (x) => x.identifier === \"ChargeAssetTxPayment\",\n        )\n\n        let _assetId: null | number = null\n        if (assetPayment) {\n          const assetTxPayment = getLookupFn(metadata.lookup)(assetPayment.type)\n          if (assetTxPayment.type === \"struct\") {\n            const optionalAssetId = assetTxPayment.value.asset_id\n            if (optionalAssetId.type === \"option\")\n              _assetId = optionalAssetId.value.id\n          }\n        }\n\n        const asset: [Encoder<any>, string | null] =\n          _assetId === null\n            ? [_void.enc, null]\n            : [\n                dynamicBuilder.buildDefinition(_assetId).enc,\n                checksumBuilder.buildDefinition(_assetId),\n              ]\n\n        return {\n          asset,\n          metadataRaw,\n          metadata,\n          checksumBuilder,\n          dynamicBuilder,\n          events: {\n            key: events.enc(),\n            dec: events.dec as any,\n          },\n          accountId: AccountId(dynamicBuilder.ss58Prefix),\n        }\n      }),\n      shareReplay(1),\n    )\n\n    const result: Runtime = {\n      at: hash,\n      runtime: runtimeContext$,\n      addBlock: (block: string) => {\n        usages.add(block)\n        return result\n      },\n      deleteBlocks: (blocks) => {\n        blocks.forEach((block) => {\n          usages.delete(block)\n        })\n        return usages.size\n      },\n      usages,\n    }\n    runtimeContext$.subscribe()\n\n    return result\n  }\n}\n","import { shareLatest } from \"@/utils\"\nimport { BlockHeader } from \"@polkadot-api/substrate-bindings\"\nimport { FollowEventWithRuntime } from \"@polkadot-api/substrate-client\"\nimport {\n  Observable,\n  Subject,\n  concatMap,\n  filter,\n  map,\n  merge,\n  of,\n  scan,\n} from \"rxjs\"\nimport { withStopRecovery } from \"../enhancers\"\nimport { retryOnStopError } from \"./follow\"\nimport { Runtime, getRuntimeCreator } from \"./get-runtime-creator\"\n\nexport interface PinnedBlock {\n  hash: string\n  number: number\n  parent: string\n  children: Set<string>\n  runtime: string\n  refCount: number\n  unpinned?: true\n  recovering: boolean\n}\n\nexport interface BlockUsageEvent {\n  type: \"blockUsage\"\n  value: { type: \"hold\"; hash: string } | { type: \"release\"; hash: string }\n}\n\nexport type PinnedBlocks = {\n  best: string\n  finalized: string\n  runtimes: Record<string, Runtime>\n  blocks: Map<string, PinnedBlock>\n  finalizedRuntime: Runtime\n  recovering: boolean\n}\n\nconst deleteBlock = (blocks: PinnedBlocks[\"blocks\"], blockHash: string) => {\n  blocks.get(blocks.get(blockHash)!.parent)?.children.delete(blockHash)\n  blocks.delete(blockHash)\n}\n\nconst getBlocksToUnpin = (blocks: PinnedBlocks, pruned: string[]) => {\n  const result: string[] = [...pruned]\n  let current = blocks.blocks.get(blocks.blocks.get(blocks.finalized)!.parent)\n\n  const trail: string[] = []\n  while (current) {\n    trail.push(current.hash)\n    if (current.refCount === 0 && !current.unpinned) {\n      result.push(current.hash)\n      current.unpinned = true\n    }\n\n    current = blocks.blocks.get(current.parent)\n  }\n\n  const deletedBlocks = [...pruned]\n  for (let i = trail.length - 1; i >= 0; i--) {\n    current = blocks.blocks.get(trail[i])!\n    if (!current.unpinned) return result\n    deletedBlocks.push(current.hash)\n  }\n\n  deletedBlocks.forEach((hash) => {\n    deleteBlock(blocks.blocks, hash)\n  })\n\n  Object.entries(blocks.runtimes)\n    .map(([key, value]) => ({\n      key,\n      usages: value.deleteBlocks(deletedBlocks),\n    }))\n    .filter((x) => x.usages === 0)\n    .map((x) => x.key)\n    .forEach((unusedRuntime) => {\n      delete blocks.runtimes[unusedRuntime]\n    })\n  return result\n}\n\nexport const getPinnedBlocks$ = (\n  follow$: Observable<FollowEventWithRuntime>,\n  getHeader: (hash: string) => Promise<BlockHeader>,\n  call$: (hash: string, method: string, args: string) => Observable<string>,\n  blockUsage$: Subject<BlockUsageEvent>,\n  onUnpin: (blocks: string[]) => void,\n) => {\n  const pinnedBlocks$: Observable<PinnedBlocks> = merge(\n    blockUsage$,\n    follow$.pipe(withInitializedNumber(getHeader), retryOnStopError()),\n  ).pipe(\n    scan((acc, event) => {\n      switch (event.type) {\n        case \"initialized\":\n          if (acc.recovering) {\n            const isConnected = event.finalizedBlockHashes.some((hash) =>\n              acc.blocks.has(hash),\n            )\n            if (!isConnected) {\n              acc = getInitialPinnedBlocks()\n            }\n          }\n\n          const [finalizedHash] = event.finalizedBlockHashes.slice(-1)\n          acc.finalized = acc.best = finalizedHash\n\n          const lastIdx = event.finalizedBlockHashes.length - 1\n          event.finalizedBlockHashes.forEach((hash, i) => {\n            if (acc.blocks.has(hash)) {\n              acc.blocks.get(hash)!.recovering = false\n            } else {\n              acc.blocks.set(hash, {\n                hash: hash,\n                parent:\n                  i === 0\n                    ? event.parentHash\n                    : event.finalizedBlockHashes[i - 1],\n                children: new Set(\n                  i === lastIdx ? [] : [event.finalizedBlockHashes[i + 1]],\n                ),\n                runtime: hash,\n                refCount: 0,\n                number: event.number + i,\n                recovering: false,\n              })\n            }\n          })\n\n          const finalizedRuntime = Object.values(acc.runtimes).find((runtime) =>\n            runtime.usages.has(finalizedHash),\n          )\n\n          acc.finalizedRuntime =\n            finalizedRuntime ??\n            (acc.runtimes[finalizedHash] = getRuntime(finalizedHash))\n\n          return acc\n\n        case \"stop-error\":\n          for (const block of acc.blocks.values()) {\n            block.recovering = true\n          }\n          acc.recovering = true\n\n          return acc\n\n        case \"newBlock\": {\n          const { parentBlockHash: parent, blockHash: hash } = event\n          if (acc.blocks.has(hash)) {\n            acc.blocks.get(hash)!.recovering = false\n          } else {\n            const parentNode = acc.blocks.get(parent)!\n            parentNode.children.add(hash)\n            if (event.newRuntime) {\n              acc.runtimes[hash] = getRuntime(hash)\n              acc.runtimes[hash].runtime.subscribe()\n            }\n            const block = {\n              hash,\n              number: parentNode.number + 1,\n              parent: parent,\n              children: new Set<string>(),\n              runtime: event.newRuntime ? hash : parentNode.runtime,\n              refCount: 0,\n              recovering: false,\n            }\n            acc.blocks.set(hash, block)\n            acc.runtimes[block.runtime].addBlock(hash)\n          }\n\n          return acc\n        }\n\n        case \"bestBlockChanged\": {\n          if (acc.recovering) {\n            for (const [hash, block] of acc.blocks) {\n              if (block.recovering) {\n                deleteBlock(acc.blocks, hash)\n              }\n            }\n            acc.recovering = false\n          }\n          acc.best = event.bestBlockHash\n          return acc\n        }\n\n        case \"finalized\": {\n          acc.finalized = event.finalizedBlockHashes.slice(-1)[0]\n          acc.finalizedRuntime =\n            acc.runtimes[acc.blocks.get(acc.finalized)!.runtime]\n\n          // TODO: remove this once https://github.com/paritytech/polkadot-sdk/issues/3658 is fixed\n          const actuallyPruned = [...new Set(event.prunedBlockHashes)]\n          onUnpin(getBlocksToUnpin(acc, actuallyPruned))\n          return acc\n        }\n\n        case \"blockUsage\": {\n          if (!acc.blocks.has(event.value.hash)) return acc\n\n          const block = acc.blocks.get(event.value.hash)!\n          block.refCount += event.value.type === \"hold\" ? 1 : -1\n          if (\n            block.refCount === 0 &&\n            block.number < acc.blocks.get(acc.finalized)!.number &&\n            !block.recovering\n          ) {\n            block.unpinned = true\n            onUnpin([block.hash])\n          }\n          return acc\n        }\n      }\n    }, getInitialPinnedBlocks()),\n    filter((x) => !!x.finalizedRuntime.runtime),\n    map((x) => ({ ...x })),\n    shareLatest,\n  )\n\n  const getRuntime = getRuntimeCreator(\n    withStopRecovery(pinnedBlocks$, call$),\n    pinnedBlocks$.pipe(map((v) => v.finalized)),\n  )\n\n  return pinnedBlocks$\n}\n\nconst getInitialPinnedBlocks = (): PinnedBlocks => ({\n  best: \"\",\n  finalized: \"\",\n  runtimes: {},\n  blocks: new Map(),\n  finalizedRuntime: {} as Runtime,\n  recovering: false,\n})\n\nconst withInitializedNumber =\n  (getHeader: (hash: string) => Promise<BlockHeader>) =>\n  (source$: Observable<FollowEventWithRuntime>) =>\n    source$.pipe(\n      concatMap((event) => {\n        return event.type !== \"initialized\"\n          ? of(event)\n          : getHeader(event.finalizedBlockHashes[0]).then((header) => ({\n              ...event,\n              number: header.number,\n              parentHash: header.parentHash,\n            }))\n      }),\n    )\n","import { Observable, distinctUntilChanged, filter, map, takeWhile } from \"rxjs\"\nimport { PinnedBlocks } from \"./pinned-blocks\"\n\nexport const isBestOrFinalizedBlock = (\n  blocks$: Observable<PinnedBlocks>,\n  blockHash: string,\n) =>\n  blocks$.pipe(\n    takeWhile((b) => b.blocks.has(blockHash)),\n    distinctUntilChanged(\n      (a, b) => a.finalized === b.finalized && a.best === b.best,\n    ),\n    filter(\n      (x) => x.blocks.get(x.best)!.number >= x.blocks.get(blockHash)!.number,\n    ),\n    map((pinned): \"best\" | \"finalized\" | null => {\n      const { number } = pinned.blocks.get(blockHash)!\n      let current = pinned.blocks.get(pinned.best)!\n      let isFinalized = pinned.finalized === current.hash\n      while (current.number > number) {\n        current = pinned.blocks.get(current.parent)!\n        isFinalized = isFinalized || pinned.finalized === current.hash\n      }\n      if (isFinalized) return \"finalized\"\n      return current.hash === blockHash ? \"best\" : null\n    }),\n    distinctUntilChanged(),\n    takeWhile((x) => x !== \"finalized\", true),\n  )\n","import { Observable, ObservedValueOf, Subscription } from \"rxjs\"\nimport { BlockNotPinnedError } from \"../errors\"\nimport { PinnedBlocks } from \"../streams\"\n\nexport function withStopRecovery<A extends Array<any>, T>(\n  blocks$: Observable<PinnedBlocks>,\n  fn: (hash: string, ...args: A) => Observable<T>,\n) {\n  return (hash: string, ...args: A) => {\n    const source$ = fn(hash, ...args)\n\n    return new Observable<ObservedValueOf<typeof source$>>((observer) => {\n      let sourceSub: Subscription | null = null\n      let isSubscribed = false\n      const performSourceSub = () => {\n        if (isSubscribed) return\n        isSubscribed = true\n        sourceSub = source$.subscribe({\n          next: (v) => observer.next(v),\n          error: (e) => observer.error(e),\n          complete: () => observer.complete(),\n        })\n        sourceSub.add(() => {\n          isSubscribed = false\n          sourceSub = null\n        })\n      }\n\n      let isRecovering = false\n      const blockSub = blocks$.subscribe({\n        next: (v) => {\n          const block = v.blocks.get(hash)\n          if (!block) {\n            // This branch conflicts with BlockPrunedError, as the block might disappear when it gets pruned\n            // We can avoid this conflict by checking that we're actually recovering.\n            if (isRecovering) {\n              observer.error(new BlockNotPinnedError())\n            }\n          } else if (block.recovering) {\n            // Pause while it's recovering, as we don't know if the block is there\n            sourceSub?.unsubscribe()\n          } else {\n            performSourceSub()\n          }\n          isRecovering = v.recovering\n        },\n        error: (e) => observer.error(e),\n      })\n\n      return () => {\n        blockSub.unsubscribe()\n        sourceSub?.unsubscribe()\n      }\n    })\n  }\n}\n","import { OperationInaccessibleError } from \"@polkadot-api/substrate-client\"\nimport { Observable, catchError, concatMap, throwError, timer } from \"rxjs\"\n\nconst operable = <T>(source$: Observable<T>) => {\n  const result: Observable<T> = source$.pipe(\n    catchError((e) =>\n      e instanceof OperationInaccessibleError\n        ? timer(750).pipe(concatMap(() => result))\n        : throwError(() => e),\n    ),\n  )\n  return result\n}\n\nexport const withOperationInaccessibleRecovery =\n  <Args extends Array<any>, T>(fn: (...args: Args) => Observable<T>) =>\n  (...args: Args): Observable<T> =>\n    operable(fn(...args))\n","import {\n  FollowResponse,\n  StorageItemInput,\n  StorageItemResponse,\n} from \"@polkadot-api/substrate-client\"\nimport { Observable, mergeAll } from \"rxjs\"\nimport { getWithRecovery } from \"./enhancers\"\n\nexport const getRecoveralStorage$ = (\n  getFollower: () => FollowResponse,\n  withRecovery: ReturnType<typeof getWithRecovery>[\"withRecovery\"],\n) => {\n  const recoveralStorage$ = (\n    hash: string,\n    queries: Array<StorageItemInput>,\n    childTrie: string | null,\n    isHighPriority: boolean,\n  ): Observable<StorageItemResponse> =>\n    new Observable<StorageItemResponse[] | Observable<StorageItemResponse>>(\n      (observer) =>\n        getFollower().storageSubscription(\n          hash,\n          queries,\n          childTrie ?? null,\n          (items) => {\n            observer.next(items)\n          },\n          (error) => {\n            observer.error(error)\n          },\n          () => {\n            observer.complete()\n          },\n          (nDiscarded) => {\n            if (nDiscarded === 0) return\n\n            observer.next(\n              recoveralStorage$(\n                hash,\n                queries.slice(-nDiscarded),\n                childTrie,\n                true,\n              ),\n            )\n          },\n        ),\n    ).pipe(mergeAll(), withRecovery(isHighPriority))\n\n  return recoveralStorage$\n}\n","import {\n  Observable,\n  distinct,\n  filter,\n  map,\n  mergeMap,\n  of,\n  take,\n  takeUntil,\n} from \"rxjs\"\nimport { PinnedBlocks } from \"./streams\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\n\nexport type AnalyzedBlock = {\n  hash: HexString\n  found:\n    | {\n        type: true\n        index: number\n        events: any\n      }\n    | {\n        type: false\n        isValid: boolean\n      }\n}\n\nexport const getTrackTx = (\n  blocks$: Observable<PinnedBlocks>,\n  getBody: (block: string) => Observable<string[]>, // Returns an observable that should emit just once and complete\n  getIsValid: (block: string, tx: string) => Observable<boolean>, // Returns an observable that should emit just once and complete\n  getEvents: (block: string) => Observable<any>, // Returns an observable that should emit just once and complete\n) => {\n  const whileBlockPresent = <TT>(\n    hash: string,\n  ): (<T = TT>(base: Observable<T>) => Observable<T>) =>\n    takeUntil(blocks$.pipe(filter(({ blocks }) => !blocks.has(hash))))\n\n  const analyzeBlock = (\n    hash: string,\n    tx: string,\n    alreadyPresent: boolean,\n  ): Observable<AnalyzedBlock> => {\n    if (alreadyPresent)\n      return of({ hash, found: { type: false, isValid: true } })\n\n    const whilePresent = whileBlockPresent(hash)\n    return getBody(hash).pipe(\n      mergeMap((txs) => {\n        const index = txs.indexOf(tx)\n        return index > -1\n          ? whilePresent(getEvents(hash)).pipe(\n              map((events) => ({\n                hash,\n                found: {\n                  type: true as true,\n                  index,\n                  events,\n                },\n              })),\n            )\n          : getIsValid(hash, tx).pipe(\n              map((isValid) => ({\n                hash,\n                found: { type: false as false, isValid },\n              })),\n            )\n      }),\n      whilePresent,\n    )\n  }\n\n  const findInBranch = (\n    hash: string,\n    tx: string,\n    alreadyPresent: Set<string>,\n  ): Observable<AnalyzedBlock> =>\n    analyzeBlock(hash, tx, alreadyPresent.has(hash)).pipe(\n      mergeMap((analyzed) => {\n        const { found } = analyzed\n        return found.type || !found.isValid\n          ? of(analyzed)\n          : blocks$.pipe(\n              whileBlockPresent(hash),\n              mergeMap((x) => x.blocks.get(hash)!.children),\n              distinct(),\n              mergeMap((hash) => findInBranch(hash, tx, alreadyPresent)),\n            )\n      }),\n    )\n\n  return (tx: string): Observable<AnalyzedBlock> =>\n    blocks$.pipe(\n      take(1),\n      mergeMap((x) => findInBranch(x.finalized, tx, new Set(x.blocks.keys()))),\n    )\n}\n","import { Observable, map } from \"rxjs\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\n\nconst external = new Uint8Array([2])\n\nconst getValidateTxArgs = (tx: string, hash: string) =>\n  toHex(mergeUint8(external, fromHex(tx), fromHex(hash)))\n\nexport const getValidateTx =\n  (\n    call$: (\n      hash: string | null,\n      fnName: string,\n      parameters: string,\n    ) => Observable<string>,\n  ) =>\n  (blockHash: string, tx: string) =>\n    call$(\n      blockHash,\n      \"TaggedTransactionQueue_validate_transaction\",\n      getValidateTxArgs(tx, blockHash),\n    ).pipe(map((x) => x.startsWith(\"0x00\")))\n","import type { SubstrateClient } from \"@polkadot-api/substrate-client\"\nimport { Observable } from \"rxjs\"\n\nexport default (baseTransaction: SubstrateClient[\"transaction\"]) =>\n  (transaction: string) =>\n    new Observable<never>((observer) =>\n      baseTransaction(transaction, (e) => {\n        observer.error(e)\n      }),\n    )\n","import type { SubstrateClient } from \"@polkadot-api/substrate-client\"\nexport type * from \"./chainHead\"\n\nimport { getChainHead$ } from \"./chainHead\"\nimport getBroadcastTx$ from \"./tx\"\n\nexport const getObservableClient = ({\n  chainHead,\n  transaction,\n  destroy,\n}: SubstrateClient) => ({\n  chainHead$: () => getChainHead$(chainHead),\n  broadcastTx$: getBroadcastTx$(transaction),\n  destroy,\n})\n"],"mappings":"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","names":["Observable","Observable","Observable","ReplaySubject","Subject","defer","distinctUntilChanged","map","merge","mergeMap","of","scan","share","switchMap","take","Observable","Observable","Observable","Observable","filter","mergeMap","switchMap","take","Observable","Subscription","share","mergeMap","of","take","hash","take","of","mergeMap","map","of","map","of","filter","map","filter","mergeMap","take","switchMap","Observable","Observable","Observable","catchError","concatMap","throwError","Observable","filter","map","mergeMap","of","take","hash","map","toHex","Subject","Observable","take","withCanonicalChain","mergeMap","map","ReplaySubject","share","distinctUntilChanged","scan","switchMap","defer","merge","of","Observable"]}

Выполнить команду


Для локальной разработки. Не используйте в интернете!