teckos-client 0.1.9 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ITeckosClient.d.ts +2 -2
- package/dist/TeckosClient.d.ts +3 -3
- package/dist/TeckosClientWithJWT.d.ts +2 -2
- package/dist/index.d.ts +6 -6
- package/dist/teckos-client.cjs.development.js +43 -41
- package/dist/teckos-client.cjs.development.js.map +1 -1
- package/dist/teckos-client.cjs.production.min.js +1 -1
- package/dist/teckos-client.cjs.production.min.js.map +1 -1
- package/dist/teckos-client.esm.js +42 -35
- package/dist/teckos-client.esm.js.map +1 -1
- package/dist/types/ConnectionState.d.ts +1 -1
- package/dist/types/Packet.d.ts +1 -1
- package/dist/types/PacketType.d.ts +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/util/SocketEventEmitter.d.ts +4 -3
- package/package.json +41 -33
- package/src/ITeckosClient.ts +3 -2
- package/src/TeckosClient.ts +27 -19
- package/src/TeckosClientWithJWT.ts +11 -6
- package/src/index.ts +6 -6
- package/src/types/ConnectionState.ts +1 -1
- package/src/types/Packet.ts +1 -1
- package/src/types/PacketType.ts +1 -1
- package/src/types/index.ts +2 -2
- package/src/util/Converter.ts +3 -1
- package/src/util/SocketEventEmitter.ts +12 -4
package/dist/ITeckosClient.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="ws" />
|
|
2
2
|
import WebSocket from 'isomorphic-ws';
|
|
3
3
|
import { ConnectionState, Packet, SocketEvent } from './types';
|
|
4
|
-
import SocketEventEmitter from './util/SocketEventEmitter';
|
|
4
|
+
import { SocketEventEmitter } from './util/SocketEventEmitter';
|
|
5
5
|
interface ITeckosClient extends SocketEventEmitter<SocketEvent> {
|
|
6
6
|
ws: WebSocket | undefined;
|
|
7
7
|
readonly webSocket: WebSocket | undefined;
|
|
@@ -15,4 +15,4 @@ interface ITeckosClient extends SocketEventEmitter<SocketEvent> {
|
|
|
15
15
|
connect: () => void;
|
|
16
16
|
disconnect: () => void;
|
|
17
17
|
}
|
|
18
|
-
export
|
|
18
|
+
export type { ITeckosClient };
|
package/dist/TeckosClient.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="ws" />
|
|
2
2
|
import WebSocket from 'isomorphic-ws';
|
|
3
3
|
import { ConnectionState, OptionalOptions, Options, Packet, SocketEvent } from './types';
|
|
4
|
-
import ITeckosClient from './ITeckosClient';
|
|
5
|
-
import SocketEventEmitter from './util/SocketEventEmitter';
|
|
4
|
+
import { ITeckosClient } from './ITeckosClient';
|
|
5
|
+
import { SocketEventEmitter } from './util/SocketEventEmitter';
|
|
6
6
|
declare class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosClient {
|
|
7
7
|
protected readonly url: string;
|
|
8
8
|
protected readonly options: Options;
|
|
@@ -32,4 +32,4 @@ declare class TeckosClient extends SocketEventEmitter<SocketEvent> implements IT
|
|
|
32
32
|
close: () => void;
|
|
33
33
|
disconnect: () => void;
|
|
34
34
|
}
|
|
35
|
-
export
|
|
35
|
+
export { TeckosClient };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import TeckosClient from './TeckosClient';
|
|
1
|
+
import { TeckosClient } from './TeckosClient';
|
|
2
2
|
import { OptionalOptions, ConnectionState } from './types';
|
|
3
3
|
declare class TeckosClientWithJWT extends TeckosClient {
|
|
4
4
|
protected readonly token: string;
|
|
@@ -9,4 +9,4 @@ declare class TeckosClientWithJWT extends TeckosClient {
|
|
|
9
9
|
protected handleReadyEvent: () => void;
|
|
10
10
|
protected handleOpen: () => void;
|
|
11
11
|
}
|
|
12
|
-
export
|
|
12
|
+
export { TeckosClientWithJWT };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import TeckosClientWithJWT from './TeckosClientWithJWT';
|
|
2
|
-
import TeckosClient from './TeckosClient';
|
|
3
|
-
import ITeckosClient from './ITeckosClient';
|
|
4
|
-
import
|
|
1
|
+
import { TeckosClientWithJWT } from './TeckosClientWithJWT';
|
|
2
|
+
import { TeckosClient } from './TeckosClient';
|
|
3
|
+
import { ITeckosClient } from './ITeckosClient';
|
|
4
|
+
import { ConnectionState, OptionalOptions, Options, Packet, PacketType, SocketEvent } from './types';
|
|
5
5
|
/**
|
|
6
6
|
* Expose all types
|
|
7
7
|
*/
|
|
8
|
-
export type { ITeckosClient };
|
|
9
|
-
export {
|
|
8
|
+
export type { Options, OptionalOptions, Packet, SocketEvent, ITeckosClient };
|
|
9
|
+
export { ConnectionState, PacketType, TeckosClient, TeckosClientWithJWT };
|
|
@@ -76,33 +76,17 @@ var decodePacket = function decodePacket(buffer) {
|
|
|
76
76
|
return JSON.parse(dec.decode(buffer).toString());
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
var PacketType;
|
|
80
|
-
|
|
81
79
|
(function (PacketType) {
|
|
82
80
|
PacketType[PacketType["EVENT"] = 0] = "EVENT";
|
|
83
81
|
PacketType[PacketType["ACK"] = 1] = "ACK";
|
|
84
|
-
})(PacketType || (PacketType = {}));
|
|
85
|
-
|
|
86
|
-
var PacketType$1 = PacketType;
|
|
87
|
-
|
|
88
|
-
var ConnectionState;
|
|
82
|
+
})(exports.PacketType || (exports.PacketType = {}));
|
|
89
83
|
|
|
90
84
|
(function (ConnectionState) {
|
|
91
85
|
ConnectionState["DISCONNECTED"] = "disconnected";
|
|
92
86
|
ConnectionState["CONNECTING"] = "connecting";
|
|
93
87
|
ConnectionState["CONNECTED"] = "connected";
|
|
94
88
|
ConnectionState["DISCONNECTING"] = "disconnecting";
|
|
95
|
-
})(ConnectionState || (ConnectionState = {}));
|
|
96
|
-
|
|
97
|
-
var ConnectionState$1 = ConnectionState;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var index = {
|
|
102
|
-
__proto__: null,
|
|
103
|
-
ConnectionState: ConnectionState$1,
|
|
104
|
-
PacketType: PacketType$1
|
|
105
|
-
};
|
|
89
|
+
})(exports.ConnectionState || (exports.ConnectionState = {}));
|
|
106
90
|
|
|
107
91
|
var SocketEventEmitter = function SocketEventEmitter() {
|
|
108
92
|
var _this = this;
|
|
@@ -115,6 +99,10 @@ var SocketEventEmitter = function SocketEventEmitter() {
|
|
|
115
99
|
throw new Error('Max listeners reached');
|
|
116
100
|
}
|
|
117
101
|
|
|
102
|
+
if (typeof listener !== 'function') {
|
|
103
|
+
throw new Error('The given listener is not a function');
|
|
104
|
+
}
|
|
105
|
+
|
|
118
106
|
_this.handlers[event] = _this.handlers[event] || [];
|
|
119
107
|
|
|
120
108
|
_this.handlers[event].push(listener);
|
|
@@ -127,6 +115,10 @@ var SocketEventEmitter = function SocketEventEmitter() {
|
|
|
127
115
|
throw new Error('Max listeners reached');
|
|
128
116
|
}
|
|
129
117
|
|
|
118
|
+
if (typeof listener !== 'function') {
|
|
119
|
+
throw new Error('The given listener is not a function');
|
|
120
|
+
}
|
|
121
|
+
|
|
130
122
|
_this.handlers[event] = _this.handlers[event] || [];
|
|
131
123
|
|
|
132
124
|
var onceWrapper = function onceWrapper() {
|
|
@@ -310,11 +302,12 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
310
302
|
|
|
311
303
|
args.unshift(event);
|
|
312
304
|
var packet = {
|
|
313
|
-
type: PacketType
|
|
305
|
+
type: exports.PacketType.EVENT,
|
|
314
306
|
data: args
|
|
315
307
|
};
|
|
316
308
|
|
|
317
309
|
if (typeof args[args.length - 1] === 'function') {
|
|
310
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
318
311
|
_this.acks.set(_this.fnId, args.pop());
|
|
319
312
|
|
|
320
313
|
packet.id = _this.fnId;
|
|
@@ -331,7 +324,7 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
331
324
|
|
|
332
325
|
args.unshift('message');
|
|
333
326
|
return _this.sendPackage({
|
|
334
|
-
type: PacketType
|
|
327
|
+
type: exports.PacketType.EVENT,
|
|
335
328
|
data: args
|
|
336
329
|
});
|
|
337
330
|
};
|
|
@@ -353,18 +346,19 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
353
346
|
var packet = typeof msg.data === 'string' ? JSON.parse(msg.data) : decodePacket(msg.data);
|
|
354
347
|
if (_this.options.debug) d("[" + _this.url + "] Got packet: " + JSON.stringify(packet));
|
|
355
348
|
|
|
356
|
-
if (packet.type === PacketType
|
|
349
|
+
if (packet.type === exports.PacketType.EVENT) {
|
|
357
350
|
var event = packet.data[0];
|
|
358
351
|
var args = packet.data.slice(1);
|
|
359
352
|
|
|
360
353
|
if (event) {
|
|
354
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
361
355
|
_this.listeners(event).forEach(function (listener) {
|
|
362
356
|
return listener.apply(void 0, args);
|
|
363
357
|
});
|
|
364
358
|
} else {
|
|
365
|
-
throw new Error("[teckos-client@" + _this.url + "] Got invalid event message: " + msg.data);
|
|
359
|
+
throw new Error("[teckos-client@" + _this.url + "] Got invalid event message: " + JSON.stringify(msg.data));
|
|
366
360
|
}
|
|
367
|
-
} else if (packet.type === PacketType
|
|
361
|
+
} else if (packet.type === exports.PacketType.ACK && packet.id !== undefined) {
|
|
368
362
|
// Call assigned function
|
|
369
363
|
var ack = _this.acks.get(packet.id);
|
|
370
364
|
|
|
@@ -384,7 +378,7 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
384
378
|
_this.currentReconnectDelay = _this.options.reconnectionDelay;
|
|
385
379
|
_this.currentReconnectionAttempts = 0; // Inform listeners
|
|
386
380
|
|
|
387
|
-
if (_this.options.debug) d("[" + _this.url + "] Reconnected!");
|
|
381
|
+
if (_this.options.debug) d("[" + _this.url + "] Reconnected!"); // eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
388
382
|
|
|
389
383
|
_this.listeners('reconnect').forEach(function (listener) {
|
|
390
384
|
return listener();
|
|
@@ -401,7 +395,7 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
401
395
|
|
|
402
396
|
_this.handleError = function (error) {
|
|
403
397
|
if (_this.handlers && _this.handlers.error) {
|
|
404
|
-
if (_this.options.debug) d("[" + _this.url + "] Got error from server: " + error);
|
|
398
|
+
if (_this.options.debug) d("[" + _this.url + "] Got error from server: " + JSON.stringify(error));
|
|
405
399
|
|
|
406
400
|
_this.handlers.error.forEach(function (listener) {
|
|
407
401
|
return listener(error);
|
|
@@ -412,11 +406,13 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
412
406
|
_this.handleClose = function () {
|
|
413
407
|
// Stop connection timeout
|
|
414
408
|
if (_this.connectionTimeout) {
|
|
409
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
415
410
|
clearTimeout(_this.connectionTimeout);
|
|
416
411
|
} // Stop reconnection timeout
|
|
417
412
|
|
|
418
413
|
|
|
419
414
|
if (_this.reconnectionTimeout) {
|
|
415
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
420
416
|
clearTimeout(_this.reconnectionTimeout);
|
|
421
417
|
} // Inform listeners
|
|
422
418
|
|
|
@@ -483,20 +479,20 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
483
479
|
if (this.ws) {
|
|
484
480
|
switch (this.ws.readyState) {
|
|
485
481
|
case WebSocket.OPEN:
|
|
486
|
-
return ConnectionState
|
|
482
|
+
return exports.ConnectionState.CONNECTED;
|
|
487
483
|
|
|
488
484
|
case WebSocket.CONNECTING:
|
|
489
|
-
return ConnectionState
|
|
485
|
+
return exports.ConnectionState.CONNECTING;
|
|
490
486
|
|
|
491
487
|
case WebSocket.CLOSING:
|
|
492
|
-
return ConnectionState
|
|
488
|
+
return exports.ConnectionState.DISCONNECTING;
|
|
493
489
|
|
|
494
490
|
default:
|
|
495
|
-
return ConnectionState
|
|
491
|
+
return exports.ConnectionState.DISCONNECTED;
|
|
496
492
|
}
|
|
497
493
|
}
|
|
498
494
|
|
|
499
|
-
return ConnectionState
|
|
495
|
+
return exports.ConnectionState.DISCONNECTED;
|
|
500
496
|
};
|
|
501
497
|
|
|
502
498
|
_createClass(TeckosClient, [{
|
|
@@ -512,12 +508,12 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
|
|
|
512
508
|
}, {
|
|
513
509
|
key: "connected",
|
|
514
510
|
get: function get() {
|
|
515
|
-
return this.getConnectionState() === ConnectionState
|
|
511
|
+
return this.getConnectionState() === exports.ConnectionState.CONNECTED;
|
|
516
512
|
}
|
|
517
513
|
}, {
|
|
518
514
|
key: "disconnected",
|
|
519
515
|
get: function get() {
|
|
520
|
-
return this.getConnectionState() === ConnectionState
|
|
516
|
+
return this.getConnectionState() === exports.ConnectionState.DISCONNECTED;
|
|
521
517
|
}
|
|
522
518
|
}]);
|
|
523
519
|
|
|
@@ -529,6 +525,7 @@ var d$1 = /*#__PURE__*/debug('teckos:client');
|
|
|
529
525
|
var TeckosClientWithJWT = /*#__PURE__*/function (_TeckosClient) {
|
|
530
526
|
_inheritsLoose(TeckosClientWithJWT, _TeckosClient);
|
|
531
527
|
|
|
528
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
532
529
|
function TeckosClientWithJWT(url, options, token, initialData) {
|
|
533
530
|
var _this;
|
|
534
531
|
|
|
@@ -537,7 +534,7 @@ var TeckosClientWithJWT = /*#__PURE__*/function (_TeckosClient) {
|
|
|
537
534
|
|
|
538
535
|
_this.handleReadyEvent = function () {
|
|
539
536
|
if (_this.options.debug) d$1("[" + _this.url + "] Connected!");
|
|
540
|
-
_this.receivedReady =
|
|
537
|
+
_this.receivedReady = true;
|
|
541
538
|
|
|
542
539
|
if (_this.currentReconnectionAttempts > 0) {
|
|
543
540
|
if (_this.options.debug) d$1("[" + _this.url + "] Reconnected!");
|
|
@@ -568,8 +565,14 @@ var TeckosClientWithJWT = /*#__PURE__*/function (_TeckosClient) {
|
|
|
568
565
|
}, _this.initialData));
|
|
569
566
|
};
|
|
570
567
|
|
|
571
|
-
_this.token = token;
|
|
568
|
+
_this.token = token; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
569
|
+
|
|
572
570
|
_this.initialData = initialData;
|
|
571
|
+
|
|
572
|
+
_this.on('disconnect', function () {
|
|
573
|
+
_this.receivedReady = false;
|
|
574
|
+
});
|
|
575
|
+
|
|
573
576
|
return _this;
|
|
574
577
|
}
|
|
575
578
|
|
|
@@ -580,23 +583,23 @@ var TeckosClientWithJWT = /*#__PURE__*/function (_TeckosClient) {
|
|
|
580
583
|
switch (this.ws.readyState) {
|
|
581
584
|
case WebSocket.OPEN:
|
|
582
585
|
if (this.receivedReady) {
|
|
583
|
-
return ConnectionState
|
|
586
|
+
return exports.ConnectionState.CONNECTED;
|
|
584
587
|
}
|
|
585
588
|
|
|
586
|
-
return ConnectionState
|
|
589
|
+
return exports.ConnectionState.CONNECTING;
|
|
587
590
|
|
|
588
591
|
case WebSocket.CONNECTING:
|
|
589
|
-
return ConnectionState
|
|
592
|
+
return exports.ConnectionState.CONNECTING;
|
|
590
593
|
|
|
591
594
|
case WebSocket.CLOSING:
|
|
592
|
-
return ConnectionState
|
|
595
|
+
return exports.ConnectionState.DISCONNECTING;
|
|
593
596
|
|
|
594
597
|
default:
|
|
595
|
-
return ConnectionState
|
|
598
|
+
return exports.ConnectionState.DISCONNECTED;
|
|
596
599
|
}
|
|
597
600
|
}
|
|
598
601
|
|
|
599
|
-
return ConnectionState
|
|
602
|
+
return exports.ConnectionState.DISCONNECTED;
|
|
600
603
|
};
|
|
601
604
|
|
|
602
605
|
return TeckosClientWithJWT;
|
|
@@ -604,5 +607,4 @@ var TeckosClientWithJWT = /*#__PURE__*/function (_TeckosClient) {
|
|
|
604
607
|
|
|
605
608
|
exports.TeckosClient = TeckosClient;
|
|
606
609
|
exports.TeckosClientWithJWT = TeckosClientWithJWT;
|
|
607
|
-
exports.types = index;
|
|
608
610
|
//# sourceMappingURL=teckos-client.cjs.development.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teckos-client.cjs.development.js","sources":["../src/util/Converter.ts","../src/types/PacketType.ts","../src/types/ConnectionState.ts","../src/util/SocketEventEmitter.ts","../src/TeckosClient.ts","../src/TeckosClientWithJWT.ts"],"sourcesContent":["import { Packet } from '../types'\n\nconst enc = new TextEncoder()\nconst dec = new TextDecoder()\n\nconst encodePacket = (packet: Packet): ArrayBufferLike => enc.encode(JSON.stringify(packet))\nconst decodePacket = (buffer: ArrayBuffer): Packet => JSON.parse(dec.decode(buffer).toString())\nexport { encodePacket, decodePacket }\n","enum PacketType {\n EVENT,\n ACK,\n}\nexport default PacketType\n","enum ConnectionState {\n DISCONNECTED = 'disconnected',\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n DISCONNECTING = 'disconnecting',\n}\nexport default ConnectionState\n","class SocketEventEmitter<T extends string> {\n protected maxListeners: number = 50\n\n protected handlers: {\n [event: string]: ((...args: any[]) => void)[]\n } = {}\n\n public addListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n this.handlers[event].push(listener)\n return this\n }\n\n public once = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n const onceWrapper = () => {\n listener()\n this.off(event, onceWrapper)\n }\n this.handlers[event].push(onceWrapper)\n return this\n }\n\n public removeListener = (event: T, listener: (...args: any[]) => void): this => {\n if (this.handlers[event]) {\n this.handlers[event] = this.handlers[event].filter((handler) => handler !== listener)\n }\n return this\n }\n\n public off = (event: T, listener: (...args: any[]) => void): this =>\n this.removeListener(event, listener)\n\n public removeAllListeners = (event?: T): this => {\n if (event) {\n delete this.handlers[event]\n } else {\n this.handlers = {}\n }\n return this\n }\n\n public setMaxListeners = (n: number): this => {\n this.maxListeners = n\n return this\n }\n\n public getMaxListeners = (): number => this.maxListeners\n\n public listeners = (event: T): Function[] => {\n if (this.handlers[event]) {\n return [...this.handlers[event]]\n }\n return []\n }\n\n public rawListeners = (event: T): Function[] => [...this.handlers[event]]\n\n public listenerCount = (event: T): number => {\n if (this.handlers[event]) {\n return Object.keys(this.handlers[event]).length\n }\n return 0\n }\n\n public prependListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n this.handlers[event].unshift(listener)\n return this\n }\n\n public prependOnceListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n const onceWrapper = () => {\n listener()\n this.off(event, onceWrapper)\n }\n this.handlers[event].unshift(onceWrapper)\n return this\n }\n\n public eventNames = (): T[] => Object.keys(this.handlers) as T[]\n\n public on = (event: T, listener: (...args: any[]) => void): this =>\n this.addListener(event, listener)\n\n public emit = (event: T, ...args: any[]): boolean => {\n const listeners = this.listeners(event)\n if (listeners.length > 0) {\n listeners.forEach((listener) => {\n if (listener) listener(args)\n })\n return true\n }\n return false\n }\n}\n\nexport default SocketEventEmitter\n","import debug from 'debug'\nimport WebSocket from 'isomorphic-ws'\nimport { decodePacket, encodePacket } from './util/Converter'\nimport { ConnectionState, OptionalOptions, Options, Packet, PacketType, SocketEvent } from './types'\nimport ITeckosClient from './ITeckosClient'\nimport SocketEventEmitter from './util/SocketEventEmitter'\n\nconst d = debug('teckos:client')\n\nconst DEFAULT_OPTIONS: Options = {\n reconnection: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity,\n randomizationFactor: 0.5,\n timeout: 5000,\n debug: false,\n}\n\nclass TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosClient {\n protected readonly url: string\n\n protected readonly options: Options\n\n ws: WebSocket | undefined\n\n protected currentReconnectDelay: number\n\n protected currentReconnectionAttempts: number = 0\n\n protected acks: Map<number, (...args: any[]) => void> = new Map()\n\n protected fnId: number = 0\n\n protected connectionTimeout: any | undefined\n\n protected reconnectionTimeout: any | undefined\n\n constructor(url: string, options?: OptionalOptions) {\n super()\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n }\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.url = url\n }\n\n protected attachHandler = () => {\n if (this.ws) {\n this.ws.onopen = this.handleOpen\n this.ws.onerror = this.handleError\n this.ws.onclose = this.handleClose\n this.ws.onmessage = this.handleMessage\n }\n }\n\n public get webSocket() {\n return this.ws\n }\n\n public connect = () => {\n if (this.options.debug) d(`Connecting to ${this.url}...`)\n\n // This will try to connect immediately\n this.ws = new WebSocket(this.url)\n // Attach handlers\n this.attachHandler()\n // Handle timeout\n this.connectionTimeout = setTimeout(() => {\n if (this.ws && this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close()\n }\n }, this.options.timeout)\n }\n\n protected reconnect = () => {\n this.listeners('reconnect_attempt').forEach((listener) => listener())\n this.connect()\n }\n\n protected getConnectionState(): ConnectionState {\n if (this.ws) {\n switch (this.ws.readyState) {\n case WebSocket.OPEN:\n return ConnectionState.CONNECTED\n case WebSocket.CONNECTING:\n return ConnectionState.CONNECTING\n case WebSocket.CLOSING:\n return ConnectionState.DISCONNECTING\n default:\n return ConnectionState.DISCONNECTED\n }\n }\n return ConnectionState.DISCONNECTED\n }\n\n public get state(): ConnectionState {\n return this.getConnectionState()\n }\n\n get connected(): boolean {\n return this.getConnectionState() === ConnectionState.CONNECTED\n }\n\n get disconnected(): boolean {\n return this.getConnectionState() === ConnectionState.DISCONNECTED\n }\n\n public emit = (event: SocketEvent, ...args: any[]): boolean => {\n args.unshift(event)\n\n const packet: Packet = {\n type: PacketType.EVENT,\n data: args,\n }\n\n if (typeof args[args.length - 1] === 'function') {\n this.acks.set(this.fnId, args.pop())\n packet.id = this.fnId\n this.fnId += 1\n }\n\n return this.sendPackage(packet)\n }\n\n public send = (...args: any[]): boolean => {\n args.unshift('message')\n return this.sendPackage({\n type: PacketType.EVENT,\n data: args,\n })\n }\n\n public sendPackage = (packet: Packet): boolean => {\n if (this.ws !== undefined && this.ws.readyState === WebSocket.OPEN) {\n const buffer = encodePacket(packet)\n if (this.options.debug) d(`[${this.url}] Send packet: ${JSON.stringify(packet)}`)\n this.ws.send(buffer)\n return true\n }\n return false\n }\n\n protected handleMessage = (msg: WebSocket.MessageEvent) => {\n const packet =\n typeof msg.data === 'string'\n ? JSON.parse(msg.data)\n : decodePacket(msg.data as ArrayBuffer)\n if (this.options.debug) d(`[${this.url}] Got packet: ${JSON.stringify(packet)}`)\n if (packet.type === PacketType.EVENT) {\n const event = packet.data[0]\n const args = packet.data.slice(1)\n if (event) {\n this.listeners(event).forEach((listener) => listener(...args))\n } else {\n throw new Error(\n `[teckos-client@${this.url}] Got invalid event message: ${msg.data}`\n )\n }\n } else if (packet.type === PacketType.ACK && packet.id !== undefined) {\n // Call assigned function\n const ack = this.acks.get(packet.id)\n if (typeof ack === 'function') {\n ack.apply(this, packet.data)\n this.acks.delete(packet.id)\n }\n } else {\n throw new Error(`[teckos-client@${this.url}] Got invalid message type: ${packet.type}`)\n }\n }\n\n protected handleOpen = () => {\n if (this.currentReconnectionAttempts > 0) {\n // Reset reconnection settings to default\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.currentReconnectionAttempts = 0\n\n // Inform listeners\n if (this.options.debug) d(`[${this.url}] Reconnected!`)\n this.listeners('reconnect').forEach((listener) => listener())\n }\n // Inform listeners\n if (this.options.debug) d(`[${this.url}] Connected!`)\n this.listeners('connect').forEach((listener) => listener())\n }\n\n protected handleError = (error: WebSocket.ErrorEvent) => {\n if (this.handlers && this.handlers.error) {\n if (this.options.debug) d(`[${this.url}] Got error from server: ${error}`)\n this.handlers.error.forEach((listener) => listener(error))\n }\n }\n\n protected handleClose = () => {\n // Stop connection timeout\n if (this.connectionTimeout) {\n clearTimeout(this.connectionTimeout)\n }\n // Stop reconnection timeout\n if (this.reconnectionTimeout) {\n clearTimeout(this.reconnectionTimeout)\n }\n\n // Inform listeners\n if (this.currentReconnectionAttempts > 0) {\n if (this.options.debug)\n d(`[${this.url}] Reconnect #${this.currentReconnectionAttempts} failed!`)\n this.listeners('reconnect_error').forEach((listener) => {\n if (listener) listener()\n })\n } else {\n if (this.options.debug) d(`[${this.url}] Disconnected!`)\n this.listeners('disconnect').forEach((listener) => {\n if (listener) listener()\n })\n }\n\n if (this.options.reconnection) {\n // Apply reconnection logic\n this.currentReconnectionAttempts += 1\n\n if (\n this.options.reconnectionAttempts === Infinity ||\n this.currentReconnectionAttempts <= this.options.reconnectionAttempts\n ) {\n const timeout = Math.min(\n this.options.reconnectionDelayMax,\n this.currentReconnectDelay\n )\n // Increase reconnection delay\n this.currentReconnectDelay = Math.round(\n this.currentReconnectDelay +\n this.currentReconnectDelay * this.options.randomizationFactor\n )\n\n if (this.options.debug)\n d(\n `[${this.url}] Try reconnecting (${this.currentReconnectionAttempts}/${this.options.reconnectionAttempts}) in ${timeout}ms to ${this.url}...`\n )\n this.reconnectionTimeout = setTimeout(() => {\n this.reconnect()\n }, timeout)\n } else {\n if (this.options.debug)\n d(\n `[${this.url}] Reconnection maximum of ${this.options.reconnectionAttempts} reached`\n )\n this.listeners('reconnect_failed').forEach((listener) => listener())\n }\n }\n }\n\n public close = () => {\n if (this.options.debug) d(`[${this.url}] Closing connection (client-side)`)\n if (this.ws !== undefined) {\n this.ws.onclose = () => {}\n this.ws.close()\n }\n }\n\n public disconnect = () => {\n this.close()\n }\n}\n\nexport default TeckosClient\n","import debug from 'debug'\nimport WebSocket from 'isomorphic-ws'\nimport TeckosClient from './TeckosClient'\nimport { OptionalOptions, ConnectionState } from './types'\n\nconst d = debug('teckos:client')\n\nclass TeckosClientWithJWT extends TeckosClient {\n protected readonly token: string\n\n protected readonly initialData: any\n\n protected receivedReady: boolean = false\n\n constructor(url: string, options: OptionalOptions, token: string, initialData?: any) {\n super(url, options)\n this.token = token\n this.initialData = initialData\n }\n\n protected getConnectionState(): ConnectionState {\n if (this.ws) {\n switch (this.ws.readyState) {\n case WebSocket.OPEN:\n if (this.receivedReady) {\n return ConnectionState.CONNECTED\n }\n return ConnectionState.CONNECTING\n case WebSocket.CONNECTING:\n return ConnectionState.CONNECTING\n case WebSocket.CLOSING:\n return ConnectionState.DISCONNECTING\n default:\n return ConnectionState.DISCONNECTED\n }\n }\n return ConnectionState.DISCONNECTED\n }\n\n protected handleReadyEvent = () => {\n if (this.options.debug) d(`[${this.url}] Connected!`)\n this.receivedReady = false\n if (this.currentReconnectionAttempts > 0) {\n if (this.options.debug) d(`[${this.url}] Reconnected!`)\n this.listeners('reconnect').forEach((listener) => listener())\n // Reset reconnection settings to default\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.currentReconnectionAttempts = 0\n }\n this.listeners('connect').forEach((listener) => listener())\n }\n\n protected handleOpen = () => {\n this.receivedReady = false\n this.once('ready', this.handleReadyEvent)\n if (this.options.debug) d('Connection opened, sending token now')\n this.emit('token', {\n token: this.token,\n ...this.initialData,\n })\n }\n}\n\nexport default TeckosClientWithJWT\n"],"names":["enc","TextEncoder","dec","TextDecoder","encodePacket","packet","encode","JSON","stringify","decodePacket","buffer","parse","decode","toString","PacketType","ConnectionState","SocketEventEmitter","event","listener","Object","keys","handlers","length","maxListeners","Error","push","onceWrapper","off","filter","handler","removeListener","n","unshift","addListener","args","listeners","forEach","d","debug","DEFAULT_OPTIONS","reconnection","reconnectionDelay","reconnectionDelayMax","reconnectionAttempts","Infinity","randomizationFactor","timeout","TeckosClient","url","options","Map","ws","onopen","handleOpen","onerror","handleError","onclose","handleClose","onmessage","handleMessage","WebSocket","attachHandler","connectionTimeout","setTimeout","readyState","CONNECTING","close","connect","type","EVENT","data","acks","set","fnId","pop","id","sendPackage","undefined","OPEN","send","msg","slice","ACK","ack","get","apply","currentReconnectionAttempts","currentReconnectDelay","error","clearTimeout","reconnectionTimeout","Math","min","round","reconnect","getConnectionState","CONNECTED","CLOSING","DISCONNECTING","DISCONNECTED","TeckosClientWithJWT","token","initialData","receivedReady","once","handleReadyEvent","emit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"teckos-client.cjs.development.js","sources":["../src/util/Converter.ts","../src/types/PacketType.ts","../src/types/ConnectionState.ts","../src/util/SocketEventEmitter.ts","../src/TeckosClient.ts","../src/TeckosClientWithJWT.ts"],"sourcesContent":["import { Packet } from '../types'\n\nconst enc = new TextEncoder()\nconst dec = new TextDecoder()\n\nconst encodePacket = (packet: Packet): ArrayBufferLike => enc.encode(JSON.stringify(packet))\nconst decodePacket = (buffer: ArrayBuffer): Packet =>\n JSON.parse(dec.decode(buffer).toString()) as Packet\n\nexport { encodePacket, decodePacket }\n","enum PacketType {\n EVENT,\n ACK,\n}\nexport { PacketType }\n","enum ConnectionState {\n DISCONNECTED = 'disconnected',\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n DISCONNECTING = 'disconnecting',\n}\nexport { ConnectionState }\n","export type Listener = (...args: any[]) => void\n\nclass SocketEventEmitter<T extends string> {\n protected maxListeners = 50\n\n protected handlers: {\n [event: string]: ((...args: any[]) => void)[]\n } = {}\n\n public addListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n if (typeof listener !== 'function') {\n throw new Error('The given listener is not a function')\n }\n this.handlers[event] = this.handlers[event] || []\n this.handlers[event].push(listener)\n return this\n }\n\n public once = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n if (typeof listener !== 'function') {\n throw new Error('The given listener is not a function')\n }\n this.handlers[event] = this.handlers[event] || []\n const onceWrapper = () => {\n listener()\n this.off(event, onceWrapper)\n }\n this.handlers[event].push(onceWrapper)\n return this\n }\n\n public removeListener = (event: T, listener: (...args: any[]) => void): this => {\n if (this.handlers[event]) {\n this.handlers[event] = this.handlers[event].filter((handler) => handler !== listener)\n }\n return this\n }\n\n public off = (event: T, listener: (...args: any[]) => void): this =>\n this.removeListener(event, listener)\n\n public removeAllListeners = (event?: T): this => {\n if (event) {\n delete this.handlers[event]\n } else {\n this.handlers = {}\n }\n return this\n }\n\n public setMaxListeners = (n: number): this => {\n this.maxListeners = n\n return this\n }\n\n public getMaxListeners = (): number => this.maxListeners\n\n public listeners = (event: T): Listener[] => {\n if (this.handlers[event]) {\n return [...this.handlers[event]]\n }\n return []\n }\n\n public rawListeners = (event: T): Listener[] => [...this.handlers[event]]\n\n public listenerCount = (event: T): number => {\n if (this.handlers[event]) {\n return Object.keys(this.handlers[event]).length\n }\n return 0\n }\n\n public prependListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n this.handlers[event].unshift(listener)\n return this\n }\n\n public prependOnceListener = (event: T, listener: (...args: any[]) => void): this => {\n if (Object.keys(this.handlers).length === this.maxListeners) {\n throw new Error('Max listeners reached')\n }\n this.handlers[event] = this.handlers[event] || []\n const onceWrapper = () => {\n listener()\n this.off(event, onceWrapper)\n }\n this.handlers[event].unshift(onceWrapper)\n return this\n }\n\n public eventNames = (): T[] => Object.keys(this.handlers) as T[]\n\n public on = (event: T, listener: (...args: any[]) => void): this =>\n this.addListener(event, listener)\n\n public emit = (event: T, ...args: any[]): boolean => {\n const listeners = this.listeners(event)\n if (listeners.length > 0) {\n listeners.forEach((listener) => {\n if (listener) listener(args)\n })\n return true\n }\n return false\n }\n}\n\nexport { SocketEventEmitter }\n","import debug from 'debug'\nimport WebSocket from 'isomorphic-ws'\nimport { decodePacket, encodePacket } from './util/Converter'\nimport { ConnectionState, OptionalOptions, Options, Packet, PacketType, SocketEvent } from './types'\nimport { ITeckosClient } from './ITeckosClient'\nimport { SocketEventEmitter } from './util/SocketEventEmitter'\n\nconst d = debug('teckos:client')\n\nconst DEFAULT_OPTIONS: Options = {\n reconnection: true,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 5000,\n reconnectionAttempts: Infinity,\n randomizationFactor: 0.5,\n timeout: 5000,\n debug: false,\n}\n\nclass TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosClient {\n protected readonly url: string\n\n protected readonly options: Options\n\n ws: WebSocket | undefined\n\n protected currentReconnectDelay: number\n\n protected currentReconnectionAttempts = 0\n\n protected acks: Map<number, (...args: any[]) => void> = new Map()\n\n protected fnId = 0\n\n protected connectionTimeout: any | undefined\n\n protected reconnectionTimeout: any | undefined\n\n constructor(url: string, options?: OptionalOptions) {\n super()\n this.options = {\n ...DEFAULT_OPTIONS,\n ...options,\n }\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.url = url\n }\n\n protected attachHandler = (): void => {\n if (this.ws) {\n this.ws.onopen = this.handleOpen\n this.ws.onerror = this.handleError\n this.ws.onclose = this.handleClose\n this.ws.onmessage = this.handleMessage\n }\n }\n\n public get webSocket(): WebSocket | undefined {\n return this.ws\n }\n\n public connect = (): void => {\n if (this.options.debug) d(`Connecting to ${this.url}...`)\n\n // This will try to connect immediately\n this.ws = new WebSocket(this.url)\n // Attach handlers\n this.attachHandler()\n // Handle timeout\n this.connectionTimeout = setTimeout(() => {\n if (this.ws && this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.close()\n }\n }, this.options.timeout)\n }\n\n protected reconnect = (): void => {\n this.listeners('reconnect_attempt').forEach((listener) => listener())\n this.connect()\n }\n\n protected getConnectionState(): ConnectionState {\n if (this.ws) {\n switch (this.ws.readyState) {\n case WebSocket.OPEN:\n return ConnectionState.CONNECTED\n case WebSocket.CONNECTING:\n return ConnectionState.CONNECTING\n case WebSocket.CLOSING:\n return ConnectionState.DISCONNECTING\n default:\n return ConnectionState.DISCONNECTED\n }\n }\n return ConnectionState.DISCONNECTED\n }\n\n public get state(): ConnectionState {\n return this.getConnectionState()\n }\n\n get connected(): boolean {\n return this.getConnectionState() === ConnectionState.CONNECTED\n }\n\n get disconnected(): boolean {\n return this.getConnectionState() === ConnectionState.DISCONNECTED\n }\n\n public emit = (event: SocketEvent, ...args: any[]): boolean => {\n args.unshift(event)\n\n const packet: Packet = {\n type: PacketType.EVENT,\n data: args,\n }\n\n if (typeof args[args.length - 1] === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.acks.set(this.fnId, args.pop())\n packet.id = this.fnId\n this.fnId += 1\n }\n\n return this.sendPackage(packet)\n }\n\n public send = (...args: any[]): boolean => {\n args.unshift('message')\n return this.sendPackage({\n type: PacketType.EVENT,\n data: args,\n })\n }\n\n public sendPackage = (packet: Packet): boolean => {\n if (this.ws !== undefined && this.ws.readyState === WebSocket.OPEN) {\n const buffer = encodePacket(packet)\n if (this.options.debug) d(`[${this.url}] Send packet: ${JSON.stringify(packet)}`)\n this.ws.send(buffer)\n return true\n }\n return false\n }\n\n protected handleMessage = (msg: WebSocket.MessageEvent): void => {\n const packet =\n typeof msg.data === 'string'\n ? (JSON.parse(msg.data) as Packet)\n : decodePacket(msg.data as ArrayBuffer)\n if (this.options.debug) d(`[${this.url}] Got packet: ${JSON.stringify(packet)}`)\n if (packet.type === PacketType.EVENT) {\n const event = packet.data[0] as SocketEvent\n const args = packet.data.slice(1)\n if (event) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n this.listeners(event).forEach((listener) => listener(...args))\n } else {\n throw new Error(\n `[teckos-client@${this.url}] Got invalid event message: ${JSON.stringify(\n msg.data\n )}`\n )\n }\n } else if (packet.type === PacketType.ACK && packet.id !== undefined) {\n // Call assigned function\n const ack = this.acks.get(packet.id)\n if (typeof ack === 'function') {\n ack.apply(this, packet.data)\n this.acks.delete(packet.id)\n }\n } else {\n throw new Error(`[teckos-client@${this.url}] Got invalid message type: ${packet.type}`)\n }\n }\n\n protected handleOpen = (): void => {\n if (this.currentReconnectionAttempts > 0) {\n // Reset reconnection settings to default\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.currentReconnectionAttempts = 0\n\n // Inform listeners\n if (this.options.debug) d(`[${this.url}] Reconnected!`)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n this.listeners('reconnect').forEach((listener) => listener())\n }\n // Inform listeners\n if (this.options.debug) d(`[${this.url}] Connected!`)\n this.listeners('connect').forEach((listener) => listener())\n }\n\n protected handleError = (error: WebSocket.ErrorEvent): void => {\n if (this.handlers && this.handlers.error) {\n if (this.options.debug)\n d(`[${this.url}] Got error from server: ${JSON.stringify(error)}`)\n this.handlers.error.forEach((listener) => listener(error))\n }\n }\n\n protected handleClose = (): void => {\n // Stop connection timeout\n if (this.connectionTimeout) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n clearTimeout(this.connectionTimeout)\n }\n // Stop reconnection timeout\n if (this.reconnectionTimeout) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n clearTimeout(this.reconnectionTimeout)\n }\n\n // Inform listeners\n if (this.currentReconnectionAttempts > 0) {\n if (this.options.debug)\n d(`[${this.url}] Reconnect #${this.currentReconnectionAttempts} failed!`)\n this.listeners('reconnect_error').forEach((listener) => {\n if (listener) listener()\n })\n } else {\n if (this.options.debug) d(`[${this.url}] Disconnected!`)\n this.listeners('disconnect').forEach((listener) => {\n if (listener) listener()\n })\n }\n\n if (this.options.reconnection) {\n // Apply reconnection logic\n this.currentReconnectionAttempts += 1\n\n if (\n this.options.reconnectionAttempts === Infinity ||\n this.currentReconnectionAttempts <= this.options.reconnectionAttempts\n ) {\n const timeout = Math.min(\n this.options.reconnectionDelayMax,\n this.currentReconnectDelay\n )\n // Increase reconnection delay\n this.currentReconnectDelay = Math.round(\n this.currentReconnectDelay +\n this.currentReconnectDelay * this.options.randomizationFactor\n )\n\n if (this.options.debug)\n d(\n `[${this.url}] Try reconnecting (${this.currentReconnectionAttempts}/${this.options.reconnectionAttempts}) in ${timeout}ms to ${this.url}...`\n )\n this.reconnectionTimeout = setTimeout(() => {\n this.reconnect()\n }, timeout)\n } else {\n if (this.options.debug)\n d(\n `[${this.url}] Reconnection maximum of ${this.options.reconnectionAttempts} reached`\n )\n this.listeners('reconnect_failed').forEach((listener) => listener())\n }\n }\n }\n\n public close = (): void => {\n if (this.options.debug) d(`[${this.url}] Closing connection (client-side)`)\n if (this.ws !== undefined) {\n this.ws.onclose = () => {}\n this.ws.close()\n }\n }\n\n public disconnect = (): void => {\n this.close()\n }\n}\n\nexport { TeckosClient }\n","import debug from 'debug'\nimport WebSocket from 'isomorphic-ws'\nimport { TeckosClient } from './TeckosClient'\nimport { OptionalOptions, ConnectionState } from './types'\n\nconst d = debug('teckos:client')\n\nclass TeckosClientWithJWT extends TeckosClient {\n protected readonly token: string\n\n protected readonly initialData: any\n\n protected receivedReady = false\n\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n constructor(url: string, options: OptionalOptions, token: string, initialData?: any) {\n super(url, options)\n this.token = token\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.initialData = initialData\n this.on('disconnect', () => {\n this.receivedReady = false\n })\n }\n\n protected getConnectionState(): ConnectionState {\n if (this.ws) {\n switch (this.ws.readyState) {\n case WebSocket.OPEN:\n if (this.receivedReady) {\n return ConnectionState.CONNECTED\n }\n return ConnectionState.CONNECTING\n case WebSocket.CONNECTING:\n return ConnectionState.CONNECTING\n case WebSocket.CLOSING:\n return ConnectionState.DISCONNECTING\n default:\n return ConnectionState.DISCONNECTED\n }\n }\n return ConnectionState.DISCONNECTED\n }\n\n protected handleReadyEvent = (): void => {\n if (this.options.debug) d(`[${this.url}] Connected!`)\n this.receivedReady = true\n if (this.currentReconnectionAttempts > 0) {\n if (this.options.debug) d(`[${this.url}] Reconnected!`)\n this.listeners('reconnect').forEach((listener) => listener())\n // Reset reconnection settings to default\n this.currentReconnectDelay = this.options.reconnectionDelay\n this.currentReconnectionAttempts = 0\n }\n this.listeners('connect').forEach((listener) => listener())\n }\n\n protected handleOpen = (): void => {\n this.receivedReady = false\n this.once('ready', this.handleReadyEvent)\n if (this.options.debug) d('Connection opened, sending token now')\n this.emit('token', {\n token: this.token,\n ...this.initialData,\n })\n }\n}\n\nexport { TeckosClientWithJWT }\n"],"names":["enc","TextEncoder","dec","TextDecoder","encodePacket","packet","encode","JSON","stringify","decodePacket","buffer","parse","decode","toString","PacketType","ConnectionState","SocketEventEmitter","event","listener","Object","keys","handlers","length","maxListeners","Error","push","onceWrapper","off","filter","handler","removeListener","n","unshift","addListener","args","listeners","forEach","d","debug","DEFAULT_OPTIONS","reconnection","reconnectionDelay","reconnectionDelayMax","reconnectionAttempts","Infinity","randomizationFactor","timeout","TeckosClient","url","options","Map","ws","onopen","handleOpen","onerror","handleError","onclose","handleClose","onmessage","handleMessage","WebSocket","attachHandler","connectionTimeout","setTimeout","readyState","CONNECTING","close","connect","type","EVENT","data","acks","set","fnId","pop","id","sendPackage","undefined","OPEN","send","msg","slice","ACK","ack","get","apply","currentReconnectionAttempts","currentReconnectDelay","error","clearTimeout","reconnectionTimeout","Math","min","round","reconnect","getConnectionState","CONNECTED","CLOSING","DISCONNECTING","DISCONNECTED","TeckosClientWithJWT","token","initialData","receivedReady","once","handleReadyEvent","emit","on"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var n=e(require("debug")),t=e(require("isomorphic-ws"));function r(){return(r=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e}).apply(this,arguments)}function o(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,(Object.setPrototypeOf||function(e,n){return e.__proto__=n,e})(e,n)}var c,
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var n=e(require("debug")),t=e(require("isomorphic-ws"));function r(){return(r=Object.assign||function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e}).apply(this,arguments)}function o(e,n){e.prototype=Object.create(n.prototype),e.prototype.constructor=e,(Object.setPrototypeOf||function(e,n){return e.__proto__=n,e})(e,n)}var i,c,s=new TextEncoder,a=new TextDecoder;(i=exports.PacketType||(exports.PacketType={}))[i.EVENT=0]="EVENT",i[i.ACK=1]="ACK",(c=exports.ConnectionState||(exports.ConnectionState={})).DISCONNECTED="disconnected",c.CONNECTING="connecting",c.CONNECTED="connected",c.DISCONNECTING="disconnecting";var u=function(){var e=this;this.maxListeners=50,this.handlers={},this.addListener=function(n,t){if(Object.keys(e.handlers).length===e.maxListeners)throw new Error("Max listeners reached");if("function"!=typeof t)throw new Error("The given listener is not a function");return e.handlers[n]=e.handlers[n]||[],e.handlers[n].push(t),e},this.once=function(n,t){if(Object.keys(e.handlers).length===e.maxListeners)throw new Error("Max listeners reached");if("function"!=typeof t)throw new Error("The given listener is not a function");return e.handlers[n]=e.handlers[n]||[],e.handlers[n].push((function r(){t(),e.off(n,r)})),e},this.removeListener=function(n,t){return e.handlers[n]&&(e.handlers[n]=e.handlers[n].filter((function(e){return e!==t}))),e},this.off=function(n,t){return e.removeListener(n,t)},this.removeAllListeners=function(n){return n?delete e.handlers[n]:e.handlers={},e},this.setMaxListeners=function(n){return e.maxListeners=n,e},this.getMaxListeners=function(){return e.maxListeners},this.listeners=function(n){return e.handlers[n]?[].concat(e.handlers[n]):[]},this.rawListeners=function(n){return[].concat(e.handlers[n])},this.listenerCount=function(n){return e.handlers[n]?Object.keys(e.handlers[n]).length:0},this.prependListener=function(n,t){if(Object.keys(e.handlers).length===e.maxListeners)throw new Error("Max listeners reached");return e.handlers[n]=e.handlers[n]||[],e.handlers[n].unshift(t),e},this.prependOnceListener=function(n,t){if(Object.keys(e.handlers).length===e.maxListeners)throw new Error("Max listeners reached");return e.handlers[n]=e.handlers[n]||[],e.handlers[n].unshift((function r(){t(),e.off(n,r)})),e},this.eventNames=function(){return Object.keys(e.handlers)},this.on=function(n,t){return e.addListener(n,t)},this.emit=function(n){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];var i=e.listeners(n);return i.length>0&&(i.forEach((function(e){e&&e(r)})),!0)}},l=n("teckos:client"),d={reconnection:!0,reconnectionDelay:1e3,reconnectionDelayMax:5e3,reconnectionAttempts:Infinity,randomizationFactor:.5,timeout:5e3,debug:!1},f=function(e){function n(n,o){var i;return(i=e.call(this)||this).currentReconnectionAttempts=0,i.acks=new Map,i.fnId=0,i.attachHandler=function(){i.ws&&(i.ws.onopen=i.handleOpen,i.ws.onerror=i.handleError,i.ws.onclose=i.handleClose,i.ws.onmessage=i.handleMessage)},i.connect=function(){i.options.debug&&l("Connecting to "+i.url+"..."),i.ws=new t(i.url),i.attachHandler(),i.connectionTimeout=setTimeout((function(){i.ws&&i.ws.readyState===t.CONNECTING&&i.ws.close()}),i.options.timeout)},i.reconnect=function(){i.listeners("reconnect_attempt").forEach((function(e){return e()})),i.connect()},i.emit=function(e){for(var n=arguments.length,t=new Array(n>1?n-1:0),r=1;r<n;r++)t[r-1]=arguments[r];t.unshift(e);var o={type:exports.PacketType.EVENT,data:t};return"function"==typeof t[t.length-1]&&(i.acks.set(i.fnId,t.pop()),o.id=i.fnId,i.fnId+=1),i.sendPackage(o)},i.send=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];return n.unshift("message"),i.sendPackage({type:exports.PacketType.EVENT,data:n})},i.sendPackage=function(e){if(void 0!==i.ws&&i.ws.readyState===t.OPEN){var n=function(e){return s.encode(JSON.stringify(e))}(e);return i.options.debug&&l("["+i.url+"] Send packet: "+JSON.stringify(e)),i.ws.send(n),!0}return!1},i.handleMessage=function(e){var n="string"==typeof e.data?JSON.parse(e.data):JSON.parse(a.decode(e.data).toString());if(i.options.debug&&l("["+i.url+"] Got packet: "+JSON.stringify(n)),n.type===exports.PacketType.EVENT){var t=n.data[0],r=n.data.slice(1);if(!t)throw new Error("[teckos-client@"+i.url+"] Got invalid event message: "+JSON.stringify(e.data));i.listeners(t).forEach((function(e){return e.apply(void 0,r)}))}else{if(n.type!==exports.PacketType.ACK||void 0===n.id)throw new Error("[teckos-client@"+i.url+"] Got invalid message type: "+n.type);var o=i.acks.get(n.id);"function"==typeof o&&(o.apply(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(i),n.data),i.acks.delete(n.id))}},i.handleOpen=function(){i.currentReconnectionAttempts>0&&(i.currentReconnectDelay=i.options.reconnectionDelay,i.currentReconnectionAttempts=0,i.options.debug&&l("["+i.url+"] Reconnected!"),i.listeners("reconnect").forEach((function(e){return e()}))),i.options.debug&&l("["+i.url+"] Connected!"),i.listeners("connect").forEach((function(e){return e()}))},i.handleError=function(e){i.handlers&&i.handlers.error&&(i.options.debug&&l("["+i.url+"] Got error from server: "+JSON.stringify(e)),i.handlers.error.forEach((function(n){return n(e)})))},i.handleClose=function(){if(i.connectionTimeout&&clearTimeout(i.connectionTimeout),i.reconnectionTimeout&&clearTimeout(i.reconnectionTimeout),i.currentReconnectionAttempts>0?(i.options.debug&&l("["+i.url+"] Reconnect #"+i.currentReconnectionAttempts+" failed!"),i.listeners("reconnect_error").forEach((function(e){e&&e()}))):(i.options.debug&&l("["+i.url+"] Disconnected!"),i.listeners("disconnect").forEach((function(e){e&&e()}))),i.options.reconnection)if(i.currentReconnectionAttempts+=1,Infinity===i.options.reconnectionAttempts||i.currentReconnectionAttempts<=i.options.reconnectionAttempts){var e=Math.min(i.options.reconnectionDelayMax,i.currentReconnectDelay);i.currentReconnectDelay=Math.round(i.currentReconnectDelay+i.currentReconnectDelay*i.options.randomizationFactor),i.options.debug&&l("["+i.url+"] Try reconnecting ("+i.currentReconnectionAttempts+"/"+i.options.reconnectionAttempts+") in "+e+"ms to "+i.url+"..."),i.reconnectionTimeout=setTimeout((function(){i.reconnect()}),e)}else i.options.debug&&l("["+i.url+"] Reconnection maximum of "+i.options.reconnectionAttempts+" reached"),i.listeners("reconnect_failed").forEach((function(e){return e()}))},i.close=function(){i.options.debug&&l("["+i.url+"] Closing connection (client-side)"),void 0!==i.ws&&(i.ws.onclose=function(){},i.ws.close())},i.disconnect=function(){i.close()},i.options=r({},d,o),i.currentReconnectDelay=i.options.reconnectionDelay,i.url=n,i}var i;return o(n,e),n.prototype.getConnectionState=function(){if(this.ws)switch(this.ws.readyState){case t.OPEN:return exports.ConnectionState.CONNECTED;case t.CONNECTING:return exports.ConnectionState.CONNECTING;case t.CLOSING:return exports.ConnectionState.DISCONNECTING;default:return exports.ConnectionState.DISCONNECTED}return exports.ConnectionState.DISCONNECTED},(i=[{key:"webSocket",get:function(){return this.ws}},{key:"state",get:function(){return this.getConnectionState()}},{key:"connected",get:function(){return this.getConnectionState()===exports.ConnectionState.CONNECTED}},{key:"disconnected",get:function(){return this.getConnectionState()===exports.ConnectionState.DISCONNECTED}}])&&function(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,i),n}(u),h=n("teckos:client"),p=function(e){function n(n,t,o,i){var c;return(c=e.call(this,n,t)||this).receivedReady=!1,c.handleReadyEvent=function(){c.options.debug&&h("["+c.url+"] Connected!"),c.receivedReady=!0,c.currentReconnectionAttempts>0&&(c.options.debug&&h("["+c.url+"] Reconnected!"),c.listeners("reconnect").forEach((function(e){return e()})),c.currentReconnectDelay=c.options.reconnectionDelay,c.currentReconnectionAttempts=0),c.listeners("connect").forEach((function(e){return e()}))},c.handleOpen=function(){c.receivedReady=!1,c.once("ready",c.handleReadyEvent),c.options.debug&&h("Connection opened, sending token now"),c.emit("token",r({token:c.token},c.initialData))},c.token=o,c.initialData=i,c.on("disconnect",(function(){c.receivedReady=!1})),c}return o(n,e),n.prototype.getConnectionState=function(){if(this.ws)switch(this.ws.readyState){case t.OPEN:return this.receivedReady?exports.ConnectionState.CONNECTED:exports.ConnectionState.CONNECTING;case t.CONNECTING:return exports.ConnectionState.CONNECTING;case t.CLOSING:return exports.ConnectionState.DISCONNECTING;default:return exports.ConnectionState.DISCONNECTED}return exports.ConnectionState.DISCONNECTED},n}(f);exports.TeckosClient=f,exports.TeckosClientWithJWT=p;
|
|
2
2
|
//# sourceMappingURL=teckos-client.cjs.production.min.js.map
|