teckos-client 0.2.2 → 0.2.5

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.
@@ -20,6 +20,9 @@ function _defineProperties(target, props) {
20
20
  function _createClass(Constructor, protoProps, staticProps) {
21
21
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
22
22
  if (staticProps) _defineProperties(Constructor, staticProps);
23
+ Object.defineProperty(Constructor, "prototype", {
24
+ writable: false
25
+ });
23
26
  return Constructor;
24
27
  }
25
28
 
@@ -460,6 +463,10 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
460
463
  _this.ws.onclose = function () {};
461
464
 
462
465
  _this.ws.close();
466
+
467
+ _this.listeners('disconnect').forEach(function (listener) {
468
+ return listener();
469
+ });
463
470
  }
464
471
  };
465
472
 
@@ -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 =>\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
+ {"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 this.listeners('disconnect').forEach((listener) => listener())\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 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;
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.listeners("disconnect").forEach((function(e){return e()})))},i.disconnect=function(){i.close()},i.options=r({},d,o),i.currentReconnectDelay=i.options.reconnectionDelay,i.url=n,i}var i,c;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=n,(c=[{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)}}(i.prototype,c),Object.defineProperty(i,"prototype",{writable:!1}),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
@@ -1 +1 @@
1
- {"version":3,"file":"teckos-client.cjs.production.min.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":["PacketType","ConnectionState","enc","TextEncoder","dec","TextDecoder","SocketEventEmitter","event","listener","Object","keys","_this","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","packet","type","EVENT","data","acks","set","fnId","pop","id","sendPackage","undefined","OPEN","buffer","encode","JSON","stringify","encodePacket","send","msg","parse","decode","toString","slice","ACK","ack","get","apply","currentReconnectionAttempts","currentReconnectDelay","error","clearTimeout","reconnectionTimeout","Math","min","round","reconnect","getConnectionState","this","CONNECTED","CLOSING","DISCONNECTING","DISCONNECTED","TeckosClientWithJWT","token","initialData","receivedReady","once","handleReadyEvent","emit","on"],"mappings":"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"}
1
+ {"version":3,"file":"teckos-client.cjs.production.min.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 this.listeners('disconnect').forEach((listener) => listener())\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":["PacketType","ConnectionState","enc","TextEncoder","dec","TextDecoder","SocketEventEmitter","event","listener","Object","keys","_this","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","packet","type","EVENT","data","acks","set","fnId","pop","id","sendPackage","undefined","OPEN","buffer","encode","JSON","stringify","encodePacket","send","msg","parse","decode","toString","slice","ACK","ack","get","apply","currentReconnectionAttempts","currentReconnectDelay","error","clearTimeout","reconnectionTimeout","Math","min","round","reconnect","getConnectionState","this","CONNECTED","CLOSING","DISCONNECTING","DISCONNECTED","TeckosClientWithJWT","token","initialData","receivedReady","once","handleReadyEvent","emit","on"],"mappings":"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"}
@@ -14,6 +14,9 @@ function _defineProperties(target, props) {
14
14
  function _createClass(Constructor, protoProps, staticProps) {
15
15
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
16
16
  if (staticProps) _defineProperties(Constructor, staticProps);
17
+ Object.defineProperty(Constructor, "prototype", {
18
+ writable: false
19
+ });
17
20
  return Constructor;
18
21
  }
19
22
 
@@ -458,6 +461,10 @@ var TeckosClient = /*#__PURE__*/function (_SocketEventEmitter) {
458
461
  _this.ws.onclose = function () {};
459
462
 
460
463
  _this.ws.close();
464
+
465
+ _this.listeners('disconnect').forEach(function (listener) {
466
+ return listener();
467
+ });
461
468
  }
462
469
  };
463
470
 
@@ -1 +1 @@
1
- {"version":3,"file":"teckos-client.esm.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
+ {"version":3,"file":"teckos-client.esm.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 this.listeners('disconnect').forEach((listener) => listener())\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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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.2",
2
+ "version": "0.2.5",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -64,47 +64,52 @@
64
64
  }
65
65
  ],
