// RAPPORT-HOST Backend-Entry. import express from "express"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { env } from "./env.js"; import { authRouter } from "./routes/auth.js"; import { billingRouter } from "./routes/billing.js"; import { accountRouter } from "./routes/account.js"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const app = express(); // WICHTIG: Der Stripe-Webhook braucht den ROHEN Body für die Signaturprüfung. // express.raw greift nur für diese Route und setzt req._body, sodass das danach // registrierte express.json() den Webhook-Body NICHT erneut parst. app.use("/api/billing/webhook", express.raw({ type: "application/json" })); app.use(express.json()); app.get("/api/health", (_req, res) => res.json({ ok: true, service: "rapport-host" })); app.use("/api/auth", authRouter); app.use("/api/billing", billingRouter); app.use("/api/account", accountRouter); // In Produktion liefert dasselbe Backend das gebaute Frontend aus (dist/). const dist = path.resolve(__dirname, "..", "dist"); app.use(express.static(dist)); app.get("*", (req, res, next) => { if (req.path.startsWith("/api/")) return next(); res.sendFile(path.join(dist, "index.html"), (err) => err && next()); }); app.listen(env.port, () => { console.log(`RAPPORT-HOST API läuft auf :${env.port} (Base: ${env.publicBaseUrl})`); });