// Initialise tracing FIRST so auto-instrumentation can patch http/etc. require("./tracing"); const http = require("http"); const next = require("next"); const { Server } = require("socket.io"); const { parse } = require("url"); const dev = process.env.NODE_ENV !== "production"; const hostname = "0.0.0.0"; const port = parseInt(process.env.PORT || "3000", 10); const app = next({ dev, hostname, port }); const handle = app.getRequestHandler(); app.prepare().then(() => { const server = http.createServer((req, res) => { try { const parsedUrl = parse(req.url, true); handle(req, res, parsedUrl); } catch (err) { console.error("Error handling request:", err); res.statusCode = 500; res.end("internal error"); } }); const io = new Server(server, { cors: { origin: true, credentials: true }, path: "/socket.io", transports: ["websocket", "polling"], }); // Register socket handlers (compiled JS at runtime via require) const { registerHandlers } = require("./server/socket-handlers.js"); registerHandlers(io); server.listen(port, hostname, () => { console.log(`Server ready on :${port}`); }); process.on("SIGINT", () => { server.close(() => process.exit(0)); }); });