teckos-client 0.2.5 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) 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 +61 -46
  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/types/ConnectionState.js +9 -0
  19. package/src/types/ConnectionState.js.map +1 -0
  20. package/src/types/Options.js +2 -0
  21. package/src/types/Options.js.map +1 -0
  22. package/src/types/Packet.js +2 -0
  23. package/src/types/Packet.js.map +1 -0
  24. package/src/types/PacketType.js +7 -0
  25. package/src/types/PacketType.js.map +1 -0
  26. package/src/types/SocketEvent.js +2 -0
  27. package/src/types/SocketEvent.js.map +1 -0
  28. package/src/types/index.js +4 -0
  29. package/src/types/index.js.map +1 -0
  30. package/src/util/Converter.js +6 -0
  31. package/src/util/Converter.js.map +1 -0
  32. package/src/util/SocketEventEmitter.js +99 -0
  33. package/src/util/SocketEventEmitter.js.map +1 -0
  34. package/src/util/formatProdErrorMessage.ts +16 -0
  35. package/{dist → types}/ITeckosClient.d.ts +3 -3
  36. package/{dist → types}/TeckosClient.d.ts +6 -6
  37. package/{dist → types}/TeckosClientWithJWT.d.ts +0 -0
  38. package/{dist → types}/index.d.ts +0 -0
  39. package/{dist → types}/types/ConnectionState.d.ts +0 -0
  40. package/{dist → types}/types/Options.d.ts +0 -0
  41. package/{dist → types}/types/Packet.d.ts +0 -0
  42. package/{dist → types}/types/PacketType.d.ts +0 -0
  43. package/{dist → types}/types/SocketEvent.d.ts +0 -0
  44. package/{dist → types}/types/index.d.ts +0 -0
  45. package/{dist → types}/util/Converter.d.ts +0 -0
  46. package/{dist → types}/util/SocketEventEmitter.d.ts +1 -1
  47. package/types/util/formatProdErrorMessage.d.ts +9 -0
  48. package/dist/teckos-client.cjs.development.js +0 -617
  49. package/dist/teckos-client.cjs.development.js.map +0 -1
  50. package/dist/teckos-client.cjs.production.min.js +0 -2
  51. package/dist/teckos-client.cjs.production.min.js.map +0 -1
  52. package/dist/teckos-client.esm.js +0 -614
  53. 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"}
@@ -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"}
@@ -0,0 +1,6 @@
1
+ const enc = new TextEncoder();
2
+ const dec = new TextDecoder();
3
+ const encodePacket = (packet) => enc.encode(JSON.stringify(packet));
4
+ const decodePacket = (buffer) => JSON.parse(dec.decode(buffer).toString());
5
+ export { encodePacket, decodePacket };
6
+ //# sourceMappingURL=Converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Converter.js","sourceRoot":"","sources":["Converter.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;AAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAA;AAE7B,MAAM,YAAY,GAAG,CAAC,MAAc,EAAmB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAC5F,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAU,EAAE,CACjD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAW,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAA"}