fix(server): serve static files with no-cache headers to prevent stale JS/CSS

This commit is contained in:
Claude
2026-04-06 10:46:49 +00:00
parent e3dd78bee2
commit dc69cf2bc7

View File

@@ -1,6 +1,7 @@
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from pathlib import Path from pathlib import Path
from fastapi import FastAPI from fastapi import FastAPI, Request
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from lightsync.devices.registry import DeviceRegistry from lightsync.devices.registry import DeviceRegistry
@@ -33,9 +34,17 @@ def create_app() -> FastAPI:
app.include_router(devices.router, prefix="/api/devices") app.include_router(devices.router, prefix="/api/devices")
app.include_router(ws.router) app.include_router(ws.router)
# Static file serving — MUST be last (catches all unmatched paths) # Static file serving — no-cache headers to prevent stale JS/CSS
frontend_dir = Path(__file__).parent / "frontend" frontend_dir = Path(__file__).parent / "frontend"
app.mount("/", StaticFiles(directory=frontend_dir, html=True), name="frontend")
@app.get("/{filename:path}")
async def static_files(request: Request, filename: str):
path = frontend_dir / (filename or "index.html")
if not path.exists() or not path.is_file():
path = frontend_dir / "index.html"
response = FileResponse(path)
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
return response
return app return app