| import express, { type Express } from "express"; |
| import cors from "cors"; |
| import pinoHttp from "pino-http"; |
| import path from "path"; |
| import fs from "fs"; |
| import router from "./routes"; |
| import { logger } from "./lib/logger"; |
|
|
| const app: Express = express(); |
|
|
| app.use( |
| pinoHttp({ |
| logger, |
| serializers: { |
| req(req) { |
| return { |
| id: req.id, |
| method: req.method, |
| url: req.url?.split("?")[0], |
| }; |
| }, |
| res(res) { |
| return { |
| statusCode: res.statusCode, |
| }; |
| }, |
| }, |
| }), |
| ); |
| app.use(cors()); |
| app.use(express.json()); |
| app.use(express.urlencoded({ extended: true })); |
|
|
| app.use("/api", router); |
|
|
| const possiblePaths = [ |
| path.resolve(process.cwd(), "artifacts/io-ui/dist"), |
| path.resolve(process.cwd(), "artifacts/io-ui/dist/public"), |
| path.resolve(__dirname, "../../io-ui/dist"), |
| path.resolve(__dirname, "../../io-ui/dist/public"), |
| path.resolve(__dirname, "../artifacts/io-ui/dist"), |
| path.resolve(__dirname, "../artifacts/io-ui/dist/public"), |
| ]; |
|
|
| const publicPath = possiblePaths.find(p => fs.existsSync(p)) || possiblePaths[0]; |
|
|
| if (fs.existsSync(publicPath)) { |
| logger.info({ publicPath }, "Serving static frontend assets"); |
| app.use(express.static(publicPath)); |
| app.get("/{*path}", (_req, res) => { |
| res.sendFile(path.join(publicPath, "index.html")); |
| }); |
| } else { |
| logger.warn({ publicPath, attempted: possiblePaths }, "Frontend build folder not found. API-only mode active."); |
| } |
|
|
| export default app; |
|
|