teckos-client 0.2.3 → 0.3.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 (55) hide show
  1. package/dist/index.js +456 -5
  2. package/dist/index.min.js +1 -0
  3. package/es/index.js +459 -0
  4. package/es/index.mjs +1 -0
  5. package/lib/index.js +484 -0
  6. package/package.json +63 -44
  7. package/src/ITeckosClient.js +2 -0
  8. package/src/ITeckosClient.js.map +1 -0
  9. package/src/ITeckosClient.ts +3 -3
  10. package/src/TeckosClient.js +235 -0
  11. package/src/TeckosClient.js.map +1 -0
  12. package/src/TeckosClient.ts +40 -32
  13. package/src/TeckosClientWithJWT.js +63 -0
  14. package/src/TeckosClientWithJWT.js.map +1 -0
  15. package/src/TeckosClientWithJWT.ts +8 -10
  16. package/src/index.js +8 -0
  17. package/src/index.js.map +1 -0
  18. package/src/index.ts +3 -3
  19. package/src/types/ConnectionState.js +9 -0
  20. package/src/types/ConnectionState.js.map +1 -0
  21. package/src/types/Options.js +2 -0
  22. package/src/types/Options.js.map +1 -0
  23. package/src/types/Packet.js +2 -0
  24. package/src/types/Packet.js.map +1 -0
  25. package/src/types/PacketType.js +7 -0
  26. package/src/types/PacketType.js.map +1 -0
  27. package/src/types/SocketEvent.js +2 -0
  28. package/src/types/SocketEvent.js.map +1 -0
  29. package/src/types/index.js +4 -0
  30. package/src/types/index.js.map +1 -0
  31. package/src/util/Converter.js +6 -0
  32. package/src/util/Converter.js.map +1 -0
  33. package/src/util/SocketEventEmitter.js +99 -0
  34. package/src/util/SocketEventEmitter.js.map +1 -0
  35. package/src/util/formatProdErrorMessage.ts +16 -0
  36. package/{dist → types}/ITeckosClient.d.ts +3 -3
  37. package/{dist → types}/TeckosClient.d.ts +6 -6
  38. package/{dist → types}/TeckosClientWithJWT.d.ts +0 -0
  39. package/types/index.d.ts +9 -0
  40. package/{dist → types}/types/ConnectionState.d.ts +0 -0
  41. package/{dist → types}/types/Options.d.ts +0 -0
  42. package/{dist → types}/types/Packet.d.ts +0 -0
  43. package/{dist → types}/types/PacketType.d.ts +0 -0
  44. package/{dist → types}/types/SocketEvent.d.ts +0 -0
  45. package/{dist → types}/types/index.d.ts +0 -0
  46. package/{dist → types}/util/Converter.d.ts +0 -0
  47. package/{dist → types}/util/SocketEventEmitter.d.ts +1 -1
  48. package/types/util/formatProdErrorMessage.d.ts +9 -0
  49. package/dist/index.d.ts +0 -9
  50. package/dist/teckos-client.cjs.development.js +0 -614
  51. package/dist/teckos-client.cjs.development.js.map +0 -1
  52. package/dist/teckos-client.cjs.production.min.js +0 -2
  53. package/dist/teckos-client.cjs.production.min.js.map +0 -1
  54. package/dist/teckos-client.esm.js +0 -611
  55. package/dist/teckos-client.esm.js.map +0 -1
