import express from 'express'; import cors from 'cors'; import { createServer } from 'http'; import { WebSocketServer } from 'ws'; import { initDb } from './db'; import { accountsRouter } from './routes/accounts'; import { promptsRouter } from './routes/prompts'; import { pipelineRouter } from './routes/pipeline'; import { assetsRouter } from './routes/assets'; import { configsRouter } from './routes/configs'; import { handleChat } from './ws/chat'; const app = express(); const server = createServer(app); const wss = new WebSocketServer({ server, path: '/ws' }); app.use(cors()); app.use(express.json({ limit: '50mb' })); app.use('/api/accounts', accountsRouter); app.use('/api/prompts', promptsRouter); app.use('/api/pipeline', pipelineRouter); app.use('/api/assets', assetsRouter); app.use('/api/configs', configsRouter); wss.on('connection', handleChat); const PORT = 3007; initDb(); server.on('error', (err: NodeJS.ErrnoException) => { if (err.code === 'EADDRINUSE') { console.error(`Port ${PORT} is in use. Run: npx kill-port ${PORT}`); process.exit(1); } throw err; }); server.listen(PORT, () => { console.log(`Server running on http://localhost:${PORT}`); }); process.on('SIGTERM', () => { server.close(); process.exit(0); }); process.on('SIGINT', () => { server.close(); process.exit(0); });