import express from 'express'; import cors from 'cors'; import cookieParser from 'cookie-parser'; import dotenv from 'dotenv'; import { publicRouter } from './routes/public.js'; import { adminRouter } from './routes/admin.js'; import { runMigrations } from './db/migrate.js'; import { initFirstAdmin } from './scripts/init-admin.js'; dotenv.config(); const app = express(); const PORT = parseInt(process.env.PORT || '3000', 10); app.use(express.json({ limit: '1mb' })); app.use(cookieParser()); app.use( cors({ origin: process.env.NODE_ENV === 'production' ? false : ['http://localhost:5173', 'http://127.0.0.1:5173'], credentials: true, }) ); app.get('/api/health', (_req, res) => { res.json({ ok: true, service: 'umbyte-backend' }); }); app.use('/api', publicRouter); app.use('/api/admin', adminRouter); app.use((err: Error, _req: express.Request, res: express.Response, _next: express.NextFunction) => { console.error('[error]', err); res.status(500).json({ error: 'internal_error' }); }); async function start() { try { await runMigrations(); await initFirstAdmin(); app.listen(PORT, () => { console.log(`[umbyte-backend] listening on :${PORT}`); }); } catch (err) { console.error('[startup] fatal error:', err); process.exit(1); } } start();