/** * Метаданные участника из LiveKit access-токена (см. `AccessToken.with_metadata` * на backend, `services/conference_access.py::build_join`) — JSON * `{"avatar_url"?: string, "is_organizer"?: true}`. У гостей и участников без * аватара/прав организатора соответствующие поля отсутствуют. */ export interface ParticipantMetadata { avatar_url?: string | null /** * Подсказка для UI — организатор ли участник. НЕ источник авторизации: * метаданные читает и потенциально может подделать сам клиент. Любое * серверное действие организатора (например, принудительный мьют) * перепроверяется backend'ом по владельцу конференции в БД. */ is_organizer?: boolean } /** Разобрать `participant.metadata` — пустой объект, если поля нет, метаданные пусты или невалидны. */ export function parseParticipantMetadata(metadata: string | undefined): ParticipantMetadata { if (!metadata) return {} try { return JSON.parse(metadata) as ParticipantMetadata } catch { return {} } }