Files
storybid/packages/server/src/index.ts
T
2026-05-02 20:14:15 -05:00

51 lines
1.3 KiB
TypeScript

import "dotenv/config";
import { createServer } from "node:http";
import { Server } from "socket.io";
import type {
ServerToClientEvents,
ClientToServerEvents,
InterServerEvents,
SocketData,
} from "@storybid/shared";
import { app } from "./app.js";
import { registerSocketHandlers } from "./socket/index.js";
import { startScheduler } from "./services/scheduler.js";
import { prisma } from "./lib/prisma.js";
const PORT = parseInt(process.env["PORT"] ?? "3001", 10);
const httpServer = createServer(app);
export const io = new Server<
ClientToServerEvents,
ServerToClientEvents,
InterServerEvents,
SocketData
>(httpServer, {
cors: {
origin: process.env["NODE_ENV"] === "production"
? [process.env["PUBLIC_URL"] ?? "", process.env["CLIENT_URL"] ?? ""]
: "*",
credentials: true,
},
});
registerSocketHandlers(io);
startScheduler(io);
httpServer.listen(PORT, () => {
console.log(`[server] listening on http://localhost:${PORT}`);
console.log(`[server] NODE_ENV=${process.env["NODE_ENV"] ?? "development"}`);
});
// Graceful shutdown
const shutdown = async () => {
console.log("[server] shutting down…");
await prisma.$disconnect();
httpServer.close(() => process.exit(0));
};
process.on("SIGTERM", shutdown);
process.on("SIGINT", shutdown);