import type { Server as HttpServer } from "node:http"; //import { dirname, join } from "node:path"; //import { fileURLToPath } from "node:url"; import { instrument } from "@socket.io/admin-ui"; import { Server } from "socket.io"; import { createLogger } from "../logger/logger.controller.js"; import { registerEmitter } from "./roomEmitter.socket.js"; import { createRoomEmitter, preseedRoom } from "./roomService.socket.js"; //const __filename = fileURLToPath(import.meta.url); //const __dirname = dirname(__filename); const log = createLogger({ module: "socket.io", subModule: "setup" }); export const setupSocketIORoutes = (baseUrl: string, server: HttpServer) => { const io = new Server(server, { path: `${baseUrl}/api/socket.io`, cors: { origin: ["http://localhost:3000", "https://admin.socket.io"], credentials: true, }, }); // ✅ Create emitter instance const { addDataToRoom } = createRoomEmitter(io); registerEmitter(addDataToRoom); io.on("connection", (s) => { log.info({}, `User connected: ${s.id}`); s.emit("welcome", { serverTime: Date.now(), availableRooms: ["logs", "labels"], version: "1.0.0", }); s.on("join-room", async (rn) => { s.join(rn); // get room seeded const history = await preseedRoom(rn); // send the intial data s.emit("room-update", { roomId: rn, payloads: history, initial: true, }); }); }); io.on("disconnect", (s) => { log.info({}, "User disconnected:", s.id); }); // admin stuff const admin = io.of("/admin"); admin.on("connection", (s) => { log.info({}, `User connected: ${s.id}`); }); admin.on("disconnect", (s) => { log.info({}, "User disconnected:", s.id); }); instrument(io, { auth: false, //namespaceName: "/admin", }); };