@polkadot-api/ws-middleware 1.0.0-canary.3789023

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 (68) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/esm/index.mjs +12 -0
  4. package/dist/esm/index.mjs.map +1 -0
  5. package/dist/esm/legacy/downstream/archive.mjs +96 -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-premature-blocks.mjs +94 -0
  48. package/dist/esm/modern/fix-premature-blocks.mjs.map +1 -0
  49. package/dist/esm/modern/fix-unordered-blocks.mjs +100 -0
  50. package/dist/esm/modern/fix-unordered-blocks.mjs.map +1 -0
  51. package/dist/esm/modern/fix-unordered-events.mjs +101 -0
  52. package/dist/esm/modern/fix-unordered-events.mjs.map +1 -0
  53. package/dist/esm/modern/modern.mjs +19 -0
  54. package/dist/esm/modern/modern.mjs.map +1 -0
  55. package/dist/esm/modern/patch-chainhead-events.mjs +16 -0
  56. package/dist/esm/modern/patch-chainhead-events.mjs.map +1 -0
  57. package/dist/esm/modern/unpin-hash.mjs +22 -0
  58. package/dist/esm/modern/unpin-hash.mjs.map +1 -0
  59. package/dist/esm/numeric-ids.mjs +37 -0
  60. package/dist/esm/numeric-ids.mjs.map +1 -0
  61. package/dist/esm/utils/get-async-middleware.mjs +60 -0
  62. package/dist/esm/utils/get-async-middleware.mjs.map +1 -0
  63. package/dist/esm/utils/utils.mjs +11 -0
  64. package/dist/esm/utils/utils.mjs.map +1 -0
  65. package/dist/index.d.ts +27 -0
  66. package/dist/index.js +1706 -0
  67. package/dist/index.js.map +1 -0
  68. package/package.json +57 -0
