require('dotenv').config(); const express = require('express'); const cors = require('cors'); const helmet = require('helmet'); const path = require('path'); const mime = require('mime-types'); const apiRouter = require('./routes/api'); const uiRouter = require('./routes/ui'); const swaggerUi = require('swagger-ui-express'); const swaggerDocument = require('./swagger/swagger.json'); const app = express(); const PORT = process.env.PORT || 7860; const DOMAIN = process.env.DOMAIN || 'localhost'; // Security middleware app.use(helmet()); app.disable('x-powered-by'); // CORS configuration const corsOptions = { origin: [ `http://${DOMAIN}`, `https://${DOMAIN}`, `http://${DOMAIN}:${PORT}`, `https://${DOMAIN}:${PORT}`, 'http://localhost:7860', 'http://127.0.0.1:7860' ], methods: ['GET', 'POST', 'OPTIONS'], allowedHeaders: ['Content-Type', 'Authorization'], optionsSuccessStatus: 200 }; app.use(cors(corsOptions)); // Other middleware app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use(express.static(path.join(__dirname, '../public'))); // File serving app.use('/api/files', express.static(path.join(__dirname, '../uploads'), { setHeaders: (res, filePath) => { const contentType = mime.lookup(filePath) || 'application/octet-stream'; res.setHeader('Content-Type', contentType); } })); // Routes app.use('/api', apiRouter); app.use('/', uiRouter); app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); // Error handling middleware app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ error: 'Internal Server Error' }); }); // Start server app.listen(PORT, () => { if (DOMAIN === 'localhost') { console.log(`Server running on http://localhost:${PORT}`); console.log(`API Docs: http://localhost:${PORT}/api-docs`); console.log(`Upload UI: http://localhost:${PORT}/upload`); } else { console.log(`Server running on https://${DOMAIN}`); console.log(`API Docs: https://${DOMAIN}/api-docs`); console.log(`Upload UI: https://${DOMAIN}/upload`); } });