websocket-ts 1.1.0 → 2.1.1

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 (76) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +211 -138
  3. package/package.json +46 -33
  4. package/src/backoff/backoff.ts +26 -18
  5. package/src/backoff/constantbackoff.ts +38 -20
  6. package/src/backoff/exponentialbackoff.ts +78 -38
  7. package/src/backoff/linearbackoff.ts +88 -37
  8. package/src/index.ts +23 -9
  9. package/src/queue/array_queue.ts +41 -0
  10. package/src/queue/queue.ts +46 -0
  11. package/src/queue/ring_queue.ts +69 -0
  12. package/src/websocket.ts +487 -162
  13. package/src/websocket_buffer.ts +18 -0
  14. package/src/websocket_builder.ts +274 -0
  15. package/src/websocket_event.ts +88 -0
  16. package/src/websocket_options.ts +23 -0
  17. package/src/websocket_retry_options.ts +22 -0
  18. package/{tsconfig.json → tsconfig.cjs.json} +71 -71
  19. package/tsconfig.esm.json +71 -0
  20. package/jest.config.js +0 -8
  21. package/lib/backoff/backoff.d.ts +0 -18
  22. package/lib/backoff/backoff.d.ts.map +0 -1
  23. package/lib/backoff/backoff.js +0 -3
  24. package/lib/backoff/backoff.js.map +0 -1
  25. package/lib/backoff/constantbackoff.d.ts +0 -11
  26. package/lib/backoff/constantbackoff.d.ts.map +0 -1
  27. package/lib/backoff/constantbackoff.js +0 -20
  28. package/lib/backoff/constantbackoff.js.map +0 -1
  29. package/lib/backoff/exponentialbackoff.d.ts +0 -22
  30. package/lib/backoff/exponentialbackoff.d.ts.map +0 -1
  31. package/lib/backoff/exponentialbackoff.js +0 -35
  32. package/lib/backoff/exponentialbackoff.js.map +0 -1
  33. package/lib/backoff/linearbackoff.d.ts +0 -19
  34. package/lib/backoff/linearbackoff.d.ts.map +0 -1
  35. package/lib/backoff/linearbackoff.js +0 -34
  36. package/lib/backoff/linearbackoff.js.map +0 -1
  37. package/lib/buffer/buffer.d.ts +0 -41
  38. package/lib/buffer/buffer.d.ts.map +0 -1
  39. package/lib/buffer/buffer.js +0 -3
  40. package/lib/buffer/buffer.js.map +0 -1
  41. package/lib/buffer/lrubuffer.d.ts +0 -24
  42. package/lib/buffer/lrubuffer.d.ts.map +0 -1
  43. package/lib/buffer/lrubuffer.js +0 -76
  44. package/lib/buffer/lrubuffer.js.map +0 -1
  45. package/lib/buffer/timebuffer.d.ts +0 -25
  46. package/lib/buffer/timebuffer.d.ts.map +0 -1
  47. package/lib/buffer/timebuffer.js +0 -92
  48. package/lib/buffer/timebuffer.js.map +0 -1
  49. package/lib/index.d.ts +0 -10
  50. package/lib/index.d.ts.map +0 -1
  51. package/lib/index.js +0 -22
  52. package/lib/index.js.map +0 -1
  53. package/lib/websocket.d.ts +0 -47
  54. package/lib/websocket.d.ts.map +0 -1
  55. package/lib/websocket.js +0 -120
  56. package/lib/websocket.js.map +0 -1
  57. package/lib/websocketBuilder.d.ts +0 -32
  58. package/lib/websocketBuilder.d.ts.map +0 -1
  59. package/lib/websocketBuilder.js +0 -68
  60. package/lib/websocketBuilder.js.map +0 -1
  61. package/lib/wsbuilder.d.ts +0 -29
  62. package/lib/wsbuilder.d.ts.map +0 -1
  63. package/lib/wsbuilder.js +0 -88
  64. package/lib/wsbuilder.js.map +0 -1
  65. package/src/buffer/buffer.ts +0 -45
  66. package/src/buffer/lrubuffer.ts +0 -80
  67. package/src/buffer/timebuffer.ts +0 -105
  68. package/src/websocketBuilder.ts +0 -98
  69. package/test/backoff/constantbackoff.test.ts +0 -21
  70. package/test/backoff/exponentialbackoff.test.ts +0 -13
  71. package/test/backoff/linearbackoff.test.ts +0 -32
  72. package/test/buffer/common.ts +0 -10
  73. package/test/buffer/lrubuffer.test.ts +0 -128
  74. package/test/buffer/timebuffer.test.ts +0 -115
  75. package/test/websocket.test.ts +0 -341
  76. package/test/websocketBuilder.test.ts +0 -36
