From 86952562715372db286a94d789ba15284aa30d8e Mon Sep 17 00:00:00 2001 From: Sergii Kliuchnyk Date: Fri, 30 Sep 2022 11:41:38 +0300 Subject: [PATCH 01/14] add peerWs to app --- src/instance.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/instance.ts b/src/instance.ts index 0b8f522..19be2d6 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -41,6 +41,8 @@ export const createInstance = ({ app, server, options }: { realm, config: customConfig }); + + app.peerWs = wss; wss.on("connection", (client: IClient) => { const messageQueue = realm.getMessageQueueById(client.getId()); @@ -72,4 +74,4 @@ export const createInstance = ({ app, server, options }: { messagesExpire.startMessagesExpiration(); checkBrokenConnections.start(); -}; \ No newline at end of file +}; From 7deac0d07e5dfc55144387968a017b124defb394 Mon Sep 17 00:00:00 2001 From: Sergii Kliuchnyk Date: Fri, 30 Sep 2022 11:55:49 +0300 Subject: [PATCH 02/14] test --- src/instance.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/instance.ts b/src/instance.ts index 19be2d6..eb55845 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -36,15 +36,13 @@ export const createInstance = ({ app, server, options }: { //use mountpath for WS server const customConfig = { ...config, path: path.posix.join(app.path(), options.path, '/') }; - const wss: IWebSocketServer = new WebSocketServer({ + const wss2: IWebSocketServer = new WebSocketServer({ server, realm, config: customConfig }); - - app.peerWs = wss; - wss.on("connection", (client: IClient) => { + wss2.on("connection", (client: IClient) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { @@ -59,7 +57,7 @@ export const createInstance = ({ app, server, options }: { app.emit("connection", client); }); - wss.on("message", (client: IClient, message: IMessage) => { + wss2.on("message", (client: IClient, message: IMessage) => { app.emit("message", client, message); messageHandler.handle(client, message); }); @@ -68,7 +66,7 @@ export const createInstance = ({ app, server, options }: { app.emit("disconnect", client); }); - wss.on("error", (error: Error) => { + wss2.on("error", (error: Error) => { app.emit("error", error); }); From 80237305b7f013f435627f27f246700d56974f53 Mon Sep 17 00:00:00 2001 From: Sergii Kliuchnyk Date: Fri, 30 Sep 2022 11:57:29 +0300 Subject: [PATCH 03/14] Update instance.ts --- src/instance.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/instance.ts b/src/instance.ts index eb55845..f59bf8c 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -62,7 +62,7 @@ export const createInstance = ({ app, server, options }: { messageHandler.handle(client, message); }); - wss.on("close", (client: IClient) => { + wss2.on("close", (client: IClient) => { app.emit("disconnect", client); }); From b12a4a3a15e7f6fdc3fa855da0db379460fc834b Mon Sep 17 00:00:00 2001 From: Sergii Kliuchnyk Date: Fri, 30 Sep 2022 11:58:00 +0300 Subject: [PATCH 04/14] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9cbe3f..360e89b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "peer", - "version": "0.6.1", + "version": "0.6.2", "description": "PeerJS server component", "main": "dist/src/index.js", "bin": { From a77de706c7f599b8ef60d574172328304cef6019 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Fri, 30 Sep 2022 12:25:23 +0300 Subject: [PATCH 05/14] added peerWs to app, added ws config --- dist/src/instance.js | 10 +++++----- package-lock.json | 2 +- src/config/index.ts | 3 +++ src/instance.ts | 17 +++++++++++------ src/services/webSocketServer/index.ts | 8 ++++++-- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/dist/src/instance.js b/dist/src/instance.js index 9382bf0..c528f02 100644 --- a/dist/src/instance.js +++ b/dist/src/instance.js @@ -27,12 +27,12 @@ const createInstance = ({ app, server, options }) => { app.use(options.path, api); //use mountpath for WS server const customConfig = Object.assign(Object.assign({}, config), { path: path_1.default.posix.join(app.path(), options.path, '/') }); - const wss = new webSocketServer_1.WebSocketServer({ + const wss2 = new webSocketServer_1.WebSocketServer({ server, realm, config: customConfig }); - wss.on("connection", (client) => { + wss2.on("connection", (client) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { let message; @@ -43,14 +43,14 @@ const createInstance = ({ app, server, options }) => { } app.emit("connection", client); }); - wss.on("message", (client, message) => { + wss2.on("message", (client, message) => { app.emit("message", client, message); messageHandler.handle(client, message); }); - wss.on("close", (client) => { + wss2.on("close", (client) => { app.emit("disconnect", client); }); - wss.on("error", (error) => { + wss2.on("error", (error) => { app.emit("error", error); }); messagesExpire.startMessagesExpiration(); diff --git a/package-lock.json b/package-lock.json index 601caf5..fc389bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "peer", - "version": "0.6.1", + "version": "0.6.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/src/config/index.ts b/src/config/index.ts index b048d16..a3469fa 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,3 +1,5 @@ +import {ServerOptions as WsConfig} from 'ws'; + export interface IConfig { readonly host: string; readonly port: number; @@ -14,6 +16,7 @@ export interface IConfig { cert: string; }; readonly generateClientId?: () => string; + readonly ws?: WsConfig; } const defaultConfig: IConfig = { diff --git a/src/instance.ts b/src/instance.ts index f59bf8c..4789205 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -34,15 +34,20 @@ export const createInstance = ({ app, server, options }: { app.use(options.path, api); //use mountpath for WS server - const customConfig = { ...config, path: path.posix.join(app.path(), options.path, '/') }; + const customConfig = { + ...config, + path: path.posix.join(app.path(), options.path, '/'), + }; - const wss2: IWebSocketServer = new WebSocketServer({ + const wss: IWebSocketServer = new WebSocketServer({ server, realm, config: customConfig }); - wss2.on("connection", (client: IClient) => { + app.set('peerWs', wss); + + wss.on("connection", (client: IClient) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { @@ -57,16 +62,16 @@ export const createInstance = ({ app, server, options }: { app.emit("connection", client); }); - wss2.on("message", (client: IClient, message: IMessage) => { + wss.on("message", (client: IClient, message: IMessage) => { app.emit("message", client, message); messageHandler.handle(client, message); }); - wss2.on("close", (client: IClient) => { + wss.on("close", (client: IClient) => { app.emit("disconnect", client); }); - wss2.on("error", (error: Error) => { + wss.on("error", (error: Error) => { app.emit("error", error); }); diff --git a/src/services/webSocketServer/index.ts b/src/services/webSocketServer/index.ts index d9f2c5e..e3b4097 100644 --- a/src/services/webSocketServer/index.ts +++ b/src/services/webSocketServer/index.ts @@ -18,7 +18,7 @@ interface IAuthParams { key?: string; } -type CustomConfig = Pick; +type CustomConfig = Pick; const WS_PATH = 'peerjs'; @@ -40,7 +40,11 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer { const path = this.config.path; this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - this.socketServer = new WebSocketLib.Server({ path: this.path, server }); + this.socketServer = new WebSocketLib.Server({ + path: this.path, + server, + ...this.config.ws, + }); this.socketServer.on("connection", (socket: MyWebSocket, req) => this._onSocketConnection(socket, req)); this.socketServer.on("error", (error: Error) => this._onSocketError(error)); From 355dc574f8c8d6191de2285de80cd312076d9eac Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Fri, 30 Sep 2022 12:26:08 +0300 Subject: [PATCH 06/14] build --- dist/src/instance.js | 11 ++++++----- dist/src/services/webSocketServer/index.js | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/dist/src/instance.js b/dist/src/instance.js index c528f02..0ee2bf9 100644 --- a/dist/src/instance.js +++ b/dist/src/instance.js @@ -27,12 +27,13 @@ const createInstance = ({ app, server, options }) => { app.use(options.path, api); //use mountpath for WS server const customConfig = Object.assign(Object.assign({}, config), { path: path_1.default.posix.join(app.path(), options.path, '/') }); - const wss2 = new webSocketServer_1.WebSocketServer({ + const wss = new webSocketServer_1.WebSocketServer({ server, realm, config: customConfig }); - wss2.on("connection", (client) => { + app.set('peerWs', wss); + wss.on("connection", (client) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { let message; @@ -43,14 +44,14 @@ const createInstance = ({ app, server, options }) => { } app.emit("connection", client); }); - wss2.on("message", (client, message) => { + wss.on("message", (client, message) => { app.emit("message", client, message); messageHandler.handle(client, message); }); - wss2.on("close", (client) => { + wss.on("close", (client) => { app.emit("disconnect", client); }); - wss2.on("error", (error) => { + wss.on("error", (error) => { app.emit("error", error); }); messagesExpire.startMessagesExpiration(); diff --git a/dist/src/services/webSocketServer/index.js b/dist/src/services/webSocketServer/index.js index f3cb5f3..b36a749 100644 --- a/dist/src/services/webSocketServer/index.js +++ b/dist/src/services/webSocketServer/index.js @@ -18,7 +18,7 @@ class WebSocketServer extends events_1.default { this.config = config; const path = this.config.path; this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - this.socketServer = new ws_1.default.Server({ path: this.path, server }); + this.socketServer = new ws_1.default.Server(Object.assign({ path: this.path, server }, this.config.ws)); this.socketServer.on("connection", (socket, req) => this._onSocketConnection(socket, req)); this.socketServer.on("error", (error) => this._onSocketError(error)); } From e2854ca9b12e612904cdbdacf7c92e1eb5e01e28 Mon Sep 17 00:00:00 2001 From: Sergii Bliznichenko Date: Mon, 3 Oct 2022 14:02:07 +0300 Subject: [PATCH 07/14] add peerWs emit --- dist/src/instance.js | 1 + src/instance.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/dist/src/instance.js b/dist/src/instance.js index 0ee2bf9..073e14b 100644 --- a/dist/src/instance.js +++ b/dist/src/instance.js @@ -33,6 +33,7 @@ const createInstance = ({ app, server, options }) => { config: customConfig }); app.set('peerWs', wss); + app.emit('peerWs', wss); wss.on("connection", (client) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { diff --git a/src/instance.ts b/src/instance.ts index 4789205..42a1006 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -46,6 +46,7 @@ export const createInstance = ({ app, server, options }: { }); app.set('peerWs', wss); + app.emit('peerWs', wss); wss.on("connection", (client: IClient) => { const messageQueue = realm.getMessageQueueById(client.getId()); From 077260a3a439b51c2a1591430570723f481ed873 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Tue, 1 Nov 2022 13:06:11 +0200 Subject: [PATCH 08/14] createWebSocketServer option --- dist/src/instance.js | 2 -- dist/src/services/webSocketServer/index.js | 8 +++++++- src/config/index.ts | 4 ++-- src/instance.ts | 3 --- src/services/webSocketServer/index.ts | 13 +++++++++---- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/dist/src/instance.js b/dist/src/instance.js index 073e14b..9382bf0 100644 --- a/dist/src/instance.js +++ b/dist/src/instance.js @@ -32,8 +32,6 @@ const createInstance = ({ app, server, options }) => { realm, config: customConfig }); - app.set('peerWs', wss); - app.emit('peerWs', wss); wss.on("connection", (client) => { const messageQueue = realm.getMessageQueueById(client.getId()); if (messageQueue) { diff --git a/dist/src/services/webSocketServer/index.js b/dist/src/services/webSocketServer/index.js index b36a749..52aae51 100644 --- a/dist/src/services/webSocketServer/index.js +++ b/dist/src/services/webSocketServer/index.js @@ -18,7 +18,13 @@ class WebSocketServer extends events_1.default { this.config = config; const path = this.config.path; this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - this.socketServer = new ws_1.default.Server(Object.assign({ path: this.path, server }, this.config.ws)); + const options = { + path: this.path, + server, + }; + this.socketServer = (config.createWebSocketServer ? + config.createWebSocketServer(options) : + new ws_1.default.Server(options)); this.socketServer.on("connection", (socket, req) => this._onSocketConnection(socket, req)); this.socketServer.on("error", (error) => this._onSocketError(error)); } diff --git a/src/config/index.ts b/src/config/index.ts index a3469fa..0f3e60e 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,4 +1,4 @@ -import {ServerOptions as WsConfig} from 'ws'; +import {Server, ServerOptions} from 'ws'; export interface IConfig { readonly host: string; @@ -16,7 +16,7 @@ export interface IConfig { cert: string; }; readonly generateClientId?: () => string; - readonly ws?: WsConfig; + readonly createWebSocketServer?: (options: ServerOptions) => Server; } const defaultConfig: IConfig = { diff --git a/src/instance.ts b/src/instance.ts index 42a1006..9be438c 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -45,9 +45,6 @@ export const createInstance = ({ app, server, options }: { config: customConfig }); - app.set('peerWs', wss); - app.emit('peerWs', wss); - wss.on("connection", (client: IClient) => { const messageQueue = realm.getMessageQueueById(client.getId()); diff --git a/src/services/webSocketServer/index.ts b/src/services/webSocketServer/index.ts index e3b4097..63c28e7 100644 --- a/src/services/webSocketServer/index.ts +++ b/src/services/webSocketServer/index.ts @@ -18,7 +18,7 @@ interface IAuthParams { key?: string; } -type CustomConfig = Pick; +type CustomConfig = Pick; const WS_PATH = 'peerjs'; @@ -40,11 +40,16 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer { const path = this.config.path; this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - this.socketServer = new WebSocketLib.Server({ + const options = { path: this.path, server, - ...this.config.ws, - }); + }; + + this.socketServer = ( + config.createWebSocketServer ? + config.createWebSocketServer(options) : + new WebSocketLib.Server(options) + ); this.socketServer.on("connection", (socket: MyWebSocket, req) => this._onSocketConnection(socket, req)); this.socketServer.on("error", (error: Error) => this._onSocketError(error)); From abaf9ab3b470b4b3a65ac4e43aff1fd18a4fa494 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Tue, 1 Nov 2022 13:25:06 +0200 Subject: [PATCH 09/14] createWebSocketServer option --- index.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/index.d.ts b/index.d.ts index c38027e..aa9f577 100644 --- a/index.d.ts +++ b/index.d.ts @@ -26,6 +26,7 @@ declare interface IConfig { cert: string; }; readonly generateClientId?: () => string; + readonly createWebSocketServer?: (options: WebSocketLib.ServerOptions) => WebSocketLib.Server; } declare interface IClient { From e5c4a1b8f64d2f1c0d3a8425d32088a6601ac7a9 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Mon, 7 Nov 2022 11:14:27 +0200 Subject: [PATCH 10/14] type for ws server options --- src/services/webSocketServer/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/webSocketServer/index.ts b/src/services/webSocketServer/index.ts index 63c28e7..f99ac1c 100644 --- a/src/services/webSocketServer/index.ts +++ b/src/services/webSocketServer/index.ts @@ -40,7 +40,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer { const path = this.config.path; this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - const options = { + const options: WebSocketLib.ServerOptions = { path: this.path, server, }; From cb567c11bf806c47561c3432cb1f6a75deb615bc Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Mon, 7 Nov 2022 11:22:18 +0200 Subject: [PATCH 11/14] revert as it was --- src/instance.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/instance.ts b/src/instance.ts index 9be438c..0b8f522 100644 --- a/src/instance.ts +++ b/src/instance.ts @@ -34,10 +34,7 @@ export const createInstance = ({ app, server, options }: { app.use(options.path, api); //use mountpath for WS server - const customConfig = { - ...config, - path: path.posix.join(app.path(), options.path, '/'), - }; + const customConfig = { ...config, path: path.posix.join(app.path(), options.path, '/') }; const wss: IWebSocketServer = new WebSocketServer({ server, @@ -75,4 +72,4 @@ export const createInstance = ({ app, server, options }: { messagesExpire.startMessagesExpiration(); checkBrokenConnections.start(); -}; +}; \ No newline at end of file From 6bbfba97d599b89c30409a13e0429d20aee361c3 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Mon, 7 Nov 2022 11:25:04 +0200 Subject: [PATCH 12/14] revert package version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc389bb..601caf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "peer", - "version": "0.6.2", + "version": "0.6.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 360e89b..e9cbe3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "peer", - "version": "0.6.2", + "version": "0.6.1", "description": "PeerJS server component", "main": "dist/src/index.js", "bin": { From 0d0cf63133424f0f017358b194d74ea6853ae158 Mon Sep 17 00:00:00 2001 From: Sergii KLiuchnyk Date: Fri, 6 Jan 2023 11:09:48 +0200 Subject: [PATCH 13/14] change `import` to `import type` --- src/config/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/index.ts b/src/config/index.ts index 0f3e60e..ee57872 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,4 +1,4 @@ -import {Server, ServerOptions} from 'ws'; +import type {Server, ServerOptions} from 'ws'; export interface IConfig { readonly host: string; From 904d3d4105523bb72941e1ea009c360ce68d8212 Mon Sep 17 00:00:00 2001 From: Sergii Kliuchnyk Date: Fri, 6 Jan 2023 11:15:51 +0200 Subject: [PATCH 14/14] Delete index.js --- dist/src/services/webSocketServer/index.js | 100 --------------------- 1 file changed, 100 deletions(-) delete mode 100644 dist/src/services/webSocketServer/index.js diff --git a/dist/src/services/webSocketServer/index.js b/dist/src/services/webSocketServer/index.js deleted file mode 100644 index 52aae51..0000000 --- a/dist/src/services/webSocketServer/index.js +++ /dev/null @@ -1,100 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.WebSocketServer = void 0; -const events_1 = __importDefault(require("events")); -const url_1 = __importDefault(require("url")); -const ws_1 = __importDefault(require("ws")); -const enums_1 = require("../../enums"); -const client_1 = require("../../models/client"); -const WS_PATH = 'peerjs'; -class WebSocketServer extends events_1.default { - constructor({ server, realm, config }) { - super(); - this.setMaxListeners(0); - this.realm = realm; - this.config = config; - const path = this.config.path; - this.path = `${path}${path.endsWith('/') ? "" : "/"}${WS_PATH}`; - const options = { - path: this.path, - server, - }; - this.socketServer = (config.createWebSocketServer ? - config.createWebSocketServer(options) : - new ws_1.default.Server(options)); - this.socketServer.on("connection", (socket, req) => this._onSocketConnection(socket, req)); - this.socketServer.on("error", (error) => this._onSocketError(error)); - } - _onSocketConnection(socket, req) { - var _a; - const { query = {} } = url_1.default.parse((_a = req.url) !== null && _a !== void 0 ? _a : '', true); - const { id, token, key } = query; - if (!id || !token || !key) { - return this._sendErrorAndClose(socket, enums_1.Errors.INVALID_WS_PARAMETERS); - } - if (key !== this.config.key) { - return this._sendErrorAndClose(socket, enums_1.Errors.INVALID_KEY); - } - const client = this.realm.getClientById(id); - if (client) { - if (token !== client.getToken()) { - // ID-taken, invalid token - socket.send(JSON.stringify({ - type: enums_1.MessageType.ID_TAKEN, - payload: { msg: "ID is taken" } - })); - return socket.close(); - } - return this._configureWS(socket, client); - } - this._registerClient({ socket, id, token }); - } - _onSocketError(error) { - // handle error - this.emit("error", error); - } - _registerClient({ socket, id, token }) { - // Check concurrent limit - const clientsCount = this.realm.getClientsIds().length; - if (clientsCount >= this.config.concurrent_limit) { - return this._sendErrorAndClose(socket, enums_1.Errors.CONNECTION_LIMIT_EXCEED); - } - const newClient = new client_1.Client({ id, token }); - this.realm.setClient(newClient, id); - socket.send(JSON.stringify({ type: enums_1.MessageType.OPEN })); - this._configureWS(socket, newClient); - } - _configureWS(socket, client) { - client.setSocket(socket); - // Cleanup after a socket closes. - socket.on("close", () => { - if (client.getSocket() === socket) { - this.realm.removeClientById(client.getId()); - this.emit("close", client); - } - }); - // Handle messages from peers. - socket.on("message", (data) => { - try { - const message = JSON.parse(data); - message.src = client.getId(); - this.emit("message", client, message); - } - catch (e) { - this.emit("error", e); - } - }); - this.emit("connection", client); - } - _sendErrorAndClose(socket, msg) { - socket.send(JSON.stringify({ - type: enums_1.MessageType.ERROR, - payload: { msg } - })); - socket.close(); - } -} -exports.WebSocketServer = WebSocketServer;