from pathlib import Path from fastapi import APIRouter from fastapi.responses import FileResponse, HTMLResponse router = APIRouter() DASHBOARD_FILE = Path(__file__).resolve().parent.parent / "frontend" / "index.html" MANIFEST_FILE = DASHBOARD_FILE.parent / "manifest.webmanifest" SERVICE_WORKER_FILE = DASHBOARD_FILE.parent / "service-worker.js" class RevalidatingHTMLResponse(HTMLResponse): def __init__(self, content, status_code=200, headers=None, media_type=None, background=None): response_headers = dict(headers or {}) response_headers["Cache-Control"] = "no-cache" super().__init__(content, status_code, response_headers, media_type, background) @router.get("/", response_class=RevalidatingHTMLResponse) async def dashboard() -> str: return DASHBOARD_FILE.read_text() @router.get("/manifest.webmanifest", response_class=FileResponse) async def web_app_manifest() -> FileResponse: return FileResponse(MANIFEST_FILE, media_type="application/manifest+json") @router.get("/service-worker.js", response_class=FileResponse) async def service_worker() -> FileResponse: return FileResponse( SERVICE_WORKER_FILE, media_type="application/javascript", headers={"Service-Worker-Allowed": "/", "Cache-Control": "no-cache"}, )