@polkadot-api/json-rpc-provider-proxy 0.2.8 → 0.3.1-canary.9729e61
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 +25 -26
- package/dist/esm/get-proxy.mjs.map +1 -1
- package/dist/esm/get-sync-provider.mjs +33 -30
- package/dist/esm/get-sync-provider.mjs.map +1 -1
- package/dist/esm/json-rpc-message.mjs +6 -2
- package/dist/esm/json-rpc-message.mjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +66 -59
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/esm/get-proxy.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isResponse } from '@polkadot-api/json-rpc-provider';
|
|
2
2
|
import { getOpaqueToken } from './get-opaque-token.mjs';
|
|
3
|
+
import { jsonRpcReq, jsonRpcRsp } from './json-rpc-message.mjs';
|
|
3
4
|
|
|
4
5
|
const getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`;
|
|
5
6
|
const getProxy = (toConsumer) => {
|
|
@@ -8,22 +9,21 @@ const getProxy = (toConsumer) => {
|
|
|
8
9
|
activeBroadcasts: /* @__PURE__ */ new Map(),
|
|
9
10
|
pending: []
|
|
10
11
|
};
|
|
11
|
-
const onMsgFromProvider = (
|
|
12
|
+
const onMsgFromProvider = (parsed) => {
|
|
12
13
|
let isActive = true;
|
|
13
14
|
if (state.type === 0 /* Connected */) {
|
|
14
|
-
|
|
15
|
-
if ("id" in parsed) {
|
|
15
|
+
if (isResponse(parsed)) {
|
|
16
16
|
const { id } = parsed;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const upToken = parsed.result;
|
|
17
|
+
const synToken = state.pendingBroadcasts.get(id);
|
|
18
|
+
if (synToken) {
|
|
20
19
|
state.pendingBroadcasts.delete(id);
|
|
20
|
+
if (!("result" in parsed)) return;
|
|
21
|
+
const upToken = parsed.result;
|
|
21
22
|
const activeBroadcast = state.activeBroadcasts.get(synToken);
|
|
22
|
-
if (activeBroadcast)
|
|
23
|
-
state.activeBroadcasts.get(synToken).upToken = upToken;
|
|
23
|
+
if (activeBroadcast) activeBroadcast.upToken = upToken;
|
|
24
24
|
else
|
|
25
25
|
state.connection.send(
|
|
26
|
-
|
|
26
|
+
jsonRpcReq({
|
|
27
27
|
id: getInternalId(),
|
|
28
28
|
method: "transaction_v1_stop",
|
|
29
29
|
params: [upToken]
|
|
@@ -41,13 +41,12 @@ const getProxy = (toConsumer) => {
|
|
|
41
41
|
state.activeChainHeads.delete(subscription);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
|
-
if (isActive && state.type !== 2 /* Done */) toConsumer(
|
|
44
|
+
if (isActive && state.type !== 2 /* Done */) toConsumer(parsed);
|
|
45
45
|
};
|
|
46
46
|
const send = (msg) => {
|
|
47
47
|
if (state.type === 2 /* Done */) return;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const { method, id, params } = parsed;
|
|
48
|
+
if ("id" in msg) {
|
|
49
|
+
const { method, id, params } = msg;
|
|
51
50
|
const [group, , methodName] = method.split("_");
|
|
52
51
|
if (group === "transaction") {
|
|
53
52
|
if (methodName === "stop") {
|
|
@@ -55,14 +54,14 @@ const getProxy = (toConsumer) => {
|
|
|
55
54
|
const active = state.activeBroadcasts.get(synToken);
|
|
56
55
|
state.activeBroadcasts.delete(synToken);
|
|
57
56
|
toConsumer(
|
|
58
|
-
|
|
57
|
+
jsonRpcRsp({
|
|
59
58
|
id,
|
|
60
59
|
result: null
|
|
61
60
|
})
|
|
62
61
|
);
|
|
63
62
|
if (state.type === 0 /* Connected */ && active && active.upToken) {
|
|
64
63
|
state.connection.send(
|
|
65
|
-
|
|
64
|
+
jsonRpcReq({
|
|
66
65
|
id,
|
|
67
66
|
method,
|
|
68
67
|
params: [active.upToken]
|
|
@@ -82,7 +81,7 @@ const getProxy = (toConsumer) => {
|
|
|
82
81
|
state.connection.send(msg);
|
|
83
82
|
}
|
|
84
83
|
toConsumer(
|
|
85
|
-
|
|
84
|
+
jsonRpcRsp({
|
|
86
85
|
id,
|
|
87
86
|
result: synToken
|
|
88
87
|
})
|
|
@@ -95,10 +94,10 @@ const getProxy = (toConsumer) => {
|
|
|
95
94
|
state.pending.push(msg);
|
|
96
95
|
return;
|
|
97
96
|
}
|
|
98
|
-
if (
|
|
99
|
-
state.activeChainHeads.delete(
|
|
100
|
-
if ("id" in
|
|
101
|
-
const { method, id } =
|
|
97
|
+
if (msg.method === "chainHead_v1_unfollow")
|
|
98
|
+
state.activeChainHeads.delete(msg.params[0]);
|
|
99
|
+
if ("id" in msg) {
|
|
100
|
+
const { method, id } = msg;
|
|
102
101
|
const [group, , methodName] = method.split("_");
|
|
103
102
|
const ongoingMsg = group === "chainHead" ? methodName === "follow" ? {
|
|
104
103
|
type: 0 /* ChainHeadFollow */,
|
|
@@ -130,7 +129,8 @@ const getProxy = (toConsumer) => {
|
|
|
130
129
|
};
|
|
131
130
|
activeChainHeads.forEach((subscription) => {
|
|
132
131
|
onMsgFromProvider(
|
|
133
|
-
|
|
132
|
+
jsonRpcReq({
|
|
133
|
+
method: "chainHead_v1_follow",
|
|
134
134
|
params: {
|
|
135
135
|
subscription,
|
|
136
136
|
result: {
|
|
@@ -145,10 +145,9 @@ const getProxy = (toConsumer) => {
|
|
|
145
145
|
for (const x of onGoingRequests.values()) {
|
|
146
146
|
if (x.type === 1 /* ChainHeadOperation */)
|
|
147
147
|
onMsgFromProvider(
|
|
148
|
-
|
|
148
|
+
jsonRpcRsp({
|
|
149
149
|
id: x.id,
|
|
150
|
-
error: { code: -32603, message: "Internal error" }
|
|
151
|
-
internal: true
|
|
150
|
+
error: { code: -32603, message: "Internal error" }
|
|
152
151
|
})
|
|
153
152
|
);
|
|
154
153
|
else send(x.msg);
|
|
@@ -169,7 +168,7 @@ const getProxy = (toConsumer) => {
|
|
|
169
168
|
const id = getInternalId();
|
|
170
169
|
state.pendingBroadcasts.set(id, broadcast.synToken);
|
|
171
170
|
send(
|
|
172
|
-
|
|
171
|
+
jsonRpcReq({
|
|
173
172
|
id,
|
|
174
173
|
method: "transaction_v1_broadcast",
|
|
175
174
|
params: [broadcast.tx]
|
|
@@ -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: 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
|
+
{"version":3,"file":"get-proxy.mjs","sources":["../../src/get-proxy.ts"],"sourcesContent":["import {\n isResponse,\n JsonRpcConnection,\n JsonRpcId,\n JsonRpcMessage,\n JsonRpcRequest,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\nimport { jsonRpcReq, jsonRpcRsp } from \"./json-rpc-message\"\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: JsonRpcRequest\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: JsonRpcRequest }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: JsonRpcMessage) => 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<JsonRpcId, 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<JsonRpcId, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<JsonRpcRequest>\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 = (parsed: JsonRpcMessage) => {\n let isActive = true\n if (state.type === State.Connected) {\n if (isResponse(parsed)) {\n const { id } = parsed\n const synToken = state.pendingBroadcasts.get(id)\n if (synToken) {\n state.pendingBroadcasts.delete(id)\n\n // it's guaranteed to be there b/c we control it\n if (!(\"result\" in parsed)) return\n\n const upToken = parsed.result\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast) activeBroadcast.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcReq({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\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(parsed)\n }\n\n const send = (msg: JsonRpcRequest) => {\n if (state.type === State.Done) return\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in msg) {\n const { method, id, params } = msg 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 jsonRpcRsp({\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 jsonRpcReq({\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 jsonRpcRsp({\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 (msg.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(msg.params[0])\n\n if (\"id\" in msg) {\n const { method, id } = msg 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 jsonRpcReq({\n method: \"chainHead_v1_follow\",\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 jsonRpcRsp({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\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 jsonRpcReq({\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,5 +1,7 @@
|
|
|
1
1
|
import { getProxy } from './get-proxy.mjs';
|
|
2
2
|
|
|
3
|
+
const noop = () => {
|
|
4
|
+
};
|
|
3
5
|
const WAIT_BASE = 250;
|
|
4
6
|
const getSyncProvider = (input) => (onMessage) => {
|
|
5
7
|
let proxy = getProxy(onMessage);
|
|
@@ -7,46 +9,47 @@ const getSyncProvider = (input) => (onMessage) => {
|
|
|
7
9
|
let consecutiveHalts = 0;
|
|
8
10
|
let token;
|
|
9
11
|
const getWaitTime = () => consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
});
|
|
12
|
+
let stop = noop;
|
|
13
|
+
let startNow = () => {
|
|
14
|
+
const token2 = setTimeout(() => {
|
|
15
|
+
let isWaiting = true;
|
|
16
|
+
const result = input((cb) => {
|
|
17
|
+
isWaiting = false;
|
|
18
|
+
stop = noop;
|
|
19
|
+
if (!cb) start();
|
|
20
|
+
else if (proxy)
|
|
21
|
+
proxy.connect((onMsg, onHalt) => {
|
|
22
|
+
let isOn = true;
|
|
23
|
+
return cb(onMsg, (e) => {
|
|
24
|
+
if (isOn) {
|
|
25
|
+
isOn = false;
|
|
26
|
+
const diff = Date.now() - lastHalt;
|
|
27
|
+
consecutiveHalts += diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1;
|
|
28
|
+
lastHalt += diff;
|
|
29
|
+
onHalt(e);
|
|
30
|
+
start();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
34
|
});
|
|
35
|
-
|
|
35
|
+
if (isWaiting) stop = result;
|
|
36
|
+
}, 0);
|
|
37
|
+
stop = () => clearTimeout(token2);
|
|
38
|
+
};
|
|
36
39
|
const start = () => {
|
|
37
40
|
token = setTimeout(startNow, getWaitTime());
|
|
38
41
|
};
|
|
39
42
|
startNow();
|
|
40
43
|
return {
|
|
41
|
-
send
|
|
44
|
+
send(msg) {
|
|
42
45
|
proxy?.send(msg);
|
|
43
46
|
},
|
|
44
|
-
disconnect
|
|
47
|
+
disconnect() {
|
|
45
48
|
clearTimeout(token);
|
|
46
|
-
|
|
47
|
-
|
|
49
|
+
stop();
|
|
50
|
+
stop = noop;
|
|
51
|
+
proxy?.disconnect();
|
|
48
52
|
proxy = null;
|
|
49
|
-
disconnect();
|
|
50
53
|
}
|
|
51
54
|
};
|
|
52
55
|
};
|
|
@@ -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 {
|
|
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 { InnerJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nconst noop = () => {}\nconst WAIT_BASE = 250\n\nexport const getSyncProvider =\n (\n input: (onResult: (x: InnerJsonRpcProvider | null) => void) => () => void,\n ): 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 let stop = noop\n let startNow = () => {\n const token = setTimeout(() => {\n let isWaiting = true\n const result = input((cb) => {\n isWaiting = false\n stop = noop\n if (!cb) start()\n else if (proxy)\n proxy.connect((onMsg, onHalt) => {\n let isOn = true\n return cb(onMsg, (e) => {\n if (isOn) {\n isOn = false\n const diff = Date.now() - lastHalt\n consecutiveHalts +=\n diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1\n lastHalt += diff\n onHalt(e)\n start()\n }\n })\n })\n })\n if (isWaiting) stop = result\n }, 0)\n stop = () => clearTimeout(token)\n }\n\n const start = () => {\n token = setTimeout(startNow, getWaitTime())\n }\n startNow()\n\n return {\n send(msg) {\n proxy?.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n stop()\n stop = noop\n proxy?.disconnect()\n proxy = null\n },\n }\n }\n"],"names":["token"],"mappings":";;AAKA,MAAM,OAAO,MAAM;AAAC,CAAA;AACpB,MAAM,SAAA,GAAY,GAAA;AAEX,MAAM,eAAA,GACX,CACE,KAAA,KAEF,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,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,WAAW,MAAM;AACnB,IAAA,MAAMA,MAAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI,SAAA,GAAY,IAAA;AAChB,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,CAAC,EAAA,KAAO;AAC3B,QAAA,SAAA,GAAY,KAAA;AACZ,QAAA,IAAA,GAAO,IAAA;AACP,QAAA,IAAI,CAAC,IAAI,KAAA,EAAM;AAAA,aAAA,IACN,KAAA;AACP,UAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,EAAO,MAAA,KAAW;AAC/B,YAAA,IAAI,IAAA,GAAO,IAAA;AACX,YAAA,OAAO,EAAA,CAAG,KAAA,EAAO,CAAC,CAAA,KAAM;AACtB,cAAA,IAAI,IAAA,EAAM;AACR,gBAAA,IAAA,GAAO,KAAA;AACP,gBAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAI,GAAI,QAAA;AAC1B,gBAAA,gBAAA,IACE,IAAA,GAAO,SAAA,GAAY,WAAA,EAAY,GAAI,CAAC,gBAAA,GAAmB,CAAA;AACzD,gBAAA,QAAA,IAAY,IAAA;AACZ,gBAAA,MAAA,CAAO,CAAC,CAAA;AACR,gBAAA,KAAA,EAAM;AAAA,cACR;AAAA,YACF,CAAC,CAAA;AAAA,UACH,CAAC,CAAA;AAAA,MACL,CAAC,CAAA;AACD,MAAA,IAAI,WAAW,IAAA,GAAO,MAAA;AAAA,IACxB,GAAG,CAAC,CAAA;AACJ,IAAA,IAAA,GAAO,MAAM,aAAaA,MAAK,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,KAAA,GAAQ,UAAA,CAAW,QAAA,EAAU,WAAA,EAAa,CAAA;AAAA,EAC5C,CAAA;AACA,EAAA,QAAA,EAAS;AAET,EAAA,OAAO;AAAA,IACL,KAAK,GAAA,EAAK;AACR,MAAA,KAAA,EAAO,KAAK,GAAG,CAAA;AAAA,IACjB,CAAA;AAAA,IACA,UAAA,GAAa;AACX,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAA,EAAK;AACL,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,KAAA,EAAO,UAAA,EAAW;AAClB,MAAA,KAAA,GAAQ,IAAA;AAAA,IACV;AAAA,GACF;AACF;;;;"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
const
|
|
1
|
+
const jsonRpcReq = (msg) => ({
|
|
2
|
+
jsonrpc: "2.0",
|
|
3
|
+
...msg
|
|
4
|
+
});
|
|
5
|
+
const jsonRpcRsp = (msg) => ({
|
|
2
6
|
jsonrpc: "2.0",
|
|
3
7
|
...msg
|
|
4
8
|
});
|
|
5
9
|
|
|
6
|
-
export {
|
|
10
|
+
export { jsonRpcReq, jsonRpcRsp };
|
|
7
11
|
//# sourceMappingURL=json-rpc-message.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-rpc-message.mjs","sources":["../../src/json-rpc-message.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"json-rpc-message.mjs","sources":["../../src/json-rpc-message.ts"],"sourcesContent":["import {\n JsonRpcError,\n JsonRpcId,\n JsonRpcRequest,\n JsonRpcResponse,\n} from \"@polkadot-api/json-rpc-provider\"\n\nexport const jsonRpcReq = (\n msg: Omit<JsonRpcRequest, \"jsonrpc\">,\n): JsonRpcRequest => ({\n jsonrpc: \"2.0\" as \"2.0\",\n ...msg,\n})\n\nexport const jsonRpcRsp = <T = any>(\n msg: { id: JsonRpcId } & (\n | {\n result: T\n }\n | {\n error: JsonRpcError<T>\n }\n ),\n): JsonRpcResponse => ({\n jsonrpc: \"2.0\" as \"2.0\",\n ...msg,\n})\n"],"names":[],"mappings":"AAOO,MAAM,UAAA,GAAa,CACxB,GAAA,MACoB;AAAA,EACpB,OAAA,EAAS,KAAA;AAAA,EACT,GAAG;AACL,CAAA;AAEO,MAAM,UAAA,GAAa,CACxB,GAAA,MAQqB;AAAA,EACrB,OAAA,EAAS,KAAA;AAAA,EACT,GAAG;AACL,CAAA;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { JsonRpcConnection, JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
1
|
+
import { JsonRpcMessage, JsonRpcConnection, JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
2
2
|
|
|
3
|
-
type
|
|
3
|
+
type InnerJsonRpcProvider<T = any> = (onMessage: (message: JsonRpcMessage<T>) => void, onHalt: (e?: any) => void) => JsonRpcConnection<T>;
|
|
4
4
|
|
|
5
|
-
declare const getSyncProvider: (input: () =>
|
|
5
|
+
declare const getSyncProvider: (input: (onResult: (x: InnerJsonRpcProvider | null) => void) => () => void) => JsonRpcProvider;
|
|
6
6
|
|
|
7
7
|
export { getSyncProvider };
|
|
8
|
-
export type {
|
|
8
|
+
export type { InnerJsonRpcProvider };
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
jsonrpc: "2.0",
|
|
5
|
-
...msg
|
|
6
|
-
});
|
|
3
|
+
var jsonRpcProvider = require('@polkadot-api/json-rpc-provider');
|
|
7
4
|
|
|
8
5
|
let count = 0;
|
|
9
6
|
const getOpaqueToken = () => `proxyOpaque${count++}`;
|
|
10
7
|
|
|
8
|
+
const jsonRpcReq = (msg) => ({
|
|
9
|
+
jsonrpc: "2.0",
|
|
10
|
+
...msg
|
|
11
|
+
});
|
|
12
|
+
const jsonRpcRsp = (msg) => ({
|
|
13
|
+
jsonrpc: "2.0",
|
|
14
|
+
...msg
|
|
15
|
+
});
|
|
16
|
+
|
|
11
17
|
const getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`;
|
|
12
18
|
const getProxy = (toConsumer) => {
|
|
13
19
|
let state = {
|
|
@@ -15,22 +21,21 @@ const getProxy = (toConsumer) => {
|
|
|
15
21
|
activeBroadcasts: /* @__PURE__ */ new Map(),
|
|
16
22
|
pending: []
|
|
17
23
|
};
|
|
18
|
-
const onMsgFromProvider = (
|
|
24
|
+
const onMsgFromProvider = (parsed) => {
|
|
19
25
|
let isActive = true;
|
|
20
26
|
if (state.type === 0 /* Connected */) {
|
|
21
|
-
|
|
22
|
-
if ("id" in parsed) {
|
|
27
|
+
if (jsonRpcProvider.isResponse(parsed)) {
|
|
23
28
|
const { id } = parsed;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const upToken = parsed.result;
|
|
29
|
+
const synToken = state.pendingBroadcasts.get(id);
|
|
30
|
+
if (synToken) {
|
|
27
31
|
state.pendingBroadcasts.delete(id);
|
|
32
|
+
if (!("result" in parsed)) return;
|
|
33
|
+
const upToken = parsed.result;
|
|
28
34
|
const activeBroadcast = state.activeBroadcasts.get(synToken);
|
|
29
|
-
if (activeBroadcast)
|
|
30
|
-
state.activeBroadcasts.get(synToken).upToken = upToken;
|
|
35
|
+
if (activeBroadcast) activeBroadcast.upToken = upToken;
|
|
31
36
|
else
|
|
32
37
|
state.connection.send(
|
|
33
|
-
|
|
38
|
+
jsonRpcReq({
|
|
34
39
|
id: getInternalId(),
|
|
35
40
|
method: "transaction_v1_stop",
|
|
36
41
|
params: [upToken]
|
|
@@ -48,13 +53,12 @@ const getProxy = (toConsumer) => {
|
|
|
48
53
|
state.activeChainHeads.delete(subscription);
|
|
49
54
|
}
|
|
50
55
|
}
|
|
51
|
-
if (isActive && state.type !== 2 /* Done */) toConsumer(
|
|
56
|
+
if (isActive && state.type !== 2 /* Done */) toConsumer(parsed);
|
|
52
57
|
};
|
|
53
58
|
const send = (msg) => {
|
|
54
59
|
if (state.type === 2 /* Done */) return;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
const { method, id, params } = parsed;
|
|
60
|
+
if ("id" in msg) {
|
|
61
|
+
const { method, id, params } = msg;
|
|
58
62
|
const [group, , methodName] = method.split("_");
|
|
59
63
|
if (group === "transaction") {
|
|
60
64
|
if (methodName === "stop") {
|
|
@@ -62,14 +66,14 @@ const getProxy = (toConsumer) => {
|
|
|
62
66
|
const active = state.activeBroadcasts.get(synToken);
|
|
63
67
|
state.activeBroadcasts.delete(synToken);
|
|
64
68
|
toConsumer(
|
|
65
|
-
|
|
69
|
+
jsonRpcRsp({
|
|
66
70
|
id,
|
|
67
71
|
result: null
|
|
68
72
|
})
|
|
69
73
|
);
|
|
70
74
|
if (state.type === 0 /* Connected */ && active && active.upToken) {
|
|
71
75
|
state.connection.send(
|
|
72
|
-
|
|
76
|
+
jsonRpcReq({
|
|
73
77
|
id,
|
|
74
78
|
method,
|
|
75
79
|
params: [active.upToken]
|
|
@@ -89,7 +93,7 @@ const getProxy = (toConsumer) => {
|
|
|
89
93
|
state.connection.send(msg);
|
|
90
94
|
}
|
|
91
95
|
toConsumer(
|
|
92
|
-
|
|
96
|
+
jsonRpcRsp({
|
|
93
97
|
id,
|
|
94
98
|
result: synToken
|
|
95
99
|
})
|
|
@@ -102,10 +106,10 @@ const getProxy = (toConsumer) => {
|
|
|
102
106
|
state.pending.push(msg);
|
|
103
107
|
return;
|
|
104
108
|
}
|
|
105
|
-
if (
|
|
106
|
-
state.activeChainHeads.delete(
|
|
107
|
-
if ("id" in
|
|
108
|
-
const { method, id } =
|
|
109
|
+
if (msg.method === "chainHead_v1_unfollow")
|
|
110
|
+
state.activeChainHeads.delete(msg.params[0]);
|
|
111
|
+
if ("id" in msg) {
|
|
112
|
+
const { method, id } = msg;
|
|
109
113
|
const [group, , methodName] = method.split("_");
|
|
110
114
|
const ongoingMsg = group === "chainHead" ? methodName === "follow" ? {
|
|
111
115
|
type: 0 /* ChainHeadFollow */,
|
|
@@ -137,7 +141,8 @@ const getProxy = (toConsumer) => {
|
|
|
137
141
|
};
|
|
138
142
|
activeChainHeads.forEach((subscription) => {
|
|
139
143
|
onMsgFromProvider(
|
|
140
|
-
|
|
144
|
+
jsonRpcReq({
|
|
145
|
+
method: "chainHead_v1_follow",
|
|
141
146
|
params: {
|
|
142
147
|
subscription,
|
|
143
148
|
result: {
|
|
@@ -152,10 +157,9 @@ const getProxy = (toConsumer) => {
|
|
|
152
157
|
for (const x of onGoingRequests.values()) {
|
|
153
158
|
if (x.type === 1 /* ChainHeadOperation */)
|
|
154
159
|
onMsgFromProvider(
|
|
155
|
-
|
|
160
|
+
jsonRpcRsp({
|
|
156
161
|
id: x.id,
|
|
157
|
-
error: { code: -32603, message: "Internal error" }
|
|
158
|
-
internal: true
|
|
162
|
+
error: { code: -32603, message: "Internal error" }
|
|
159
163
|
})
|
|
160
164
|
);
|
|
161
165
|
else send(x.msg);
|
|
@@ -176,7 +180,7 @@ const getProxy = (toConsumer) => {
|
|
|
176
180
|
const id = getInternalId();
|
|
177
181
|
state.pendingBroadcasts.set(id, broadcast.synToken);
|
|
178
182
|
send(
|
|
179
|
-
|
|
183
|
+
jsonRpcReq({
|
|
180
184
|
id,
|
|
181
185
|
method: "transaction_v1_broadcast",
|
|
182
186
|
params: [broadcast.tx]
|
|
@@ -189,6 +193,8 @@ const getProxy = (toConsumer) => {
|
|
|
189
193
|
};
|
|
190
194
|
};
|
|
191
195
|
|
|
196
|
+
const noop = () => {
|
|
197
|
+
};
|
|
192
198
|
const WAIT_BASE = 250;
|
|
193
199
|
const getSyncProvider = (input) => (onMessage) => {
|
|
194
200
|
let proxy = getProxy(onMessage);
|
|
@@ -196,46 +202,47 @@ const getSyncProvider = (input) => (onMessage) => {
|
|
|
196
202
|
let consecutiveHalts = 0;
|
|
197
203
|
let token;
|
|
198
204
|
const getWaitTime = () => consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE;
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
});
|
|
205
|
+
let stop = noop;
|
|
206
|
+
let startNow = () => {
|
|
207
|
+
const token2 = setTimeout(() => {
|
|
208
|
+
let isWaiting = true;
|
|
209
|
+
const result = input((cb) => {
|
|
210
|
+
isWaiting = false;
|
|
211
|
+
stop = noop;
|
|
212
|
+
if (!cb) start();
|
|
213
|
+
else if (proxy)
|
|
214
|
+
proxy.connect((onMsg, onHalt) => {
|
|
215
|
+
let isOn = true;
|
|
216
|
+
return cb(onMsg, (e) => {
|
|
217
|
+
if (isOn) {
|
|
218
|
+
isOn = false;
|
|
219
|
+
const diff = Date.now() - lastHalt;
|
|
220
|
+
consecutiveHalts += diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1;
|
|
221
|
+
lastHalt += diff;
|
|
222
|
+
onHalt(e);
|
|
223
|
+
start();
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
});
|
|
223
227
|
});
|
|
224
|
-
|
|
228
|
+
if (isWaiting) stop = result;
|
|
229
|
+
}, 0);
|
|
230
|
+
stop = () => clearTimeout(token2);
|
|
231
|
+
};
|
|
225
232
|
const start = () => {
|
|
226
233
|
token = setTimeout(startNow, getWaitTime());
|
|
227
234
|
};
|
|
228
235
|
startNow();
|
|
229
236
|
return {
|
|
230
|
-
send
|
|
237
|
+
send(msg) {
|
|
231
238
|
proxy?.send(msg);
|
|
232
239
|
},
|
|
233
|
-
disconnect
|
|
240
|
+
disconnect() {
|
|
234
241
|
clearTimeout(token);
|
|
235
|
-
|
|
236
|
-
|
|
242
|
+
stop();
|
|
243
|
+
stop = noop;
|
|
244
|
+
proxy?.disconnect();
|
|
237
245
|
proxy = null;
|
|
238
|
-
disconnect();
|
|
239
246
|
}
|
|
240
247
|
};
|
|
241
248
|
};
|
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: 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 let isOn = true\n return cb(onMsg, () => {\n if (isOn) {\n isOn = false\n const diff = Date.now() - lastHalt\n consecutiveHalts +=\n diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1\n lastHalt += diff\n onHalt()\n start()\n }\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 const disconnect = proxy?.disconnect || (() => {})\n proxy = null\n disconnect()\n },\n }\n }\n"],"names":["activeBroadcasts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/get-opaque-token.ts","../src/json-rpc-message.ts","../src/get-proxy.ts","../src/get-sync-provider.ts"],"sourcesContent":["let count = 0\nexport const getOpaqueToken = (): string => `proxyOpaque${count++}`\n","import {\n JsonRpcError,\n JsonRpcId,\n JsonRpcRequest,\n JsonRpcResponse,\n} from \"@polkadot-api/json-rpc-provider\"\n\nexport const jsonRpcReq = (\n msg: Omit<JsonRpcRequest, \"jsonrpc\">,\n): JsonRpcRequest => ({\n jsonrpc: \"2.0\" as \"2.0\",\n ...msg,\n})\n\nexport const jsonRpcRsp = <T = any>(\n msg: { id: JsonRpcId } & (\n | {\n result: T\n }\n | {\n error: JsonRpcError<T>\n }\n ),\n): JsonRpcResponse => ({\n jsonrpc: \"2.0\" as \"2.0\",\n ...msg,\n})\n","import {\n isResponse,\n JsonRpcConnection,\n JsonRpcId,\n JsonRpcMessage,\n JsonRpcRequest,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { ReconnectableJsonRpcConnection } from \"./internal-types\"\nimport { getOpaqueToken } from \"./get-opaque-token\"\nimport { jsonRpcReq, jsonRpcRsp } from \"./json-rpc-message\"\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: JsonRpcRequest\n }\n | { type: OngoingMsgType.ChainHeadOperation; id: string }\n | { type: OngoingMsgType.Other; msg: JsonRpcRequest }\n\nconst getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`\n\nexport const getProxy: ReconnectableJsonRpcConnection = (\n toConsumer: (msg: JsonRpcMessage) => 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<JsonRpcId, 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<JsonRpcId, OngoingMsg>\n }\n | {\n type: State.Connecting\n pending: Array<JsonRpcRequest>\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 = (parsed: JsonRpcMessage) => {\n let isActive = true\n if (state.type === State.Connected) {\n if (isResponse(parsed)) {\n const { id } = parsed\n const synToken = state.pendingBroadcasts.get(id)\n if (synToken) {\n state.pendingBroadcasts.delete(id)\n\n // it's guaranteed to be there b/c we control it\n if (!(\"result\" in parsed)) return\n\n const upToken = parsed.result\n const activeBroadcast = state.activeBroadcasts.get(synToken)\n\n if (activeBroadcast) activeBroadcast.upToken = upToken\n else\n // The consumer stopped before we got the response\n state.connection.send(\n jsonRpcReq({\n id: getInternalId(),\n method: \"transaction_v1_stop\",\n params: [upToken],\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(parsed)\n }\n\n const send = (msg: JsonRpcRequest) => {\n if (state.type === State.Done) return\n\n // Transaction methods are purely synthetic, so they must be handled separately\n if (\"id\" in msg) {\n const { method, id, params } = msg 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 jsonRpcRsp({\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 jsonRpcReq({\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 jsonRpcRsp({\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 (msg.method === \"chainHead_v1_unfollow\")\n state.activeChainHeads.delete(msg.params[0])\n\n if (\"id\" in msg) {\n const { method, id } = msg 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 jsonRpcReq({\n method: \"chainHead_v1_follow\",\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 jsonRpcRsp({\n id: x.id,\n error: { code: -32603, message: \"Internal error\" },\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 jsonRpcReq({\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 { InnerJsonRpcProvider } from \"./public-types\"\nimport { ConnectableJsonRpcConnection } from \"./internal-types\"\n\nconst noop = () => {}\nconst WAIT_BASE = 250\n\nexport const getSyncProvider =\n (\n input: (onResult: (x: InnerJsonRpcProvider | null) => void) => () => void,\n ): 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 let stop = noop\n let startNow = () => {\n const token = setTimeout(() => {\n let isWaiting = true\n const result = input((cb) => {\n isWaiting = false\n stop = noop\n if (!cb) start()\n else if (proxy)\n proxy.connect((onMsg, onHalt) => {\n let isOn = true\n return cb(onMsg, (e) => {\n if (isOn) {\n isOn = false\n const diff = Date.now() - lastHalt\n consecutiveHalts +=\n diff > WAIT_BASE + getWaitTime() ? -consecutiveHalts : 1\n lastHalt += diff\n onHalt(e)\n start()\n }\n })\n })\n })\n if (isWaiting) stop = result\n }, 0)\n stop = () => clearTimeout(token)\n }\n\n const start = () => {\n token = setTimeout(startNow, getWaitTime())\n }\n startNow()\n\n return {\n send(msg) {\n proxy?.send(msg)\n },\n disconnect() {\n clearTimeout(token)\n stop()\n stop = noop\n proxy?.disconnect()\n proxy = null\n },\n }\n }\n"],"names":["isResponse","activeBroadcasts","token"],"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.
|
|
3
|
+
"version": "0.3.1-canary.9729e61",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"dist"
|
|
36
36
|
],
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@polkadot-api/json-rpc-provider": "0.
|
|
38
|
+
"@polkadot-api/json-rpc-provider": "0.1.1-canary.9729e61"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|