import express from 'express'; import cookieParser from 'cookie-parser'; import cors from 'cors'; import { config } from './config'; import { runMigrations } from './db/migrate'; import { requireAuth } from './middleware/auth'; import authRouter from './routes/auth'; import importRouter from './routes/import'; import transactionsRouter from './routes/transactions'; import accountsRouter from './routes/accounts'; import categoriesRouter from './routes/categories'; import categoryRulesRouter from './routes/categoryRules'; import analyticsRouter from './routes/analytics'; const app = express(); app.set('trust proxy', 1); app.use(express.json({ limit: '10mb' })); app.use(cookieParser()); app.use(cors({ origin: true, credentials: true })); // Auth routes (login is public; me/logout apply auth internally) app.use('/api/auth', authRouter); // All remaining /api routes require authentication app.use('/api', requireAuth); app.use('/api/import', importRouter); app.use('/api/transactions', transactionsRouter); app.use('/api/accounts', accountsRouter); app.use('/api/categories', categoriesRouter); app.use('/api/category-rules', categoryRulesRouter); app.use('/api/analytics', analyticsRouter); app.use( ( err: Error, _req: express.Request, res: express.Response, _next: express.NextFunction, ) => { console.error(err); res.status(500).json({ error: 'INTERNAL_ERROR', message: 'Internal server error' }); }, ); async function start() { await runMigrations(); app.listen(config.port, () => { console.log(`Backend listening on port ${config.port}`); }); } start().catch((err) => { console.error('Failed to start:', err); process.exit(1); });