"""Public runtime configuration endpoint. GET /api/v1/config/public Returns the small set of runtime flags the frontend needs at app load to decide whether to render the self-serve signup flow and which OAuth buttons to show. No authentication required. The response model lives in `app.schemas.config` so it can be reused by frontend codegen and other call sites if needed. """ from __future__ import annotations from fastapi import APIRouter from app.core.config import settings from app.schemas.config import PublicConfigResponse router = APIRouter(prefix="/config", tags=["config"]) @router.get("/public", response_model=PublicConfigResponse) async def get_public_config() -> PublicConfigResponse: """Return public-safe runtime config. `oauth_providers` reflects which OAuth client IDs are configured server side; the frontend uses it to render only buttons that will actually succeed. `self_serve_enabled` is the master switch for the new public self-serve signup flow. """ providers: list[str] = [] if settings.GOOGLE_CLIENT_ID: providers.append("google") if settings.MS_CLIENT_ID: providers.append("microsoft") return PublicConfigResponse( self_serve_enabled=settings.SELF_SERVE_ENABLED, oauth_providers=providers, )