Source code for regstack.routers

from __future__ import annotations

from typing import TYPE_CHECKING

from fastapi import APIRouter

from regstack.routers.account import build_account_router
from regstack.routers.admin import build_admin_router
from regstack.routers.login import build_login_router
from regstack.routers.logout import build_logout_router
from regstack.routers.password import build_password_router
from regstack.routers.phone import build_phone_router
from regstack.routers.register import build_register_router
from regstack.routers.verify import build_verify_router

if TYPE_CHECKING:
    from regstack.app import RegStack


[docs] def build_router(rs: RegStack) -> APIRouter: """Build the composite JSON router for one :class:`RegStack` instance. Always includes ``register``, ``verify``, ``login``, ``logout``, and ``account``. Conditionally adds: - ``password`` (forgot/reset) when ``config.enable_password_reset``. - ``phone`` and the MFA confirm route when ``config.enable_sms_2fa``. - ``admin`` when ``config.enable_admin_router``. - ``oauth`` when ``config.enable_oauth`` AND at least one provider is registered on ``rs.oauth``. Hosts normally don't call this directly; access ``regstack.router`` instead, which calls it lazily. Args: rs: The owning :class:`~regstack.app.RegStack` instance — its config drives which sub-routers are mounted, and its collaborators are captured in the endpoint closures. Returns: A FastAPI ``APIRouter`` ready for ``app.include_router(..., prefix=config.api_prefix)``. """ router = APIRouter(tags=["regstack"]) router.include_router(build_register_router(rs)) router.include_router(build_verify_router(rs)) router.include_router(build_login_router(rs)) router.include_router(build_logout_router(rs)) router.include_router(build_account_router(rs)) if rs.config.enable_password_reset: router.include_router(build_password_router(rs)) if rs.config.enable_sms_2fa: router.include_router(build_phone_router(rs)) if rs.config.enable_admin_router: router.include_router(build_admin_router(rs)) if rs.config.enable_oauth and rs.oauth.names(): # Lazy import keeps base installs (no `oauth` extra) clean. from regstack.routers.oauth import build_oauth_router router.include_router(build_oauth_router(rs)) return router
__all__ = ["build_admin_router", "build_router"]