import type { NextConfig } from "next"; /** * Sicherheitskopfzeilen fuer alle Antworten. Die CSP selbst wird pro Anfrage in * src/proxy.ts mit einer Nonce gesetzt, weil sie dort dynamisch sein muss. */ const SICHERHEITS_KOPFZEILEN = [ { key: "X-Content-Type-Options", value: "nosniff" }, { key: "X-Frame-Options", value: "DENY" }, // sshkv laeuft im internen Netz; Pfade wie /schluessel/ sollen trotzdem nie // als Referrer an fremde Seiten gehen. { key: "Referrer-Policy", value: "no-referrer" }, { key: "Permissions-Policy", value: "geolocation=(), microphone=(), camera=()" }, { key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains" }, { key: "Cross-Origin-Opener-Policy", value: "same-origin" }, ]; const konfiguration: NextConfig = { // Fuer das schlanke Laufzeit-Abbild im Dockerfile. output: "standalone", poweredByHeader: false, // ssh2 bringt optionale native Teile mit, die nicht gebuendelt werden duerfen. serverExternalPackages: ["ssh2", "@node-rs/argon2", "pg-boss"], async headers() { return [{ source: "/:pfad*", headers: SICHERHEITS_KOPFZEILEN }]; }, }; export default konfiguration;