@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.
- 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
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { noop } from '@polkadot-api/utils';
|
|
2
|
-
import { createUpstream } from '../upstream/upstream.mjs';
|
|
3
|
-
import { createChainSpec } from './chainspec.mjs';
|
|
4
|
-
import { createChainHead } from './chain-head.mjs';
|
|
5
|
-
import { createTransactionFns } from './transaction.mjs';
|
|
6
|
-
import { createArchive } from './archive.mjs';
|
|
7
1
|
import { createClient } from '@polkadot-api/raw-client';
|
|
8
|
-
import {
|
|
2
|
+
import { noop } from '@polkadot-api/utils';
|
|
3
|
+
import { chainHead, chainSpec, archive, transaction } from '../../methods.js';
|
|
4
|
+
import { createUpstream } from '../upstream/upstream.js';
|
|
5
|
+
import { createArchive } from './archive.js';
|
|
6
|
+
import { createChainSpec } from './chainspec.js';
|
|
7
|
+
import { createTransactionFns } from './transaction.js';
|
|
8
|
+
import { createChainHead } from './chain-head.js';
|
|
9
9
|
|
|
10
10
|
const supportedMethods = new Set(
|
|
11
11
|
[chainHead, chainSpec, archive, transaction].map((methods) => Object.values(methods)).flat()
|
|
@@ -40,16 +40,22 @@ const withLegacy = (base) => (onMessage, onHalt) => {
|
|
|
40
40
|
const notification = (method, subscription, result) => {
|
|
41
41
|
jsonRpc({ method, params: { subscription, result } });
|
|
42
42
|
};
|
|
43
|
-
const
|
|
44
|
-
chainSpec: createChainSpec(upstream, reply, err),
|
|
45
|
-
chainHead: createChainHead(upstream, reply, err, notification),
|
|
46
|
-
archive: createArchive(upstream, reply, err, notification),
|
|
47
|
-
transaction: createTransactionFns(upstream, reply)
|
|
43
|
+
const groupsCtor = {
|
|
44
|
+
chainSpec: () => createChainSpec(upstream, reply, err),
|
|
45
|
+
chainHead: () => createChainHead(upstream, reply, err, notification),
|
|
46
|
+
archive: () => createArchive(upstream, reply, err, notification),
|
|
47
|
+
transaction: () => createTransactionFns(upstream, reply)
|
|
48
|
+
};
|
|
49
|
+
const groups = {};
|
|
50
|
+
const getGroup = (name) => {
|
|
51
|
+
if (name in groups) return groups[name];
|
|
52
|
+
if (name in groupsCtor) return groups[name] = groupsCtor[name]();
|
|
53
|
+
return null;
|
|
48
54
|
};
|
|
49
55
|
clean = () => {
|
|
50
|
-
groups.chainHead
|
|
51
|
-
groups.archive
|
|
52
|
-
groups.transaction
|
|
56
|
+
groups.chainHead?.stop();
|
|
57
|
+
groups.archive?.stop();
|
|
58
|
+
groups.transaction?.stop();
|
|
53
59
|
upstream.clean();
|
|
54
60
|
};
|
|
55
61
|
return {
|
|
@@ -78,9 +84,10 @@ ${JSON.stringify(parsedMsg)}`);
|
|
|
78
84
|
);
|
|
79
85
|
}
|
|
80
86
|
const [groupName] = method.split("_");
|
|
81
|
-
|
|
87
|
+
const group = getGroup(groupName);
|
|
88
|
+
if (group) {
|
|
82
89
|
try {
|
|
83
|
-
return
|
|
90
|
+
return group(id, method, params);
|
|
84
91
|
} catch (e) {
|
|
85
92
|
if (e !== null) throw e;
|
|
86
93
|
}
|
|
@@ -104,4 +111,4 @@ ${JSON.stringify(parsedMsg)}`);
|
|
|
104
111
|
};
|
|
105
112
|
|
|
106
113
|
export { withLegacy };
|
|
107
|
-
//# sourceMappingURL=downstream.
|
|
114
|
+
//# sourceMappingURL=downstream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downstream.js","sources":["../../../src/legacy/downstream/downstream.ts"],"sourcesContent":["import { JsonRpcMessage } from \"@polkadot-api/json-rpc-provider\"\nimport { createClient } from \"@polkadot-api/raw-client\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { archive, chainHead, chainSpec, transaction } from \"../../methods\"\nimport { Middleware } from \"../../types\"\nimport { createUpstream } from \"../upstream\"\nimport { createArchive } from \"./archive\"\nimport { createChainSpec } from \"./chainspec\"\nimport { createTransactionFns } from \"./transaction\"\nimport { createChainHead } from \"./chain-head\"\n\nconst supportedMethods = new Set(\n [chainHead, chainSpec, archive, transaction]\n .map((methods) => Object.values(methods) as string[])\n .flat(),\n)\n\nexport const withLegacy: Middleware = (base) => (onMessage, onHalt) => {\n let clean = noop\n let onMsg: (msg: JsonRpcMessage) => void = noop\n const innerConnection = base(\n (msg) => {\n onMsg(msg)\n },\n (e) => {\n clean()\n onHalt(e)\n },\n )\n const { disconnect, request } = createClient((_onMsg) => {\n onMsg = _onMsg\n return innerConnection\n }, onMessage)\n const upstream = createUpstream(request)\n\n const jsonRpc = (\n input:\n | ({ id: string } & (\n | { result: any }\n | { error: { code: number; message: string } }\n ))\n | {\n method: string\n params: { subscription: string; result: any }\n },\n ) =>\n onMessage({\n jsonrpc: \"2.0\",\n ...input,\n })\n\n const reply = (id: string, result: any) => {\n jsonRpc({ id, result })\n }\n const err = (id: string, code: number, message: string) => {\n jsonRpc({ id, error: { code, message } })\n }\n const notification = (method: string, subscription: string, result: any) => {\n jsonRpc({ method, params: { subscription, result } })\n }\n\n const groupsCtor: Record<string, () => any> = {\n chainSpec: () => createChainSpec(upstream, reply, err),\n chainHead: () => createChainHead(upstream, reply, err, notification),\n archive: () => createArchive(upstream, reply, err, notification),\n transaction: () => createTransactionFns(upstream, reply),\n }\n const groups: Record<string, any> = {}\n const getGroup = (name: string) => {\n if (name in groups) return groups[name]\n if (name in groupsCtor) return (groups[name] = groupsCtor[name]())\n return null\n }\n clean = () => {\n groups.chainHead?.stop()\n groups.archive?.stop()\n groups.transaction?.stop()\n upstream.clean()\n }\n\n return {\n send: (parsedMsg: any) => {\n if (!parsedMsg) return\n const { id, method, params } = parsedMsg\n if (\n (id !== null && typeof id !== \"string\" && typeof id !== \"number\") ||\n typeof method !== \"string\"\n ) {\n console.warn(`Invalid message:\\n${JSON.stringify(parsedMsg)}`)\n return\n }\n if (method === \"rpc_methods\") {\n return upstream.methods.subscribe(\n ({ methods }) => {\n reply(id, {\n methods: [\n ...supportedMethods,\n ...methods.filter((method) => !supportedMethods.has(method)),\n ],\n })\n },\n (e: any) => {\n console.error(e)\n err(id, -32602, \"Invalid\")\n },\n )\n }\n\n const [groupName] = method.split(\"_\")\n const group = getGroup(groupName)\n if (group) {\n try {\n return group(id, method, params)\n } catch (e) {\n if (e !== null) throw e\n }\n }\n\n upstream.request(\n method,\n params,\n (value) => {\n reply(id, value)\n },\n (e) => {\n err(id, e?.code || -1, e?.message || \"\")\n },\n )\n },\n disconnect: () => {\n clean()\n disconnect()\n },\n }\n}\n"],"names":["method"],"mappings":";;;;;;;;;AAWA,MAAM,mBAAmB,IAAI,GAAA;AAAA,EAC3B,CAAC,SAAA,EAAW,SAAA,EAAW,OAAA,EAAS,WAAW,CAAA,CACxC,GAAA,CAAI,CAAC,OAAA,KAAY,MAAA,CAAO,MAAA,CAAO,OAAO,CAAa,EACnD,IAAA;AACL,CAAA;AAEO,MAAM,UAAA,GAAyB,CAAC,IAAA,KAAS,CAAC,WAAW,MAAA,KAAW;AACrE,EAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,EAAA,IAAI,KAAA,GAAuC,IAAA;AAC3C,EAAA,MAAM,eAAA,GAAkB,IAAA;AAAA,IACtB,CAAC,GAAA,KAAQ;AACP,MAAA,KAAA,CAAM,GAAG,CAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,CAAA,KAAM;AACL,MAAA,KAAA,EAAM;AACN,MAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACV;AAAA,GACF;AACA,EAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI,YAAA,CAAa,CAAC,MAAA,KAAW;AACvD,IAAA,KAAA,GAAQ,MAAA;AACR,IAAA,OAAO,eAAA;AAAA,EACT,GAAG,SAAS,CAAA;AACZ,EAAA,MAAM,QAAA,GAAW,eAAe,OAAO,CAAA;AAEvC,EAAA,MAAM,OAAA,GAAU,CACd,KAAA,KAUA,SAAA,CAAU;AAAA,IACR,OAAA,EAAS,KAAA;AAAA,IACT,GAAG;AAAA,GACJ,CAAA;AAEH,EAAA,MAAM,KAAA,GAAQ,CAAC,EAAA,EAAY,MAAA,KAAgB;AACzC,IAAA,OAAA,CAAQ,EAAE,EAAA,EAAI,MAAA,EAAQ,CAAA;AAAA,EACxB,CAAA;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,EAAA,EAAY,IAAA,EAAc,OAAA,KAAoB;AACzD,IAAA,OAAA,CAAQ,EAAE,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,IAAW,CAAA;AAAA,EAC1C,CAAA;AACA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAgB,YAAA,EAAsB,MAAA,KAAgB;AAC1E,IAAA,OAAA,CAAQ,EAAE,MAAA,EAAQ,MAAA,EAAQ,EAAE,YAAA,EAAc,MAAA,IAAU,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAwC;AAAA,IAC5C,SAAA,EAAW,MAAM,eAAA,CAAgB,QAAA,EAAU,OAAO,GAAG,CAAA;AAAA,IACrD,WAAW,MAAM,eAAA,CAAgB,QAAA,EAAU,KAAA,EAAO,KAAK,YAAY,CAAA;AAAA,IACnE,SAAS,MAAM,aAAA,CAAc,QAAA,EAAU,KAAA,EAAO,KAAK,YAAY,CAAA;AAAA,IAC/D,WAAA,EAAa,MAAM,oBAAA,CAAqB,QAAA,EAAU,KAAK;AAAA,GACzD;AACA,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,KAAiB;AACjC,IAAA,IAAI,IAAA,IAAQ,MAAA,EAAQ,OAAO,MAAA,CAAO,IAAI,CAAA;AACtC,IAAA,IAAI,IAAA,IAAQ,YAAY,OAAQ,MAAA,CAAO,IAAI,CAAA,GAAI,UAAA,CAAW,IAAI,CAAA,EAAE;AAChE,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACA,EAAA,KAAA,GAAQ,MAAM;AACZ,IAAA,MAAA,CAAO,WAAW,IAAA,EAAK;AACvB,IAAA,MAAA,CAAO,SAAS,IAAA,EAAK;AACrB,IAAA,MAAA,CAAO,aAAa,IAAA,EAAK;AACzB,IAAA,QAAA,CAAS,KAAA,EAAM;AAAA,EACjB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,SAAA,KAAmB;AACxB,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAO,GAAI,SAAA;AAC/B,MAAA,IACG,EAAA,KAAO,IAAA,IAAQ,OAAO,EAAA,KAAO,QAAA,IAAY,OAAO,EAAA,KAAO,QAAA,IACxD,OAAO,MAAA,KAAW,QAAA,EAClB;AACA,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA;AAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAC,CAAA,CAAE,CAAA;AAC7D,QAAA;AAAA,MACF;AACA,MAAA,IAAI,WAAW,aAAA,EAAe;AAC5B,QAAA,OAAO,SAAS,OAAA,CAAQ,SAAA;AAAA,UACtB,CAAC,EAAE,OAAA,EAAQ,KAAM;AACf,YAAA,KAAA,CAAM,EAAA,EAAI;AAAA,cACR,OAAA,EAAS;AAAA,gBACP,GAAG,gBAAA;AAAA,gBACH,GAAG,QAAQ,MAAA,CAAO,CAACA,YAAW,CAAC,gBAAA,CAAiB,GAAA,CAAIA,OAAM,CAAC;AAAA;AAC7D,aACD,CAAA;AAAA,UACH,CAAA;AAAA,UACA,CAAC,CAAA,KAAW;AACV,YAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACf,YAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,SAAS,CAAA;AAAA,UAC3B;AAAA,SACF;AAAA,MACF;AAEA,MAAA,MAAM,CAAC,SAAS,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AACpC,MAAA,MAAM,KAAA,GAAQ,SAAS,SAAS,CAAA;AAChC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI;AACF,UAAA,OAAO,KAAA,CAAM,EAAA,EAAI,MAAA,EAAQ,MAAM,CAAA;AAAA,QACjC,SAAS,CAAA,EAAG;AACV,UAAA,IAAI,CAAA,KAAM,MAAM,MAAM,CAAA;AAAA,QACxB;AAAA,MACF;AAEA,MAAA,QAAA,CAAS,OAAA;AAAA,QACP,MAAA;AAAA,QACA,MAAA;AAAA,QACA,CAAC,KAAA,KAAU;AACT,UAAA,KAAA,CAAM,IAAI,KAAK,CAAA;AAAA,QACjB,CAAA;AAAA,QACA,CAAC,CAAA,KAAM;AACL,UAAA,GAAA,CAAI,IAAI,CAAA,EAAG,IAAA,IAAQ,EAAA,EAAI,CAAA,EAAG,WAAW,EAAE,CAAA;AAAA,QACzC;AAAA,OACF;AAAA,IACF,CAAA;AAAA,IACA,YAAY,MAAM;AAChB,MAAA,KAAA,EAAM;AACN,MAAA,UAAA,EAAW;AAAA,IACb;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sources":["../../../src/legacy/downstream/storage.ts"],"sourcesContent":["import { filter, map, merge } from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\n\nconst validStorageTypes = new Set([\n \"value\",\n \"hash\",\n \"closestDescendantMerkleValue\",\n \"descendantsValues\",\n \"descendantsHashes\",\n])\n\nexport type Items = Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"closestDescendantMerkleValue\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n}>\n\nexport const areItemsValid = (items: any): items is Items =>\n Array.isArray(items) &&\n items.every(\n (x) =>\n typeof x === \"object\" &&\n typeof x.key === \"string\" &&\n validStorageTypes.has(x.type),\n )\n\nexport const getStg$ = (\n upstream: ReturnType<typeof createUpstream>,\n at: string,\n items: Array<{\n key: string\n type:\n | \"value\"\n | \"hash\"\n | \"descendantsValues\"\n | \"descendantsHashes\"\n | \"closestDescendantMerkleValue\"\n }>,\n) =>\n merge(\n ...items.map(({ key, type }) => {\n switch (type) {\n case \"value\":\n return upstream.stgValue(at, key).pipe(\n filter(Boolean),\n map((value) => [\n {\n key,\n value,\n },\n ]),\n )\n case \"hash\":\n return upstream.stgHash(at, key).pipe(\n filter(Boolean),\n map((hash) => [\n {\n key,\n hash,\n },\n ]),\n )\n case \"descendantsValues\":\n return upstream\n .stgDescendantValues(at, key)\n .pipe(\n map((values) => values.map(([key, value]) => ({ key, value }))),\n )\n\n case \"descendantsHashes\":\n return upstream\n .stgDescendantHashes(at, key)\n .pipe(map((values) => values.map(([key, hash]) => ({ key, hash }))))\n\n case \"closestDescendantMerkleValue\":\n return upstream.stgClosestDescendant(at, key).pipe(\n filter(Boolean),\n map((closestDescendantMerkleValue) => [\n {\n key,\n closestDescendantMerkleValue,\n },\n ]),\n )\n }\n }),\n )\n"],"names":["key"],"mappings":";;AAGA,MAAM,iBAAA,uBAAwB,GAAA,CAAI;AAAA,EAChC,OAAA;AAAA,EACA,MAAA;AAAA,EACA,8BAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAYM,MAAM,gBAAgB,CAAC,KAAA,KAC5B,MAAM,OAAA,CAAQ,KAAK,KACnB,KAAA,CAAM,KAAA;AAAA,EACJ,CAAC,CAAA,KACC,OAAO,CAAA,KAAM,QAAA,IACb,OAAO,CAAA,CAAE,GAAA,KAAQ,QAAA,IACjB,iBAAA,CAAkB,GAAA,CAAI,CAAA,CAAE,IAAI;AAChC;AAEK,MAAM,OAAA,GAAU,CACrB,QAAA,EACA,EAAA,EACA,KAAA,KAUA,KAAA;AAAA,EACE,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,MAAK,KAAM;AAC9B,IAAA,QAAQ,IAAA;AAAM,MACZ,KAAK,OAAA;AACH,QAAA,OAAO,QAAA,CAAS,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA,CAAE,IAAA;AAAA,UAChC,OAAO,OAAO,CAAA;AAAA,UACd,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,YACb;AAAA,cACE,GAAA;AAAA,cACA;AAAA;AACF,WACD;AAAA,SACH;AAAA,MACF,KAAK,MAAA;AACH,QAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,EAAA,EAAI,GAAG,CAAA,CAAE,IAAA;AAAA,UAC/B,OAAO,OAAO,CAAA;AAAA,UACd,GAAA,CAAI,CAAC,IAAA,KAAS;AAAA,YACZ;AAAA,cACE,GAAA;AAAA,cACA;AAAA;AACF,WACD;AAAA,SACH;AAAA,MACF,KAAK,mBAAA;AACH,QAAA,OAAO,QAAA,CACJ,mBAAA,CAAoB,EAAA,EAAI,GAAG,CAAA,CAC3B,IAAA;AAAA,UACC,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,IAAI,CAAC,CAACA,IAAAA,EAAK,KAAK,OAAO,EAAE,GAAA,EAAAA,IAAAA,EAAK,KAAA,GAAQ,CAAC;AAAA,SAChE;AAAA,MAEJ,KAAK,mBAAA;AACH,QAAA,OAAO,QAAA,CACJ,oBAAoB,EAAA,EAAI,GAAG,EAC3B,IAAA,CAAK,GAAA,CAAI,CAAC,MAAA,KAAW,MAAA,CAAO,GAAA,CAAI,CAAC,CAACA,IAAAA,EAAK,IAAI,CAAA,MAAO,EAAE,KAAAA,IAAAA,EAAK,IAAA,EAAK,CAAE,CAAC,CAAC,CAAA;AAAA,MAEvE,KAAK,8BAAA;AACH,QAAA,OAAO,QAAA,CAAS,oBAAA,CAAqB,EAAA,EAAI,GAAG,CAAA,CAAE,IAAA;AAAA,UAC5C,OAAO,OAAO,CAAA;AAAA,UACd,GAAA,CAAI,CAAC,4BAAA,KAAiC;AAAA,YACpC;AAAA,cACE,GAAA;AAAA,cACA;AAAA;AACF,WACD;AAAA,SACH;AAAA;AACJ,EACF,CAAC;AACH;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { catchError, concat, timer, takeUntil, ignoreElements } from 'rxjs';
|
|
2
|
-
import { createOpaqueToken } from '../utils/create-opaque-token.
|
|
3
|
-
import { transaction } from '../../methods.
|
|
2
|
+
import { createOpaqueToken } from '../utils/create-opaque-token.js';
|
|
3
|
+
import { transaction } from '../../methods.js';
|
|
4
4
|
|
|
5
5
|
const { stop, broadcast } = transaction;
|
|
6
6
|
const createTransactionFns = (upstream, reply) => {
|
|
@@ -22,7 +22,7 @@ const createTransactionFns = (upstream, reply) => {
|
|
|
22
22
|
// This logic ensures that the subscription dies if an
|
|
23
23
|
// upstream error (like the client being destroyed) takes place
|
|
24
24
|
takeUntil(
|
|
25
|
-
upstream.finalized$.pipe(
|
|
25
|
+
upstream.subscribeBlocks().finalized$.pipe(
|
|
26
26
|
ignoreElements(),
|
|
27
27
|
catchError(() => {
|
|
28
28
|
ongoing.delete(token);
|
|
@@ -45,4 +45,4 @@ const createTransactionFns = (upstream, reply) => {
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
export { createTransactionFns };
|
|
48
|
-
//# sourceMappingURL=transaction.
|
|
48
|
+
//# sourceMappingURL=transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sources":["../../../src/legacy/downstream/transaction.ts"],"sourcesContent":["import {\n catchError,\n concat,\n ignoreElements,\n Subscription,\n takeUntil,\n timer,\n} from \"rxjs\"\nimport { createUpstream } from \"../upstream/upstream\"\nimport { createOpaqueToken } from \"../utils/create-opaque-token\"\nimport { transaction } from \"../../methods\"\n\nconst { stop, broadcast } = transaction\nexport const createTransactionFns = (\n upstream: ReturnType<typeof createUpstream>,\n reply: (id: string, result: any) => void,\n) => {\n const ongoing = new Map<string, Subscription>()\n const result = (rId: string, method: string, args: any[]) => {\n if (method === stop) {\n const [token] = args\n ongoing.get(token)?.unsubscribe()\n ongoing.delete(token)\n reply(rId, null)\n } else if (method === broadcast) {\n const token = createOpaqueToken()\n ongoing.set(\n token,\n upstream\n .obsRequest(\"author_submitExtrinsic\", args)\n .pipe(\n // We want to make sure that we keep on retrying if there\n // are errors with the `author_submitExtrinsic` request\n catchError((_, source) => concat(timer(5_000), source)),\n // This logic ensures that the subscription dies if an\n // upstream error (like the client being destroyed) takes place\n takeUntil(\n upstream.subscribeBlocks().finalized$.pipe(\n ignoreElements(),\n catchError(() => {\n ongoing.delete(token)\n return [null]\n }),\n ),\n ),\n )\n .subscribe(),\n )\n reply(rId, token)\n } else {\n throw null\n }\n }\n\n result.stop = () => {\n ongoing.forEach((s) => s.unsubscribe())\n ongoing.clear()\n }\n\n return result\n}\n"],"names":[],"mappings":";;;;AAYA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,WAAA;AACrB,MAAM,oBAAA,GAAuB,CAClC,QAAA,EACA,KAAA,KACG;AACH,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA0B;AAC9C,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,MAAA,EAAgB,IAAA,KAAgB;AAC3D,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA;AAChB,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,EAAG,WAAA,EAAY;AAChC,MAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,MAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,IACjB,CAAA,MAAA,IAAW,WAAW,SAAA,EAAW;AAC/B,MAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,KAAA;AAAA,QACA,QAAA,CACG,UAAA,CAAW,wBAAA,EAA0B,IAAI,CAAA,CACzC,IAAA;AAAA;AAAA;AAAA,UAGC,UAAA,CAAW,CAAC,CAAA,EAAG,MAAA,KAAW,OAAO,KAAA,CAAM,GAAK,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA;AAAA;AAAA,UAGtD,SAAA;AAAA,YACE,QAAA,CAAS,eAAA,EAAgB,CAAE,UAAA,CAAW,IAAA;AAAA,cACpC,cAAA,EAAe;AAAA,cACf,WAAW,MAAM;AACf,gBAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,gBAAA,OAAO,CAAC,IAAI,CAAA;AAAA,cACd,CAAC;AAAA;AACH;AACF,UAED,SAAA;AAAU,OACf;AACA,MAAA,KAAA,CAAM,KAAK,KAAK,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,MAAM,IAAA;AAAA,IACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAA,CAAO,OAAO,MAAM;AAClB,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AACtC,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAChB,CAAA;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Subject, concatMap, of, filter, debounceTime, take, share, takeWhile, merge, map, mergeMap, defer, concat, tap } from 'rxjs';
|
|
2
|
-
import { shareLatest } from '../../utils/share-latest.
|
|
2
|
+
import { shareLatest } from '../../utils/share-latest.js';
|
|
3
3
|
|
|
4
4
|
const getBlocks = ({
|
|
5
5
|
allHeads$,
|
|
@@ -306,4 +306,4 @@ const getBlocks = ({
|
|
|
306
306
|
};
|
|
307
307
|
|
|
308
308
|
export { getBlocks };
|
|
309
|
-
//# sourceMappingURL=blocks.
|
|
309
|
+
//# sourceMappingURL=blocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blocks.js","sources":["../../../../src/legacy/upstream/blocks/blocks.ts"],"sourcesContent":["import {\n concat,\n concatMap,\n debounceTime,\n defer,\n filter,\n map,\n merge,\n mergeMap,\n Observable,\n of,\n share,\n Subject,\n take,\n takeWhile,\n tap,\n} from \"rxjs\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport type {\n BestBlockChangedEvent,\n DecentHeader,\n InitializedEvent,\n NewBlockEvent,\n} from \"../../types\"\nimport { UpstreamEvents } from \"./upstream-events\"\nimport { shareLatest } from \"../../utils/share-latest\"\n\nexport const getBlocks = ({\n allHeads$,\n finalized$: finalizedWire$,\n getHeader$,\n hasher$,\n getRecursiveHeader,\n}: UpstreamEvents) => {\n const connectedBlocks = {\n blocks: new Map<\n string,\n DecentHeader & {\n children: Set<string>\n usages: Set<string>\n }\n >(),\n prevFin: \"\",\n finalized: \"\",\n best: \"\",\n }\n\n const getTree = (root: string, result: string[] = []): string[] => {\n result.push(root)\n connectedBlocks.blocks.get(root)!.children.forEach((c) => {\n getTree(c, result)\n })\n return result\n }\n\n const addBlock = (block: DecentHeader) => {\n const { blocks } = connectedBlocks\n const { hash, parent } = block\n const me = {\n ...block,\n children: new Set<string>(),\n usages: new Set<string>(),\n }\n blocks.set(hash, me)\n blocks.get(parent)?.children.add(hash)\n return me\n }\n\n const setBestFromFinalized = () => {\n connectedBlocks.best = connectedBlocks.finalized\n let bestHeight = 0\n const { finalized, blocks } = connectedBlocks\n getTree(finalized)\n .map((x) => blocks.get(x)!)\n .forEach((x) => {\n if (x.number > bestHeight) {\n bestHeight = x.number\n connectedBlocks.best = x.hash\n }\n })\n }\n\n const pendingBlocks = new Map<\n string,\n {\n hash: string\n header: DecentHeader | null\n children: Set<string>\n }\n >()\n\n const trimPending = (root: string) => {\n const desc = [...pendingBlocks.get(root)!.children]\n pendingBlocks.delete(root)\n desc.forEach(trimPending)\n }\n\n const getPendingTree = (\n root: string,\n result: Array<DecentHeader> = [],\n ): Array<DecentHeader> => {\n const me = pendingBlocks.get(root)!\n if (!me.header) return result\n result.push(me.header)\n me!.children.forEach((c) => {\n getPendingTree(c, result)\n })\n return result\n }\n\n const _newBlocks$ = new Subject<string>()\n const onError = (e: any) => _newBlocks$.error(e)\n\n const _finalized$ = finalizedWire$.pipe(\n concatMap((header, idx) => {\n const { hash } = header\n if (!idx) {\n addBlock(header)\n connectedBlocks.finalized = connectedBlocks.best = header.hash\n }\n return connectedBlocks.blocks.has(hash)\n ? of(hash)\n : _newBlocks$.pipe(\n filter((x) => x === hash),\n // some of the following blocks could be prunned b/c of this finalized event.\n // So, we have to make sure that this \"batch\" of _newBlocks has been flushed.\n debounceTime(0),\n take(1),\n )\n }),\n share(),\n )\n\n allHeads$.subscribe((header) => {\n const { parent, hash, number } = header\n if (connectedBlocks.blocks.has(hash) || !number) return\n\n if (connectedBlocks.blocks.has(parent)) {\n addBlock(header)\n _newBlocks$.next(hash)\n } else {\n pendingBlocks.set(hash, {\n hash: header.hash,\n header,\n children: new Set<string>(),\n })\n\n if (!pendingBlocks.has(parent)) {\n pendingBlocks.set(parent, {\n hash: parent,\n header: null,\n children: new Set(),\n })\n\n getRecursiveHeader(parent)\n .pipe(\n takeWhile((result) => {\n let me = pendingBlocks.get(result.hash)\n if (!me) return false // it was trimmed before b/c it was a prunned branch\n me.header = result\n\n const finalized = connectedBlocks.blocks.get(\n connectedBlocks.finalized,\n )\n\n // let's check if we have to prune this\n if (finalized && result.number <= finalized.number) {\n while (pendingBlocks.has(me.header?.parent ?? \"\"))\n me = pendingBlocks.get(me.header!.parent)!\n trimPending(me.hash)\n return false\n }\n\n if (connectedBlocks.blocks.has(result.parent)) {\n let target = connectedBlocks.blocks.get(result.parent)!\n const diff = target.number - finalized!.number\n for (let i = 0; i < diff; i++) {\n const nextTarget = connectedBlocks.blocks.get(target.parent)\n if (!nextTarget) break\n target = nextTarget\n }\n\n // it descends from the finalized block, all good...\n if (target === finalized) {\n const pendingOnes = getPendingTree(result.hash)\n pendingOnes.forEach((h) => {\n pendingBlocks.delete(h.hash)\n addBlock(h)\n _newBlocks$.next(h.hash)\n })\n } else trimPending(result.hash) // it was a pruned branch\n\n return false\n }\n\n const pendingParent = pendingBlocks.get(result.parent)\n // another subscription is loading it already\n if (pendingParent) {\n pendingParent.children.add(result.hash)\n return false\n }\n\n pendingBlocks.set(result.parent, {\n hash: result.parent,\n header: null,\n children: new Set([result.hash]),\n })\n return true\n }),\n )\n .subscribe({ error: onError })\n }\n pendingBlocks.get(parent)!.children.add(hash)\n }\n }, onError)\n\n const getFinalizedEvent = (): {\n event: \"finalized\"\n prunedBlockHashes: string[]\n finalizedBlockHashes: string[]\n } => {\n const prunedBlockHashes: string[] = []\n const finalizedBlockHashes: string[] = []\n const { blocks, finalized, prevFin } = connectedBlocks\n\n let current = blocks.get(finalized)!\n let prev = blocks.get(current.parent)\n while (prev) {\n finalizedBlockHashes.push(current.hash)\n prev.children.forEach((c) => {\n if (c !== current.hash) getTree(c, prunedBlockHashes)\n })\n current = prev\n if (current.hash === prevFin) break\n prev = blocks.get(current.parent)\n }\n finalizedBlockHashes.reverse()\n\n return { event: \"finalized\", prunedBlockHashes, finalizedBlockHashes }\n }\n\n let activeSubscriptions = new Set<string>()\n const getNewBlockEvent = (blockHash: string) => {\n const block = connectedBlocks.blocks.get(blockHash)!\n activeSubscriptions.forEach((subId) => {\n block.usages.add(subId)\n })\n return {\n event: \"newBlock\" as const,\n blockHash,\n parentBlockHash: block.parent,\n newRuntime: block.hasUpgrade\n ? ({} as {\n specName: string\n implName: string\n specVersion: number\n implVersion: number\n transactionVersion: number\n apis: Record<string, number>\n })\n : null,\n }\n }\n\n const tryRemove = (blockHash: string, up?: boolean) => {\n const { blocks } = connectedBlocks\n const block = blocks.get(blockHash)\n if (!block || block.usages.size > 0) return\n\n const { parent, children } = block\n if (up !== true) children.forEach((c) => tryRemove(c, false))\n if (up !== false) tryRemove(parent, true)\n if (!blocks.has(parent) || !block.children.size) {\n blocks.get(parent)?.children.delete(blockHash)\n blocks.delete(blockHash)\n }\n }\n\n const updates$ = merge(\n _newBlocks$.pipe(\n map((hash) => ({\n type: \"new\" as const,\n value: connectedBlocks.blocks.get(hash)!,\n })),\n ),\n _finalized$.pipe(map((hash) => ({ type: \"fin\" as const, value: hash }))),\n ).pipe(\n mergeMap((x) => {\n if (x.type === \"new\") {\n const block = x.value\n const { hash } = block\n addBlock(block)\n const result: Array<\n | ReturnType<typeof getNewBlockEvent>\n | { event: \"bestBlockChanged\"; bestBlockHash: string }\n > = [getNewBlockEvent(hash)]\n if (\n block.number >\n connectedBlocks.blocks.get(connectedBlocks.best)!.number\n ) {\n connectedBlocks.best = hash\n result.push({ event: \"bestBlockChanged\", bestBlockHash: hash })\n }\n return result\n }\n\n connectedBlocks.prevFin = connectedBlocks.finalized\n connectedBlocks.finalized = x.value\n let prevBest = connectedBlocks.best\n setBestFromFinalized()\n const result: Array<\n | ReturnType<typeof getFinalizedEvent>\n | { event: \"bestBlockChanged\"; bestBlockHash: string }\n > = [getFinalizedEvent()]\n\n if (prevBest !== connectedBlocks.best)\n result.unshift({\n event: \"bestBlockChanged\",\n bestBlockHash: connectedBlocks.best,\n })\n return result\n }),\n share(),\n )\n\n const ready$ = defer(() =>\n connectedBlocks.blocks.size\n ? [null]\n : _finalized$.pipe(\n take(1),\n map(() => null),\n ),\n ).pipe(shareLatest)\n\n const finalized$ = _finalized$.pipe(\n map((hash) => connectedBlocks.blocks.get(hash)! as DecentHeader),\n shareLatest,\n )\n\n merge(updates$, finalized$).subscribe({\n error: onError,\n })\n\n const upstream = (subId: string) => {\n const getInitialized = () => {\n const { blocks, finalized } = connectedBlocks\n const finalizedBlockHashes: string[] = []\n let current = blocks.get(finalized)\n while (current && finalizedBlockHashes.length < 10) {\n finalizedBlockHashes.push(current.hash)\n current.usages.add(subId)\n current = blocks.get(current.parent)\n }\n finalizedBlockHashes.reverse()\n\n return {\n event: \"initialized\" as const,\n finalizedBlockHashes,\n }\n }\n\n const unpin = (blockHash: string) => {\n const block = connectedBlocks.blocks.get(blockHash)\n if (block) {\n block.usages.delete(subId)\n tryRemove(blockHash)\n }\n }\n\n const initialEvents$: Observable<\n InitializedEvent | NewBlockEvent | BestBlockChangedEvent\n > = ready$.pipe(\n mergeMap(() => {\n const { best, finalized } = connectedBlocks\n const others: Array<NewBlockEvent | BestBlockChangedEvent> = getTree(\n finalized,\n )\n .slice(1)\n .map(getNewBlockEvent)\n others.push({\n event: \"bestBlockChanged\" as const,\n bestBlockHash: best,\n })\n return [getInitialized(), ...others]\n }),\n )\n\n return {\n blocks$: concat(initialEvents$, updates$).pipe(\n tap({\n subscribe: () => {\n activeSubscriptions.add(subId)\n },\n finalize: () => {\n activeSubscriptions.delete(subId)\n },\n }),\n share(),\n ),\n getHeader: (blockHash: string) =>\n connectedBlocks.blocks.get(blockHash)?.header ?? null,\n isPinned: (blockHash: string) =>\n !!connectedBlocks.blocks.get(blockHash)?.usages.has(subId),\n unpin,\n }\n }\n\n const clean = () => {\n pendingBlocks.clear()\n connectedBlocks.blocks.clear()\n }\n\n return {\n clean,\n upstream,\n finalized$,\n getHeader$: (hash: HexString): Observable<DecentHeader> => {\n const block = connectedBlocks.blocks.get(hash)\n return block ? of(block) : getHeader$(hash)\n },\n hasher$,\n }\n}\n"],"names":["result"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/legacy/upstream/blocks/index.ts"],"sourcesContent":["import type { Observable } from \"rxjs\"\nimport type { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { getBlocks } from \"./blocks\"\nimport { getUpstreamEvents } from \"./upstream-events\"\n\nexport const getBlocks$ = (\n request: ClientRequest<any, any>,\n request$: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n) => getBlocks(getUpstreamEvents(request, request$))\n"],"names":[],"mappings":";;;AAKO,MAAM,UAAA,GAAa,CACxB,OAAA,EACA,QAAA,KAIG,UAAU,iBAAA,CAAkB,OAAA,EAAS,QAAQ,CAAC;;;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { noop } from '@polkadot-api/utils';
|
|
2
2
|
import { Subject, mergeMap, map, pipe, Observable, concat, of } from 'rxjs';
|
|
3
|
-
import { getFromShittyHeader } from '../../utils/fromShittyHeader.
|
|
4
|
-
import { getHasherFromBlock } from '../../utils/get-hasher-from-block.
|
|
5
|
-
import { shareLatest } from '../../utils/share-latest.
|
|
6
|
-
import { withLatestFromBp } from '../../utils/with-latest-from-bp.
|
|
3
|
+
import { getFromShittyHeader } from '../../utils/fromShittyHeader.js';
|
|
4
|
+
import { getHasherFromBlock } from '../../utils/get-hasher-from-block.js';
|
|
5
|
+
import { shareLatest } from '../../utils/share-latest.js';
|
|
6
|
+
import { withLatestFromBp } from '../../utils/with-latest-from-bp.js';
|
|
7
7
|
|
|
8
8
|
const INITIAL_ERROR = {};
|
|
9
9
|
const getUpstreamEvents = (request, request$) => {
|
|
@@ -89,4 +89,4 @@ const getUpstreamEvents = (request, request$) => {
|
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
export { getUpstreamEvents };
|
|
92
|
-
//# sourceMappingURL=upstream-events.
|
|
92
|
+
//# sourceMappingURL=upstream-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream-events.js","sources":["../../../../src/legacy/upstream/blocks/upstream-events.ts"],"sourcesContent":["import { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { HexString } from \"@polkadot-api/substrate-bindings\"\nimport { noop } from \"@polkadot-api/utils\"\nimport { concat, map, mergeMap, Observable, of, pipe, Subject } from \"rxjs\"\nimport { DecentHeader, ShittyHeader } from \"../../types\"\nimport { getFromShittyHeader } from \"../../utils/fromShittyHeader\"\nimport { getHasherFromBlock } from \"../../utils/get-hasher-from-block\"\nimport { shareLatest } from \"../../utils/share-latest\"\nimport { withLatestFromBp } from \"../../utils/with-latest-from-bp\"\n\nconst INITIAL_ERROR = {}\n\nexport const getUpstreamEvents = (\n request: ClientRequest<any, any>,\n request$: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n) => {\n const firstFinHeader$ = new Subject<ShittyHeader>()\n const hasher$ = firstFinHeader$.pipe(\n mergeMap((h) =>\n request$<[number | string], HexString>(\"chain_getBlockHash\", [\n h.number,\n ]).pipe(map(getHasherFromBlock(h))),\n ),\n shareLatest,\n )\n const fromShittyHeader$ = hasher$.pipe(map(getFromShittyHeader), shareLatest)\n const toNiceHeader = pipe(\n withLatestFromBp<\n (x: ShittyHeader) => ReturnType<ReturnType<typeof getFromShittyHeader>>,\n ShittyHeader\n >(fromShittyHeader$),\n map(([fromShittyHeader, shitHeader]) => fromShittyHeader(shitHeader)),\n )\n\n const getHeaders$ = (\n startMethod: string,\n stopMethod: string,\n isFin = false,\n ): Observable<DecentHeader> =>\n new Observable<ShittyHeader>((observer) => {\n const onError = (e: any) => {\n observer.error(e)\n }\n\n let stop: (() => void) | null = null\n let isFirstFin = isFin\n ;(request as ClientRequest<string, ShittyHeader>)(startMethod, [], {\n onSuccess: (subId, followSub) => {\n const done = followSub(subId, {\n next: (v) => {\n if (isFirstFin) {\n isFirstFin = false\n firstFinHeader$.next(v)\n firstFinHeader$.complete()\n }\n observer.next(v)\n },\n error: onError,\n })\n const unsubscribe = () => {\n done()\n try {\n request(stopMethod, [subId], {\n onError: noop,\n onSuccess: noop,\n })\n } catch {}\n }\n if (stop !== null) unsubscribe()\n else stop = unsubscribe\n },\n onError() {\n onError(INITIAL_ERROR)\n },\n })\n\n return () => {\n stop?.()\n stop = noop\n }\n }).pipe(toNiceHeader)\n\n const allHeads$ = getHeaders$(\n \"chain_subscribeAllHeads\",\n \"chain_unsubscribeAllHeads\",\n )\n\n const finalized$ = getHeaders$(\n \"chain_subscribeFinalizedHeads\",\n \"chain_unsubscribeFinalizedHeads\",\n true,\n )\n\n const getHeader$ = (hash: string) =>\n request$<[string], ShittyHeader>(\"chain_getHeader\", [hash]).pipe(\n toNiceHeader,\n )\n\n const getRecursiveHeader = (hash: string): Observable<DecentHeader> =>\n getHeader$(hash).pipe(\n mergeMap((header) =>\n concat(of(header), getRecursiveHeader(header.parent)),\n ),\n )\n\n return {\n allHeads$,\n finalized$,\n hasher$,\n getRecursiveHeader,\n getHeader$,\n }\n}\n\nexport type UpstreamEvents = ReturnType<typeof getUpstreamEvents>\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proofs.js","sources":["../../../src/legacy/upstream/proofs.ts"],"sourcesContent":["import {\n HexString,\n ProofTrieNode,\n TrieNode,\n validateProofs,\n} from \"@polkadot-api/substrate-bindings\"\nimport { mergeMap, Observable } from \"rxjs\"\n\nexport const createClosestDescendantMerkleValue =\n (\n obsRequest: <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ) => Observable<Payload>,\n ) =>\n (at: HexString, key: HexString) =>\n obsRequest<\n [keys: Array<HexString>, at: HexString],\n {\n at: HexString\n proof: HexString[]\n }\n >(\"state_getReadProof\", [[key], at]).pipe(\n mergeMap((x) => {\n const result = validateProofs(x.proof)\n if (!result) throw new Error(\"Invalid Proof\")\n const { rootHash, proofs } = result\n let winnerHash: HexString | undefined = rootHash\n let current: {\n hash: HexString\n parent?: HexString\n } & TrieNode = proofs[winnerHash!] as any\n\n let nKeyChars = 2 // skipping `0x`\n do {\n const nextOne: ProofTrieNode = proofs[winnerHash!]\n if (!nextOne || nextOne.type === \"Raw\") break\n\n current = nextOne\n winnerHash = undefined\n if (\n !current.partialKey.startsWith(\n key.slice(nKeyChars, nKeyChars + current.partialKey.length),\n )\n )\n // This causes the observable to complete, which in its turn triggers an [`operationStorageDone`](https://paritytech.github.io/json-rpc-interface-spec/api/chainHead_v1_follow.html#operationstoragedone)\n // event, without triggering the intermediary `OperationStorageItems` event. This is the expected behaviour when querying a non-existing storage entry.\n return []\n nKeyChars += current.partialKey.length\n if (\n (current.type === \"LeafWithHash\" ||\n current.type === \"BranchWithHash\") &&\n proofs[current.value]\n ) {\n winnerHash = current.value\n continue\n }\n\n if (\"children\" in current) {\n const winner: [string, string] | undefined = Object.entries(\n current.children,\n ).find(([, hash]) => proofs[hash])\n\n if (winner) {\n // Same as before: in this case we know that it won't match with the requested key, so we complete without an emission.\n if (winner[0] !== key[nKeyChars++]) return []\n winnerHash = winner[1]\n }\n }\n } while (winnerHash)\n\n return [current!.hash]\n }),\n )\n"],"names":[],"mappings":";;;AAQO,MAAM,kCAAA,GACX,CACE,UAAA,KAKF,CAAC,IAAe,GAAA,KACd,UAAA,CAME,oBAAA,EAAsB,CAAC,CAAC,GAAG,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,IAAA;AAAA,EACnC,QAAA,CAAS,CAAC,CAAA,KAAM;AACd,IAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAA,CAAE,KAAK,CAAA;AACrC,IAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,eAAe,CAAA;AAC5C,IAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,MAAA;AAC7B,IAAA,IAAI,UAAA,GAAoC,QAAA;AACxC,IAAA,IAAI,OAAA,GAGW,OAAO,UAAW,CAAA;AAEjC,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,GAAG;AACD,MAAA,MAAM,OAAA,GAAyB,OAAO,UAAW,CAAA;AACjD,MAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,KAAA,EAAO;AAExC,MAAA,OAAA,GAAU,OAAA;AACV,MAAA,UAAA,GAAa,MAAA;AACb,MAAA,IACE,CAAC,QAAQ,UAAA,CAAW,UAAA;AAAA,QAClB,IAAI,KAAA,CAAM,SAAA,EAAW,SAAA,GAAY,OAAA,CAAQ,WAAW,MAAM;AAAA,OAC5D;AAIA,QAAA,OAAO,EAAC;AACV,MAAA,SAAA,IAAa,QAAQ,UAAA,CAAW,MAAA;AAChC,MAAA,IAAA,CACG,OAAA,CAAQ,SAAS,cAAA,IAChB,OAAA,CAAQ,SAAS,gBAAA,KACnB,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EACpB;AACA,QAAA,UAAA,GAAa,OAAA,CAAQ,KAAA;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,cAAc,OAAA,EAAS;AACzB,QAAA,MAAM,SAAuC,MAAA,CAAO,OAAA;AAAA,UAClD,OAAA,CAAQ;AAAA,SACV,CAAE,KAAK,CAAC,GAAG,IAAI,CAAA,KAAM,MAAA,CAAO,IAAI,CAAC,CAAA;AAEjC,QAAA,IAAI,MAAA,EAAQ;AAEV,UAAA,IAAI,OAAO,CAAC,CAAA,KAAM,IAAI,SAAA,EAAW,CAAA,SAAU,EAAC;AAC5C,UAAA,UAAA,GAAa,OAAO,CAAC,CAAA;AAAA,QACvB;AAAA,MACF;AAAA,IACF,CAAA,QAAS,UAAA;AAET,IAAA,OAAO,CAAC,QAAS,IAAI,CAAA;AAAA,EACvB,CAAC;AACH;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { toHex, fromHex } from '@polkadot-api/utils';
|
|
2
2
|
import { Observable, map, mergeMap, EMPTY, merge, of, catchError } from 'rxjs';
|
|
3
|
-
import { getBlocks$ } from './blocks/index.
|
|
4
|
-
import { withLatestFromBp } from '../utils/with-latest-from-bp.
|
|
5
|
-
import { createClosestDescendantMerkleValue } from './proofs.
|
|
3
|
+
import { getBlocks$ } from './blocks/index.js';
|
|
4
|
+
import { withLatestFromBp } from '../utils/with-latest-from-bp.js';
|
|
5
|
+
import { createClosestDescendantMerkleValue } from './proofs.js';
|
|
6
6
|
|
|
7
7
|
const createUpstream = (request) => {
|
|
8
8
|
const simpleRequest = (method, params, onSuccess, onError) => request(method, params, { onSuccess, onError });
|
|
@@ -19,13 +19,15 @@ const createUpstream = (request) => {
|
|
|
19
19
|
}
|
|
20
20
|
)
|
|
21
21
|
);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
let blockSubscription = null;
|
|
23
|
+
const subscribeBlocks = () => {
|
|
24
|
+
blockSubscription ?? (blockSubscription = getBlocks$(request, obsRequest));
|
|
25
|
+
return {
|
|
26
|
+
...blockSubscription,
|
|
27
|
+
getBlocks: blockSubscription.upstream
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
const clean = () => blockSubscription?.clean();
|
|
29
31
|
const runtimeCall = (atBlock, method, data) => obsRequest("state_call", [
|
|
30
32
|
method,
|
|
31
33
|
data,
|
|
@@ -59,7 +61,7 @@ const createUpstream = (request) => {
|
|
|
59
61
|
return getKeys().pipe(mergeMap((keys) => getValues(keys)));
|
|
60
62
|
};
|
|
61
63
|
const stgDescendantHashes = (at, rootKey) => stgDescendantValues(at, rootKey).pipe(
|
|
62
|
-
withLatestFromBp(hasher$),
|
|
64
|
+
withLatestFromBp(subscribeBlocks().hasher$),
|
|
63
65
|
map(
|
|
64
66
|
([hasher, results]) => results.map(
|
|
65
67
|
([key, value]) => [key, toHex(hasher(fromHex(value)))]
|
|
@@ -83,10 +85,8 @@ const createUpstream = (request) => {
|
|
|
83
85
|
const getBlockHash$ = (height) => obsRequest("chain_getBlockHash", [height]);
|
|
84
86
|
const genesisHash = getBlockHash$(0);
|
|
85
87
|
return {
|
|
86
|
-
|
|
87
|
-
finalized$,
|
|
88
|
+
subscribeBlocks,
|
|
88
89
|
getBlockHash$,
|
|
89
|
-
getHeader$,
|
|
90
90
|
stgValue,
|
|
91
91
|
stgHash,
|
|
92
92
|
stgDescendantValues,
|
|
@@ -97,12 +97,12 @@ const createUpstream = (request) => {
|
|
|
97
97
|
chainName,
|
|
98
98
|
properties,
|
|
99
99
|
genesisHash,
|
|
100
|
-
clean,
|
|
101
100
|
methods,
|
|
102
101
|
request: simpleRequest,
|
|
103
|
-
obsRequest
|
|
102
|
+
obsRequest,
|
|
103
|
+
clean
|
|
104
104
|
};
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
export { createUpstream };
|
|
108
|
-
//# sourceMappingURL=upstream.
|
|
108
|
+
//# sourceMappingURL=upstream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upstream.js","sources":["../../../src/legacy/upstream/upstream.ts"],"sourcesContent":["import { ClientRequest } from \"@polkadot-api/raw-client\"\nimport { fromHex, toHex } from \"@polkadot-api/utils\"\nimport { catchError, EMPTY, map, merge, mergeMap, Observable, of } from \"rxjs\"\nimport { getBlocks$ } from \"./blocks\"\nimport { withLatestFromBp } from \"../utils/with-latest-from-bp\"\nimport { createClosestDescendantMerkleValue } from \"./proofs\"\n\nexport const createUpstream = (request: ClientRequest<any, any>) => {\n const simpleRequest = <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n onSuccess: (value: Payload) => void,\n onError: (e: any) => void,\n ): (() => void) => request(method, params, { onSuccess, onError })\n\n const obsRequest = <Args extends Array<any>, Payload>(\n method: string,\n params: Args,\n ): Observable<Payload> =>\n new Observable((observer) =>\n simpleRequest<Args, Payload>(\n method,\n params,\n (v) => {\n observer.next(v)\n observer.complete()\n },\n (e) => {\n observer.error(e)\n },\n ),\n )\n\n let blockSubscription: ReturnType<typeof getBlocks$> | null = null\n const subscribeBlocks = () => {\n blockSubscription ??= getBlocks$(request, obsRequest)\n return {\n ...blockSubscription,\n getBlocks: blockSubscription.upstream,\n }\n }\n const clean = () => blockSubscription?.clean()\n\n const runtimeCall = (atBlock: string, method: string, data: string) =>\n obsRequest<[string, string, string], string | null>(\"state_call\", [\n method,\n data,\n atBlock,\n ])\n\n const stgDescendantValues = (\n at: string,\n rootKey: string,\n ): Observable<Array<[string, string]>> => {\n const PAGE_SIZE = 1000\n const getKeys = (startAtKey?: string): Observable<string[]> => {\n return obsRequest<[string, number, string | undefined, string], string[]>(\n \"state_getKeysPaged\",\n [rootKey, PAGE_SIZE, startAtKey || undefined, at],\n ).pipe(\n mergeMap((receivedKeys) => {\n const keys =\n receivedKeys[0] === startAtKey\n ? receivedKeys.slice(1)\n : receivedKeys\n\n const continuation =\n receivedKeys.length < PAGE_SIZE\n ? EMPTY\n : getKeys(receivedKeys.at(-1))\n\n return merge(of(keys), continuation)\n }),\n )\n }\n\n const getValues = (\n keys: string[],\n nSplits = 0,\n ): Observable<Array<[string, string]>> =>\n keys.length\n ? obsRequest<\n [string[], string],\n [{ block: string; changes: Array<[string, string]> }]\n >(\"state_queryStorageAt\", [keys, at]).pipe(\n map(([{ changes }]) => changes),\n catchError((e: any) => {\n if (nSplits > 3) throw e\n\n const midIdx = Math.floor(keys.length / 2)\n return merge(\n getValues(keys.slice(0, midIdx), ++nSplits),\n getValues(keys.slice(midIdx), nSplits),\n )\n }),\n )\n : EMPTY\n\n return getKeys().pipe(mergeMap((keys) => getValues(keys)))\n }\n\n const stgDescendantHashes = (at: string, rootKey: string) =>\n stgDescendantValues(at, rootKey).pipe(\n withLatestFromBp(subscribeBlocks().hasher$),\n map(([hasher, results]) =>\n results.map(\n ([key, value]) =>\n [key, toHex(hasher(fromHex(value)))] as [string, string],\n ),\n ),\n )\n\n const stgClosestDescendant = createClosestDescendantMerkleValue(obsRequest)\n\n const [stgValue, stgHash] = [\"state_getStorage\", \"state_getStorageHash\"].map(\n (method) => (atBlock: string, key: string) =>\n obsRequest<[string, string | undefined], string | null>(method, [\n key,\n atBlock,\n ]),\n )\n\n const methods = obsRequest<[], { methods: string[] }>(\"rpc_methods\", [])\n const chainName = obsRequest<[], string>(\"system_name\", [])\n const properties = obsRequest<[], {}>(\"system_properties\", [])\n const getBody = (at: string) =>\n obsRequest<[string], { block: { extrinsics: Array<string> } }>(\n \"chain_getBlock\",\n [at],\n )\n\n const getBlockHash$ = (height: number) =>\n obsRequest<[height: number], string>(\"chain_getBlockHash\", [height])\n const genesisHash = getBlockHash$(0)\n\n return {\n subscribeBlocks,\n getBlockHash$,\n stgValue,\n stgHash,\n stgDescendantValues,\n stgDescendantHashes,\n stgClosestDescendant,\n runtimeCall,\n getBody,\n chainName,\n properties,\n genesisHash,\n methods,\n request: simpleRequest,\n obsRequest,\n clean,\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-opaque-token.js","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;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fromShittyHeader.js","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;;;;"}
|
package/dist/{esm/legacy/utils/get-hasher-from-block.mjs → legacy/utils/get-hasher-from-block.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Blake2256, Keccak256 } from '@polkadot-api/substrate-bindings';
|
|
2
|
-
import { getFromShittyHeader } from './fromShittyHeader.
|
|
2
|
+
import { getFromShittyHeader } from './fromShittyHeader.js';
|
|
3
3
|
|
|
4
4
|
const hashers = [Blake2256, Keccak256];
|
|
5
5
|
const fns = hashers.map(getFromShittyHeader);
|
|
@@ -9,4 +9,4 @@ const noHasher = (_) => {
|
|
|
9
9
|
const getHasherFromBlock = (shitHeader) => (hash) => hashers[fns.findIndex((fn) => fn(shitHeader).hash === hash)] || noHasher;
|
|
10
10
|
|
|
11
11
|
export { getHasherFromBlock };
|
|
12
|
-
//# sourceMappingURL=get-hasher-from-block.
|
|
12
|
+
//# sourceMappingURL=get-hasher-from-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-hasher-from-block.js","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;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-from-error.js","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;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-latest.js","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;;;;"}
|
package/dist/{esm/legacy/utils/with-latest-from-bp.mjs → legacy/utils/with-latest-from-bp.js}
RENAMED
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
1
|
+
import { Observable, Subscription } from 'rxjs';
|
|
2
2
|
|
|
3
3
|
const withLatestFromBp = (latest$) => (base$) => new Observable((observer) => {
|
|
4
4
|
let latest;
|
|
5
5
|
let prev = [];
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
let finished = false;
|
|
7
|
+
const subscription = new Subscription();
|
|
8
|
+
subscription.add(
|
|
9
|
+
base$.subscribe({
|
|
10
|
+
next(v) {
|
|
11
|
+
if (prev) prev.push(v);
|
|
12
|
+
else observer.next([latest, v]);
|
|
13
|
+
},
|
|
14
|
+
error(e) {
|
|
15
|
+
observer.error(e);
|
|
16
|
+
},
|
|
17
|
+
complete() {
|
|
18
|
+
if (prev) finished = true;
|
|
19
|
+
else observer.complete();
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
);
|
|
18
23
|
subscription.add(
|
|
19
24
|
latest$.subscribe({
|
|
20
25
|
next(v) {
|
|
@@ -24,6 +29,7 @@ const withLatestFromBp = (latest$) => (base$) => new Observable((observer) => {
|
|
|
24
29
|
prev = null;
|
|
25
30
|
copy.forEach((p) => observer.next([latest, p]));
|
|
26
31
|
}
|
|
32
|
+
if (finished) observer.complete();
|
|
27
33
|
},
|
|
28
34
|
error(e) {
|
|
29
35
|
observer.error(e);
|
|
@@ -37,4 +43,4 @@ const withLatestFromBp = (latest$) => (base$) => new Observable((observer) => {
|
|
|
37
43
|
});
|
|
38
44
|
|
|
39
45
|
export { withLatestFromBp };
|
|
40
|
-
//# sourceMappingURL=with-latest-from-bp.
|
|
46
|
+
//# sourceMappingURL=with-latest-from-bp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-latest-from-bp.js","sources":["../../../src/legacy/utils/with-latest-from-bp.ts"],"sourcesContent":["import { Observable, Subscription } 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 let finished = false\n\n const subscription = new Subscription()\n subscription.add(\n 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 if (prev) finished = true\n else observer.complete()\n },\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 if (finished) observer.complete()\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;AACxB,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,MAAM,YAAA,GAAe,IAAI,YAAA,EAAa;AACtC,EAAA,YAAA,CAAa,GAAA;AAAA,IACX,MAAM,SAAA,CAAU;AAAA,MACd,KAAK,CAAA,EAAG;AACN,QAAA,IAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA;AAAA,aAChB,QAAA,CAAS,IAAA,CAAK,CAAC,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,MAChC,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,GAAW,IAAA;AAAA,sBACP,QAAA,EAAS;AAAA,MACzB;AAAA,KACD;AAAA,GACH;AAEA,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;AACA,QAAA,IAAI,QAAA,WAAmB,QAAA,EAAS;AAAA,MAClC,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,6 +1,6 @@
|
|
|
1
|
-
import { apply, jsonObj } from './utils/utils.
|
|
1
|
+
import { apply, jsonObj } from './utils/utils.js';
|
|
2
2
|
import { noop } from '@polkadot-api/utils';
|
|
3
|
-
import { getAsyncMiddleware } from './utils/get-async-middleware.
|
|
3
|
+
import { getAsyncMiddleware } from './utils/get-async-middleware.js';
|
|
4
4
|
|
|
5
5
|
const RPC_METHODS = "rpc_methods";
|
|
6
6
|
const withMethods = (methods) => (base) => (onMsg, onHalt) => {
|
|
@@ -38,4 +38,4 @@ const methodsRouter = (getMiddleware) => getAsyncMiddleware((onReady, request) =
|
|
|
38
38
|
});
|
|
39
39
|
|
|
40
40
|
export { methodsRouter };
|
|
41
|
-
//# sourceMappingURL=methods-router.
|
|
41
|
+
//# sourceMappingURL=methods-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"methods-router.js","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;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"methods.js","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;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { hybridMiddleware } from './hybrid.js';
|
|
2
|
+
import { methodsRouter } from './methods-router.js';
|
|
3
|
+
import { withNumericIds } from './numeric-ids.js';
|
|
4
|
+
import { apply } from './utils/utils.js';
|
|
5
|
+
|
|
6
|
+
const middleware = apply(withNumericIds, methodsRouter(hybridMiddleware));
|
|
7
|
+
|
|
8
|
+
export { middleware };
|
|
9
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sources":["../src/middleware.ts"],"sourcesContent":["import { hybridMiddleware } from \"./hybrid\"\nimport { methodsRouter } from \"./methods-router\"\nimport { withNumericIds } from \"./numeric-ids\"\nimport { apply } from \"./utils\"\n\nexport const middleware = apply(withNumericIds, methodsRouter(hybridMiddleware))\n"],"names":[],"mappings":";;;;;AAKO,MAAM,UAAA,GAAa,KAAA,CAAM,cAAA,EAAgB,aAAA,CAAc,gBAAgB,CAAC;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { chainHead } from '../methods.
|
|
1
|
+
import { chainHead } from '../methods.js';
|
|
2
2
|
|
|
3
|
-
const { follow
|
|
3
|
+
const { follow, unfollow } = chainHead;
|
|
4
4
|
const resetStops = () => ({ latest: Date.now(), count: 0 });
|
|
5
5
|
const followEnhancer = (base) => (onMsg, onHalt) => {
|
|
6
6
|
const prematureStops = /* @__PURE__ */ new Map();
|
|
@@ -67,8 +67,8 @@ const followEnhancer = (base) => (onMsg, onHalt) => {
|
|
|
67
67
|
return {
|
|
68
68
|
send(parsed) {
|
|
69
69
|
const { method } = parsed;
|
|
70
|
-
if (method === follow
|
|
71
|
-
else if (method === unfollow
|
|
70
|
+
if (method === follow) preOpId.set(parsed.id, parsed);
|
|
71
|
+
else if (method === unfollow) onGoing.delete(parsed.params[0]);
|
|
72
72
|
send(parsed);
|
|
73
73
|
},
|
|
74
74
|
disconnect
|
|
@@ -76,4 +76,4 @@ const followEnhancer = (base) => (onMsg, onHalt) => {
|
|
|
76
76
|
};
|
|
77
77
|
|
|
78
78
|
export { followEnhancer };
|
|
79
|
-
//# sourceMappingURL=fix-follow.
|
|
79
|
+
//# sourceMappingURL=fix-follow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-follow.js","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":[],"mappings":"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"}
|