import express from 'express'; import cors from 'cors'; import path from 'path'; import authRouter from './routes/auth'; import displayApiRouter from './routes/display-api'; import mqttBrokersRouter from './routes/mqtt-brokers'; import mqttTopicsRouter from './routes/mqtt-topics'; import pgSourcesRouter from './routes/pg-sources'; import datapointsRouter from './routes/datapoints'; import displaysRouter from './routes/displays'; import layoutsRouter from './routes/layouts'; import { authMiddleware } from './middleware/auth'; export function createApp(): express.Application { const app = express(); app.use(cors()); app.use(express.json()); // Health check app.get('/health', (_req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); // Public routes app.use('/api/auth', authRouter); app.use('/api/display', displayApiRouter); // Protected management routes app.use('/api/mqtt/brokers/:brokerId/topics', authMiddleware, mqttTopicsRouter); app.use('/api/mqtt/brokers', authMiddleware, mqttBrokersRouter); app.use('/api/pg/sources', authMiddleware, pgSourcesRouter); app.use('/api/datapoints', authMiddleware, datapointsRouter); app.use('/api/displays', authMiddleware, displaysRouter); app.use('/api/layouts', authMiddleware, layoutsRouter); // Serve frontend/dist as static files with SPA fallback const frontendDist = path.join(__dirname, '..', '..', '..', 'frontend', 'dist'); app.use(express.static(frontendDist)); app.get('*', (_req, res) => { res.sendFile(path.join(frontendDist, 'index.html')); }); return app; }