# The static app at app.eliteroyalapartments.com. No build step: CI publishes web/ # through scripts/deploy-web.js. # # /api/* is proxied so the browser stays same-origin and session cookies work. # The proxy cuts requests at 26 seconds and bodies at about 8 MiB, so long work # returns 202 and polls, and files upload straight to Blob storage. [build] publish = "web" [[redirects]] from = "/api/*" to = "https://api.eliteroyalapartments.com/:splat" status = 200 force = true # Tells the API this came through here, and so which address is the client's. # scripts/deploy-web.js fills in the secret, and removes the line without one. # Every other path is the app shell; the client router takes over. [[redirects]] from = "/*" to = "/index.html" status = 200 [[headers]] for = "/*" [headers.values] X-Frame-Options = "DENY" X-Content-Type-Options = "nosniff" Referrer-Policy = "strict-origin-when-cross-origin" Strict-Transport-Security = "max-age=31536000; includeSubDomains" # Field staff need the camera for photos and location for punches. Permissions-Policy = "camera=(self), geolocation=(self), microphone=(), payment=(), usb=()" # connect-src names the storage account so uploads can go directly to Blob. Content-Security-Policy = "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https://*.blob.core.windows.net; connect-src 'self' https://*.blob.core.windows.net; font-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; object-src 'none'" [[headers]] for = "/sw.js" [headers.values] Cache-Control = "no-cache" [[headers]] for = "/index.html" [headers.values] Cache-Control = "no-cache"