package/lib/websocket.js DELETED
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Websocket = exports.WebsocketEvents = void 0;
4
- var WebsocketEvents;
5
- (function (WebsocketEvents) {
6
- WebsocketEvents["open"] = "open";
7
- WebsocketEvents["close"] = "close";
8
- WebsocketEvents["error"] = "error";
9
- WebsocketEvents["message"] = "message";
10
- WebsocketEvents["retry"] = "retry";
11
- })(WebsocketEvents = exports.WebsocketEvents || (exports.WebsocketEvents = {}));
12
- var Websocket = /** @class */ (function () {
13
- function Websocket(url, protocols, buffer, backoff) {
14
- var _this = this;
15
- this.eventListeners = { open: [], close: [], error: [], message: [], retry: [] };
16
- this.closedByUser = false;
17
- this.retries = 0;
18
- this.handleOpenEvent = function (ev) { return _this.handleEvent(WebsocketEvents.open, ev); };
19
- this.handleCloseEvent = function (ev) { return _this.handleEvent(WebsocketEvents.close, ev); };
20
- this.handleErrorEvent = function (ev) { return _this.handleEvent(WebsocketEvents.error, ev); };
21
- this.handleMessageEvent = function (ev) { return _this.handleEvent(WebsocketEvents.message, ev); };
22
- this.url = url;
23
- this.protocols = protocols;
24
- this.buffer = buffer;
25
- this.backoff = backoff;
26
- this.tryConnect();
27
- }
28
- Object.defineProperty(Websocket.prototype, "underlyingWebsocket", {
29
- get: function () {
30
- return this.websocket;
31
- },
32
- enumerable: false,
33
- configurable: true
34
- });
35
- Websocket.prototype.send = function (data) {
36
- var _a;
37
- if (this.closedByUser)
38
- return;
39
- if (this.websocket === undefined || this.websocket.readyState !== this.websocket.OPEN)
40
- (_a = this.buffer) === null || _a === void 0 ? void 0 : _a.write([data]);
41
- else
42
- this.websocket.send(data);
43
- };
44
- Websocket.prototype.close = function (code, reason) {
45
- var _a;
46
- this.closedByUser = true;
47
- (_a = this.websocket) === null || _a === void 0 ? void 0 : _a.close(code, reason);
48
- };
49
- Websocket.prototype.addEventListener = function (type, listener, options) {
50
- var eventListener = { listener: listener, options: options };
51
- var eventListeners = this.eventListeners[type];
52
- eventListeners.push(eventListener);
53
- };
54
- Websocket.prototype.removeEventListener = function (type, listener, options) {
55
- this.eventListeners[type] =
56
- this.eventListeners[type]
57
- .filter(function (l) {
58
- return l.listener !== listener && (l.options === undefined || l.options !== options);
59
- });
60
- };
61
- Websocket.prototype.dispatchEvent = function (type, ev) {
62
- var _this = this;
63
- var listeners = this.eventListeners[type];
64
- var onceListeners = [];
65
- listeners.forEach(function (l) {
66
- l.listener(_this, ev); // call listener
67
- if (l.options !== undefined && l.options.once)
68
- onceListeners.push(l);
69
- });
70
- onceListeners.forEach(function (l) { return _this.removeEventListener(type, l.listener, l.options); }); // remove 'once'-listeners
71
- };
72
- Websocket.prototype.tryConnect = function () {
73
- if (this.websocket !== undefined) { // remove all event-listeners from broken socket
74
- this.websocket.removeEventListener(WebsocketEvents.open, this.handleOpenEvent);
75
- this.websocket.removeEventListener(WebsocketEvents.close, this.handleCloseEvent);
76
- this.websocket.removeEventListener(WebsocketEvents.error, this.handleErrorEvent);
77
- this.websocket.removeEventListener(WebsocketEvents.message, this.handleMessageEvent);
78
- this.websocket.close();
79
- }
80
- this.websocket = new WebSocket(this.url, this.protocols); // create new socket and attach handlers
81
- this.websocket.addEventListener(WebsocketEvents.open, this.handleOpenEvent);
82
- this.websocket.addEventListener(WebsocketEvents.close, this.handleCloseEvent);
83
- this.websocket.addEventListener(WebsocketEvents.error, this.handleErrorEvent);
84
- this.websocket.addEventListener(WebsocketEvents.message, this.handleMessageEvent);
85
- };
86
- Websocket.prototype.handleEvent = function (type, ev) {
87
- var _a, _b, _c;
88
- switch (type) {
89
- case WebsocketEvents.close:
90
- if (!this.closedByUser) // failed to connect or connection lost, try to reconnect
91
- this.reconnect();
92
- break;
93
- case WebsocketEvents.open:
94
- this.retries = 0;
95
- (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.reset(); // reset backoff
96
- (_b = this.buffer) === null || _b === void 0 ? void 0 : _b.forEach(this.send.bind(this)); // send all buffered messages
97
- (_c = this.buffer) === null || _c === void 0 ? void 0 : _c.clear();
98
- break;
99
- }
100
- this.dispatchEvent(type, ev); // forward to all listeners
101
- };
102
- Websocket.prototype.reconnect = function () {
103
- var _this = this;
104
- if (this.backoff === undefined) // no backoff, we're done
105
- return;
106
- var backoff = this.backoff.next();
107
- setTimeout(function () {
108
- _this.dispatchEvent(WebsocketEvents.retry, new CustomEvent(WebsocketEvents.retry, {
109
- detail: {
110
- retries: ++_this.retries,
111
- backoff: backoff
112
- }
113
- }));
114
- _this.tryConnect();
115
- }, backoff);
116
- };
117
- return Websocket;
118
- }());
119
- exports.Websocket = Websocket;
120
- //# sourceMappingURL=websocket.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import { Backoff } from "./backoff/backoff";
2
- import { Buffer } from "./buffer/buffer";
3
- import { RetryEventDetails, Websocket } from "./websocket";
4
- /**
5
- * Used to build Websocket-instances.
6
- */
7
- export declare class WebsocketBuilder {
8
- private readonly url;
9
- private ws;
10
- private protocols?;
11
- private backoff?;
12
- private buffer?;
13
- private onOpenListeners;
14
- private onCloseListeners;
15
- private onErrorListeners;
16
- private onMessageListeners;
17
- private onRetryListeners;
18
- constructor(url: string);
19
- withProtocols(p: string | string[]): WebsocketBuilder;
20
- withBackoff(backoff: Backoff): WebsocketBuilder;
21
- withBuffer(buffer: Buffer<any>): WebsocketBuilder;
22
- onOpen(listener: (instance: Websocket, ev: Event) => any, options?: boolean | EventListenerOptions): WebsocketBuilder;
23
- onClose(listener: (instance: Websocket, ev: CloseEvent) => any, options?: boolean | EventListenerOptions): WebsocketBuilder;
24
- onError(listener: (instance: Websocket, ev: Event) => any, options?: boolean | EventListenerOptions): WebsocketBuilder;
25
- onMessage(listener: (instance: Websocket, ev: MessageEvent) => any, options?: boolean | EventListenerOptions): WebsocketBuilder;
26
- onRetry(listener: (instance: Websocket, ev: CustomEvent<RetryEventDetails>) => any, options?: boolean | EventListenerOptions): WebsocketBuilder;
27
- /**
28
- * Multiple calls to build() will always return the same websocket-instance.
29
- */
30
- build(): Websocket;
31
- }
32
- //# sourceMappingURL=websocketBuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocketBuilder.d.ts","sourceRoot":"","sources":["../src/websocketBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,iBAAiB,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAE1E;;GAEG;AACH,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAC,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAC,CAA4D;IAC3E,OAAO,CAAC,eAAe,CAGb;IACV,OAAO,CAAC,gBAAgB,CAGd;IACV,OAAO,CAAC,gBAAgB,CAGd;IACV,OAAO,CAAC,kBAAkB,CAGhB;IACV,OAAO,CAAC,gBAAgB,CAGd;gBAEE,GAAG,EAAE,MAAM;IAIhB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB;IAKrD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB;IAK/C,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,gBAAgB;IAKjD,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GAAG,gBAAgB;IAKlE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,EACtD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GAAG,gBAAgB;IAKnE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GAAG,gBAAgB;IAKnE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,GAAG,EACxD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GAAG,gBAAgB;IAKrE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,iBAAiB,CAAC,KAAK,GAAG,EAC1E,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GAAG,gBAAgB;IAK1E;;OAEG;IACI,KAAK,IAAI,SAAS;CAW5B"}
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebsocketBuilder = void 0;
4
- var websocket_1 = require("./websocket");
5
- /**
6
- * Used to build Websocket-instances.
7
- */
8
- var WebsocketBuilder = /** @class */ (function () {
9
- function WebsocketBuilder(url) {
10
- this.ws = null;
11
- this.onOpenListeners = [];
12
- this.onCloseListeners = [];
13
- this.onErrorListeners = [];
14
- this.onMessageListeners = [];
15
- this.onRetryListeners = [];
16
- this.url = url;
17
- }
18
- WebsocketBuilder.prototype.withProtocols = function (p) {
19
- this.protocols = p;
20
- return this;
21
- };
22
- WebsocketBuilder.prototype.withBackoff = function (backoff) {
23
- this.backoff = backoff;
24
- return this;
25
- };
26
- WebsocketBuilder.prototype.withBuffer = function (buffer) {
27
- this.buffer = buffer;
28
- return this;
29
- };
30
- WebsocketBuilder.prototype.onOpen = function (listener, options) {
31
- this.onOpenListeners.push({ listener: listener, options: options });
32
- return this;
33
- };
34
- WebsocketBuilder.prototype.onClose = function (listener, options) {
35
- this.onCloseListeners.push({ listener: listener, options: options });
36
- return this;
37
- };
38
- WebsocketBuilder.prototype.onError = function (listener, options) {
39
- this.onErrorListeners.push({ listener: listener, options: options });
40
- return this;
41
- };
42
- WebsocketBuilder.prototype.onMessage = function (listener, options) {
43
- this.onMessageListeners.push({ listener: listener, options: options });
44
- return this;
45
- };
46
- WebsocketBuilder.prototype.onRetry = function (listener, options) {
47
- this.onRetryListeners.push({ listener: listener, options: options });
48
- return this;
49
- };
50
- /**
51
- * Multiple calls to build() will always return the same websocket-instance.
52
- */
53
- WebsocketBuilder.prototype.build = function () {
54
- var _this = this;
55
- if (this.ws !== null)
56
- return this.ws;
57
- this.ws = new websocket_1.Websocket(this.url, this.protocols, this.buffer, this.backoff);
58
- this.onOpenListeners.forEach(function (h) { var _a; return (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.addEventListener(websocket_1.WebsocketEvents.open, h.listener, h.options); });
59
- this.onCloseListeners.forEach(function (h) { var _a; return (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.addEventListener(websocket_1.WebsocketEvents.close, h.listener, h.options); });
60
- this.onErrorListeners.forEach(function (h) { var _a; return (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.addEventListener(websocket_1.WebsocketEvents.error, h.listener, h.options); });
61
- this.onMessageListeners.forEach(function (h) { var _a; return (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.addEventListener(websocket_1.WebsocketEvents.message, h.listener, h.options); });
62
- this.onRetryListeners.forEach(function (h) { var _a; return (_a = _this.ws) === null || _a === void 0 ? void 0 : _a.addEventListener(websocket_1.WebsocketEvents.retry, h.listener, h.options); });
63
- return this.ws;
64
- };
65
- return WebsocketBuilder;
66
- }());
67
- exports.WebsocketBuilder = WebsocketBuilder;
68
- //# sourceMappingURL=websocketBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocketBuilder.js","sourceRoot":"","sources":["../src/websocketBuilder.ts"],"names":[],"mappings":";;;AAEA,yCAA0E;AAE1E;;GAEG;AACH;IA2BI,0BAAY,GAAW;QAzBf,OAAE,GAAqB,IAAI,CAAC;QAI5B,oBAAe,GAGhB,EAAE,CAAC;QACF,qBAAgB,GAGjB,EAAE,CAAC;QACF,qBAAgB,GAGjB,EAAE,CAAC;QACF,uBAAkB,GAGnB,EAAE,CAAC;QACF,qBAAgB,GAGjB,EAAE,CAAC;QAGN,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IAEM,wCAAa,GAApB,UAAqB,CAAoB;QACrC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,sCAAW,GAAlB,UAAmB,OAAgB;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,qCAAU,GAAjB,UAAkB,MAAmB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,iCAAM,GAAb,UAAc,QAAiD,EACjD,OAAwC;QAClD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAC,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAO,GAAd,UAAe,QAAsD,EACtD,OAAwC;QACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAO,GAAd,UAAe,QAAiD,EACjD,OAAwC;QACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,oCAAS,GAAhB,UAAiB,QAAwD,EACxD,OAAwC;QACrD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAC,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,kCAAO,GAAd,UAAe,QAA0E,EAC1E,OAAwC;QACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAC,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,gCAAK,GAAZ;QAAA,iBAUC;QATG,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI;YAChB,OAAO,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,CAAC,yBAAI,KAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,2BAAe,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAC,CAAC,CAAC;QAC1G,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAA,CAAC,yBAAI,KAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,2BAAe,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAA,CAAC,yBAAI,KAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,2BAAe,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAC,CAAC,CAAC;QAC5G,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAA,CAAC,yBAAI,KAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,2BAAe,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAC,CAAC,CAAC;QAChH,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAA,CAAC,yBAAI,KAAI,CAAC,EAAE,0CAAE,gBAAgB,CAAC,2BAAe,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAC,CAAC,CAAC;QAC5G,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IACL,uBAAC;AAAD,CAAC,AA1FD,IA0FC;AA1FY,4CAAgB"}
@@ -1,29 +0,0 @@
1
- import { Backoff } from "./backoff/backoff";
2
- import { Buffer } from "./buffer/buffer";
3
- import { RetryEventDetails, Websocket } from "./websocket";
4
- export declare class WsBuilder {
5
- private readonly url;
6
- private protocols?;
7
- private backoff?;
8
- private buffer?;
9
- private onOpenChain?;
10
- private onCloseChain?;
11
- private onErrorChain?;
12
- private onMessageChain?;
13
- private onRetryChain?;
14
- private ws?;
15
- constructor(url: string);
16
- withProtocols(p: string | string[]): WsBuilder;
17
- withBackoff(backoff: Backoff): WsBuilder;
18
- withBuffer(buffer: Buffer<any>): WsBuilder;
19
- onOpen(fn: (instance: Websocket, ev: Event) => any): WsBuilder;
20
- onClose(fn: (instance: Websocket, ev: CloseEvent) => any): WsBuilder;
21
- onError(fn: (instance: Websocket, ev: Event) => any): WsBuilder;
22
- onMessage(fn: (instance: Websocket, ev: MessageEvent) => any): WsBuilder;
23
- onRetry(fn: (instance: Websocket, ev: CustomEvent<RetryEventDetails>) => any): WsBuilder;
24
- /**
25
- * Multiple calls to build() will always return the same websocket-instance.
26
- */
27
- build(): Websocket;
28
- }
29
- //# sourceMappingURL=wsbuilder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wsbuilder.d.ts","sourceRoot":"","sources":["../src/wsbuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,iBAAiB,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAE1E,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAA2D;IAC1E,OAAO,CAAC,WAAW,CAAC,CAA0C;IAC9D,OAAO,CAAC,YAAY,CAAC,CAA+C;IACpE,OAAO,CAAC,YAAY,CAAC,CAA0C;IAC/D,OAAO,CAAC,cAAc,CAAC,CAAiD;IACxE,OAAO,CAAC,YAAY,CAAC,CAAmE;IACxF,OAAO,CAAC,EAAE,CAAC,CAAY;gBAEX,GAAG,EAAE,MAAM;IAIhB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAK9C,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS;IAKxC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IAK1C,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,GAAG,SAAS;IAU9D,OAAO,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,KAAK,GAAG,GAAG,SAAS;IAUpE,OAAO,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,KAAK,GAAG,GAAG,SAAS;IAU/D,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,GAAG,GAAG,SAAS;IAUxE,OAAO,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,CAAC,iBAAiB,CAAC,KAAK,GAAG,GAAG,SAAS;IAU/F;;OAEG;IACI,KAAK,IAAI,SAAS;CAgB5B"}
package/lib/wsbuilder.js DELETED
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WsBuilder = void 0;
4
- var websocket_1 = require("./websocket");
5
- var WsBuilder = /** @class */ (function () {
6
- function WsBuilder(url) {
7
- this.url = url;
8
- }
9
- WsBuilder.prototype.withProtocols = function (p) {
10
- this.protocols = p;
11
- return this;
12
- };
13
- WsBuilder.prototype.withBackoff = function (backoff) {
14
- this.backoff = backoff;
15
- return this;
16
- };
17
- WsBuilder.prototype.withBuffer = function (buffer) {
18
- this.buffer = buffer;
19
- return this;
20
- };
21
- WsBuilder.prototype.onOpen = function (fn) {
22
- var onOpen = this.onOpenChain;
23
- this.onOpenChain = function (instance, ev2) {
24
- fn(instance, ev2);
25
- if (onOpen !== undefined)
26
- onOpen(instance, ev2);
27
- };
28
- return this;
29
- };
30
- WsBuilder.prototype.onClose = function (fn) {
31
- var onClose = this.onCloseChain;
32
- this.onCloseChain = function (instance, ev2) {
33
- fn(instance, ev2);
34
- if (onClose !== undefined)
35
- onClose(instance, ev2);
36
- };
37
- return this;
38
- };
39
- WsBuilder.prototype.onError = function (fn) {
40
- var onError = this.onErrorChain;
41
- this.onErrorChain = function (instance, ev2) {
42
- fn(instance, ev2);
43
- if (onError !== undefined)
44
- onError(instance, ev2);
45
- };
46
- return this;
47
- };
48
- WsBuilder.prototype.onMessage = function (fn) {
49
- var onMessage = this.onMessageChain;
50
- this.onMessageChain = function (instance, ev2) {
51
- fn(instance, ev2);
52
- if (onMessage !== undefined)
53
- onMessage(instance, ev2);
54
- };
55
- return this;
56
- };
57
- WsBuilder.prototype.onRetry = function (fn) {
58
- var onRetry = this.onRetryChain;
59
- this.onRetryChain = function (instance, ev2) {
60
- fn(instance, ev2);
61
- if (onRetry !== undefined)
62
- onRetry(instance, ev2);
63
- };
64
- return this;
65
- };
66
- /**
67
- * Multiple calls to build() will always return the same websocket-instance.
68
- */
69
- WsBuilder.prototype.build = function () {
70
- if (this.ws !== undefined)
71
- return this.ws;
72
- this.ws = new websocket_1.Websocket(this.url, this.protocols, this.buffer, this.backoff);
73
- if (this.onOpenChain !== undefined)
74
- this.ws.addEventListener(websocket_1.WebsocketEvents.open, this.onOpenChain);
75
- if (this.onCloseChain !== undefined)
76
- this.ws.addEventListener(websocket_1.WebsocketEvents.close, this.onCloseChain);
77
- if (this.onErrorChain !== undefined)
78
- this.ws.addEventListener(websocket_1.WebsocketEvents.error, this.onErrorChain);
79
- if (this.onMessageChain !== undefined)
80
- this.ws.addEventListener(websocket_1.WebsocketEvents.message, this.onMessageChain);
81
- if (this.onRetryChain !== undefined)
82
- this.ws.addEventListener(websocket_1.WebsocketEvents.retry, this.onRetryChain);
83
- return this.ws;
84
- };
85
- return WsBuilder;
86
- }());
87
- exports.WsBuilder = WsBuilder;
88
- //# sourceMappingURL=wsbuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wsbuilder.js","sourceRoot":"","sources":["../src/wsbuilder.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- /**
2
- * Temporary container for generic elements.
3
- */
4
- export interface Buffer<E> {
5
- /**
6
- * Length of the buffer, the count of elements
7
- * that can be read from the buffer.
8
- * @return the length of the buffer
9
- */
10
- len(): number
11
-
12
- /**
13
- * Capacity of the buffer, the total amount of
14
- * elements the buffer can contain.
15
- * @return the capacity of the buffer
16
- */
17
- cap(): number
18
-
19
- /**
20
- * Reads elements from the buffer.
21
- * @param es array to read into from the buffer
22
- * @return the count of elements that were read
23
- */
24
- read(es: E[]): number
25
-
26
- /**
27
- * Writes elements to the buffer.
28
- * @param es array to write to the buffer
29
- * @return the count of elements that were written
30
- */
31
- write(es: E[]): number
32
-
33
- /**
34
- * Applies a function to every element in the buffer.
35
- * @param fn the function to apply to every element
36
- * @return: the count of elements that were used
37
- */
38
- forEach(fn: (e: E) => any): number
39
-
40
- /**
41
- * Clears the buffer. This effectively removes all
42
- * items in the buffer.
43
- */
44
- clear(): void
45
- }
@@ -1,80 +0,0 @@
1
- import {Buffer} from "./buffer";
2
-
3
- /**
4
- * LRUBuffer is a buffer that keeps the last n elements. When it is
5
- * full and written to, the oldest element in the buffer will be
6
- * replaced. When reading from the LRUBuffer, elements are returned
7
- * in FIFO-order (queue).
8
- *
9
- * LRUBuffer has linear space- and time-requirements. Internally
10
- * an array is used as a circular-buffer. All memory is allocated
11
- * on initialization.
12
- */
13
- export class LRUBuffer<E> implements Buffer<E> {
14
- private readonly buffer: E[];
15
- private writePtr: number = 0;
16
- private wrapped: boolean = false;
17
-
18
- constructor(len: number) {
19
- this.buffer = Array<E>(len);
20
- }
21
-
22
- len(): number {
23
- return this.wrapped ? this.buffer.length : this.writePtr;
24
- }
25
-
26
- cap(): number {
27
- return this.buffer.length;
28
- }
29
-
30
- read(es: E[]): number {
31
- if (es === null || es === undefined || es.length === 0 || this.buffer.length === 0)
32
- return 0;
33
- if (this.writePtr === 0 && !this.wrapped)
34
- return 0;
35
- const first = this.wrapped ? this.writePtr : 0;
36
- const last = (first - 1) < 0 ?
37
- this.buffer.length - 1 :
38
- first - 1;
39
- for (let i = 0; i < es.length; i++) {
40
- let r = (first + i) % this.buffer.length;
41
- es[i] = this.buffer[r];
42
- if (r === last)
43
- return i + 1;
44
- }
45
- return es.length;
46
- }
47
-
48
- write(es: E[]): number {
49
- if (es === null || es === undefined || es.length === 0 || this.buffer.length === 0)
50
- return 0;
51
- const start = es.length > this.buffer.length ? es.length - this.buffer.length : 0;
52
- for (let i = 0; i < es.length - start; i++) {
53
- this.buffer[this.writePtr] = es[start + i];
54
- this.writePtr = (this.writePtr + 1) % this.buffer.length;
55
- if (this.writePtr === 0)
56
- this.wrapped = true;
57
- }
58
- return es.length;
59
- }
60
-
61
- forEach(fn: (e: E) => any): number {
62
- if (this.writePtr === 0 && !this.wrapped)
63
- return 0;
64
- let cur = this.wrapped ? this.writePtr : 0;
65
- const last = this.wrapped ? (cur - 1) < 0 ? this.buffer.length - 1 : cur - 1 : this.writePtr - 1;
66
- const len = this.len();
67
- while (true) {
68
- fn(this.buffer[cur]);
69
- if (cur === last)
70
- break;
71
- cur = (cur + 1) % this.buffer.length;
72
- }
73
- return len;
74
- }
75
-
76
- clear(): void {
77
- this.writePtr = 0;
78
- this.wrapped = false;
79
- }
80
- }
@@ -1,105 +0,0 @@
1
- import {Buffer} from "./buffer";
2
-
3
- /**
4
- * TimeBuffer keeps the elements that were written to the buffer
5
- * within maxAge milliseconds. For example, to keep items in the
6
- * buffer that are less than a minute old, create the buffer with
7
- * maxAge equal to 60.000.
8
- *
9
- * When reading from the TimeBuffer, elements will be returned
10
- * in FIFO-order (queue).
11
- */
12
- export class TimeBuffer<E> implements Buffer<E> {
13
- private readonly maxAge: number;
14
- private tail?: elementWithTimestamp<E>;
15
- private head?: elementWithTimestamp<E>;
16
-
17
- constructor(maxAge: number) {
18
- this.maxAge = maxAge;
19
- }
20
-
21
- cap(): number {
22
- return Number.POSITIVE_INFINITY;
23
- }
24
-
25
- len(): number {
26
- this.forwardTail();
27
- let cur = this.tail;
28
- let i = 0;
29
- while (cur !== undefined) {
30
- i++;
31
- cur = cur.n;
32
- }
33
- return i;
34
- }
35
-
36
- read(es: E[]): number {
37
- this.forwardTail();
38
- if (es.length === 0)
39
- return 0;
40
- let cur = this.tail;
41
- let i = 0;
42
- while (cur !== undefined) {
43
- es[i++] = cur.e;
44
- if (i === es.length)
45
- break;
46
- cur = cur.n;
47
- }
48
- return i;
49
- }
50
-
51
- write(es: E[]): number {
52
- for (let i = 0; i < es.length; i++)
53
- this.putElement(es[i]);
54
- return es.length;
55
- }
56
-
57
- forEach(fn: (e: E) => any): number {
58
- this.forwardTail();
59
- let cur = this.tail;
60
- let i = 0;
61
- while (cur !== undefined) {
62
- fn(cur.e);
63
- i++;
64
- cur = cur.n;
65
- }
66
- return i;
67
- }
68
-
69
- private putElement(e: E) {
70
- const newElement = {e, t: Date.now(), n: undefined} as elementWithTimestamp<E>;
71
- if (this.tail === undefined)
72
- this.tail = newElement;
73
- if (this.head === undefined)
74
- this.head = newElement
75
- else {
76
- this.head.n = newElement;
77
- this.head = newElement;
78
- }
79
- }
80
-
81
- private forwardTail() {
82
- if (this.tail === undefined)
83
- return;
84
- const d = Date.now();
85
- while (d - this.tail.t > this.maxAge) {
86
- if (this.tail === this.head) {
87
- this.tail = undefined;
88
- this.head = undefined;
89
- } else
90
- this.tail = this.tail.n;
91
- if (this.tail === undefined)
92
- break;
93
- }
94
- }
95
-
96
- clear(): void {
97
- // TODO
98
- }
99
- }
100
-
101
- type elementWithTimestamp<E> = {
102
- e: E,
103
- t: number,
104
- n?: elementWithTimestamp<E>
105
- }