@polkadot-api/ws-provider 0.7.5 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/get-async-provider.mjs +40 -0
- package/dist/esm/get-async-provider.mjs.map +1 -0
- package/dist/esm/index.mjs +3 -0
- package/dist/esm/provider.mjs +84 -0
- package/dist/esm/provider.mjs.map +1 -0
- package/dist/esm/types.mjs +22 -0
- package/dist/esm/types.mjs.map +1 -0
- package/dist/esm/with-socket.mjs +114 -0
- package/dist/esm/with-socket.mjs.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.js +250 -0
- package/dist/index.js.map +1 -0
- package/package.json +28 -32
- package/dist/index/esm/default-provider.mjs +0 -171
- package/dist/index/esm/default-provider.mjs.map +0 -1
- package/dist/index/esm/follow-enhancer.mjs +0 -91
- package/dist/index/esm/follow-enhancer.mjs.map +0 -1
- package/dist/index/esm/index.mjs +0 -3
- package/dist/index/esm/types-common.mjs +0 -10
- package/dist/index/esm/types-common.mjs.map +0 -1
- package/dist/index/index.d.ts +0 -48
- package/dist/index/index.js +0 -269
- package/dist/index/index.js.map +0 -1
- package/dist/node/esm/default-provider.mjs +0 -171
- package/dist/node/esm/default-provider.mjs.map +0 -1
- package/dist/node/esm/follow-enhancer.mjs +0 -91
- package/dist/node/esm/follow-enhancer.mjs.map +0 -1
- package/dist/node/esm/legacy-provider.mjs +0 -44
- package/dist/node/esm/legacy-provider.mjs.map +0 -1
- package/dist/node/esm/node.mjs +0 -15
- package/dist/node/esm/node.mjs.map +0 -1
- package/dist/node/esm/types-common.mjs +0 -10
- package/dist/node/esm/types-common.mjs.map +0 -1
- package/dist/node/node.d.ts +0 -61
- package/dist/node/node.js +0 -319
- package/dist/node/node.js.map +0 -1
- package/dist/web/esm/default-provider.mjs +0 -171
- package/dist/web/esm/default-provider.mjs.map +0 -1
- package/dist/web/esm/follow-enhancer.mjs +0 -91
- package/dist/web/esm/follow-enhancer.mjs.map +0 -1
- package/dist/web/esm/legacy-provider.mjs +0 -44
- package/dist/web/esm/legacy-provider.mjs.map +0 -1
- package/dist/web/esm/types-common.mjs +0 -10
- package/dist/web/esm/types-common.mjs.map +0 -1
- package/dist/web/esm/web.mjs +0 -7
- package/dist/web/esm/web.mjs.map +0 -1
- package/dist/web/web.d.ts +0 -61
- package/dist/web/web.js +0 -311
- package/dist/web/web.js.map +0 -1
- package/node/package.json +0 -10
- package/web/package.json +0 -10
- /package/dist/{index/esm → esm}/index.mjs.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/types.ts","../src/get-async-provider.ts","../src/with-socket.ts","../src/provider.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { InnerJsonRpcProvider } from \"@polkadot-api/json-rpc-provider-proxy\"\n\nexport enum WsEvent {\n CONNECTING = \"CONNECTING\",\n CONNECTED = \"CONNECTED\",\n ERROR = \"ERROR\",\n CLOSE = \"CLOSE\",\n}\n\nexport type WsConnecting = {\n type: WsEvent.CONNECTING\n uri: string\n}\nexport type WsConnected = {\n type: WsEvent.CONNECTED\n uri: string\n}\nexport type WsError = {\n type: WsEvent.ERROR\n event: any\n}\nexport type WsClose = {\n type: WsEvent.CLOSE\n event: any\n}\nexport type StatusChange = WsConnecting | WsConnected | WsError | WsClose\nexport type WsJsonRpcProvider = JsonRpcProvider & {\n switch: (uri?: string) => void\n getStatus: () => StatusChange\n}\nexport { type JsonRpcProvider }\n\nexport enum SocketEvents {\n CONNECTING = \"CONNECTING\",\n CONNECTED = \"CONNECTED\",\n TIMEOUT = \"TIMEOUT\",\n STALE = \"STALE\",\n ERROR = \"ERROR\",\n CLOSE = \"CLOSE\",\n DISCONNECT = \"DISCONNECT\",\n IN = \"IN\",\n OUT = \"OUT\",\n}\n\ntype SocketLoggerEvent =\n | { type: SocketEvents.CONNECTING; url: string }\n | { type: SocketEvents.CONNECTED }\n | { type: SocketEvents.DISCONNECT }\n | { type: SocketEvents.ERROR; error: any }\n | { type: SocketEvents.CLOSE }\n | { type: SocketEvents.STALE }\n | { type: SocketEvents.TIMEOUT }\n | { type: SocketEvents.IN; msg: string }\n | { type: SocketEvents.OUT; msg: string }\n\nexport type SocketLoggerFn = (event: SocketLoggerEvent) => void\n\nexport type WebSocketClass = typeof WebSocket\n\nexport type { InnerJsonRpcProvider }\nexport type Middleware = (base: InnerJsonRpcProvider) => InnerJsonRpcProvider\n","import {\n JsonRpcConnection,\n JsonRpcRequest,\n} from \"@polkadot-api/json-rpc-provider\"\nimport { InnerJsonRpcProvider } from \"@polkadot-api/json-rpc-provider-proxy\"\nimport { noop } from \"@polkadot-api/utils\"\n\nexport const getAsyncProvider =\n <T = string>(\n input: (\n onResult: (x: InnerJsonRpcProvider<T> | null) => void,\n ) => () => void,\n ): InnerJsonRpcProvider<T> =>\n (onMessage, _onHalt) => {\n // null -> loading\n // undefined -> destroyed\n let connection: JsonRpcConnection<T> | null | undefined = null\n\n let pending: Array<JsonRpcRequest> = []\n const done = () => {\n stop()\n onHalt = stop = noop\n connection = undefined\n pending = []\n }\n let onHalt = (e?: any) => {\n done()\n _onHalt(e)\n }\n\n let stop = input((cb) => {\n stop = noop\n if (!cb) {\n onHalt()\n } else {\n connection = cb(onMessage, onHalt)\n pending.forEach((x) => connection?.send(x))\n pending = []\n }\n })\n\n return {\n send: (msg) => {\n if (connection) connection.send(msg)\n else if (connection === null) pending.push(msg)\n },\n disconnect: () => {\n const x = connection\n done()\n x?.disconnect()\n },\n }\n }\n","import { getAsyncProvider } from \"./get-async-provider\"\nimport { SocketEvents, SocketLoggerFn, WsEvent } from \"./types\"\nimport { noop } from \"@polkadot-api/utils\"\n\nexport const withSocket = (\n getWebsocket: () => [WebSocket, () => void],\n heartbeatTimeout: number,\n connectionTimeout: number,\n logger?: SocketLoggerFn,\n) => {\n const logType: (\n type:\n | SocketEvents.TIMEOUT\n | SocketEvents.STALE\n | SocketEvents.CONNECTED\n | SocketEvents.DISCONNECT\n | SocketEvents.CLOSE,\n ) => void = logger ? (type) => logger({ type }) : noop\n const logMsg: (\n type: SocketEvents.IN | SocketEvents.OUT,\n msg: string,\n ) => void = logger ? (type, msg) => logger({ type, msg }) : noop\n\n return getAsyncProvider((onReady) => {\n const [socket, onConnected] = getWebsocket()\n logger?.({ type: SocketEvents.CONNECTING, url: socket.url })\n\n let suicide: (e?: any) => void = () => {\n suicide = noop\n cleanup()\n onReady(null)\n }\n\n let isFirst = true\n let heartbeatToken: number\n const heartbeat = () => {\n clearTimeout(heartbeatToken)\n const [time, event] = isFirst\n ? ([connectionTimeout, SocketEvents.TIMEOUT] as const)\n : ([heartbeatTimeout, SocketEvents.STALE] as const)\n isFirst = false\n heartbeatToken = setTimeout(() => {\n logType(event)\n suicide({\n type: WsEvent.ERROR,\n event: { type: \"timeout\" },\n })\n }, time)\n }\n const stopTimeout = () => {\n clearTimeout(heartbeatToken)\n }\n\n heartbeat()\n\n let cleanup = () => {\n stopTimeout()\n }\n\n const onError = (event: any) => {\n logger?.({ type: SocketEvents.ERROR, error: event })\n suicide({\n type: WsEvent.ERROR,\n event,\n })\n }\n const onClose = (event: any) => {\n logType(SocketEvents.CLOSE)\n suicide({\n type: WsEvent.CLOSE,\n event,\n })\n }\n\n const disconnect = () => {\n logType(SocketEvents.DISCONNECT)\n cleanup()\n try {\n socket.addEventListener(\"error\", noop, { once: true })\n socket.close()\n } catch {}\n }\n\n const onOpen = () => {\n logType(SocketEvents.CONNECTED)\n onConnected()\n heartbeat()\n socket.removeEventListener(\"open\", onOpen)\n onReady((onMsg, onHalt) => {\n cleanup = () => {\n cleanup = noop\n stopTimeout()\n socket.removeEventListener(\"error\", onError)\n socket.removeEventListener(\"ping\", heartbeat)\n socket.removeEventListener(\"message\", _onMessage)\n socket.removeEventListener(\"close\", onClose)\n }\n\n suicide = (e?: any) => {\n suicide = noop\n cleanup()\n onHalt(e)\n }\n\n const _onMessage = (e: MessageEvent) => {\n heartbeat()\n if (typeof e.data === \"string\") {\n logMsg(SocketEvents.IN, e.data)\n onMsg(JSON.parse(e.data))\n }\n }\n\n socket.addEventListener(\"ping\", heartbeat)\n socket.addEventListener(\"message\", _onMessage)\n socket.addEventListener(\"error\", onError)\n socket.addEventListener(\"close\", onClose)\n return {\n send(m) {\n const msg = JSON.stringify(m)\n logMsg(SocketEvents.OUT, msg)\n socket.send(msg)\n },\n disconnect,\n }\n })\n }\n\n cleanup = () => {\n cleanup = noop\n stopTimeout()\n socket.removeEventListener(\"error\", onError)\n socket.removeEventListener(\"close\", onClose)\n socket.removeEventListener(\"open\", onOpen)\n }\n\n socket.addEventListener(\"open\", onOpen)\n socket.addEventListener(\"error\", onError)\n\n return disconnect\n })\n}\n","import {\n getSyncProvider,\n InnerJsonRpcProvider,\n} from \"@polkadot-api/json-rpc-provider-proxy\"\nimport { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { noop } from \"@polkadot-api/utils\"\nimport {\n StatusChange,\n WsJsonRpcProvider,\n WsEvent,\n SocketLoggerFn,\n WebSocketClass,\n Middleware,\n} from \"./types\"\nimport { withSocket } from \"./with-socket\"\nimport { identity } from \"rxjs\"\n\nexport const defaultConfig: {\n timeout: number\n heartbeatTimeout: number\n middleware: Middleware\n onStatusChanged: (status: StatusChange) => void\n} = {\n onStatusChanged: noop,\n timeout: 5_000,\n heartbeatTimeout: 40_000,\n middleware: identity,\n}\n\nexport const getWsProvider = (\n endpoints: string | Array<string>,\n config?: Partial<{\n onStatusChanged: (status: StatusChange) => void\n timeout: number\n heartbeatTimeout: number\n websocketClass: WebSocketClass\n middleware: Middleware\n logger: SocketLoggerFn\n }>,\n): WsJsonRpcProvider => {\n const {\n onStatusChanged: _onStatuChanged,\n timeout,\n heartbeatTimeout,\n middleware,\n logger,\n } = {\n ...defaultConfig,\n ...config,\n }\n const actualEndpoints = Array.isArray(endpoints) ? endpoints : [endpoints]\n\n const WebsocketClass = config?.websocketClass ?? globalThis.WebSocket\n if (!WebsocketClass) throw new Error(\"Missing WebSocket class\")\n\n let idx = 0\n let switchTo: string | undefined\n let latestSocket: WebSocket | null = null\n let status: StatusChange = { type: WsEvent.CLOSE, event: null }\n let prevUri: string | undefined\n const onStatusChanged = (x: StatusChange) => _onStatuChanged((status = x))\n\n const socketProvider = middleware(\n withSocket(\n () => {\n prevUri = latestSocket?.url\n const uri = switchTo ?? actualEndpoints[idx++ % actualEndpoints.length]\n switchTo = undefined\n onStatusChanged({\n type: WsEvent.CONNECTING,\n uri,\n })\n return [\n (latestSocket = new WebsocketClass(uri)),\n () => {\n onStatusChanged({\n type: WsEvent.CONNECTED,\n uri,\n })\n },\n ]\n },\n heartbeatTimeout,\n timeout,\n logger,\n ),\n )\n\n const provider: InnerJsonRpcProvider = (onMsg, onHalt) =>\n socketProvider(onMsg, (event) => {\n onStatusChanged({\n type: WsEvent.ERROR,\n event,\n })\n onHalt(event)\n })\n\n const result: JsonRpcProvider = getSyncProvider((onReady) => {\n if (!prevUri || latestSocket!.url !== prevUri) {\n onReady(provider)\n return noop\n }\n\n const token = setTimeout(onReady, 250, provider)\n return () => {\n clearTimeout(token)\n }\n })\n\n const switchFn: WsJsonRpcProvider[\"switch\"] = (uri?: string) => {\n if (status.type === WsEvent.CLOSE) return\n switchTo = uri\n if (status.type !== WsEvent.ERROR && latestSocket) latestSocket.close()\n }\n\n return Object.assign(result, { switch: switchFn, getStatus: () => status })\n}\n"],"names":["WsEvent","SocketEvents","noop","identity","getSyncProvider"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkadot-api/ws-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"author": "Josep M Sobrepere (https://github.com/josepot)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,47 +10,43 @@
|
|
|
10
10
|
"sideEffects": false,
|
|
11
11
|
"exports": {
|
|
12
12
|
".": {
|
|
13
|
-
"types": "./dist/index/index.d.ts",
|
|
14
13
|
"node": {
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
"production": {
|
|
15
|
+
"import": "./dist/esm/index.mjs",
|
|
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"
|
|
18
22
|
},
|
|
19
|
-
"module": "./dist/
|
|
20
|
-
"import": "./dist/
|
|
21
|
-
"require": "./dist/index
|
|
22
|
-
"default": "./dist/index
|
|
23
|
-
},
|
|
24
|
-
"./node": {
|
|
25
|
-
"types": "./dist/node/node.d.ts",
|
|
26
|
-
"module": "./dist/node/esm/node.mjs",
|
|
27
|
-
"import": "./dist/node/esm/node.mjs",
|
|
28
|
-
"require": "./dist/node/node.js",
|
|
29
|
-
"default": "./dist/node/node.js"
|
|
30
|
-
},
|
|
31
|
-
"./web": {
|
|
32
|
-
"types": "./dist/web/web.d.ts",
|
|
33
|
-
"module": "./dist/web/esm/web.mjs",
|
|
34
|
-
"import": "./dist/web/esm/web.mjs",
|
|
35
|
-
"require": "./dist/web/web.js",
|
|
36
|
-
"default": "./dist/web/web.js"
|
|
23
|
+
"module": "./dist/esm/index.mjs",
|
|
24
|
+
"import": "./dist/esm/index.mjs",
|
|
25
|
+
"require": "./dist/index.js",
|
|
26
|
+
"default": "./dist/index.js"
|
|
37
27
|
},
|
|
38
28
|
"./package.json": "./package.json"
|
|
39
29
|
},
|
|
40
|
-
"
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"module": "./dist/esm/index.mjs",
|
|
32
|
+
"browser": "./dist/esm/index.mjs",
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
41
34
|
"files": [
|
|
42
|
-
"dist"
|
|
43
|
-
"web",
|
|
44
|
-
"node"
|
|
35
|
+
"dist"
|
|
45
36
|
],
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"rxjs": ">=7.8.0"
|
|
39
|
+
},
|
|
46
40
|
"dependencies": {
|
|
47
|
-
"@
|
|
48
|
-
"
|
|
49
|
-
"@polkadot-api/json-rpc-provider": "0.0
|
|
50
|
-
|
|
41
|
+
"@polkadot-api/utils": "0.3.0",
|
|
42
|
+
"@polkadot-api/json-rpc-provider": "0.1.0",
|
|
43
|
+
"@polkadot-api/json-rpc-provider-proxy": "0.3.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"rxjs": "^7.8.2"
|
|
51
47
|
},
|
|
52
48
|
"scripts": {
|
|
53
|
-
"build-core": "tsc --noEmit && rollup -c",
|
|
49
|
+
"build-core": "tsc --noEmit && rollup -c ../../../rollup.config.js",
|
|
54
50
|
"build": "pnpm build-core",
|
|
55
51
|
"test": "echo 'no tests'",
|
|
56
52
|
"lint": "prettier --check README.md \"src/**/*.{js,jsx,ts,tsx,json,md}\"",
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { getSyncProvider } from '@polkadot-api/json-rpc-provider-proxy';
|
|
2
|
-
import { WsEvent } from './types-common.mjs';
|
|
3
|
-
import { followEnhancer } from './follow-enhancer.mjs';
|
|
4
|
-
|
|
5
|
-
const timeoutError = {
|
|
6
|
-
type: WsEvent.ERROR,
|
|
7
|
-
event: { type: "timeout" }
|
|
8
|
-
};
|
|
9
|
-
const noop = () => {
|
|
10
|
-
};
|
|
11
|
-
const defaultConfig = {
|
|
12
|
-
onStatusChanged: noop,
|
|
13
|
-
innerEnhancer: (x) => x,
|
|
14
|
-
timeout: 5e3,
|
|
15
|
-
heartbeatTimeout: 4e4
|
|
16
|
-
};
|
|
17
|
-
const mapEndpoints = (endpoints) => endpoints.map((x) => typeof x === "string" ? [x] : [x.uri, x.protocol]);
|
|
18
|
-
const getWsProvider = (endpoints, config) => {
|
|
19
|
-
const { onStatusChanged, innerEnhancer, timeout, heartbeatTimeout } = {
|
|
20
|
-
...defaultConfig,
|
|
21
|
-
...config
|
|
22
|
-
};
|
|
23
|
-
const actualEndpoints = mapEndpoints(
|
|
24
|
-
Array.isArray(endpoints) ? endpoints : [endpoints]
|
|
25
|
-
);
|
|
26
|
-
const WebsocketClass = config?.websocketClass ?? globalThis.WebSocket;
|
|
27
|
-
if (!WebsocketClass) throw new Error("Missing WebSocket class");
|
|
28
|
-
let idx = 0;
|
|
29
|
-
let status;
|
|
30
|
-
let switchTo = null;
|
|
31
|
-
let disconnect = noop;
|
|
32
|
-
let outerCleanup = noop;
|
|
33
|
-
const result = followEnhancer(
|
|
34
|
-
getSyncProvider(async () => {
|
|
35
|
-
const [uri, protocols] = switchTo ?? actualEndpoints[idx++ % actualEndpoints.length];
|
|
36
|
-
switchTo = null;
|
|
37
|
-
const socket = new WebsocketClass(uri, protocols);
|
|
38
|
-
const forceSocketClose = () => {
|
|
39
|
-
try {
|
|
40
|
-
socket.addEventListener("error", noop, { once: true });
|
|
41
|
-
socket.close();
|
|
42
|
-
} catch {
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
onStatusChanged(
|
|
46
|
-
status = {
|
|
47
|
-
type: WsEvent.CONNECTING,
|
|
48
|
-
uri,
|
|
49
|
-
protocols
|
|
50
|
-
}
|
|
51
|
-
);
|
|
52
|
-
await new Promise((resolve, reject) => {
|
|
53
|
-
const onOpen = () => {
|
|
54
|
-
initialCleanup();
|
|
55
|
-
resolve();
|
|
56
|
-
};
|
|
57
|
-
const onError = (e) => {
|
|
58
|
-
initialCleanup();
|
|
59
|
-
if (e == null) forceSocketClose();
|
|
60
|
-
console.error(
|
|
61
|
-
`Unable to connect to ${uri}${protocols ? ", protocols: " + protocols : ""}`
|
|
62
|
-
);
|
|
63
|
-
onStatusChanged(
|
|
64
|
-
status = {
|
|
65
|
-
type: e ? WsEvent.ERROR : WsEvent.CLOSE,
|
|
66
|
-
event: e
|
|
67
|
-
}
|
|
68
|
-
);
|
|
69
|
-
setTimeout(reject, e ? 300 : 0, e);
|
|
70
|
-
};
|
|
71
|
-
const timeoutToken = timeout !== Infinity ? setTimeout(() => {
|
|
72
|
-
initialCleanup();
|
|
73
|
-
forceSocketClose();
|
|
74
|
-
onStatusChanged(status = timeoutError);
|
|
75
|
-
reject(timeoutError.event);
|
|
76
|
-
}, timeout) : void 0;
|
|
77
|
-
const initialCleanup = () => {
|
|
78
|
-
clearTimeout(timeoutToken);
|
|
79
|
-
socket.removeEventListener("error", onError);
|
|
80
|
-
socket.removeEventListener("open", onOpen);
|
|
81
|
-
};
|
|
82
|
-
socket.addEventListener("open", onOpen);
|
|
83
|
-
socket.addEventListener("error", onError);
|
|
84
|
-
disconnect = () => {
|
|
85
|
-
onError(null);
|
|
86
|
-
};
|
|
87
|
-
});
|
|
88
|
-
onStatusChanged(
|
|
89
|
-
status = {
|
|
90
|
-
type: WsEvent.CONNECTED,
|
|
91
|
-
uri,
|
|
92
|
-
protocols
|
|
93
|
-
}
|
|
94
|
-
);
|
|
95
|
-
let _onInnerMessage;
|
|
96
|
-
const inner = innerEnhancer((onInnerMessage) => {
|
|
97
|
-
_onInnerMessage = onInnerMessage;
|
|
98
|
-
return {
|
|
99
|
-
send: (m) => {
|
|
100
|
-
socket.send(m);
|
|
101
|
-
},
|
|
102
|
-
disconnect: () => {
|
|
103
|
-
disconnect();
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
return (onMessage, onHalt) => {
|
|
108
|
-
let heartbeatToken;
|
|
109
|
-
const heartbeat = () => {
|
|
110
|
-
if (heartbeatTimeout > MAX_HB_TIMEOUT) return;
|
|
111
|
-
clearTimeout(heartbeatToken);
|
|
112
|
-
heartbeatToken = setTimeout(() => {
|
|
113
|
-
console.warn(`Terminate: heartbeat timeout`);
|
|
114
|
-
disconnect(true);
|
|
115
|
-
}, heartbeatTimeout);
|
|
116
|
-
};
|
|
117
|
-
heartbeat();
|
|
118
|
-
const connection = inner(onMessage);
|
|
119
|
-
const _onMessage = (e) => {
|
|
120
|
-
heartbeat();
|
|
121
|
-
if (typeof e.data === "string") _onInnerMessage(e.data);
|
|
122
|
-
};
|
|
123
|
-
const innerHalt = (reason) => (e) => {
|
|
124
|
-
clearTimeout(heartbeatToken);
|
|
125
|
-
console.warn(`WS halt (${reason})`);
|
|
126
|
-
onStatusChanged(
|
|
127
|
-
status = {
|
|
128
|
-
type: reason,
|
|
129
|
-
event: e
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
|
-
onHalt();
|
|
133
|
-
};
|
|
134
|
-
const onError = innerHalt(WsEvent.ERROR);
|
|
135
|
-
const onClose = innerHalt(WsEvent.CLOSE);
|
|
136
|
-
socket.addEventListener("ping", heartbeat);
|
|
137
|
-
socket.addEventListener("message", _onMessage);
|
|
138
|
-
socket.addEventListener("error", onError);
|
|
139
|
-
socket.addEventListener("close", onClose);
|
|
140
|
-
disconnect = (withHalt) => {
|
|
141
|
-
clearTimeout(heartbeatToken);
|
|
142
|
-
outerCleanup();
|
|
143
|
-
disconnect = noop;
|
|
144
|
-
socket.removeEventListener("ping", heartbeat);
|
|
145
|
-
socket.removeEventListener("message", _onMessage);
|
|
146
|
-
socket.removeEventListener("error", onError);
|
|
147
|
-
socket.removeEventListener("close", onClose);
|
|
148
|
-
forceSocketClose();
|
|
149
|
-
if (withHalt) onClose({});
|
|
150
|
-
connection.disconnect();
|
|
151
|
-
};
|
|
152
|
-
return connection;
|
|
153
|
-
};
|
|
154
|
-
}),
|
|
155
|
-
() => {
|
|
156
|
-
switchFn();
|
|
157
|
-
}
|
|
158
|
-
);
|
|
159
|
-
outerCleanup = result.cleanup;
|
|
160
|
-
delete result.cleanup;
|
|
161
|
-
const switchFn = (...args) => {
|
|
162
|
-
if (status.type === WsEvent.CLOSE) return;
|
|
163
|
-
if (args.length) switchTo = args;
|
|
164
|
-
if (status.type !== WsEvent.ERROR) disconnect(true);
|
|
165
|
-
};
|
|
166
|
-
return Object.assign(result, { switch: switchFn, getStatus: () => status });
|
|
167
|
-
};
|
|
168
|
-
const MAX_HB_TIMEOUT = 2147483647;
|
|
169
|
-
|
|
170
|
-
export { defaultConfig, getWsProvider, mapEndpoints, noop };
|
|
171
|
-
//# sourceMappingURL=default-provider.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default-provider.mjs","sources":["../../../src/default-provider.ts"],"sourcesContent":["import { getSyncProvider } from \"@polkadot-api/json-rpc-provider-proxy\"\nimport { StatusChange, WsJsonRpcProvider, WsEvent } from \"./types-common\"\nimport { followEnhancer } from \"./follow-enhancer\"\nimport { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\nimport { WebSocketClass } from \"./types-new\"\n\nconst timeoutError: StatusChange = {\n type: WsEvent.ERROR,\n event: { type: \"timeout\" },\n}\n\nexport const noop = () => {}\n\nexport const defaultConfig: {\n onStatusChanged: (status: StatusChange) => void\n innerEnhancer: (input: JsonRpcProvider) => JsonRpcProvider\n timeout: number\n heartbeatTimeout: number\n} = {\n onStatusChanged: noop,\n innerEnhancer: (x: JsonRpcProvider) => x,\n timeout: 5_000,\n heartbeatTimeout: 40_000,\n}\n\nexport const mapEndpoints = (\n endpoints: Array<string | { uri: string; protocol: string | string[] }>,\n): Array<[string, string | string[]] | [string]> =>\n endpoints.map((x) => (typeof x === \"string\" ? [x] : [x.uri, x.protocol]))\n\nexport const getWsProvider = (\n endpoints:\n | string\n | Array<string | { uri: string; protocol: string | string[] }>,\n config?: Partial<{\n onStatusChanged: (status: StatusChange) => void\n innerEnhancer: (input: JsonRpcProvider) => JsonRpcProvider\n timeout: number\n heartbeatTimeout: number\n websocketClass: WebSocketClass\n }>,\n): WsJsonRpcProvider => {\n const { onStatusChanged, innerEnhancer, timeout, heartbeatTimeout } = {\n ...defaultConfig,\n ...config,\n }\n const actualEndpoints = mapEndpoints(\n Array.isArray(endpoints) ? endpoints : [endpoints],\n )\n const WebsocketClass = config?.websocketClass ?? globalThis.WebSocket\n if (!WebsocketClass) throw new Error(\"Missing WebSocket class\")\n\n let idx = 0\n let status: StatusChange\n let switchTo: [string] | [string, string | string[]] | null = null\n let disconnect: (withHalt?: boolean) => void = noop\n\n let outerCleanup: () => void = noop\n const result = followEnhancer(\n getSyncProvider(async () => {\n const [uri, protocols] =\n switchTo ?? actualEndpoints[idx++ % actualEndpoints.length]\n switchTo = null\n const socket = new WebsocketClass(uri, protocols)\n const forceSocketClose = () => {\n try {\n socket.addEventListener(\"error\", noop, { once: true })\n socket.close()\n } catch {}\n }\n onStatusChanged(\n (status = {\n type: WsEvent.CONNECTING,\n uri,\n protocols,\n }),\n )\n\n await new Promise<void>((resolve, reject) => {\n const onOpen = () => {\n initialCleanup()\n resolve()\n }\n\n const onError = (e: Event | null) => {\n initialCleanup()\n if (e == null) forceSocketClose()\n console.error(\n `Unable to connect to ${uri}${\n protocols ? \", protocols: \" + protocols : \"\"\n }`,\n )\n onStatusChanged(\n (status = {\n type: e ? WsEvent.ERROR : WsEvent.CLOSE,\n event: e,\n }),\n )\n setTimeout(reject, e ? 300 : 0, e)\n }\n\n const timeoutToken =\n timeout !== Infinity\n ? setTimeout(() => {\n initialCleanup()\n forceSocketClose()\n onStatusChanged((status = timeoutError))\n reject(timeoutError.event)\n }, timeout)\n : undefined\n\n const initialCleanup = () => {\n clearTimeout(timeoutToken)\n socket.removeEventListener(\"error\", onError)\n socket.removeEventListener(\"open\", onOpen)\n }\n socket.addEventListener(\"open\", onOpen)\n socket.addEventListener(\"error\", onError)\n disconnect = () => {\n onError(null)\n }\n })\n\n onStatusChanged(\n (status = {\n type: WsEvent.CONNECTED,\n uri,\n protocols,\n }),\n )\n\n let _onInnerMessage: (msg: string) => void\n const inner = innerEnhancer((onInnerMessage) => {\n _onInnerMessage = onInnerMessage\n return {\n send: (m) => {\n socket.send(m)\n },\n disconnect: () => {\n disconnect()\n },\n }\n })\n\n return (onMessage, onHalt) => {\n let heartbeatToken: NodeJS.Timeout\n const heartbeat = () => {\n if (heartbeatTimeout > MAX_HB_TIMEOUT) return\n clearTimeout(heartbeatToken)\n\n heartbeatToken = setTimeout(() => {\n console.warn(`Terminate: heartbeat timeout`)\n disconnect(true)\n }, heartbeatTimeout)\n }\n heartbeat()\n\n const connection = inner(onMessage)\n const _onMessage = (e: MessageEvent) => {\n heartbeat()\n if (typeof e.data === \"string\") _onInnerMessage(e.data)\n }\n const innerHalt =\n (reason: WsEvent.CLOSE | WsEvent.ERROR) => (e: any) => {\n clearTimeout(heartbeatToken)\n console.warn(`WS halt (${reason})`)\n onStatusChanged(\n (status = {\n type: reason,\n event: e,\n }),\n )\n onHalt()\n }\n const onError = innerHalt(WsEvent.ERROR)\n const onClose = innerHalt(WsEvent.CLOSE)\n\n socket.addEventListener(\"ping\", heartbeat)\n socket.addEventListener(\"message\", _onMessage)\n socket.addEventListener(\"error\", onError)\n socket.addEventListener(\"close\", onClose)\n disconnect = (withHalt) => {\n clearTimeout(heartbeatToken)\n outerCleanup()\n disconnect = noop\n socket.removeEventListener(\"ping\", heartbeat)\n socket.removeEventListener(\"message\", _onMessage)\n socket.removeEventListener(\"error\", onError)\n socket.removeEventListener(\"close\", onClose)\n forceSocketClose()\n if (withHalt) onClose({})\n connection.disconnect()\n }\n\n return connection\n }\n }),\n () => {\n switchFn()\n },\n )\n outerCleanup = result.cleanup\n delete (result as any).cleanup\n\n const switchFn: WsJsonRpcProvider[\"switch\"] = (...args) => {\n if (status.type === WsEvent.CLOSE) return\n if (args.length) switchTo = args as any\n if (status.type !== WsEvent.ERROR) disconnect(true)\n }\n\n return Object.assign(result, { switch: switchFn, getStatus: () => status })\n}\n\nconst MAX_HB_TIMEOUT = 2147483647\n"],"names":[],"mappings":"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"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
const methods = {};
|
|
2
|
-
["v1", "unstable"].forEach((version) => {
|
|
3
|
-
methods[`chainHead_${version}_follow`] = "follow";
|
|
4
|
-
methods[`chainHead_${version}_unfollow`] = "unfollow";
|
|
5
|
-
});
|
|
6
|
-
const resetStops = () => ({ latest: Date.now(), count: 0 });
|
|
7
|
-
const followEnhancer = (base, forceDisconnect) => {
|
|
8
|
-
const prematureStops = /* @__PURE__ */ new Set();
|
|
9
|
-
const preOpId = /* @__PURE__ */ new Map();
|
|
10
|
-
const onGoing = /* @__PURE__ */ new Set();
|
|
11
|
-
let methodsRequestId;
|
|
12
|
-
let nStops = resetStops();
|
|
13
|
-
const result = (onMsg) => {
|
|
14
|
-
const { send, disconnect } = base((fromProvider) => {
|
|
15
|
-
const parsed = JSON.parse(fromProvider);
|
|
16
|
-
if ("id" in parsed) {
|
|
17
|
-
const { id, result: result2 } = parsed;
|
|
18
|
-
if (id === methodsRequestId) {
|
|
19
|
-
methodsRequestId = void 0;
|
|
20
|
-
if (result2 && !result2.methods.some((x) => {
|
|
21
|
-
const [group, , name] = x.split("_");
|
|
22
|
-
return group === "chainHead" && name === "follow";
|
|
23
|
-
})) {
|
|
24
|
-
onMsg(fromProvider);
|
|
25
|
-
forceDisconnect();
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
const msg = preOpId.get(id);
|
|
30
|
-
if (msg) {
|
|
31
|
-
preOpId.delete(id);
|
|
32
|
-
if (prematureStops.has(result2)) {
|
|
33
|
-
prematureStops.delete(result2);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
onGoing.add(result2);
|
|
37
|
-
const currentSize = onGoing.size + preOpId.size;
|
|
38
|
-
if (currentSize > 2)
|
|
39
|
-
console.warn(
|
|
40
|
-
`Too many chainHead follow subscriptions (${currentSize})`
|
|
41
|
-
);
|
|
42
|
-
else if (parsed.error) {
|
|
43
|
-
console.warn(`chainHead follow failed on the ${currentSize} sub`);
|
|
44
|
-
forceDisconnect();
|
|
45
|
-
preOpId.set(id, msg);
|
|
46
|
-
send(msg);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
} else {
|
|
51
|
-
const { subscription, result: result2 } = parsed.params;
|
|
52
|
-
if (result2?.event === "stop") {
|
|
53
|
-
const diff = Date.now() - nStops.latest;
|
|
54
|
-
nStops.latest += diff;
|
|
55
|
-
nStops.count = diff < 1e3 ? nStops.count + 1 : 1;
|
|
56
|
-
if (onGoing.has(subscription)) onGoing.delete(subscription);
|
|
57
|
-
else prematureStops.add(subscription);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
onMsg(fromProvider);
|
|
61
|
-
if (nStops.count > 2) {
|
|
62
|
-
nStops = resetStops();
|
|
63
|
-
forceDisconnect();
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
return {
|
|
67
|
-
send(toProvider) {
|
|
68
|
-
const parsed = JSON.parse(toProvider);
|
|
69
|
-
if (parsed.method === "rpc_methods") methodsRequestId = parsed.id;
|
|
70
|
-
const method = methods[parsed.method];
|
|
71
|
-
if (method === "follow") {
|
|
72
|
-
preOpId.set(parsed.id, toProvider);
|
|
73
|
-
} else if (method === "unfollow") {
|
|
74
|
-
onGoing.delete(parsed.params[0]);
|
|
75
|
-
}
|
|
76
|
-
send(toProvider);
|
|
77
|
-
},
|
|
78
|
-
disconnect
|
|
79
|
-
};
|
|
80
|
-
};
|
|
81
|
-
return Object.assign(result, {
|
|
82
|
-
cleanup: () => {
|
|
83
|
-
prematureStops.clear();
|
|
84
|
-
preOpId.clear();
|
|
85
|
-
onGoing.clear();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export { followEnhancer };
|
|
91
|
-
//# sourceMappingURL=follow-enhancer.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"follow-enhancer.mjs","sources":["../../../src/follow-enhancer.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\n\nconst methods: Record<string, \"follow\" | \"unfollow\"> = {}\n;[\"v1\", \"unstable\"].forEach((version) => {\n methods[`chainHead_${version}_follow`] = \"follow\"\n methods[`chainHead_${version}_unfollow`] = \"unfollow\"\n})\n\nconst resetStops = () => ({ latest: Date.now(), count: 0 })\n\nexport const followEnhancer: (\n input: JsonRpcProvider,\n forceDisconnect: () => void,\n) => JsonRpcProvider & {\n cleanup: () => void\n} = (base, forceDisconnect) => {\n const prematureStops = new Set<string>()\n const preOpId = new Map<string, string>()\n const onGoing = new Set<string>()\n let methodsRequestId: string | undefined\n let nStops: { latest: number; count: number } = resetStops()\n\n const result: JsonRpcProvider = (onMsg) => {\n const { send, disconnect } = base((fromProvider) => {\n const parsed = JSON.parse(fromProvider)\n // it's a response\n if (\"id\" in parsed) {\n const { id, result } = parsed\n if (id === methodsRequestId) {\n methodsRequestId = undefined\n if (\n result &&\n !(result.methods as string[]).some((x) => {\n const [group, , name] = x.split(\"_\")\n return group === \"chainHead\" && name === \"follow\"\n })\n ) {\n onMsg(fromProvider)\n forceDisconnect()\n return\n }\n }\n\n const msg = preOpId.get(id)\n if (msg) {\n preOpId.delete(id)\n if (prematureStops.has(result)) {\n prematureStops.delete(result)\n return\n }\n\n onGoing.add(result)\n const currentSize = onGoing.size + preOpId.size\n if (currentSize > 2)\n console.warn(\n `Too many chainHead follow subscriptions (${currentSize})`,\n )\n else if (parsed.error) {\n console.warn(`chainHead follow failed on the ${currentSize} sub`)\n forceDisconnect()\n preOpId.set(id, msg)\n send(msg)\n return\n }\n }\n } else {\n // it's a notifiaction\n const { subscription, result } = (parsed as any).params\n if (result?.event === \"stop\") {\n const diff = Date.now() - nStops.latest\n nStops.latest += diff\n nStops.count = diff < 1000 ? nStops.count + 1 : 1\n\n if (onGoing.has(subscription)) onGoing.delete(subscription)\n else prematureStops.add(subscription)\n }\n }\n\n onMsg(fromProvider)\n if (nStops.count > 2) {\n nStops = resetStops()\n forceDisconnect()\n }\n })\n\n return {\n send(toProvider) {\n const parsed = JSON.parse(toProvider)\n if (parsed.method === \"rpc_methods\") methodsRequestId = parsed.id\n\n const method = methods[parsed.method]\n if (method === \"follow\") {\n preOpId.set(parsed.id, toProvider)\n } else if (method === \"unfollow\") {\n onGoing.delete(parsed.params[0])\n }\n send(toProvider)\n },\n disconnect,\n }\n }\n\n return Object.assign(result, {\n cleanup: () => {\n prematureStops.clear()\n preOpId.clear()\n onGoing.clear()\n },\n })\n}\n"],"names":["result"],"mappings":"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"}
|
package/dist/index/esm/index.mjs
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
var WsEvent = /* @__PURE__ */ ((WsEvent2) => {
|
|
2
|
-
WsEvent2[WsEvent2["CONNECTING"] = 0] = "CONNECTING";
|
|
3
|
-
WsEvent2[WsEvent2["CONNECTED"] = 1] = "CONNECTED";
|
|
4
|
-
WsEvent2[WsEvent2["ERROR"] = 2] = "ERROR";
|
|
5
|
-
WsEvent2[WsEvent2["CLOSE"] = 3] = "CLOSE";
|
|
6
|
-
return WsEvent2;
|
|
7
|
-
})(WsEvent || {});
|
|
8
|
-
|
|
9
|
-
export { WsEvent };
|
|
10
|
-
//# sourceMappingURL=types-common.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types-common.mjs","sources":["../../../src/types-common.ts"],"sourcesContent":["import { JsonRpcProvider } from \"@polkadot-api/json-rpc-provider\"\n\nexport enum WsEvent {\n CONNECTING,\n CONNECTED,\n ERROR,\n CLOSE,\n}\n\nexport type WsConnecting = {\n type: WsEvent.CONNECTING\n uri: string\n protocols?: string | string[]\n}\nexport type WsConnected = {\n type: WsEvent.CONNECTED\n uri: string\n protocols?: string | string[]\n}\nexport type WsError = {\n type: WsEvent.ERROR\n event: any\n}\nexport type WsClose = {\n type: WsEvent.CLOSE\n event: any\n}\nexport type StatusChange = WsConnecting | WsConnected | WsError | WsClose\nexport type WsJsonRpcProvider = JsonRpcProvider & {\n switch: (uri?: string, protocol?: string[]) => void\n getStatus: () => StatusChange\n}\nexport { type JsonRpcProvider }\n"],"names":["WsEvent"],"mappings":"AAEO,IAAK,OAAA,qBAAAA,QAAAA,KAAL;AACL,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AACA,EAAAA,QAAAA,CAAAA,QAAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AAJU,EAAA,OAAAA,QAAAA;AAAA,CAAA,EAAA,OAAA,IAAA,EAAA;;;;"}
|
package/dist/index/index.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
2
|
-
export { JsonRpcProvider } from '@polkadot-api/json-rpc-provider';
|
|
3
|
-
|
|
4
|
-
declare enum WsEvent {
|
|
5
|
-
CONNECTING = 0,
|
|
6
|
-
CONNECTED = 1,
|
|
7
|
-
ERROR = 2,
|
|
8
|
-
CLOSE = 3
|
|
9
|
-
}
|
|
10
|
-
type WsConnecting = {
|
|
11
|
-
type: WsEvent.CONNECTING;
|
|
12
|
-
uri: string;
|
|
13
|
-
protocols?: string | string[];
|
|
14
|
-
};
|
|
15
|
-
type WsConnected = {
|
|
16
|
-
type: WsEvent.CONNECTED;
|
|
17
|
-
uri: string;
|
|
18
|
-
protocols?: string | string[];
|
|
19
|
-
};
|
|
20
|
-
type WsError = {
|
|
21
|
-
type: WsEvent.ERROR;
|
|
22
|
-
event: any;
|
|
23
|
-
};
|
|
24
|
-
type WsClose = {
|
|
25
|
-
type: WsEvent.CLOSE;
|
|
26
|
-
event: any;
|
|
27
|
-
};
|
|
28
|
-
type StatusChange = WsConnecting | WsConnected | WsError | WsClose;
|
|
29
|
-
type WsJsonRpcProvider = JsonRpcProvider & {
|
|
30
|
-
switch: (uri?: string, protocol?: string[]) => void;
|
|
31
|
-
getStatus: () => StatusChange;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
type WebSocketClass = typeof WebSocket;
|
|
35
|
-
|
|
36
|
-
declare const getWsProvider: (endpoints: string | Array<string | {
|
|
37
|
-
uri: string;
|
|
38
|
-
protocol: string | string[];
|
|
39
|
-
}>, config?: Partial<{
|
|
40
|
-
onStatusChanged: (status: StatusChange) => void;
|
|
41
|
-
innerEnhancer: (input: JsonRpcProvider) => JsonRpcProvider;
|
|
42
|
-
timeout: number;
|
|
43
|
-
heartbeatTimeout: number;
|
|
44
|
-
websocketClass: WebSocketClass;
|
|
45
|
-
}>) => WsJsonRpcProvider;
|
|
46
|
-
|
|
47
|
-
export { WsEvent, getWsProvider };
|
|
48
|
-
export type { StatusChange, WebSocketClass, WsClose, WsConnected, WsConnecting, WsError, WsJsonRpcProvider };
|