qws-browser 2.0.0 → 2.1.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 CHANGED
@@ -9,9 +9,28 @@ Safe queueing with auto-reconnect for WebSockets
9
9
  - Automatic two-way acknowledgment stream of messages - all messages are retained in-memory until acknowledgment is provided
10
10
  - Configurable headers per message, even when body is binary
11
11
  - Simple message routing (via [route-recognizer](https://github.com/tildeio/route-recognizer))
12
+ - Heartbeats detecting dead connections
13
+ - Waiting for the acknowledgment of a given message
12
14
 
13
15
  Since version 2, `qws-browser` is an ES module only (no CommonJS build), meant to be consumed via a bundler such as Vite.
14
16
 
17
+ # Heartbeats
18
+
19
+ Every `heartbeatIntervalMillis` (default 25s, `0` disables), a connection sends a heartbeat. If nothing arrives, not even the answer, until the next one, the connection is considered dead and is terminated, which triggers the usual close/reconnect logic. This catches connections that died silently (sleeping devices, network switches), on which no close event would arrive for minutes.
20
+
21
+ - Node uses protocol-level pings, which every WebSocket peer (including browsers) answers.
22
+ - Browsers can't send protocol-level pings, so they send qws `ping` messages, answered with `pong` by qws 2.1+ peers. Until the first `pong` arrives on a connection, a missing answer is not treated as a dead connection, so older servers keep working.
23
+ - `QWebSocketServer` takes the options of the connections it creates as second argument: `new QWebSocketServer({ port }, { heartbeatIntervalMillis: 10_000 })`.
24
+
25
+ # Waiting for acknowledgment
26
+
27
+ `send`/`sendToRoute` return the message index. `waitForAck(idx)` resolves once the other side acknowledged that message (after its handler finished), and rejects if the connection closes for good before that. Reconnecting connections keep and resend unacknowledged messages, so they don't reject on a reconnect.
28
+
29
+ ```ts
30
+ const idx = qws.sendToRoute('handout', message);
31
+ await qws.waitForAck(idx);
32
+ ```
33
+
15
34
  # Examples
16
35
 
17
36
  TODO
@@ -1 +1 @@
1
- {"version":3,"file":"messageencode.d.ts","sourceRoot":"","sources":["../../src/browser/messageencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAoC,MAAM,sBAAsB,CAAC;AAwBpF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAgC1D"}
1
+ {"version":3,"file":"messageencode.d.ts","sourceRoot":"","sources":["../../src/browser/messageencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAoC,MAAM,sBAAsB,CAAC;AAwBpF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAkC1D"}
@@ -90,7 +90,9 @@ export function serializeMessage(message) {
90
90
  }
91
91
  case 'ready':
92
92
  case 'ack':
93
- case 'err': {
93
+ case 'err':
94
+ case 'ping':
95
+ case 'pong': {
94
96
  // no body
95
97
  break;
96
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"messageencode.js","sourceRoot":"","sources":["../../src/browser/messageencode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageencode.js","sourceRoot":"","sources":["../../src/browser/messageencode.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { QwsMessage, AckQwsMessage, BinaryQwsMessage, ErrorQwsMessage, JsonQwsMessage, ReadyQwsMessage } from '../common/message.js';
1
+ import { QwsMessage, AckQwsMessage, BinaryQwsMessage, ErrorQwsMessage, HeartbeatQwsMessage, JsonQwsMessage, ReadyQwsMessage } from '../common/message.js';
2
2
  import { Binary } from '../common/discriminator.js';
3
3
  /**
4
4
  * Wrapper around WebSocket, built to serialize/deserialize
@@ -12,8 +12,17 @@ export default class WrappedWebSocket {
12
12
  ready?: (message: ReadyQwsMessage) => void;
13
13
  ack?: (message: AckQwsMessage) => void;
14
14
  err?: (message: ErrorQwsMessage) => void;
15
+ ping?: (message: HeartbeatQwsMessage) => void;
16
+ pong?: (message: HeartbeatQwsMessage) => void;
15
17
  };
18
+ /**
19
+ * Time of the last message or heartbeat answer received, to detect dead connections
20
+ */
21
+ lastActivity: number;
22
+ private closeCallbacks;
23
+ private closed;
16
24
  constructor(wsOrUrl: WebSocket | string);
25
+ private fireClose;
17
26
  /**
18
27
  * Proxy callbacks
19
28
  */
@@ -33,11 +42,24 @@ export default class WrappedWebSocket {
33
42
  onReady(callback: (message: ReadyQwsMessage) => void): void;
34
43
  onAck(callback: (message: AckQwsMessage) => void): void;
35
44
  onErr(callback: (message: ErrorQwsMessage) => void): void;
45
+ onPing(callback: (message: HeartbeatQwsMessage) => void): void;
46
+ onPong(callback: (message: HeartbeatQwsMessage) => void): void;
36
47
  /**
37
48
  * Proxy methods
38
49
  */
39
50
  send(message: QwsMessage): void;
40
51
  sendRaw(data: Binary): void;
41
52
  close(): void;
53
+ /**
54
+ * Browsers can't send protocol-level pings, so heartbeats are qws ping messages,
55
+ * answered only by peers that know them (qws 2.1+)
56
+ */
57
+ readonly heartbeatAnsweredByProtocol = false;
58
+ sendHeartbeat(): void;
59
+ /**
60
+ * Give up on the connection right away: on a dead connection the closing handshake
61
+ * can take minutes before the close event fires
62
+ */
63
+ terminate(): void;
42
64
  }
43
65
  //# sourceMappingURL=wrappedws.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrappedws.d.ts","sourceRoot":"","sources":["../../src/browser/wrappedws.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,EAAE,EAAE,SAAS,CAAC;IAEd,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;QACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;QAC3C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;QACvC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;KAC1C,CAAC;gBAEU,OAAO,EAAE,SAAS,GAAG,MAAM;IAmBvC;;OAEG;IAEH,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIrC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAIjD;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IAEH,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAI1D,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAIzD,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAI3D,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAIvD,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAIzD;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAM/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"wrappedws.d.ts","sourceRoot":"","sources":["../../src/browser/wrappedws.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,EAAE,EAAE,SAAS,CAAC;IAEd,SAAS,EAAE;QACT,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;QAC1C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;QACzC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;QAC3C,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;QACvC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;KAC/C,CAAC;IAEF;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,EAAE,SAAS,GAAG,MAAM;IAgCvC,OAAO,CAAC,SAAS;IAUjB;;OAEG;IAEH,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIpC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIrC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAIjD;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IAEH,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAI1D,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI;IAIzD,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAI3D,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAIvD,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAIzD,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAI9D,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI;IAI9D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAM/B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,KAAK,IAAI,IAAI;IAIb;;;OAGG;IACH,QAAQ,CAAC,2BAA2B,SAAS;IAE7C,aAAa,IAAI,IAAI;IAIrB;;;OAGG;IACH,SAAS,IAAI,IAAI;CAIlB"}
@@ -6,7 +6,15 @@ import { deserializeMessage, serializeMessage } from './messageencode.js';
6
6
  */
7
7
  export default class WrappedWebSocket {
8
8
  constructor(wsOrUrl) {
9
+ /**
10
+ * Browsers can't send protocol-level pings, so heartbeats are qws ping messages,
11
+ * answered only by peers that know them (qws 2.1+)
12
+ */
13
+ this.heartbeatAnsweredByProtocol = false;
9
14
  this.callbacks = {};
15
+ this.lastActivity = Date.now();
16
+ this.closeCallbacks = [];
17
+ this.closed = false;
10
18
  if (wsOrUrl instanceof WebSocket || wsOrUrl?.constructor?.name === 'WebSocket') {
11
19
  this.ws = wsOrUrl;
12
20
  }
@@ -14,13 +22,31 @@ export default class WrappedWebSocket {
14
22
  this.ws = new WebSocket(wsOrUrl);
15
23
  }
16
24
  this.ws.addEventListener('message', async (event) => {
25
+ // terminated sockets may still deliver, those messages belong to a connection we gave up on
26
+ if (this.closed) {
27
+ return;
28
+ }
29
+ this.lastActivity = Date.now();
17
30
  const message = await deserializeMessage(event.data);
18
31
  // logger.info('WRAPPER received', message);
19
32
  const callback = this.callbacks[message.headers.type];
20
33
  callback?.(message);
21
34
  });
35
+ this.ws.addEventListener('close', () => {
36
+ this.fireClose();
37
+ });
22
38
  autoBind(this);
23
39
  }
40
+ // close callbacks fire once, either on the close event or on terminate()
41
+ fireClose() {
42
+ if (this.closed) {
43
+ return;
44
+ }
45
+ this.closed = true;
46
+ for (const callback of this.closeCallbacks) {
47
+ callback();
48
+ }
49
+ }
24
50
  /**
25
51
  * Proxy callbacks
26
52
  */
@@ -28,7 +54,7 @@ export default class WrappedWebSocket {
28
54
  this.ws.addEventListener('open', callback);
29
55
  }
30
56
  onWsClose(callback) {
31
- this.ws.addEventListener('close', callback);
57
+ this.closeCallbacks.push(callback);
32
58
  }
33
59
  onWsError(callback) {
34
60
  this.ws.addEventListener('error', callback);
@@ -60,6 +86,12 @@ export default class WrappedWebSocket {
60
86
  onErr(callback) {
61
87
  this.callbacks.err = callback;
62
88
  }
89
+ onPing(callback) {
90
+ this.callbacks.ping = callback;
91
+ }
92
+ onPong(callback) {
93
+ this.callbacks.pong = callback;
94
+ }
63
95
  /**
64
96
  * Proxy methods
65
97
  */
@@ -75,5 +107,16 @@ export default class WrappedWebSocket {
75
107
  close() {
76
108
  this.ws.close();
77
109
  }
110
+ sendHeartbeat() {
111
+ this.send({ headers: { type: 'ping' } });
112
+ }
113
+ /**
114
+ * Give up on the connection right away: on a dead connection the closing handshake
115
+ * can take minutes before the close event fires
116
+ */
117
+ terminate() {
118
+ this.ws.close(4000, 'Heartbeat timeout');
119
+ this.fireClose();
120
+ }
78
121
  }
79
122
  //# sourceMappingURL=wrappedws.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrappedws.js","sourceRoot":"","sources":["../../src/browser/wrappedws.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AASjC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG1E;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAWnC,YAAY,OAA2B;QACrC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,OAAO,YAAY,SAAS,IAAI,OAAO,EAAE,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/E,IAAI,CAAC,EAAE,GAAG,OAAoB,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,KAA2B,EAAE,EAAE;YACxE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,4CAA4C;YAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAA8B,CAAC;YACnF,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAED;;OAEG;IAEH,QAAQ,CAAC,QAAoB;QAC3B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,CAAC,QAAgC;QACxC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;IAC5B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;IAChC,CAAC;IAED;;OAEG;IAEH,KAAK,CAAC,QAA6C;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,QAA2C;QAChD,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,QAA4C;QAClD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAA0C;QAC9C,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAA4C;QAChD,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAmB;QACtB,2CAA2C;QAC3C,MAAM,IAAI,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,oDAAoD;QACpD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"wrappedws.js","sourceRoot":"","sources":["../../src/browser/wrappedws.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,10 @@ import { Binary } from './discriminator.js';
12
12
  * 'ready' - ready message sent after connection and setup
13
13
  * 'ack' - acknowledgment message for a payload message received from other side
14
14
  * 'err' - error
15
+ * 'ping' - heartbeat request, answered by a 'pong' from the other side
16
+ * 'pong' - heartbeat answer
15
17
  */
16
- export type QwsMessageType = 'bin' | 'json' | 'ready' | 'ack' | 'err';
18
+ export type QwsMessageType = 'bin' | 'json' | 'ready' | 'ack' | 'err' | 'ping' | 'pong';
17
19
  /**
18
20
  * Headers are sent in base64(json) format.
19
21
  */
@@ -106,10 +108,21 @@ export type ErrorQwsMessageHeaders = {
106
108
  export type ErrorQwsMessage = {
107
109
  headers: ErrorQwsMessageHeaders;
108
110
  };
111
+ /**
112
+ * Heartbeat messages
113
+ * Used where protocol-level pings are not available (the browser).
114
+ * Peers that don't know these types ignore them.
115
+ */
116
+ export type HeartbeatQwsMessageHeaders = {
117
+ type: 'ping' | 'pong';
118
+ };
119
+ export type HeartbeatQwsMessage = {
120
+ headers: HeartbeatQwsMessageHeaders;
121
+ };
109
122
  /**
110
123
  * Common names for WSQ message
111
124
  */
112
125
  export type PayloadQwsMessage = BinaryQwsMessage | JsonQwsMessage;
113
- export type QwsMessage = BinaryQwsMessage | JsonQwsMessage | ReadyQwsMessage | AckQwsMessage | ErrorQwsMessage;
114
- export type QwsMessageHeader = BinaryQwsMessageHeaders | JsonQwsMessageHeaders | ReadyQwsMessageHeaders | AckQwsMessageHeaders | ErrorQwsMessageHeaders;
126
+ export type QwsMessage = BinaryQwsMessage | JsonQwsMessage | ReadyQwsMessage | AckQwsMessage | ErrorQwsMessage | HeartbeatQwsMessage;
127
+ export type QwsMessageHeader = BinaryQwsMessageHeaders | JsonQwsMessageHeaders | ReadyQwsMessageHeaders | AckQwsMessageHeaders | ErrorQwsMessageHeaders | HeartbeatQwsMessageHeaders;
115
128
  //# sourceMappingURL=message.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/common/message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtE;;GAEG;AAEH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7D;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D,IAAI,EAAE,KAAK,CAAC;IACZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AAEH,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GAAG;IAC5D,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,eAAe,CAAC;AAC/G,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,CAAC"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/common/message.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAExF;;GAEG;AAEH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE7D;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,GAAG;IAC7D,IAAI,EAAE,KAAK,CAAC;IACZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,uBAAuB,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AAEH,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GAAG;IAC5D,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,oBAAoB,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAAC;AAEF;;;;GAIG;AAEH,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,0BAA0B,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAClE,MAAM,MAAM,UAAU,GACpB,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAC9G,MAAM,MAAM,gBAAgB,GACxB,uBAAuB,GACvB,qBAAqB,GACrB,sBAAsB,GACtB,oBAAoB,GACpB,sBAAsB,GACtB,0BAA0B,CAAC"}
@@ -13,12 +13,17 @@ export type ReadyCallback = (headers?: ReadyQwsMessageHeaders) => void | Promise
13
13
  /**
14
14
  * Connection options
15
15
  */
16
- type QWebSocketOptions = {
16
+ export type QWebSocketOptions = {
17
17
  name?: string;
18
18
  extraConnectArgs?: Record<string, unknown>;
19
19
  reconnect?: boolean;
20
20
  reconnectNumTries?: number;
21
21
  reconnectIntervalMillis?: number;
22
+ /**
23
+ * Interval of heartbeats detecting dead connections, 0 disables them.
24
+ * A connection is terminated if nothing arrives during a whole interval after a heartbeat.
25
+ */
26
+ heartbeatIntervalMillis?: number;
22
27
  };
23
28
  /**
24
29
  * Actual queued WebSocket
@@ -32,6 +37,14 @@ export default class QWebSocket {
32
37
  needed: boolean;
33
38
  wws: WrappedWebSocket;
34
39
  ready: boolean;
40
+ closed: boolean;
41
+ heartbeatTimer?: ReturnType<typeof setInterval>;
42
+ heartbeatSentAt: number;
43
+ heartbeatConfirmed: boolean;
44
+ pendingAcks: Map<number, {
45
+ resolve: () => void;
46
+ reject: (error: Error) => void;
47
+ }>;
35
48
  callbacks: {
36
49
  onConnect?: ConnectCallback;
37
50
  onBin: RouteRecognizer;
@@ -58,6 +71,22 @@ export default class QWebSocket {
58
71
  * Main logic
59
72
  */
60
73
  setUp(): void;
74
+ /**
75
+ * Heartbeat: if nothing (not even its answer) arrived since the previous heartbeat,
76
+ * the connection is dead and is terminated, which triggers the usual close/reconnect logic.
77
+ * Checking per tick instead of measuring time since the last message
78
+ * tolerates throttled timers in background browser tabs.
79
+ */
80
+ private startHeartbeat;
81
+ private stopHeartbeat;
82
+ /**
83
+ * Resolves once the other side acknowledged the message with the given index (returned by send/sendToRoute).
84
+ * Rejects if the connection is closed for good before that.
85
+ * Reconnecting connections keep and resend their unacknowledged messages, so they don't reject on reconnect.
86
+ */
87
+ waitForAck(idx: number): Promise<void>;
88
+ private acknowledge;
89
+ private rejectPendingAcks;
61
90
  flush(): void;
62
91
  send(body: Binary | Record<string, unknown>, extraHeaders?: QwsMessageExtraHeaders): number;
63
92
  sendToRoute(route: string | undefined, body: Binary | Record<string, unknown>, extraHeaders?: QwsMessageExtraHeaders): number;
@@ -67,5 +96,4 @@ export default class QWebSocket {
67
96
  */
68
97
  close(): Promise<void>;
69
98
  }
70
- export {};
71
99
  //# sourceMappingURL=queuews.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queuews.d.ts","sourceRoot":"","sources":["../../src/common/queuews.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queuews.d.ts","sourceRoot":"","sources":["../../src/common/queuews.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ const defaultOpts = {
18
18
  reconnect: true,
19
19
  reconnectNumTries: 12,
20
20
  reconnectIntervalMillis: 5000,
21
+ heartbeatIntervalMillis: 25_000,
21
22
  };
22
23
  /**
23
24
  * Actual queued WebSocket
@@ -38,6 +39,10 @@ export default class QWebSocket {
38
39
  this.reconnectionAttempts = 0;
39
40
  this.needed = true;
40
41
  this.ready = false;
42
+ this.closed = false;
43
+ this.heartbeatSentAt = 0;
44
+ this.heartbeatConfirmed = false;
45
+ this.pendingAcks = new Map();
41
46
  autoBind(this);
42
47
  this.setUp();
43
48
  }
@@ -85,6 +90,7 @@ export default class QWebSocket {
85
90
  if (reconnect && this.reconnectionAttempts > reconnectNumTries) {
86
91
  logger.error(`${this.name}: Connection timed out, should re-connect entirely`);
87
92
  void this.callbacks.onError?.(`WS connection timeout, max tries (${reconnectNumTries}) exceeded`);
93
+ this.rejectPendingAcks();
88
94
  return;
89
95
  }
90
96
  /**
@@ -102,6 +108,13 @@ export default class QWebSocket {
102
108
  });
103
109
  this.wws = new WrappedWebSocket(connectUrl);
104
110
  }
111
+ this.wws.onPing(() => {
112
+ this.wws.send({ headers: { type: 'pong' } });
113
+ });
114
+ this.wws.onPong(() => {
115
+ // peer knows qws heartbeats, missing answers may now be treated as a dead connection
116
+ this.heartbeatConfirmed = true;
117
+ });
105
118
  this.wws.onWsError(async (event) => {
106
119
  // ws error will prompt reconnection which can time out, don't reject instantly
107
120
  const message = decodeErrorMessage(event);
@@ -115,6 +128,7 @@ export default class QWebSocket {
115
128
  });
116
129
  this.wws.onWsOpen(async () => {
117
130
  this.reconnectionAttempts = 0;
131
+ this.startHeartbeat();
118
132
  logger.info(reconnect
119
133
  ? `${this.name}: Connection established after ${this.reconnectionAttempts} tries`
120
134
  : `${this.name}: Connection established`);
@@ -145,7 +159,7 @@ export default class QWebSocket {
145
159
  logger.info(`${this.name}: Socket ready to send${readyIdx ? `from chunk ${readyIdx}` : ''}`);
146
160
  // if server sent chunk index to resume from, move queue cursors appropriately
147
161
  if (readyIdx !== undefined) {
148
- this.queue.acknowledge(readyIdx - 1);
162
+ this.acknowledge(readyIdx - 1);
149
163
  this.queue.revert(readyIdx);
150
164
  }
151
165
  this.ready = true;
@@ -227,7 +241,7 @@ export default class QWebSocket {
227
241
  });
228
242
  this.wws.onAck((message) => {
229
243
  // acknowledgment received
230
- this.queue.acknowledge(message.headers.ackIdx);
244
+ this.acknowledge(message.headers.ackIdx);
231
245
  if (!this.queue.numUnackMessages && !this.needed) {
232
246
  this.wws.close();
233
247
  }
@@ -238,6 +252,7 @@ export default class QWebSocket {
238
252
  await this.callbacks.onError?.(message.headers.error);
239
253
  });
240
254
  this.wws.onWsClose(async () => {
255
+ this.stopHeartbeat();
241
256
  if (reconnect && this.needed) {
242
257
  // if locally closed, needed should be false
243
258
  // if it's true, it means we lost the connection and should try to re-connect
@@ -256,14 +271,82 @@ export default class QWebSocket {
256
271
  logger.info(`${this.name}: Closed with messages still in queue`);
257
272
  await this.callbacks.onError?.('Closed with messages still in queue');
258
273
  await this.callbacks.onClose?.();
274
+ this.rejectPendingAcks();
259
275
  }
260
276
  else {
261
277
  // all is well
262
278
  logger.info(`${this.name}: Closed correctly`);
263
279
  await this.callbacks.onClose?.();
280
+ this.rejectPendingAcks();
264
281
  }
265
282
  });
266
283
  }
284
+ /**
285
+ * Heartbeat: if nothing (not even its answer) arrived since the previous heartbeat,
286
+ * the connection is dead and is terminated, which triggers the usual close/reconnect logic.
287
+ * Checking per tick instead of measuring time since the last message
288
+ * tolerates throttled timers in background browser tabs.
289
+ */
290
+ startHeartbeat() {
291
+ this.stopHeartbeat();
292
+ const { heartbeatIntervalMillis } = this.options;
293
+ if (!heartbeatIntervalMillis) {
294
+ return;
295
+ }
296
+ const { wws } = this;
297
+ this.heartbeatConfirmed = wws.heartbeatAnsweredByProtocol;
298
+ this.heartbeatSentAt = 0;
299
+ this.heartbeatTimer = setInterval(() => {
300
+ if (wws.readyState !== WebSocket.OPEN) {
301
+ return;
302
+ }
303
+ if (this.heartbeatConfirmed && this.heartbeatSentAt && wws.lastActivity < this.heartbeatSentAt) {
304
+ logger.warn(`${this.name}: No answer to heartbeat in ${heartbeatIntervalMillis}ms, terminating connection`);
305
+ this.stopHeartbeat();
306
+ wws.terminate();
307
+ return;
308
+ }
309
+ this.heartbeatSentAt = Date.now();
310
+ wws.sendHeartbeat();
311
+ }, heartbeatIntervalMillis);
312
+ }
313
+ stopHeartbeat() {
314
+ clearInterval(this.heartbeatTimer);
315
+ this.heartbeatTimer = undefined;
316
+ }
317
+ /**
318
+ * Resolves once the other side acknowledged the message with the given index (returned by send/sendToRoute).
319
+ * Rejects if the connection is closed for good before that.
320
+ * Reconnecting connections keep and resend their unacknowledged messages, so they don't reject on reconnect.
321
+ */
322
+ waitForAck(idx) {
323
+ if (idx < this.queue.ackIdx) {
324
+ return Promise.resolve();
325
+ }
326
+ if (this.closed) {
327
+ return Promise.reject(new Error(`${this.name}: Connection closed, message ${idx} will not be acknowledged`));
328
+ }
329
+ return new Promise((resolve, reject) => {
330
+ this.pendingAcks.set(idx, { resolve, reject });
331
+ });
332
+ }
333
+ acknowledge(idx) {
334
+ this.queue.acknowledge(idx);
335
+ for (const [pendingIdx, { resolve }] of this.pendingAcks) {
336
+ if (pendingIdx > idx) {
337
+ continue;
338
+ }
339
+ this.pendingAcks.delete(pendingIdx);
340
+ resolve();
341
+ }
342
+ }
343
+ rejectPendingAcks() {
344
+ this.closed = true;
345
+ for (const [idx, { reject }] of this.pendingAcks) {
346
+ reject(new Error(`${this.name}: Connection closed, message ${idx} will not be acknowledged`));
347
+ }
348
+ this.pendingAcks.clear();
349
+ }
267
350
  flush() {
268
351
  // connection is not open
269
352
  if (this.wws.readyState !== WebSocket.OPEN || !this.ready) {
@@ -1 +1 @@
1
- {"version":3,"file":"queuews.js","sourceRoot":"","sources":["../../src/common/queuews.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,eAAe,MAAM,aAAa,CAAC;AAe1C,OAAO,qBAAqB,MAAM,YAAY,CAAC;AAC/C,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAU,EAAE;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAyB,CAAC;IAC1D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,oDAAoD;IACpD,gEAAgE;IAChE,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;AACjD,CAAC,CAAC;AAsBF,MAAM,WAAW,GAA+B;IAC9C,gBAAgB,EAAE,EAAE;IACpB,SAAS,EAAE,IAAI;IACf,iBAAiB,EAAE,EAAE;IACrB,uBAAuB,EAAE,IAAI;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAqB7B,YAAY,OAA2B,EAAE,UAA6B,EAAE;QACtE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,WAAW;YACd,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG;YACf,KAAK,EAAE,IAAI,eAAe,EAAE;YAC5B,MAAM,EAAE,IAAI,eAAe,EAAE;SAC9B,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED;;OAEG;IAEH,SAAS,CAAC,QAAyB;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,QAAqB;QACpD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,QAAqB;QACzB,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAI,YAAoB,EAAE,QAAyB;QAC5D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAI,QAAyB;QACjC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,QAAuB;QAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,qBAAqB,CAAC,QAAoB;QACxC,IAAI,CAAC,SAAS,CAAC,qBAAqB,GAAG,QAAQ,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,QAAmC;QACzC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,QAAoB;QAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED;;OAEG;IAEH,kDAAkD;IAClD,KAAK;QACH,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAEjG,6CAA6C;QAC7C,IAAI,SAAS,IAAI,IAAI,CAAC,oBAAoB,GAAG,iBAAkB,EAAE,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,oDAAoD,CAAC,CAAC;YAC/E,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,qCAAqC,iBAAiB,YAAY,CAAC,CAAC;YAClG,OAAO;QACT,CAAC;QAED;;WAEG;QACH,IAAI,IAAI,CAAC,OAAO,YAAY,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YACzF,MAAM,EAAE,GAAG,IAAI,CAAC,OAAoB,CAAC;YACrC,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACpC,+FAA+F;QACjG,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE;gBACnD,GAAG,gBAAgB;gBACnB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjC,+EAA+E;YAC/E,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,wBAAwB,OAAO,EAAE,CAAC,CAAC;YAE5D,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,OAAO,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CACT,SAAS;gBACP,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,kCAAkC,IAAI,CAAC,oBAAoB,QAAQ;gBACjF,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,0BAA0B,CAC3C,CAAC;YAEF,IAAI,CAAC;gBACH,oEAAoE;gBACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;gBAEpD,0BAA0B;gBAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,OAAO;wBACb,QAAQ;qBACT;iBACiB,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wFAAwF;gBACxF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;YAClD,kDAAkD;YAClD,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,yBAAyB,QAAQ,CAAC,CAAC,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7F,8EAA8E;YAC9E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,wCAAwC;YACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,IAAI,CAAC;gBACH,yBAAyB;gBACzB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wFAAwF;gBACxF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAyB,EAAE,EAAE;YACjD,0BAA0B;YAC1B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAElC,IAAI,CAAC;gBACH,iBAAiB;gBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACzE,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAsB,CAAC;oBAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;oBACzC,MAAM,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,OAAO,CAAC,GAAG;qBACpB;iBACe,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8DAA8D;gBAC9D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAuB,EAAE,EAAE;YAChD,0BAA0B;YAC1B,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAElC,IAAI,CAAC;gBACH,iBAAiB;gBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC1E,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,OAAO,GAAG,KAAK,CAAC,OAAgC,CAAC;oBACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAC;oBACzC,MAAM,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,OAAO,CAAC,GAAG;qBACpB;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4DAA4D;gBAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK;wBACX,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;qBACjC;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAsB,EAAE,EAAE;YACxC,0BAA0B;YAC1B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;YAChD,eAAe;YACf,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,qBAAqB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACvE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,4CAA4C;gBAC5C,6EAA6E;gBAC7E,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,oDAAoD,uBAAuB,OAAO,CAAC,CAAC;gBAC5G,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,qBAAqB,CAAC,CAAC;YACtE,CAAC;iBAAM,IAAI,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACpD,sEAAsE;gBACtE,MAAM,CAAC,IAAI,CACT,GAAG,IAAI,CAAC,IAAI,0DAA0D,uBAAuB,OAAO,CACrG,CAAC;gBACF,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC,qCAAqC,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBACvC,2EAA2E;gBAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,uCAAuC,CAAC,CAAC;gBACjE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,qCAAqC,CAAC,CAAC;gBACtE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,cAAc;gBACd,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,yBAAyB;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACjC,gBAAgB;YAChB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,mBAAmB,GAAG,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,IAAI,0BAA0B,IAAI,CAAC,KAAK,CAAC,iBAAiB,eAAe,IAAI,CAAC,KAAK,CAAC,cAAc,QAAQ,CACnH,CAAC;YACF,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,+CAA+C,CAAC,CAAC;YAC1E,8CAA8C;YAC9C,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAsC,EAAE,eAAuC,EAAE;QACpF,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CACT,KAAyB,EACzB,IAAsC,EACtC,eAAuC,EAAE;QAEzC,iDAAiD;QACjD,IAAI,OAA0B,CAAC;QAE/B,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;YACzB,OAAO,GAAG;gBACR,OAAO,EAAE;oBACP,IAAI,EAAE,KAAK;oBACX,KAAK;oBACL,GAAG,YAAY;iBAChB;gBACD,IAAI;aACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,GAAG;gBACR,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,KAAK;oBACL,GAAG,YAAY;iBAChB;gBACD,IAAI;aACa,CAAC;QACtB,CAAC;QAED,4BAA4B;QAC5B,MAAM,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAExC,mFAAmF;QACnF,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC/E,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,gDAAgD;YAChD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;gBAClC,MAAM,OAAO,EAAE,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,iCAAiC;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"queuews.js","sourceRoot":"","sources":["../../src/common/queuews.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qws-browser",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "description": "Safe queueing with auto-reconnect for WebSockets",
6
6
  "author": "Csaba Sulyok <csaba.sulyok@gmail.com>",