import express from 'express'; import path from 'path'; import { fileURLToPath } from 'url'; import chatRouter from './routers/chatRouter.js'; import authRouter from './routers/authRouter.js'; import navigationRouter from './routers/navigationRouter.js'; import settingsRouter from './routers/settingsRouter.js'; import adminRouter from './routers/adminRouter.js'; import contactRouter from './routers/contactRouter.js'; import socialnetworkRouter from './routers/socialnetworkRouter.js'; import forumRouter from './routers/forumRouter.js'; import falukantRouter from './routers/falukantRouter.js'; import friendshipRouter from './routers/friendshipRouter.js'; import blogRouter from './routers/blogRouter.js'; import match3Router from './routers/match3Router.js'; import taxiRouter from './routers/taxiRouter.js'; import taxiMapRouter from './routers/taxiMapRouter.js'; import taxiHighscoreRouter from './routers/taxiHighscoreRouter.js'; import cors from 'cors'; import './jobs/sessionCleanup.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const app = express(); const corsOptions = { origin: ['http://localhost:3000', 'http://localhost:5173', 'http://127.0.0.1:3000', 'http://127.0.0.1:5173'], methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE'], allowedHeaders: ['Content-Type', 'Authorization', 'userId', 'authCode'], credentials: true, preflightContinue: false, optionsSuccessStatus: 204 }; app.use(cors(corsOptions)); app.use(express.json()); // To handle JSON request bodies app.use('/api/chat', chatRouter); app.use('/api/auth', authRouter); app.use('/api/navigation', navigationRouter); app.use('/api/settings', settingsRouter); app.use('/api/admin', adminRouter); app.use('/api/match3', match3Router); app.use('/api/taxi', taxiRouter); app.use('/api/taxi-maps', taxiMapRouter); app.use('/api/taxi/highscore', taxiHighscoreRouter); app.use('/images', express.static(path.join(__dirname, '../frontend/public/images'))); app.use('/api/contact', contactRouter); app.use('/api/socialnetwork', socialnetworkRouter); app.use('/api/forum', forumRouter); app.use('/api/falukant', falukantRouter); app.use('/api/friendships', friendshipRouter); app.use('/api/blog', blogRouter); // Serve frontend SPA for non-API routes to support history mode clean URLs const frontendDir = path.join(__dirname, '../frontend'); app.use(express.static(path.join(frontendDir, 'dist'))); app.get(/^\/(?!api\/).*/, (req, res) => { res.sendFile(path.join(frontendDir, 'dist', 'index.html')); }); // Fallback 404 for unknown API routes app.use('/api/*', (req, res) => res.status(404).send('404 Not Found')); export default app;