import express from 'express'; import morgan from 'morgan'; import { setupSecurity } from './middlewares/security'; import { apiLimiter } from './middlewares/rateLimiter'; import { errorHandler, notFoundHandler } from './middlewares/errorHandler'; import { apiLogger } from './middlewares/apiLogger'; // Routes import authRoutes from './routes/auth'; import licenseRoutes from './routes/license'; import scanRoutes from './routes/scan'; import subscriptionRoutes from './routes/subscription'; import userRoutes from './routes/user'; import adminRoutes from './routes/admin'; const app = express(); // ── Security ── setupSecurity(app); // ── Body parsing ── app.use(express.json({ limit: '10mb' })); app.use(express.urlencoded({ extended: true, limit: '10mb' })); // ── Logging ── app.use(morgan('combined')); app.use(apiLogger); // ── Rate limiting ── app.use('/api/', apiLimiter); // ── Status & Health ── app.get('/', (_req, res) => { res.json({ name: 'MarketScope API', version: '1.0.0', status: 'running', endpoints: '/api/v1' }); }); app.get('/health', (_req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString() }); }); // ── API Routes ── app.use('/api/v1/auth', authRoutes); app.use('/api/v1/licenses', licenseRoutes); app.use('/api/v1/scans', scanRoutes); app.use('/api/v1/subscriptions', subscriptionRoutes); app.use('/api/v1/users', userRoutes); app.use('/api/v1/admin', adminRoutes); // ── 404 handler ── app.use(notFoundHandler); // ── Error handler ── app.use(errorHandler); export default app;