{ "functions": { "source": "functions", "runtime": "nodejs20", "predeploy": ["npm --prefix \"$RESOURCE_DIR\" run build"], "ignore": [ "node_modules", ".git", "firebase-debug.log", "firebase-debug.*.log" ] }, "firestore": { "rules": "firestore.rules", "indexes": "firestore.indexes.json" }, "hosting": { "public": "dist", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ], "headers": [ { "source": "/index.html", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" }, { "key": "Pragma", "value": "no-cache" }, { "key": "Expires", "value": "0" } ] }, { "source": "/**/*.html", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" }, { "key": "Pragma", "value": "no-cache" }, { "key": "Expires", "value": "0" } ] }, { "source": "/assets/**", "headers": [ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] }, { "source": "/sw.js", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" }, { "key": "Pragma", "value": "no-cache" }, { "key": "Expires", "value": "0" } ] }, { "source": "/manifest.json", "headers": [ { "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" } ] }, { "source": "/**", "headers": [ { "key": "Cache-Control", "value": "public, max-age=0, must-revalidate" } ] } ], "rewrites": [ { "source": "/api/**", "function": { "functionId": "api", "region": "us-central1" } }, { "source": "/api/stripe/webhook/connect", "function": { "functionId": "stripeWebhookConnect", "region": "us-central1" } }, { "source": "/api/stripe/webhook", "function": { "functionId": "stripeWebhook", "region": "us-central1" } }, { "source": "**", "destination": "/index.html" } ] } }