from fastapi import Depends from pigway_frame_flow.core.auth import require from pigway_frame_flow.extensions.api import AISecret from pigway_frame_flow.extensions.secrets import save_secret from pigway_frame_flow.providers.external import ( ExternalProviderConfig, ) def install_providers(app, service): providers = service.providers @app.get( "/api/v1/providers/external", tags=["Providers"], dependencies=[Depends(require("devices:read"))], ) def list_providers(): return providers.list() @app.put( "/api/v1/providers/external/{id}", tags=["Providers"], dependencies=[Depends(require("admin"))], ) def configure(id: str, payload: ExternalProviderConfig): return providers.save(id, payload) @app.get( "/api/v1/providers/external/{id}/data", tags=["Providers"], dependencies=[Depends(require("devices:read"))], ) def provider_data(id: str): return providers.get(id) @app.put( "/api/v1/providers/external/{id}/key", status_code=204, tags=["Providers"], dependencies=[Depends(require("admin"))], ) def provider_key(id: str, payload: AISecret): providers.config(id) save_secret( service.settings.config_dir / ("provider-" + id + ".secret"), payload.key.get_secret_value(), ) service.settings.additional_secrets.append(payload.key.get_secret_value()) providers.cache.pop(id, None)