"""Выдача LiveKit access-токенов участникам конференции.""" from datetime import timedelta from livekit import api from core.config import get_settings TOKEN_TTL = timedelta(hours=6) def create_room_access_token( *, room_name: str, identity: str, name: str, metadata: str | None = None ) -> str: """Создать JWT access-токен LiveKit для входа участника в комнату. `identity` — произвольная строка identity, используемая webhook- обработчиками (`services.webhook_handlers`) для сопоставления треков с участником: `str(user_id)` для зарегистрированного пользователя, `guest:{guest_access.id}` для гостя (ADR-001, п.6). `name` — отображаемое имя, показывается клиентским UI. `metadata` — произвольная строка (JSON), доступная клиенту как `participant.metadata` — используется для аватара при выключенной камере; `None` (гость либо пользователь без аватара) — метаданные не выставляются вовсе. """ settings = get_settings() token = ( api.AccessToken(settings.livekit_api_key, settings.livekit_api_secret) .with_identity(identity) .with_name(name) .with_grants( api.VideoGrants( room_join=True, room=room_name, can_publish=True, can_subscribe=True, ) ) .with_ttl(TOKEN_TTL) ) if metadata is not None: token = token.with_metadata(metadata) return token.to_jwt()