@polkadot-api/ws-middleware 0.2.4-canary.d6be873 → 0.3.0

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 (103) hide show
  1. package/dist/hybrid.js +102 -0
  2. package/dist/hybrid.js.map +1 -0
  3. package/dist/index.js +12 -1783
  4. package/dist/index.js.map +1 -1
  5. package/dist/{esm/legacy/downstream/archive.mjs → legacy/downstream/archive.js} +13 -13
  6. package/dist/legacy/downstream/archive.js.map +1 -0
  7. package/dist/{esm/legacy/downstream/chain-head.mjs → legacy/downstream/chain-head.js} +19 -19
  8. package/dist/legacy/downstream/chain-head.js.map +1 -0
  9. package/dist/{esm/legacy/downstream/chainspec.mjs → legacy/downstream/chainspec.js} +1 -1
  10. package/dist/legacy/downstream/chainspec.js.map +1 -0
  11. package/dist/{esm/legacy/downstream/downstream.mjs → legacy/downstream/downstream.js} +25 -18
  12. package/dist/legacy/downstream/downstream.js.map +1 -0
  13. package/dist/{esm/legacy/downstream/storage.mjs → legacy/downstream/storage.js} +1 -1
  14. package/dist/legacy/downstream/storage.js.map +1 -0
  15. package/dist/{esm/legacy/downstream/transaction.mjs → legacy/downstream/transaction.js} +4 -4
  16. package/dist/legacy/downstream/transaction.js.map +1 -0
  17. package/dist/{esm/legacy/upstream/blocks/blocks.mjs → legacy/upstream/blocks/blocks.js} +2 -2
  18. package/dist/legacy/upstream/blocks/blocks.js.map +1 -0
  19. package/dist/legacy/upstream/blocks/index.js +7 -0
  20. package/dist/legacy/upstream/blocks/index.js.map +1 -0
  21. package/dist/{esm/legacy/upstream/blocks/upstream-events.mjs → legacy/upstream/blocks/upstream-events.js} +5 -5
  22. package/dist/legacy/upstream/blocks/upstream-events.js.map +1 -0
  23. package/dist/{esm/legacy/upstream/proofs.mjs → legacy/upstream/proofs.js} +1 -1
  24. package/dist/legacy/upstream/proofs.js.map +1 -0
  25. package/dist/{esm/legacy/upstream/upstream.mjs → legacy/upstream/upstream.js} +17 -17
  26. package/dist/legacy/upstream/upstream.js.map +1 -0
  27. package/dist/{esm/legacy/utils/create-opaque-token.mjs → legacy/utils/create-opaque-token.js} +1 -1
  28. package/dist/legacy/utils/create-opaque-token.js.map +1 -0
  29. package/dist/{esm/legacy/utils/fromShittyHeader.mjs → legacy/utils/fromShittyHeader.js} +1 -1
  30. package/dist/legacy/utils/fromShittyHeader.js.map +1 -0
  31. package/dist/{esm/legacy/utils/get-hasher-from-block.mjs → legacy/utils/get-hasher-from-block.js} +2 -2
  32. package/dist/legacy/utils/get-hasher-from-block.js.map +1 -0
  33. package/dist/{esm/legacy/utils/message-from-error.mjs → legacy/utils/message-from-error.js} +1 -1
  34. package/dist/legacy/utils/message-from-error.js.map +1 -0
  35. package/dist/{esm/legacy/utils/share-latest.mjs → legacy/utils/share-latest.js} +1 -1
  36. package/dist/legacy/utils/share-latest.js.map +1 -0
  37. package/dist/{esm/legacy/utils/with-latest-from-bp.mjs → legacy/utils/with-latest-from-bp.js} +20 -14
  38. package/dist/legacy/utils/with-latest-from-bp.js.map +1 -0
  39. package/dist/{esm/methods-router.mjs → methods-router.js} +3 -3
  40. package/dist/methods-router.js.map +1 -0
  41. package/dist/{esm/methods.mjs → methods.js} +1 -1
  42. package/dist/methods.js.map +1 -0
  43. package/dist/middleware.js +9 -0
  44. package/dist/middleware.js.map +1 -0
  45. package/dist/{esm/modern/fix-follow.mjs → modern/fix-follow.js} +5 -5
  46. package/dist/modern/fix-follow.js.map +1 -0
  47. package/dist/{esm/modern/fix-missing-initial-best.mjs → modern/fix-missing-initial-best.js} +3 -3
  48. package/dist/modern/fix-missing-initial-best.js.map +1 -0
  49. package/dist/{esm/modern/fix-premature-blocks.mjs → modern/fix-premature-blocks.js} +6 -6
  50. package/dist/modern/fix-premature-blocks.js.map +1 -0
  51. package/dist/{esm/modern/fix-unordered-blocks.mjs → modern/fix-unordered-blocks.js} +5 -5
  52. package/dist/modern/fix-unordered-blocks.js.map +1 -0
  53. package/dist/{esm/modern/fix-unordered-events.mjs → modern/fix-unordered-events.js} +2 -2
  54. package/dist/modern/fix-unordered-events.js.map +1 -0
  55. package/dist/modern/modern.js +21 -0
  56. package/dist/modern/modern.js.map +1 -0
  57. package/dist/{esm/modern/patch-chainhead-events.mjs → modern/patch-chainhead-events.js} +1 -1
  58. package/dist/modern/patch-chainhead-events.js.map +1 -0
  59. package/dist/{esm/modern/unpin-hash.mjs → modern/unpin-hash.js} +2 -2
  60. package/dist/modern/unpin-hash.js.map +1 -0
  61. package/dist/{esm/numeric-ids.mjs → numeric-ids.js} +1 -1
  62. package/dist/numeric-ids.js.map +1 -0
  63. package/dist/{esm/utils/get-async-middleware.mjs → utils/get-async-middleware.js} +1 -1
  64. package/dist/utils/get-async-middleware.js.map +1 -0
  65. package/dist/{esm/utils/utils.mjs → utils/utils.js} +1 -1
  66. package/dist/utils/utils.js.map +1 -0
  67. package/package.json +13 -23
  68. package/dist/esm/index.mjs +0 -13
  69. package/dist/esm/index.mjs.map +0 -1
  70. package/dist/esm/legacy/downstream/archive.mjs.map +0 -1
  71. package/dist/esm/legacy/downstream/chain-head.mjs.map +0 -1
  72. package/dist/esm/legacy/downstream/chainspec.mjs.map +0 -1
  73. package/dist/esm/legacy/downstream/downstream.mjs.map +0 -1
  74. package/dist/esm/legacy/downstream/storage.mjs.map +0 -1
  75. package/dist/esm/legacy/downstream/transaction.mjs.map +0 -1
  76. package/dist/esm/legacy/upstream/blocks/blocks.mjs.map +0 -1
  77. package/dist/esm/legacy/upstream/blocks/index.mjs +0 -7
  78. package/dist/esm/legacy/upstream/blocks/index.mjs.map +0 -1
  79. package/dist/esm/legacy/upstream/blocks/upstream-events.mjs.map +0 -1
  80. package/dist/esm/legacy/upstream/proofs.mjs.map +0 -1
  81. package/dist/esm/legacy/upstream/upstream.mjs.map +0 -1
  82. package/dist/esm/legacy/utils/create-opaque-token.mjs.map +0 -1
  83. package/dist/esm/legacy/utils/fromShittyHeader.mjs.map +0 -1
  84. package/dist/esm/legacy/utils/get-hasher-from-block.mjs.map +0 -1
  85. package/dist/esm/legacy/utils/message-from-error.mjs.map +0 -1
  86. package/dist/esm/legacy/utils/share-latest.mjs.map +0 -1
  87. package/dist/esm/legacy/utils/with-latest-from-bp.mjs.map +0 -1
  88. package/dist/esm/methods-router.mjs.map +0 -1
  89. package/dist/esm/methods.mjs.map +0 -1
  90. package/dist/esm/middleware.mjs +0 -24
  91. package/dist/esm/middleware.mjs.map +0 -1
  92. package/dist/esm/modern/fix-follow.mjs.map +0 -1
  93. package/dist/esm/modern/fix-missing-initial-best.mjs.map +0 -1
  94. package/dist/esm/modern/fix-premature-blocks.mjs.map +0 -1
  95. package/dist/esm/modern/fix-unordered-blocks.mjs.map +0 -1
  96. package/dist/esm/modern/fix-unordered-events.mjs.map +0 -1
  97. package/dist/esm/modern/modern.mjs +0 -21
  98. package/dist/esm/modern/modern.mjs.map +0 -1
  99. package/dist/esm/modern/patch-chainhead-events.mjs.map +0 -1
  100. package/dist/esm/modern/unpin-hash.mjs.map +0 -1
  101. package/dist/esm/numeric-ids.mjs.map +0 -1
  102. package/dist/esm/utils/get-async-middleware.mjs.map +0 -1
  103. package/dist/esm/utils/utils.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-opaque-token.mjs","sources":["../../../../src/legacy/utils/create-opaque-token.ts"],"sourcesContent":["let latestId = 1\nexport const createOpaqueToken = (): string => {\n // TODO: make this fancier\n return `${latestId++}${Date.now()}`\n}\n"],"names":[],"mappings":"AAAA,IAAI,QAAA,GAAW,CAAA;AACR,MAAM,oBAAoB,MAAc;AAE7C,EAAA,OAAO,CAAA,EAAG,QAAA,EAAU,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA;AACnC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fromShittyHeader.mjs","sources":["../../../../src/legacy/utils/fromShittyHeader.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAIO,MAAM,mBAAA,GACX,CAAC,MAAA,KACD,CAAC;AAAA,EACC,UAAA;AAAA,EACA,MAAA,EAAQ,SAAA;AAAA,EACR,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAAoB;AAClB,EAAA,MAAM,MAAA,GAAS,OAAO,SAAS,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AAE1C,EAAA,MAAM,YAAY,UAAA,CAAW;AAAA,IAC3B,QAAQ,UAAU,CAAA;AAAA,IAClB,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,IAClB,QAAQ,SAAS,CAAA;AAAA,IACjB,QAAQ,cAAc,CAAA;AAAA,IACtB,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,IAC9B,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAM,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,IAC7B,MAAA;AAAA,IACA,UAAA,EAAY,WAAW,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA,KAAM,MAAM,CAAC,CAAA;AAAA,IAC5C,MAAA,EAAQ,MAAM,SAAS;AAAA,GACzB;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-hasher-from-block.mjs","sources":["../../../../src/legacy/utils/get-hasher-from-block.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAIA,MAAM,OAAA,GAAU,CAAC,SAAA,EAAW,SAAS,CAAA;AACrC,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AAC3C,MAAM,QAAA,GAAW,CAAC,CAAA,KAA8B;AAC9C,EAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACxC,CAAA;AAEO,MAAM,qBACX,CAAC,UAAA,KACD,CAAC,IAAA,KACC,QAAQ,GAAA,CAAI,SAAA,CAAU,CAAC,EAAA,KAAO,GAAG,UAAU,CAAA,CAAE,IAAA,KAAS,IAAI,CAAC,CAAA,IAAK;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"message-from-error.mjs","sources":["../../../../src/legacy/utils/message-from-error.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAO,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAW;AACvC,EAAA,IAAI,CAAA,YAAa,KAAA,EAAO,OAAO,CAAA,CAAE,OAAA;AACjC,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,EAAU,OAAO,CAAA;AAClC,EAAA,OAAO,qBAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"share-latest.mjs","sources":["../../../../src/legacy/utils/share-latest.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"],"names":[],"mappings":";;AAEO,MAAM,cACX,WAAA,CAAY;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"with-latest-from-bp.mjs","sources":["../../../../src/legacy/utils/with-latest-from-bp.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEO,MAAM,gBAAA,GACX,CAAO,OAAA,KACP,CAAC,UACC,IAAI,UAAA,CAAmB,CAAC,QAAA,KAAa;AACnC,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,OAAmB,EAAC;AAExB,EAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU;AAAA,IACnC,KAAK,CAAA,EAAG;AACN,MAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,WAChB,QAAA,CAAS,IAAA,CAAK,CAAC,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,MAAM,CAAA,EAAG;AACP,MAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,QAAA,CAAS,QAAA,EAAS;AAAA,IACpB;AAAA,GACD,CAAA;AAED,EAAA,YAAA,CAAa,GAAA;AAAA,IACX,QAAQ,SAAA,CAAU;AAAA,MAChB,KAAK,CAAA,EAAG;AACN,QAAA,MAAA,GAAS,CAAA;AACT,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,IAAA,GAAO,CAAC,GAAG,IAAI,CAAA;AACrB,UAAA,IAAA,GAAO,IAAA;AACP,UAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAA,CAAS,KAAK,CAAC,MAAA,EAAQ,CAAC,CAAC,CAAC,CAAA;AAAA,QAChD;AAAA,MACF,CAAA;AAAA,MACA,MAAM,CAAA,EAAG;AACP,QAAA,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,MAClB,CAAA;AAAA,MACA,QAAA,GAAW;AACT,QAAA,IAAI,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,KAAA,CAAM,gBAAgB,CAAC,CAAA;AAAA,MACtD;AAAA,KACD;AAAA,GACH;AAEA,EAAA,OAAO,YAAA;AACT,CAAC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"methods-router.mjs","sources":["../../src/methods-router.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;AAKA,MAAM,WAAA,GAAc,aAAA;AACpB,MAAM,cACJ,CAAC,OAAA,KACD,CAAC,IAAA,KACD,CAAC,OAAO,MAAA,KAAW;AACjB,EAAA,MAAM,MAAA,GAAS,EAAE,OAAA,EAAQ;AACzB,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAW,GAAI,IAAA,CAAK,OAAO,MAAM,CAAA;AAC/C,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,KAAK,GAAA,EAAK;AACR,MAAA,IAAI,GAAA,CAAI,EAAA,IAAO,GAAA,CAAY,MAAA,KAAW,WAAA,EAAa;AACjD,QAAA,KAAA,CAAM,QAAQ,EAAE,EAAA,EAAI,IAAI,EAAA,EAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,MACvC,CAAA,WAAY,GAAG,CAAA;AAAA,IACjB;AAAA,GACF;AACF,CAAA;AAEK,MAAM,gBAAgB,CAC3B,aAAA,KAEA,kBAAA,CAAmB,CAAC,SAAS,OAAA,KAAY;AACvC,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,WAAA,GAA0B,IAAA;AAC9B,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAA,EAAA;AACA,IAAA,WAAA,GAAc,OAAA,CAAQ,WAAA,EAAa,EAAC,EAAG;AAAA,MACrC,SAAA,EAAW,CAAC,EAAE,OAAA,EAAQ,KAA6B;AACjD,QAAA,OAAA,CAAQ,MAAM,WAAA,CAAY,OAAO,GAAG,aAAA,CAAc,OAAO,CAAC,CAAC,CAAA;AAAA,MAC7D,CAAA;AAAA,MACA,SAAS,MAAM;AACb,QAAA,IAAI,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA;AAAA,aACvB;AACH,UAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,UAAA,EAAY,GAAG,CAAA;AACxC,UAAA,WAAA,GAAc,MAAM,aAAa,KAAK,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AACA,EAAA,UAAA,EAAW;AAEX,EAAA,OAAO,MAAM,WAAA,EAAY;AAC3B,CAAC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"methods.mjs","sources":["../../src/methods.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAAA,MAAM,SAAA,GAAY;AAAA,EAChB,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,QAAA,EAAU,EAAA;AAAA,EACV,MAAA,EAAQ,EAAA;AAAA,EACR,MAAA,EAAQ,EAAA;AAAA,EACR,aAAA,EAAe,EAAA;AAAA,EACf,OAAA,EAAS,EAAA;AAAA,EACT,QAAA,EAAU,EAAA;AAAA,EACV,KAAA,EAAO;AACT;AAEA,MAAM,OAAA,GAAU;AAAA,EACd,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,eAAA,EAAiB,EAAA;AAAA,EACjB,WAAA,EAAa,EAAA;AAAA,EACb,YAAA,EAAc,EAAA;AAAA,EACd,MAAA,EAAQ,EAAA;AAAA,EACR,WAAA,EAAa,EAAA;AAAA,EACb,OAAA,EAAS;AACX;AAEA,MAAM,WAAA,GAAc;AAAA,EAClB,SAAA,EAAW,EAAA;AAAA,EACX,IAAA,EAAM;AACR;AAEA,MAAM,SAAA,GAAY;AAAA,EAChB,SAAA,EAAW,EAAA;AAAA,EACX,WAAA,EAAa,EAAA;AAAA,EACb,UAAA,EAAY;AACd;AAEA,MAAA,CAAO,QAAQ,EAAE,SAAA,EAAW,WAAW,WAAA,EAAa,OAAA,EAAS,CAAA,CAAE,OAAA;AAAA,EAC7D,CAAC,CAAC,WAAA,EAAa,OAAO,CAAA,KAAM;AAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,UAAA,KAAe;AAC1C,MAAC,QAAgB,UAAU,CAAA,GAAI,CAAA,EAAG,WAAW,OAAO,UAAU,CAAA,CAAA;AAAA,IACjE,CAAC,CAAA;AAAA,EACH;AACF,CAAA;;;;"}
@@ -1,24 +0,0 @@
1
- import { withLegacy } from './legacy/downstream/downstream.mjs';
2
- import { methodsRouter } from './methods-router.mjs';
3
- import { modern } from './modern/modern.mjs';
4
- import './modern/fix-follow.mjs';
5
- import './modern/fix-premature-blocks.mjs';
6
- import './modern/fix-unordered-blocks.mjs';
7
- import './modern/fix-unordered-events.mjs';
8
- import './methods.mjs';
9
- import { apply } from './utils/utils.mjs';
10
- import { withNumericIds } from './numeric-ids.mjs';
11
-
12
- const modernGroups = [
13
- "chainHead",
14
- "transaction",
15
- "chainSpec"
16
- ].map((name) => `${name}_v1`);
17
- const isModern = (methods) => modernGroups.every((group) => methods.some((m) => m.startsWith(group)));
18
- const middleware = apply(
19
- withNumericIds,
20
- methodsRouter((methods) => isModern(methods) ? modern : withLegacy)
21
- );
22
-
23
- export { middleware };
24
- //# sourceMappingURL=middleware.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.mjs","sources":["../../src/middleware.ts"],"sourcesContent":["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 = [\n \"chainHead\",\n \"transaction\",\n \"chainSpec\" /*, \"archive\"*/,\n].map((name) => `${name}_v1`)\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":[],"mappings":";;;;;;;;;;;AAMA,MAAM,YAAA,GAAe;AAAA,EACnB,WAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK,CAAA;AAC5B,MAAM,QAAA,GAAW,CAAC,OAAA,KAChB,YAAA,CAAa,MAAM,CAAC,KAAA,KAAU,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,KAAK,CAAC,CAAC,CAAA;AAEjE,MAAM,UAAA,GAAa,KAAA;AAAA,EACxB,cAAA;AAAA,EACA,cAAc,CAAC,OAAA,KAAa,SAAS,OAAO,CAAA,GAAI,SAAS,UAAW;AACtE;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-follow.mjs","sources":["../../../src/modern/fix-follow.ts"],"sourcesContent":["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"],"names":["follow","unfollow"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-missing-initial-best.mjs","sources":["../../../src/modern/fix-missing-initial-best.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAqCA,MAAM,+BAAe,IAAI,GAAA,CAAI,CAAC,UAAA,EAAY,kBAAA,EAAoB,MAAM,CAAC,CAAA;AAE9D,MAAM,qBAAA,GAAoC,CAAC,IAAA,KAAS,CAAC,OAAO,MAAA,KAAW;AAC5E,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAY;AAC7C,EAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAwB;AACtD,EAAA,MAAM,SAAA,GACJ,CACE,EAAA,KAEF,CAAA,GAAI,IAAA,KAAS;AACV,IAAA,CAAC,oBAAA,EAAsB,iBAAiB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,KAAM;AACxD,MAAA,CAAA,CAAE,KAAA,EAAM;AAAA,IACV,CAAC,CAAA;AACD,IAAA,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,EACZ,CAAA;AAEF,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,YAAW,GAAI,IAAA,CAAK,CAAC,OAAA,KAAY;AAE3D,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAO,GAAI,OAAA;AAKvB,MAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,EAAE,CAAA,EAAG;AAChC,QAAA,oBAAA,CAAqB,OAAO,EAAE,CAAA;AAC9B,QAAA,iBAAA,CAAkB,GAAA,CAAI,QAAQ,MAAM;AAClC,UAAA,iBAAA,CAAkB,OAAO,MAAM,CAAA;AAAA,QACjC,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,EAAE,YAAA,EAAa,GAAK,OAAA,CAAgB,MAAA;AAC1C,MAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,GAAA,CAAI,YAAY,CAAA;AACjD,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,MAAA,GAAU,QAAgB,MAAA,CAAO,MAAA;AACvC,QAAA,MAAM,EAAE,OAAM,GAAI,MAAA;AAClB,QAAA,IAAI,UAAU,aAAA,EAAe;AAO3B,UAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,YAAA,iBAAA,CAAkB,OAAO,YAAY,CAAA;AACrC,YAAA,KAAA;AAAA,cACE,qBAAA;AAAA,gBACE,YAAA;AAAA,gBACA,kBAAA;AAAA,gBACA,MAAA;AAAA,gBACA,EAAE,aAAA,EAAe,MAAA,CAAO,oBAAA,CAAqB,EAAA,CAAG,EAAE,CAAA;AAAE;AACtD,aACF;AAAA,UACF,GAAG,GAAG,CAAA;AAEN,UAAA,iBAAA,CAAkB,GAAA,CAAI,cAAc,MAAM;AACxC,YAAA,iBAAA,CAAkB,OAAO,YAAY,CAAA;AACrC,YAAA,YAAA,CAAa,KAAK,CAAA;AAAA,UACpB,CAAC,CAAA;AAAA,QACH,CAAA,MAAA,IAAW,YAAA,CAAa,GAAA,CAAI,KAAK,GAAG,MAAA,EAAO;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,OAAO,CAAA;AAAA,EACf,CAAA,EAAG,SAAA,CAAU,MAAM,CAAC,CAAA;AAEpB,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,EAAU;AACb,MAAA,QAAQ,IAAI,MAAA;AAAQ,QAClB,KAAK,SAAA,CAAU,MAAA;AACb,UAAA,oBAAA,CAAqB,GAAA,CAAI,IAAI,EAAE,CAAA;AAC/B,UAAA;AAAA,QAEF,KAAK,SAAA,CAAU,QAAA;AACb,UAAA,iBAAA,CAAkB,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA,IAAI;AAAA;AAE3C,MAAA,YAAA,CAAa,GAAG,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,UAAA,EAAY,UAAU,UAAU;AAAA,GAClC;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-premature-blocks.mjs","sources":["../../../src/modern/fix-premature-blocks.ts"],"sourcesContent":["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"],"names":["follow","unpin","unfollow"],"mappings":";;AAqCA,MAAM,UAAEA,QAAA,SAAQC,OAAA,YAAOC,UAAA,EAAS,GAAI,SAAA;AAC7B,MAAM,kBAAA,GAAiC,CAAC,IAAA,KAAS,CAAC,OAAO,MAAA,KAAW;AACzE,EAAA,MAAM,oBAAA,uBAA2B,GAAA,EAAY;AAC7C,EAAA,MAAM,iBAAA,uBAAwB,GAAA,EAAyB;AACvD,EAAA,MAAM,eAAA,uBAAsB,GAAA,EAAgD;AAC5E,EAAA,MAAM,SAAA,GACJ,CACE,EAAA,KAEF,CAAA,GAAI,IAAA,KAAS;AACV,IAAA,CAAC,oBAAA,EAAsB,iBAAA,EAAmB,eAAe,CAAA,CAAE,OAAA;AAAA,MAC1D,CAAC,CAAA,KAAM;AACL,QAAA,CAAA,CAAE,KAAA,EAAM;AAAA,MACV;AAAA,KACF;AACA,IAAA,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,EACZ,CAAA;AAEF,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,YAAW,GAAI,IAAA,CAAK,CAAC,OAAA,KAAY;AAE3D,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,KAAA,CAAM,OAAO,CAAA;AACb,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAO,GAAI,OAAA;AAKvB,MAAA,IAAI,oBAAA,CAAqB,GAAA,CAAI,EAAE,CAAA,EAAG;AAChC,QAAA,oBAAA,CAAqB,OAAO,EAAE,CAAA;AAC9B,QAAA,iBAAA,CAAkB,GAAA,CAAI,MAAA,kBAAQ,IAAI,GAAA,EAAK,CAAA;AACvC,QAAA,eAAA,CAAgB,GAAA,CAAI,MAAA,kBAAQ,IAAI,GAAA,EAAK,CAAA;AACrC,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,EAAE,YAAA,EAAa,GAAK,OAAA,CAAgB,MAAA;AAC1C,MAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,GAAA,CAAI,YAAY,CAAA;AACvD,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAA;AACrD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,MAAA,GAAU,QAAgB,MAAA,CAAO,MAAA;AACvC,QAAA,MAAM,EAAE,OAAM,GAAI,MAAA;AAClB,QAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,UAAA,MAAA,CAAO,oBAAA,CAAqB,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC5C,YAAA,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,UACvB,CAAC,CAAA;AAAA,QACH;AAEA,QAAA,IAAI,UAAU,UAAA,EAAY;AACxB,UAAA,MAAM,EAAE,iBAAgB,GAAI,MAAA;AAC5B,UAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,eAAe,CAAA,EAAG;AACtC,YAAA,MAAM,IAAA,GAAO,YAAA,CAAa,GAAA,CAAI,eAAe,KAAK,EAAC;AACnD,YAAA,IAAA,CAAK,KAAK,OAAO,CAAA;AACjB,YAAA,YAAA,CAAa,GAAA,CAAI,iBAAiB,IAAI,CAAA;AACtC,YAAA;AAAA,UACF;AAEA,UAAA,MAAM,OAAO,MAAA,CAAO,SAAA;AACpB,UAAA,YAAA,CAAa,GAAA,CAAI,OAAO,SAAS,CAAA;AACjC,UAAA,KAAA,CAAM,OAAO,CAAA;AAEb,UAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AAC/C,UAAA,IAAI,iBAAA,EAAmB;AACrB,YAAA,YAAA,CAAa,OAAO,IAAI,CAAA;AACxB,YAAA,iBAAA,CAAkB,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACjC,cAAA,YAAA,CAAa,GAAA,CAAK,GAAA,CAAY,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AACrD,cAAA,KAAA,CAAM,GAAG,CAAA;AAAA,YACX,CAAC,CAAA;AAAA,UACH;AACA,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,UAAA,YAAA,CAAa,OAAO,YAAY,CAAA;AAChC,UAAA,eAAA,CAAgB,OAAO,YAAY,CAAA;AAAA,QACrC;AAAA,MACF;AACA,MAAA,KAAA,CAAM,OAAO,CAAA;AAAA,IACf;AAAA,EACF,CAAA,EAAG,SAAA,CAAU,MAAM,CAAC,CAAA;AAEpB,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAa;AACzB,IAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA;AAC1B,IAAA,QAAQ,IAAI,MAAA;AAAQ,MAClB,KAAKF,QAAA;AACH,QAAA,oBAAA,CAAqB,GAAA,CAAI,IAAI,EAAE,CAAA;AAC/B,QAAA;AAAA,MAEF,KAAKC,OAAA;AACH,QAAA,MAAM,CAAC,YAAA,EAAc,MAAM,CAAA,GAAI,GAAA,CAAI,MAAA;AACnC,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAU;AACxB,UAAA,iBAAA,CAAkB,GAAA,CAAI,YAAY,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA;AACjD,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA;AAAA,QACjD,CAAC,CAAA;AACD,QAAA;AAAA,MAEF,KAAKC,UAAA;AACH,QAAA,iBAAA,CAAkB,OAAO,KAAK,CAAA;AAC9B,QAAA,eAAA,CAAgB,OAAO,KAAK,CAAA;AAC5B,QAAA;AAAA;AAEJ,IAAA,YAAA,CAAa,GAAG,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAA,EAAY,UAAU,UAAU;AAAA,GAClC;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-unordered-blocks.mjs","sources":["../../../src/modern/fix-unordered-blocks.ts"],"sourcesContent":["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"],"names":["follow","unfollow"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fix-unordered-events.mjs","sources":["../../../src/modern/fix-unordered-events.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { followEnhancer } from './fix-follow.mjs';
2
- import { fixPrematureBlocks } from './fix-premature-blocks.mjs';
3
- import { fixUnorderedBlocks } from './fix-unordered-blocks.mjs';
4
- import { fixUnorderedEvents } from './fix-unordered-events.mjs';
5
- import { patchChainHeadEvents } from './patch-chainhead-events.mjs';
6
- import { unpinHash } from './unpin-hash.mjs';
7
- import { apply } from '../utils/utils.mjs';
8
- import { fixMissingInitialBest } from './fix-missing-initial-best.mjs';
9
-
10
- const modern = apply(
11
- fixUnorderedEvents,
12
- unpinHash,
13
- patchChainHeadEvents,
14
- fixPrematureBlocks,
15
- fixUnorderedBlocks,
16
- fixMissingInitialBest,
17
- followEnhancer
18
- );
19
-
20
- export { modern };
21
- //# sourceMappingURL=modern.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modern.mjs","sources":["../../../src/modern/modern.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;AASO,MAAM,MAAA,GAAS,KAAA;AAAA,EACpB,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"patch-chainhead-events.mjs","sources":["../../../src/modern/patch-chainhead-events.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAEO,MAAM,oBAAA,GAAmC,CAAC,IAAA,KAAS,CAAC,OAAO,MAAA,KAChE,IAAA,CAAK,CAAC,OAAA,KAAY;AAChB,EAAA,MAAM,MAAA,GAAU,QAAgB,MAAA,EAAQ,MAAA;AACxC,EAAA,IAAI,EAAE,IAAA,IAAQ,OAAA,CAAA,IAAY,MAAA,EAAQ;AAChC,IAAA,MAAM,EAAE,iBAAA,EAAmB,kBAAA,EAAoB,KAAA,EAAM,GAAI,MAAA;AACzD,IAAA,IAAI,KAAA,KAAU,WAAA,IAAe,KAAA,CAAM,OAAA,CAAQ,iBAAiB,CAAA;AAC1D,MAAA,MAAA,CAAO,oBAAoB,CAAC,GAAG,IAAI,GAAA,CAAI,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAAA,SAAA,IACzD,KAAA,KAAU,iBAAiB,kBAAA,EAAoB;AACtD,MAAA,MAAA,CAAO,oBAAA,GAAuB,CAAC,MAAA,CAAO,kBAAkB,CAAA;AACxD,MAAA,OAAO,MAAA,CAAO,kBAAA;AAAA,IAChB;AAAA,EACF;AACA,EAAA,KAAA,CAAM,OAAO,CAAA;AACf,CAAA,EAAG,MAAM;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"unpin-hash.mjs","sources":["../../../src/modern/unpin-hash.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAIO,MAAM,SAAA,GACX,CAAC,IAAA,KACD,CAAA,GAAI,IAAA,KAAS;AACX,EAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAO,YAAW,GAAI,IAAA,CAAK,GAAG,IAAI,CAAA;AAEhD,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAwB;AACpC,IAAA,MAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,GAAG,MAAK,GAAI,GAAA;AACxC,IAAA,IAAI,MAAA,IAAU,UAAU,KAAA,IAAS,MAAA,IAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG;AACnE,MAAA,MAAA,CAAO,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAM,GAAA,KAAQ;AAC/B,QAAA,KAAA,CAAM;AAAA,UACJ,GAAG,IAAA;AAAA,UACH,IAAI,GAAA,KAAQ,CAAA,GAAI,KAAK,CAAA,EAAG,EAAE,YAAY,GAAG,CAAA,CAAA;AAAA,UACzC,MAAA;AAAA,UACA,MAAA,EAAQ,CAAC,MAAA,CAAO,CAAC,GAAG,IAAI;AAAA,SACzB,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA,YAAa,GAAG,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAC5B;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"numeric-ids.mjs","sources":["../../src/numeric-ids.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAGO,MAAM,cAAA,GAA6B,CAAC,IAAA,KAAS,CAAC,OAAO,MAAA,KAAW;AACrE,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAuB;AACpD,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,gBAAA,CAAiB,KAAA,EAAM;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,UAAA,EAAW,GAAI,IAAA;AAAA,IACzC,CAAC,OAAA,KAAiB;AAChB,MAAA,MAAM,EAAE,IAAG,GAAI,OAAA;AACf,MAAA,IAAI,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,EAAA,GAAK,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA;AACpC,QAAA,gBAAA,CAAiB,OAAO,EAAE,CAAA;AAAA,MAC5B;AACA,MAAA,KAAA,CAAM,OAAO,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,CAAA,KAAM;AACL,MAAA,KAAA,EAAM;AACN,MAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACV;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,GAAA,KAAwB;AAC7B,MAAA,IAAI,GAAA,CAAI,OAAO,MAAA,EAAW;AACxB,QAAA,gBAAA,CAAiB,GAAA,CAAI,MAAA,EAAQ,GAAA,CAAI,EAAE,CAAA;AACnC,QAAA,GAAA,CAAI,EAAA,GAAK,MAAA,EAAA;AAAA,MACX;AACA,MAAA,YAAA,CAAa,GAAG,CAAA;AAAA,IAClB,CAAA;AAAA,IACA,UAAA,GAAa;AACX,MAAA,KAAA,EAAM;AACN,MAAA,UAAA,EAAW;AAAA,IACb;AAAA,GACF;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-async-middleware.mjs","sources":["../../../src/utils/get-async-middleware.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAKO,MAAM,qBACX,CACE,KAAA,KAKF,CAAC,IAAA,KACD,CAAC,cAAc,SAAA,KAAc;AAI3B,EAAA,IAAI,kBAAA,GAAoD,IAAA;AACxD,EAAA,IAAI,UAAiC,EAAC;AACtC,EAAA,IAAI,IAAA,GAAO,CAAC,GAAA,KAAwB;AAClC,IAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,OAAO,MAAM;AACf,IAAA,IAAA,GAAO,KAAA;AACP,IAAA,OAAA,GAAU,EAAC;AACX,IAAA,WAAA,EAAY;AACZ,IAAA,IAAA,GAAO,kBAAA,GAAqB,kBAAkB,WAAA,GAAc,IAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,IAAI,eAAA,GAAkB,CAAC,CAAA,KAAY;AACjC,IAAA,IAAA,EAAK;AACL,IAAA,SAAA,CAAU,CAAC,CAAA;AAAA,EACb,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,IAAA;AAAA,IACf,CAAC,GAAA,KAAQ,kBAAA,CAAmB,GAAG,CAAA;AAAA,IAC/B,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC;AAAA,GAC1B;AACA,EAAA,IAAI,EAAE,YAAW,GAAI,QAAA;AACrB,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,YAAA,CAAa,CAAC,gBAAA,KAAqB;AACrD,IAAA,kBAAA,GAAqB,gBAAA;AACrB,IAAA,OAAO,EAAE,GAAG,QAAA,EAAU,UAAA,EAAY,IAAA,EAAK;AAAA,EACzC,CAAC,CAAA;AAED,EAAA,IAAI,IAAA;AACF,IAAA,WAAA,GAAc,KAAA,CAAM,CAAC,EAAA,KAAO;AAC1B,MAAA,WAAA,GAAc,IAAA;AACd,MAAA,IAAI,CAAC,IAAI,eAAA,EAAgB;AAAA,WACpB;AACF,QAAA,CAAC,EAAE,IAAA,EAAM,UAAA,KAAe,EAAA,CAAG,CAAC,aAAa,YAAA,KAAiB;AACzD,UAAA,eAAA,GAAkB,CAAC,CAAA,KAAY;AAC7B,YAAA,IAAA,EAAK;AACL,YAAA,YAAA,CAAa,CAAC,CAAA;AAAA,UAChB,CAAA;AACA,UAAA,kBAAA,GAAqB,WAAA;AACrB,UAAA,OAAO,QAAA;AAAA,QACT,CAAC,CAAA,CAAE,YAAA,EAAc,SAAS,CAAA;AAC1B,QAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,QAAA,OAAA,GAAU,EAAC;AAAA,MACb;AAAA,IACF,GAAG,OAAO,CAAA;AAEZ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,MAAA,IAAA,CAAK,GAAG,CAAA;AAAA,IACV,CAAA;AAAA,IACA,YAAY,MAAM;AAChB,MAAA,IAAA,EAAK;AACL,MAAA,UAAA,EAAW;AAAA,IACb;AAAA,GACF;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../src/utils/utils.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;AAMO,MAAM,KAAA,GACX,CAAA,GAAI,WAAA,KACJ,CAAC,IAAA,KACC,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,GAAG,IAAI;AAEpC,MAAM,OAAA,GAAU,CAAe,KAAA,MAAc;AAAA,EAClD,OAAA,EAAS,KAAA;AAAA,EACT,GAAG;AACL,CAAA;AAEO,MAAM,qBAAA,GAAwB,CACnC,YAAA,EACA,KAAA,EACA,aACA,WAAA,GAAiB,OAEjB,OAAA,CAAQ;AAAA,EACN,MAAA,EAAQ,0BAAA;AAAA,EACR,MAAA,EAAQ;AAAA,IACN,YAAA;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,KAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG;AAAA;AACL;AAEJ,CAAC;;;;"}