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.
Files changed (188) hide show
  1. package/README.md +134 -9
  2. package/dist/cjs/{src/backoff → backoff}/backoff.d.ts +6 -3
  3. package/dist/{esm/src → cjs}/backoff/backoff.d.ts.map +1 -1
  4. package/dist/{esm/src → cjs}/backoff/backoff.js.map +1 -1
  5. package/dist/cjs/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
  6. package/dist/cjs/backoff/constantbackoff.d.ts.map +1 -0
  7. package/dist/cjs/backoff/constantbackoff.js +34 -0
  8. package/dist/cjs/backoff/constantbackoff.js.map +1 -0
  9. package/dist/{esm/src → cjs}/backoff/exponentialbackoff.d.ts +2 -2
  10. package/dist/cjs/backoff/exponentialbackoff.d.ts.map +1 -0
  11. package/dist/cjs/{src/backoff → backoff}/exponentialbackoff.js +19 -27
  12. package/dist/cjs/backoff/exponentialbackoff.js.map +1 -0
  13. package/dist/{esm/src → cjs}/backoff/linearbackoff.d.ts +1 -1
  14. package/dist/cjs/backoff/linearbackoff.d.ts.map +1 -0
  15. package/dist/cjs/{src/backoff → backoff}/linearbackoff.js +23 -31
  16. package/dist/cjs/backoff/linearbackoff.js.map +1 -0
  17. package/dist/cjs/index.d.ts +14 -0
  18. package/dist/cjs/index.d.ts.map +1 -0
  19. package/dist/cjs/index.js +20 -0
  20. package/dist/cjs/index.js.map +1 -0
  21. package/dist/cjs/package.json +1 -0
  22. package/dist/{esm/src → cjs}/queue/array_queue.d.ts +1 -1
  23. package/dist/cjs/queue/array_queue.d.ts.map +1 -0
  24. package/dist/cjs/{src/queue → queue}/array_queue.js +17 -18
  25. package/dist/cjs/queue/array_queue.js.map +1 -0
  26. package/dist/cjs/queue/queue.d.ts.map +1 -0
  27. package/dist/cjs/{src/queue → queue}/queue.js.map +1 -1
  28. package/dist/cjs/{src/queue → queue}/ring_queue.d.ts +1 -1
  29. package/dist/cjs/queue/ring_queue.d.ts.map +1 -0
  30. package/dist/cjs/{src/queue → queue}/ring_queue.js +25 -22
  31. package/dist/cjs/queue/ring_queue.js.map +1 -0
  32. package/dist/cjs/{src/websocket.d.ts → websocket.d.ts} +75 -17
  33. package/dist/cjs/websocket.d.ts.map +1 -0
  34. package/dist/cjs/websocket.js +588 -0
  35. package/dist/cjs/websocket.js.map +1 -0
  36. package/dist/cjs/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
  37. package/dist/cjs/websocket_buffer.d.ts.map +1 -0
  38. package/dist/cjs/websocket_buffer.js.map +1 -0
  39. package/dist/{esm/src → cjs}/websocket_builder.d.ts +14 -5
  40. package/dist/cjs/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
  41. package/dist/cjs/websocket_builder.js +236 -0
  42. package/dist/cjs/websocket_builder.js.map +1 -0
  43. package/dist/{esm/src → cjs}/websocket_event.d.ts +20 -5
  44. package/dist/cjs/websocket_event.d.ts.map +1 -0
  45. package/dist/cjs/{src/websocket_event.js → websocket_event.js} +7 -1
  46. package/dist/cjs/websocket_event.js.map +1 -0
  47. package/dist/{esm/src → cjs}/websocket_options.d.ts +6 -5
  48. package/dist/cjs/websocket_options.d.ts.map +1 -0
  49. package/dist/cjs/websocket_options.js.map +1 -0
  50. package/dist/{esm/src → cjs}/websocket_retry_options.d.ts +3 -2
  51. package/dist/cjs/websocket_retry_options.d.ts.map +1 -0
  52. package/dist/cjs/websocket_retry_options.js.map +1 -0
  53. package/dist/esm/{src/backoff → backoff}/backoff.d.ts +6 -3
  54. package/dist/{cjs/src → esm}/backoff/backoff.d.ts.map +1 -1
  55. package/dist/{cjs/src → esm}/backoff/backoff.js.map +1 -1
  56. package/dist/esm/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
  57. package/dist/esm/backoff/constantbackoff.d.ts.map +1 -0
  58. package/dist/esm/{src/backoff → backoff}/constantbackoff.js +3 -3
  59. package/dist/esm/backoff/constantbackoff.js.map +1 -0
  60. package/dist/{cjs/src → esm}/backoff/exponentialbackoff.d.ts +2 -2
  61. package/dist/esm/backoff/exponentialbackoff.d.ts.map +1 -0
  62. package/dist/esm/{src/backoff → backoff}/exponentialbackoff.js +6 -5
  63. package/dist/esm/backoff/exponentialbackoff.js.map +1 -0
  64. package/dist/{cjs/src → esm}/backoff/linearbackoff.d.ts +1 -1
  65. package/dist/esm/backoff/linearbackoff.d.ts.map +1 -0
  66. package/dist/esm/{src/backoff → backoff}/linearbackoff.js +8 -7
  67. package/dist/esm/backoff/linearbackoff.js.map +1 -0
  68. package/dist/esm/index.d.ts +14 -0
  69. package/dist/esm/index.d.ts.map +1 -0
  70. package/dist/esm/index.js +9 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/package.json +1 -0
  73. package/dist/{cjs/src → esm}/queue/array_queue.d.ts +1 -1
  74. package/dist/esm/queue/array_queue.d.ts.map +1 -0
  75. package/dist/esm/queue/array_queue.js.map +1 -0
  76. package/dist/esm/queue/queue.d.ts.map +1 -0
  77. package/dist/esm/{src/queue → queue}/queue.js.map +1 -1
  78. package/dist/esm/{src/queue → queue}/ring_queue.d.ts +1 -1
  79. package/dist/esm/queue/ring_queue.d.ts.map +1 -0
  80. package/dist/esm/{src/queue → queue}/ring_queue.js +7 -3
  81. package/dist/esm/queue/ring_queue.js.map +1 -0
  82. package/dist/esm/{src/websocket.d.ts → websocket.d.ts} +75 -17
  83. package/dist/esm/websocket.d.ts.map +1 -0
  84. package/dist/esm/websocket.js +584 -0
  85. package/dist/esm/websocket.js.map +1 -0
  86. package/dist/esm/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
  87. package/dist/esm/websocket_buffer.d.ts.map +1 -0
  88. package/dist/esm/websocket_buffer.js.map +1 -0
  89. package/dist/{cjs/src → esm}/websocket_builder.d.ts +14 -5
  90. package/dist/esm/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
  91. package/dist/esm/{src/websocket_builder.js → websocket_builder.js} +36 -17
  92. package/dist/esm/websocket_builder.js.map +1 -0
  93. package/dist/{cjs/src → esm}/websocket_event.d.ts +20 -5
  94. package/dist/esm/websocket_event.d.ts.map +1 -0
  95. package/dist/esm/{src/websocket_event.js → websocket_event.js} +7 -1
  96. package/dist/esm/websocket_event.js.map +1 -0
  97. package/dist/{cjs/src → esm}/websocket_options.d.ts +6 -5
  98. package/dist/esm/websocket_options.d.ts.map +1 -0
  99. package/dist/esm/websocket_options.js.map +1 -0
  100. package/dist/{cjs/src → esm}/websocket_retry_options.d.ts +3 -2
  101. package/dist/esm/websocket_retry_options.d.ts.map +1 -0
  102. package/dist/esm/websocket_retry_options.js.map +1 -0
  103. package/package.json +35 -16
  104. package/src/backoff/backoff.ts +6 -3
  105. package/src/backoff/constantbackoff.ts +4 -4
  106. package/src/backoff/exponentialbackoff.ts +7 -6
  107. package/src/backoff/linearbackoff.ts +9 -8
  108. package/src/index.ts +14 -13
  109. package/src/queue/array_queue.ts +1 -1
  110. package/src/queue/ring_queue.ts +12 -8
  111. package/src/websocket.ts +333 -79
  112. package/src/websocket_buffer.ts +1 -3
  113. package/src/websocket_builder.ts +24 -13
  114. package/src/websocket_event.ts +25 -6
  115. package/src/websocket_options.ts +6 -5
  116. package/src/websocket_retry_options.ts +3 -2
  117. package/dist/cjs/src/backoff/constantbackoff.d.ts.map +0 -1
  118. package/dist/cjs/src/backoff/constantbackoff.js +0 -43
  119. package/dist/cjs/src/backoff/constantbackoff.js.map +0 -1
  120. package/dist/cjs/src/backoff/exponentialbackoff.d.ts.map +0 -1
  121. package/dist/cjs/src/backoff/exponentialbackoff.js.map +0 -1
  122. package/dist/cjs/src/backoff/linearbackoff.d.ts.map +0 -1
  123. package/dist/cjs/src/backoff/linearbackoff.js.map +0 -1
  124. package/dist/cjs/src/index.d.ts +0 -14
  125. package/dist/cjs/src/index.d.ts.map +0 -1
  126. package/dist/cjs/src/index.js +0 -20
  127. package/dist/cjs/src/index.js.map +0 -1
  128. package/dist/cjs/src/queue/array_queue.d.ts.map +0 -1
  129. package/dist/cjs/src/queue/array_queue.js.map +0 -1
  130. package/dist/cjs/src/queue/queue.d.ts.map +0 -1
  131. package/dist/cjs/src/queue/ring_queue.d.ts.map +0 -1
  132. package/dist/cjs/src/queue/ring_queue.js.map +0 -1
  133. package/dist/cjs/src/websocket.d.ts.map +0 -1
  134. package/dist/cjs/src/websocket.js +0 -439
  135. package/dist/cjs/src/websocket.js.map +0 -1
  136. package/dist/cjs/src/websocket_buffer.d.ts.map +0 -1
  137. package/dist/cjs/src/websocket_buffer.js.map +0 -1
  138. package/dist/cjs/src/websocket_builder.js +0 -263
  139. package/dist/cjs/src/websocket_builder.js.map +0 -1
  140. package/dist/cjs/src/websocket_event.d.ts.map +0 -1
  141. package/dist/cjs/src/websocket_event.js.map +0 -1
  142. package/dist/cjs/src/websocket_options.d.ts.map +0 -1
  143. package/dist/cjs/src/websocket_options.js.map +0 -1
  144. package/dist/cjs/src/websocket_retry_options.d.ts.map +0 -1
  145. package/dist/cjs/src/websocket_retry_options.js.map +0 -1
  146. package/dist/esm/src/backoff/constantbackoff.d.ts.map +0 -1
  147. package/dist/esm/src/backoff/constantbackoff.js.map +0 -1
  148. package/dist/esm/src/backoff/exponentialbackoff.d.ts.map +0 -1
  149. package/dist/esm/src/backoff/exponentialbackoff.js.map +0 -1
  150. package/dist/esm/src/backoff/linearbackoff.d.ts.map +0 -1
  151. package/dist/esm/src/backoff/linearbackoff.js.map +0 -1
  152. package/dist/esm/src/index.d.ts +0 -14
  153. package/dist/esm/src/index.d.ts.map +0 -1
  154. package/dist/esm/src/index.js +0 -9
  155. package/dist/esm/src/index.js.map +0 -1
  156. package/dist/esm/src/queue/array_queue.d.ts.map +0 -1
  157. package/dist/esm/src/queue/array_queue.js.map +0 -1
  158. package/dist/esm/src/queue/queue.d.ts.map +0 -1
  159. package/dist/esm/src/queue/ring_queue.d.ts.map +0 -1
  160. package/dist/esm/src/queue/ring_queue.js.map +0 -1
  161. package/dist/esm/src/websocket.d.ts.map +0 -1
  162. package/dist/esm/src/websocket.js +0 -361
  163. package/dist/esm/src/websocket.js.map +0 -1
  164. package/dist/esm/src/websocket_buffer.d.ts.map +0 -1
  165. package/dist/esm/src/websocket_buffer.js.map +0 -1
  166. package/dist/esm/src/websocket_builder.js.map +0 -1
  167. package/dist/esm/src/websocket_event.d.ts.map +0 -1
  168. package/dist/esm/src/websocket_event.js.map +0 -1
  169. package/dist/esm/src/websocket_options.d.ts.map +0 -1
  170. package/dist/esm/src/websocket_options.js.map +0 -1
  171. package/dist/esm/src/websocket_retry_options.d.ts.map +0 -1
  172. package/dist/esm/src/websocket_retry_options.js.map +0 -1
  173. package/eslint.config.mjs +0 -43
  174. package/tsconfig.cjs.json +0 -74
  175. package/tsconfig.esm.json +0 -74
  176. /package/dist/cjs/{src/backoff → backoff}/backoff.js +0 -0
  177. /package/dist/cjs/{src/queue → queue}/queue.d.ts +0 -0
  178. /package/dist/cjs/{src/queue → queue}/queue.js +0 -0
  179. /package/dist/cjs/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
  180. /package/dist/cjs/{src/websocket_options.js → websocket_options.js} +0 -0
  181. /package/dist/cjs/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
  182. /package/dist/esm/{src/backoff → backoff}/backoff.js +0 -0
  183. /package/dist/esm/{src/queue → queue}/array_queue.js +0 -0
  184. /package/dist/esm/{src/queue → queue}/queue.d.ts +0 -0
  185. /package/dist/esm/{src/queue → queue}/queue.js +0 -0
  186. /package/dist/esm/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
  187. /package/dist/esm/{src/websocket_options.js → websocket_options.js} +0 -0
  188. /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
- var RingQueue = /** @class */ (function () {
10
- function RingQueue(capacity) {
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
- RingQueue.prototype.add = function (element) {
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
- RingQueue.prototype.clear = function () {
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
- RingQueue.prototype.forEach = function (fn) {
30
- for (var i = this.tail; i !== this.head; i = (i + 1) % this.elements.length) {
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
- RingQueue.prototype.length = function () {
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
- RingQueue.prototype.isEmpty = function () {
42
+ }
43
+ isEmpty() {
42
44
  return this.head === this.tail;
43
- };
44
- RingQueue.prototype.peek = function () {
45
+ }
46
+ peek() {
45
47
  return this.isEmpty() ? undefined : this.elements[this.tail];
46
- };
47
- RingQueue.prototype.read = function () {
48
- var e = this.peek();
49
- if (e !== undefined) {
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
- return RingQueue;
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.g. the last time the websocket was connected.
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 | ArrayBufferLike | Blob | ArrayBufferView): void;
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
- * Adds an event listener for the given event-type.
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 one or more event listener for the given event-type that match the given listener and options.
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 that were used when the listener was added.
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
- * @return the created browser-native websocket which is also stored in the '_underlyingWebsocket' property.
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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"}