import path from 'node:path'; import express from 'express'; import cookieParser from 'cookie-parser'; import session from 'express-session'; import connectPgSimple from 'connect-pg-simple'; import { env } from './config/env.js'; import { apiRouter } from './routes/index.js'; import { platformStatusRouter } from './routes/health.js'; import { errorHandler } from './http/errors.js'; import { getPool } from './db/pool.js'; import { runMigrations } from './db/migrate.js'; const app = express(); const frontendDist = path.resolve(process.cwd(), 'frontend', 'dist'); const PgSession = connectPgSimple(session); app.disable('x-powered-by'); app.set('trust proxy', 1); app.use(express.json({ limit: '1mb' })); app.use(cookieParser()); app.use(session({ name: 'acs.sid', secret: env.sessionSecret, resave: false, saveUninitialized: false, store: new PgSession({ pool: getPool(), tableName: 'user_sessions', createTableIfMissing: true, }), cookie: { httpOnly: true, sameSite: 'lax', secure: env.cookieSecure, maxAge: 1000 * 60 * 60 * 8, }, })); app.use(platformStatusRouter); app.use('/api', apiRouter); app.use(express.static(frontendDist)); app.get('*', (_req, res) => { res.sendFile(path.join(frontendDist, 'index.html')); }); app.use(errorHandler); try { await runMigrations(); app.listen(env.port, () => { console.log(`ACS Node app listening on port ${env.port}`); }); } catch (error) { console.error('ACS startup failed', error); process.exitCode = 1; }