diff --git a/vercel.json b/vercel.json index b66cf209..e61698d8 100644 --- a/vercel.json +++ b/vercel.json @@ -3,10 +3,40 @@ "buildCommand": "npm ci && npm run build", "outputDirectory": "dist", "rewrites": [ - { - "source": "/api/:path*", - "destination": "https://e7c3806a9bfe4bdf9bb8a72a7f0d31cd-324f24a826ec4eb198c1a0eef.fly.dev/api/:path*" - }, + { "source": "/api/:path*", "destination": "https://e7c3806a9bfe4bdf9bb8a72a7f0d31cd-324f24a826ec4eb198c1a0eef.fly.dev/api/:path*" }, { "source": "/(.*)", "destination": "/" } + ], + "headers": [ + { + "source": "/assets/(.*)", + "headers": [ + { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } + ] + }, + { + "source": "/(.*).(css|js|png|jpg|jpeg|gif|svg|webp|ico|woff2)", + "headers": [ + { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } + ] + }, + { + "source": "/api/(.*)", + "headers": [ + { "key": "Cache-Control", "value": "no-store" } + ] + }, + { + "source": "/(.*)", + "headers": [ + { "key": "X-Frame-Options", "value": "DENY" }, + { "key": "X-Content-Type-Options", "value": "nosniff" }, + { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" }, + { "key": "Permissions-Policy", "value": "geolocation=(), microphone=(), camera=()" }, + { + "key": "Content-Security-Policy", + "value": "default-src 'self' https: data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: blob: https:; font-src 'self' data: https:; connect-src 'self' https: wss:; frame-ancestors 'none'" + } + ] + } ] }