extra-native-websocket 0.4.1 → 0.5.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/README.md +5 -5
- package/lib/extra-native-websocket.d.ts +3 -0
- package/lib/extra-native-websocket.js +3 -0
- package/lib/extra-native-websocket.js.map +1 -1
- package/lib/utils/auto-reconnect-with-exponential-back-off.d.ts +4 -5
- package/lib/utils/auto-reconnect-with-exponential-back-off.js +4 -3
- package/lib/utils/auto-reconnect-with-exponential-back-off.js.map +1 -1
- package/lib/utils/auto-reconnect.d.ts +1 -1
- package/lib/utils/auto-reconnect.js +3 -2
- package/lib/utils/auto-reconnect.js.map +1 -1
- package/package.json +25 -25
- package/src/utils/auto-reconnect-with-exponential-back-off.ts +7 -8
- package/src/utils/auto-reconnect.ts +2 -2
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ class ExtraNativeWebSocket extends Emitter<{
|
|
|
56
56
|
```ts
|
|
57
57
|
function autoReconnect(
|
|
58
58
|
ws: ExtraNativeWebSocket
|
|
59
|
-
,
|
|
59
|
+
, reconnectInterval?: number = 0
|
|
60
60
|
, connectTimeout?: number
|
|
61
61
|
): () => void
|
|
62
62
|
```
|
|
@@ -65,12 +65,12 @@ function autoReconnect(
|
|
|
65
65
|
```ts
|
|
66
66
|
function autoReonnectWithExponentialBackOff(
|
|
67
67
|
ws: ExtraWebSocket
|
|
68
|
-
,
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
, reconnectInterval: {
|
|
69
|
+
baseInterval: number
|
|
70
|
+
maxInterval?: number = Infinity
|
|
71
71
|
factor?: number = 2
|
|
72
72
|
jitter?: boolean = true
|
|
73
|
-
connectTimeout?: number
|
|
74
73
|
}
|
|
74
|
+
, connectTimeout?: number
|
|
75
75
|
): () => void
|
|
76
76
|
```
|
|
@@ -24,6 +24,9 @@ export declare class ExtraNativeWebSocket extends Emitter<{
|
|
|
24
24
|
getState(): State;
|
|
25
25
|
getBinaryType(): BinaryType;
|
|
26
26
|
setBinaryType(val: BinaryType): void;
|
|
27
|
+
/**
|
|
28
|
+
* @throws {WebSocketError}
|
|
29
|
+
*/
|
|
27
30
|
connect(signal?: AbortSignal): Promise<void>;
|
|
28
31
|
close(code?: number, reason?: string): Promise<void>;
|
|
29
32
|
send(data: Data): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../src/extra-native-websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,MAAM,CAAN,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,2CAAI,CAAA;IACJ,yDAAW,CAAA;AACb,CAAC,EAHW,UAAU,KAAV,UAAU,QAGrB;AAED,MAAM,CAAN,IAAY,KAKX;AALD,WAAY,KAAK;IACf,qCAAM,CAAA;IACN,6CAAU,CAAA;IACV,2CAAS,CAAA;IACT,uCAAO,CAAA;AACT,CAAC,EALW,KAAK,KAAL,KAAK,QAKhB;AAED,IAAK,UAKJ;AALD,WAAK,UAAU;IACb,uDAAc,CAAA;IACd,2CAAQ,CAAA;IACR,iDAAW,CAAA;IACX,+CAAU,CAAA;AACZ,CAAC,EALI,UAAU,KAAV,UAAU,QAKd;AAID,MAAM,OAAO,oBAAqB,SAAQ,OAKxC;IAKA,YAAoB,eAAgC;QAClD,KAAK,EAAE,CAAA;QADW,oBAAe,GAAf,eAAe,CAAiB;QAH5C,eAAU,GAAe,UAAU,CAAC,IAAI,CAAA;QACtC,mBAAc,GAAG,IAAI,KAAK,EAAQ,CAAA;IAI5C,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACjC,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,UAAU,CAAA;gBACnD,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAA;gBAC5C,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAA;gBAC7C,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,CAAA;gBAC3C,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC,MAAM,CAAA;QACrB,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED,aAAa,CAAC,GAAe;QAC3B,IAAI,CAAC,UAAU,GAAG,GAAG,CAAA;QAErB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,UAAU,CAAC,IAAI;oBAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAA;oBACjC,MAAK;gBACP,KAAK,UAAU,CAAC,WAAW;oBACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,aAAa,CAAA;oBACxC,MAAK;gBACP,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ExtraNativeWebSocket } from "../extra-native-websocket.js";
|
|
2
|
-
export declare function autoReconnectWithExponentialBackOff(ws: ExtraNativeWebSocket, {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
export declare function autoReconnectWithExponentialBackOff(ws: ExtraNativeWebSocket, { baseInterval, maxInterval, factor, jitter }: {
|
|
3
|
+
baseInterval: number;
|
|
4
|
+
maxInterval?: number;
|
|
5
5
|
factor?: number;
|
|
6
6
|
jitter?: boolean;
|
|
7
|
-
|
|
8
|
-
}): () => void;
|
|
7
|
+
}, connectTimeout?: number): () => void;
|
|
@@ -4,8 +4,9 @@ import { pass } from '@blackglory/prelude';
|
|
|
4
4
|
import { delay } from 'extra-promise';
|
|
5
5
|
import { waitForFunction } from '@blackglory/wait-for';
|
|
6
6
|
import { AbortController, timeoutSignal } from 'extra-abort';
|
|
7
|
-
export function autoReconnectWithExponentialBackOff(ws, {
|
|
7
|
+
export function autoReconnectWithExponentialBackOff(ws, { baseInterval, maxInterval = Infinity, factor = 2, jitter = true }, connectTimeout) {
|
|
8
8
|
const controller = new AbortController();
|
|
9
|
+
// Make sure the error listener is added, prevent crashes due to uncaught errors.
|
|
9
10
|
const removeErrorListener = ws.on('error', pass);
|
|
10
11
|
let removeCloseListener = ws.once('close', closeListener);
|
|
11
12
|
return () => {
|
|
@@ -20,8 +21,8 @@ export function autoReconnectWithExponentialBackOff(ws, { baseTimeout, maxTimeou
|
|
|
20
21
|
return;
|
|
21
22
|
await delay(calculateExponentialBackoffTimeout({
|
|
22
23
|
retries,
|
|
23
|
-
baseTimeout,
|
|
24
|
-
maxTimeout,
|
|
24
|
+
baseTimeout: baseInterval,
|
|
25
|
+
maxTimeout: maxInterval,
|
|
25
26
|
factor,
|
|
26
27
|
jitter
|
|
27
28
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,UAAU,mCAAmC,CACjD,EAAwB,EACxB,EACE,
|
|
1
|
+
{"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE5D,MAAM,UAAU,mCAAmC,CACjD,EAAwB,EACxB,EACE,YAAY,EACZ,WAAW,GAAG,QAAQ,EACtB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd,EACD,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,kCAAkC,CAAC;gBAC7C,OAAO;gBACP,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,WAAW;gBACvB,MAAM;gBACN,MAAM;aACP,CAAC,CAAC,CAAA;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,cAAc;oBAChB,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC/B,CAAC,CAAC,SAAS,CACV,CAAA;gBACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACrD,MAAK;YACP,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,EAAE,CAAA;gBACT,IAAI,EAAE,CAAA;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ExtraNativeWebSocket } from "../extra-native-websocket.js";
|
|
2
|
-
export declare function autoReconnect(ws: ExtraNativeWebSocket,
|
|
2
|
+
export declare function autoReconnect(ws: ExtraNativeWebSocket, reconnectInterval?: number, connectTimeout?: number): () => void;
|
|
@@ -3,8 +3,9 @@ import { delay } from 'extra-promise';
|
|
|
3
3
|
import { AbortController, timeoutSignal } from 'extra-abort';
|
|
4
4
|
import { pass } from '@blackglory/prelude';
|
|
5
5
|
import { waitForFunction } from '@blackglory/wait-for';
|
|
6
|
-
export function autoReconnect(ws,
|
|
6
|
+
export function autoReconnect(ws, reconnectInterval = 0, connectTimeout) {
|
|
7
7
|
const controller = new AbortController();
|
|
8
|
+
// Make sure the error listener is added, prevent crashes due to uncaught errors.
|
|
8
9
|
const removeErrorListener = ws.on('error', pass);
|
|
9
10
|
let removeCloseListener = ws.once('close', closeListener);
|
|
10
11
|
return () => {
|
|
@@ -16,7 +17,7 @@ export function autoReconnect(ws, reconnectTimeout = 0, connectTimeout) {
|
|
|
16
17
|
while (true) {
|
|
17
18
|
if (controller.signal.aborted)
|
|
18
19
|
return;
|
|
19
|
-
await delay(
|
|
20
|
+
await delay(reconnectInterval);
|
|
20
21
|
if (controller.signal.aborted)
|
|
21
22
|
return;
|
|
22
23
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAC3B,EAAwB,EACxB,
|
|
1
|
+
{"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAC3B,EAAwB,EACxB,oBAA4B,CAAC,EAC7B,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,cAAc;oBAChB,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC;oBAC/B,CAAC,CAAC,SAAS,CACV,CAAA;gBACD,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;oBAAE,OAAM;gBAErC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBACrD,MAAK;YACP,CAAC;YAAC,WAAM,CAAC;gBACP,IAAI,EAAE,CAAA;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extra-native-websocket",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"files": [
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"engines": {
|
|
18
|
-
"node": ">=
|
|
18
|
+
"node": ">=22"
|
|
19
19
|
},
|
|
20
20
|
"scripts": {
|
|
21
21
|
"prepare": "ts-patch install -s",
|
|
22
|
-
"lint": "eslint --
|
|
22
|
+
"lint": "eslint --quiet src __tests__",
|
|
23
23
|
"test": "vitest --run",
|
|
24
24
|
"prepublishOnly": "run-s prepare clean build",
|
|
25
25
|
"clean": "rimraf lib",
|
|
@@ -33,35 +33,35 @@
|
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@commitlint/cli": "^
|
|
37
|
-
"@commitlint/config-conventional": "^
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
40
|
-
"@typescript-eslint/parser": "^6.13.2",
|
|
36
|
+
"@commitlint/cli": "^19.8.1",
|
|
37
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
38
|
+
"@eslint/js": "^9.31.0",
|
|
39
|
+
"@types/ws": "^8.18.1",
|
|
41
40
|
"cross-env": "^7.0.3",
|
|
42
|
-
"eslint": "^
|
|
41
|
+
"eslint": "^9.31.0",
|
|
43
42
|
"husky": "4",
|
|
44
|
-
"jsdom": "^
|
|
43
|
+
"jsdom": "^26.1.0",
|
|
45
44
|
"npm-run-all": "^4.1.5",
|
|
46
45
|
"return-style": "^3.0.1",
|
|
47
|
-
"rimraf": "^
|
|
46
|
+
"rimraf": "^6.0.1",
|
|
48
47
|
"standard-version": "^9.5.0",
|
|
49
|
-
"ts-patch": "^3.
|
|
50
|
-
"tslib": "^2.
|
|
51
|
-
"typescript": "^5.
|
|
52
|
-
"typescript-
|
|
53
|
-
"
|
|
54
|
-
"vite
|
|
55
|
-
"
|
|
56
|
-
"
|
|
48
|
+
"ts-patch": "^3.3.0",
|
|
49
|
+
"tslib": "^2.8.1",
|
|
50
|
+
"typescript": "^5.8.3",
|
|
51
|
+
"typescript-eslint": "^8.37.0",
|
|
52
|
+
"typescript-transform-paths": "^3.5.5",
|
|
53
|
+
"vite": "^7.0.5",
|
|
54
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
55
|
+
"vitest": "^3.2.4",
|
|
56
|
+
"ws": "^8.18.3"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@blackglory/errors": "^3.0.3",
|
|
60
|
-
"@blackglory/prelude": "^0.
|
|
61
|
-
"@blackglory/structures": "^0.
|
|
62
|
-
"@blackglory/wait-for": "^0.
|
|
63
|
-
"extra-abort": "^0.
|
|
64
|
-
"extra-defer": "^0.3.
|
|
65
|
-
"extra-promise": "^
|
|
60
|
+
"@blackglory/prelude": "^0.4.0",
|
|
61
|
+
"@blackglory/structures": "^0.14.10",
|
|
62
|
+
"@blackglory/wait-for": "^0.8.1",
|
|
63
|
+
"extra-abort": "^0.4.0",
|
|
64
|
+
"extra-defer": "^0.3.1",
|
|
65
|
+
"extra-promise": "^7.0.0"
|
|
66
66
|
}
|
|
67
67
|
}
|
|
@@ -8,18 +8,17 @@ import { AbortController, timeoutSignal } from 'extra-abort'
|
|
|
8
8
|
export function autoReconnectWithExponentialBackOff(
|
|
9
9
|
ws: ExtraNativeWebSocket
|
|
10
10
|
, {
|
|
11
|
-
|
|
12
|
-
,
|
|
11
|
+
baseInterval
|
|
12
|
+
, maxInterval = Infinity
|
|
13
13
|
, factor = 2
|
|
14
14
|
, jitter = true
|
|
15
|
-
, connectTimeout
|
|
16
15
|
}: {
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
baseInterval: number
|
|
17
|
+
maxInterval?: number
|
|
19
18
|
factor?: number
|
|
20
19
|
jitter?: boolean
|
|
21
|
-
connectTimeout?: number
|
|
22
20
|
}
|
|
21
|
+
, connectTimeout?: number
|
|
23
22
|
): () => void {
|
|
24
23
|
const controller = new AbortController()
|
|
25
24
|
|
|
@@ -40,8 +39,8 @@ export function autoReconnectWithExponentialBackOff(
|
|
|
40
39
|
|
|
41
40
|
await delay(calculateExponentialBackoffTimeout({
|
|
42
41
|
retries
|
|
43
|
-
, baseTimeout
|
|
44
|
-
, maxTimeout
|
|
42
|
+
, baseTimeout: baseInterval
|
|
43
|
+
, maxTimeout: maxInterval
|
|
45
44
|
, factor
|
|
46
45
|
, jitter
|
|
47
46
|
}))
|
|
@@ -6,7 +6,7 @@ import { waitForFunction } from '@blackglory/wait-for'
|
|
|
6
6
|
|
|
7
7
|
export function autoReconnect(
|
|
8
8
|
ws: ExtraNativeWebSocket
|
|
9
|
-
,
|
|
9
|
+
, reconnectInterval: number = 0
|
|
10
10
|
, connectTimeout?: number
|
|
11
11
|
): () => void {
|
|
12
12
|
const controller = new AbortController()
|
|
@@ -25,7 +25,7 @@ export function autoReconnect(
|
|
|
25
25
|
while (true) {
|
|
26
26
|
if (controller.signal.aborted) return
|
|
27
27
|
|
|
28
|
-
await delay(
|
|
28
|
+
await delay(reconnectInterval)
|
|
29
29
|
if (controller.signal.aborted) return
|
|
30
30
|
|
|
31
31
|
try {
|