Spaces:
Paused
Paused
| from __future__ import annotations | |
| import asyncio | |
| import json | |
| from fastapi import APIRouter, Header | |
| from fastapi.responses import StreamingResponse | |
| from pydantic import BaseModel | |
| from api.support import require_admin | |
| from services.register_service import register_service | |
| class RegisterConfigRequest(BaseModel): | |
| mail: dict | None = None | |
| hero_sms: dict | None = None | |
| proxy: str | None = None | |
| total: int | None = None | |
| threads: int | None = None | |
| mode: str | None = None | |
| target_quota: int | None = None | |
| target_available: int | None = None | |
| check_interval: int | None = None | |
| def create_router() -> APIRouter: | |
| router = APIRouter() | |
| async def get_register_config(authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.get()} | |
| async def update_register_config(body: RegisterConfigRequest, authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.update(body.model_dump(exclude_none=True))} | |
| async def start_register(authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.start()} | |
| async def start_codex_register(authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.start_codex()} | |
| async def stop_register(authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.stop()} | |
| async def reset_register(authorization: str | None = Header(default=None)): | |
| require_admin(authorization) | |
| return {"register": register_service.reset()} | |
| async def register_events(token: str = ""): | |
| require_admin(f"Bearer {token}") | |
| async def stream(): | |
| last = "" | |
| while True: | |
| payload = json.dumps(register_service.get(), ensure_ascii=False) | |
| if payload != last: | |
| last = payload | |
| yield f"data: {payload}\n\n" | |
| await asyncio.sleep(0.5) | |
| return StreamingResponse(stream(), media_type="text/event-stream") | |
| return router | |