const { createServer } = require('http') const { parse } = require('url') const next = require('next') const dev = process.env.NODE_ENV !== 'production' const hostname = 'localhost' const port = parseInt(process.env.PORT || '3000', 10) const app = next({ dev, hostname, port }) const handle = app.getRequestHandler() // Run migrations before starting server console.log('šŸ”„ Running database migrations...') const { migrate } = require('drizzle-orm/better-sqlite3/migrator') const { db } = require('./dist/db/index') try { migrate(db, { migrationsFolder: './drizzle' }) console.log('āœ… Migrations complete') } catch (error) { console.error('āŒ Migration failed:', error) process.exit(1) } app.prepare().then(() => { const server = createServer(async (req, res) => { try { const parsedUrl = parse(req.url, true) await handle(req, res, parsedUrl) } catch (err) { console.error('Error occurred handling', req.url, err) res.statusCode = 500 res.end('internal server error') } }) // Debug: Check upgrade handlers at each stage console.log('šŸ“Š Stage 1 - After server creation:') console.log(` Upgrade handlers: ${server.listeners('upgrade').length}`) // Initialize Socket.IO const { initializeSocketServer } = require('./dist/socket-server') console.log('šŸ“Š Stage 2 - Before initializeSocketServer:') console.log(` Upgrade handlers: ${server.listeners('upgrade').length}`) initializeSocketServer(server) console.log('šŸ“Š Stage 3 - After initializeSocketServer:') const allHandlers = server.listeners('upgrade') console.log(` Upgrade handlers: ${allHandlers.length}`) allHandlers.forEach((handler, i) => { console.log(` [${i}] ${handler.name || 'anonymous'} (length: ${handler.length} params)`) }) // Log all upgrade requests to see handler execution order const originalEmit = server.emit.bind(server) server.emit = (event, ...args) => { if (event === 'upgrade') { const req = args[0] console.log(`\nšŸ”„ UPGRADE REQUEST: ${req.url}`) console.log(` ${allHandlers.length} handlers will be called`) } return originalEmit(event, ...args) } server .once('error', (err) => { console.error(err) process.exit(1) }) .listen(port, () => { console.log(`> Ready on http://${hostname}:${port}`) }) })