From 4e50a3fef26f3477b9e5c1794b5afbaafb461150 Mon Sep 17 00:00:00 2001 From: Maulik patel Date: Thu, 12 May 2022 18:48:19 +0000 Subject: [PATCH 1/2] Remove MQTT ove TLS. Using MQTT over websocket --- index.ts | 24 +++++++-------- package-lock.json | 78 ++++++++++++++++++++++++++++++++++++----------- package.json | 5 +-- 3 files changed, 75 insertions(+), 32 deletions(-) diff --git a/index.ts b/index.ts index b0d629c..c6da1b8 100644 --- a/index.ts +++ b/index.ts @@ -1,7 +1,6 @@ import express, { Express, Request, Response } from 'express'; import dotenv from 'dotenv'; -import aedes from 'aedes'; -import { createServer } from 'aedes-server-factory'; +import aedes from 'aedes'; import prisma from "./src/lib/prisma.lib"; import { router } from './src/routes/routes'; import { authenticate,authorizePublish,authorizeSubscribe } from './src/middleware/aedesAuth.middleware'; @@ -10,6 +9,9 @@ import morgan from 'morgan' import helmet from 'helmet'; import { main } from './prisma/seed'; import { errorLogger, errorMiddleware } from './src/middleware/error.middleware'; +import { createWebSocketStream, Server } from 'ws' +import {createServer} from 'http' + main() .catch((e) => { @@ -43,12 +45,6 @@ app.use('/',router) app.use(errorLogger) app.use(errorMiddleware) -app.listen(port, () => { - console.log(`⚡️[api-server]: Server is running at ${port} port`); -}); - -const mqttPort = process.env.MQTTPORT || 1883; - export const broker = aedes() @@ -61,12 +57,16 @@ broker.on('clientDisconnect', clientDisconnect) -const server = createServer(broker) - +const httpServer = createServer(app) +const wsServer = new Server({server: httpServer}) +wsServer.on('connection',(conn , req) => { + var stream = createWebSocketStream(conn) + broker.handle(stream) +}) -server.listen(mqttPort, function () { - console.log(`⚡️[mqtt-server]: Server is running at ${mqttPort}`) +httpServer.listen(port, function () { + console.log(`⚡️[server]: Server is running at ${port}`) }); diff --git a/package-lock.json b/package-lock.json index e9d6792..c22ac2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,9 @@ "express-validator": "^6.14.0", "helmet": "^5.0.2", "jsonwebtoken": "^8.5.1", - "morgan": "^1.10.0" + "morgan": "^1.10.0", + "prisma": "^3.13.0", + "ws": "^8.6.0" }, "devDependencies": { "@types/bcrypt": "^5.0.0", @@ -27,9 +29,9 @@ "@types/jsonwebtoken": "^8.5.8", "@types/morgan": "^1.9.3", "@types/node": "^17.0.31", + "@types/ws": "^8.5.3", "concurrently": "^7.1.0", "nodemon": "^2.0.16", - "prisma": "^3.13.0", "ts-node": "^10.7.0", "typescript": "^4.6.4" } @@ -126,7 +128,6 @@ "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==", - "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { @@ -282,6 +283,15 @@ "@types/node": "*" } }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -423,6 +433,26 @@ "node": ">=10" } }, + "node_modules/aedes-server-factory/node_modules/ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -2443,7 +2473,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", - "devOptional": true, "hasInstallScript": true, "dependencies": { "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", @@ -2989,8 +3018,7 @@ "node_modules/ts-pattern": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", - "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==", - "devOptional": true + "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==" }, "node_modules/tslib": { "version": "1.14.1", @@ -3242,11 +3270,11 @@ } }, "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -3390,8 +3418,7 @@ "@prisma/engines": { "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", - "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==", - "devOptional": true + "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==" }, "@prisma/engines-version": { "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", @@ -3540,6 +3567,15 @@ "@types/node": "*" } }, + "@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3646,6 +3682,14 @@ "requires": { "aedes-protocol-decoder": "^2.0.1", "ws": "^7.5.0" + }, + "dependencies": { + "ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "requires": {} + } } }, "agent-base": { @@ -5179,7 +5223,6 @@ "version": "3.13.0", "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", - "devOptional": true, "requires": { "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", "ts-pattern": "^4.0.1" @@ -5581,8 +5624,7 @@ "ts-pattern": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", - "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==", - "devOptional": true + "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==" }, "tslib": { "version": "1.14.1", @@ -5778,9 +5820,9 @@ } }, "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", + "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", "requires": {} }, "xdg-basedir": { diff --git a/package.json b/package.json index fec3070..f292a0e 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "dependencies": { "@prisma/client": "^3.13.0", "aedes": "^0.46.3", - "aedes-server-factory": "^0.2.1", "bcrypt": "^5.0.1", "bcryptjs": "^2.4.3", "dotenv": "^16.0.0", @@ -25,7 +24,8 @@ "helmet": "^5.0.2", "jsonwebtoken": "^8.5.1", "morgan": "^1.10.0", - "prisma": "^3.13.0" + "prisma": "^3.13.0", + "ws": "^8.6.0" }, "devDependencies": { "@types/bcrypt": "^5.0.0", @@ -33,6 +33,7 @@ "@types/jsonwebtoken": "^8.5.8", "@types/morgan": "^1.9.3", "@types/node": "^17.0.31", + "@types/ws": "^8.5.3", "concurrently": "^7.1.0", "nodemon": "^2.0.16", "ts-node": "^10.7.0", From e569936c142b5a09128d2b3b9bd812c30d6cf18b Mon Sep 17 00:00:00 2001 From: Maulik patel Date: Thu, 12 May 2022 18:50:09 +0000 Subject: [PATCH 2/2] Updated docker-compose : Removed MQTT_PORT variable --- docker-compose.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ff58987..91e6cde 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,15 +7,13 @@ services: - db ports: - "3000:3000" - - "1883:1883" - - "5555:5555" + - "5555:5555" environment: DATABASE_URL: "postgresql://postgres:postgres@db:5432/postgres?schema=public" PORT: 3000 ADMIN_EMAIL: test@gmail.com ADMIN_PASSWORD: 1234 JWT_SECRET: ABCDEF - MQTTPORT: 1883 adminer: image: adminer