diff --git a/dist/src/config/index.js b/dist/src/config/index.js new file mode 100644 index 0000000..b95d622 --- /dev/null +++ b/dist/src/config/index.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const defaultConfig = { + port: 9000, + expire_timeout: 5000, + alive_timeout: 60000, + key: "peerjs", + path: "/myapp", + concurrent_limit: 5000, + allow_discovery: false, + proxied: false, + cleanup_out_msgs: 1000, + ssl: { + key: "", + cert: "" + } +}; +exports.default = defaultConfig; diff --git a/dist/src/index.js b/dist/src/index.js index 948f4e4..8ea5bfa 100644 --- a/dist/src/index.js +++ b/dist/src/index.js @@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); const express_1 = __importDefault(require("express")); const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); -const config_1 = __importDefault(require("../config")); const api_1 = require("./api"); +const config_1 = __importDefault(require("./config")); const messageHandler_1 = require("./messageHandler"); const realm_1 = require("./models/realm"); const checkBrokenConnections_1 = require("./services/checkBrokenConnections"); @@ -30,7 +30,7 @@ const init = ({ app, server, options }) => { const wss = new webSocketServer_1.WebSocketServer({ server, realm, - config: Object.assign({}, config) + config }); wss.on("connection", (client) => { const messageQueue = realm.getMessageQueueById(client.getId()); diff --git a/dist/src/messageHandler/handlers/heartbeat/index.js b/dist/src/messageHandler/handlers/heartbeat/index.js index 80c7b6a..22269ab 100644 --- a/dist/src/messageHandler/handlers/heartbeat/index.js +++ b/dist/src/messageHandler/handlers/heartbeat/index.js @@ -1,8 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function default_1(client) { +exports.HeartbeatHandler = (client) => { const nowTime = new Date().getTime(); client.setLastPing(nowTime); return true; -} -exports.default = default_1; +}; diff --git a/dist/src/messageHandler/handlers/index.js b/dist/src/messageHandler/handlers/index.js new file mode 100644 index 0000000..f053a44 --- /dev/null +++ b/dist/src/messageHandler/handlers/index.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var heartbeat_1 = require("./heartbeat"); +exports.HeartbeatHandler = heartbeat_1.HeartbeatHandler; +var transmission_1 = require("./transmission"); +exports.TransmissionHandler = transmission_1.TransmissionHandler; diff --git a/dist/src/messageHandler/handlers/transmission/index.js b/dist/src/messageHandler/handlers/transmission/index.js index f099da5..1a6d0d3 100644 --- a/dist/src/messageHandler/handlers/transmission/index.js +++ b/dist/src/messageHandler/handlers/transmission/index.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const enums_1 = require("../../../enums"); -function default_1({ realm }) { +exports.TransmissionHandler = ({ realm }) => { const handle = (client, message) => { const type = message.type; const srcId = message.src; @@ -53,5 +53,4 @@ function default_1({ realm }) { return true; }; return handle; -} -exports.default = default_1; +}; diff --git a/dist/src/messageHandler/index.js b/dist/src/messageHandler/index.js index 0cdaa9f..b3acd87 100644 --- a/dist/src/messageHandler/index.js +++ b/dist/src/messageHandler/index.js @@ -1,17 +1,13 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const enums_1 = require("../enums"); -const heartbeat_1 = __importDefault(require("./handlers/heartbeat")); -const transmission_1 = __importDefault(require("./handlers/transmission")); +const handlers_1 = require("./handlers"); const messageHandlers_1 = require("./messageHandlers"); class MessageHandler { constructor(realm) { this.messageHandlers = new messageHandlers_1.MessageHandlers(); - const transmissionHandler = transmission_1.default({ realm }); - const heartbeatHandler = heartbeat_1.default; + const transmissionHandler = handlers_1.TransmissionHandler({ realm }); + const heartbeatHandler = handlers_1.HeartbeatHandler; const handleTransmission = (client, message) => { return transmissionHandler(client, { type: message.type, diff --git a/dist/src/services/checkBrokenConnections/index.js b/dist/src/services/checkBrokenConnections/index.js index 0d8d7fe..60a96da 100644 --- a/dist/src/services/checkBrokenConnections/index.js +++ b/dist/src/services/checkBrokenConnections/index.js @@ -27,7 +27,7 @@ class CheckBrokenConnections { checkConnections() { const clientsIds = this.realm.getClientsIds(); const now = new Date().getTime(); - const aliveTimeout = this.config.alive_timeout; + const { alive_timeout: aliveTimeout } = this.config; for (const clientId of clientsIds) { const client = this.realm.getClientById(clientId); const timeSinceLastPing = now - client.getLastPing(); diff --git a/package.json b/package.json index 5160569..8aec916 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "lint": "tslint -c tslint.json -p tsconfig.json --fix", "tsc": "tsc", "prebuild": "npm run lint", - "test": "npm run lint && mocha \"test/**/*.js\"", + "test": "npm run lint && npm run build && mocha \"test/**/*.js\"", "start": "bin/peerjs --port ${PORT:=9000}", "dev:start": "npm-run-all build start", "dev": "nodemon --watch src -e ts --exec npm run dev:start" diff --git a/src/api/index.ts b/src/api/index.ts index 9b44cc6..f1539af 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -2,7 +2,7 @@ import bodyParser from "body-parser"; import cors from "cors"; import express from "express"; import publicContent from "../../app.json"; -import { IConfig } from "../../config/"; +import { IConfig } from "../config"; import { IMessageHandler } from "../messageHandler"; import { IRealm } from "../models/realm"; import { AuthMiddleware } from "./middleware/auth"; diff --git a/src/api/middleware/auth/index.ts b/src/api/middleware/auth/index.ts index 92c7cdf..c46e206 100644 --- a/src/api/middleware/auth/index.ts +++ b/src/api/middleware/auth/index.ts @@ -1,5 +1,5 @@ import express from "express"; -import { IConfig } from "../../../../config"; +import { IConfig } from "../../../config"; import { Errors } from "../../../enums"; import { IRealm } from "../../../models/realm"; import { IMiddleware } from "../middleware"; diff --git a/src/api/v1/public/index.ts b/src/api/v1/public/index.ts index ab8ded9..b968102 100644 --- a/src/api/v1/public/index.ts +++ b/src/api/v1/public/index.ts @@ -1,5 +1,5 @@ import express from "express"; -import { IConfig } from "../../../../config"; +import { IConfig } from "../../../config"; import { IRealm } from "../../../models/realm"; export default ({ config, realm }: { diff --git a/config/index.ts b/src/config/index.ts similarity index 97% rename from config/index.ts rename to src/config/index.ts index cfff64c..3683e73 100644 --- a/config/index.ts +++ b/src/config/index.ts @@ -8,7 +8,7 @@ export interface IConfig { readonly allow_discovery: boolean; readonly proxied: boolean | string; readonly cleanup_out_msgs: number; - readonly ssl: { + readonly ssl?: { key: string; cert: string; }; diff --git a/src/index.ts b/src/index.ts index 4b50679..849e33f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,8 +5,8 @@ import http from "http"; import https from "https"; import { Server } from "net"; -import defaultConfig, { IConfig } from "../config"; import { Api } from "./api"; +import defaultConfig, { IConfig } from "./config"; import { MessageHandler } from "./messageHandler"; import { IClient } from "./models/client"; import { IMessage } from "./models/message"; @@ -39,9 +39,7 @@ const init = ({ app, server, options }: { const wss: IWebSocketServer = new WebSocketServer({ server, realm, - config: { - ...config, - } + config }); wss.on("connection", (client: IClient) => { diff --git a/src/messageHandler/handlers/heartbeat/index.ts b/src/messageHandler/handlers/heartbeat/index.ts index 135b730..6d8fcdf 100644 --- a/src/messageHandler/handlers/heartbeat/index.ts +++ b/src/messageHandler/handlers/heartbeat/index.ts @@ -1,7 +1,7 @@ import { IClient } from "../../../models/client"; -export default function(client: IClient): boolean { +export const HeartbeatHandler = (client: IClient): boolean => { const nowTime = new Date().getTime(); client.setLastPing(nowTime); return true; -} +}; diff --git a/src/messageHandler/handlers/index.ts b/src/messageHandler/handlers/index.ts new file mode 100644 index 0000000..45095d3 --- /dev/null +++ b/src/messageHandler/handlers/index.ts @@ -0,0 +1,2 @@ +export { HeartbeatHandler } from "./heartbeat"; +export { TransmissionHandler } from "./transmission"; diff --git a/src/messageHandler/handlers/transmission/index.ts b/src/messageHandler/handlers/transmission/index.ts index fc24479..7be3cb6 100644 --- a/src/messageHandler/handlers/transmission/index.ts +++ b/src/messageHandler/handlers/transmission/index.ts @@ -3,7 +3,7 @@ import { IClient } from "../../../models/client"; import { IMessage } from "../../../models/message"; import { IRealm } from "../../../models/realm"; -export default function({ realm }: { realm: IRealm }): (client: IClient, message: IMessage) => boolean { +export const TransmissionHandler = ({ realm }: { realm: IRealm }): (client: IClient, message: IMessage) => boolean => { const handle = (client: IClient, message: IMessage) => { const type = message.type; const srcId = message.src; @@ -55,4 +55,4 @@ export default function({ realm }: { realm: IRealm }): (client: IClient, message }; return handle; -} +}; diff --git a/src/messageHandler/index.ts b/src/messageHandler/index.ts index a892c98..cb75920 100644 --- a/src/messageHandler/index.ts +++ b/src/messageHandler/index.ts @@ -3,8 +3,7 @@ import { IClient } from "../models/client"; import { IMessage } from "../models/message"; import { IRealm } from "../models/realm"; import { Handler } from "./handler"; -import HeartbeatHandler from "./handlers/heartbeat"; -import TransmissionHandler from "./handlers/transmission"; +import { HeartbeatHandler, TransmissionHandler } from "./handlers"; import { IMessageHandlers, MessageHandlers } from "./messageHandlers"; export interface IMessageHandler { diff --git a/src/services/checkBrokenConnections/index.ts b/src/services/checkBrokenConnections/index.ts index f4629f9..29f94f4 100644 --- a/src/services/checkBrokenConnections/index.ts +++ b/src/services/checkBrokenConnections/index.ts @@ -1,4 +1,4 @@ -import { IConfig } from "../../../config"; +import { IConfig } from "../../config"; import { IClient } from "../../models/client"; import { IRealm } from "../../models/realm"; @@ -37,17 +37,19 @@ export class CheckBrokenConnections { this.start(); }, this.checkInterval); } + public stop(): void { if (this.timeoutId) { clearTimeout(this.timeoutId); this.timeoutId = null; } } + private checkConnections(): void { const clientsIds = this.realm.getClientsIds(); const now = new Date().getTime(); - const aliveTimeout = this.config.alive_timeout; + const { alive_timeout: aliveTimeout } = this.config; for (const clientId of clientsIds) { const client = this.realm.getClientById(clientId); diff --git a/src/services/messagesExpire/index.ts b/src/services/messagesExpire/index.ts index b39c16b..4d8ebe7 100644 --- a/src/services/messagesExpire/index.ts +++ b/src/services/messagesExpire/index.ts @@ -1,4 +1,4 @@ -import { IConfig } from "../../../config"; +import { IConfig } from "../../config"; import { MessageType } from "../../enums"; import { IMessageHandler } from "../../messageHandler"; import { IRealm } from "../../models/realm"; diff --git a/src/services/webSocketServer/index.ts b/src/services/webSocketServer/index.ts index 5c59e19..ae0ddf2 100644 --- a/src/services/webSocketServer/index.ts +++ b/src/services/webSocketServer/index.ts @@ -2,7 +2,7 @@ import EventEmitter from "events"; import { IncomingMessage } from "http"; import url from "url"; import WebSocketLib from "ws"; -import { IConfig } from "../../../config"; +import { IConfig } from "../../config"; import { Errors, MessageType } from "../../enums"; import { Client, IClient } from "../../models/client"; import { IRealm } from "../../models/realm"; diff --git a/test/messageHandler/handlers/heartbeat/index.js b/test/messageHandler/handlers/heartbeat/index.js index bd3ce5d..b5c39c2 100644 --- a/test/messageHandler/handlers/heartbeat/index.js +++ b/test/messageHandler/handlers/heartbeat/index.js @@ -1,6 +1,6 @@ -import { expect } from 'chai'; -const Client = require('../../../../src/models/client'); -const heartbeatHandler = require('../../../../src/messageHandler/handlers/heartbeat'); +const { expect } = require('chai'); +const { Client } = require('../../../../dist/src/models/client'); +const { HeartbeatHandler } = require('../../../../dist/src/messageHandler/handlers'); describe('Heartbeat handler', () => { it('should update last ping time', () => { @@ -9,7 +9,7 @@ describe('Heartbeat handler', () => { const nowTime = new Date().getTime(); - heartbeatHandler(client); + HeartbeatHandler(client); expect(client.getLastPing()).to.be.closeTo(nowTime, 2); }); diff --git a/test/models/realm.js b/test/models/realm.js index 16e0bd8..b8fbd63 100644 --- a/test/models/realm.js +++ b/test/models/realm.js @@ -1,6 +1,6 @@ const { expect } = require('chai'); -const Realm = require('../../src/models/realm'); -const Client = require('../../src/models/client'); +const { Realm } = require('../../dist/src/models/realm'); +const { Client } = require('../../dist/src/models/client'); describe('Realm', () => { describe('#generateClientId', () => { diff --git a/test/services/checkBrokenConnections/index.js b/test/services/checkBrokenConnections/index.js index 1d77ad5..6ac94fd 100644 --- a/test/services/checkBrokenConnections/index.js +++ b/test/services/checkBrokenConnections/index.js @@ -1,13 +1,13 @@ const { expect } = require('chai'); -const Client = require('../../../src/models/client'); -const Realm = require('../../../src/models/realm'); -const checkBrokenConnectionsBuilder = require('../../../src/services/checkBrokenConnections'); +const { Client } = require('../../../dist/src/models/client'); +const { Realm } = require('../../../dist/src/models/realm'); +const { CheckBrokenConnections } = require('../../../dist/src/services/checkBrokenConnections'); describe('checkBrokenConnections service', () => { it('should remove client after 2 checks', (done) => { const realm = new Realm(); - const doubleCheckTime = 55;//~ equals to checkBrokenConnections.CHECK_INTERVAL * 2 - const checkBrokenConnections = checkBrokenConnectionsBuilder({ realm, config: { alive_timeout: doubleCheckTime }, checkInterval: 30 }); + const doubleCheckTime = 55;//~ equals to checkBrokenConnections.checkInterval * 2 + const checkBrokenConnections = new CheckBrokenConnections({ realm, config: { alive_timeout: doubleCheckTime }, checkInterval: 30 }); const client = new Client({ id: 'id', token: '' }); realm.setClient(client, 'id'); @@ -17,13 +17,13 @@ describe('checkBrokenConnections service', () => { expect(realm.getClientById('id')).to.be.undefined; checkBrokenConnections.stop(); done(); - }, checkBrokenConnections.CHECK_INTERVAL * 2 + 3); + }, checkBrokenConnections.checkInterval * 2 + 10); }); it('should remove client after 1 ping', (done) => { const realm = new Realm(); - const doubleCheckTime = 55;//~ equals to checkBrokenConnections.CHECK_INTERVAL * 2 - const checkBrokenConnections = checkBrokenConnectionsBuilder({ realm, config: { alive_timeout: doubleCheckTime }, checkInterval: 30 }); + const doubleCheckTime = 55;//~ equals to checkBrokenConnections.checkInterval * 2 + const checkBrokenConnections = new CheckBrokenConnections({ realm, config: { alive_timeout: doubleCheckTime }, checkInterval: 30 }); const client = new Client({ id: 'id', token: '' }); realm.setClient(client, 'id'); @@ -37,7 +37,7 @@ describe('checkBrokenConnections service', () => { expect(realm.getClientById('id')).to.be.undefined; checkBrokenConnections.stop(); done(); - }, checkBrokenConnections.CHECK_INTERVAL * 2 + 10); - }, checkBrokenConnections.CHECK_INTERVAL); + }, checkBrokenConnections.checkInterval * 2 + 10); + }, checkBrokenConnections.checkInterval); }); }); diff --git a/tsconfig.json b/tsconfig.json index 677ac8b..187507c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,11 +21,10 @@ }, "include": [ "./src/**/*", - "./config/**/*", ], "exclude": [ "./test/", "./node_modules/", - "./bin/" + "./bin/", ] } \ No newline at end of file