@@ -0,0 +1,235 @@
1
+ /* eslint-disable no-console */
2
+ import * as IsomorphicWebSocket from 'isomorphic-ws';
3
+ import { decodePacket, encodePacket } from './util/Converter';
4
+ import { SocketEventEmitter } from './util/SocketEventEmitter';
5
+ import { ConnectionState, PacketType } from './types';
6
+ const DEFAULT_OPTIONS = {
7
+ reconnection: true,
8
+ reconnectionDelay: 1000,
9
+ reconnectionDelayMax: 5000,
10
+ reconnectionAttempts: Infinity,
11
+ randomizationFactor: 0.5,
12
+ timeout: 5000,
13
+ debug: false,
14
+ };
15
+ class TeckosClient extends SocketEventEmitter {
16
+ url;
17
+ options;
18
+ ws;
19
+ currentReconnectDelay;
20
+ currentReconnectionAttempts = 0;
21
+ acks = new Map();
22
+ fnId = 0;
23
+ connectionTimeout;
24
+ reconnectionTimeout;
25
+ constructor(url, options) {
26
+ super();
27
+ this.options = {
28
+ ...DEFAULT_OPTIONS,
29
+ ...options,
30
+ };
31
+ this.currentReconnectDelay = this.options.reconnectionDelay;
32
+ this.url = url;
33
+ }
34
+ attachHandler = () => {
35
+ if (this.ws) {
36
+ this.ws.onopen = this.handleOpen;
37
+ this.ws.onerror = this.handleError;
38
+ this.ws.onclose = this.handleClose;
39
+ this.ws.onmessage = this.handleMessage;
40
+ }
41
+ };
42
+ get webSocket() {
43
+ return this.ws;
44
+ }
45
+ connect = () => {
46
+ if (this.options.debug)
47
+ console.log(`(teckos:client) Connecting to ${this.url}...`);
48
+ // This will try to connect immediately
49
+ // eslint-disable-next-line new-cap
50
+ this.ws = new IsomorphicWebSocket.WebSocket(this.url);
51
+ // Attach handlers
52
+ this.attachHandler();
53
+ // Handle timeout
54
+ this.connectionTimeout = setTimeout(() => {
55
+ if (this.ws && this.ws.readyState === 0 /* = CONNECTING */) {
56
+ this.ws.close();
57
+ }
58
+ }, this.options.timeout);
59
+ };
60
+ reconnect = () => {
61
+ this.listeners('reconnect_attempt').forEach((listener) => listener());
62
+ this.connect();
63
+ };
64
+ getConnectionState() {
65
+ if (this.ws) {
66
+ switch (this.ws.readyState) {
67
+ case 0 /* = CONNECTING */:
68
+ return ConnectionState.CONNECTING;
69
+ case 1 /* = OPEN */:
70
+ return ConnectionState.CONNECTED;
71
+ case 2 /* = CLOSING */:
72
+ return ConnectionState.DISCONNECTING;
73
+ default: /* 3 = CLOSED */
74
+ return ConnectionState.DISCONNECTED;
75
+ }
76
+ }
77
+ return ConnectionState.DISCONNECTED;
78
+ }
79
+ get state() {
80
+ return this.getConnectionState();
81
+ }
82
+ get connected() {
83
+ return this.getConnectionState() === ConnectionState.CONNECTED;
84
+ }
85
+ get disconnected() {
86
+ return this.getConnectionState() === ConnectionState.DISCONNECTED;
87
+ }
88
+ emit = (event, ...args) => {
89
+ args.unshift(event);
90
+ const packet = {
91
+ type: PacketType.EVENT,
92
+ data: args,
93
+ };
94
+ if (typeof args[args.length - 1] === 'function') {
95
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
96
+ this.acks.set(this.fnId, args.pop());
97
+ packet.id = this.fnId;
98
+ this.fnId += 1;
99
+ }
100
+ return this.sendPackage(packet);
101
+ };
102
+ send = (...args) => {
103
+ args.unshift('message');
104
+ return this.sendPackage({
105
+ type: PacketType.EVENT,
106
+ data: args,
107
+ });
108
+ };
109
+ sendPackage = (packet) => {
110
+ if (this.ws !== undefined && this.ws.readyState === 1 /* = OPEN */) {
111
+ const buffer = encodePacket(packet);
112
+ if (this.options.debug)
113
+ console.log(`(teckos:client) [${this.url}] Send packet: ${JSON.stringify(packet)}`);
114
+ this.ws.send(buffer);
115
+ return true;
116
+ }
117
+ return false;
118
+ };
119
+ handleMessage = (msg) => {
120
+ const packet = typeof msg.data === 'string'
121
+ ? JSON.parse(msg.data)
122
+ : decodePacket(msg.data);
123
+ if (this.options.debug)
124
+ console.log(`(teckos:client) [${this.url}] Got packet: ${JSON.stringify(packet)}`);
125
+ if (packet.type === PacketType.EVENT) {
126
+ const event = packet.data[0];
127
+ const args = packet.data.slice(1);
128
+ if (event) {
129
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
130
+ this.listeners(event).forEach((listener) => listener(...args));
131
+ }
132
+ else {
133
+ throw new Error(`(teckos-client) [${this.url}] Got invalid event message: ${JSON.stringify(msg.data)}`);
134
+ }
135
+ }
136
+ else if (packet.type === PacketType.ACK && packet.id !== undefined) {
137
+ // Call assigned function
138
+ const ack = this.acks.get(packet.id);
139
+ if (typeof ack === 'function') {
140
+ ack.apply(this, packet.data);
141
+ this.acks.delete(packet.id);
142
+ }
143
+ }
144
+ else {
145
+ throw new Error(`(teckos-client) [${this.url}] Got invalid message type: ${packet.type}`);
146
+ }
147
+ };
148
+ handleOpen = () => {
149
+ if (this.currentReconnectionAttempts > 0) {
150
+ // Reset reconnection settings to default
151
+ this.currentReconnectDelay = this.options.reconnectionDelay;
152
+ this.currentReconnectionAttempts = 0;
153
+ // Inform listeners
154
+ if (this.options.debug)
155
+ console.log(`(teckos:client) [${this.url}] Reconnected!`);
156
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
157
+ this.listeners('reconnect').forEach((listener) => listener());
158
+ }
159
+ // Inform listeners
160
+ if (this.options.debug)
161
+ console.log(`(teckos:client) [${this.url}] Connected!`);
162
+ this.listeners('connect').forEach((listener) => listener());
163
+ };
164
+ handleError = (error) => {
165
+ if (this.handlers && this.handlers.error) {
166
+ if (this.options.debug)
167
+ console.log(`(teckos:client) [${this.url}] Got error from server: ${JSON.stringify(error)}`);
168
+ this.handlers.error.forEach((listener) => listener(error));
169
+ }
170
+ };
171
+ handleClose = () => {
172
+ // Stop connection timeout
173
+ if (this.connectionTimeout) {
174
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
175
+ clearTimeout(this.connectionTimeout);
176
+ }
177
+ // Stop reconnection timeout
178
+ if (this.reconnectionTimeout) {
179
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
180
+ clearTimeout(this.reconnectionTimeout);
181
+ }
182
+ // Inform listeners
183
+ if (this.currentReconnectionAttempts > 0) {
184
+ if (this.options.debug)
185
+ console.log(`(teckos:client) [${this.url}] Reconnect #${this.currentReconnectionAttempts} failed!`);
186
+ this.listeners('reconnect_error').forEach((listener) => {
187
+ if (listener)
188
+ listener();
189
+ });
190
+ }
191
+ else {
192
+ if (this.options.debug)
193
+ console.log(`(teckos:client) [${this.url}] Disconnected!`);
194
+ this.listeners('disconnect').forEach((listener) => {
195
+ if (listener)
196
+ listener();
197
+ });
198
+ }
199
+ if (this.options.reconnection) {
200
+ // Apply reconnection logic
201
+ this.currentReconnectionAttempts += 1;
202
+ if (this.options.reconnectionAttempts === Infinity ||
203
+ this.currentReconnectionAttempts <= this.options.reconnectionAttempts) {
204
+ const timeout = Math.min(this.options.reconnectionDelayMax, this.currentReconnectDelay);
205
+ // Increase reconnection delay
206
+ this.currentReconnectDelay = Math.round(this.currentReconnectDelay +
207
+ this.currentReconnectDelay * this.options.randomizationFactor);
208
+ if (this.options.debug)
209
+ console.log(`(teckos:client) [${this.url}] Try reconnecting (${this.currentReconnectionAttempts}/${this.options.reconnectionAttempts}) in ${timeout}ms to ${this.url}...`);
210
+ this.reconnectionTimeout = setTimeout(() => {
211
+ this.reconnect();
212
+ }, timeout);
213
+ }
214
+ else {
215
+ if (this.options.debug)
216
+ console.log(`(teckos:client) [${this.url}] Reconnection maximum of ${this.options.reconnectionAttempts} reached`);
217
+ this.listeners('reconnect_failed').forEach((listener) => listener());
218
+ }
219
+ }
220
+ };
221
+ close = () => {
222
+ if (this.options.debug)
223
+ console.log(`(teckos:client) [${this.url}] Closing connection (client-side)`);
224
+ if (this.ws !== undefined) {
225
+ this.ws.onclose = () => { };
226
+ this.ws.close();
227
+ this.listeners('disconnect').forEach((listener) => listener());
228
+ }
229
+ };
230
+ disconnect = () => {
231
+ this.close();
232
+ };
233
+ }
234
+ export { TeckosClient };
235
+ //# sourceMappingURL=TeckosClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeckosClient.js","sourceRoot":"","sources":["TeckosClient.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,9 @@
1
- import debug from 'debug'
2
- import WebSocket from 'isomorphic-ws'
1
+ /* eslint-disable no-console */
2
+ import * as IsomorphicWebSocket from 'isomorphic-ws'
3
3
  import { decodePacket, encodePacket } from './util/Converter'
