"""Public, signed image files for generated-HTML backgrounds.""" from __future__ import annotations from fastapi import APIRouter, HTTPException from fastapi.responses import FileResponse from deerflow.html_runtime.public_images import ( image_media_type, resolve_html_image_path, verify_html_image_token, ) router = APIRouter(prefix="/api/public/html-images", tags=["html-images"]) _PUBLIC_HEADERS = { "Access-Control-Allow-Origin": "*", "Cross-Origin-Resource-Policy": "cross-origin", "X-Content-Type-Options": "nosniff", "Cache-Control": "public, max-age=86400", } @router.get("/{token}") async def get_html_image(token: str) -> FileResponse: """Serve one raster image referenced by a generated HTML page.""" try: thread_id, kind, filename = verify_html_image_token(token) path = resolve_html_image_path(thread_id, kind, filename) except (ValueError, FileNotFoundError): raise HTTPException(status_code=404, detail="HTML image not found") from None return FileResponse( path, media_type=image_media_type(filename), headers=_PUBLIC_HEADERS, )