websocket-ts 2.2.1 → 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 (196) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +201 -63
  3. package/dist/cjs/{src/backoff → backoff}/backoff.d.ts +6 -3
  4. package/dist/{esm/src → cjs}/backoff/backoff.d.ts.map +1 -1
  5. package/dist/{esm/src → cjs}/backoff/backoff.js.map +1 -1
  6. package/dist/cjs/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
  7. package/dist/cjs/backoff/constantbackoff.d.ts.map +1 -0
  8. package/dist/cjs/backoff/constantbackoff.js +34 -0
  9. package/dist/cjs/backoff/constantbackoff.js.map +1 -0
  10. package/dist/{esm/src → cjs}/backoff/exponentialbackoff.d.ts +2 -2
  11. package/dist/cjs/backoff/exponentialbackoff.d.ts.map +1 -0
  12. package/dist/cjs/{src/backoff → backoff}/exponentialbackoff.js +19 -27
  13. package/dist/cjs/backoff/exponentialbackoff.js.map +1 -0
  14. package/dist/{esm/src → cjs}/backoff/linearbackoff.d.ts +1 -1
  15. package/dist/cjs/backoff/linearbackoff.d.ts.map +1 -0
  16. package/dist/cjs/{src/backoff → backoff}/linearbackoff.js +23 -31
  17. package/dist/cjs/backoff/linearbackoff.js.map +1 -0
  18. package/dist/cjs/index.d.ts +14 -0
  19. package/dist/cjs/index.d.ts.map +1 -0
  20. package/dist/cjs/index.js +20 -0
  21. package/dist/cjs/index.js.map +1 -0
  22. package/dist/cjs/package.json +1 -0
  23. package/dist/{esm/src → cjs}/queue/array_queue.d.ts +1 -1
  24. package/dist/cjs/queue/array_queue.d.ts.map +1 -0
  25. package/dist/cjs/{src/queue → queue}/array_queue.js +17 -18
  26. package/dist/cjs/queue/array_queue.js.map +1 -0
  27. package/dist/cjs/queue/queue.d.ts.map +1 -0
  28. package/dist/cjs/{src/queue → queue}/queue.js.map +1 -1
  29. package/dist/cjs/{src/queue → queue}/ring_queue.d.ts +1 -1
  30. package/dist/cjs/queue/ring_queue.d.ts.map +1 -0
  31. package/dist/cjs/{src/queue → queue}/ring_queue.js +25 -22
  32. package/dist/cjs/queue/ring_queue.js.map +1 -0
  33. package/dist/cjs/{src/websocket.d.ts → websocket.d.ts} +84 -20
  34. package/dist/cjs/websocket.d.ts.map +1 -0
  35. package/dist/cjs/websocket.js +588 -0
  36. package/dist/cjs/websocket.js.map +1 -0
  37. package/dist/cjs/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
  38. package/dist/cjs/websocket_buffer.d.ts.map +1 -0
  39. package/dist/cjs/websocket_buffer.js.map +1 -0
  40. package/dist/{esm/src → cjs}/websocket_builder.d.ts +22 -13
  41. package/dist/cjs/websocket_builder.d.ts.map +1 -0
  42. package/dist/cjs/websocket_builder.js +236 -0
  43. package/dist/cjs/websocket_builder.js.map +1 -0
  44. package/dist/cjs/websocket_event.d.ts +93 -0
  45. package/dist/cjs/websocket_event.d.ts.map +1 -0
  46. package/dist/cjs/websocket_event.js +27 -0
  47. package/dist/cjs/websocket_event.js.map +1 -0
  48. package/dist/{esm/src → cjs}/websocket_options.d.ts +6 -5
  49. package/dist/cjs/websocket_options.d.ts.map +1 -0
  50. package/dist/cjs/websocket_options.js.map +1 -0
  51. package/dist/{esm/src → cjs}/websocket_retry_options.d.ts +4 -3
  52. package/dist/cjs/websocket_retry_options.d.ts.map +1 -0
  53. package/dist/cjs/websocket_retry_options.js.map +1 -0
  54. package/dist/esm/{src/backoff → backoff}/backoff.d.ts +6 -3
  55. package/dist/{cjs/src → esm}/backoff/backoff.d.ts.map +1 -1
  56. package/dist/{cjs/src → esm}/backoff/backoff.js.map +1 -1
  57. package/dist/esm/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
  58. package/dist/esm/backoff/constantbackoff.d.ts.map +1 -0
  59. package/dist/esm/{src/backoff → backoff}/constantbackoff.js +3 -3
  60. package/dist/esm/backoff/constantbackoff.js.map +1 -0
  61. package/dist/{cjs/src → esm}/backoff/exponentialbackoff.d.ts +2 -2
  62. package/dist/esm/backoff/exponentialbackoff.d.ts.map +1 -0
  63. package/dist/esm/{src/backoff → backoff}/exponentialbackoff.js +6 -5
  64. package/dist/esm/backoff/exponentialbackoff.js.map +1 -0
  65. package/dist/{cjs/src → esm}/backoff/linearbackoff.d.ts +1 -1
  66. package/dist/esm/backoff/linearbackoff.d.ts.map +1 -0
  67. package/dist/esm/{src/backoff → backoff}/linearbackoff.js +8 -7
  68. package/dist/esm/backoff/linearbackoff.js.map +1 -0
  69. package/dist/esm/index.d.ts +14 -0
  70. package/dist/esm/index.d.ts.map +1 -0
  71. package/dist/esm/index.js +9 -0
  72. package/dist/esm/index.js.map +1 -0
  73. package/dist/esm/package.json +1 -0
  74. package/dist/{cjs/src → esm}/queue/array_queue.d.ts +1 -1
  75. package/dist/esm/queue/array_queue.d.ts.map +1 -0
  76. package/dist/esm/queue/array_queue.js.map +1 -0
  77. package/dist/esm/queue/queue.d.ts.map +1 -0
  78. package/dist/esm/{src/queue → queue}/queue.js.map +1 -1
  79. package/dist/esm/{src/queue → queue}/ring_queue.d.ts +1 -1
  80. package/dist/esm/queue/ring_queue.d.ts.map +1 -0
  81. package/dist/esm/{src/queue → queue}/ring_queue.js +7 -3
  82. package/dist/esm/queue/ring_queue.js.map +1 -0
  83. package/dist/esm/{src/websocket.d.ts → websocket.d.ts} +84 -20
  84. package/dist/esm/websocket.d.ts.map +1 -0
  85. package/dist/esm/websocket.js +584 -0
  86. package/dist/esm/websocket.js.map +1 -0
  87. package/dist/esm/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
  88. package/dist/esm/websocket_buffer.d.ts.map +1 -0
  89. package/dist/esm/websocket_buffer.js.map +1 -0
  90. package/dist/{cjs/src → esm}/websocket_builder.d.ts +22 -13
  91. package/dist/esm/websocket_builder.d.ts.map +1 -0
  92. package/dist/esm/{src/websocket_builder.js → websocket_builder.js} +42 -23
  93. package/dist/esm/websocket_builder.js.map +1 -0
  94. package/dist/esm/websocket_event.d.ts +93 -0
  95. package/dist/esm/websocket_event.d.ts.map +1 -0
  96. package/dist/esm/websocket_event.js +24 -0
  97. package/dist/esm/websocket_event.js.map +1 -0
  98. package/dist/{cjs/src → esm}/websocket_options.d.ts +6 -5
  99. package/dist/esm/websocket_options.d.ts.map +1 -0
  100. package/dist/esm/websocket_options.js.map +1 -0
  101. package/dist/{cjs/src → esm}/websocket_retry_options.d.ts +4 -3
  102. package/dist/esm/websocket_retry_options.d.ts.map +1 -0
  103. package/dist/esm/websocket_retry_options.js.map +1 -0
  104. package/package.json +44 -25
  105. package/src/backoff/backoff.ts +6 -3
  106. package/src/backoff/constantbackoff.ts +4 -4
  107. package/src/backoff/exponentialbackoff.ts +7 -6
  108. package/src/backoff/linearbackoff.ts +9 -8
  109. package/src/index.ts +14 -13
  110. package/src/queue/array_queue.ts +1 -1
  111. package/src/queue/ring_queue.ts +12 -8
  112. package/src/websocket.ts +343 -78
  113. package/src/websocket_buffer.ts +1 -3
  114. package/src/websocket_builder.ts +33 -22
  115. package/src/websocket_event.ts +47 -13
  116. package/src/websocket_options.ts +6 -5
  117. package/src/websocket_retry_options.ts +4 -3
  118. package/dist/cjs/src/backoff/constantbackoff.d.ts.map +0 -1
  119. package/dist/cjs/src/backoff/constantbackoff.js +0 -43
  120. package/dist/cjs/src/backoff/constantbackoff.js.map +0 -1
  121. package/dist/cjs/src/backoff/exponentialbackoff.d.ts.map +0 -1
  122. package/dist/cjs/src/backoff/exponentialbackoff.js.map +0 -1
  123. package/dist/cjs/src/backoff/linearbackoff.d.ts.map +0 -1
  124. package/dist/cjs/src/backoff/linearbackoff.js.map +0 -1
  125. package/dist/cjs/src/index.d.ts +0 -14
  126. package/dist/cjs/src/index.d.ts.map +0 -1
  127. package/dist/cjs/src/index.js +0 -20
  128. package/dist/cjs/src/index.js.map +0 -1
  129. package/dist/cjs/src/queue/array_queue.d.ts.map +0 -1
  130. package/dist/cjs/src/queue/array_queue.js.map +0 -1
  131. package/dist/cjs/src/queue/queue.d.ts.map +0 -1
  132. package/dist/cjs/src/queue/ring_queue.d.ts.map +0 -1
  133. package/dist/cjs/src/queue/ring_queue.js.map +0 -1
  134. package/dist/cjs/src/websocket.d.ts.map +0 -1
  135. package/dist/cjs/src/websocket.js +0 -435
  136. package/dist/cjs/src/websocket.js.map +0 -1
  137. package/dist/cjs/src/websocket_buffer.d.ts.map +0 -1
  138. package/dist/cjs/src/websocket_buffer.js.map +0 -1
  139. package/dist/cjs/src/websocket_builder.d.ts.map +0 -1
  140. package/dist/cjs/src/websocket_builder.js +0 -263
  141. package/dist/cjs/src/websocket_builder.js.map +0 -1
  142. package/dist/cjs/src/websocket_event.d.ts +0 -67
  143. package/dist/cjs/src/websocket_event.d.ts.map +0 -1
  144. package/dist/cjs/src/websocket_event.js +0 -22
  145. package/dist/cjs/src/websocket_event.js.map +0 -1
  146. package/dist/cjs/src/websocket_options.d.ts.map +0 -1
  147. package/dist/cjs/src/websocket_options.js.map +0 -1
  148. package/dist/cjs/src/websocket_retry_options.d.ts.map +0 -1
  149. package/dist/cjs/src/websocket_retry_options.js.map +0 -1
  150. package/dist/esm/src/backoff/constantbackoff.d.ts.map +0 -1
  151. package/dist/esm/src/backoff/constantbackoff.js.map +0 -1
  152. package/dist/esm/src/backoff/exponentialbackoff.d.ts.map +0 -1
  153. package/dist/esm/src/backoff/exponentialbackoff.js.map +0 -1
  154. package/dist/esm/src/backoff/linearbackoff.d.ts.map +0 -1
  155. package/dist/esm/src/backoff/linearbackoff.js.map +0 -1
  156. package/dist/esm/src/index.d.ts +0 -14
  157. package/dist/esm/src/index.d.ts.map +0 -1
  158. package/dist/esm/src/index.js +0 -9
  159. package/dist/esm/src/index.js.map +0 -1
  160. package/dist/esm/src/queue/array_queue.d.ts.map +0 -1
  161. package/dist/esm/src/queue/array_queue.js.map +0 -1
  162. package/dist/esm/src/queue/queue.d.ts.map +0 -1
  163. package/dist/esm/src/queue/ring_queue.d.ts.map +0 -1
  164. package/dist/esm/src/queue/ring_queue.js.map +0 -1
  165. package/dist/esm/src/websocket.d.ts.map +0 -1
  166. package/dist/esm/src/websocket.js +0 -357
  167. package/dist/esm/src/websocket.js.map +0 -1
  168. package/dist/esm/src/websocket_buffer.d.ts.map +0 -1
  169. package/dist/esm/src/websocket_buffer.js.map +0 -1
  170. package/dist/esm/src/websocket_builder.d.ts.map +0 -1
  171. package/dist/esm/src/websocket_builder.js.map +0 -1
  172. package/dist/esm/src/websocket_event.d.ts +0 -67
  173. package/dist/esm/src/websocket_event.d.ts.map +0 -1
  174. package/dist/esm/src/websocket_event.js +0 -19
  175. package/dist/esm/src/websocket_event.js.map +0 -1
  176. package/dist/esm/src/websocket_options.d.ts.map +0 -1
  177. package/dist/esm/src/websocket_options.js.map +0 -1
  178. package/dist/esm/src/websocket_retry_options.d.ts.map +0 -1
  179. package/dist/esm/src/websocket_retry_options.js.map +0 -1
  180. package/eslint.config.mjs +0 -43
  181. package/tsconfig.cjs.json +0 -74
  182. package/tsconfig.esm.json +0 -74
  183. package/websocket-ts-2.2.1.tgz +0 -0
  184. /package/dist/cjs/{src/backoff → backoff}/backoff.js +0 -0
  185. /package/dist/cjs/{src/queue → queue}/queue.d.ts +0 -0
  186. /package/dist/cjs/{src/queue → queue}/queue.js +0 -0
  187. /package/dist/cjs/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
  188. /package/dist/cjs/{src/websocket_options.js → websocket_options.js} +0 -0
  189. /package/dist/cjs/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
  190. /package/dist/esm/{src/backoff → backoff}/backoff.js +0 -0
  191. /package/dist/esm/{src/queue → queue}/array_queue.js +0 -0
  192. /package/dist/esm/{src/queue → queue}/queue.d.ts +0 -0
  193. /package/dist/esm/{src/queue → queue}/queue.js +0 -0
  194. /package/dist/esm/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
  195. /package/dist/esm/{src/websocket_options.js → websocket_options.js} +0 -0
  196. /package/dist/esm/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
