Ver código fonte

fix warnings

afrokick 5 anos atrás
pai
commit
7c23ed8351

+ 4 - 2
dist/src/api/v1/calls/index.js

@@ -8,10 +8,12 @@ exports.default = ({ realm, messageHandler }) => {
     const app = express_1.default.Router();
     const handle = (req, res, next) => {
         const { id } = req.params;
-        if (!id) {
+        if (!id)
             return next();
-        }
         const client = realm.getClientById(id);
+        if (!client) {
+            throw new Error(`client not found:${id}`);
+        }
         const { type, dst, payload } = req.body;
         const message = {
             type,

+ 1 - 6
dist/src/index.js

@@ -95,12 +95,7 @@ function PeerServer(options = {}, callback) {
     }
     const peerjs = ExpressPeerServer(server, newOptions);
     app.use(peerjs);
-    if (callback) {
-        server.listen(port, () => callback(server));
-    }
-    else {
-        server.listen(port);
-    }
+    server.listen(port, () => { var _a; return (_a = callback) === null || _a === void 0 ? void 0 : _a(server); });
     return peerjs;
 }
 exports.PeerServer = PeerServer;

+ 4 - 2
dist/src/messageHandler/handlers/heartbeat/index.js

@@ -1,7 +1,9 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.HeartbeatHandler = (client) => {
-    const nowTime = new Date().getTime();
-    client.setLastPing(nowTime);
+    if (client) {
+        const nowTime = new Date().getTime();
+        client.setLastPing(nowTime);
+    }
     return true;
 };

+ 5 - 4
dist/src/messageHandler/handlers/transmission/index.js

@@ -9,10 +9,11 @@ exports.TransmissionHandler = ({ realm }) => {
         const destinationClient = realm.getClientById(dstId);
         // User is connected!
         if (destinationClient) {
+            const socket = destinationClient.getSocket();
             try {
-                if (destinationClient.getSocket()) {
+                if (socket) {
                     const data = JSON.stringify(message);
-                    destinationClient.getSocket().send(data);
+                    socket.send(data);
                 }
                 else {
                     // Neither socket no res available. Peer dead?
@@ -23,8 +24,8 @@ exports.TransmissionHandler = ({ realm }) => {
                 // This happens when a peer disconnects without closing connections and
                 // the associated WebSocket has not closed.
                 // Tell other side to stop trying.
-                if (destinationClient.getSocket()) {
-                    destinationClient.getSocket().close();
+                if (socket) {
+                    socket.close();
                 }
                 else {
                     realm.removeClientById(destinationClient.getId());

+ 2 - 4
dist/src/messageHandler/messageHandlers.js

@@ -5,17 +5,15 @@ class MessageHandlers {
         this.handlers = new Map();
     }
     registerHandler(messageType, handler) {
-        if (this.handlers.has(messageType)) {
+        if (this.handlers.has(messageType))
             return;
-        }
         this.handlers.set(messageType, handler);
     }
     handle(client, message) {
         const { type } = message;
         const handler = this.handlers.get(type);
-        if (!handler) {
+        if (!handler)
             return false;
-        }
         return handler(client, message);
     }
 }

+ 2 - 1
dist/src/models/client.js

@@ -26,7 +26,8 @@ class Client {
         this.lastPing = lastPing;
     }
     send(data) {
-        this.socket.send(JSON.stringify(data));
+        var _a;
+        (_a = this.socket) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify(data));
     }
 }
 exports.Client = Client;

+ 1 - 2
dist/src/models/realm.js

@@ -24,9 +24,8 @@ class Realm {
     }
     removeClientById(id) {
         const client = this.getClientById(id);
-        if (!client) {
+        if (!client)
             return false;
-        }
         this.clients.delete(id);
         return true;
     }

+ 5 - 11
dist/src/services/checkBrokenConnections/index.js

@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
 const DEFAULT_CHECK_INTERVAL = 300;
 class CheckBrokenConnections {
     constructor({ realm, config, checkInterval = DEFAULT_CHECK_INTERVAL, onClose }) {
+        this.timeoutId = null;
         this.realm = realm;
         this.config = config;
         this.onClose = onClose;
@@ -25,30 +26,23 @@ class CheckBrokenConnections {
         }
     }
     checkConnections() {
+        var _a, _b, _c;
         const clientsIds = this.realm.getClientsIds();
         const now = new Date().getTime();
         const { alive_timeout: aliveTimeout } = this.config;
         for (const clientId of clientsIds) {
             const client = this.realm.getClientById(clientId);
             const timeSinceLastPing = now - client.getLastPing();
-            if (timeSinceLastPing < aliveTimeout) {
+            if (timeSinceLastPing < aliveTimeout)
                 continue;
-            }
             try {
-                if (client.getSocket()) {
-                    client.getSocket().close();
-                }
-            }
-            catch (e) {
-                // @ts-nocheck
+                (_a = client.getSocket()) === null || _a === void 0 ? void 0 : _a.close();
             }
             finally {
                 this.realm.clearMessageQueue(clientId);
                 this.realm.removeClientById(clientId);
                 client.setSocket(null);
-                if (this.onClose) {
-                    this.onClose(client);
-                }
+                (_c = (_b = this).onClose) === null || _c === void 0 ? void 0 : _c.call(_b, client);
             }
         }
     }

+ 2 - 3
dist/src/services/messagesExpire/index.js

@@ -33,13 +33,12 @@ class MessagesExpire {
         for (const destinationClientId of destinationClientsIds) {
             const messageQueue = this.realm.getMessageQueueById(destinationClientId);
             const lastReadDiff = now - messageQueue.getLastReadAt();
-            if (lastReadDiff < maxDiff) {
+            if (lastReadDiff < maxDiff)
                 continue;
-            }
             const messages = messageQueue.getMessages();
             for (const message of messages) {
                 if (!seen[message.src]) {
-                    this.messageHandler.handle(null, {
+                    this.messageHandler.handle(undefined, {
                         type: enums_1.MessageType.EXPIRE,
                         src: message.dst,
                         dst: message.src

+ 6 - 2
src/api/v1/calls/index.ts

@@ -3,16 +3,20 @@ import { IMessageHandler } from "../../../messageHandler";
 import { IMessage } from "../../../models/message";
 import { IRealm } from "../../../models/realm";
 
-export default ({ realm, messageHandler }: { realm: IRealm, messageHandler: IMessageHandler }): express.Router => {
+export default ({ realm, messageHandler }: { realm: IRealm, messageHandler: IMessageHandler; }): express.Router => {
   const app = express.Router();
 
   const handle = (req: express.Request, res: express.Response, next: express.NextFunction): any => {
     const { id } = req.params;
 
-    if (!id) { return next(); }
+    if (!id) return next();
 
     const client = realm.getClientById(id);
 
+    if (!client) {
+      throw new Error(`client not found:${id}`);
+    }
+
     const { type, dst, payload } = req.body;
 
     const message: IMessage = {

+ 3 - 7
src/index.ts

@@ -18,7 +18,7 @@ import { IWebSocketServer, WebSocketServer } from "./services/webSocketServer";
 const init = ({ app, server, options }: {
   app: express.Express,
   server: Server,
-  options: IConfig
+  options: IConfig;
 }) => {
   const config = options;
   const realm: IRealm = new Realm();
@@ -125,7 +125,7 @@ function PeerServer(options: Optional<IConfig> = {}, callback?: (server: Server)
   let server: Server;
 
   if (newOptions.ssl && newOptions.ssl.key && newOptions.ssl.cert) {
-    server = https.createServer(options.ssl, app);
+    server = https.createServer(options.ssl!, app);
     // @ts-ignore
     delete newOptions.ssl;
   } else {
@@ -135,11 +135,7 @@ function PeerServer(options: Optional<IConfig> = {}, callback?: (server: Server)
   const peerjs = ExpressPeerServer(server, newOptions);
   app.use(peerjs);
 
-  if (callback) {
-    server.listen(port, () => callback(server));
-  } else {
-    server.listen(port);
-  }
+  server.listen(port, () => callback?.(server));
 
   return peerjs;
 }

+ 1 - 1
src/messageHandler/handler.ts

@@ -1,4 +1,4 @@
 import { IClient } from "../models/client";
 import { IMessage } from "../models/message";
 
-export type Handler = (client: IClient, message: IMessage) => boolean;
+export type Handler = (client: IClient | undefined, message: IMessage) => boolean;

+ 6 - 3
src/messageHandler/handlers/heartbeat/index.ts

@@ -1,7 +1,10 @@
 import { IClient } from "../../../models/client";
 
-export const HeartbeatHandler = (client: IClient): boolean => {
-  const nowTime = new Date().getTime();
-  client.setLastPing(nowTime);
+export const HeartbeatHandler = (client: IClient | undefined): boolean => {
+  if (client) {
+    const nowTime = new Date().getTime();
+    client.setLastPing(nowTime);
+  }
+
   return true;
 };

+ 7 - 6
src/messageHandler/handlers/transmission/index.ts

@@ -3,8 +3,8 @@ import { IClient } from "../../../models/client";
 import { IMessage } from "../../../models/message";
 import { IRealm } from "../../../models/realm";
 
-export const TransmissionHandler = ({ realm }: { realm: IRealm }): (client: IClient, message: IMessage) => boolean => {
-  const handle = (client: IClient, message: IMessage) => {
+export const TransmissionHandler = ({ realm }: { realm: IRealm; }): (client: IClient | undefined, message: IMessage) => boolean => {
+  const handle = (client: IClient | undefined, message: IMessage) => {
     const type = message.type;
     const srcId = message.src;
     const dstId = message.dst;
@@ -13,11 +13,12 @@ export const TransmissionHandler = ({ realm }: { realm: IRealm }): (client: ICli
 
     // User is connected!
     if (destinationClient) {
+      const socket = destinationClient.getSocket();
       try {
-        if (destinationClient.getSocket()) {
+        if (socket) {
           const data = JSON.stringify(message);
 
-          destinationClient.getSocket().send(data);
+          socket.send(data);
         } else {
           // Neither socket no res available. Peer dead?
           throw new Error("Peer dead");
@@ -26,8 +27,8 @@ export const TransmissionHandler = ({ realm }: { realm: IRealm }): (client: ICli
         // This happens when a peer disconnects without closing connections and
         // the associated WebSocket has not closed.
         // Tell other side to stop trying.
-        if (destinationClient.getSocket()) {
-          destinationClient.getSocket().close();
+        if (socket) {
+          socket.close();
         } else {
           realm.removeClientById(destinationClient.getId());
         }

+ 4 - 4
src/messageHandler/index.ts

@@ -7,7 +7,7 @@ import { HeartbeatHandler, TransmissionHandler } from "./handlers";
 import { IMessageHandlers, MessageHandlers } from "./messageHandlers";
 
 export interface IMessageHandler {
-  handle(client: IClient, message: IMessage): boolean;
+  handle(client: IClient | undefined, message: IMessage): boolean;
 }
 
 export class MessageHandler implements IMessageHandler {
@@ -17,7 +17,7 @@ export class MessageHandler implements IMessageHandler {
     const transmissionHandler: Handler = TransmissionHandler({ realm });
     const heartbeatHandler: Handler = HeartbeatHandler;
 
-    const handleTransmission: Handler = (client: IClient, message: IMessage): boolean => {
+    const handleTransmission: Handler = (client: IClient | undefined, message: IMessage): boolean => {
       return transmissionHandler(client, {
         type: message.type,
         src: message.src,
@@ -26,7 +26,7 @@ export class MessageHandler implements IMessageHandler {
       });
     };
 
-    const handleHeartbeat = (client: IClient, message: IMessage) => heartbeatHandler(client, message);
+    const handleHeartbeat = (client: IClient | undefined, message: IMessage) => heartbeatHandler(client, message);
 
     this.messageHandlers.registerHandler(MessageType.HEARTBEAT, handleHeartbeat);
     this.messageHandlers.registerHandler(MessageType.OFFER, handleTransmission);
@@ -36,7 +36,7 @@ export class MessageHandler implements IMessageHandler {
     this.messageHandlers.registerHandler(MessageType.EXPIRE, handleTransmission);
   }
 
-  public handle(client: IClient, message: IMessage): boolean {
+  public handle(client: IClient | undefined, message: IMessage): boolean {
     return this.messageHandlers.handle(client, message);
   }
 }

+ 4 - 4
src/messageHandler/messageHandlers.ts

@@ -5,24 +5,24 @@ import { Handler } from "./handler";
 
 export interface IMessageHandlers {
     registerHandler(messageType: MessageType, handler: Handler): void;
-    handle(client: IClient, message: IMessage): boolean;
+    handle(client: IClient | undefined, message: IMessage): boolean;
 }
 
 export class MessageHandlers implements IMessageHandlers {
     private readonly handlers: Map<MessageType, Handler> = new Map();
 
     public registerHandler(messageType: MessageType, handler: Handler): void {
-        if (this.handlers.has(messageType)) { return; }
+        if (this.handlers.has(messageType)) return;
 
         this.handlers.set(messageType, handler);
     }
 
-    public handle(client: IClient, message: IMessage): boolean {
+    public handle(client: IClient | undefined, message: IMessage): boolean {
         const { type } = message;
 
         const handler = this.handlers.get(type);
 
-        if (!handler) { return false; }
+        if (!handler) return false;
 
         return handler(client, message);
     }

+ 5 - 5
src/models/client.ts

@@ -7,7 +7,7 @@ export interface IClient {
 
   getSocket(): MyWebSocket | null;
 
-  setSocket(socket: MyWebSocket): void;
+  setSocket(socket: MyWebSocket | null): void;
 
   getLastPing(): number;
 
@@ -19,10 +19,10 @@ export interface IClient {
 export class Client implements IClient {
   private readonly id: string;
   private readonly token: string;
-  private socket: MyWebSocket = null;
+  private socket: MyWebSocket | null = null;
   private lastPing: number = new Date().getTime();
 
-  constructor({ id, token }: { id: string, token: string }) {
+  constructor({ id, token }: { id: string, token: string; }) {
     this.id = id;
     this.token = token;
   }
@@ -39,7 +39,7 @@ export class Client implements IClient {
     return this.socket;
   }
 
-  public setSocket(socket: MyWebSocket): void {
+  public setSocket(socket: MyWebSocket | null): void {
     this.socket = socket;
   }
 
@@ -52,6 +52,6 @@ export class Client implements IClient {
   }
 
   public send(data: any): void {
-    this.socket.send(JSON.stringify(data));
+    this.socket?.send(JSON.stringify(data));
   }
 }

+ 1 - 1
src/models/messageQueue.ts

@@ -25,7 +25,7 @@ export class MessageQueue implements IMessageQueue {
   public readMessage(): IMessage | null {
     if (this.messages.length > 0) {
       this.lastReadAt = new Date().getTime();
-      return this.messages.shift();
+      return this.messages.shift()!;
     }
 
     return null;

+ 2 - 2
src/models/realm.ts

@@ -46,7 +46,7 @@ export class Realm implements IRealm {
   public removeClientById(id: string): boolean {
     const client = this.getClientById(id);
 
-    if (!client) { return false; }
+    if (!client) return false;
 
     this.clients.delete(id);
 
@@ -62,7 +62,7 @@ export class Realm implements IRealm {
       this.messageQueues.set(id, new MessageQueue());
     }
 
-    this.getMessageQueueById(id).addMessage(message);
+    this.getMessageQueueById(id)!.addMessage(message);
   }
 
   public clearMessageQueue(id: string): void {

+ 7 - 10
src/services/checkBrokenConnections/index.ts

@@ -9,7 +9,7 @@ type CustomConfig = Pick<IConfig, 'alive_timeout'>;
 export class CheckBrokenConnections {
 
   public readonly checkInterval: number;
-  private timeoutId: NodeJS.Timeout;
+  private timeoutId: NodeJS.Timeout | null = null;
   private readonly realm: IRealm;
   private readonly config: CustomConfig;
   private readonly onClose?: (client: IClient) => void;
@@ -18,7 +18,7 @@ export class CheckBrokenConnections {
     realm: IRealm,
     config: CustomConfig,
     checkInterval?: number,
-    onClose?: (client: IClient) => void
+    onClose?: (client: IClient) => void;
   }) {
     this.realm = realm;
     this.config = config;
@@ -54,23 +54,20 @@ export class CheckBrokenConnections {
     const { alive_timeout: aliveTimeout } = this.config;
 
     for (const clientId of clientsIds) {
-      const client = this.realm.getClientById(clientId);
+      const client = this.realm.getClientById(clientId)!;
       const timeSinceLastPing = now - client.getLastPing();
 
-      if (timeSinceLastPing < aliveTimeout) { continue; }
+      if (timeSinceLastPing < aliveTimeout) continue;
 
       try {
-        if (client.getSocket()) {
-          client.getSocket().close();
-        }
-      } catch (e) {
-        // @ts-nocheck
+        client.getSocket()?.close();
       } finally {
         this.realm.clearMessageQueue(clientId);
         this.realm.removeClientById(clientId);
+
         client.setSocket(null);
 
-        if (this.onClose) { this.onClose(client); }
+        this.onClose?.(client);
       }
     }
   }

+ 5 - 5
src/services/messagesExpire/index.ts

@@ -13,7 +13,7 @@ export class MessagesExpire implements IMessagesExpire {
   private readonly config: IConfig;
   private readonly messageHandler: IMessageHandler;
 
-  private timeoutId: NodeJS.Timeout = null;
+  private timeoutId: NodeJS.Timeout | null = null;
 
   constructor({ realm, config, messageHandler }: {
     realm: IRealm;
@@ -53,19 +53,19 @@ export class MessagesExpire implements IMessagesExpire {
     const now = new Date().getTime();
     const maxDiff = this.config.expire_timeout;
 
-    const seen: { [id: string]: boolean } = {};
+    const seen: Record<string, boolean> = {};
 
     for (const destinationClientId of destinationClientsIds) {
-      const messageQueue = this.realm.getMessageQueueById(destinationClientId);
+      const messageQueue = this.realm.getMessageQueueById(destinationClientId)!;
       const lastReadDiff = now - messageQueue.getLastReadAt();
 
-      if (lastReadDiff < maxDiff) { continue; }
+      if (lastReadDiff < maxDiff) continue;
 
       const messages = messageQueue.getMessages();
 
       for (const message of messages) {
         if (!seen[message.src]) {
-          this.messageHandler.handle(null, {
+          this.messageHandler.handle(undefined, {
             type: MessageType.EXPIRE,
             src: message.dst,
             dst: message.src

+ 2 - 2
src/services/webSocketServer/index.ts

@@ -25,7 +25,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
   private readonly config: IConfig;
   private readonly webSocketServer: WebSocketLib.Server;
 
-  constructor({ server, realm, config }: { server: any, realm: IRealm, config: IConfig }) {
+  constructor({ server, realm, config }: { server: any, realm: IRealm, config: IConfig; }) {
     super();
     this.setMaxListeners(0);
     this.realm = realm;
@@ -41,7 +41,7 @@ export class WebSocketServer extends EventEmitter implements IWebSocketServer {
   }
 
   private _onSocketConnection(socket: MyWebSocket, req: IncomingMessage): void {
-    const { query = {} } = url.parse(req.url, true);
+    const { query = {} } = url.parse(req.url!, true);
 
     const { id, token, key }: IAuthParams = query;
 

+ 4 - 0
tsconfig.json

@@ -5,6 +5,7 @@
         ],
         "target": "es2016",
         "module": "commonjs",
+        "strict": true,
         "esModuleInterop": true,
         "downlevelIteration": true,
         "moduleResolution": "node",
@@ -16,6 +17,9 @@
         "sourceMap": false,
         "outDir": "dist"
     },
+    "include": [
+        "./src/**/*",
+    ],
     "exclude": [
         "test",
         "bin",