4
- import { ConnectionState, OptionalOptions, Options, Packet, PacketType, SocketEvent } from './types'
5
4
  import { ITeckosClient } from './ITeckosClient'
6
5
  import { SocketEventEmitter } from './util/SocketEventEmitter'
7
-
8
- const d = debug('teckos:client')
6
+ import { OptionalOptions, Options, SocketEvent, ConnectionState, Packet, PacketType } from './types'
9
7
 
10
8
  const DEFAULT_OPTIONS: Options = {
11
9
  reconnection: true,
@@ -22,7 +20,7 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
22
20
 
23
21
  protected readonly options: Options
24
22
 
25
- ws: WebSocket | undefined
23
+ ws: IsomorphicWebSocket.WebSocket | undefined
26
24
 
27
25
  protected currentReconnectDelay: number
28
26
 
@@ -55,20 +53,21 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
55
53
  }
56
54
  }
57
55
 
58
- public get webSocket(): WebSocket | undefined {
56
+ public get webSocket(): IsomorphicWebSocket.WebSocket | undefined {
59
57
  return this.ws
60
58
  }
61
59
 
62
60
  public connect = (): void => {
63
- if (this.options.debug) d(`Connecting to ${this.url}...`)
61
+ if (this.options.debug) console.log(`(teckos:client) Connecting to ${this.url}...`)
64
62
 
65
63
  // This will try to connect immediately
66
- this.ws = new WebSocket(this.url)
64
+ // eslint-disable-next-line new-cap
65
+ this.ws = new IsomorphicWebSocket.WebSocket(this.url)
67
66
  // Attach handlers
68
67
  this.attachHandler()
69
68
  // Handle timeout
70
69
  this.connectionTimeout = setTimeout(() => {
71
- if (this.ws && this.ws.readyState === WebSocket.CONNECTING) {
70
+ if (this.ws && this.ws.readyState === 0 /* = CONNECTING */) {
72
71
  this.ws.close()
73
72
  }
74
73
  }, this.options.timeout)
@@ -82,13 +81,13 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
82
81
  protected getConnectionState(): ConnectionState {
83
82
  if (this.ws) {
84
83
  switch (this.ws.readyState) {
85
- case WebSocket.OPEN:
86
- return ConnectionState.CONNECTED
87
- case WebSocket.CONNECTING:
84
+ case 0 /* = CONNECTING */:
88
85
  return ConnectionState.CONNECTING
89
- case WebSocket.CLOSING:
86
+ case 1 /* = OPEN */:
87
+ return ConnectionState.CONNECTED
88
+ case 2 /* = CLOSING */:
90
89
  return ConnectionState.DISCONNECTING
91
- default:
90
+ default: /* 3 = CLOSED */
92
91
  return ConnectionState.DISCONNECTED
93
92
  }
94
93
  }
@@ -134,21 +133,23 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
134
133
  }
135
134
 
136
135
  public sendPackage = (packet: Packet): boolean => {
137
- if (this.ws !== undefined && this.ws.readyState === WebSocket.OPEN) {
136
+ if (this.ws !== undefined && this.ws.readyState === 1 /* = OPEN */) {
138
137
  const buffer = encodePacket(packet)
139
- if (this.options.debug) d(`[${this.url}] Send packet: ${JSON.stringify(packet)}`)
138
+ if (this.options.debug)
139
+ console.log(`(teckos:client) [${this.url}] Send packet: ${JSON.stringify(packet)}`)
140
140
  this.ws.send(buffer)
141
141
  return true
142
142
  }
143
143
  return false
144
144
  }
145
145
 
146
- protected handleMessage = (msg: WebSocket.MessageEvent): void => {
146
+ protected handleMessage = (msg: IsomorphicWebSocket.MessageEvent): void => {
147
147
  const packet =
148
148
  typeof msg.data === 'string'
149
149
  ? (JSON.parse(msg.data) as Packet)
150
150
  : decodePacket(msg.data as ArrayBuffer)
151
- if (this.options.debug) d(`[${this.url}] Got packet: ${JSON.stringify(packet)}`)
151
+ if (this.options.debug)
152
+ console.log(`(teckos:client) [${this.url}] Got packet: ${JSON.stringify(packet)}`)
152
153
  if (packet.type === PacketType.EVENT) {
153
154
  const event = packet.data[0] as SocketEvent
154
155
  const args = packet.data.slice(1)
@@ -157,7 +158,7 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
157
158
  this.listeners(event).forEach((listener) => listener(...args))
158
159
  } else {
159
160
  throw new Error(
160
- `[teckos-client@${this.url}] Got invalid event message: ${JSON.stringify(
161
+ `(teckos-client) [${this.url}] Got invalid event message: ${JSON.stringify(
161
162
  msg.data
162
163
  )}`
163
164
  )
@@ -170,7 +171,9 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
170
171
  this.acks.delete(packet.id)
171
172
  }
172
173
  } else {
173
- throw new Error(`[teckos-client@${this.url}] Got invalid message type: ${packet.type}`)
174
+ throw new Error(
175
+ `(teckos-client) [${this.url}] Got invalid message type: ${packet.type}`
176
+ )
174
177
  }
175
178
  }
176
179
 
@@ -181,19 +184,21 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
181
184
  this.currentReconnectionAttempts = 0
182
185
 
183
186
  // Inform listeners
184
- if (this.options.debug) d(`[${this.url}] Reconnected!`)
187
+ if (this.options.debug) console.log(`(teckos:client) [${this.url}] Reconnected!`)
185
188
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
186
189
  this.listeners('reconnect').forEach((listener) => listener())
187
190
  }
188
191
  // Inform listeners
189
- if (this.options.debug) d(`[${this.url}] Connected!`)
192
+ if (this.options.debug) console.log(`(teckos:client) [${this.url}] Connected!`)
190
193
  this.listeners('connect').forEach((listener) => listener())
191
194
  }
192
195
 
193
- protected handleError = (error: WebSocket.ErrorEvent): void => {
196
+ protected handleError = (error: IsomorphicWebSocket.ErrorEvent): void => {
194
197
  if (this.handlers && this.handlers.error) {
195
198
  if (this.options.debug)
196
- d(`[${this.url}] Got error from server: ${JSON.stringify(error)}`)
199
+ console.log(
200
+ `(teckos:client) [${this.url}] Got error from server: ${JSON.stringify(error)}`
201
+ )
197
202
  this.handlers.error.forEach((listener) => listener(error))
198
203
  }
199
204
  }
@@ -213,12 +218,14 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
213
218
  // Inform listeners
214
219
  if (this.currentReconnectionAttempts > 0) {
215
220
  if (this.options.debug)
216
- d(`[${this.url}] Reconnect #${this.currentReconnectionAttempts} failed!`)
221
+ console.log(
222
+ `(teckos:client) [${this.url}] Reconnect #${this.currentReconnectionAttempts} failed!`
223
+ )
217
224
  this.listeners('reconnect_error').forEach((listener) => {
218
225
  if (listener) listener()
219
226
  })
220
227
  } else {
221
- if (this.options.debug) d(`[${this.url}] Disconnected!`)
228
+ if (this.options.debug) console.log(`(teckos:client) [${this.url}] Disconnected!`)
222
229
  this.listeners('disconnect').forEach((listener) => {
223
230
  if (listener) listener()
224
231
  })
@@ -243,16 +250,16 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
243
250
  )
244
251
 
245
252
  if (this.options.debug)
246
- d(
247
- `[${this.url}] Try reconnecting (${this.currentReconnectionAttempts}/${this.options.reconnectionAttempts}) in ${timeout}ms to ${this.url}...`
253
+ console.log(
254
+ `(teckos:client) [${this.url}] Try reconnecting (${this.currentReconnectionAttempts}/${this.options.reconnectionAttempts}) in ${timeout}ms to ${this.url}...`
248
255
  )
249
256
  this.reconnectionTimeout = setTimeout(() => {
250
257
  this.reconnect()
251
258
  }, timeout)
252
259
  } else {
253
260
  if (this.options.debug)
254
- d(
255
- `[${this.url}] Reconnection maximum of ${this.options.reconnectionAttempts} reached`
261
+ console.log(
262
+ `(teckos:client) [${this.url}] Reconnection maximum of ${this.options.reconnectionAttempts} reached`
256
263
  )
257
264
  this.listeners('reconnect_failed').forEach((listener) => listener())
258
265
  }
@@ -260,7 +267,8 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
260
267
  }
261
268
 
262
269
  public close = (): void => {
263
- if (this.options.debug) d(`[${this.url}] Closing connection (client-side)`)
270
+ if (this.options.debug)
271
+ console.log(`(teckos:client) [${this.url}] Closing connection (client-side)`)
264
272
  if (this.ws !== undefined) {
265
273
  this.ws.onclose = () => {}
266
274
  this.ws.close()
@@ -0,0 +1,63 @@
1
+ /* eslint-disable no-console */
2
+ import * as IsomorphicWebSocket from 'isomorphic-ws';
3
+ import { TeckosClient } from './TeckosClient';
4
+ import { ConnectionState } from './types';
5
+ class TeckosClientWithJWT extends TeckosClient {
6
+ token;
7
+ initialData;
8
+ receivedReady = false;
9
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
10
+ constructor(url, options, token, initialData) {
11
+ super(url, options);
12
+ this.token = token;
13
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
14
+ this.initialData = initialData;
15
+ this.on('disconnect', () => {
16
+ this.receivedReady = false;
17
+ });
18
+ }
19
+ getConnectionState() {
20
+ if (this.ws) {
21
+ switch (this.ws.readyState) {
22
+ case IsomorphicWebSocket.WebSocket.OPEN:
23
+ if (this.receivedReady) {
24
+ return ConnectionState.CONNECTED;
25
+ }
26
+ return ConnectionState.CONNECTING;
27
+ case IsomorphicWebSocket.WebSocket.CONNECTING:
28
+ return ConnectionState.CONNECTING;
29
+ case IsomorphicWebSocket.WebSocket.CLOSING:
30
+ return ConnectionState.DISCONNECTING;
31
+ default:
32
+ return ConnectionState.DISCONNECTED;
33
+ }
34
+ }
35
+ return ConnectionState.DISCONNECTED;
36
+ }
37
+ handleReadyEvent = () => {
38
+ if (this.options.debug)
39
+ console.log(`(teckos:client) [${this.url}] Connected!`);
40
+ this.receivedReady = true;
41
+ if (this.currentReconnectionAttempts > 0) {
42
+ if (this.options.debug)
43
+ console.log(`(teckos:client) [${this.url}] Reconnected!`);
44
+ this.listeners('reconnect').forEach((listener) => listener());
45
+ // Reset reconnection settings to default
46
+ this.currentReconnectDelay = this.options.reconnectionDelay;
47
+ this.currentReconnectionAttempts = 0;
48
+ }
49
+ this.listeners('connect').forEach((listener) => listener());
50
+ };
51
+ handleOpen = () => {
52
+ this.receivedReady = false;
53
+ this.once('ready', this.handleReadyEvent);
54
+ if (this.options.debug)
55
+ console.log(`(teckos:client) Connection opened, sending token now`);
56
+ this.emit('token', {
57
+ token: this.token,
58
+ ...this.initialData,
59
+ });
60
+ };
61
+ }
62
+ export { TeckosClientWithJWT };
63
+ //# sourceMappingURL=TeckosClientWithJWT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeckosClientWithJWT.js","sourceRoot":"","sources":["TeckosClientWithJWT.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,KAAK,mBAAmB,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAmB,eAAe,EAAE,MAAM,SAAS,CAAA;AAE1D,MAAM,mBAAoB,SAAQ,YAAY;IACvB,KAAK,CAAQ;IAEb,WAAW,CAAK;IAEzB,aAAa,GAAG,KAAK,CAAA;IAE/B,6EAA6E;IAC7E,YAAY,GAAW,EAAE,OAAwB,EAAE,KAAa,EAAE,WAAiB;QAC/E,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,mEAAmE;QACnE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC9B,CAAC,CAAC,CAAA;IACN,CAAC;IAES,kBAAkB;QACxB,IAAI,IAAI,CAAC,EAAE,EAAE;YACT,QAAQ,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;gBACxB,KAAK,mBAAmB,CAAC,SAAS,CAAC,IAAI;oBACnC,IAAI,IAAI,CAAC,aAAa,EAAE;wBACpB,OAAO,eAAe,CAAC,SAAS,CAAA;qBACnC;oBACD,OAAO,eAAe,CAAC,UAAU,CAAA;gBACrC,KAAK,mBAAmB,CAAC,SAAS,CAAC,UAAU;oBACzC,OAAO,eAAe,CAAC,UAAU,CAAA;gBACrC,KAAK,mBAAmB,CAAC,SAAS,CAAC,OAAO;oBACtC,OAAO,eAAe,CAAC,aAAa,CAAA;gBACxC;oBACI,OAAO,eAAe,CAAC,YAAY,CAAA;aAC1C;SACJ;QACD,OAAO,eAAe,CAAC,YAAY,CAAA;IACvC,CAAC;IAES,gBAAgB,GAAG,GAAS,EAAE;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,GAAG,cAAc,CAAC,CAAA;QAC/E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,IAAI,CAAC,2BAA2B,GAAG,CAAC,EAAE;YACtC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAA;YACjF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7D,yCAAyC;YACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAA;YAC3D,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAA;SACvC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/D,CAAC,CAAA;IAES,UAAU,GAAG,GAAS,EAAE;QAC9B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAA;QAC3F,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,IAAI,CAAC,WAAW;SACtB,CAAC,CAAA;IACN,CAAC,CAAA;CACJ;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -1,10 +1,8 @@
1
- import debug from 'debug'
2
- import WebSocket from 'isomorphic-ws'
1
+ /* eslint-disable no-console */
2
+ import * as IsomorphicWebSocket from 'isomorphic-ws'
3
3
  import { TeckosClient } from './TeckosClient'
4
4
  import { OptionalOptions, ConnectionState } from './types'
5
5
 
6
- const d = debug('teckos:client')
7
-
8
6
  class TeckosClientWithJWT extends TeckosClient {
9
7
  protected readonly token: string
10
8
 
@@ -26,14 +24,14 @@ class TeckosClientWithJWT extends TeckosClient {
26
24
  protected getConnectionState(): ConnectionState {
27
25
  if (this.ws) {
28
26
  switch (this.ws.readyState) {
29
- case WebSocket.OPEN:
27
+ case IsomorphicWebSocket.WebSocket.OPEN:
30
28
  if (this.receivedReady) {
31
29
  return ConnectionState.CONNECTED
32
30
  }
33
31
  return ConnectionState.CONNECTING
34
- case WebSocket.CONNECTING:
32
+ case IsomorphicWebSocket.WebSocket.CONNECTING:
35
33
  return ConnectionState.CONNECTING
36
- case WebSocket.CLOSING:
34
+ case IsomorphicWebSocket.WebSocket.CLOSING:
37
35
  return ConnectionState.DISCONNECTING
38
36
  default:
39
37
  return ConnectionState.DISCONNECTED
@@ -43,10 +41,10 @@ class TeckosClientWithJWT extends TeckosClient {
43
41
  }
44
42
 
45
43
  protected handleReadyEvent = (): void => {
46
- if (this.options.debug) d(`[${this.url}] Connected!`)
44
+ if (this.options.debug) console.log(`(teckos:client) [${this.url}] Connected!`)
47
45
  this.receivedReady = true
48
46
  if (this.currentReconnectionAttempts > 0) {
49
- if (this.options.debug) d(`[${this.url}] Reconnected!`)
47
+ if (this.options.debug) console.log(`(teckos:client) [${this.url}] Reconnected!`)
50
48
  this.listeners('reconnect').forEach((listener) => listener())
51
49
  // Reset reconnection settings to default
52
50
  this.currentReconnectDelay = this.options.reconnectionDelay
@@ -58,7 +56,7 @@ class TeckosClientWithJWT extends TeckosClient {
58
56
  protected handleOpen = (): void => {
59
57
  this.receivedReady = false
60
58
  this.once('ready', this.handleReadyEvent)
61
- if (this.options.debug) d('Connection opened, sending token now')
59
+ if (this.options.debug) console.log(`(teckos:client) Connection opened, sending token now`)
62
60
  this.emit('token', {
63
61
  token: this.token,
64
62
  ...this.initialData,
package/src/index.js ADDED
@@ -0,0 +1,8 @@
1
+ import { TeckosClientWithJWT } from './TeckosClientWithJWT';
2
+ import { TeckosClient } from './TeckosClient';
3
+ /**
4
+ * Expose all types
5
+ */
6
+ export * from './types';
7
+ export { TeckosClient, TeckosClientWithJWT };
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C;;GAEG;AACH,cAAc,SAAS,CAAA;AAGvB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAA"}
package/src/index.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { TeckosClientWithJWT } from './TeckosClientWithJWT'
2
2
  import { TeckosClient } from './TeckosClient'
3
3
  import { ITeckosClient } from './ITeckosClient'
4
- import { ConnectionState, OptionalOptions, Options, Packet, PacketType, SocketEvent } from './types'
5
4
 
6
5
  /**
7
6
  * Expose all types
8
7
  */
9
- export type { Options, OptionalOptions, Packet, SocketEvent, ITeckosClient }
8
+ export * from './types'
9
+ export type { ITeckosClient }
10
10
 
11
- export { ConnectionState, PacketType, TeckosClient, TeckosClientWithJWT }
11
+ export { TeckosClient, TeckosClientWithJWT }
@@ -0,0 +1,9 @@
1
+ var ConnectionState;
2
+ (function (ConnectionState) {
3
+ ConnectionState["DISCONNECTED"] = "disconnected";
4
+ ConnectionState["CONNECTING"] = "connecting";
5
+ ConnectionState["CONNECTED"] = "connected";
6
+ ConnectionState["DISCONNECTING"] = "disconnecting";
7
+ })(ConnectionState || (ConnectionState = {}));
8
+ export { ConnectionState };
9
+ //# sourceMappingURL=ConnectionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionState.js","sourceRoot":"","sources":["ConnectionState.ts"],"names":[],"mappings":"AAAA,IAAK,eAKJ;AALD,WAAK,eAAe;IAChB,gDAA6B,CAAA;IAC7B,4CAAyB,CAAA;IACzB,0CAAuB,CAAA;IACvB,kDAA+B,CAAA;AACnC,CAAC,EALI,eAAe,KAAf,eAAe,QAKnB;AACD,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Options.js","sourceRoot":"","sources":["Options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Packet.js","sourceRoot":"","sources":["Packet.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ var PacketType;
2
+ (function (PacketType) {
3
+ PacketType[PacketType["EVENT"] = 0] = "EVENT";
4
+ PacketType[PacketType["ACK"] = 1] = "ACK";
5
+ })(PacketType || (PacketType = {}));
6
+ export { PacketType };
7
+ //# sourceMappingURL=PacketType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PacketType.js","sourceRoot":"","sources":["PacketType.ts"],"names":[],"mappings":"AAAA,IAAK,UAGJ;AAHD,WAAK,UAAU;IACX,6CAAK,CAAA;IACL,yCAAG,CAAA;AACP,CAAC,EAHI,UAAU,KAAV,UAAU,QAGd;AACD,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SocketEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketEvent.js","sourceRoot":"","sources":["SocketEvent.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { PacketType } from './PacketType';
2
+ import { ConnectionState } from './ConnectionState';
3
+ export { ConnectionState, PacketType };
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAA"}