@polkadot-api/json-rpc-provider-proxy 0.2.5 → 0.2.6
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/esm/get-proxy.mjs
CHANGED
|
@@ -157,12 +157,13 @@ const getProxy = (toConsumer) => {
|
|
|
157
157
|
};
|
|
158
158
|
state = {
|
|
159
159
|
type: 0 /* Connected */,
|
|
160
|
-
connection:
|
|
160
|
+
connection: null,
|
|
161
161
|
activeBroadcasts,
|
|
162
162
|
pendingBroadcasts: /* @__PURE__ */ new Map(),
|
|
163
163
|
onGoingRequests,
|
|
164
164
|
activeChainHeads
|
|
165
165
|
};
|
|
166
|
+
state.connection = cb(onMsgFromProvider, onHalt);
|
|
166
167
|
activeBroadcasts.forEach((broadcast) => {
|
|
167
168
|
if (state.type === 0 /* Connected */) {
|
|
168
169
|
const id = getInternalId();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-proxy.mjs","sources":["../../src/get-proxy.ts"],"sourcesContent":["import { JsonRpcConnection } from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { jsonRpcMsg } from \"./json-rpc-message\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\n\nconst enum State {\n Connected,\n Connecting,\n Done,\n}\n\nconst enum OngoingMsgType {\n ChainHeadFollow,\n ChainHeadOperation,\n Other,\n}\ntype OngoingMsg =\n | {\n type: OngoingMsgType.ChainHeadFollow\n msg: string\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: string }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: string) => void,\n) => {\n let state:\n | {\n type: State.Connected\n connection: JsonRpcConnection\n activeChainHeads: Set<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n // the key is the upstream id, the value is the synthetic token\n pendingBroadcasts: Map<string, string>\n\n // These are requests for which their replies should be propagated downstream\n // Therefore, the `pendingBroadcasts` won't be included in here b/c they are synthetic\n onGoingRequests: Map<string, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n }\n | { type: State.Done } = {\n type: State.Connecting,\n activeBroadcasts: new Map(),\n pending: [],\n }\n\n const onMsgFromProvider = (msg: string) => {\n let isActive = true\n if (state.type === State.Connected) {\n const parsed = JSON.parse(msg)\n if (\"id\" in parsed) {\n const { id } = parsed\n if (state.pendingBroadcasts.has(id)) {\n const synToken = state.pendingBroadcasts.get(id)!\n const upToken = parsed.result\n state.pendingBroadcasts.delete(id)\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast)\n state.activeBroadcasts.get(synToken)!.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcMsg({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\n }),\n )\n\n return\n }\n\n isActive = state.onGoingRequests.has(id)\n if (\n \"result\" in parsed &&\n state.onGoingRequests.get(id)?.type === OngoingMsgType.ChainHeadFollow\n )\n state.activeChainHeads.add(parsed.result)\n state.onGoingRequests.delete(parsed.id)\n } else if (\"params\" in parsed) {\n const { subscription, result } = parsed.params\n if (result?.event === \"stop\")\n state.activeChainHeads.delete(subscription)\n }\n }\n // If the state is \"Connecting\", then these are messages\n // sent from the `onHalt` function. So, we mus realy them\n if (isActive && state.type !== State.Done) toConsumer(msg)\n }\n\n const send = (msg: string) => {\n if (state.type === State.Done) return\n const parsed = JSON.parse(msg)\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in parsed) {\n const { method, id, params } = parsed as {\n method: string\n id: string\n params: string[]\n }\n const [group, , methodName] = method.split(\"_\")\n\n if (group === \"transaction\") {\n if (methodName === \"stop\") {\n const [synToken] = params\n const active = state.activeBroadcasts.get(synToken)\n state.activeBroadcasts.delete(synToken)\n toConsumer(\n jsonRpcMsg({\n id,\n result: null,\n }),\n )\n\n if (state.type === State.Connected && active && active.upToken) {\n // The response from this request will be ignored later on\n // because it won't be among the ongoing requests. so, it won't get to downstream\n state.connection.send(\n jsonRpcMsg({\n id,\n method,\n params: [active.upToken],\n }),\n )\n }\n\n // prevents the request from being included into the ongoingRequests\n return\n }\n\n if (methodName === \"broadcast\") {\n const synToken = getOpaqueToken()\n state.activeBroadcasts.set(synToken, {\n tx: params[0],\n synToken,\n })\n\n if (state.type === State.Connected) {\n state.pendingBroadcasts.set(id, synToken)\n state.connection.send(msg)\n }\n\n toConsumer(\n jsonRpcMsg({\n id,\n result: synToken,\n }),\n )\n\n // prevents the request to be tracked with the ongoingRequests\n return\n }\n }\n }\n\n if (state.type === State.Connecting) {\n state.pending.push(msg)\n return\n }\n if (parsed.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(parsed.params[0])\n\n if (\"id\" in parsed) {\n const { method, id } = parsed as { method: string; id: string }\n const [group, , methodName] = method.split(\"_\")\n\n const ongoingMsg: OngoingMsg =\n group === \"chainHead\"\n ? methodName === \"follow\"\n ? {\n type: OngoingMsgType.ChainHeadFollow,\n msg,\n }\n : { type: OngoingMsgType.ChainHeadOperation, id }\n : { type: OngoingMsgType.Other, msg }\n state.onGoingRequests.set(id, ongoingMsg)\n }\n\n state.connection.send(msg)\n }\n\n return {\n send,\n disconnect: () => {\n if (state.type === State.Done) return\n if (state.type === State.Connected) state.connection.disconnect()\n state = { type: State.Done }\n },\n connect: (cb) => {\n if (state.type !== State.Connecting) throw new Error(\"Nonesense\")\n\n const { pending, activeBroadcasts } = state\n const onGoingRequests = new Map<string, OngoingMsg>()\n const activeChainHeads = new Set<string>()\n const onHalt = () => {\n const activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n > = state.type !== State.Done ? state.activeBroadcasts : new Map()\n activeBroadcasts.forEach((x) => (x.upToken = undefined))\n state = {\n type: State.Connecting,\n activeBroadcasts,\n pending: [],\n }\n activeChainHeads.forEach((subscription) => {\n // We don't send the messages directy to the consumer\n // b/c they could have disconnected after receiving one\n // of these messages. The `onMsgFromProvider` fn handles that\n onMsgFromProvider(\n jsonRpcMsg({\n params: {\n subscription,\n result: {\n event: \"stop\",\n internal: true,\n },\n },\n }),\n )\n })\n activeChainHeads.clear()\n for (const x of onGoingRequests.values()) {\n if (x.type === OngoingMsgType.ChainHeadOperation)\n onMsgFromProvider(\n jsonRpcMsg({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\n internal: true,\n }),\n )\n else send(x.msg)\n }\n onGoingRequests.clear()\n }\n state = {\n type: State.Connected,\n connection: cb(onMsgFromProvider, onHalt),\n activeBroadcasts,\n pendingBroadcasts: new Map(),\n onGoingRequests,\n activeChainHeads,\n }\n activeBroadcasts.forEach((broadcast) => {\n if (state.type === State.Connected) {\n const id = getInternalId()\n state.pendingBroadcasts.set(id, broadcast.synToken)\n send(\n jsonRpcMsg({\n id,\n method: \"transaction_v1_broadcast\",\n params: [broadcast.tx],\n }),\n )\n }\n })\n pending.forEach(send)\n },\n }\n}\n"],"names":["activeBroadcasts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"get-proxy.mjs","sources":["../../src/get-proxy.ts"],"sourcesContent":["import { JsonRpcConnection } from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { jsonRpcMsg } from \"./json-rpc-message\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\n\nconst enum State {\n Connected,\n Connecting,\n Done,\n}\n\nconst enum OngoingMsgType {\n ChainHeadFollow,\n ChainHeadOperation,\n Other,\n}\ntype OngoingMsg =\n | {\n type: OngoingMsgType.ChainHeadFollow\n msg: string\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: string }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: string) => void,\n) => {\n let state:\n | {\n type: State.Connected\n connection: JsonRpcConnection\n activeChainHeads: Set<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n // the key is the upstream id, the value is the synthetic token\n pendingBroadcasts: Map<string, string>\n\n // These are requests for which their replies should be propagated downstream\n // Therefore, the `pendingBroadcasts` won't be included in here b/c they are synthetic\n onGoingRequests: Map<string, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n }\n | { type: State.Done } = {\n type: State.Connecting,\n activeBroadcasts: new Map(),\n pending: [],\n }\n\n const onMsgFromProvider = (msg: string) => {\n let isActive = true\n if (state.type === State.Connected) {\n const parsed = JSON.parse(msg)\n if (\"id\" in parsed) {\n const { id } = parsed\n if (state.pendingBroadcasts.has(id)) {\n const synToken = state.pendingBroadcasts.get(id)!\n const upToken = parsed.result\n state.pendingBroadcasts.delete(id)\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast)\n state.activeBroadcasts.get(synToken)!.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcMsg({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\n }),\n )\n\n return\n }\n\n isActive = state.onGoingRequests.has(id)\n if (\n \"result\" in parsed &&\n state.onGoingRequests.get(id)?.type === OngoingMsgType.ChainHeadFollow\n )\n state.activeChainHeads.add(parsed.result)\n state.onGoingRequests.delete(parsed.id)\n } else if (\"params\" in parsed) {\n const { subscription, result } = parsed.params\n if (result?.event === \"stop\")\n state.activeChainHeads.delete(subscription)\n }\n }\n // If the state is \"Connecting\", then these are messages\n // sent from the `onHalt` function. So, we mus realy them\n if (isActive && state.type !== State.Done) toConsumer(msg)\n }\n\n const send = (msg: string) => {\n if (state.type === State.Done) return\n const parsed = JSON.parse(msg)\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in parsed) {\n const { method, id, params } = parsed as {\n method: string\n id: string\n params: string[]\n }\n const [group, , methodName] = method.split(\"_\")\n\n if (group === \"transaction\") {\n if (methodName === \"stop\") {\n const [synToken] = params\n const active = state.activeBroadcasts.get(synToken)\n state.activeBroadcasts.delete(synToken)\n toConsumer(\n jsonRpcMsg({\n id,\n result: null,\n }),\n )\n\n if (state.type === State.Connected && active && active.upToken) {\n // The response from this request will be ignored later on\n // because it won't be among the ongoing requests. so, it won't get to downstream\n state.connection.send(\n jsonRpcMsg({\n id,\n method,\n params: [active.upToken],\n }),\n )\n }\n\n // prevents the request from being included into the ongoingRequests\n return\n }\n\n if (methodName === \"broadcast\") {\n const synToken = getOpaqueToken()\n state.activeBroadcasts.set(synToken, {\n tx: params[0],\n synToken,\n })\n\n if (state.type === State.Connected) {\n state.pendingBroadcasts.set(id, synToken)\n state.connection.send(msg)\n }\n\n toConsumer(\n jsonRpcMsg({\n id,\n result: synToken,\n }),\n )\n\n // prevents the request to be tracked with the ongoingRequests\n return\n }\n }\n }\n\n if (state.type === State.Connecting) {\n state.pending.push(msg)\n return\n }\n if (parsed.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(parsed.params[0])\n\n if (\"id\" in parsed) {\n const { method, id } = parsed as { method: string; id: string }\n const [group, , methodName] = method.split(\"_\")\n\n const ongoingMsg: OngoingMsg =\n group === \"chainHead\"\n ? methodName === \"follow\"\n ? {\n type: OngoingMsgType.ChainHeadFollow,\n msg,\n }\n : { type: OngoingMsgType.ChainHeadOperation, id }\n : { type: OngoingMsgType.Other, msg }\n state.onGoingRequests.set(id, ongoingMsg)\n }\n\n state.connection.send(msg)\n }\n\n return {\n send,\n disconnect: () => {\n if (state.type === State.Done) return\n if (state.type === State.Connected) state.connection.disconnect()\n state = { type: State.Done }\n },\n connect: (cb) => {\n if (state.type !== State.Connecting) throw new Error(\"Nonesense\")\n\n const { pending, activeBroadcasts } = state\n const onGoingRequests = new Map<string, OngoingMsg>()\n const activeChainHeads = new Set<string>()\n const onHalt = () => {\n const activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n > = state.type !== State.Done ? state.activeBroadcasts : new Map()\n activeBroadcasts.forEach((x) => (x.upToken = undefined))\n state = {\n type: State.Connecting,\n activeBroadcasts,\n pending: [],\n }\n activeChainHeads.forEach((subscription) => {\n // We don't send the messages directy to the consumer\n // b/c they could have disconnected after receiving one\n // of these messages. The `onMsgFromProvider` fn handles that\n onMsgFromProvider(\n jsonRpcMsg({\n params: {\n subscription,\n result: {\n event: \"stop\",\n internal: true,\n },\n },\n }),\n )\n })\n activeChainHeads.clear()\n for (const x of onGoingRequests.values()) {\n if (x.type === OngoingMsgType.ChainHeadOperation)\n onMsgFromProvider(\n jsonRpcMsg({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\n internal: true,\n }),\n )\n else send(x.msg)\n }\n onGoingRequests.clear()\n }\n state = {\n type: State.Connected,\n connection: null as any,\n activeBroadcasts,\n pendingBroadcasts: new Map(),\n onGoingRequests,\n activeChainHeads,\n }\n state.connection = cb(onMsgFromProvider, onHalt)\n activeBroadcasts.forEach((broadcast) => {\n if (state.type === State.Connected) {\n const id = getInternalId()\n state.pendingBroadcasts.set(id, broadcast.synToken)\n send(\n jsonRpcMsg({\n id,\n method: \"transaction_v1_broadcast\",\n params: [broadcast.tx],\n }),\n )\n }\n })\n pending.forEach(send)\n },\n }\n}\n"],"names":["activeBroadcasts"],"mappings":"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"}
|
|
@@ -1,39 +1,44 @@
|
|
|
1
1
|
import { getProxy } from './get-proxy.mjs';
|
|
2
2
|
|
|
3
|
+
const WAIT_BASE = 250;
|
|
3
4
|
const getSyncProvider = (input) => (onMessage) => {
|
|
4
5
|
let proxy = getProxy(onMessage);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} catch (_) {
|
|
6
|
+
let lastHalt = Date.now();
|
|
7
|
+
let consecutiveHalts = 0;
|
|
8
|
+
let token;
|
|
9
|
+
const getWaitTime = () => consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE;
|
|
10
|
+
const startNow = () => input().then((cb) => {
|
|
11
|
+
if (!proxy) {
|
|
12
|
+
try {
|
|
13
|
+
cb(
|
|
14
|
+
() => {
|
|
15
|
+
},
|
|
16
|
+
() => {
|
|
17
17
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
(onMsg, onHalt) => cb(onMsg, () => {
|
|
21
|
-
onHalt();
|
|
22
|
-
start();
|
|
23
|
-
})
|
|
24
|
-
);
|
|
25
|
-
},
|
|
26
|
-
() => {
|
|
27
|
-
proxy && setTimeout(start, 0);
|
|
18
|
+
).disconnect();
|
|
19
|
+
} catch (_) {
|
|
28
20
|
}
|
|
29
|
-
|
|
21
|
+
} else
|
|
22
|
+
proxy.connect(
|
|
23
|
+
(onMsg, onHalt) => cb(onMsg, () => {
|
|
24
|
+
const diff = lastHalt - Date.now();
|
|
25
|
+
consecutiveHalts += diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1;
|
|
26
|
+
lastHalt += diff;
|
|
27
|
+
onHalt();
|
|
28
|
+
start();
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
}, start);
|
|
32
|
+
const start = () => {
|
|
33
|
+
token = setTimeout(startNow, getWaitTime());
|
|
30
34
|
};
|
|
31
|
-
|
|
35
|
+
startNow();
|
|
32
36
|
return {
|
|
33
37
|
send: (msg) => {
|
|
34
38
|
proxy?.send(msg);
|
|
35
39
|
},
|
|
36
40
|
disconnect: () => {
|
|
41
|
+
clearTimeout(token);
|
|
37
42
|
proxy?.disconnect();
|
|
38
43
|
proxy = null;
|
|
39
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-sync-provider.mjs","sources":["../../src/get-sync-provider.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getProxy } from \"./get-proxy\"\nimport { AsyncJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nexport const getSyncProvider =\n (input: () => Promise<AsyncJsonRpcProvider>): JsonRpcProvider =>\n (onMessage) => {\n let proxy: ConnectableJsonRpcConnection | null = getProxy(onMessage)\n\n const
|
|
1
|
+
{"version":3,"file":"get-sync-provider.mjs","sources":["../../src/get-sync-provider.ts"],"sourcesContent":["import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getProxy } from \"./get-proxy\"\nimport { AsyncJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nconst WAIT_BASE = 250\nexport const getSyncProvider =\n (input: () => Promise<AsyncJsonRpcProvider>): JsonRpcProvider =>\n (onMessage) => {\n let proxy: ConnectableJsonRpcConnection | null = getProxy(onMessage)\n let lastHalt = Date.now()\n let consecutiveHalts = 0\n let token: any\n const getWaitTime = () =>\n consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE\n\n const startNow = () =>\n input().then((cb) => {\n if (!proxy) {\n try {\n cb(\n () => {},\n () => {},\n ).disconnect()\n } catch (_) {}\n } else\n proxy.connect((onMsg, onHalt) =>\n cb(onMsg, () => {\n const diff = lastHalt - Date.now()\n consecutiveHalts +=\n diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1\n lastHalt += diff\n onHalt()\n start()\n }),\n )\n }, start)\n\n const start = () => {\n token = setTimeout(startNow, getWaitTime())\n }\n\n startNow()\n return {\n send: (msg) => {\n proxy?.send(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n proxy?.disconnect()\n proxy = null\n },\n }\n }\n"],"names":[],"mappings":";;AAKA,MAAM,SAAA,GAAY,GAAA;AACX,MAAM,eAAA,GACX,CAAC,KAAA,KACD,CAAC,SAAA,KAAc;AACb,EAAA,IAAI,KAAA,GAA6C,SAAS,SAAS,CAAA;AACnE,EAAA,IAAI,QAAA,GAAW,KAAK,GAAA,EAAI;AACxB,EAAA,IAAI,gBAAA,GAAmB,CAAA;AACvB,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,WAAA,GAAc,MAClB,gBAAA,IAAoB,CAAA,IAAK,KAAK,GAAA,CAAI,CAAA,EAAG,gBAAgB,CAAA,GAAI,SAAA;AAE3D,EAAA,MAAM,WAAW,MACf,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,EAAA,KAAO;AACnB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAI;AACF,QAAA,EAAA;AAAA,UACE,MAAM;AAAA,UAAC,CAAA;AAAA,UACP,MAAM;AAAA,UAAC;AAAA,UACP,UAAA,EAAW;AAAA,MACf,SAAS,CAAA,EAAG;AAAA,MAAC;AAAA,IACf,CAAA;AACE,MAAA,KAAA,CAAM,OAAA;AAAA,QAAQ,CAAC,KAAA,EAAO,MAAA,KACpB,EAAA,CAAG,OAAO,MAAM;AACd,UAAA,MAAM,IAAA,GAAO,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI;AACjC,UAAA,gBAAA,IACE,IAAA,GAAO,SAAA,GAAY,WAAA,EAAY,GAAI,CAAC,gBAAA,GAAmB,CAAA;AACzD,UAAA,QAAA,IAAY,IAAA;AACZ,UAAA,MAAA,EAAO;AACP,UAAA,KAAA,EAAM;AAAA,QACR,CAAC;AAAA,OACH;AAAA,EACJ,GAAG,KAAK,CAAA;AAEV,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,KAAA,GAAQ,UAAA,CAAW,QAAA,EAAU,WAAA,EAAa,CAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,QAAA,EAAS;AACT,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,MAAA,KAAA,EAAO,KAAK,GAAG,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,YAAY,MAAM;AAChB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,KAAA,EAAO,UAAA,EAAW;AAClB,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,GACF;AACF;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -164,12 +164,13 @@ const getProxy = (toConsumer) => {
|
|
|
164
164
|
};
|
|
165
165
|
state = {
|
|
166
166
|
type: 0 /* Connected */,
|
|
167
|
-
connection:
|
|
167
|
+
connection: null,
|
|
168
168
|
activeBroadcasts,
|
|
169
169
|
pendingBroadcasts: /* @__PURE__ */ new Map(),
|
|
170
170
|
onGoingRequests,
|
|
171
171
|
activeChainHeads
|
|
172
172
|
};
|
|
173
|
+
state.connection = cb(onMsgFromProvider, onHalt);
|
|
173
174
|
activeBroadcasts.forEach((broadcast) => {
|
|
174
175
|
if (state.type === 0 /* Connected */) {
|
|
175
176
|
const id = getInternalId();
|
|
@@ -188,40 +189,45 @@ const getProxy = (toConsumer) => {
|
|
|
188
189
|
};
|
|
189
190
|
};
|
|
190
191
|
|
|
192
|
+
const WAIT_BASE = 250;
|
|
191
193
|
const getSyncProvider = (input) => (onMessage) => {
|
|
192
194
|
let proxy = getProxy(onMessage);
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
} catch (_) {
|
|
195
|
+
let lastHalt = Date.now();
|
|
196
|
+
let consecutiveHalts = 0;
|
|
197
|
+
let token;
|
|
198
|
+
const getWaitTime = () => consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE;
|
|
199
|
+
const startNow = () => input().then((cb) => {
|
|
200
|
+
if (!proxy) {
|
|
201
|
+
try {
|
|
202
|
+
cb(
|
|
203
|
+
() => {
|
|
204
|
+
},
|
|
205
|
+
() => {
|
|
205
206
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
(onMsg, onHalt) => cb(onMsg, () => {
|
|
209
|
-
onHalt();
|
|
210
|
-
start();
|
|
211
|
-
})
|
|
212
|
-
);
|
|
213
|
-
},
|
|
214
|
-
() => {
|
|
215
|
-
proxy && setTimeout(start, 0);
|
|
207
|
+
).disconnect();
|
|
208
|
+
} catch (_) {
|
|
216
209
|
}
|
|
217
|
-
|
|
210
|
+
} else
|
|
211
|
+
proxy.connect(
|
|
212
|
+
(onMsg, onHalt) => cb(onMsg, () => {
|
|
213
|
+
const diff = lastHalt - Date.now();
|
|
214
|
+
consecutiveHalts += diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1;
|
|
215
|
+
lastHalt += diff;
|
|
216
|
+
onHalt();
|
|
217
|
+
start();
|
|
218
|
+
})
|
|
219
|
+
);
|
|
220
|
+
}, start);
|
|
221
|
+
const start = () => {
|
|
222
|
+
token = setTimeout(startNow, getWaitTime());
|
|
218
223
|
};
|
|
219
|
-
|
|
224
|
+
startNow();
|
|
220
225
|
return {
|
|
221
226
|
send: (msg) => {
|
|
222
227
|
proxy?.send(msg);
|
|
223
228
|
},
|
|
224
229
|
disconnect: () => {
|
|
230
|
+
clearTimeout(token);
|
|
225
231
|
proxy?.disconnect();
|
|
226
232
|
proxy = null;
|
|
227
233
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/json-rpc-message.ts","../src/get-opaque-token.ts","../src/get-proxy.ts","../src/get-sync-provider.ts"],"sourcesContent":["export const jsonRpcMsg = <T extends {}>(msg: T) =>\n JSON.stringify({\n jsonrpc: \"2.0\",\n ...msg,\n })\n","let count = 0\nexport const getOpaqueToken = (): string => `proxyOpaque${count++}`\n","import { JsonRpcConnection } from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { jsonRpcMsg } from \"./json-rpc-message\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\n\nconst enum State {\n Connected,\n Connecting,\n Done,\n}\n\nconst enum OngoingMsgType {\n ChainHeadFollow,\n ChainHeadOperation,\n Other,\n}\ntype OngoingMsg =\n | {\n type: OngoingMsgType.ChainHeadFollow\n msg: string\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: string }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: string) => void,\n) => {\n let state:\n | {\n type: State.Connected\n connection: JsonRpcConnection\n activeChainHeads: Set<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n // the key is the upstream id, the value is the synthetic token\n pendingBroadcasts: Map<string, string>\n\n // These are requests for which their replies should be propagated downstream\n // Therefore, the `pendingBroadcasts` won't be included in here b/c they are synthetic\n onGoingRequests: Map<string, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n }\n | { type: State.Done } = {\n type: State.Connecting,\n activeBroadcasts: new Map(),\n pending: [],\n }\n\n const onMsgFromProvider = (msg: string) => {\n let isActive = true\n if (state.type === State.Connected) {\n const parsed = JSON.parse(msg)\n if (\"id\" in parsed) {\n const { id } = parsed\n if (state.pendingBroadcasts.has(id)) {\n const synToken = state.pendingBroadcasts.get(id)!\n const upToken = parsed.result\n state.pendingBroadcasts.delete(id)\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast)\n state.activeBroadcasts.get(synToken)!.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcMsg({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\n }),\n )\n\n return\n }\n\n isActive = state.onGoingRequests.has(id)\n if (\n \"result\" in parsed &&\n state.onGoingRequests.get(id)?.type === OngoingMsgType.ChainHeadFollow\n )\n state.activeChainHeads.add(parsed.result)\n state.onGoingRequests.delete(parsed.id)\n } else if (\"params\" in parsed) {\n const { subscription, result } = parsed.params\n if (result?.event === \"stop\")\n state.activeChainHeads.delete(subscription)\n }\n }\n // If the state is \"Connecting\", then these are messages\n // sent from the `onHalt` function. So, we mus realy them\n if (isActive && state.type !== State.Done) toConsumer(msg)\n }\n\n const send = (msg: string) => {\n if (state.type === State.Done) return\n const parsed = JSON.parse(msg)\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in parsed) {\n const { method, id, params } = parsed as {\n method: string\n id: string\n params: string[]\n }\n const [group, , methodName] = method.split(\"_\")\n\n if (group === \"transaction\") {\n if (methodName === \"stop\") {\n const [synToken] = params\n const active = state.activeBroadcasts.get(synToken)\n state.activeBroadcasts.delete(synToken)\n toConsumer(\n jsonRpcMsg({\n id,\n result: null,\n }),\n )\n\n if (state.type === State.Connected && active && active.upToken) {\n // The response from this request will be ignored later on\n // because it won't be among the ongoing requests. so, it won't get to downstream\n state.connection.send(\n jsonRpcMsg({\n id,\n method,\n params: [active.upToken],\n }),\n )\n }\n\n // prevents the request from being included into the ongoingRequests\n return\n }\n\n if (methodName === \"broadcast\") {\n const synToken = getOpaqueToken()\n state.activeBroadcasts.set(synToken, {\n tx: params[0],\n synToken,\n })\n\n if (state.type === State.Connected) {\n state.pendingBroadcasts.set(id, synToken)\n state.connection.send(msg)\n }\n\n toConsumer(\n jsonRpcMsg({\n id,\n result: synToken,\n }),\n )\n\n // prevents the request to be tracked with the ongoingRequests\n return\n }\n }\n }\n\n if (state.type === State.Connecting) {\n state.pending.push(msg)\n return\n }\n if (parsed.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(parsed.params[0])\n\n if (\"id\" in parsed) {\n const { method, id } = parsed as { method: string; id: string }\n const [group, , methodName] = method.split(\"_\")\n\n const ongoingMsg: OngoingMsg =\n group === \"chainHead\"\n ? methodName === \"follow\"\n ? {\n type: OngoingMsgType.ChainHeadFollow,\n msg,\n }\n : { type: OngoingMsgType.ChainHeadOperation, id }\n : { type: OngoingMsgType.Other, msg }\n state.onGoingRequests.set(id, ongoingMsg)\n }\n\n state.connection.send(msg)\n }\n\n return {\n send,\n disconnect: () => {\n if (state.type === State.Done) return\n if (state.type === State.Connected) state.connection.disconnect()\n state = { type: State.Done }\n },\n connect: (cb) => {\n if (state.type !== State.Connecting) throw new Error(\"Nonesense\")\n\n const { pending, activeBroadcasts } = state\n const onGoingRequests = new Map<string, OngoingMsg>()\n const activeChainHeads = new Set<string>()\n const onHalt = () => {\n const activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n > = state.type !== State.Done ? state.activeBroadcasts : new Map()\n activeBroadcasts.forEach((x) => (x.upToken = undefined))\n state = {\n type: State.Connecting,\n activeBroadcasts,\n pending: [],\n }\n activeChainHeads.forEach((subscription) => {\n // We don't send the messages directy to the consumer\n // b/c they could have disconnected after receiving one\n // of these messages. The `onMsgFromProvider` fn handles that\n onMsgFromProvider(\n jsonRpcMsg({\n params: {\n subscription,\n result: {\n event: \"stop\",\n internal: true,\n },\n },\n }),\n )\n })\n activeChainHeads.clear()\n for (const x of onGoingRequests.values()) {\n if (x.type === OngoingMsgType.ChainHeadOperation)\n onMsgFromProvider(\n jsonRpcMsg({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\n internal: true,\n }),\n )\n else send(x.msg)\n }\n onGoingRequests.clear()\n }\n state = {\n type: State.Connected,\n connection: cb(onMsgFromProvider, onHalt),\n activeBroadcasts,\n pendingBroadcasts: new Map(),\n onGoingRequests,\n activeChainHeads,\n }\n activeBroadcasts.forEach((broadcast) => {\n if (state.type === State.Connected) {\n const id = getInternalId()\n state.pendingBroadcasts.set(id, broadcast.synToken)\n send(\n jsonRpcMsg({\n id,\n method: \"transaction_v1_broadcast\",\n params: [broadcast.tx],\n }),\n )\n }\n })\n pending.forEach(send)\n },\n }\n}\n","import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getProxy } from \"./get-proxy\"\nimport { AsyncJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nexport const getSyncProvider =\n (input: () => Promise<AsyncJsonRpcProvider>): JsonRpcProvider =>\n (onMessage) => {\n let proxy: ConnectableJsonRpcConnection | null = getProxy(onMessage)\n\n const start = () => {\n input().then(\n (cb) => {\n if (!proxy) {\n try {\n cb(\n () => {},\n () => {},\n ).disconnect()\n } catch (_) {}\n } else\n proxy.connect((onMsg, onHalt) =>\n cb(onMsg, () => {\n onHalt()\n start()\n }),\n )\n },\n () => {\n proxy && setTimeout(start, 0)\n },\n )\n }\n\n start()\n return {\n send: (msg) => {\n proxy?.send(msg)\n },\n disconnect: () => {\n proxy?.disconnect()\n proxy = null\n },\n }\n }\n"],"names":["activeBroadcasts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/json-rpc-message.ts","../src/get-opaque-token.ts","../src/get-proxy.ts","../src/get-sync-provider.ts"],"sourcesContent":["export const jsonRpcMsg = <T extends {}>(msg: T) =>\n JSON.stringify({\n jsonrpc: \"2.0\",\n ...msg,\n })\n","let count = 0\nexport const getOpaqueToken = (): string => `proxyOpaque${count++}`\n","import { JsonRpcConnection } from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { jsonRpcMsg } from \"./json-rpc-message\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\n\nconst enum State {\n Connected,\n Connecting,\n Done,\n}\n\nconst enum OngoingMsgType {\n ChainHeadFollow,\n ChainHeadOperation,\n Other,\n}\ntype OngoingMsg =\n | {\n type: OngoingMsgType.ChainHeadFollow\n msg: string\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: string }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: string) => void,\n) => {\n let state:\n | {\n type: State.Connected\n connection: JsonRpcConnection\n activeChainHeads: Set<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n // the key is the upstream id, the value is the synthetic token\n pendingBroadcasts: Map<string, string>\n\n // These are requests for which their replies should be propagated downstream\n // Therefore, the `pendingBroadcasts` won't be included in here b/c they are synthetic\n onGoingRequests: Map<string, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<string>\n activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n >\n }\n | { type: State.Done } = {\n type: State.Connecting,\n activeBroadcasts: new Map(),\n pending: [],\n }\n\n const onMsgFromProvider = (msg: string) => {\n let isActive = true\n if (state.type === State.Connected) {\n const parsed = JSON.parse(msg)\n if (\"id\" in parsed) {\n const { id } = parsed\n if (state.pendingBroadcasts.has(id)) {\n const synToken = state.pendingBroadcasts.get(id)!\n const upToken = parsed.result\n state.pendingBroadcasts.delete(id)\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast)\n state.activeBroadcasts.get(synToken)!.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcMsg({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\n }),\n )\n\n return\n }\n\n isActive = state.onGoingRequests.has(id)\n if (\n \"result\" in parsed &&\n state.onGoingRequests.get(id)?.type === OngoingMsgType.ChainHeadFollow\n )\n state.activeChainHeads.add(parsed.result)\n state.onGoingRequests.delete(parsed.id)\n } else if (\"params\" in parsed) {\n const { subscription, result } = parsed.params\n if (result?.event === \"stop\")\n state.activeChainHeads.delete(subscription)\n }\n }\n // If the state is \"Connecting\", then these are messages\n // sent from the `onHalt` function. So, we mus realy them\n if (isActive && state.type !== State.Done) toConsumer(msg)\n }\n\n const send = (msg: string) => {\n if (state.type === State.Done) return\n const parsed = JSON.parse(msg)\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in parsed) {\n const { method, id, params } = parsed as {\n method: string\n id: string\n params: string[]\n }\n const [group, , methodName] = method.split(\"_\")\n\n if (group === \"transaction\") {\n if (methodName === \"stop\") {\n const [synToken] = params\n const active = state.activeBroadcasts.get(synToken)\n state.activeBroadcasts.delete(synToken)\n toConsumer(\n jsonRpcMsg({\n id,\n result: null,\n }),\n )\n\n if (state.type === State.Connected && active && active.upToken) {\n // The response from this request will be ignored later on\n // because it won't be among the ongoing requests. so, it won't get to downstream\n state.connection.send(\n jsonRpcMsg({\n id,\n method,\n params: [active.upToken],\n }),\n )\n }\n\n // prevents the request from being included into the ongoingRequests\n return\n }\n\n if (methodName === \"broadcast\") {\n const synToken = getOpaqueToken()\n state.activeBroadcasts.set(synToken, {\n tx: params[0],\n synToken,\n })\n\n if (state.type === State.Connected) {\n state.pendingBroadcasts.set(id, synToken)\n state.connection.send(msg)\n }\n\n toConsumer(\n jsonRpcMsg({\n id,\n result: synToken,\n }),\n )\n\n // prevents the request to be tracked with the ongoingRequests\n return\n }\n }\n }\n\n if (state.type === State.Connecting) {\n state.pending.push(msg)\n return\n }\n if (parsed.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(parsed.params[0])\n\n if (\"id\" in parsed) {\n const { method, id } = parsed as { method: string; id: string }\n const [group, , methodName] = method.split(\"_\")\n\n const ongoingMsg: OngoingMsg =\n group === \"chainHead\"\n ? methodName === \"follow\"\n ? {\n type: OngoingMsgType.ChainHeadFollow,\n msg,\n }\n : { type: OngoingMsgType.ChainHeadOperation, id }\n : { type: OngoingMsgType.Other, msg }\n state.onGoingRequests.set(id, ongoingMsg)\n }\n\n state.connection.send(msg)\n }\n\n return {\n send,\n disconnect: () => {\n if (state.type === State.Done) return\n if (state.type === State.Connected) state.connection.disconnect()\n state = { type: State.Done }\n },\n connect: (cb) => {\n if (state.type !== State.Connecting) throw new Error(\"Nonesense\")\n\n const { pending, activeBroadcasts } = state\n const onGoingRequests = new Map<string, OngoingMsg>()\n const activeChainHeads = new Set<string>()\n const onHalt = () => {\n const activeBroadcasts: Map<\n string,\n { tx: string; synToken: string; upToken?: string }\n > = state.type !== State.Done ? state.activeBroadcasts : new Map()\n activeBroadcasts.forEach((x) => (x.upToken = undefined))\n state = {\n type: State.Connecting,\n activeBroadcasts,\n pending: [],\n }\n activeChainHeads.forEach((subscription) => {\n // We don't send the messages directy to the consumer\n // b/c they could have disconnected after receiving one\n // of these messages. The `onMsgFromProvider` fn handles that\n onMsgFromProvider(\n jsonRpcMsg({\n params: {\n subscription,\n result: {\n event: \"stop\",\n internal: true,\n },\n },\n }),\n )\n })\n activeChainHeads.clear()\n for (const x of onGoingRequests.values()) {\n if (x.type === OngoingMsgType.ChainHeadOperation)\n onMsgFromProvider(\n jsonRpcMsg({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\n internal: true,\n }),\n )\n else send(x.msg)\n }\n onGoingRequests.clear()\n }\n state = {\n type: State.Connected,\n connection: null as any,\n activeBroadcasts,\n pendingBroadcasts: new Map(),\n onGoingRequests,\n activeChainHeads,\n }\n state.connection = cb(onMsgFromProvider, onHalt)\n activeBroadcasts.forEach((broadcast) => {\n if (state.type === State.Connected) {\n const id = getInternalId()\n state.pendingBroadcasts.set(id, broadcast.synToken)\n send(\n jsonRpcMsg({\n id,\n method: \"transaction_v1_broadcast\",\n params: [broadcast.tx],\n }),\n )\n }\n })\n pending.forEach(send)\n },\n }\n}\n","import type { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { getProxy } from \"./get-proxy\"\nimport { AsyncJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nconst WAIT_BASE = 250\nexport const getSyncProvider =\n (input: () => Promise<AsyncJsonRpcProvider>): JsonRpcProvider =>\n (onMessage) => {\n let proxy: ConnectableJsonRpcConnection | null = getProxy(onMessage)\n let lastHalt = Date.now()\n let consecutiveHalts = 0\n let token: any\n const getWaitTime = () =>\n consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE\n\n const startNow = () =>\n input().then((cb) => {\n if (!proxy) {\n try {\n cb(\n () => {},\n () => {},\n ).disconnect()\n } catch (_) {}\n } else\n proxy.connect((onMsg, onHalt) =>\n cb(onMsg, () => {\n const diff = lastHalt - Date.now()\n consecutiveHalts +=\n diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1\n lastHalt += diff\n onHalt()\n start()\n }),\n )\n }, start)\n\n const start = () => {\n token = setTimeout(startNow, getWaitTime())\n }\n\n startNow()\n return {\n send: (msg) => {\n proxy?.send(msg)\n },\n disconnect: () => {\n clearTimeout(token)\n proxy?.disconnect()\n proxy = null\n },\n }\n }\n"],"names":["activeBroadcasts"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/json-rpc-provider-proxy",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|
|
42
42
|
"build": "pnpm build-core",
|
|
43
|
-
"test": "
|
|
43
|
+
"test": "vitest",
|
|
44
44
|
"lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
|
|
45
45
|
"format": "prettier --write README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\""
|
|
46
46
|
}
|