66
66
  "devDependencies": {
67
+ "@babel/core": "^7.17.8",
68
+ "@babel/plugin-syntax-flow": "^7.16.7",
69
+ "@babel/plugin-transform-react-jsx": "^7.17.3",
67
70
  "@size-limit/preset-small-lib": "^7.0.8",
68
71
  "@types/chai": "^4.3.0",
69
72
  "@types/debug": "^4.1.7",
70
- "@types/node": "^17.0.20",
71
- "@types/ws": "^8.2.3",
72
- "@typescript-eslint/eslint-plugin": "^5.12.1",
73
- "@typescript-eslint/parser": "^5.12.1",
73
+ "@types/mocha": "^9.1.0",
74
+ "@types/node": "^17.0.23",
75
+ "@types/ws": "^8.5.3",
76
+ "@typescript-eslint/eslint-plugin": "^5.17.0",
77
+ "@typescript-eslint/parser": "^5.17.0",
74
78
  "babel-eslint": "^10.1.0",
75
79
  "chai": "^4.3.6",
76
80
  "clean-webpack-plugin": "^4.0.0",
77
- "eslint": "^8.9.0",
81
+ "eslint": "^8.12.0",
78
82
  "eslint-config-airbnb-base": "^15.0.0",
79
- "eslint-config-airbnb-typescript": "^16.1.0",
80
- "eslint-config-prettier": "^8.4.0",
83
+ "eslint-config-airbnb-typescript": "^16.1.4",
84
+ "eslint-config-prettier": "^8.5.0",
81
85
  "eslint-config-react-app": "^7.0.0",
82
86
  "eslint-plugin-flowtype": "^8.0.3",
83
87
  "eslint-plugin-import": "^2.25.4",
84
88
  "eslint-plugin-jsx-a11y": "^6.5.1",
85
89
  "eslint-plugin-prettier": "^4.0.0",
86
90
  "eslint-plugin-promise": "^6.0.0",
87
- "eslint-plugin-react": "^7.28.0",
88
- "eslint-plugin-react-hooks": "^4.3.0",
91
+ "eslint-plugin-react": "^7.29.4",
92
+ "eslint-plugin-react-hooks": "^4.4.0",
89
93
  "html-webpack-plugin": "^5.5.0",
90
94
  "husky": "^7.0.4",
91
- "mocha": "^9.2.1",
95
+ "ioredis": "^5.0.2",
96
+ "mocha": "^9.2.2",
92
97
  "nodemon": "^2.0.15",
93
- "prettier": "^2.5.1",
98
+ "prettier": "^2.6.1",
94
99
  "size-limit": "^7.0.8",
95
- "teckos": "^0.8.0",
96
- "ts-loader": "^9.2.6",
97
- "ts-node": "^10.5.0",
100
+ "teckos": "^0.8.3",
101
+ "ts-loader": "^9.2.8",
102
+ "ts-node": "^10.7.0",
98
103
  "tsdx": "^0.14.1",
99
104
  "tslib": "^2.3.1",
100
- "typescript": "^4.5.5",
101
- "webpack": "^5.69.1",
105
+ "typescript": "^4.6.3",
106
+ "webpack": "^5.70.0",
102
107
  "webpack-cli": "^4.9.2",
103
108
  "webpack-dev-server": "^4.7.4",
104
109
  "ws": "^8.5.0"
105
110
  },
106
111
  "dependencies": {
107
- "debug": "^4.3.3",
112
+ "debug": "^4.3.4",
108
113
  "isomorphic-ws": "^4.0.1"
109
114
  }
110
115
  }
@@ -264,6 +264,7 @@ class TeckosClient extends SocketEventEmitter<SocketEvent> implements ITeckosCli
264
264
  if (this.ws !== undefined) {
265
265
  this.ws.onclose = () => {}
266
266
  this.ws.close()
267
+ this.listeners('disconnect').forEach((listener) => listener())
267
268
  }
268
269
  }
269
270