import { defineConfig } from 'astro/config'; import node from '@astrojs/node'; import react from '@astrojs/react'; // Klarbild läuft als Node-Server (SSR) mit In-Process-Warteschlange. export default defineConfig({ output: 'server', adapter: node({ mode: 'standalone' }), integrations: [react()], // CSRF: eigener Schutz über SameSite=Lax-Session-Cookie. Astros checkOrigin // bricht multipart-Uploads hinter dem Reverse-Proxy (http↔https-Mismatch). security: { checkOrigin: false }, // Content-Security-Policy mit Hashes statt 'unsafe-inline': Astro rechnet die // Hashes seiner eigenen inline-Skripte und -Styles beim Bauen aus. Die übrigen // Direktiven setzt die Middleware (src/middleware.ts). experimental: { csp: { directives: [ "default-src 'self'", "img-src 'self' data: blob:", "font-src 'self'", "connect-src 'self'", "object-src 'none'", "base-uri 'self'", "form-action 'self'", "frame-ancestors 'none'", ], }, }, server: { host: true, port: Number(process.env.PORT) || 4321 }, vite: { ssr: { // Native Module nicht bündeln external: ['sharp', 'argon2', 'pg', 'pg-boss', 'ssh2-sftp-client', 'basic-ftp', 'heic-convert'], }, }, });