websocket-ts 2.3.0 → 3.0.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 +134 -9
- package/dist/cjs/{src/backoff → backoff}/backoff.d.ts +6 -3
- package/dist/{esm/src → cjs}/backoff/backoff.d.ts.map +1 -1
- package/dist/{esm/src → cjs}/backoff/backoff.js.map +1 -1
- package/dist/cjs/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
- package/dist/cjs/backoff/constantbackoff.d.ts.map +1 -0
- package/dist/cjs/backoff/constantbackoff.js +34 -0
- package/dist/cjs/backoff/constantbackoff.js.map +1 -0
- package/dist/{esm/src → cjs}/backoff/exponentialbackoff.d.ts +2 -2
- package/dist/cjs/backoff/exponentialbackoff.d.ts.map +1 -0
- package/dist/cjs/{src/backoff → backoff}/exponentialbackoff.js +19 -27
- package/dist/cjs/backoff/exponentialbackoff.js.map +1 -0
- package/dist/{esm/src → cjs}/backoff/linearbackoff.d.ts +1 -1
- package/dist/cjs/backoff/linearbackoff.d.ts.map +1 -0
- package/dist/cjs/{src/backoff → backoff}/linearbackoff.js +23 -31
- package/dist/cjs/backoff/linearbackoff.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{esm/src → cjs}/queue/array_queue.d.ts +1 -1
- package/dist/cjs/queue/array_queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/array_queue.js +17 -18
- package/dist/cjs/queue/array_queue.js.map +1 -0
- package/dist/cjs/queue/queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/queue.js.map +1 -1
- package/dist/cjs/{src/queue → queue}/ring_queue.d.ts +1 -1
- package/dist/cjs/queue/ring_queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/ring_queue.js +25 -22
- package/dist/cjs/queue/ring_queue.js.map +1 -0
- package/dist/cjs/{src/websocket.d.ts → websocket.d.ts} +75 -17
- package/dist/cjs/websocket.d.ts.map +1 -0
- package/dist/cjs/websocket.js +588 -0
- package/dist/cjs/websocket.js.map +1 -0
- package/dist/cjs/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
- package/dist/cjs/websocket_buffer.d.ts.map +1 -0
- package/dist/cjs/websocket_buffer.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_builder.d.ts +14 -5
- package/dist/cjs/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
- package/dist/cjs/websocket_builder.js +236 -0
- package/dist/cjs/websocket_builder.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_event.d.ts +20 -5
- package/dist/cjs/websocket_event.d.ts.map +1 -0
- package/dist/cjs/{src/websocket_event.js → websocket_event.js} +7 -1
- package/dist/cjs/websocket_event.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_options.d.ts +6 -5
- package/dist/cjs/websocket_options.d.ts.map +1 -0
- package/dist/cjs/websocket_options.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_retry_options.d.ts +3 -2
- package/dist/cjs/websocket_retry_options.d.ts.map +1 -0
- package/dist/cjs/websocket_retry_options.js.map +1 -0
- package/dist/esm/{src/backoff → backoff}/backoff.d.ts +6 -3
- package/dist/{cjs/src → esm}/backoff/backoff.d.ts.map +1 -1
- package/dist/{cjs/src → esm}/backoff/backoff.js.map +1 -1
- package/dist/esm/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
- package/dist/esm/backoff/constantbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/constantbackoff.js +3 -3
- package/dist/esm/backoff/constantbackoff.js.map +1 -0
- package/dist/{cjs/src → esm}/backoff/exponentialbackoff.d.ts +2 -2
- package/dist/esm/backoff/exponentialbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/exponentialbackoff.js +6 -5
- package/dist/esm/backoff/exponentialbackoff.js.map +1 -0
- package/dist/{cjs/src → esm}/backoff/linearbackoff.d.ts +1 -1
- package/dist/esm/backoff/linearbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/linearbackoff.js +8 -7
- package/dist/esm/backoff/linearbackoff.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/{cjs/src → esm}/queue/array_queue.d.ts +1 -1
- package/dist/esm/queue/array_queue.d.ts.map +1 -0
- package/dist/esm/queue/array_queue.js.map +1 -0
- package/dist/esm/queue/queue.d.ts.map +1 -0
- package/dist/esm/{src/queue → queue}/queue.js.map +1 -1
- package/dist/esm/{src/queue → queue}/ring_queue.d.ts +1 -1
- package/dist/esm/queue/ring_queue.d.ts.map +1 -0
- package/dist/esm/{src/queue → queue}/ring_queue.js +7 -3
- package/dist/esm/queue/ring_queue.js.map +1 -0
- package/dist/esm/{src/websocket.d.ts → websocket.d.ts} +75 -17
- package/dist/esm/websocket.d.ts.map +1 -0
- package/dist/esm/websocket.js +584 -0
- package/dist/esm/websocket.js.map +1 -0
- package/dist/esm/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
- package/dist/esm/websocket_buffer.d.ts.map +1 -0
- package/dist/esm/websocket_buffer.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_builder.d.ts +14 -5
- package/dist/esm/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
- package/dist/esm/{src/websocket_builder.js → websocket_builder.js} +36 -17
- package/dist/esm/websocket_builder.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_event.d.ts +20 -5
- package/dist/esm/websocket_event.d.ts.map +1 -0
- package/dist/esm/{src/websocket_event.js → websocket_event.js} +7 -1
- package/dist/esm/websocket_event.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_options.d.ts +6 -5
- package/dist/esm/websocket_options.d.ts.map +1 -0
- package/dist/esm/websocket_options.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_retry_options.d.ts +3 -2
- package/dist/esm/websocket_retry_options.d.ts.map +1 -0
- package/dist/esm/websocket_retry_options.js.map +1 -0
- package/package.json +35 -16
- package/src/backoff/backoff.ts +6 -3
- package/src/backoff/constantbackoff.ts +4 -4
- package/src/backoff/exponentialbackoff.ts +7 -6
- package/src/backoff/linearbackoff.ts +9 -8
- package/src/index.ts +14 -13
- package/src/queue/array_queue.ts +1 -1
- package/src/queue/ring_queue.ts +12 -8
- package/src/websocket.ts +333 -79
- package/src/websocket_buffer.ts +1 -3
- package/src/websocket_builder.ts +24 -13
- package/src/websocket_event.ts +25 -6
- package/src/websocket_options.ts +6 -5
- package/src/websocket_retry_options.ts +3 -2
- package/dist/cjs/src/backoff/constantbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/constantbackoff.js +0 -43
- package/dist/cjs/src/backoff/constantbackoff.js.map +0 -1
- package/dist/cjs/src/backoff/exponentialbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/exponentialbackoff.js.map +0 -1
- package/dist/cjs/src/backoff/linearbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/linearbackoff.js.map +0 -1
- package/dist/cjs/src/index.d.ts +0 -14
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js +0 -20
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/queue/array_queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/array_queue.js.map +0 -1
- package/dist/cjs/src/queue/queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/ring_queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/ring_queue.js.map +0 -1
- package/dist/cjs/src/websocket.d.ts.map +0 -1
- package/dist/cjs/src/websocket.js +0 -439
- package/dist/cjs/src/websocket.js.map +0 -1
- package/dist/cjs/src/websocket_buffer.d.ts.map +0 -1
- package/dist/cjs/src/websocket_buffer.js.map +0 -1
- package/dist/cjs/src/websocket_builder.js +0 -263
- package/dist/cjs/src/websocket_builder.js.map +0 -1
- package/dist/cjs/src/websocket_event.d.ts.map +0 -1
- package/dist/cjs/src/websocket_event.js.map +0 -1
- package/dist/cjs/src/websocket_options.d.ts.map +0 -1
- package/dist/cjs/src/websocket_options.js.map +0 -1
- package/dist/cjs/src/websocket_retry_options.d.ts.map +0 -1
- package/dist/cjs/src/websocket_retry_options.js.map +0 -1
- package/dist/esm/src/backoff/constantbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/constantbackoff.js.map +0 -1
- package/dist/esm/src/backoff/exponentialbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/exponentialbackoff.js.map +0 -1
- package/dist/esm/src/backoff/linearbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/linearbackoff.js.map +0 -1
- package/dist/esm/src/index.d.ts +0 -14
- package/dist/esm/src/index.d.ts.map +0 -1
- package/dist/esm/src/index.js +0 -9
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/queue/array_queue.d.ts.map +0 -1
- package/dist/esm/src/queue/array_queue.js.map +0 -1
- package/dist/esm/src/queue/queue.d.ts.map +0 -1
- package/dist/esm/src/queue/ring_queue.d.ts.map +0 -1
- package/dist/esm/src/queue/ring_queue.js.map +0 -1
- package/dist/esm/src/websocket.d.ts.map +0 -1
- package/dist/esm/src/websocket.js +0 -361
- package/dist/esm/src/websocket.js.map +0 -1
- package/dist/esm/src/websocket_buffer.d.ts.map +0 -1
- package/dist/esm/src/websocket_buffer.js.map +0 -1
- package/dist/esm/src/websocket_builder.js.map +0 -1
- package/dist/esm/src/websocket_event.d.ts.map +0 -1
- package/dist/esm/src/websocket_event.js.map +0 -1
- package/dist/esm/src/websocket_options.d.ts.map +0 -1
- package/dist/esm/src/websocket_options.js.map +0 -1
- package/dist/esm/src/websocket_retry_options.d.ts.map +0 -1
- package/dist/esm/src/websocket_retry_options.js.map +0 -1
- package/eslint.config.mjs +0 -43
- package/tsconfig.cjs.json +0 -74
- package/tsconfig.esm.json +0 -74
- /package/dist/cjs/{src/backoff → backoff}/backoff.js +0 -0
- /package/dist/cjs/{src/queue → queue}/queue.d.ts +0 -0
- /package/dist/cjs/{src/queue → queue}/queue.js +0 -0
- /package/dist/cjs/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
- /package/dist/cjs/{src/websocket_options.js → websocket_options.js} +0 -0
- /package/dist/cjs/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
- /package/dist/esm/{src/backoff → backoff}/backoff.js +0 -0
- /package/dist/esm/{src/queue → queue}/array_queue.js +0 -0
- /package/dist/esm/{src/queue → queue}/queue.d.ts +0 -0
- /package/dist/esm/{src/queue → queue}/queue.js +0 -0
- /package/dist/esm/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
- /package/dist/esm/{src/websocket_options.js → websocket_options.js} +0 -0
- /package/dist/esm/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Queue } from "./queue";
|
|
1
|
+
import { Queue } from "./queue.js";
|
|
2
2
|
/**
|
|
3
3
|
* A ring queue is a queue that has a fixed capacity. When the queue is full, the oldest element is
|
|
4
4
|
* removed to make room for the new element. Reading from a ring queue will return the oldest
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring_queue.d.ts","sourceRoot":"","sources":["../../../src/queue/ring_queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;gBAET,QAAQ,EAAE,MAAM;IAU5B,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;IASrB,KAAK;IAML,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO;IAUnC,MAAM,IAAI,MAAM;IAQhB,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,IAAI,IAAI,CAAC,GAAG,SAAS;CAStB"}
|
|
@@ -6,8 +6,8 @@ exports.RingQueue = void 0;
|
|
|
6
6
|
* removed to make room for the new element. Reading from a ring queue will return the oldest
|
|
7
7
|
* element and effectively remove it from the queue.
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
class RingQueue {
|
|
10
|
+
constructor(capacity) {
|
|
11
11
|
if (!Number.isInteger(capacity) || capacity <= 0) {
|
|
12
12
|
throw new Error("Capacity must be a positive integer");
|
|
13
13
|
}
|
|
@@ -15,43 +15,46 @@ var RingQueue = /** @class */ (function () {
|
|
|
15
15
|
this.head = 0;
|
|
16
16
|
this.tail = 0;
|
|
17
17
|
}
|
|
18
|
-
|
|
18
|
+
add(element) {
|
|
19
19
|
this.elements[this.head] = element;
|
|
20
20
|
this.head = (this.head + 1) % this.elements.length;
|
|
21
21
|
if (this.head === this.tail) {
|
|
22
|
+
this.elements[this.tail] = undefined; // drop the reference of the overwritten oldest element
|
|
22
23
|
this.tail = (this.tail + 1) % this.elements.length;
|
|
23
24
|
}
|
|
24
|
-
}
|
|
25
|
-
|
|
25
|
+
}
|
|
26
|
+
clear() {
|
|
27
|
+
this.elements.fill(undefined); // drop all references so elements can be garbage-collected
|
|
26
28
|
this.head = 0;
|
|
27
29
|
this.tail = 0;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
for (
|
|
30
|
+
}
|
|
31
|
+
forEach(fn) {
|
|
32
|
+
for (let i = this.tail; i !== this.head; i = (i + 1) % this.elements.length) {
|
|
31
33
|
fn(this.elements[i]);
|
|
32
34
|
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
+
}
|
|
36
|
+
length() {
|
|
35
37
|
return this.tail === this.head
|
|
36
38
|
? 0
|
|
37
39
|
: this.tail < this.head
|
|
38
40
|
? this.head - this.tail
|
|
39
41
|
: this.elements.length - this.tail + this.head;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
+
}
|
|
43
|
+
isEmpty() {
|
|
42
44
|
return this.head === this.tail;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
+
}
|
|
46
|
+
peek() {
|
|
45
47
|
return this.isEmpty() ? undefined : this.elements[this.tail];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
this.tail = (this.tail + 1) % this.elements.length;
|
|
48
|
+
}
|
|
49
|
+
read() {
|
|
50
|
+
if (this.isEmpty()) {
|
|
51
|
+
return undefined; // empty is determined by the indices, so stored 'undefined' elements read correctly
|
|
51
52
|
}
|
|
53
|
+
const e = this.elements[this.tail];
|
|
54
|
+
this.elements[this.tail] = undefined; // drop the reference so the element can be garbage-collected
|
|
55
|
+
this.tail = (this.tail + 1) % this.elements.length;
|
|
52
56
|
return e;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
}());
|
|
57
|
+
}
|
|
58
|
+
}
|
|
56
59
|
exports.RingQueue = RingQueue;
|
|
57
60
|
//# sourceMappingURL=ring_queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring_queue.js","sourceRoot":"","sources":["../../../src/queue/ring_queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import { Backoff } from "./backoff/backoff";
|
|
2
|
-
import { WebsocketBuffer } from "./websocket_buffer";
|
|
3
|
-
import { WebsocketEvent, WebsocketEventListener, WebsocketEventListenerOptions } from "./websocket_event";
|
|
4
|
-
import { WebsocketOptions } from "./websocket_options";
|
|
1
|
+
import { Backoff } from "./backoff/backoff.js";
|
|
2
|
+
import { WebsocketBuffer } from "./websocket_buffer.js";
|
|
3
|
+
import { WebsocketEvent, WebsocketEventListener, WebsocketEventListenerOptions } from "./websocket_event.js";
|
|
4
|
+
import { WebsocketOptions } from "./websocket_options.js";
|
|
5
5
|
/**
|
|
6
6
|
* A URL or a function that returns a URL. When a function is provided, it is called on each connection attempt,
|
|
7
7
|
* enabling use cases like load balancing, auth token rotation, and failover.
|
|
8
|
+
*
|
|
9
|
+
* The function is called without the websocket as `this` and should only resolve a URL. If, during a
|
|
10
|
+
* connection attempt after construction, it synchronously calls close() or reconnect() on the websocket, the
|
|
11
|
+
* attempt that called it is abandoned without creating a socket. It must not call reconnect() on every
|
|
12
|
+
* invocation, as that recurses indefinitely.
|
|
13
|
+
*
|
|
14
|
+
* If it throws during an automatic retry, that attempt fails with an 'error' event (an ErrorEvent whose
|
|
15
|
+
* 'error' is the thrown value) and retrying continues. During construction and reconnect(), the exception
|
|
16
|
+
* propagates to the caller instead.
|
|
8
17
|
*/
|
|
9
18
|
export type UrlProvider = string | (() => string);
|
|
10
19
|
/**
|
|
@@ -16,8 +25,11 @@ export declare class Websocket {
|
|
|
16
25
|
private readonly _protocols?;
|
|
17
26
|
private _closedByUser;
|
|
18
27
|
private _lastConnection?;
|
|
28
|
+
private _binaryType?;
|
|
19
29
|
private _underlyingWebsocket;
|
|
20
30
|
private retryTimeout?;
|
|
31
|
+
private _connectionGeneration;
|
|
32
|
+
private readonly abortHandlerCleanups;
|
|
21
33
|
private _options;
|
|
22
34
|
/**
|
|
23
35
|
* Creates a new websocket.
|
|
@@ -25,10 +37,14 @@ export declare class Websocket {
|
|
|
25
37
|
* @param url to connect to, or a function that returns a URL.
|
|
26
38
|
* @param protocols optional protocols to use.
|
|
27
39
|
* @param options optional options to use.
|
|
40
|
+
* @throws Error if retry options (maxRetries, instantReconnect) are set without a backoff.
|
|
41
|
+
* @throws Error if maxRetries is neither Infinity nor a non-negative integer.
|
|
28
42
|
*/
|
|
29
43
|
constructor(url: UrlProvider, protocols?: string | string[], options?: WebsocketOptions);
|
|
30
44
|
/**
|
|
31
|
-
* Getter for the url.
|
|
45
|
+
* Getter for the url of the most recently constructed underlying websocket. This is not
|
|
46
|
+
* necessarily the URL of the last successful connection, and a URL that the WebSocket
|
|
47
|
+
* constructor rejected, or whose connection attempt was superseded, is not recorded.
|
|
32
48
|
*
|
|
33
49
|
* @return the url.
|
|
34
50
|
*/
|
|
@@ -70,9 +86,9 @@ export declare class Websocket {
|
|
|
70
86
|
*/
|
|
71
87
|
get closedByUser(): boolean;
|
|
72
88
|
/**
|
|
73
|
-
* Getter for the last 'open' event, e.
|
|
89
|
+
* Getter for the time of the last 'open' event, i.e. the last time the websocket was connected.
|
|
74
90
|
*
|
|
75
|
-
* @return the last 'open' event, or undefined if the websocket was never connected.
|
|
91
|
+
* @return the time of the last 'open' event, or undefined if the websocket was never connected.
|
|
76
92
|
*/
|
|
77
93
|
get lastConnection(): Date | undefined;
|
|
78
94
|
/**
|
|
@@ -111,7 +127,8 @@ export declare class Websocket {
|
|
|
111
127
|
*/
|
|
112
128
|
get binaryType(): BinaryType;
|
|
113
129
|
/**
|
|
114
|
-
* Setter for the binaryType of the underlying websocket.
|
|
130
|
+
* Setter for the binaryType of the underlying websocket. The value is remembered
|
|
131
|
+
* and re-applied whenever a new underlying websocket is created after a reconnect.
|
|
115
132
|
*
|
|
116
133
|
* @param value to set, 'blob' or 'arraybuffer'.
|
|
117
134
|
*/
|
|
@@ -125,9 +142,10 @@ export declare class Websocket {
|
|
|
125
142
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send
|
|
126
143
|
* @param data to send.
|
|
127
144
|
*/
|
|
128
|
-
send(data: string |
|
|
145
|
+
send(data: string | Blob | BufferSource): void;
|
|
129
146
|
/**
|
|
130
|
-
* Close the websocket. No connection-retry will be attempted after this
|
|
147
|
+
* Close the websocket. No automatic connection-retry will be attempted after this,
|
|
148
|
+
* until reconnect() is called.
|
|
131
149
|
*
|
|
132
150
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close
|
|
133
151
|
* @param code optional close code.
|
|
@@ -135,7 +153,24 @@ export declare class Websocket {
|
|
|
135
153
|
*/
|
|
136
154
|
close(code?: number, reason?: string): void;
|
|
137
155
|
/**
|
|
138
|
-
*
|
|
156
|
+
* (Re-)connects the websocket immediately, regardless of its current state:
|
|
157
|
+
* any scheduled retry is cancelled, the backoff and its retry-counter are
|
|
158
|
+
* reset, the URL provider is resolved again and a new connection is opened.
|
|
159
|
+
* This also revives a websocket that was closed by the user or that gave up
|
|
160
|
+
* after exceeding maxRetries (see the 'exhausted' event).
|
|
161
|
+
*
|
|
162
|
+
* Typical uses: a "reconnect" button after the 'exhausted' event, reacting to
|
|
163
|
+
* the browser's 'online' event, or forcing the URL provider to pick up a new
|
|
164
|
+
* auth token without waiting for the connection to drop.
|
|
165
|
+
*
|
|
166
|
+
* @throws whatever the URL provider or the WebSocket constructor throws.
|
|
167
|
+
*/
|
|
168
|
+
reconnect(): void;
|
|
169
|
+
/**
|
|
170
|
+
* Adds an event listener for the given event-type. When an AbortSignal is
|
|
171
|
+
* provided in the options, aborting it removes exactly this registration;
|
|
172
|
+
* a listener whose signal is already aborted is never registered, mirroring
|
|
173
|
+
* the native EventTarget.
|
|
139
174
|
*
|
|
140
175
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
|
|
141
176
|
* @param type of the event to add the listener for.
|
|
@@ -144,18 +179,21 @@ export declare class Websocket {
|
|
|
144
179
|
*/
|
|
145
180
|
addEventListener<K extends WebsocketEvent>(type: K, listener: WebsocketEventListener<K>, options?: WebsocketEventListenerOptions): void;
|
|
146
181
|
/**
|
|
147
|
-
* Removes
|
|
182
|
+
* Removes all event listeners for the given event-type that match the given listener.
|
|
183
|
+
*
|
|
184
|
+
* Matching is done by listener identity only, mirroring the native EventTarget:
|
|
185
|
+
* the options a listener was added with are ignored when matching.
|
|
148
186
|
*
|
|
149
187
|
* @param type of the event to remove the listener for.
|
|
150
188
|
* @param listener to remove.
|
|
151
|
-
* @param options
|
|
189
|
+
* @param options ignored when matching, present for backward compatibility.
|
|
152
190
|
*/
|
|
153
191
|
removeEventListener<K extends WebsocketEvent>(type: K, listener: WebsocketEventListener<K>, options?: WebsocketEventListenerOptions): void;
|
|
154
192
|
/**
|
|
155
193
|
* Creates a new browser-native websocket and connects it to the given URL with the given protocols
|
|
156
|
-
* and adds all event listeners to the browser-native websocket.
|
|
157
|
-
*
|
|
158
|
-
*
|
|
194
|
+
* and adds all event listeners to the browser-native websocket. The new websocket is stored in the
|
|
195
|
+
* '_underlyingWebsocket' property, unless the URL provider superseded this attempt by calling close()
|
|
196
|
+
* or reconnect().
|
|
159
197
|
*/
|
|
160
198
|
private tryConnect;
|
|
161
199
|
/**
|
|
@@ -189,6 +227,16 @@ export declare class Websocket {
|
|
|
189
227
|
* @param event to dispatch.
|
|
190
228
|
*/
|
|
191
229
|
private dispatchEvent;
|
|
230
|
+
/**
|
|
231
|
+
* Reports an exception thrown by a user-provided event listener. Uses
|
|
232
|
+
* globalThis.reportError where available (browsers); otherwise the exception
|
|
233
|
+
* is rethrown asynchronously so it still reaches the runtime's global
|
|
234
|
+
* error handling (e.g. 'uncaughtException' in Node.js) without breaking
|
|
235
|
+
* the dispatch it escaped from.
|
|
236
|
+
*
|
|
237
|
+
* @param error the exception thrown by the listener.
|
|
238
|
+
*/
|
|
239
|
+
private reportListenerError;
|
|
192
240
|
/**
|
|
193
241
|
* Handles the given event by dispatching it to all listeners of the given event-type.
|
|
194
242
|
*
|
|
@@ -197,7 +245,10 @@ export declare class Websocket {
|
|
|
197
245
|
*/
|
|
198
246
|
private handleEvent;
|
|
199
247
|
/**
|
|
200
|
-
* Sends buffered data if there is a buffer defined.
|
|
248
|
+
* Sends buffered data if there is a buffer defined. Draining stops as soon as the
|
|
249
|
+
* websocket is no longer open, e.g. when a listener closed it during the drain;
|
|
250
|
+
* remaining elements stay buffered for the next successful connection. Without
|
|
251
|
+
* this guard, send() would re-add each read element to the buffer, cycling forever.
|
|
201
252
|
*/
|
|
202
253
|
private sendBufferedData;
|
|
203
254
|
/**
|
|
@@ -208,5 +259,12 @@ export declare class Websocket {
|
|
|
208
259
|
* Cancels the scheduled connection-retry, if there is one.
|
|
209
260
|
*/
|
|
210
261
|
private cancelScheduledConnectionRetry;
|
|
262
|
+
/**
|
|
263
|
+
* Unhooks the 'abort'-handler that was registered on the AbortSignal of the
|
|
264
|
+
* given listener-registration, if there is one.
|
|
265
|
+
*
|
|
266
|
+
* @param entry the listener-registration to unhook the abort-handler for.
|
|
267
|
+
*/
|
|
268
|
+
private cleanupAbortHandler;
|
|
211
269
|
}
|
|
212
270
|
//# sourceMappingURL=websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/websocket.ts"],"names":[],"mappings":"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"}
|