import type { NextConfig } from 'next'; const contentSecurityPolicy = [ "default-src 'self'", "base-uri 'none'", "frame-ancestors 'none'", "object-src 'none'", "script-src 'self' 'unsafe-inline'", "style-src 'self' 'unsafe-inline'", "img-src 'self' data: blob: https:", "font-src 'self' data:", "connect-src 'self' ws: wss:", "form-action 'self'", ].join('; '); const securityHeaders = [ { 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=()' }, { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' }, { key: 'Cross-Origin-Resource-Policy', value: 'same-origin' }, ...(process.env.NODE_ENV === 'production' ? [{ key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload' }] : []), { key: 'Content-Security-Policy', value: contentSecurityPolicy }, ]; const config: NextConfig = { serverExternalPackages: ['pg', 'pino'], experimental: { optimizePackageImports: ['highlight.js'], }, async headers() { return [{ source: '/(.*)', headers: securityHeaders }]; }, }; export default config;