@polkadot-api/ws-middleware 1.0.0-canary.22b2fd2

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/esm/index.mjs +13 -0
  4. package/dist/esm/index.mjs.map +1 -0
  5. package/dist/esm/legacy/downstream/archive.mjs +98 -0
  6. package/dist/esm/legacy/downstream/archive.mjs.map +1 -0
  7. package/dist/esm/legacy/downstream/chain-head.mjs +214 -0
  8. package/dist/esm/legacy/downstream/chain-head.mjs.map +1 -0
  9. package/dist/esm/legacy/downstream/chainspec.mjs +18 -0
  10. package/dist/esm/legacy/downstream/chainspec.mjs.map +1 -0
  11. package/dist/esm/legacy/downstream/downstream.mjs +107 -0
  12. package/dist/esm/legacy/downstream/downstream.mjs.map +1 -0
  13. package/dist/esm/legacy/downstream/storage.mjs +57 -0
  14. package/dist/esm/legacy/downstream/storage.mjs.map +1 -0
  15. package/dist/esm/legacy/downstream/transaction.mjs +48 -0
  16. package/dist/esm/legacy/downstream/transaction.mjs.map +1 -0
  17. package/dist/esm/legacy/upstream/blocks/blocks.mjs +309 -0
  18. package/dist/esm/legacy/upstream/blocks/blocks.mjs.map +1 -0
  19. package/dist/esm/legacy/upstream/blocks/index.mjs +7 -0
  20. package/dist/esm/legacy/upstream/blocks/index.mjs.map +1 -0
  21. package/dist/esm/legacy/upstream/blocks/upstream-events.mjs +92 -0
  22. package/dist/esm/legacy/upstream/blocks/upstream-events.mjs.map +1 -0
  23. package/dist/esm/legacy/upstream/proofs.mjs +41 -0
  24. package/dist/esm/legacy/upstream/proofs.mjs.map +1 -0
  25. package/dist/esm/legacy/upstream/upstream.mjs +108 -0
  26. package/dist/esm/legacy/upstream/upstream.mjs.map +1 -0
  27. package/dist/esm/legacy/utils/create-opaque-token.mjs +7 -0
  28. package/dist/esm/legacy/utils/create-opaque-token.mjs.map +1 -0
  29. package/dist/esm/legacy/utils/fromShittyHeader.mjs +31 -0
  30. package/dist/esm/legacy/utils/fromShittyHeader.mjs.map +1 -0
  31. package/dist/esm/legacy/utils/get-hasher-from-block.mjs +12 -0
  32. package/dist/esm/legacy/utils/get-hasher-from-block.mjs.map +1 -0
  33. package/dist/esm/legacy/utils/message-from-error.mjs +8 -0
  34. package/dist/esm/legacy/utils/message-from-error.mjs.map +1 -0
  35. package/dist/esm/legacy/utils/share-latest.mjs +9 -0
  36. package/dist/esm/legacy/utils/share-latest.mjs.map +1 -0
  37. package/dist/esm/legacy/utils/with-latest-from-bp.mjs +40 -0
  38. package/dist/esm/legacy/utils/with-latest-from-bp.mjs.map +1 -0
  39. package/dist/esm/methods-router.mjs +41 -0
  40. package/dist/esm/methods-router.mjs.map +1 -0
  41. package/dist/esm/methods.mjs +40 -0
  42. package/dist/esm/methods.mjs.map +1 -0
  43. package/dist/esm/middleware.mjs +22 -0
  44. package/dist/esm/middleware.mjs.map +1 -0
  45. package/dist/esm/modern/fix-follow.mjs +79 -0
  46. package/dist/esm/modern/fix-follow.mjs.map +1 -0
  47. package/dist/esm/modern/fix-missing-initial-best.mjs +66 -0
  48. package/dist/esm/modern/fix-missing-initial-best.mjs.map +1 -0
  49. package/dist/esm/modern/fix-premature-blocks.mjs +94 -0
  50. package/dist/esm/modern/fix-premature-blocks.mjs.map +1 -0
  51. package/dist/esm/modern/fix-unordered-blocks.mjs +100 -0
  52. package/dist/esm/modern/fix-unordered-blocks.mjs.map +1 -0
  53. package/dist/esm/modern/fix-unordered-events.mjs +101 -0
  54. package/dist/esm/modern/fix-unordered-events.mjs.map +1 -0
  55. package/dist/esm/modern/modern.mjs +21 -0
  56. package/dist/esm/modern/modern.mjs.map +1 -0
  57. package/dist/esm/modern/patch-chainhead-events.mjs +16 -0
  58. package/dist/esm/modern/patch-chainhead-events.mjs.map +1 -0
  59. package/dist/esm/modern/unpin-hash.mjs +22 -0
  60. package/dist/esm/modern/unpin-hash.mjs.map +1 -0
  61. package/dist/esm/numeric-ids.mjs +37 -0
  62. package/dist/esm/numeric-ids.mjs.map +1 -0
  63. package/dist/esm/utils/get-async-middleware.mjs +60 -0
  64. package/dist/esm/utils/get-async-middleware.mjs.map +1 -0
  65. package/dist/esm/utils/utils.mjs +22 -0
  66. package/dist/esm/utils/utils.mjs.map +1 -0
  67. package/dist/index.d.ts +29 -0
  68. package/dist/index.js +1782 -0
  69. package/dist/index.js.map +1 -0
  70. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/legacy/utils/share-latest.ts","../src/legacy/upstream/blocks/blocks.ts","../src/legacy/utils/fromShittyHeader.ts","../src/legacy/utils/get-hasher-from-block.ts","../src/legacy/utils/with-latest-from-bp.ts","../src/legacy/upstream/blocks/upstream-events.ts","../src/legacy/upstream/blocks/index.ts","../src/legacy/upstream/proofs.ts","../src/legacy/upstream/upstream.ts","../src/legacy/downstream/chainspec.ts","../src/legacy/utils/create-opaque-token.ts","../src/legacy/downstream/storage.ts","../src/legacy/utils/message-from-error.ts","../src/methods.ts","../src/legacy/downstream/chain-head.ts","../src/legacy/downstream/transaction.ts","../src/legacy/downstream/archive.ts","../src/legacy/downstream/downstream.ts","../src/utils/utils.ts","../src/utils/get-async-middleware.ts","../src/methods-router.ts","../src/modern/fix-follow.ts","../src/modern/fix-premature-blocks.ts","../src/modern/fix-unordered-blocks.ts","../src/modern/fix-unordered-events.ts","../src/modern/patch-chainhead-events.ts","../src/modern/unpin-hash.ts","../src/modern/fix-missing-initial-best.ts","../src/modern/modern.ts","../src/numeric-ids.ts","../src/middleware.ts"],"sourcesContent":["import { Observable, shareReplay } from \"rxjs\"\n\nexport const shareLatest: <T>(base: Observable<T>) => Observable<T> =\n shareReplay({\n refCount: true,\n bufferSize: 1,\n })\n","import {\n concat,\n concatMap,\n debounceTime,\n defer,\n filter,\n map,\n merge,\n mergeMap,\n Observable,\n of,\n share,\n Subject,\n take,\n takeWhile,\n tap,\n} from \"rxjs\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport type {\n BestBlockChangedEvent,\n DecentHeader,\n InitializedEvent,\n NewBlockEvent,\n} from \"../../types\"\nimport { UpstreamEvents } from \"./upstream-events\"\nimport { shareLatest } from \"../../utils/share-latest\"\n\nexport const getBlocks = ({\n allHeads$,\n finalized$: finalizedWire$,\n getHeader$,\n hasher$,\n getRecursiveHeader,\n}: UpstreamEvents) => {\n const connectedBlocks = {\n blocks: new Map<\n string,\n DecentHeader & {\n children: Set<string>\n usages: Set<string>\n }\n >(),\n prevFin: \"\",\n finalized: \"\",\n best: \"\",\n }\n\n const getTree = (root: string, result: string[] = []): string[] => {\n result.push(root)\n connectedBlocks.blocks.get(root)!.children.forEach((c) => {\n getTree(c, result)\n })\n return result\n }\n\n const addBlock = (block: DecentHeader) => {\n const { blocks } = connectedBlocks\n const { hash, parent } = block\n const me = {\n ...block,\n children: new Set<string>(),\n usages: new Set<string>(),\n }\n blocks.set(hash, me)\n blocks.get(parent)?.children.add(hash)\n return me\n }\n\n const setBestFromFinalized = () => {\n connectedBlocks.best = connectedBlocks.finalized\n let bestHeight = 0\n const { finalized, blocks } = connectedBlocks\n getTree(finalized)\n .map((x) => blocks.get(x)!)\n .forEach((x) => {\n if (x.number > bestHeight) {\n bestHeight = x.number\n connectedBlocks.best = x.hash\n }\n })\n }\n\n const pendingBlocks = new Map<\n string,\n {\n hash: string\n header: DecentHeader | null\n children: Set<string>\n }\n >()\n\n const trimPending = (root: string) => {\n const desc = [...pendingBlocks.get(root)!.children]\n pendingBlocks.delete(root)\n desc.forEach(trimPending)\n }\n\n const getPendingTree = (\n root: string,\n result: Array<DecentHeader> = [],\n ): Array<DecentHeader> => {\n const me = pendingBlocks.get(root)!\n if (!me.header) return result\n result.push(me.header)\n me!.children.forEach((c) => {\n getPendingTree(c, result)\n })\n return result\n }\n\n const _newBlocks$ = new Subject<string>()\n const onError = (e: any) => _newBlocks$.error(e)\n\n const _finalized$ = finalizedWire$.pipe(\n concatMap((header, idx) => {\n const { hash } = header\n if (!idx) {\n addBlock(header)\n connectedBlocks.finalized = connectedBlocks.best = header.hash\n }\n return connectedBlocks.blocks.has(hash)\n ? of(hash)\n : _newBlocks$.pipe(\n filter((x) => x === hash),\n // some of the following blocks could be prunned b/c of this finalized event.\n // So, we have to make sure that this \"batch\" of _newBlocks has been flushed.\n debounceTime(0),\n take(1),\n )\n }),\n share(),\n )\n\n allHeads$.subscribe((header) => {\n const { parent, hash, number } = header\n if (connectedBlocks.blocks.has(hash) || !number) return\n\n if (connectedBlocks.blocks.has(parent)) {\n addBlock(header)\n _newBlocks$.next(hash)\n } else {\n pendingBlocks.set(hash, {\n hash: header.hash,\n header,\n children: new Set<string>(),\n })\n\n if (!pendingBlocks.has(parent)) {\n pendingBlocks.set(parent, {\n hash: parent,\n header: null,\n children: new Set(),\n })\n\n getRecursiveHeader(parent)\n .pipe(\n takeWhile((result) => {\n let me = pendingBlocks.get(result.hash)\n if (!me) return false // it was trimmed before b/c it was a prunned branch\n me.header = result\n\n const finalized = connectedBlocks.blocks.get(\n connectedBlocks.finalized,\n )\n\n // let's check if we have to prune this\n if (finalized && result.number <= finalized.number) {\n while (pendingBlocks.has(me.header?.parent ?? \"\"))\n me = pendingBlocks.get(me.header!.parent)!\n trimPending(me.hash)\n return false\n }\n\n if (connectedBlocks.blocks.has(result.parent)) {\n let target = connectedBlocks.blocks.get(result.parent)!\n const diff = target.number - finalized!.number\n for (let i = 0; i < diff; i++) {\n const nextTarget = connectedBlocks.blocks.get(target.parent)\n if (!nextTarget) break\n target = nextTarget\n }\n\n // it descends from the finalized block, all good...\n if (target === finalized) {\n const pendingOnes = getPendingTree(result.hash)\n pendingOnes.forEach((h) => {\n pendingBlocks.delete(h.hash)\n addBlock(h)\n _newBlocks$.next(h.hash)\n })\n } else trimPending(result.hash) // it was a pruned branch\n\n return false\n }\n\n const pendingParent = pendingBlocks.get(result.parent)\n // another subscription is loading it already\n if (pendingParent) {\n pendingParent.children.add(result.hash)\n return false\n }\n\n pendingBlocks.set(result.parent, {\n hash: result.parent,\n header: null,\n children: new Set([result.hash]),\n })\n return true\n }),\n )\n .subscribe({ error: onError })\n }\n pendingBlocks.get(parent)!.children.add(hash)\n }\n }, onError)\n\n const getFinalizedEvent = (): {\n event: \"finalized\"\n prunedBlockHashes: string[]\n finalizedBlockHashes: string[]\n } => {\n const prunedBlockHashes: string[] = []\n const finalizedBlockHashes: string[] = []\n const { blocks, finalized, prevFin } = connectedBlocks\n\n let current = blocks.get(finalized)!\n let prev = blocks.get(current.parent)\n while (prev) {\n finalizedBlockHashes.push(current.hash)\n prev.children.forEach((c) => {\n if (c !== current.hash) getTree(c, prunedBlockHashes)\n })\n current = prev\n if (current.hash === prevFin) break\n prev = blocks.get(current.parent)\n }\n finalizedBlockHashes.reverse()\n\n return { event: \"finalized\", prunedBlockHashes, finalizedBlockHashes }\n }\n\n let activeSubscriptions = new Set<string>()\n const getNewBlockEvent = (blockHash: string) => {\n const block = connectedBlocks.blocks.get(blockHash)!\n activeSubscriptions.forEach((subId) => {\n block.usages.add(subId)\n })\n return {\n event: \"newBlock\" as const,\n blockHash,\n parentBlockHash: block.parent,\n newRuntime: block.hasUpgrade\n ? ({} as {\n specName: string\n implName: string\n specVersion: number\n implVersion: number\n transactionVersion: number\n apis: Record<string, number>\n })\n : null,\n }\n }\n\n const tryRemove = (blockHash: string, up?: boolean) => {\n const { blocks } = connectedBlocks\n const block = blocks.get(blockHash)\n if (!block || block.usages.size > 0) return\n\n const { parent, children } = block\n if (up !== true) children.forEach((c) => tryRemove(c, false))\n if (up !== false) tryRemove(parent, true)\n if (!blocks.has(parent) || !block.children.size) {\n blocks.get(parent)?.children.delete(blockHash)\n blocks.delete(blockHash)\n }\n }\n\n const updates$ = merge(\n _newBlocks$.pipe(\n map((hash) => ({\n type: \"new\" as const,\n value: connectedBlocks.blocks.get(hash)!,\n })),\n ),\n _finalized$.pipe(map((hash) => ({ type: \"fin\" as const, value: hash }))),\n ).pipe(\n mergeMap((x) => {\n if (x.type === \"new\") {\n const block = x.value\n const { hash } = block\n addBlock(block)\n const result: Array<\n | ReturnType<typeof getNewBlockEvent>\n | { event: \"bestBlockChanged\"; bestBlockHash: string }\n > = [getNewBlockEvent(hash)]\n if (\n block.number >\n connectedBlocks.blocks.get(connectedBlocks.best)!.number\n ) {\n connectedBlocks.best = hash\n result.push({ event: \"bestBlockChanged\", bestBlockHash: hash })\n }\n return result\n }\n\n connectedBlocks.prevFin = connectedBlocks.finalized\n connectedBlocks.finalized = x.value\n let prevBest = connectedBlocks.best\n setBestFromFinalized()\n const result: Array<\n | ReturnType<typeof getFinalizedEvent>\n | { event: \"bestBlockChanged\"; bestBlockHash: string }\n > = [getFinalizedEvent()]\n\n if (prevBest !== connectedBlocks.best)\n result.unshift({\n event: \"bestBlockChanged\",\n bestBlockHash: connectedBlocks.best,\n })\n return result\n }),\n share(),\n )\n\n const ready$ = defer(() =>\n connectedBlocks.blocks.size\n ? [null]\n : _finalized$.pipe(\n take(1),\n map(() => null),\n ),\n ).pipe(shareLatest)\n\n const finalized$ = _finalized$.pipe(\n map((hash) => connectedBlocks.blocks.get(hash)! as DecentHeader),\n shareLatest,\n )\n\n merge(updates$, finalized$).subscribe({\n error: onError,\n })\n\n const upstream = (subId: string) => {\n const getInitialized = () => {\n const { blocks, finalized } = connectedBlocks\n const finalizedBlockHashes: string[] = []\n let current = blocks.get(finalized)\n while (current && finalizedBlockHashes.length < 10) {\n finalizedBlockHashes.push(current.hash)\n current.usages.add(subId)\n current = blocks.get(current.parent)\n }\n finalizedBlockHashes.reverse()\n\n return {\n event: \"initialized\" as const,\n finalizedBlockHashes,\n }\n }\n\n const unpin = (blockHash: string) => {\n const block = connectedBlocks.blocks.get(blockHash)\n if (block) {\n block.usages.delete(subId)\n tryRemove(blockHash)\n }\n }\n\n const initialEvents$: Observable<\n InitializedEvent | NewBlockEvent | BestBlockChangedEvent\n > = ready$.pipe(\n mergeMap(() => {\n const { best, finalized } = connectedBlocks\n const others: Array<NewBlockEvent | BestBlockChangedEvent> = getTree(\n finalized,\n )\n .slice(1)\n .map(getNewBlockEvent)\n others.push({\n event: \"bestBlockChanged\" as const,\n bestBlockHash: best,\n })\n return [getInitialized(), ...others]\n }),\n )\n\n return {\n blocks$: concat(initialEvents$, updates$).pipe(\n tap({\n subscribe: () => {\n activeSubscriptions.add(subId)\n },\n finalize: () => {\n activeSubscriptions.delete(subId)\n },\n }),\n share(),\n ),\n getHeader: (blockHash: string) =>\n connectedBlocks.blocks.get(blockHash)?.header ?? null,\n isPinned: (blockHash: string) =>\n !!connectedBlocks.blocks.get(blockHash)?.usages.has(subId),\n unpin,\n }\n }\n\n const clean = () => {\n pendingBlocks.clear()\n connectedBlocks.blocks.clear()\n }\n\n return {\n clean,\n upstream,\n finalized$,\n getHeader$: (hash: HexString): Observable<DecentHeader> => {\n const block = connectedBlocks.blocks.get(hash)\n return block ? of(block) : getHeader$(hash)\n },\n hasher$,\n }\n}\n","import { compact } from \"@polkadot-api/substrate-bindings\"\nimport { fromHex, mergeUint8, toHex } from \"@polkadot-api/utils\"\nimport { ShittyHeader } from \"../types\"\n\nexport const getFromShittyHeader =\n (hasher: (input: Uint8Array) => Uint8Array) =>\n ({\n parentHash,\n number: rawNumber,\n stateRoot,\n extrinsicsRoot,\n digest,\n }: ShittyHeader) => {\n const number = Number(rawNumber)\n const rawDigests = digest.logs.map(fromHex)\n\n const rawHeader = mergeUint8([\n fromHex(parentHash),\n compact.enc(number),\n fromHex(stateRoot),\n fromHex(extrinsicsRoot),\n compact.enc(digest.logs.length),\n ...rawDigests,\n ])\n\n return {\n parent: parentHash,\n hash: toHex(hasher(rawHeader)),\n number,\n hasUpgrade: rawDigests.some(([x]) => x === 8),\n header: toHex(rawHeader),\n }\n }\n","import { Blake2256, Keccak256 } from \"@polkadot-api/substrate-bindings\"\nimport { getFromShittyHeader } from \"./fromShittyHeader\"\nimport { ShittyHeader } from \"../types\"\n\nconst hashers = [Blake2256, Keccak256]\nconst fns = hashers.map(getFromShittyHeader)\nconst noHasher = (_: Uint8Array): Uint8Array => {\n throw new Error(\"Hasher not supported\")\n}\n\nexport const getHasherFromBlock =\n (shitHeader: ShittyHeader) =>\n (hash: string): ((data: Uint8Array) => Uint8Array) =>\n hashers[fns.findIndex((fn) => fn(shitHeader).hash === hash)] || noHasher\n","import { Observable } from \"rxjs\"\n\nexport const withLatestFromBp =\n <T, S>(latest$: Observable<T>) =>\n (base$: Observable<S>) =>\n new Observable<[T, S]>((observer) => {\n let latest: T\n let prev: S[] | null = []\n\n const subscription = base$.subscribe({\n next(v) {\n if (prev) prev.push(v)\n else observer.next([latest, v])\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n observer.complete()\n },\n })\n\n subscription.add(\n latest$.subscribe({\n next(v) {\n latest = v\n if (prev) {\n const copy = [...prev]\n prev = null\n copy.forEach((p) => observer.next([latest, p]))\n }\n },\n error(e) {\n observer.error(e)\n },\n complete() {\n if (prev) observer.error(new Error(\"Empty complete\"))\n },\n }),\n )\n\n return subscription\n })\n","import { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { concat, map, mergeMap, Observable, of, pipe, Subject } from \"rxjs\"\nimport { DecentHeader, ShittyHeader } from \"../../types\"\nimport { getFromShittyHeader } from \"../../utils/fromShittyHeader\"\nimport { getHasherFromBlock } from \"../../utils/get-hasher-from-block\"\nimport { shareLatest } from \"../../utils/share-latest\"\nimport { withLatestFromBp } from \"../../utils/with-latest-from-bp\"\n\nconst INITIAL_ERROR = {}\n\nexport const getUpstreamEvents = (\n request: ClientRequest<any, any>,\n request$: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n) => {\n const firstFinHeader$ = new Subject<ShittyHeader>()\n const hasher$ = firstFinHeader$.pipe(\n mergeMap((h) =>\n request$<[number | string], HexString>(\"chain_getBlockHash\", [\n h.number,\n ]).pipe(map(getHasherFromBlock(h))),\n ),\n shareLatest,\n )\n const fromShittyHeader$ = hasher$.pipe(map(getFromShittyHeader), shareLatest)\n const toNiceHeader = pipe(\n withLatestFromBp<\n (x: ShittyHeader) => ReturnType<ReturnType<typeof getFromShittyHeader>>,\n ShittyHeader\n >(fromShittyHeader$),\n map(([fromShittyHeader, shitHeader]) => fromShittyHeader(shitHeader)),\n )\n\n const getHeaders$ = (\n startMethod: string,\n stopMethod: string,\n isFin = false,\n ): Observable<DecentHeader> =>\n new Observable<ShittyHeader>((observer) => {\n const onError = (e: any) => {\n observer.error(e)\n }\n\n let stop: (() => void) | null = null\n let isFirstFin = isFin\n ;(request as ClientRequest<string, ShittyHeader>)(startMethod, [], {\n onSuccess: (subId, followSub) => {\n const done = followSub(subId, {\n next: (v) => {\n if (isFirstFin) {\n isFirstFin = false\n firstFinHeader$.next(v)\n firstFinHeader$.complete()\n }\n observer.next(v)\n },\n error: onError,\n })\n const unsubscribe = () => {\n done()\n try {\n request(stopMethod, [subId], {\n onError: noop,\n onSuccess: noop,\n })\n } catch {}\n }\n if (stop !== null) unsubscribe()\n else stop = unsubscribe\n },\n onError() {\n onError(INITIAL_ERROR)\n },\n })\n\n return () => {\n stop?.()\n stop = noop\n }\n }).pipe(toNiceHeader)\n\n const allHeads$ = getHeaders$(\n \"chain_subscribeAllHeads\",\n \"chain_unsubscribeAllHeads\",\n )\n\n const finalized$ = getHeaders$(\n \"chain_subscribeFinalizedHeads\",\n \"chain_unsubscribeFinalizedHeads\",\n true,\n )\n\n const getHeader$ = (hash: string) =>\n request$<[string], ShittyHeader>(\"chain_getHeader\", [hash]).pipe(\n toNiceHeader,\n )\n\n const getRecursiveHeader = (hash: string): Observable<DecentHeader> =>\n getHeader$(hash).pipe(\n mergeMap((header) =>\n concat(of(header), getRecursiveHeader(header.parent)),\n ),\n )\n\n return {\n allHeads$,\n finalized$,\n hasher$,\n getRecursiveHeader,\n getHeader$,\n }\n}\n\nexport type UpstreamEvents = ReturnType<typeof getUpstreamEvents>\n","import type { Observable } from \"rxjs\"\nimport type { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { getBlocks } from \"./blocks\"\nimport { getUpstreamEvents } from \"./upstream-events\"\n\nexport const getBlocks$ = (\n request: ClientRequest<any, any>,\n request$: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n) => getBlocks(getUpstreamEvents(request, request$))\n","import {\n HexString,\n ProofTrieNode,\n TrieNode,\n validateProofs,\n} from \"@polkadot-api/substrate-bindings\"\nimport { mergeMap, Observable } from \"rxjs\"\n\nexport const createClosestDescendantMerkleValue =\n (\n obsRequest: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n ) =>\n (at: HexString, key: HexString) =>\n obsRequest<\n [keys: Array<HexString>, at: HexString],\n {\n at: HexString\n proof: HexString[]\n }\n >(\"state_getReadProof\", [[key], at]).pipe(\n mergeMap((x) => {\n const result = validateProofs(x.proof)\n if (!result) throw new Error(\"Invalid Proof\")\n const { rootHash, proofs } = result\n let winnerHash: HexString | undefined = rootHash\n let current: {\n hash: HexString\n parent?: HexString\n } & TrieNode = proofs[winnerHash!] as any\n\n let nKeyChars = 2 // skipping `0x`\n do {\n const nextOne: ProofTrieNode = proofs[winnerHash!]\n if (!nextOne || nextOne.type === \"Raw\") break\n\n current = nextOne\n winnerHash = undefined\n if (\n !current.partialKey.startsWith(\n key.slice(nKeyChars, nKeyChars + current.partialKey.length),\n )\n )\n // This causes the observable to complete, which in its turn triggers an [`operationStorageDone`](https://paritytech.github.io/json-rpc-interface-spec/api/chainHead_v1_follow.html#operationstoragedone)\n // event, without triggering the intermediary `OperationStorageItems` event. This is the expected behaviour when querying a non-existing storage entry.\n return []\n nKeyChars += current.partialKey.length\n if (\n (current.type === \"LeafWithHash\" ||\n current.type === \"BranchWithHash\") &&\n proofs[current.value]\n ) {\n winnerHash = current.value\n continue\n }\n\n if (\"children\" in current) {\n const winner: [string, string] | undefined = Object.entries(\n current.children,\n ).find(([, hash]) => proofs[hash])\n\n if (winner) {\n // Same as before: in this case we know that it won't match with the requested key, so we complete without an emission.\n if (winner[0] !== key[nKeyChars++]) return []\n winnerHash = winner[1]\n }\n }\n } while (winnerHash)\n\n return [current!.hash]\n }),\n )\n","import { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\nimport { catchError, EMPTY, map, merge, mergeMap, Observable, of } from \"rxjs\"\nimport { getBlocks$ } from \"./blocks\"\nimport { withLatestFromBp } from \"../utils/with-latest-from-bp\"\nimport { createClosestDescendantMerkleValue } from \"./proofs\"\n\nexport const createUpstream = (request: ClientRequest<any, any>) => {\n const simpleRequest = <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n onSuccess: (value: Payload) => void,\n onError: (e: any) => void,\n ): (() => void) => request(method, params, { onSuccess, onError })\n\n const obsRequest = <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ): Observable<Payload> =>\n new Observable((observer) =>\n simpleRequest<Args, Payload>(\n method,\n params,\n (v) => {\n observer.next(v)\n observer.complete()\n },\n (e) => {\n observer.error(e)\n },\n ),\n )\n\n const {\n upstream: getBlocks,\n finalized$,\n getHeader$,\n hasher$,\n clean,\n } = getBlocks$(request, obsRequest)\n\n const runtimeCall = (atBlock: string, method: string, data: string) =>\n obsRequest<[string, string, string], string | null>(\"state_call\", [\n method,\n data,\n atBlock,\n ])\n\n const stgDescendantValues = (\n at: string,\n rootKey: string,\n ): Observable<Array<[string, string]>> => {\n const PAGE_SIZE = 1000\n const getKeys = (startAtKey?: string): Observable<string[]> => {\n return obsRequest<[string, number, string | undefined, string], string[]>(\n \"state_getKeysPaged\",\n [rootKey, PAGE_SIZE, startAtKey || undefined, at],\n ).pipe(\n mergeMap((receivedKeys) => {\n const keys =\n receivedKeys[0] === startAtKey\n ? receivedKeys.slice(1)\n : receivedKeys\n\n const continuation =\n receivedKeys.length < PAGE_SIZE\n ? EMPTY\n : getKeys(receivedKeys.at(-1))\n\n return merge(of(keys), continuation)\n }),\n )\n }\n\n const getValues = (\n keys: string[],\n nSplits = 0,\n ): Observable<Array<[string, string]>> =>\n keys.length\n ? obsRequest<\n [string[], string],\n [{ block: string; changes: Array<[string, string]> }]\n >(\"state_queryStorageAt\", [keys, at]).pipe(\n map(([{ changes }]) => changes),\n catchError((e: any) => {\n if (nSplits > 3) throw e\n\n const midIdx = Math.floor(keys.length / 2)\n return merge(\n getValues(keys.slice(0, midIdx), ++nSplits),\n getValues(keys.slice(midIdx), nSplits),\n )\n }),\n )\n : EMPTY\n\n return getKeys().pipe(mergeMap((keys) => getValues(keys)))\n }\n\n const stgDescendantHashes = (at: string, rootKey: string) =>\n stgDescendantValues(at, rootKey).pipe(\n withLatestFromBp(hasher$),\n map(([hasher, results]) =>\n results.map(\n ([key, value]) =>\n [key, toHex(hasher(fromHex(value)))] as [string, string],\n ),\n ),\n )\n\n const stgClosestDescendant = createClosestDescendantMerkleValue(obsRequest)\n\n const [stgValue, stgHash] = [\"state_getStorage\", \"state_getStorageHash\"].map(\n (method) => (atBlock: string, key: string) =>\n obsRequest<[string, string | undefined], string | null>(method, [\n key,\n atBlock,\n ]),\n )\n\n const methods = obsRequest<[], { methods: string[] }>(\"rpc_methods\", [])\n const chainName = obsRequest<[], string>(\"system_name\", [])\n const properties = obsRequest<[], {}>(\"system_properties\", [])\n const getBody = (at: string) =>\n obsRequest<[string], { block: { extrinsics: Array<string> } }>(\n \"chain_getBlock\",\n [at],\n )\n\n const getBlockHash$ = (height: number) =>\n obsRequest<[height: number], string>(\"chain_getBlockHash\", [height])\n const genesisHash = getBlockHash$(0)\n\n return {\n getBlocks,\n finalized$,\n getBlockHash$,\n getHeader$,\n stgValue,\n stgHash,\n stgDescendantValues,\n stgDescendantHashes,\n stgClosestDescendant,\n runtimeCall,\n getBody,\n chainName,\n properties,\n genesisHash,\n clean,\n methods,\n request: simpleRequest,\n obsRequest,\n }\n}\n","import { createUpstream } from \"../upstream/upstream\"\n\nexport const createChainSpec = (\n upstream: ReturnType<typeof createUpstream>,\n reply: (id: string, result: any) => void,\n err: (id: string, code: number, msg: string) => void,\n) => {\n return (rId: string, method: string) => {\n const [, , name] = method.split(\"_\")\n const observable =\n upstream[name as \"chainName\" | \"genesisHash\" | \"properties\"]\n if (!observable) throw null\n\n observable.subscribe(\n (result) => {\n reply(rId, result)\n },\n () => {\n err(rId, -32602, \"Invalid\")\n },\n )\n }\n}\n","let latestId = 1\nexport const createOpaqueToken = (): string => {\n // TODO: make this fancier\n return `${latestId++}${Date.now()}`\n}\n","import { filter, map, merge } from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\n\nconst validStorageTypes = new Set([\n \"value\",\n \"hash\",\n \"closestDescendantMerkleValue\",\n \"descendantsValues\",\n \"descendantsHashes\",\n])\n\nexport type Items = Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"closestDescendantMerkleValue\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n}>\n\nexport const areItemsValid = (items: any): items is Items =>\n Array.isArray(items) &&\n items.every(\n (x) =>\n typeof x === \"object\" &&\n typeof x.key === \"string\" &&\n validStorageTypes.has(x.type),\n )\n\nexport const getStg$ = (\n upstream: ReturnType<typeof createUpstream>,\n at: string,\n items: Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n | \"closestDescendantMerkleValue\"\n }>,\n) =>\n merge(\n ...items.map(({ key, type }) => {\n switch (type) {\n case \"value\":\n return upstream.stgValue(at, key).pipe(\n filter(Boolean),\n map((value) => [\n {\n key,\n value,\n },\n ]),\n )\n case \"hash\":\n return upstream.stgHash(at, key).pipe(\n filter(Boolean),\n map((hash) => [\n {\n key,\n hash,\n },\n ]),\n )\n case \"descendantsValues\":\n return upstream\n .stgDescendantValues(at, key)\n .pipe(\n map((values) => values.map(([key, value]) => ({ key, value }))),\n )\n\n case \"descendantsHashes\":\n return upstream\n .stgDescendantHashes(at, key)\n .pipe(map((values) => values.map(([key, hash]) => ({ key, hash }))))\n\n case \"closestDescendantMerkleValue\":\n return upstream.stgClosestDescendant(at, key).pipe(\n filter(Boolean),\n map((closestDescendantMerkleValue) => [\n {\n key,\n closestDescendantMerkleValue,\n },\n ]),\n )\n }\n }),\n )\n","export const getMsgFromErr = (e: any) => {\n if (e instanceof Error) return e.message\n if (typeof e === \"string\") return e\n return \"Unhandled exception\"\n}\n","const chainHead = {\n body: \"\",\n call: \"\",\n continue: \"\",\n follow: \"\",\n header: \"\",\n stopOperation: \"\",\n storage: \"\",\n unfollow: \"\",\n unpin: \"\",\n}\n\nconst archive = {\n body: \"\",\n call: \"\",\n finalizedHeight: \"\",\n genesisHash: \"\",\n hashByHeight: \"\",\n header: \"\",\n stopStorage: \"\",\n storage: \"\",\n}\n\nconst transaction = {\n broadcast: \"\",\n stop: \"\",\n}\n\nconst chainSpec = {\n chainName: \"\",\n genesisHash: \"\",\n properties: \"\",\n}\n\nObject.entries({ chainHead, chainSpec, transaction, archive }).forEach(\n ([fnGroupName, methods]) => {\n Object.keys(methods).forEach((methodName) => {\n ;(methods as any)[methodName] = `${fnGroupName}_v1_${methodName}`\n })\n },\n)\n\nexport { chainHead, transaction, chainSpec, archive }\n","import { noop } from \"@polkadot-api/utils\"\nimport { finalize, Subscription } from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\nimport { createOpaqueToken } from \"../utils/create-opaque-token\"\nimport { areItemsValid, getStg$ } from \"./storage\"\nimport { getMsgFromErr } from \"../utils/message-from-error\"\nimport { chainHead } from \"../../methods\"\n\nconst { follow, header, storage, body, call, unfollow, stopOperation, unpin } =\n chainHead\n\nexport const createChainHead = (\n upstream: ReturnType<typeof createUpstream>,\n reply: (id: string, result: any) => void,\n err: (id: string, code: number, msg: string) => void,\n notification: (method: string, subscription: string, result: any) => void,\n) => {\n type SubCtx = {\n id: string\n up: ReturnType<typeof upstream.getBlocks>\n operations: Map<string, () => void>\n cleanUp: () => void\n }\n const subscriptions = new Map<string, SubCtx>()\n\n const _follow = (rId: string) => {\n if (subscriptions.size === 2) {\n return err(rId, -32800, \"Limit reached\")\n }\n const token = createOpaqueToken()\n const fNotification = (result: any) =>\n notification(\"chainHead_v1_followEvent\", token, result)\n const up = upstream.getBlocks(token)\n const operations = new Map<string, () => void>()\n subscriptions.set(token, {\n id: token,\n up,\n operations,\n cleanUp: () => {\n cleanUp()\n },\n })\n\n reply(rId, token)\n\n let subscription: Subscription | null = null\n let cleanUp = () => {\n cleanUp = noop\n subscription?.unsubscribe()\n subscription = null as any\n operations.forEach((cb) => {\n cb()\n })\n operations.clear()\n subscriptions.delete(token)\n }\n\n subscription = up.blocks$.subscribe({\n next(v) {\n fNotification(v)\n },\n error() {\n cleanUp()\n fNotification({ event: \"stop\" })\n },\n })\n if (subscription.closed) subscription = null\n }\n\n const _unfollow = (rId: string, followId: string) => {\n subscriptions.get(followId)?.cleanUp()\n reply(rId, \"null\")\n }\n\n const _stopOperation = (\n rId: string,\n followId: string,\n operationId: string,\n ) => {\n const cb = subscriptions.get(followId)?.operations.get(operationId)\n if (cb) cb()\n reply(rId, \"null\")\n }\n\n const _header = (\n { up: { getHeader } }: SubCtx,\n reply: (x: any) => void,\n at: string,\n ) => reply(getHeader(at))\n\n const _unpin = (\n { up: { unpin: innerUnpin } }: SubCtx,\n reply: (x: any) => void,\n hashOrHashes: string | string[],\n ) => {\n const hashes =\n typeof hashOrHashes === \"string\" ? [hashOrHashes] : hashOrHashes\n hashes.forEach(innerUnpin)\n reply(null)\n }\n\n const _call = (\n { operations, id: followId }: SubCtx,\n reply: (x: any) => void,\n at: string,\n method: string,\n args: string,\n ) => {\n const operationId = createOpaqueToken()\n reply({ result: \"started\", operationId })\n const cNotification = (output: any, isErr = false) =>\n notification(\n call,\n followId,\n isErr\n ? {\n operationId,\n event: \"operationError\",\n error: output,\n }\n : {\n operationId,\n event: \"operationCallDone\",\n output,\n },\n )\n const subscription = upstream.runtimeCall(at, method, args).subscribe(\n (output) => {\n operations.delete(operationId)\n cNotification(output)\n },\n (e) => {\n operations.delete(operationId)\n cNotification(getMsgFromErr(e), true)\n },\n )\n if (!subscription.closed)\n operations.set(operationId, () => {\n subscription.unsubscribe()\n operations.delete(operationId)\n })\n }\n\n const _body = (\n { operations, id: followId }: SubCtx,\n reply: (x: any) => void,\n at: string,\n ) => {\n const operationId = createOpaqueToken()\n reply({ result: \"started\", operationId })\n const subscription = upstream.getBody(at).subscribe(\n ({ block: { extrinsics: value } }) => {\n operations.delete(operationId)\n notification(body, followId, {\n event: \"operationBodyDone\",\n operationId,\n value,\n })\n },\n (e) => {\n operations.delete(operationId)\n notification(body, followId, {\n event: \"operationError\",\n operationId,\n error: getMsgFromErr(e),\n })\n },\n )\n\n if (!subscription.closed)\n operations.set(operationId, () => {\n subscription.unsubscribe()\n operations.delete(operationId)\n })\n }\n\n const _stg = (\n { operations, id: followId }: SubCtx,\n reply: (x: any) => void,\n at: string,\n items: Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n | \"closestDescendantMerkleValue\"\n }>,\n ) => {\n const operationId = createOpaqueToken()\n reply({ result: \"started\", operationId })\n const innerNotifiaction = (msg: any) => {\n notification(storage, followId, msg)\n }\n const subscription = getStg$(upstream, at, items)\n .pipe(\n finalize(() => {\n operations.delete(operationId)\n }),\n )\n .subscribe(\n (items) => {\n innerNotifiaction({\n event: \"operationStorageItems\",\n operationId,\n items,\n })\n },\n (e) => {\n innerNotifiaction({\n event: \"operationError\",\n operationId,\n error: getMsgFromErr(e),\n })\n },\n () => {\n innerNotifiaction({\n event: \"operationStorageDone\",\n operationId,\n })\n },\n )\n\n if (!subscription.closed)\n operations.set(operationId, () => {\n subscription.unsubscribe()\n })\n }\n\n const result = (rId: string, method: string, params: Array<any>) => {\n if (method === follow) return _follow(rId)\n const [followId, ...rest] = params as [string, ...any[]]\n const ctx = subscriptions.get(followId)\n if (!ctx) return err(rId, -32602, \"Ivalid followSubscription\")\n\n const innerReply = (value: any) => {\n reply(rId, value)\n }\n\n switch (method) {\n case unfollow:\n return _unfollow(rId, followId)\n case stopOperation:\n return _stopOperation(rId, followId, rest[0])\n case unpin: {\n const [hashOrHashes] = rest\n if (\n (Array.isArray(hashOrHashes) ? hashOrHashes : [hashOrHashes]).some(\n (hash) => typeof hash !== \"string\",\n )\n )\n return err(rId, -32602, \"Invalid args\")\n return _unpin(ctx, innerReply, hashOrHashes)\n }\n default: {\n const [at, ...other] = rest as [string, ...any[]]\n if (!ctx.up.isPinned(at)) return err(rId, -32801, \"Block not pinned\")\n\n switch (method) {\n case header:\n return _header(ctx, innerReply, at)\n case body:\n return _body(ctx, innerReply, at)\n case call: {\n const [method, data] = other\n if (typeof method !== \"string\" || typeof data !== \"string\")\n return err(rId, -32602, \"Invalid args\")\n return _call(ctx, innerReply, at, method, data)\n }\n case storage: {\n const [items] = other\n return areItemsValid(items)\n ? _stg(ctx, innerReply, at, items)\n : err(rId, -32602, \"Invalid args\")\n }\n }\n }\n }\n throw null\n }\n\n result.stop = () => {\n subscriptions.forEach((x) => {\n x.cleanUp()\n })\n }\n return result\n}\n","import {\n catchError,\n concat,\n ignoreElements,\n Subscription,\n takeUntil,\n timer,\n} from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\nimport { createOpaqueToken } from \"../utils/create-opaque-token\"\nimport { transaction } from \"../../methods\"\n\nconst { stop, broadcast } = transaction\nexport const createTransactionFns = (\n upstream: ReturnType<typeof createUpstream>,\n reply: (id: string, result: any) => void,\n) => {\n const ongoing = new Map<string, Subscription>()\n const result = (rId: string, method: string, args: any[]) => {\n if (method === stop) {\n const [token] = args\n ongoing.get(token)?.unsubscribe()\n ongoing.delete(token)\n reply(rId, null)\n } else if (method === broadcast) {\n const token = createOpaqueToken()\n ongoing.set(\n token,\n upstream\n .obsRequest(\"author_submitExtrinsic\", args)\n .pipe(\n // We want to make sure that we keep on retrying if there\n // are errors with the `author_submitExtrinsic` request\n catchError((_, source) => concat(timer(5_000), source)),\n // This logic ensures that the subscription dies if an\n // upstream error (like the client being destroyed) takes place\n takeUntil(\n upstream.finalized$.pipe(\n ignoreElements(),\n catchError(() => {\n ongoing.delete(token)\n return [null]\n }),\n ),\n ),\n )\n .subscribe(),\n )\n reply(rId, token)\n } else {\n throw null\n }\n }\n\n result.stop = () => {\n ongoing.forEach((s) => s.unsubscribe())\n ongoing.clear()\n }\n\n return result\n}\n","import { finalize, map, Observable, Subscription, take } from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\nimport { createOpaqueToken } from \"../utils/create-opaque-token\"\nimport { areItemsValid, getStg$ } from \"./storage\"\nimport { getMsgFromErr } from \"../utils/message-from-error\"\nimport { archive } from \"../../methods\"\n\nconst {\n body,\n call,\n finalizedHeight,\n genesisHash,\n hashByHeight,\n header,\n stopStorage,\n storage,\n} = archive\n\nexport const createArchive = (\n upstream: ReturnType<typeof createUpstream>,\n reply: (id: string, result: any) => void,\n err: (id: string, code: number, msg: string) => void,\n notification: (method: string, subscription: string, result: any) => void,\n) => {\n const stgSubscriptions = new Map<string, Subscription>()\n\n const stg = (\n reply: (x: string) => void,\n at: string,\n items: Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n | \"closestDescendantMerkleValue\"\n }>,\n ) => {\n const subId = createOpaqueToken()\n reply(subId)\n const innerNotifiaction = (result: any) => {\n notification(\"archive_v1_storageEvent\", subId, result)\n }\n\n const subscription = getStg$(upstream, at, items)\n .pipe(\n finalize(() => {\n stgSubscriptions.delete(subId)\n }),\n )\n .subscribe(\n (items) => {\n items.forEach((item) =>\n innerNotifiaction({ event: \"storage\", ...item }),\n )\n },\n (e) => {\n innerNotifiaction({ event: \"storageError\", error: getMsgFromErr(e) })\n },\n () => {\n innerNotifiaction({ event: \"storageDone\" })\n },\n )\n\n if (!subscription.closed) stgSubscriptions.set(subId, subscription)\n }\n\n const result = (rId: string, name: string, params: Array<any>) => {\n const innerReply = (value: any) => {\n reply(rId, value)\n }\n\n const obsReply = (input: Observable<any>) => {\n // There is no need to keep these subscriptions around\n // b/c killing upstream will also kill this subscription\n input.subscribe({\n next: innerReply,\n error: (e) => {\n err(rId, e.code ?? -1, getMsgFromErr(e))\n },\n })\n }\n\n const [firstArg, secondArg, thirdArg] = params\n switch (name) {\n case body:\n return obsReply(\n upstream.getBody(firstArg).pipe(map(({ block }) => block.extrinsics)),\n )\n case call:\n return obsReply(\n upstream\n .runtimeCall(firstArg, secondArg, thirdArg)\n .pipe(map((value) => ({ success: true, value }))),\n )\n case finalizedHeight:\n return obsReply(\n upstream.finalized$.pipe(\n map((x) => x.number),\n take(1),\n ),\n )\n case genesisHash:\n return obsReply(upstream.genesisHash)\n case hashByHeight:\n return obsReply(upstream.getBlockHash$(firstArg).pipe(map((x) => [x])))\n case header:\n return obsReply(\n upstream.getHeader$(firstArg).pipe(map((h) => h.header)),\n )\n case stopStorage: {\n const sub = stgSubscriptions.get(firstArg)\n return sub ? sub.unsubscribe() : err(rId, -32602, \"Invalid args\")\n }\n case storage:\n return areItemsValid(secondArg)\n ? stg(innerReply, firstArg, secondArg)\n : err(rId, -32602, \"Invalid args\")\n }\n throw null\n }\n\n result.stop = () => {\n ;[...stgSubscriptions].forEach(([, s]) => s.unsubscribe())\n stgSubscriptions.clear()\n }\n\n return result\n}\n","import { noop } from \"@polkadot-api/utils\"\nimport { createUpstream } from \"../upstream\"\nimport { createChainSpec } from \"./chainspec\"\nimport { createChainHead } from \"./chain-head\"\nimport { createTransactionFns } from \"./transaction\"\nimport { createArchive } from \"./archive\"\nimport { Middleware } from \"../../types\"\nimport { createClient } from \"@polkadot-api/raw-client\"\nimport { JsonRpcMessage } from \"@polkadot-api/json-rpc-provider\"\nimport { archive, chainHead, chainSpec, transaction } from \"../../methods\"\n\nconst supportedMethods = new Set(\n [chainHead, chainSpec, archive, transaction]\n .map((methods) => Object.values(methods) as string[])\n .flat(),\n)\n\nexport const withLegacy: Middleware = (base) => (onMessage, onHalt) => {\n let clean = noop\n let onMsg: (msg: JsonRpcMessage) => void = noop\n const innerConnection = base(\n (msg) => {\n onMsg(msg)\n },\n (e) => {\n clean()\n onHalt(e)\n },\n )\n const { disconnect, request } = createClient((_onMsg) => {\n onMsg = _onMsg\n return innerConnection\n })\n const upstream = createUpstream(request)\n\n const jsonRpc = (\n input:\n | ({ id: string } & (\n | { result: any }\n | { error: { code: number; message: string } }\n ))\n | {\n method: string\n params: { subscription: string; result: any }\n },\n ) =>\n onMessage({\n jsonrpc: \"2.0\",\n ...input,\n })\n\n const reply = (id: string, result: any) => {\n jsonRpc({ id, result })\n }\n const err = (id: string, code: number, message: string) => {\n jsonRpc({ id, error: { code, message } })\n }\n const notification = (method: string, subscription: string, result: any) => {\n jsonRpc({ method, params: { subscription, result } })\n }\n\n const groups = {\n chainSpec: createChainSpec(upstream, reply, err),\n chainHead: createChainHead(upstream, reply, err, notification),\n archive: createArchive(upstream, reply, err, notification),\n transaction: createTransactionFns(upstream, reply),\n }\n\n clean = () => {\n groups.chainHead.stop()\n groups.archive.stop()\n groups.transaction.stop()\n upstream.clean()\n }\n\n return {\n send: (parsedMsg: any) => {\n if (!parsedMsg) return\n const { id, method, params } = parsedMsg\n if (\n (id !== null && typeof id !== \"string\" && typeof id !== \"number\") ||\n typeof method !== \"string\"\n ) {\n console.warn(`Invalid message:\\n${JSON.stringify(parsedMsg)}`)\n return\n }\n if (method === \"rpc_methods\") {\n return upstream.methods.subscribe(\n ({ methods }) => {\n reply(id, {\n methods: [\n ...supportedMethods,\n ...methods.filter((method) => !supportedMethods.has(method)),\n ],\n })\n },\n (e: any) => {\n console.error(e)\n err(id, -32602, \"Invalid\")\n },\n )\n }\n\n const [groupName] = method.split(\"_\")\n if (groupName in groups) {\n try {\n return groups[groupName as keyof typeof groups](id, method, params)\n } catch (e) {\n if (e !== null) throw e\n }\n }\n\n upstream.request(\n method,\n params,\n (value) => {\n reply(id, value)\n },\n (e) => {\n err(id, e?.code || -1, e?.message || \"\")\n },\n )\n },\n disconnect: () => {\n clean()\n disconnect()\n },\n }\n}\n","import { JsonRpcMessage, JsonRpcRequest } from \"@polkadot-api/json-rpc-provider\"\nimport { InnerJsonRpcProvider } from \"@polkadot-api/json-rpc-provider-proxy\"\nimport { createClient } from \"@polkadot-api/raw-client\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { Middleware } from \"../types\"\n\nexport const apply =\n (...middlewares: Middleware[]): Middleware =>\n (base) =>\n middlewares.reduce((a, b) => b(a), base)\n\nexport const jsonObj = <T extends {}>(input: T) => ({\n jsonrpc: \"2.0\" as const,\n ...input,\n})\n\nexport const operationNotification = <T extends {}>(\n subscription: string,\n event: string,\n operationId?: string,\n innerResult: T = {} as T,\n) =>\n jsonObj({\n method: \"chainHead_v1_followEvent\",\n params: {\n subscription,\n result: {\n event,\n operationId,\n ...innerResult,\n },\n },\n })\n\nexport const getRequest = (base: InnerJsonRpcProvider) => {\n let clientSend: (msg: JsonRpcRequest) => void = noop\n let clientReceive: (msg: JsonRpcMessage) => void = noop\n\n const cleanup = () => {\n clientSend = noop\n clientReceive = noop\n }\n\n const { request } = createClient((clientMsg) => {\n clientReceive = clientMsg\n return {\n disconnect: noop,\n send(x) {\n clientSend(x)\n },\n }\n })\n\n const simpleRequest = <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n onSuccess: (value: Payload) => void,\n onError: (e: any) => void,\n ): (() => void) => request(method, params, { onSuccess, onError })\n\n const provider: InnerJsonRpcProvider = (onMsg, onHalt) => {\n const { send, disconnect } = base(\n (msg) => {\n clientReceive(msg)\n onMsg(msg)\n },\n (e) => {\n cleanup()\n onHalt(e)\n },\n )\n clientSend = send\n return {\n send,\n disconnect() {\n cleanup()\n disconnect()\n },\n }\n }\n return { provider, request, simpleRequest }\n}\n","import { JsonRpcMessage, JsonRpcRequest } from \"@polkadot-api/json-rpc-provider\"\nimport { createClient } from \"@polkadot-api/raw-client\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { Middleware } from \"../types\"\n\nexport const getAsyncMiddleware =\n (\n input: (\n onResult: (x: Middleware | null) => void,\n request: ReturnType<typeof createClient>[\"request\"],\n ) => () => void,\n ): Middleware =>\n (base) =>\n (onMessageOut, onHaltOut) => {\n // null -> loading\n // undefined -> destroyed\n //\n let interceptedMessage: (msg: JsonRpcMessage) => void = noop\n let pending: Array<JsonRpcRequest> = []\n let send = (msg: JsonRpcRequest) => {\n pending.push(msg)\n }\n let stopRequest = noop\n let isOn = true\n let done = () => {\n isOn = false\n pending = []\n stopRequest()\n done = interceptedMessage = interceptedHalt = stopRequest = noop\n }\n\n let interceptedHalt = (e?: any) => {\n done()\n onHaltOut(e)\n }\n const innerCon = base(\n (msg) => interceptedMessage(msg),\n (e) => interceptedHalt(e),\n )\n let { disconnect } = innerCon\n const { request } = createClient((innerClientOnMsg) => {\n interceptedMessage = innerClientOnMsg\n return { ...innerCon, disconnect: noop }\n })\n\n if (isOn)\n stopRequest = input((cb) => {\n stopRequest = noop\n if (!cb) interceptedHalt()\n else {\n ;({ send, disconnect } = cb((onMiddleMsg, onMiddleHalt) => {\n interceptedHalt = (e?: any) => {\n done()\n onMiddleHalt(e)\n }\n interceptedMessage = onMiddleMsg\n return innerCon\n })(onMessageOut, onHaltOut))\n pending.forEach(send)\n pending = []\n }\n }, request)\n\n return {\n send: (msg) => {\n send(msg)\n },\n disconnect: () => {\n done()\n disconnect()\n },\n }\n }\n","import { Middleware } from \"./types\"\nimport { apply, jsonObj } from \"./utils\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { getAsyncMiddleware } from \"./utils/get-async-middleware\"\n\nconst RPC_METHODS = \"rpc_methods\"\nconst withMethods =\n (methods: string[]): Middleware =>\n (base) =>\n (onMsg, onHalt) => {\n const result = { methods }\n const { send, disconnect } = base(onMsg, onHalt)\n return {\n disconnect,\n send(msg) {\n if (msg.id && (msg as any).method === RPC_METHODS) {\n onMsg(jsonObj({ id: msg.id, result }))\n } else send(msg)\n },\n }\n }\n\nexport const methodsRouter = (\n getMiddleware: (methods: string[]) => Middleware,\n): Middleware =>\n getAsyncMiddleware((onReady, request) => {\n let nTries = 0\n let stopRequest: () => void = noop\n const getMethods = () => {\n nTries++\n stopRequest = request(RPC_METHODS, [], {\n onSuccess: ({ methods }: { methods: string[] }) => {\n onReady(apply(withMethods(methods), getMiddleware(methods)))\n },\n onError: () => {\n if (nTries > 3) onReady(null)\n else {\n const token = setTimeout(getMethods, 500)\n stopRequest = () => clearTimeout(token)\n }\n },\n })\n }\n getMethods()\n\n return () => stopRequest()\n })\n","import { chainHead } from \"../methods\"\nimport type { Middleware } from \"../types\"\n\nconst { follow, unfollow } = chainHead\nconst resetStops = () => ({ latest: Date.now(), count: 0 })\n\nexport const followEnhancer: Middleware = (base) => (onMsg, onHalt) => {\n const prematureStops = new Map<string, any>()\n const preOpId = new Map<string, any>()\n const onGoing = new Set<string>()\n let nStops: { latest: number; count: number } = resetStops()\n const cleanup = () => {\n ;[prematureStops, preOpId, onGoing].forEach((x) => {\n x.clear()\n })\n }\n\n const forceDisconnect = () => {\n disconnect()\n cleanup()\n onHalt()\n }\n\n const { send, disconnect } = base(\n (parsed: any) => {\n // it's a response\n if (\"id\" in parsed) {\n const { id, result } = parsed\n\n const msg = preOpId.get(id)\n if (msg) {\n preOpId.delete(id)\n const prematureStop = prematureStops.get(result)\n if (prematureStop) {\n prematureStops.delete(result)\n onMsg(parsed)\n onMsg(prematureStop)\n return\n }\n\n onGoing.add(result)\n const currentSize = onGoing.size + preOpId.size\n if (currentSize > 2)\n console.warn(\n `Too many chainHead follow subscriptions (${currentSize})`,\n )\n else if (parsed.error) {\n console.warn(`chainHead follow failed on the ${currentSize} sub`)\n forceDisconnect()\n return\n }\n }\n } else {\n // it's a notifiaction\n const { subscription, result } = (parsed as any).params\n if (result?.event === \"stop\") {\n const diff = Date.now() - nStops.latest\n nStops.latest += diff\n nStops.count = diff < 1000 ? nStops.count + 1 : 1\n\n if (onGoing.has(subscription)) onGoing.delete(subscription)\n else prematureStops.set(subscription, parsed)\n }\n }\n\n onMsg(parsed)\n if (nStops.count > 2) {\n nStops = resetStops()\n forceDisconnect()\n }\n },\n (e) => {\n cleanup()\n onHalt(e)\n },\n )\n\n return {\n send(parsed: any) {\n const { method } = parsed\n if (method === follow) preOpId.set(parsed.id, parsed)\n else if (method === unfollow) onGoing.delete(parsed.params[0])\n send(parsed)\n },\n disconnect,\n }\n}\n","import { chainHead } from \"../methods\"\nimport type { Middleware } from \"../types\"\nimport { JsonRpcMessage } from \"@polkadot-api/json-rpc-provider\"\n\ninterface InitializedRpc {\n event: \"initialized\"\n finalizedBlockHashes: string[]\n}\n\ninterface NewBlockRpc {\n event: \"newBlock\"\n blockHash: string\n parentBlockHash: string\n}\n\ninterface BestBlockChangedRpc {\n event: \"bestBlockChanged\"\n bestBlockHash: string\n}\n\ninterface FinalizedRpc {\n event: \"finalized\"\n finalizedBlockHashes: Array<string>\n prunedBlockHashes: Array<string>\n}\n\nexport interface StopRpc {\n event: \"stop\"\n}\n\ntype FollowEvent =\n | InitializedRpc\n | NewBlockRpc\n | BestBlockChangedRpc\n | FinalizedRpc\n | StopRpc\n\nconst { follow, unpin, unfollow } = chainHead\nexport const fixPrematureBlocks: Middleware = (base) => (onMsg, onHalt) => {\n const pendingChainHeadSubs = new Set<string>()\n const pinnedBlocksInSub = new Map<string, Set<string>>()\n const prematureBlocks = new Map<string, Map<string, Array<JsonRpcMessage>>>()\n const withClear =\n <Args extends Array<any>>(\n fn: (...args: Args) => void,\n ): ((...args: Args) => void) =>\n (...args) => {\n ;[pendingChainHeadSubs, pinnedBlocksInSub, prematureBlocks].forEach(\n (x) => {\n x.clear()\n },\n )\n fn(...args)\n }\n\n const { send: originalSend, disconnect } = base((message) => {\n // it's a response\n if (\"id\" in message) {\n onMsg(message)\n const { id, result } = message as unknown as {\n id: string\n result: string\n }\n\n if (pendingChainHeadSubs.has(id)) {\n pendingChainHeadSubs.delete(id)\n pinnedBlocksInSub.set(result, new Set())\n prematureBlocks.set(result, new Map())\n return\n }\n } else {\n // it's a notification\n const { subscription } = (message as any).params\n const pinnedBlocks = pinnedBlocksInSub.get(subscription)\n const prematureSub = prematureBlocks.get(subscription)!\n if (pinnedBlocks) {\n const result = (message as any).params.result as FollowEvent\n const { event } = result\n if (event === \"initialized\") {\n result.finalizedBlockHashes.forEach((hash) => {\n pinnedBlocks.add(hash)\n })\n }\n\n if (event === \"newBlock\") {\n const { parentBlockHash } = result\n if (!pinnedBlocks.has(parentBlockHash)) {\n const list = prematureSub.get(parentBlockHash) ?? []\n list.push(message)\n prematureSub.set(parentBlockHash, list)\n return\n }\n\n const hash = result.blockHash\n pinnedBlocks.add(result.blockHash)\n onMsg(message)\n\n const prematureMessages = prematureSub.get(hash)\n if (prematureMessages) {\n prematureSub.delete(hash)\n prematureMessages.forEach((msg) => {\n pinnedBlocks.add((msg as any).params.result.blockHash)\n onMsg(msg)\n })\n }\n return\n }\n\n if (event === \"stop\") {\n pinnedBlocks.delete(subscription)\n prematureBlocks.delete(subscription)\n }\n }\n onMsg(message)\n }\n }, withClear(onHalt))\n\n const send = (msg: any) => {\n const subId = msg.params[0]\n switch (msg.method) {\n case follow:\n pendingChainHeadSubs.add(msg.id)\n break\n\n case unpin:\n const [subscription, blocks] = msg.params as [string, string[]]\n blocks.forEach((block) => {\n pinnedBlocksInSub.get(subscription)?.delete(block)\n prematureBlocks.get(subscription)?.delete(block)\n })\n break\n\n case unfollow:\n pinnedBlocksInSub.delete(subId)\n prematureBlocks.delete(subId)\n break\n }\n originalSend(msg)\n }\n\n return {\n send,\n disconnect: withClear(disconnect),\n }\n}\n","import type { Middleware } from \"../types\"\nimport { chainHead } from \"../methods\"\n\ninterface InitializedRpc {\n event: \"initialized\"\n finalizedBlockHashes: string[]\n}\n\ninterface NewBlockRpc {\n event: \"newBlock\"\n blockHash: string\n parentBlockHash: string\n}\n\ninterface BestBlockChangedRpc {\n event: \"bestBlockChanged\"\n bestBlockHash: string\n}\n\ninterface FinalizedRpc {\n event: \"finalized\"\n finalizedBlockHashes: Array<string>\n prunedBlockHashes: Array<string>\n}\n\nexport interface StopRpc {\n event: \"stop\"\n}\n\ntype FollowEvent =\n | InitializedRpc\n | NewBlockRpc\n | BestBlockChangedRpc\n | FinalizedRpc\n | StopRpc\n\nconst { follow, unpin, unfollow } = chainHead\nexport const fixUnorderedBlocks: Middleware = (base) => (onMsg, onHalt) => {\n const pendingChainHeadSubs = new Set<string>()\n const pinnedBlocksInSub = new Map<string, Set<string>>()\n const uknownBlocksNotifications = new Map<string, Map<string, any>>()\n const withClear =\n <Args extends Array<any>>(\n fn: (...args: Args) => void,\n ): ((...args: Args) => void) =>\n (...args) => {\n ;[\n pendingChainHeadSubs,\n pinnedBlocksInSub,\n uknownBlocksNotifications,\n ].forEach((x) => {\n x.clear()\n })\n fn(...args)\n }\n\n const { send: originalSend, disconnect } = base((message) => {\n // it's a response\n if (\"id\" in message) {\n onMsg(message)\n const { id, result } = message as unknown as {\n id: string\n result: string\n }\n\n if (pendingChainHeadSubs.has(id)) {\n pendingChainHeadSubs.delete(id)\n pinnedBlocksInSub.set(result, new Set())\n uknownBlocksNotifications.set(result, new Map())\n return\n }\n } else {\n // it's a notification\n const { subscription } = (message as any).params\n const pinnedBlocks = pinnedBlocksInSub.get(subscription)\n const premature = uknownBlocksNotifications.get(subscription)!\n if (pinnedBlocks) {\n const result = (message as any).params.result as FollowEvent\n const { event } = result\n if (event === \"initialized\") {\n result.finalizedBlockHashes.forEach((hash) => {\n pinnedBlocks.add(hash)\n })\n }\n\n if (event === \"finalized\") {\n result.prunedBlockHashes = result.prunedBlockHashes.filter((x) =>\n pinnedBlocks.has(x),\n )\n }\n\n if (event === \"newBlock\") {\n pinnedBlocks.add(result.blockHash)\n const hash = result.blockHash\n const missing = premature.get(hash)\n if (missing) {\n premature.delete(hash)\n onMsg(message)\n Promise.resolve().then(() => {\n onMsg(missing)\n })\n return\n }\n }\n\n if (event === \"bestBlockChanged\") {\n const hash = result.bestBlockHash\n if (!pinnedBlocks.has(hash)) {\n uknownBlocksNotifications.get(subscription)!.set(hash, message)\n return\n }\n }\n\n if (event === \"stop\") {\n pinnedBlocks.delete(subscription)\n uknownBlocksNotifications.delete(subscription)\n }\n }\n onMsg(message)\n }\n }, withClear(onHalt))\n\n const send = (msg: any) => {\n const subId = msg.params[0]\n switch (msg.method) {\n case follow:\n pendingChainHeadSubs.add(msg.id)\n break\n\n case unpin:\n const [subscription, blocks] = msg.params as [string, string[]]\n blocks.forEach((block) => {\n pinnedBlocksInSub.get(subscription)?.delete(block)\n uknownBlocksNotifications.get(subscription)?.delete(block)\n })\n break\n\n case unfollow:\n pinnedBlocksInSub.delete(subId)\n uknownBlocksNotifications.delete(subId)\n break\n }\n originalSend(msg)\n }\n\n return {\n send,\n disconnect: withClear(disconnect),\n }\n}\n","import type { Middleware } from \"../types\"\nimport { chainHead } from \"../methods\"\n\nconst { follow, body, call, storage, unfollow, stopOperation } = chainHead\nconst terminalOperationEvents = new Set(\n [\"BodyDone\", \"CallDone\", \"StorageDone\", \"Inaccessible\", \"Error\"].map(\n (x) => \"operation\" + x,\n ),\n)\nconst isTerminalNotification = (msg: any): boolean =>\n terminalOperationEvents.has(msg.params?.result?.event)\n\nexport const fixUnorderedEvents: Middleware = (base) => (onMsg, onHalt) => {\n const pendingChainHeadSubs = new Set<string>()\n const pendingOperationIds: Map<string, string> = new Map()\n\n const activeOperationIds = new Map<string, Set<string>>()\n const uknownOperationNotifications = new Map<\n string,\n Map<string, Array<any>>\n >()\n\n const withClear =\n <Args extends Array<any>>(\n fn: (...args: Args) => void,\n ): ((...args: Args) => void) =>\n (...args) => {\n ;[\n pendingChainHeadSubs,\n pendingOperationIds,\n activeOperationIds,\n uknownOperationNotifications,\n ].forEach((x) => {\n x.clear()\n })\n fn(...args)\n }\n\n const { send: originalSend, disconnect } = base((message) => {\n // it's a response\n if (\"id\" in message) {\n onMsg(message)\n const { id, result } = message as unknown as {\n id: string\n result: string\n }\n if (pendingChainHeadSubs.has(id)) {\n pendingChainHeadSubs.delete(id)\n activeOperationIds.set(result, new Set())\n uknownOperationNotifications.set(result, new Map())\n return\n }\n\n const subId = pendingOperationIds.get(id)\n if (subId !== undefined) {\n pendingOperationIds.delete(id)\n const opId = (message as any).result?.operationId\n // it's possible that the limit has been reached... so we need to check\n // it's also possible that the response came after an unfollow\n if (opId !== undefined && activeOperationIds.has(subId)) {\n const subOperations = activeOperationIds.get(subId)!\n subOperations.add(opId)\n const pendingNotifications = uknownOperationNotifications\n .get(subId)\n ?.get(opId)\n\n if (pendingNotifications) {\n pendingNotifications.forEach(onMsg)\n uknownOperationNotifications.get(subId)!.delete(opId)\n if (isTerminalNotification(pendingNotifications.at(-1)))\n subOperations.delete(opId)\n }\n }\n }\n } else {\n // it's a notification\n const { subscription, result } = (message as any).params\n const operationIds = activeOperationIds.get(subscription)\n if (operationIds) {\n const { operationId } = (message as any).params.result\n if (operationId !== undefined) {\n if (!operationIds.has(operationId)) {\n // The operationId hasn't arrived yet\n const subscriptionPending =\n uknownOperationNotifications.get(subscription)!\n const pendingMessages = subscriptionPending.get(operationId) ?? []\n pendingMessages.push(message)\n subscriptionPending.set(operationId, pendingMessages)\n return\n } else if (isTerminalNotification(message))\n operationIds.delete(operationId)\n } else if (result?.event === \"stop\") {\n activeOperationIds.delete(subscription)\n uknownOperationNotifications.delete(subscription)\n }\n }\n onMsg(message)\n }\n }, withClear(onHalt))\n\n const send = (msg: any) => {\n const subId = msg.params[0]\n switch (msg.method) {\n case follow:\n pendingChainHeadSubs.add(msg.id)\n break\n\n case body:\n case call:\n case storage:\n pendingOperationIds.set(msg.id, subId)\n break\n\n case unfollow:\n activeOperationIds.delete(subId)\n uknownOperationNotifications.delete(subId)\n break\n\n case stopOperation:\n activeOperationIds.get(subId)?.delete(msg.params[1])\n }\n originalSend(msg)\n }\n\n return {\n send,\n disconnect: withClear(disconnect),\n }\n}\n","import type { Middleware } from \"../types\"\n\nexport const patchChainHeadEvents: Middleware = (base) => (onMsg, onHalt) =>\n base((message) => {\n const result = (message as any).params?.result\n if (!(\"id\" in message) && result) {\n const { prunedBlockHashes, finalizedBlockHash, event } = result\n if (event === \"finalized\" && Array.isArray(prunedBlockHashes))\n result.prunedBlockHashes = [...new Set(result.prunedBlockHashes)]\n else if (event === \"initialized\" && finalizedBlockHash) {\n result.finalizedBlockHashes = [result.finalizedBlockHash]\n delete result.finalizedBlockHash\n }\n }\n onMsg(message)\n }, onHalt)\n","import { chainHead } from \"../methods\"\nimport type { Middleware } from \"../types\"\nimport { JsonRpcRequest } from \"@polkadot-api/json-rpc-provider\"\n\nexport const unpinHash: Middleware =\n (base) =>\n (...args) => {\n const { send: _send, disconnect } = base(...args)\n\n const send = (msg: JsonRpcRequest) => {\n const { method, params, id, ...rest } = msg\n if (method == chainHead.unpin && params && Array.isArray(params[1])) {\n params[1].forEach((hash, idx) => {\n _send({\n ...rest,\n id: idx === 0 ? id : `${id}-patched-${idx}`,\n method,\n params: [params[0], hash],\n })\n })\n } else _send(msg)\n }\n\n return { send, disconnect }\n }\n","import { chainHead } from \"@/methods\"\nimport { Middleware } from \"@/types\"\nimport { operationNotification } from \"@/utils\"\n\ninterface InitializedRpc {\n event: \"initialized\"\n finalizedBlockHashes: string[]\n}\n\ninterface NewBlockRpc {\n event: \"newBlock\"\n blockHash: string\n parentBlockHash: string\n}\n\ninterface BestBlockChangedRpc {\n event: \"bestBlockChanged\"\n bestBlockHash: string\n}\n\ninterface FinalizedRpc {\n event: \"finalized\"\n finalizedBlockHashes: Array<string>\n prunedBlockHashes: Array<string>\n}\n\nexport interface StopRpc {\n event: \"stop\"\n}\n\ntype FollowEvent =\n | InitializedRpc\n | NewBlockRpc\n | BestBlockChangedRpc\n | FinalizedRpc\n | StopRpc\n\nconst cancelEvents = new Set([\"newBlock\", \"bestBlockChanged\", \"stop\"])\n\nexport const fixMissingInitialBest: Middleware = (base) => (onMsg, onHalt) => {\n const pendingChainHeadSubs = new Set<string>()\n const pendingChainHeads = new Map<string, () => void>()\n const withClear =\n <Args extends Array<any>>(\n fn: (...args: Args) => void,\n ): ((...args: Args) => void) =>\n (...args) => {\n ;[pendingChainHeadSubs, pendingChainHeads].forEach((x) => {\n x.clear()\n })\n fn(...args)\n }\n\n const { send: originalSend, disconnect } = base((message) => {\n // it's a response\n if (\"id\" in message) {\n const { id, result } = message as unknown as {\n id: string\n result: string\n }\n\n if (pendingChainHeadSubs.has(id)) {\n pendingChainHeadSubs.delete(id)\n pendingChainHeads.set(result, () => {\n pendingChainHeads.delete(result)\n })\n }\n } else {\n const { subscription } = (message as any).params\n const cancel = pendingChainHeads.get(subscription)\n if (cancel) {\n const result = (message as any).params.result as FollowEvent\n const { event } = result\n if (event === \"initialized\") {\n // It's an heuristic.\n // The initial blocks that are ahead of the latest finalized one\n // should arrive \"synchronosuly\" after the \"initialized\" event\n // Therefore, if after 1/2 sec we havent received those events, it's\n // safe to assume that we are in the buggy situation descrived in https://github.com/polkadot-api/polkadot-api/issues/1244\n // Sw we will \"manually\" trigger the `bestBlockChanged` event.\n const token = setTimeout(() => {\n pendingChainHeads.delete(subscription)\n onMsg(\n operationNotification(\n subscription,\n \"bestBlockChanged\",\n undefined,\n { bestBlockHash: result.finalizedBlockHashes.at(-1) },\n ),\n )\n }, 500)\n\n pendingChainHeads.set(subscription, () => {\n pendingChainHeads.delete(subscription)\n clearTimeout(token)\n })\n } else if (cancelEvents.has(event)) cancel()\n }\n }\n\n onMsg(message)\n }, withClear(onHalt))\n\n return {\n send(msg: any) {\n switch (msg.method) {\n case chainHead.follow:\n pendingChainHeadSubs.add(msg.id)\n break\n\n case chainHead.unfollow:\n pendingChainHeads.get(msg.params[0])?.()\n }\n originalSend(msg)\n },\n disconnect: withClear(disconnect),\n }\n}\n","import { followEnhancer } from \"./fix-follow\"\nimport { fixPrematureBlocks } from \"./fix-premature-blocks\"\nimport { fixUnorderedBlocks } from \"./fix-unordered-blocks\"\nimport { fixUnorderedEvents } from \"./fix-unordered-events\"\nimport { patchChainHeadEvents } from \"./patch-chainhead-events\"\nimport { unpinHash } from \"./unpin-hash\"\nimport { apply } from \"../utils\"\nimport { fixMissingInitialBest } from \"./fix-missing-initial-best\"\n\nexport const modern = apply(\n fixUnorderedEvents,\n unpinHash,\n patchChainHeadEvents,\n fixPrematureBlocks,\n fixUnorderedBlocks,\n fixMissingInitialBest,\n followEnhancer,\n)\n","import { JsonRpcId, JsonRpcRequest } from \"@polkadot-api/json-rpc-provider\"\nimport { Middleware } from \"./types\"\n\nexport const withNumericIds: Middleware = (base) => (onMsg, onHalt) => {\n let nextId = 0\n const numberToOriginal = new Map<number, JsonRpcId>()\n const clear = () => {\n numberToOriginal.clear()\n }\n\n const { send: originalSend, disconnect } = base(\n (message: any) => {\n const { id } = message\n if (numberToOriginal.has(id)) {\n message.id = numberToOriginal.get(id)\n numberToOriginal.delete(id)\n }\n onMsg(message)\n },\n (e) => {\n clear()\n onHalt(e)\n },\n )\n\n return {\n send: (msg: JsonRpcRequest) => {\n if (msg.id !== undefined) {\n numberToOriginal.set(nextId, msg.id)\n msg.id = nextId++\n }\n originalSend(msg)\n },\n disconnect() {\n clear()\n disconnect()\n },\n }\n}\n","import { withLegacy } from \"./legacy\"\nimport { methodsRouter } from \"./methods-router\"\nimport { modern } from \"./modern\"\nimport { withNumericIds } from \"./numeric-ids\"\nimport { apply } from \"./utils\"\n\nconst modernGroups = [\"chainHead\", \"transaction\", \"chainSpec\", \"archive\"].map(\n (name) => `${name}_v1`,\n)\nconst isModern = (methods: string[]): boolean =>\n modernGroups.every((group) => methods.some((m) => m.startsWith(group)))\n\nexport const middleware = apply(\n withNumericIds,\n methodsRouter((methods) => (isModern(methods) ? modern : withLegacy)),\n)\n"],"names":["shareReplay","Subject","concatMap","of","filter","debounceTime","take","share","takeWhile","merge","map","mergeMap","result","defer","concat","tap","fromHex","mergeUint8","compact","toHex","Blake2256","Keccak256","Observable","pipe","noop","validateProofs","EMPTY","catchError","key","follow","header","storage","body","call","unfollow","stopOperation","unpin","reply","finalize","items","method","timer","takeUntil","ignoreElements","createClient"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@polkadot-api/ws-middleware",
3
+ "version": "1.0.0-canary.22b2fd2",
4
+ "author": "Josep M Sobrepere (https://github.com/josepot)",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/polkadot-api/polkadot-api.git"
8
+ },
9
+ "license": "MIT",
10
+ "sideEffects": false,
11
+ "exports": {
12
+ ".": {
13
+ "node": {
14
+ "production": {
15
+ "import": "./dist/esm/index.mjs",
16
+ "require": "./dist/min/index.js",
17
+ "default": "./dist/index.js"
18
+ },
19
+ "import": "./dist/esm/index.mjs",
20
+ "require": "./dist/index.js",
21
+ "default": "./dist/index.js"
22
+ },
23
+ "module": "./dist/esm/index.mjs",
24
+ "import": "./dist/esm/index.mjs",
25
+ "require": "./dist/index.js",
26
+ "default": "./dist/index.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "main": "./dist/index.js",
31
+ "module": "./dist/esm/index.mjs",
32
+ "browser": "./dist/esm/index.mjs",
33
+ "types": "./dist/index.d.ts",
34
+ "files": [
35
+ "dist"
36
+ ],
37
+ "peerDependencies": {
38
+ "rxjs": ">=7.8.0"
39
+ },
40
+ "dependencies": {
41
+ "@polkadot-api/json-rpc-provider": "1.0.0-canary.22b2fd2",
42
+ "@polkadot-api/json-rpc-provider-proxy": "1.0.0-canary.22b2fd2",
43
+ "@polkadot-api/substrate-bindings": "1.0.0-canary.22b2fd2",
44
+ "@polkadot-api/raw-client": "1.0.0-canary.22b2fd2",
45
+ "@polkadot-api/utils": "1.0.0-canary.22b2fd2"
46
+ },
47
+ "devDependencies": {
48
+ "rxjs": "^7.8.2"
49
+ },
50
+ "scripts": {
51
+ "build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
52
+ "build": "pnpm build-core",
53
+ "test": "echo 'no tests'",
54
+ "lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
55
+ "format": "prettier --write README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\""
56
+ }
57
+ }