@polkadot-api/ws-middleware 0.2.4-canary.d6be873 → 0.3.1-canary.63b8d92

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 +111 -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
package/dist/hybrid.js ADDED
@@ -0,0 +1,111 @@
1
+ import { Subject, filter, take } from 'rxjs';
2
+ import { withLegacy } from './legacy/downstream/downstream.js';
3
+ import { modern } from './modern/modern.js';
4
+ import './modern/fix-follow.js';
5
+ import './modern/fix-premature-blocks.js';
6
+ import './modern/fix-unordered-blocks.js';
7
+ import './modern/fix-unordered-events.js';
8
+ import './methods.js';
9
+ import '@polkadot-api/raw-client';
10
+ import '@polkadot-api/utils';
11
+
12
+ const modernGroups = ["chainHead", "transaction", "chainSpec", "archive"].map(
13
+ (name) => `${name}_v1`
14
+ );
15
+ const hybridMiddleware = (methods) => {
16
+ const individualChecks = Object.fromEntries(
17
+ modernGroups.map((group) => [
18
+ group,
19
+ !!methods.find((v) => v.startsWith(group))
20
+ ])
21
+ );
22
+ return (base) => {
23
+ const multiplexed = multiplex(base);
24
+ const modernProvider = modern(multiplexed());
25
+ const legacyProvider = withLegacy(
26
+ multiplexed(
27
+ (req) => ["chainHead_v1", "archive_v1"].every(
28
+ (prefix) => !req.method.startsWith(prefix)
29
+ )
30
+ )
31
+ );
32
+ return (onMsg, onHalt) => {
33
+ const modernConnection = modernProvider((message) => {
34
+ if ("error" in message && message.error.code === -32800) {
35
+ console.warn("Max follow connections received: chainHead_v1 disabled");
36
+ individualChecks.chainHead_v1 = false;
37
+ }
38
+ onMsg(message);
39
+ }, onHalt);
40
+ const legacyConnection = legacyProvider(onMsg, onHalt);
41
+ return {
42
+ send(message) {
43
+ for (const group of modernGroups) {
44
+ if (message.method.startsWith(group)) {
45
+ if (individualChecks[group]) {
46
+ modernConnection.send(message);
47
+ } else {
48
+ legacyConnection.send(message);
49
+ }
50
+ return;
51
+ }
52
+ }
53
+ modernConnection.send(message);
54
+ },
55
+ disconnect() {
56
+ modernConnection.disconnect();
57
+ legacyConnection.disconnect();
58
+ }
59
+ };
60
+ };
61
+ };
62
+ };
63
+ const multiplex = (base) => {
64
+ const halt$ = new Subject();
65
+ const msg$ = new Subject();
66
+ let refCount = 0;
67
+ let baseConnection = null;
68
+ return (notificationFilter = () => true) => (onMsg, onHalt) => {
69
+ refCount++;
70
+ baseConnection ?? (baseConnection = base(
71
+ (msg) => msg$.next(msg),
72
+ (e) => halt$.next(e)
73
+ ));
74
+ const notificationSub = msg$.pipe(
75
+ filter((v) => v.id == null && "method" in v && notificationFilter(v))
76
+ ).subscribe(onMsg);
77
+ const haltSub = halt$.subscribe(onHalt);
78
+ const responseSubs = /* @__PURE__ */ new Set();
79
+ return {
80
+ send(message) {
81
+ if (message.id == null) {
82
+ return baseConnection?.send(message);
83
+ }
84
+ const id = message.id;
85
+ const responseSub = msg$.pipe(
86
+ filter((r) => r.id === id),
87
+ take(1)
88
+ ).subscribe((msg) => {
89
+ onMsg(msg);
90
+ if (!responseSub) throw new Error("unreachable");
91
+ responseSubs.delete(responseSub);
92
+ });
93
+ responseSubs.add(responseSub);
94
+ baseConnection?.send(message);
95
+ },
96
+ disconnect() {
97
+ notificationSub.unsubscribe();
98
+ haltSub.unsubscribe();
99
+ responseSubs.forEach((s) => s.unsubscribe());
100
+ refCount--;
101
+ if (refCount === 0) {
102
+ baseConnection?.disconnect();
103
+ baseConnection = null;
104
+ }
105
+ }
106
+ };
107
+ };
108
+ };
109
+
110
+ export { hybridMiddleware };
111
+ //# sourceMappingURL=hybrid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid.js","sources":["../src/hybrid.ts"],"sourcesContent":["import {\n JsonRpcConnection,\n JsonRpcMessage,\n JsonRpcRequest,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { filter, Subject, Subscription, take } from \"rxjs\"\nimport { withLegacy } from \"./legacy\"\nimport { modern } from \"./modern\"\nimport { Middleware } from \"./types\"\nimport { InnerJsonRpcProvider } from \"@polkadot-api/json-rpc-provider-proxy\"\n\nconst modernGroups = [\"chainHead\", \"transaction\", \"chainSpec\", \"archive\"].map(\n (name) => `${name}_v1`,\n)\n\nexport const hybridMiddleware = (methods: string[]): Middleware => {\n const individualChecks = Object.fromEntries(\n modernGroups.map((group) => [\n group,\n !!methods.find((v) => v.startsWith(group)),\n ]),\n )\n\n return (base) => {\n const multiplexed = multiplex(base)\n const modernProvider = modern(multiplexed())\n const legacyProvider = withLegacy(\n multiplexed((req) =>\n [\"chainHead_v1\", \"archive_v1\"].every(\n (prefix) => !req.method.startsWith(prefix),\n ),\n ),\n )\n\n return (onMsg, onHalt) => {\n const modernConnection = modernProvider((message) => {\n if (\"error\" in message && message.error.code === -32800) {\n console.warn(\"Max follow connections received: chainHead_v1 disabled\")\n individualChecks.chainHead_v1 = false\n }\n onMsg(message)\n }, onHalt)\n const legacyConnection = legacyProvider(onMsg, onHalt)\n\n return {\n send(message) {\n for (const group of modernGroups) {\n if (message.method.startsWith(group)) {\n if (individualChecks[group]) {\n modernConnection.send(message)\n } else {\n legacyConnection.send(message)\n }\n return\n }\n }\n modernConnection.send(message)\n },\n disconnect() {\n modernConnection.disconnect()\n legacyConnection.disconnect()\n },\n }\n }\n }\n}\n\nconst multiplex: (\n base: InnerJsonRpcProvider,\n) => (\n notificationFilter?: (notification: JsonRpcRequest) => boolean,\n) => InnerJsonRpcProvider = (base) => {\n const halt$ = new Subject<any>()\n const msg$ = new Subject<JsonRpcMessage>()\n\n let refCount = 0\n let baseConnection: JsonRpcConnection | null = null\n\n return (notificationFilter = () => true) =>\n (onMsg, onHalt) => {\n refCount++\n baseConnection ??= base(\n (msg) => msg$.next(msg),\n (e) => halt$.next(e),\n )\n\n const notificationSub = msg$\n .pipe(\n filter((v) => v.id == null && \"method\" in v && notificationFilter(v)),\n )\n .subscribe(onMsg)\n const haltSub = halt$.subscribe(onHalt)\n const responseSubs = new Set<Subscription>()\n\n return {\n send(message) {\n if (message.id == null) {\n return baseConnection?.send(message)\n }\n const id = message.id\n const responseSub = msg$\n .pipe(\n filter((r) => r.id === id),\n take(1),\n )\n .subscribe((msg) => {\n onMsg(msg)\n if (!responseSub) throw new Error(\"unreachable\")\n responseSubs.delete(responseSub)\n })\n responseSubs.add(responseSub)\n baseConnection?.send(message)\n },\n disconnect() {\n notificationSub.unsubscribe()\n haltSub.unsubscribe()\n responseSubs.forEach((s) => s.unsubscribe())\n refCount--\n if (refCount === 0) {\n baseConnection?.disconnect()\n baseConnection = null\n }\n },\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWA,MAAM,eAAe,CAAC,WAAA,EAAa,aAAA,EAAe,WAAA,EAAa,SAAS,CAAA,CAAE,GAAA;AAAA,EACxE,CAAC,IAAA,KAAS,CAAA,EAAG,IAAI,CAAA,GAAA;AACnB,CAAA;AAEO,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAAkC;AACjE,EAAA,MAAM,mBAAmB,MAAA,CAAO,WAAA;AAAA,IAC9B,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,MAC1B,KAAA;AAAA,MACA,CAAC,CAAC,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,KAAK,CAAC;AAAA,KAC1C;AAAA,GACH;AAEA,EAAA,OAAO,CAAC,IAAA,KAAS;AACf,IAAA,MAAM,WAAA,GAAc,UAAU,IAAI,CAAA;AAClC,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,WAAA,EAAa,CAAA;AAC3C,IAAA,MAAM,cAAA,GAAiB,UAAA;AAAA,MACrB,WAAA;AAAA,QAAY,CAAC,GAAA,KACX,CAAC,cAAA,EAAgB,YAAY,CAAA,CAAE,KAAA;AAAA,UAC7B,CAAC,MAAA,KAAW,CAAC,GAAA,CAAI,MAAA,CAAO,WAAW,MAAM;AAAA;AAC3C;AACF,KACF;AAEA,IAAA,OAAO,CAAC,OAAO,MAAA,KAAW;AACxB,MAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,CAAC,OAAA,KAAY;AACnD,QAAA,IAAI,OAAA,IAAW,OAAA,IAAW,OAAA,CAAQ,KAAA,CAAM,SAAS,MAAA,EAAQ;AACvD,UAAA,OAAA,CAAQ,KAAK,wDAAwD,CAAA;AACrE,UAAA,gBAAA,CAAiB,YAAA,GAAe,KAAA;AAAA,QAClC;AACA,QAAA,KAAA,CAAM,OAAO,CAAA;AAAA,MACf,GAAG,MAAM,CAAA;AACT,MAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAErD,MAAA,OAAO;AAAA,QACL,KAAK,OAAA,EAAS;AACZ,UAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,YAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,EAAG;AACpC,cAAA,IAAI,gBAAA,CAAiB,KAAK,CAAA,EAAG;AAC3B,gBAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,cAC/B,CAAA,MAAO;AACL,gBAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,cAC/B;AACA,cAAA;AAAA,YACF;AAAA,UACF;AACA,UAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAAA,QAC/B,CAAA;AAAA,QACA,UAAA,GAAa;AACX,UAAA,gBAAA,CAAiB,UAAA,EAAW;AAC5B,UAAA,gBAAA,CAAiB,UAAA,EAAW;AAAA,QAC9B;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF,CAAA;AACF;AAEA,MAAM,SAAA,GAIsB,CAAC,IAAA,KAAS;AACpC,EAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,EAAa;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAI,OAAA,EAAwB;AAEzC,EAAA,IAAI,QAAA,GAAW,CAAA;AACf,EAAA,IAAI,cAAA,GAA2C,IAAA;AAE/C,EAAA,OAAO,CAAC,kBAAA,GAAqB,MAAM,IAAA,KACjC,CAAC,OAAO,MAAA,KAAW;AACjB,IAAA,QAAA,EAAA;AACA,IAAA,cAAA,KAAA,cAAA,GAAmB,IAAA;AAAA,MACjB,CAAC,GAAA,KAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,MACtB,CAAC,CAAA,KAAM,KAAA,CAAM,IAAA,CAAK,CAAC;AAAA,KACrB,CAAA;AAEA,IAAA,MAAM,kBAAkB,IAAA,CACrB,IAAA;AAAA,MACC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,IAAM,QAAQ,QAAA,IAAY,CAAA,IAAK,kBAAA,CAAmB,CAAC,CAAC;AAAA,KACtE,CACC,UAAU,KAAK,CAAA;AAClB,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,SAAA,CAAU,MAAM,CAAA;AACtC,IAAA,MAAM,YAAA,uBAAmB,GAAA,EAAkB;AAE3C,IAAA,OAAO;AAAA,MACL,KAAK,OAAA,EAAS;AACZ,QAAA,IAAI,OAAA,CAAQ,MAAM,IAAA,EAAM;AACtB,UAAA,OAAO,cAAA,EAAgB,KAAK,OAAO,CAAA;AAAA,QACrC;AACA,QAAA,MAAM,KAAK,OAAA,CAAQ,EAAA;AACnB,QAAA,MAAM,cAAc,IAAA,CACjB,IAAA;AAAA,UACC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAAA,UACzB,KAAK,CAAC;AAAA,SACR,CACC,SAAA,CAAU,CAAC,GAAA,KAAQ;AAClB,UAAA,KAAA,CAAM,GAAG,CAAA;AACT,UAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,MAAM,aAAa,CAAA;AAC/C,UAAA,YAAA,CAAa,OAAO,WAAW,CAAA;AAAA,QACjC,CAAC,CAAA;AACH,QAAA,YAAA,CAAa,IAAI,WAAW,CAAA;AAC5B,QAAA,cAAA,EAAgB,KAAK,OAAO,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,UAAA,GAAa;AACX,QAAA,eAAA,CAAgB,WAAA,EAAY;AAC5B,QAAA,OAAA,CAAQ,WAAA,EAAY;AACpB,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AAC3C,QAAA,QAAA,EAAA;AACA,QAAA,IAAI,aAAa,CAAA,EAAG;AAClB,UAAA,cAAA,EAAgB,UAAA,EAAW;AAC3B,UAAA,cAAA,GAAiB,IAAA;AAAA,QACnB;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAA;AACJ,CAAA;;;;"}