@polkadot-api/ws-middleware 0.2.4-canary.d6be873 → 0.3.1-canary.ccfb151
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.
- package/dist/hybrid.js +102 -0
- package/dist/hybrid.js.map +1 -0
- package/dist/index.js +12 -1783
- package/dist/index.js.map +1 -1
- package/dist/{esm/legacy/downstream/archive.mjs → legacy/downstream/archive.js} +13 -13
- package/dist/legacy/downstream/archive.js.map +1 -0
- package/dist/{esm/legacy/downstream/chain-head.mjs → legacy/downstream/chain-head.js} +19 -19
- package/dist/legacy/downstream/chain-head.js.map +1 -0
- package/dist/{esm/legacy/downstream/chainspec.mjs → legacy/downstream/chainspec.js} +1 -1
- package/dist/legacy/downstream/chainspec.js.map +1 -0
- package/dist/{esm/legacy/downstream/downstream.mjs → legacy/downstream/downstream.js} +25 -18
- package/dist/legacy/downstream/downstream.js.map +1 -0
- package/dist/{esm/legacy/downstream/storage.mjs → legacy/downstream/storage.js} +1 -1
- package/dist/legacy/downstream/storage.js.map +1 -0
- package/dist/{esm/legacy/downstream/transaction.mjs → legacy/downstream/transaction.js} +4 -4
- package/dist/legacy/downstream/transaction.js.map +1 -0
- package/dist/{esm/legacy/upstream/blocks/blocks.mjs → legacy/upstream/blocks/blocks.js} +2 -2
- package/dist/legacy/upstream/blocks/blocks.js.map +1 -0
- package/dist/legacy/upstream/blocks/index.js +7 -0
- package/dist/legacy/upstream/blocks/index.js.map +1 -0
- package/dist/{esm/legacy/upstream/blocks/upstream-events.mjs → legacy/upstream/blocks/upstream-events.js} +5 -5
- package/dist/legacy/upstream/blocks/upstream-events.js.map +1 -0
- package/dist/{esm/legacy/upstream/proofs.mjs → legacy/upstream/proofs.js} +1 -1
- package/dist/legacy/upstream/proofs.js.map +1 -0
- package/dist/{esm/legacy/upstream/upstream.mjs → legacy/upstream/upstream.js} +17 -17
- package/dist/legacy/upstream/upstream.js.map +1 -0
- package/dist/{esm/legacy/utils/create-opaque-token.mjs → legacy/utils/create-opaque-token.js} +1 -1
- package/dist/legacy/utils/create-opaque-token.js.map +1 -0
- package/dist/{esm/legacy/utils/fromShittyHeader.mjs → legacy/utils/fromShittyHeader.js} +1 -1
- package/dist/legacy/utils/fromShittyHeader.js.map +1 -0
- package/dist/{esm/legacy/utils/get-hasher-from-block.mjs → legacy/utils/get-hasher-from-block.js} +2 -2
- package/dist/legacy/utils/get-hasher-from-block.js.map +1 -0
- package/dist/{esm/legacy/utils/message-from-error.mjs → legacy/utils/message-from-error.js} +1 -1
- package/dist/legacy/utils/message-from-error.js.map +1 -0
- package/dist/{esm/legacy/utils/share-latest.mjs → legacy/utils/share-latest.js} +1 -1
- package/dist/legacy/utils/share-latest.js.map +1 -0
- package/dist/{esm/legacy/utils/with-latest-from-bp.mjs → legacy/utils/with-latest-from-bp.js} +20 -14
- package/dist/legacy/utils/with-latest-from-bp.js.map +1 -0
- package/dist/{esm/methods-router.mjs → methods-router.js} +3 -3
- package/dist/methods-router.js.map +1 -0
- package/dist/{esm/methods.mjs → methods.js} +1 -1
- package/dist/methods.js.map +1 -0
- package/dist/middleware.js +9 -0
- package/dist/middleware.js.map +1 -0
- package/dist/{esm/modern/fix-follow.mjs → modern/fix-follow.js} +5 -5
- package/dist/modern/fix-follow.js.map +1 -0
- package/dist/{esm/modern/fix-missing-initial-best.mjs → modern/fix-missing-initial-best.js} +3 -3
- package/dist/modern/fix-missing-initial-best.js.map +1 -0
- package/dist/{esm/modern/fix-premature-blocks.mjs → modern/fix-premature-blocks.js} +6 -6
- package/dist/modern/fix-premature-blocks.js.map +1 -0
- package/dist/{esm/modern/fix-unordered-blocks.mjs → modern/fix-unordered-blocks.js} +5 -5
- package/dist/modern/fix-unordered-blocks.js.map +1 -0
- package/dist/{esm/modern/fix-unordered-events.mjs → modern/fix-unordered-events.js} +2 -2
- package/dist/modern/fix-unordered-events.js.map +1 -0
- package/dist/modern/modern.js +21 -0
- package/dist/modern/modern.js.map +1 -0
- package/dist/{esm/modern/patch-chainhead-events.mjs → modern/patch-chainhead-events.js} +1 -1
- package/dist/modern/patch-chainhead-events.js.map +1 -0
- package/dist/{esm/modern/unpin-hash.mjs → modern/unpin-hash.js} +2 -2
- package/dist/modern/unpin-hash.js.map +1 -0
- package/dist/{esm/numeric-ids.mjs → numeric-ids.js} +1 -1
- package/dist/numeric-ids.js.map +1 -0
- package/dist/{esm/utils/get-async-middleware.mjs → utils/get-async-middleware.js} +1 -1
- package/dist/utils/get-async-middleware.js.map +1 -0
- package/dist/{esm/utils/utils.mjs → utils/utils.js} +1 -1
- package/dist/utils/utils.js.map +1 -0
- package/package.json +13 -23
- package/dist/esm/index.mjs +0 -13
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/legacy/downstream/archive.mjs.map +0 -1
- package/dist/esm/legacy/downstream/chain-head.mjs.map +0 -1
- package/dist/esm/legacy/downstream/chainspec.mjs.map +0 -1
- package/dist/esm/legacy/downstream/downstream.mjs.map +0 -1
- package/dist/esm/legacy/downstream/storage.mjs.map +0 -1
- package/dist/esm/legacy/downstream/transaction.mjs.map +0 -1
- package/dist/esm/legacy/upstream/blocks/blocks.mjs.map +0 -1
- package/dist/esm/legacy/upstream/blocks/index.mjs +0 -7
- package/dist/esm/legacy/upstream/blocks/index.mjs.map +0 -1
- package/dist/esm/legacy/upstream/blocks/upstream-events.mjs.map +0 -1
- package/dist/esm/legacy/upstream/proofs.mjs.map +0 -1
- package/dist/esm/legacy/upstream/upstream.mjs.map +0 -1
- package/dist/esm/legacy/utils/create-opaque-token.mjs.map +0 -1
- package/dist/esm/legacy/utils/fromShittyHeader.mjs.map +0 -1
- package/dist/esm/legacy/utils/get-hasher-from-block.mjs.map +0 -1
- package/dist/esm/legacy/utils/message-from-error.mjs.map +0 -1
- package/dist/esm/legacy/utils/share-latest.mjs.map +0 -1
- package/dist/esm/legacy/utils/with-latest-from-bp.mjs.map +0 -1
- package/dist/esm/methods-router.mjs.map +0 -1
- package/dist/esm/methods.mjs.map +0 -1
- package/dist/esm/middleware.mjs +0 -24
- package/dist/esm/middleware.mjs.map +0 -1
- package/dist/esm/modern/fix-follow.mjs.map +0 -1
- package/dist/esm/modern/fix-missing-initial-best.mjs.map +0 -1
- package/dist/esm/modern/fix-premature-blocks.mjs.map +0 -1
- package/dist/esm/modern/fix-unordered-blocks.mjs.map +0 -1
- package/dist/esm/modern/fix-unordered-events.mjs.map +0 -1
- package/dist/esm/modern/modern.mjs +0 -21
- package/dist/esm/modern/modern.mjs.map +0 -1
- package/dist/esm/modern/patch-chainhead-events.mjs.map +0 -1
- package/dist/esm/modern/unpin-hash.mjs.map +0 -1
- package/dist/esm/numeric-ids.mjs.map +0 -1
- package/dist/esm/utils/get-async-middleware.mjs.map +0 -1
- package/dist/esm/utils/utils.mjs.map +0 -1
package/dist/hybrid.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
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(multiplexed);
|
|
26
|
+
return (onMsg, onHalt) => {
|
|
27
|
+
const modernConnection = modernProvider((message) => {
|
|
28
|
+
if ("error" in message && message.error.code === -32800) {
|
|
29
|
+
console.warn("Max follow connections received: chainHead_v1 disabled");
|
|
30
|
+
individualChecks.chainHead_v1 = false;
|
|
31
|
+
}
|
|
32
|
+
onMsg(message);
|
|
33
|
+
}, onHalt);
|
|
34
|
+
const legacyConnection = legacyProvider(onMsg, onHalt);
|
|
35
|
+
return {
|
|
36
|
+
send(message) {
|
|
37
|
+
for (const group of modernGroups) {
|
|
38
|
+
if (message.method.startsWith(group)) {
|
|
39
|
+
if (individualChecks[group]) {
|
|
40
|
+
modernConnection.send(message);
|
|
41
|
+
} else {
|
|
42
|
+
legacyConnection.send(message);
|
|
43
|
+
}
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
modernConnection.send(message);
|
|
48
|
+
},
|
|
49
|
+
disconnect() {
|
|
50
|
+
modernConnection.disconnect();
|
|
51
|
+
legacyConnection.disconnect();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
const multiplex = (base) => {
|
|
58
|
+
const halt$ = new Subject();
|
|
59
|
+
const msg$ = new Subject();
|
|
60
|
+
let refCount = 0;
|
|
61
|
+
let baseConnection = null;
|
|
62
|
+
return (onMsg, onHalt) => {
|
|
63
|
+
refCount++;
|
|
64
|
+
baseConnection ?? (baseConnection = base(
|
|
65
|
+
(msg) => msg$.next(msg),
|
|
66
|
+
(e) => halt$.next(e)
|
|
67
|
+
));
|
|
68
|
+
const notificationSub = msg$.pipe(filter((v) => v.id == null)).subscribe(onMsg);
|
|
69
|
+
const haltSub = halt$.subscribe(onHalt);
|
|
70
|
+
const responseSubs = /* @__PURE__ */ new Set();
|
|
71
|
+
return {
|
|
72
|
+
send(message) {
|
|
73
|
+
if (message.id == null) {
|
|
74
|
+
return baseConnection?.send(message);
|
|
75
|
+
}
|
|
76
|
+
const id = message.id;
|
|
77
|
+
const responseSub = msg$.pipe(
|
|
78
|
+
filter((r) => r.id === id),
|
|
79
|
+
take(1)
|
|
80
|
+
).subscribe((msg) => {
|
|
81
|
+
onMsg(msg);
|
|
82
|
+
if (!responseSub) throw new Error("unreachable");
|
|
83
|
+
responseSubs.delete(responseSub);
|
|
84
|
+
});
|
|
85
|
+
responseSubs.add(responseSub);
|
|
86
|
+
baseConnection?.send(message);
|
|
87
|
+
},
|
|
88
|
+
disconnect() {
|
|
89
|
+
notificationSub.unsubscribe();
|
|
90
|
+
haltSub.unsubscribe();
|
|
91
|
+
responseSubs.forEach((s) => s.unsubscribe());
|
|
92
|
+
refCount--;
|
|
93
|
+
if (refCount === 0) {
|
|
94
|
+
baseConnection?.disconnect();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export { hybridMiddleware };
|
|
102
|
+
//# sourceMappingURL=hybrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid.js","sources":["../src/hybrid.ts"],"sourcesContent":["import {\n JsonRpcConnection,\n JsonRpcMessage,\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\"\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(multiplexed)\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: Middleware = (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 (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(filter((v) => v.id == null))\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 }\n },\n }\n }\n}\n"],"names":[],"mappings":"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"}
|