From c1760f03a8f61ec5b295ad2d3f24a513d97ed35a Mon Sep 17 00:00:00 2001 From: Ramprasad Date: Fri, 8 Nov 2024 13:18:25 +0530 Subject: [PATCH] changes --- .babelrc | 7 +++ .gitignore | 4 +- package.json | 19 +++++--- src/index.ts | 117 +++++++++++++++----------------------------------- tsconfig.json | 18 ++++---- 5 files changed, 67 insertions(+), 98 deletions(-) create mode 100644 .babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..d82b83c --- /dev/null +++ b/.babelrc @@ -0,0 +1,7 @@ +{ + "presets": [ + ["@babel/preset-env", { "targets": { "node": "current" } }], + "@babel/preset-typescript" + ], + "plugins": ["@babel/plugin-transform-runtime"] +} diff --git a/.gitignore b/.gitignore index 7af7f04..76add87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/node_modules -.env \ No newline at end of file +node_modules +dist \ No newline at end of file diff --git a/package.json b/package.json index c2f03e7..b54eaaa 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,11 @@ "version": "1.0.0", "main": "index.js", "scripts": { - "dev": "ts-node src/index.ts", - "build": "tsc", - "start": "node dist/index.js" + "build": "babel src --out-dir dist --extensions \".ts,.js\"", + "type-check": "tsc --noEmit", + "start": "node dist/index.js", + "dev": "nodemon --watch src --exec ts-node src/index.ts", + "test": "jest" }, "keywords": [], "author": "", @@ -13,16 +15,21 @@ "description": "", "dependencies": { "cors": "^2.8.5", - "crypto-js": "^4.2.0", - "dotenv": "^16.4.5", "express": "^4.21.1", "socket.io": "^4.8.0" }, "devDependencies": { - "@types/crypto-js": "^4.2.2", + "@babel/cli": "^7.25.9", + "@babel/core": "^7.26.0", + "@babel/node": "^7.26.0", + "@babel/plugin-transform-runtime": "^7.25.9", + "@babel/preset-env": "^7.26.0", + "@babel/preset-typescript": "^7.26.0", + "@babel/runtime": "^7.26.0", "@types/express": "^5.0.0", "@types/node": "^22.7.5", "@types/socket.io": "^3.0.2", + "nodemon": "^3.1.7", "ts-node": "^10.9.2", "typescript": "^5.6.3" } diff --git a/src/index.ts b/src/index.ts index 339660d..1e85897 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,7 +2,6 @@ import express, { Request, Response } from "express"; import { createServer, Server as HTTPServer } from "http"; import { Server as SocketIOServer, Socket } from "socket.io"; import cors from "cors"; -require("dotenv").config(); // Initialize Express const app = express(); @@ -10,10 +9,8 @@ const app = express(); // Set up CORS middleware for Express app.use( cors({ - origin: - process.env.NEXT_FRONTEND_URL || "https://realtime-voicecall.vercel.app", // Update this to the origin of your client + origin: "http://localhost:4200", // Update this to the origin of your client methods: ["GET", "POST"], - credentials: true, // Allow credentials (e.g., cookies) if needed }) ); @@ -24,10 +21,8 @@ const httpServer: HTTPServer = createServer(app); const io = new SocketIOServer(httpServer, { path: "/socket", // Define the WebSocket path cors: { - origin: - process.env.NEXT_FRONTEND_URL || "https://realtime-voicecall.vercel.app", // Update this to the origin of your client + origin: "http://localhost:4200", // Update this to the origin of your client methods: ["GET", "POST"], - credentials: true, // Allow credentials (e.g., cookies) if needed }, }); @@ -40,101 +35,59 @@ io.on("connection", (socket: Socket) => { // Handle user-online event socket.on("user-online", (user: any) => { - // console.log("User online:", user); - // Check if the same user exists in the map - for (const [key, value] of onlineUsers.entries()) { - console.log("value", value); - if (value.userId === user.userId) { - // Assuming user object has an 'id' property - onlineUsers.delete(key); - break; - } - } // Now we store the socket ID along with the user details - onlineUsers.set(socket.id, { ...user, socketId: socket.id }); - io.emit("online-users", Array.from(onlineUsers.values())); + onlineUsers.set(user, { userId: user, socketId: socket.id }); + // io.emit("online-users", Array.from(onlineUsers.values())); }); // Handle user disconnect event socket.on("disconnect", () => { - onlineUsers.delete(socket.id); - io.emit("online-users", Array.from(onlineUsers.values())); - io.emit("user-diconnected", socket.id); - console.log("User Disconnected", socket.id); + const userArr = Array.from(onlineUsers.values()); + const u = userArr.filter((item: any) => item.socketId == socket.id); + onlineUsers.delete(u[0].userId); }); - // Handle call-related events - - socket.on("call-request", (data) => { - console.log("Call request received on server:", data); - const { to } = data; - const caller = onlineUsers.get(socket.id); - console.log("Caller:", caller); - - if (caller) { + socket.on("ice-candidate", (data) => { + const { candidate, to } = data; + const calledTo = onlineUsers.get(to); + if (calledTo) { // Emit to the recipient's socket ID - io.to(to).emit("call-request", { caller }); + socket.to(calledTo.socketId).emit("get-ice-candidate", candidate); } }); - socket.on("send-message", (message) => { - const { recipentSocketId } = message; - - // Emit message to the specific recipient - const recipient = onlineUsers.get(recipentSocketId); - console.log("recipientSocketId:", recipient, recipentSocketId, onlineUsers); - if (recipient) { - io.to(recipentSocketId).emit("receive-message", message); - console.log("Message Received:", message); + // // Handle call-related events + socket.on("offer", (data) => { + const { offer, to, sender } = data; + const calledTo = onlineUsers.get(to); + if (calledTo) { + // Emit to the recipient's socket ID + socket.to(calledTo.socketId).emit("get-offer", { offer, sender: sender }); } }); - socket.on("send-user-typing", (user) => { - const { recipentSocketId } = user; - - // Emit message to the specific recipient - const recipient = onlineUsers.get(recipentSocketId); - if (recipient) { - io.to(recipentSocketId).emit("receive-user-typing"); + socket.on("call-request", (data) => { + const { answer, to } = data; + const calledTo = onlineUsers.get(to); + if (calledTo) { + socket.to(calledTo.socketId).emit("get-answer", answer); } }); - socket.on("send-user-typing-end", (user) => { - const { recipentSocketId } = user; - - // Emit message to the specific recipient - const recipient = onlineUsers.get(recipentSocketId); - if (recipient) { - io.to(recipentSocketId).emit("receive-user-typing-end"); + socket.on("call-accept", (data) => { + const { to } = data; + const calledTo = onlineUsers.get(to); + if (calledTo) { + socket.to(calledTo.socketId).emit("call-accepted"); } }); - socket.on("call-accepted", (data: { to: string }) => { - const caller = onlineUsers.get(socket.id); - socket.to(data.to).emit("call-accepted", { caller }); - }); - - socket.on("call-rejected", (data: { to: string }) => { - socket.to(data.to).emit("call-rejected"); - }); - - socket.on("webrtc-offer", (data: { to: string; offer: any }) => { - const caller = onlineUsers.get(socket.id); - socket.to(data.to).emit("webrtc-offer", { data, caller }); - }); - - socket.on("webrtc-answer", (data: { to: string; answer: any }) => { - console.log("webrtc-answer", data); - socket.to(data.to).emit("webrtc-answer", data); - }); - - socket.on("webrtc-ice-candidate", (data: { to: string; candidate: any }) => { - socket.to(data.to).emit("webrtc-ice-candidate", data); - }); - - // Handle call-ended event - socket.on("call-ended", (data: { to: string }) => { - socket.to(data.to).emit("call-ended"); + socket.on("call-reject", (data: { to: string }) => { + const { to } = data; + const calledTo = onlineUsers.get(to); + if (calledTo) { + socket.to(calledTo.socketId).emit("call-rejected"); + } }); }); diff --git a/tsconfig.json b/tsconfig.json index f3dc2bd..1ed4b1a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,15 @@ { "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, + "target": "ESNext", // Handled by Babel + "module": "CommonJS", // Node.js module system + "strict": true, // Enable strict type-checking + "esModuleInterop": true, // Allow default imports from CJS modules + "skipLibCheck": true, // Skip type checking of declaration files "forceConsistentCasingInFileNames": true, - "outDir": "./dist" + "outDir": "./dist", // Output directory + "rootDir": "./src", // Source directory + "noEmit": true // No need to emit files, Babel does that }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] }