@@ -0,0 +1,100 @@
1
+ import { chainHead } from '../methods.mjs';
2
+
3
+ const { follow, unpin, unfollow } = chainHead;
4
+ const fixUnorderedBlocks = (base) => (onMsg, onHalt) => {
5
+ const pendingChainHeadSubs = /* @__PURE__ */ new Set();
6
+ const pinnedBlocksInSub = /* @__PURE__ */ new Map();
7
+ const uknownBlocksNotifications = /* @__PURE__ */ new Map();
8
+ const withClear = (fn) => (...args) => {
9
+ [
10
+ pendingChainHeadSubs,
11
+ pinnedBlocksInSub,
12
+ uknownBlocksNotifications
13
+ ].forEach((x) => {
14
+ x.clear();
15
+ });
16
+ fn(...args);
17
+ };
18
+ const { send: originalSend, disconnect } = base((message) => {
19
+ if ("id" in message) {
20
+ onMsg(message);
21
+ const { id, result } = message;
22
+ if (pendingChainHeadSubs.has(id)) {
23
+ pendingChainHeadSubs.delete(id);
24
+ pinnedBlocksInSub.set(result, /* @__PURE__ */ new Set());
25
+ uknownBlocksNotifications.set(result, /* @__PURE__ */ new Map());
26
+ return;
27
+ }
28
+ } else {
29
+ const { subscription } = message.params;
30
+ const pinnedBlocks = pinnedBlocksInSub.get(subscription);
31
+ const premature = uknownBlocksNotifications.get(subscription);
32
+ if (pinnedBlocks) {
33
+ const result = message.params.result;
34
+ const { event } = result;
35
+ if (event === "initialized") {
36
+ result.finalizedBlockHashes.forEach((hash) => {
37
+ pinnedBlocks.add(hash);
38
+ });
39
+ }
40
+ if (event === "finalized") {
41
+ result.prunedBlockHashes = result.prunedBlockHashes.filter(
42
+ (x) => pinnedBlocks.has(x)
43
+ );
44
+ }
45
+ if (event === "newBlock") {
46
+ pinnedBlocks.add(result.blockHash);
47
+ const hash = result.blockHash;
48
+ const missing = premature.get(hash);
49
+ if (missing) {
50
+ premature.delete(hash);
51
+ onMsg(message);
52
+ Promise.resolve().then(() => {
53
+ onMsg(missing);
54
+ });
55
+ return;
56
+ }
57
+ }
58
+ if (event === "bestBlockChanged") {
59
+ const hash = result.bestBlockHash;
60
+ if (!pinnedBlocks.has(hash)) {
61
+ uknownBlocksNotifications.get(subscription).set(hash, message);
62
+ return;
63
+ }
64
+ }
65
+ if (event === "stop") {
66
+ pinnedBlocks.delete(subscription);
67
+ uknownBlocksNotifications.delete(subscription);
68
+ }
69
+ }
70
+ onMsg(message);
71
+ }
72
+ }, withClear(onHalt));
73
+ const send = (msg) => {
74
+ const subId = msg.params[0];
75
+ switch (msg.method) {
76
+ case follow:
77
+ pendingChainHeadSubs.add(msg.id);
78
+ break;
79
+ case unpin:
80
+ const [subscription, blocks] = msg.params;
81
+ blocks.forEach((block) => {
82
+ pinnedBlocksInSub.get(subscription)?.delete(block);
83
+ uknownBlocksNotifications.get(subscription)?.delete(block);
84
+ });
85
+ break;
86
+ case unfollow:
87
+ pinnedBlocksInSub.delete(subId);
88
+ uknownBlocksNotifications.delete(subId);
89
+ break;
90
+ }
91
+ originalSend(msg);
92
+ };
93
+ return {
94
+ send,
95
+ disconnect: withClear(disconnect)
96
+ };
97
+ };
98
+
99
+ export { fixUnorderedBlocks };
100
+ //# sourceMappingURL=fix-unordered-blocks.mjs.map
@@ -0,0 +1 @@
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":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { chainHead } from '../methods.mjs';
2
+
3
+ const { follow, body, call, storage, unfollow, stopOperation } = chainHead;
4
+ const terminalOperationEvents = new Set(
5
+ ["BodyDone", "CallDone", "StorageDone", "Inaccessible", "Error"].map(
6
+ (x) => "operation" + x
7
+ )
8
+ );
9
+ const isTerminalNotification = (msg) => terminalOperationEvents.has(msg.params?.result?.event);
10
+ const fixUnorderedEvents = (base) => (onMsg, onHalt) => {
11
+ const pendingChainHeadSubs = /* @__PURE__ */ new Set();
12
+ const pendingOperationIds = /* @__PURE__ */ new Map();
13
+ const activeOperationIds = /* @__PURE__ */ new Map();
14
+ const uknownOperationNotifications = /* @__PURE__ */ new Map();
15
+ const withClear = (fn) => (...args) => {
16
+ [
17
+ pendingChainHeadSubs,
18
+ pendingOperationIds,
19
+ activeOperationIds,
20
+ uknownOperationNotifications
21
+ ].forEach((x) => {
22
+ x.clear();
23
+ });
24
+ fn(...args);
25
+ };
26
+ const { send: originalSend, disconnect } = base((message) => {
27
+ if ("id" in message) {
28
+ onMsg(message);
29
+ const { id, result } = message;
30
+ if (pendingChainHeadSubs.has(id)) {
31
+ pendingChainHeadSubs.delete(id);
32
+ activeOperationIds.set(result, /* @__PURE__ */ new Set());
33
+ uknownOperationNotifications.set(result, /* @__PURE__ */ new Map());
34
+ return;
35
+ }
36
+ const subId = pendingOperationIds.get(id);
37
+ if (subId !== void 0) {
38
+ pendingOperationIds.delete(id);
39
+ const opId = message.result?.operationId;
40
+ if (opId !== void 0 && activeOperationIds.has(subId)) {
41
+ const subOperations = activeOperationIds.get(subId);
42
+ subOperations.add(opId);
43
+ const pendingNotifications = uknownOperationNotifications.get(subId)?.get(opId);
44
+ if (pendingNotifications) {
45
+ pendingNotifications.forEach(onMsg);
46
+ uknownOperationNotifications.get(subId).delete(opId);
47
+ if (isTerminalNotification(pendingNotifications.at(-1)))
48
+ subOperations.delete(opId);
49
+ }
50
+ }
51
+ }
52
+ } else {
53
+ const { subscription, result } = message.params;
54
+ const operationIds = activeOperationIds.get(subscription);
55
+ if (operationIds) {
56
+ const { operationId } = message.params.result;
57
+ if (operationId !== void 0) {
58
+ if (!operationIds.has(operationId)) {
59
+ const subscriptionPending = uknownOperationNotifications.get(subscription);
60
+ const pendingMessages = subscriptionPending.get(operationId) ?? [];
61
+ pendingMessages.push(message);
62
+ subscriptionPending.set(operationId, pendingMessages);
63
+ return;
64
+ } else if (isTerminalNotification(message))
65
+ operationIds.delete(operationId);
66
+ } else if (result?.event === "stop") {
67
+ activeOperationIds.delete(subscription);
68
+ uknownOperationNotifications.delete(subscription);
69
+ }
70
+ }
71
+ onMsg(message);
72
+ }
73
+ }, withClear(onHalt));
74
+ const send = (msg) => {
75
+ const subId = msg.params[0];
76
+ switch (msg.method) {
77
+ case follow:
78
+ pendingChainHeadSubs.add(msg.id);
79
+ break;
80
+ case body:
81
+ case call:
82
+ case storage:
83
+ pendingOperationIds.set(msg.id, subId);
84
+ break;
85
+ case unfollow:
86
+ activeOperationIds.delete(subId);
87
+ uknownOperationNotifications.delete(subId);
88
+ break;
89
+ case stopOperation:
90
+ activeOperationIds.get(subId)?.delete(msg.params[1]);
91
+ }
92
+ originalSend(msg);
93
+ };
94
+ return {
95
+ send,
96
+ disconnect: withClear(disconnect)
97
+ };
98
+ };
99
+
100
+ export { fixUnorderedEvents };
101
+ //# sourceMappingURL=fix-unordered-events.mjs.map
@@ -0,0 +1 @@
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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"}
@@ -0,0 +1,19 @@
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
+
9
+ const modern = apply(
10
+ fixUnorderedEvents,
11
+ unpinHash,
12
+ patchChainHeadEvents,
13
+ fixPrematureBlocks,
14
+ fixUnorderedBlocks,
15
+ followEnhancer
16
+ );
17
+
18
+ export { modern };
19
+ //# sourceMappingURL=modern.mjs.map
@@ -0,0 +1 @@
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\"\n\nexport const modern = apply(\n fixUnorderedEvents,\n unpinHash,\n patchChainHeadEvents,\n fixPrematureBlocks,\n fixUnorderedBlocks,\n followEnhancer,\n)\n"],"names":[],"mappings":";;;;;;;;AAQO,MAAM,MAAA,GAAS,KAAA;AAAA,EACpB,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF;;;;"}
@@ -0,0 +1,16 @@
1
+ const patchChainHeadEvents = (base) => (onMsg, onHalt) => base((message) => {
2
+ const result = message.params?.result;
3
+ if (!("id" in message) && result) {
4
+ const { prunedBlockHashes, finalizedBlockHash, event } = result;
5
+ if (event === "finalized" && Array.isArray(prunedBlockHashes))
6
+ result.prunedBlockHashes = [...new Set(result.prunedBlockHashes)];
7
+ else if (event === "initialized" && finalizedBlockHash) {
8
+ result.finalizedBlockHashes = [result.finalizedBlockHash];
9
+ delete result.finalizedBlockHash;
10
+ }
11
+ }
12
+ onMsg(message);
13
+ }, onHalt);
14
+
15
+ export { patchChainHeadEvents };
16
+ //# sourceMappingURL=patch-chainhead-events.mjs.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,22 @@
1
+ import { chainHead } from '../methods.mjs';
2
+
3
+ const unpinHash = (base) => (...args) => {
4
+ const { send: _send, disconnect } = base(...args);
5
+ const send = (msg) => {
6
+ const { method, params, id, ...rest } = msg;
7
+ if (method == chainHead.unpin && params && Array.isArray(params[1])) {
8
+ params[1].forEach((hash, idx) => {
9
+ _send({
10
+ ...rest,
11
+ id: idx === 0 ? id : `${id}-patched-${idx}`,
12
+ method,
13
+ params: [params[0], hash]
14
+ });
15
+ });
16
+ } else _send(msg);
17
+ };
18
+ return { send, disconnect };
19
+ };
20
+
21
+ export { unpinHash };
22
+ //# sourceMappingURL=unpin-hash.mjs.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,37 @@
1
+ const withNumericIds = (base) => (onMsg, onHalt) => {
2
+ let nextId = 0;
3
+ const numberToOriginal = /* @__PURE__ */ new Map();
4
+ const clear = () => {
5
+ numberToOriginal.clear();
6
+ };
7
+ const { send: originalSend, disconnect } = base(
8
+ (message) => {
9
+ const { id } = message;
10
+ if (numberToOriginal.has(id)) {
11
+ message.id = numberToOriginal.get(id);
12
+ numberToOriginal.delete(id);
13
+ }
14
+ onMsg(message);
15
+ },
16
+ (e) => {
17
+ clear();
18
+ onHalt(e);
19
+ }
20
+ );
21
+ return {
22
+ send: (msg) => {
23
+ if (msg.id !== void 0) {
24
+ numberToOriginal.set(nextId, msg.id);
25
+ msg.id = nextId++;
26
+ }
27
+ originalSend(msg);
28
+ },
29
+ disconnect() {
30
+ clear();
31
+ disconnect();
32
+ }
33
+ };
34
+ };
35
+
36
+ export { withNumericIds };
37
+ //# sourceMappingURL=numeric-ids.mjs.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,60 @@
1
+ import { createClient } from '@polkadot-api/raw-client';
2
+ import { noop } from '@polkadot-api/utils';
3
+
4
+ const getAsyncMiddleware = (input) => (base) => (onMessageOut, onHaltOut) => {
5
+ let interceptedMessage = noop;
6
+ let pending = [];
7
+ let send = (msg) => {
8
+ pending.push(msg);
9
+ };
10
+ let stopRequest = noop;
11
+ let isOn = true;
12
+ let done = () => {
13
+ isOn = false;
14
+ pending = [];
15
+ stopRequest();
16
+ done = interceptedMessage = interceptedHalt = stopRequest = noop;
17
+ };
18
+ let interceptedHalt = (e) => {
19
+ done();
20
+ onHaltOut(e);
21
+ };
22
+ const innerCon = base(
23
+ (msg) => interceptedMessage(msg),
24
+ (e) => interceptedHalt(e)
25
+ );
26
+ let { disconnect } = innerCon;
27
+ const { request } = createClient((innerClientOnMsg) => {
28
+ interceptedMessage = innerClientOnMsg;
29
+ return { ...innerCon, disconnect: noop };
30
+ });
31
+ if (isOn)
32
+ stopRequest = input((cb) => {
33
+ stopRequest = noop;
34
+ if (!cb) interceptedHalt();
35
+ else {
36
+ ({ send, disconnect } = cb((onMiddleMsg, onMiddleHalt) => {
37
+ interceptedHalt = (e) => {
38
+ done();
39
+ onMiddleHalt(e);
40
+ };
41
+ interceptedMessage = onMiddleMsg;
42
+ return innerCon;
43
+ })(onMessageOut, onHaltOut));
44
+ pending.forEach(send);
45
+ pending = [];
46
+ }
47
+ }, request);
48
+ return {
49
+ send: (msg) => {
50
+ send(msg);
51
+ },
52
+ disconnect: () => {
53
+ done();
54
+ disconnect();
55
+ }
56
+ };
57
+ };
58
+
59
+ export { getAsyncMiddleware };
60
+ //# sourceMappingURL=get-async-middleware.mjs.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,11 @@
1
+ import '@polkadot-api/raw-client';
2
+ import '@polkadot-api/utils';
3
+
4
+ const apply = (...middlewares) => (base) => middlewares.reduce((a, b) => b(a), base);
5
+ const jsonObj = (input) => ({
6
+ jsonrpc: "2.0",
7
+ ...input
8
+ });
9
+
10
+ export { apply, jsonObj };
11
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
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;;;;"}
@@ -0,0 +1,27 @@
1
+ import { InnerJsonRpcProvider } from '@polkadot-api/json-rpc-provider-proxy';
2
+
3
+ type Middleware = (base: InnerJsonRpcProvider) => InnerJsonRpcProvider;
4
+
5
+ declare const middleware: Middleware;
6
+
7
+ declare const modern: Middleware;
8
+
9
+ declare const followEnhancer: Middleware;
10
+
11
+ declare const fixPrematureBlocks: Middleware;
12
+
13
+ declare const fixUnorderedBlocks: Middleware;
14
+
15
+ declare const fixUnorderedEvents: Middleware;
16
+
17
+ declare const patchChainHeadEvents: Middleware;
18
+
19
+ declare const unpinHash: Middleware;
20
+
21
+ declare const withLegacy: Middleware;
22
+
23
+ declare const methodsRouter: (getMiddleware: (methods: string[]) => Middleware) => Middleware;
24
+
25
+ declare const apply: (...middlewares: Middleware[]) => Middleware;
26
+
27
+ export { apply, fixPrematureBlocks, fixUnorderedBlocks, fixUnorderedEvents, followEnhancer, methodsRouter, middleware, modern, patchChainHeadEvents, unpinHash, withLegacy };