Source code for veupath_chatbot.transport.http.routers.dev

"""Development-only endpoints (available only when chat_provider=mock)."""

from fastapi import APIRouter
from fastapi.responses import JSONResponse

from veupath_chatbot.platform.config import get_settings
from veupath_chatbot.platform.errors import ForbiddenError
from veupath_chatbot.platform.security import create_user_token
from veupath_chatbot.transport.http.deps import UserRepo

router = APIRouter(prefix="/api/v1/dev", tags=["dev"])


def _is_mock_provider() -> bool:
    return get_settings().chat_provider.strip().lower() == "mock"


[docs] @router.post("/login") async def dev_login(user_repo: UserRepo, user_id: str | None = None) -> JSONResponse: """Create a test user and return a valid auth token. Only available when ``PATHFINDER_CHAT_PROVIDER=mock`` (e2e / local dev). Pass ``?user_id=worker-0`` to create isolated users per Playwright worker so parallel tests don't share data. """ if not _is_mock_provider(): raise ForbiddenError(title="Only available in mock mode") external_id = f"e2e-{user_id}@test.local" if user_id else "e2e@test.local" user = await user_repo.get_or_create_by_external_id(external_id) auth_token = create_user_token(user.id) resp = JSONResponse({"authToken": auth_token, "userId": str(user.id)}) resp.set_cookie( key="pathfinder-auth", value=auth_token, httponly=True, samesite="lax", path="/", ) return resp