/** * * Copyright 2023-2025 InspectorRAGet Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **/ const path = require('path'); const cspMap = { 'base-uri': ["'none'"], 'font-src': ["'self'", 'data:', "'unsafe-inline'"], 'form-action': ["'self'"], 'frame-src': ["'self'"], 'img-src': ["'self'", 'data:', 'blob:'], 'media-src': ["'self'", 'blob:'], 'object-src': ["'none'"], 'style-src': ["'self'", "'unsafe-inline'"], }; const getCSPString = (cspMap) => Object.entries(cspMap) .map(([key, values]) => `${key} ${values.join(' ')}`) .join('; '); const headers = [ { key: 'Content-Security-Policy', value: getCSPString(cspMap), }, { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload', }, ]; const nextConfig = { reactStrictMode: true, swcMinify: true, output: 'standalone', sassOptions: { includePaths: [path.join(__dirname, 'styles')], }, async headers() { return [ // Default headers for all pages. { source: '/', headers }, { source: '/:path*', headers }, ]; }, }; module.exports = nextConfig;