@polkadot-api/json-rpc-provider-proxy 0.3.2-canary.d6be873 → 0.4.1-canary.ccfb151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{esm/get-opaque-token.mjs → get-opaque-token.js} +1 -1
- package/dist/get-opaque-token.js.map +1 -0
- package/dist/{esm/get-proxy.mjs → get-proxy.js} +3 -3
- package/dist/get-proxy.js.map +1 -0
- package/dist/{esm/get-sync-provider.mjs → get-sync-provider.js} +2 -2
- package/dist/get-sync-provider.js.map +1 -0
- package/dist/index.js +1 -250
- package/dist/index.js.map +1 -1
- package/dist/{esm/json-rpc-message.mjs → json-rpc-message.js} +1 -1
- package/dist/json-rpc-message.js.map +1 -0
- package/package.json +9 -19
- package/dist/esm/get-opaque-token.mjs.map +0 -1
- package/dist/esm/get-proxy.mjs.map +0 -1
- package/dist/esm/get-sync-provider.mjs.map +0 -1
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/json-rpc-message.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-opaque-token.js","sources":["../src/get-opaque-token.ts"],"sourcesContent":["let count = 0\nexport const getOpaqueToken = (): string => `proxyOpaque${count++}`\n"],"names":[],"mappings":"AAAA,IAAI,KAAA,GAAQ,CAAA;AACL,MAAM,cAAA,GAAiB,MAAc,CAAA,WAAA,EAAc,KAAA,EAAO,CAAA;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isResponse } from '@polkadot-api/json-rpc-provider';
|
|
2
|
-
import { getOpaqueToken } from './get-opaque-token.
|
|
3
|
-
import { jsonRpcReq, jsonRpcRsp } from './json-rpc-message.
|
|
2
|
+
import { getOpaqueToken } from './get-opaque-token.js';
|
|
3
|
+
import { jsonRpcReq, jsonRpcRsp } from './json-rpc-message.js';
|
|
4
4
|
|
|
5
5
|
const getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`;
|
|
6
6
|
const getProxy = (toConsumer) => {
|
|
@@ -182,4 +182,4 @@ const getProxy = (toConsumer) => {
|
|
|
182
182
|
};
|
|
183
183
|
|
|
184
184
|
export { getProxy };
|
|
185
|
-
//# sourceMappingURL=get-proxy.
|
|
185
|
+
//# sourceMappingURL=get-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-proxy.js","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 state.connection.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,4 +1,4 @@
|
|
|
1
|
-
import { getProxy } from './get-proxy.
|
|
1
|
+
import { getProxy } from './get-proxy.js';
|
|
2
2
|
|
|
3
3
|
const noop = () => {
|
|
4
4
|
};
|
|
@@ -55,4 +55,4 @@ const getSyncProvider = (input) => (onMessage) => {
|
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
export { getSyncProvider };
|
|
58
|
-
//# sourceMappingURL=get-sync-provider.
|
|
58
|
+
//# sourceMappingURL=get-sync-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-sync-provider.js","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;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,251 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var jsonRpcProvider = require('@polkadot-api/json-rpc-provider');
|
|
4
|
-
|
|
5
|
-
let count = 0;
|
|
6
|
-
const getOpaqueToken = () => `proxyOpaque${count++}`;
|
|
7
|
-
|
|
8
|
-
const jsonRpcReq = (msg) => ({
|
|
9
|
-
jsonrpc: "2.0",
|
|
10
|
-
...msg
|
|
11
|
-
});
|
|
12
|
-
const jsonRpcRsp = (msg) => ({
|
|
13
|
-
jsonrpc: "2.0",
|
|
14
|
-
...msg
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const getInternalId = () => `___proxyInternalId__${getOpaqueToken()}`;
|
|
18
|
-
const getProxy = (toConsumer) => {
|
|
19
|
-
let state = {
|
|
20
|
-
type: 1 /* Connecting */,
|
|
21
|
-
activeBroadcasts: /* @__PURE__ */ new Map(),
|
|
22
|
-
pending: []
|
|
23
|
-
};
|
|
24
|
-
const onMsgFromProvider = (parsed) => {
|
|
25
|
-
let isActive = true;
|
|
26
|
-
if (state.type === 0 /* Connected */) {
|
|
27
|
-
if (jsonRpcProvider.isResponse(parsed)) {
|
|
28
|
-
const { id } = parsed;
|
|
29
|
-
const synToken = state.pendingBroadcasts.get(id);
|
|
30
|
-
if (synToken) {
|
|
31
|
-
state.pendingBroadcasts.delete(id);
|
|
32
|
-
if (!("result" in parsed)) return;
|
|
33
|
-
const upToken = parsed.result;
|
|
34
|
-
const activeBroadcast = state.activeBroadcasts.get(synToken);
|
|
35
|
-
if (activeBroadcast) activeBroadcast.upToken = upToken;
|
|
36
|
-
else
|
|
37
|
-
state.connection.send(
|
|
38
|
-
jsonRpcReq({
|
|
39
|
-
id: getInternalId(),
|
|
40
|
-
method: "transaction_v1_stop",
|
|
41
|
-
params: [upToken]
|
|
42
|
-
})
|
|
43
|
-
);
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
isActive = state.onGoingRequests.has(id);
|
|
47
|
-
if ("result" in parsed && state.onGoingRequests.get(id)?.type === 0 /* ChainHeadFollow */)
|
|
48
|
-
state.activeChainHeads.add(parsed.result);
|
|
49
|
-
state.onGoingRequests.delete(parsed.id);
|
|
50
|
-
} else if ("params" in parsed) {
|
|
51
|
-
const { subscription, result } = parsed.params;
|
|
52
|
-
if (result?.event === "stop")
|
|
53
|
-
state.activeChainHeads.delete(subscription);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
if (isActive && state.type !== 2 /* Done */) toConsumer(parsed);
|
|
57
|
-
};
|
|
58
|
-
const send = (msg) => {
|
|
59
|
-
if (state.type === 2 /* Done */) return;
|
|
60
|
-
if ("id" in msg) {
|
|
61
|
-
const { method, id, params } = msg;
|
|
62
|
-
const [group, , methodName] = method.split("_");
|
|
63
|
-
if (group === "transaction") {
|
|
64
|
-
if (methodName === "stop") {
|
|
65
|
-
const [synToken] = params;
|
|
66
|
-
const active = state.activeBroadcasts.get(synToken);
|
|
67
|
-
state.activeBroadcasts.delete(synToken);
|
|
68
|
-
toConsumer(
|
|
69
|
-
jsonRpcRsp({
|
|
70
|
-
id,
|
|
71
|
-
result: null
|
|
72
|
-
})
|
|
73
|
-
);
|
|
74
|
-
if (state.type === 0 /* Connected */ && active && active.upToken) {
|
|
75
|
-
state.connection.send(
|
|
76
|
-
jsonRpcReq({
|
|
77
|
-
id,
|
|
78
|
-
method,
|
|
79
|
-
params: [active.upToken]
|
|
80
|
-
})
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (methodName === "broadcast") {
|
|
86
|
-
const synToken = getOpaqueToken();
|
|
87
|
-
state.activeBroadcasts.set(synToken, {
|
|
88
|
-
tx: params[0],
|
|
89
|
-
synToken
|
|
90
|
-
});
|
|
91
|
-
if (state.type === 0 /* Connected */) {
|
|
92
|
-
state.pendingBroadcasts.set(id, synToken);
|
|
93
|
-
state.connection.send(msg);
|
|
94
|
-
}
|
|
95
|
-
toConsumer(
|
|
96
|
-
jsonRpcRsp({
|
|
97
|
-
id,
|
|
98
|
-
result: synToken
|
|
99
|
-
})
|
|
100
|
-
);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
if (state.type === 1 /* Connecting */) {
|
|
106
|
-
state.pending.push(msg);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (msg.method === "chainHead_v1_unfollow")
|
|
110
|
-
state.activeChainHeads.delete(msg.params[0]);
|
|
111
|
-
if ("id" in msg) {
|
|
112
|
-
const { method, id } = msg;
|
|
113
|
-
const [group, , methodName] = method.split("_");
|
|
114
|
-
const ongoingMsg = group === "chainHead" ? methodName === "follow" ? {
|
|
115
|
-
type: 0 /* ChainHeadFollow */,
|
|
116
|
-
msg
|
|
117
|
-
} : { type: 1 /* ChainHeadOperation */, id } : { type: 2 /* Other */, msg };
|
|
118
|
-
state.onGoingRequests.set(id, ongoingMsg);
|
|
119
|
-
}
|
|
120
|
-
state.connection.send(msg);
|
|
121
|
-
};
|
|
122
|
-
return {
|
|
123
|
-
send,
|
|
124
|
-
disconnect: () => {
|
|
125
|
-
if (state.type === 2 /* Done */) return;
|
|
126
|
-
if (state.type === 0 /* Connected */) state.connection.disconnect();
|
|
127
|
-
state = { type: 2 /* Done */ };
|
|
128
|
-
},
|
|
129
|
-
connect: (cb) => {
|
|
130
|
-
if (state.type !== 1 /* Connecting */) throw new Error("Nonesense");
|
|
131
|
-
const { pending, activeBroadcasts } = state;
|
|
132
|
-
const onGoingRequests = /* @__PURE__ */ new Map();
|
|
133
|
-
const activeChainHeads = /* @__PURE__ */ new Set();
|
|
134
|
-
const onHalt = () => {
|
|
135
|
-
const activeBroadcasts2 = state.type !== 2 /* Done */ ? state.activeBroadcasts : /* @__PURE__ */ new Map();
|
|
136
|
-
activeBroadcasts2.forEach((x) => x.upToken = void 0);
|
|
137
|
-
state = {
|
|
138
|
-
type: 1 /* Connecting */,
|
|
139
|
-
activeBroadcasts: activeBroadcasts2,
|
|
140
|
-
pending: []
|
|
141
|
-
};
|
|
142
|
-
activeChainHeads.forEach((subscription) => {
|
|
143
|
-
onMsgFromProvider(
|
|
144
|
-
jsonRpcReq({
|
|
145
|
-
method: "chainHead_v1_follow",
|
|
146
|
-
params: {
|
|
147
|
-
subscription,
|
|
148
|
-
result: {
|
|
149
|
-
event: "stop",
|
|
150
|
-
internal: true
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
})
|
|
154
|
-
);
|
|
155
|
-
});
|
|
156
|
-
activeChainHeads.clear();
|
|
157
|
-
for (const x of onGoingRequests.values()) {
|
|
158
|
-
if (x.type === 1 /* ChainHeadOperation */)
|
|
159
|
-
onMsgFromProvider(
|
|
160
|
-
jsonRpcRsp({
|
|
161
|
-
id: x.id,
|
|
162
|
-
error: { code: -32603, message: "Internal error" }
|
|
163
|
-
})
|
|
164
|
-
);
|
|
165
|
-
else send(x.msg);
|
|
166
|
-
}
|
|
167
|
-
onGoingRequests.clear();
|
|
168
|
-
};
|
|
169
|
-
state = {
|
|
170
|
-
type: 0 /* Connected */,
|
|
171
|
-
connection: null,
|
|
172
|
-
activeBroadcasts,
|
|
173
|
-
pendingBroadcasts: /* @__PURE__ */ new Map(),
|
|
174
|
-
onGoingRequests,
|
|
175
|
-
activeChainHeads
|
|
176
|
-
};
|
|
177
|
-
state.connection = cb(onMsgFromProvider, onHalt);
|
|
178
|
-
activeBroadcasts.forEach((broadcast) => {
|
|
179
|
-
if (state.type === 0 /* Connected */) {
|
|
180
|
-
const id = getInternalId();
|
|
181
|
-
state.pendingBroadcasts.set(id, broadcast.synToken);
|
|
182
|
-
state.connection.send(
|
|
183
|
-
jsonRpcReq({
|
|
184
|
-
id,
|
|
185
|
-
method: "transaction_v1_broadcast",
|
|
186
|
-
params: [broadcast.tx]
|
|
187
|
-
})
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
pending.forEach(send);
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
const noop = () => {
|
|
197
|
-
};
|
|
198
|
-
const WAIT_BASE = 250;
|
|
199
|
-
const getSyncProvider = (input) => (onMessage) => {
|
|
200
|
-
let proxy = getProxy(onMessage);
|
|
201
|
-
let lastHalt = Date.now();
|
|
202
|
-
let consecutiveHalts = 0;
|
|
203
|
-
let token;
|
|
204
|
-
const getWaitTime = () => consecutiveHalts && 2 ** Math.min(5, consecutiveHalts) * WAIT_BASE;
|
|
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
|
-
});
|
|
227
|
-
});
|
|
228
|
-
if (isWaiting) stop = result;
|
|
229
|
-
}, 0);
|
|
230
|
-
stop = () => clearTimeout(token2);
|
|
231
|
-
};
|
|
232
|
-
const start = () => {
|
|
233
|
-
token = setTimeout(startNow, getWaitTime());
|
|
234
|
-
};
|
|
235
|
-
startNow();
|
|
236
|
-
return {
|
|
237
|
-
send(msg) {
|
|
238
|
-
proxy?.send(msg);
|
|
239
|
-
},
|
|
240
|
-
disconnect() {
|
|
241
|
-
clearTimeout(token);
|
|
242
|
-
stop();
|
|
243
|
-
stop = noop;
|
|
244
|
-
proxy?.disconnect();
|
|
245
|
-
proxy = null;
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
exports.getSyncProvider = getSyncProvider;
|
|
1
|
+
export { getSyncProvider } from './get-sync-provider.js';
|
|
251
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 state.connection.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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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-message.js","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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/json-rpc-provider-proxy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1-canary.ccfb151",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -8,34 +8,24 @@
|
|
|
8
8
|
},
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"sideEffects": false,
|
|
11
|
+
"type": "module",
|
|
11
12
|
"exports": {
|
|
12
13
|
".": {
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"require": "./dist/min/index.js",
|
|
17
|
-
"default": "./dist/index.js"
|
|
18
|
-
},
|
|
19
|
-
"import": "./dist/esm/index.mjs",
|
|
20
|
-
"require": "./dist/index.js",
|
|
21
|
-
"default": "./dist/index.js"
|
|
22
|
-
},
|
|
23
|
-
"module": "./dist/esm/index.mjs",
|
|
24
|
-
"import": "./dist/esm/index.mjs",
|
|
25
|
-
"require": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
|
+
"import": "./dist/index.js",
|
|
26
17
|
"default": "./dist/index.js"
|
|
27
|
-
}
|
|
28
|
-
"./package.json": "./package.json"
|
|
18
|
+
}
|
|
29
19
|
},
|
|
30
20
|
"main": "./dist/index.js",
|
|
31
|
-
"module": "./dist/
|
|
32
|
-
"browser": "./dist/
|
|
21
|
+
"module": "./dist/index.js",
|
|
22
|
+
"browser": "./dist/index.js",
|
|
33
23
|
"types": "./dist/index.d.ts",
|
|
34
24
|
"files": [
|
|
35
25
|
"dist"
|
|
36
26
|
],
|
|
37
27
|
"devDependencies": {
|
|
38
|
-
"@polkadot-api/json-rpc-provider": "0.
|
|
28
|
+
"@polkadot-api/json-rpc-provider": "0.2.1-canary.ccfb151"
|
|
39
29
|
},
|
|
40
30
|
"scripts": {
|
|
41
31
|
"build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-opaque-token.mjs","sources":["../../src/get-opaque-token.ts"],"sourcesContent":["let count = 0\nexport const getOpaqueToken = (): string => `proxyOpaque${count++}`\n"],"names":[],"mappings":"AAAA,IAAI,KAAA,GAAQ,CAAA;AACL,MAAM,cAAA,GAAiB,MAAc,CAAA,WAAA,EAAc,KAAA,EAAO,CAAA;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
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 state.connection.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":";;;;AA8BA,MAAM,aAAA,GAAgB,MAAM,CAAA,oBAAA,EAAuB,cAAA,EAAgB,CAAA,CAAA;AAE5D,MAAM,QAAA,GAA2C,CACtD,UAAA,KACG;AACH,EAAA,IAAI,KAAA,GAwBuB;AAAA,IACzB,IAAA,EAAM,CAAA;AAAA,IACN,gBAAA,sBAAsB,GAAA,EAAI;AAAA,IAC1B,SAAS;AAAC,GACZ;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,MAAA,KAA2B;AACpD,IAAA,IAAI,QAAA,GAAW,IAAA;AACf,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,kBAAiB;AAClC,MAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,QAAA,MAAM,EAAE,IAAG,GAAI,MAAA;AACf,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,EAAE,CAAA;AAC/C,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,KAAA,CAAM,iBAAA,CAAkB,OAAO,EAAE,CAAA;AAGjC,UAAA,IAAI,EAAE,YAAY,MAAA,CAAA,EAAS;AAE3B,UAAA,MAAM,UAAU,MAAA,CAAO,MAAA;AACvB,UAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAE3D,UAAA,IAAI,eAAA,kBAAiC,OAAA,GAAU,OAAA;AAAA;AAG7C,YAAA,KAAA,CAAM,UAAA,CAAW,IAAA;AAAA,cACf,UAAA,CAAW;AAAA,gBACT,IAAI,aAAA,EAAc;AAAA,gBAClB,MAAA,EAAQ,qBAAA;AAAA,gBACR,MAAA,EAAQ,CAAC,OAAO;AAAA,eACjB;AAAA,aACH;AACF,UAAA;AAAA,QACF;AAEA,QAAA,QAAA,GAAW,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,EAAE,CAAA;AACvC,QAAA,IACE,YAAY,MAAA,IACZ,KAAA,CAAM,gBAAgB,GAAA,CAAI,EAAE,GAAG,IAAA,KAAS,CAAA;AAExC,UAAA,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA;AAC1C,QAAA,KAAA,CAAM,eAAA,CAAgB,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAAA,MACxC,CAAA,MAAA,IAAW,YAAY,MAAA,EAAQ;AAC7B,QAAA,MAAM,EAAE,YAAA,EAAc,MAAA,EAAO,GAAI,MAAA,CAAO,MAAA;AACxC,QAAA,IAAI,QAAQ,KAAA,KAAU,MAAA;AACpB,UAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,YAAY,CAAA;AAAA,MAC9C;AAAA,IACF;AAGA,IAAA,IAAI,QAAA,IAAY,KAAA,CAAM,IAAA,KAAS,CAAA,wBAAuB,MAAM,CAAA;AAAA,EAC9D,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAwB;AACpC,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,aAAY;AAG/B,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAI,MAAA,EAAO,GAAI,GAAA;AAK/B,MAAA,MAAM,CAAC,KAAA,IAAS,UAAU,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AAE9C,MAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,QAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,UAAA,MAAM,CAAC,QAAQ,CAAA,GAAI,MAAA;AACnB,UAAA,MAAM,MAAA,GAAS,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,QAAQ,CAAA;AAClD,UAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AACtC,UAAA,UAAA;AAAA,YACE,UAAA,CAAW;AAAA,cACT,EAAA;AAAA,cACA,MAAA,EAAQ;AAAA,aACT;AAAA,WACH;AAEA,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,oBAAmB,MAAA,IAAU,OAAO,OAAA,EAAS;AAG9D,YAAA,KAAA,CAAM,UAAA,CAAW,IAAA;AAAA,cACf,UAAA,CAAW;AAAA,gBACT,EAAA;AAAA,gBACA,MAAA;AAAA,gBACA,MAAA,EAAQ,CAAC,MAAA,CAAO,OAAO;AAAA,eACxB;AAAA,aACH;AAAA,UACF;AAGA,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,eAAe,WAAA,EAAa;AAC9B,UAAA,MAAM,WAAW,cAAA,EAAe;AAChC,UAAA,KAAA,CAAM,gBAAA,CAAiB,IAAI,QAAA,EAAU;AAAA,YACnC,EAAA,EAAI,OAAO,CAAC,CAAA;AAAA,YACZ;AAAA,WACD,CAAA;AAED,UAAA,IAAI,KAAA,CAAM,SAAS,CAAA,kBAAiB;AAClC,YAAA,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,EAAA,EAAI,QAAQ,CAAA;AACxC,YAAA,KAAA,CAAM,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,UAC3B;AAEA,UAAA,UAAA;AAAA,YACE,UAAA,CAAW;AAAA,cACT,EAAA;AAAA,cACA,MAAA,EAAQ;AAAA,aACT;AAAA,WACH;AAGA,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,mBAAkB;AACnC,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,CAAA;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,IAAI,MAAA,KAAW,uBAAA;AACjB,MAAA,KAAA,CAAM,gBAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AAE7C,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAG,GAAI,GAAA;AACvB,MAAA,MAAM,CAAC,KAAA,IAAS,UAAU,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AAE9C,MAAA,MAAM,UAAA,GACJ,KAAA,KAAU,WAAA,GACN,UAAA,KAAe,QAAA,GACb;AAAA,QACE,IAAA,EAAM,CAAA;AAAA,QACN;AAAA,OACF,GACA,EAAE,IAAA,EAAM,CAAA,2BAAmC,IAAG,GAChD,EAAE,IAAA,EAAM,CAAA,cAAsB,GAAA,EAAI;AACxC,MAAA,KAAA,CAAM,eAAA,CAAgB,GAAA,CAAI,EAAA,EAAI,UAAU,CAAA;AAAA,IAC1C;AAEA,IAAA,KAAA,CAAM,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,YAAY,MAAM;AAChB,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,aAAY;AAC/B,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,CAAA,kBAAiB,KAAA,CAAM,WAAW,UAAA,EAAW;AAChE,MAAA,KAAA,GAAQ,EAAE,MAAM,CAAA,aAAW;AAAA,IAC7B,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,EAAA,KAAO;AACf,MAAA,IAAI,MAAM,IAAA,KAAS,CAAA,mBAAkB,MAAM,IAAI,MAAM,WAAW,CAAA;AAEhE,MAAA,MAAM,EAAE,OAAA,EAAS,gBAAA,EAAiB,GAAI,KAAA;AACtC,MAAA,MAAM,eAAA,uBAAsB,GAAA,EAAwB;AACpD,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AACzC,MAAA,MAAM,SAAS,MAAM;AACnB,QAAA,MAAMA,oBAGF,KAAA,CAAM,IAAA,KAAS,eAAa,KAAA,CAAM,gBAAA,uBAAuB,GAAA,EAAI;AACjE,QAAAA,kBAAiB,OAAA,CAAQ,CAAC,CAAA,KAAO,CAAA,CAAE,UAAU,MAAU,CAAA;AACvD,QAAA,KAAA,GAAQ;AAAA,UACN,IAAA,EAAM,CAAA;AAAA,UACN,gBAAA,EAAAA,iBAAAA;AAAA,UACA,SAAS;AAAC,SACZ;AACA,QAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,YAAA,KAAiB;AAIzC,UAAA,iBAAA;AAAA,YACE,UAAA,CAAW;AAAA,cACT,MAAA,EAAQ,qBAAA;AAAA,cACR,MAAA,EAAQ;AAAA,gBACN,YAAA;AAAA,gBACA,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO,MAAA;AAAA,kBACP,QAAA,EAAU;AAAA;AACZ;AACF,aACD;AAAA,WACH;AAAA,QACF,CAAC,CAAA;AACD,QAAA,gBAAA,CAAiB,KAAA,EAAM;AACvB,QAAA,KAAA,MAAW,CAAA,IAAK,eAAA,CAAgB,MAAA,EAAO,EAAG;AACxC,UAAA,IAAI,EAAE,IAAA,KAAS,CAAA;AACb,YAAA,iBAAA;AAAA,cACE,UAAA,CAAW;AAAA,gBACT,IAAI,CAAA,CAAE,EAAA;AAAA,gBACN,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,gBAAA;AAAiB,eAClD;AAAA,aACH;AAAA,eACG,IAAA,CAAK,EAAE,GAAG,CAAA;AAAA,QACjB;AACA,QAAA,eAAA,CAAgB,KAAA,EAAM;AAAA,MACxB,CAAA;AACA,MAAA,KAAA,GAAQ;AAAA,QACN,IAAA,EAAM,CAAA;AAAA,QACN,UAAA,EAAY,IAAA;AAAA,QACZ,gBAAA;AAAA,QACA,iBAAA,sBAAuB,GAAA,EAAI;AAAA,QAC3B,eAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,CAAM,UAAA,GAAa,EAAA,CAAG,iBAAA,EAAmB,MAAM,CAAA;AAC/C,MAAA,gBAAA,CAAiB,OAAA,CAAQ,CAAC,SAAA,KAAc;AACtC,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,kBAAiB;AAClC,UAAA,MAAM,KAAK,aAAA,EAAc;AACzB,UAAA,KAAA,CAAM,iBAAA,CAAkB,GAAA,CAAI,EAAA,EAAI,SAAA,CAAU,QAAQ,CAAA;AAClD,UAAA,KAAA,CAAM,UAAA,CAAW,IAAA;AAAA,YACf,UAAA,CAAW;AAAA,cACT,EAAA;AAAA,cACA,MAAA,EAAQ,0BAAA;AAAA,cACR,MAAA,EAAQ,CAAC,SAAA,CAAU,EAAE;AAAA,aACtB;AAAA,WACH;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA,IACtB;AAAA,GACF;AACF;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;"}
|
package/dist/esm/index.mjs
DELETED
package/dist/esm/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;"}
|