import express from 'express'; import http from 'http'; import cors from 'cors'; import dotenv from 'dotenv'; import { createYjsServer } from './yjs-server'; import { createSignalingServer } from './signaling-server'; import { logger } from './utils/logger'; dotenv.config(); const app = express(); const PORT = process.env.PORT || 3000; app.use(cors({ origin: process.env.CORS_ORIGIN || 'http://localhost:5173', credentials: true })); app.use(express.json()); app.get('/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString(), services: { yjs: 'running', signaling: 'running' } }); }); app.get('/', (req, res) => { res.json({ message: 'P2P Poll Server', endpoints: { health: '/health', yjs: 'ws://localhost:' + PORT + '/yjs', signaling: 'ws://localhost:' + PORT + '/signal' } }); }); const server = http.createServer(app); createYjsServer(server, PORT as number); createSignalingServer(server); server.listen(PORT, () => { logger.info(`Server running on port ${PORT}`); logger.info(`Yjs WebSocket: ws://localhost:${PORT}/yjs`); logger.info(`Signaling WebSocket: ws://localhost:${PORT}/signal`); }); process.on('SIGTERM', () => { logger.info('SIGTERM signal received: closing HTTP server'); server.close(() => { logger.info('HTTP server closed'); }); });