@@ -32,24 +32,24 @@ exports.LinearBackoff = void 0;
32
32
  * backoff = 1000 + 1000 * 4 = 5000
33
33
  * ... // and so on
34
34
  */
35
- var LinearBackoff = /** @class */ (function () {
35
+ class LinearBackoff {
36
36
  /**
37
37
  * Creates a new LinearBackoff.
38
38
  * @param initial the initial backoff-time in milliseconds
39
39
  * @param increment the amount to increment the backoff-time with every step (in milliseconds)
40
40
  * @param max the maximum backoff-time (in milliseconds), no bound if undefined
41
41
  */
42
- function LinearBackoff(initial, increment, max) {
42
+ constructor(initial, increment, max) {
43
43
  this.i = 0;
44
44
  this._retries = 0;
45
- if (initial < 0) {
46
- throw new Error("Initial must be a positive number or zero");
45
+ if (!Number.isFinite(initial) || initial < 0) {
46
+ throw new Error("Initial must be a finite, non-negative number");
47
47
  }
48
- if (increment < 0) {
49
- throw new Error("Increment must be a positive number or zero");
48
+ if (!Number.isFinite(increment) || increment < 0) {
49
+ throw new Error("Increment must be a finite, non-negative number");
50
50
  }
51
- if (max !== undefined && max < 0) {
52
- throw new Error("Max must be undefined, a positive number or zero");
51
+ if (max !== undefined && (!Number.isFinite(max) || max < 0)) {
52
+ throw new Error("Max must be undefined or a finite, non-negative number");
53
53
  }
54
54
  if (max !== undefined && max < initial) {
55
55
  throw new Error("Max must be undefined or greater than or equal to initial");
@@ -58,32 +58,24 @@ var LinearBackoff = /** @class */ (function () {
58
58
  this.increment = increment;
59
59
  this.max = max;
60
60
  }
61
- Object.defineProperty(LinearBackoff.prototype, "retries", {
62
- get: function () {
63
- return this._retries;
64
- },
65
- enumerable: false,
66
- configurable: true
67
- });
68
- Object.defineProperty(LinearBackoff.prototype, "current", {
69
- get: function () {
70
- return this.max === undefined
71
- ? this.initial + this.increment * this.i
72
- : Math.min(this.initial + this.increment * this.i, this.max);
73
- },
74
- enumerable: false,
75
- configurable: true
76
- });
77
- LinearBackoff.prototype.next = function () {
61
+ get retries() {
62
+ return this._retries;
63
+ }
64
+ get current() {
65
+ return this.max === undefined
66
+ ? this.initial + this.increment * this.i
67
+ : Math.min(this.initial + this.increment * this.i, this.max);
68
+ }
69
+ next() {
70
+ const backoff = this.current;
78
71
  this._retries++;
79
72
  this.i++;
80
- return this.current;
81
- };
82
- LinearBackoff.prototype.reset = function () {
73
+ return backoff;
74
+ }
75
+ reset() {
83
76
  this._retries = 0;
84
77
  this.i = 0;
85
- };
86
- return LinearBackoff;
87
- }());
78
+ }
79
+ }
88
80
  exports.LinearBackoff = LinearBackoff;
89
81
  //# sourceMappingURL=linearbackoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linearbackoff.js","sourceRoot":"","sources":["../../../src/backoff/linearbackoff.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAa,aAAa;IAOxB;;;;;OAKG;IACH,YAAY,OAAe,EAAE,SAAiB,EAAE,GAAY;QATpD,MAAC,GAAW,CAAC,CAAC;QACd,aAAQ,GAAW,CAAC,CAAC;QAS3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,GAAG,KAAK,SAAS;YAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,IAAI;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;CACF;AAvDD,sCAuDC"}
@@ -0,0 +1,14 @@
1
+ export { Backoff } from "./backoff/backoff.js";
2
+ export { ConstantBackoff } from "./backoff/constantbackoff.js";
3
+ export { ExponentialBackoff } from "./backoff/exponentialbackoff.js";
4
+ export { LinearBackoff } from "./backoff/linearbackoff.js";
5
+ export { Queue } from "./queue/queue.js";
6
+ export { ArrayQueue } from "./queue/array_queue.js";
7
+ export { RingQueue } from "./queue/ring_queue.js";
8
+ export { UrlProvider, Websocket } from "./websocket.js";
9
+ export { WebsocketBuffer } from "./websocket_buffer.js";
10
+ export { WebsocketBuilder } from "./websocket_builder.js";
11
+ export { WebsocketEvent, RetryEventDetail, ReconnectEventDetail, ExhaustedEventDetail, WebsocketEventMap, WebsocketEventListener, WebsocketEventListenerParams, WebsocketEventListenerOptions, WebsocketEventListenerWithOptions, WebsocketEventListeners, } from "./websocket_event.js";
12
+ export { WebsocketOptions } from "./websocket_options.js";
13
+ export { WebsocketConnectionRetryOptions } from "./websocket_retry_options.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebsocketEvent = exports.WebsocketBuilder = exports.Websocket = exports.RingQueue = exports.ArrayQueue = exports.LinearBackoff = exports.ExponentialBackoff = exports.ConstantBackoff = void 0;
4
+ var constantbackoff_js_1 = require("./backoff/constantbackoff.js");
5
+ Object.defineProperty(exports, "ConstantBackoff", { enumerable: true, get: function () { return constantbackoff_js_1.ConstantBackoff; } });
6
+ var exponentialbackoff_js_1 = require("./backoff/exponentialbackoff.js");
7
+ Object.defineProperty(exports, "ExponentialBackoff", { enumerable: true, get: function () { return exponentialbackoff_js_1.ExponentialBackoff; } });
8
+ var linearbackoff_js_1 = require("./backoff/linearbackoff.js");
9
+ Object.defineProperty(exports, "LinearBackoff", { enumerable: true, get: function () { return linearbackoff_js_1.LinearBackoff; } });
10
+ var array_queue_js_1 = require("./queue/array_queue.js");
11
+ Object.defineProperty(exports, "ArrayQueue", { enumerable: true, get: function () { return array_queue_js_1.ArrayQueue; } });
12
+ var ring_queue_js_1 = require("./queue/ring_queue.js");
13
+ Object.defineProperty(exports, "RingQueue", { enumerable: true, get: function () { return ring_queue_js_1.RingQueue; } });
14
+ var websocket_js_1 = require("./websocket.js");
15
+ Object.defineProperty(exports, "Websocket", { enumerable: true, get: function () { return websocket_js_1.Websocket; } });
16
+ var websocket_builder_js_1 = require("./websocket_builder.js");
17
+ Object.defineProperty(exports, "WebsocketBuilder", { enumerable: true, get: function () { return websocket_builder_js_1.WebsocketBuilder; } });
18
+ var websocket_event_js_1 = require("./websocket_event.js");
19
+ Object.defineProperty(exports, "WebsocketEvent", { enumerable: true, get: function () { return websocket_event_js_1.WebsocketEvent; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,mEAA+D;AAAtD,qHAAA,eAAe,OAAA;AACxB,yEAAqE;AAA5D,2HAAA,kBAAkB,OAAA;AAC3B,+DAA2D;AAAlD,iHAAA,aAAa,OAAA;AAEtB,yDAAoD;AAA3C,4GAAA,UAAU,OAAA;AACnB,uDAAkD;AAAzC,0GAAA,SAAS,OAAA;AAClB,+CAAwD;AAAlC,yGAAA,SAAS,OAAA;AAE/B,+DAA0D;AAAjD,wHAAA,gBAAgB,OAAA;AACzB,2DAW8B;AAV5B,oHAAA,cAAc,OAAA"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -1,4 +1,4 @@
1
- import { Queue } from "./queue";
1
+ import { Queue } from "./queue.js";
2
2
  /**
3
3
  * An array queue is a queue that has an unbounded capacity. Reading from an array queue
4
4
  * will return the oldest element and effectively remove it from the queue.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array_queue.d.ts","sourceRoot":"","sources":["../../../src/queue/array_queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;;IAM/B,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;IAIrB,KAAK;IAIL,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO;IAInC,MAAM,IAAI,MAAM;IAIhB,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,CAAC,GAAG,SAAS;IAIrB,IAAI,IAAI,CAAC,GAAG,SAAS;CAGtB"}
@@ -5,32 +5,31 @@ exports.ArrayQueue = void 0;
5
5
  * An array queue is a queue that has an unbounded capacity. Reading from an array queue
6
6
  * will return the oldest element and effectively remove it from the queue.
7
7
  */
8
- var ArrayQueue = /** @class */ (function () {
9
- function ArrayQueue() {
8
+ class ArrayQueue {
9
+ constructor() {
10
10
  this.elements = [];
11
11
  }
12
- ArrayQueue.prototype.add = function (element) {
12
+ add(element) {
13
13
  this.elements.push(element);
14
- };
15
- ArrayQueue.prototype.clear = function () {
14
+ }
15
+ clear() {
16
16
  this.elements.length = 0;
17
- };
18
- ArrayQueue.prototype.forEach = function (fn) {
17
+ }
18
+ forEach(fn) {
19
19
  this.elements.forEach(fn);
20
- };
21
- ArrayQueue.prototype.length = function () {
20
+ }
21
+ length() {
22
22
  return this.elements.length;
23
- };
24
- ArrayQueue.prototype.isEmpty = function () {
23
+ }
24
+ isEmpty() {
25
25
  return this.elements.length === 0;
26
- };
27
- ArrayQueue.prototype.peek = function () {
26
+ }
27
+ peek() {
28
28
  return this.elements[0];
29
- };
30
- ArrayQueue.prototype.read = function () {
29
+ }
30
+ read() {
31
31
  return this.elements.shift();
32
- };
33
- return ArrayQueue;
34
- }());
32
+ }
33
+ }
35
34
  exports.ArrayQueue = ArrayQueue;
36
35
  //# sourceMappingURL=array_queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array_queue.js","sourceRoot":"","sources":["../../../src/queue/array_queue.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,UAAU;IAGrB;QACE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,OAAU;QACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,EAA2B;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF;AAlCD,gCAkCC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB;;;OAGG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAEtB;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAE3C;;;OAGG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;;OAGG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC;IAEtB;;;OAGG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC;CACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../../src/queue/queue.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../../src/queue/queue.ts"],"names":[],"mappings":""}
@@ -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,28 +1,50 @@
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
+ /**
6
+ * A URL or a function that returns a URL. When a function is provided, it is called on each connection attempt,
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.
17
+ */
18
+ export type UrlProvider = string | (() => string);
5
19
  /**
6
20
  * A websocket wrapper that can be configured to reconnect automatically and buffer messages when the websocket is not connected.
7
21
  */
8
22
  export declare class Websocket {
9
- private readonly _url;
23
+ private readonly _urlProvider;
24
+ private _url;
10
25
  private readonly _protocols?;
11
26
  private _closedByUser;
12
27
  private _lastConnection?;
28
+ private _binaryType?;
13
29
  private _underlyingWebsocket;
14
30
  private retryTimeout?;
31
+ private _connectionGeneration;
32
+ private readonly abortHandlerCleanups;
15
33
  private _options;
16
34
  /**
17
35
  * Creates a new websocket.
18
36
  *
19
- * @param url to connect to.
37
+ * @param url to connect to, or a function that returns a URL.
20
38
  * @param protocols optional protocols to use.
21
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.
22
42
  */
23
- constructor(url: string, protocols?: string | string[], options?: WebsocketOptions);
43
+ constructor(url: UrlProvider, protocols?: string | string[], options?: WebsocketOptions);
24
44
  /**
25
- * 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.
26
48
  *
27
49
  * @return the url.
28
50
  */
@@ -64,9 +86,9 @@ export declare class Websocket {
64
86
  */
65
87
  get closedByUser(): boolean;
66
88
  /**
67
- * 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.
68
90
  *
69
- * @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.
70
92
  */
71
93
  get lastConnection(): Date | undefined;
72
94
  /**
@@ -105,7 +127,8 @@ export declare class Websocket {
105
127
  */
106
128
  get binaryType(): BinaryType;
107
129
  /**
108
- * 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.
109
132
  *
110
133
  * @param value to set, 'blob' or 'arraybuffer'.
111
134
  */
@@ -119,9 +142,10 @@ export declare class Websocket {
119
142
  * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send
120
143
  * @param data to send.
121
144
  */
122
- send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void;
145
+ send(data: string | Blob | BufferSource): void;
123
146
  /**
124
- * 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.
125
149
  *
126
150
  * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close
127
151
  * @param code optional close code.
@@ -129,7 +153,24 @@ export declare class Websocket {
129
153
  */
130
154
  close(code?: number, reason?: string): void;
131
155
  /**
132
- * 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.
133
174
  *
134
175
  * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
135
176
  * @param type of the event to add the listener for.
@@ -138,18 +179,21 @@ export declare class Websocket {
138
179
  */
139
180
  addEventListener<K extends WebsocketEvent>(type: K, listener: WebsocketEventListener<K>, options?: WebsocketEventListenerOptions): void;
140
181
  /**
141
- * 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.
142
186
  *
143
187
  * @param type of the event to remove the listener for.
144
188
  * @param listener to remove.
145
- * @param options that were used when the listener was added.
189
+ * @param options ignored when matching, present for backward compatibility.
146
190
  */
147
191
  removeEventListener<K extends WebsocketEvent>(type: K, listener: WebsocketEventListener<K>, options?: WebsocketEventListenerOptions): void;
148
192
  /**
149
193
  * Creates a new browser-native websocket and connects it to the given URL with the given protocols
150
- * and adds all event listeners to the browser-native websocket.
151
- *
152
- * @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().
153
197
  */
154
198
  private tryConnect;
155
199
  /**
@@ -183,6 +227,16 @@ export declare class Websocket {
183
227
  * @param event to dispatch.
184
228
  */
185
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;
186
240
  /**
187
241
  * Handles the given event by dispatching it to all listeners of the given event-type.
188
242
  *
@@ -191,7 +245,10 @@ export declare class Websocket {
191
245
  */
192
246
  private handleEvent;
193
247
  /**
194
- * 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.
195
252
  */
196
253
  private sendBufferedData;
197
254
  /**
@@ -202,5 +259,12 @@ export declare class Websocket {
202
259
  * Cancels the scheduled connection-retry, if there is one.
203
260
  */
204
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;
205
269
  }
206
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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"}