require('dotenv').config(); const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const rateLimit = require('express-rate-limit'); const cookieParser = require('cookie-parser'); const path = require('path'); const http = require('http'); const app = express(); const server = http.createServer(app); // Security app.use(helmet({ contentSecurityPolicy: false, crossOriginEmbedderPolicy: false })); app.use(cors()); app.use(cookieParser()); app.use(express.json({ limit: '50mb' })); // Rate limiting const apiLimiter = rateLimit({ windowMs: 1 * 60 * 1000, max: 60, message: { error: 'Too many requests, slow down' } }); app.use('/api/', apiLimiter); // Static files (login page accessible without auth) app.use(express.static(path.join(__dirname, 'public'))); // Routes app.use('/api/auth', require('./src/routes/auth')); app.use('/api', require('./src/routes/transcribe')); app.use('/api', require('./src/routes/hpi')); app.use('/api', require('./src/routes/hospitalCourse')); app.use('/api', require('./src/routes/chartReview')); app.use('/api', require('./src/routes/milestones')); app.use('/api', require('./src/routes/soap')); app.use('/api', require('./src/routes/tts')); app.use('/api', require('./src/routes/nextcloud')); app.use('/api', require('./src/routes/refine')); // Models endpoint const { AVAILABLE_MODELS } = require('./src/utils/models'); app.get('/api/models', (req, res) => res.json({ models: AVAILABLE_MODELS })); // Health app.get('/api/health', (req, res) => { res.json({ status: 'running', timestamp: new Date().toISOString(), openrouter: process.env.OPENROUTER_API_KEY ? 'configured' : 'missing', whisper: process.env.OPENAI_API_KEY ? 'configured' : 'missing' }); }); // SPA fallback app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(''); console.log('=========================================='); console.log('🏥 PEDIATRIC AI SCRIBE v2.0'); console.log('=========================================='); console.log(`🌐 http://localhost:${PORT}`); console.log('=========================================='); });