import type { NextConfig } from "next"; const nextConfig: NextConfig = { // Verhindert den "X-Powered-By: Next.js"-Response-Header — verrimt keinen // funktionalen Vorteil, gibt Angreifern aber unnoetig Framework-Fingerprinting. poweredByHeader: false, // "standalone" buendelt eine minimale Node-Laufzeit inkl. Dependencies, // wodurch das Docker-Image (siehe Dockerfile) deutlich kleiner bleibt. output: "standalone", // pdfkit laedt seine Schriftart-Metadaten (.afm-Dateien) zur Laufzeit ueber // einen eigenen __dirname-relativen Pfad. Wird das Paket vom Bundler // (Turbopack/Webpack) mitgebuendelt, geht dieser Pfad verloren (ENOENT). // "serverExternalPackages" laesst Next.js es stattdessen ganz normal per // require() aus node_modules laden. serverExternalPackages: ["pdfkit"], // Turbopacks Dateisystem-Caches (.next/dev/cache & .next/cache/turbopack) // kollidieren in diesem OneDrive-synchronisierten Arbeitsverzeichnis // wiederholt mit der Cloud-Synchronisierung ("Failed to open database" / // mmap-Timeout bei next dev, "Failed to compact database" beim // next-build-Shutdown). Beide Caches werden daher deaktiviert. experimental: { turbopackFileSystemCacheForDev: false, turbopackFileSystemCacheForBuild: false, }, async headers() { // Content-Security-Policy wird bewusst NICHT hier gesetzt: sie braucht // eine pro Request neue Nonce (siehe proxy.ts), was ein statischer // headers()-Eintrag hier nicht kann. return [ { source: "/(.*)", headers: [ { key: "X-Content-Type-Options", value: "nosniff" }, { key: "X-Frame-Options", value: "DENY" }, { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" }, { key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=(), payment=(self)" }, // Wirkt nur ueber HTTPS; im lokalen HTTP-Betrieb ignoriert der Browser den Header. { key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains" }, ], }, ]; }, }; export default nextConfig;