import express from 'express'; import { createServer } from 'http'; import { toNodeHandler } from 'better-auth/node'; import swaggerUi from 'swagger-ui-express'; import { auth } from './auth'; import { buildOpenApiDocument } from './docs/openapi'; import videosRoutes from './routes/videos'; import adminRoutes from './routes/admin'; import devicesRoutes from './routes/devices'; import deviceLinksRoutes from './routes/device-links'; import commandsRoutes from './routes/commands'; import eventsRoutes from './routes/events'; import { setupRealtimeGateway } from './realtime/gateway'; import { ensureMinioBucket } from './utils/minio'; const app = express(); const openApiDocument = buildOpenApiDocument(); app.get('/', (_req, res) => { res.send('API is running'); }); app.get('/openapi.json', (_req, res) => { res.json(openApiDocument); }); app.use('/docs', swaggerUi.serve, swaggerUi.setup(openApiDocument)); app.all('/api/auth/*splat', toNodeHandler(auth)); app.use(express.json()); app.use('/videos', videosRoutes); app.use('/admin', adminRoutes); app.use('/devices', devicesRoutes); app.use('/device-links', deviceLinksRoutes); app.use('/commands', commandsRoutes); app.use('/events', eventsRoutes); app.use((err: unknown, _req: express.Request, res: express.Response, _next: express.NextFunction) => { console.error(err); res.status(500).json({ message: 'Internal server error' }); }); const port = Number(process.env.PORT ?? 3000); const server = createServer(app); const start = async () => { try { await ensureMinioBucket(); } catch (error) { console.error('MinIO initialization failed', error); process.exit(1); } setupRealtimeGateway(server); server.listen(port, () => { console.log(`Server is running on port ${port}`); }); }; start();