import { IAsrData } from '../types/Asr'; import { ConversationData } from '../types/Conversation'; import HangupReason from '../classes/HangupReason'; import { MediaTrackKind } from '../classes/MediaSource'; import { MediaType } from '../types/ParticipantStreamDescription'; import { StatResult } from '../types/Statistics'; import ChatRoomEventType from '../enums/ChatRoomEventType'; import ConversationOption from '../enums/ConversationOption'; import FatalError from '../enums/FatalError'; import MediaOption from '../enums/MediaOption'; import RoomsEventType from '../enums/RoomsEventType'; import UserRole from '../enums/UserRole'; import { IFeaturesPerRole } from '../types/ConversationFeature'; import { ExternalId, ExternalParticipant, ExternalParticipantId, ExternalParticipantListChunk, ExternalParticipantListMarkers } from '../types/ExternalId'; import { IFeedbackExternal } from '../types/Feedback'; import MediaModifiers from '../types/MediaModifiers'; import MediaSettings from '../types/MediaSettings'; import { IOnRemoteMovieData, ISharedMovieInfo, ISharedMovieState, ISharedMovieStoppedInfo } from '../types/MovieShare'; import MuteStates from '../types/MuteStates'; import { ParticipantsStateList, ParticipantStateMapped } from '../types/Participant'; import { IRoomId, Room, RoomParticipantUpdate, Rooms, RoomsUpdate } from '../types/Room'; import { VmojiError } from '../types/Vmoji'; import { DebugMessageType } from './Debug'; import { JSONObject } from './Json'; import { ParticipantCapabilities } from './SignalingCapabilities'; /** * Статус собеседника */ export declare enum ParticipantStatus { WAITING_HALL = "WAITING_HALL", WAIT_FOR_ADMIN = "WAIT_FOR_ADMIN", WAITING = "WAITING", CONNECTING = "CONNECTING", CONNECTED = "CONNECTED", RECONNECT = "RECONNECT", ERROR = "ERROR", HANGUP = "HANGUP", PERMISSIONS = "PERMISSIONS" } /** * Функции обратного вызова для передачи в параметрах инициализации * @hidden */ declare namespace External { /** * Получен локальный стрим с камеры/микрофона * * @param stream * @param mediaSettings */ function onLocalStream(stream: MediaStream | null, mediaSettings: MediaSettings): void; /** * Локальный стрим с экрана добавлен/удалён * * @param stream * @param mediaSettings */ function onScreenStream(stream: MediaStream | null, mediaSettings: MediaSettings): void; /** * Локальный стрим вимоджи добавлен/удалён * * @param stream * @param mediaSettings */ function onVmojiStream(stream: MediaStream | null, mediaSettings: MediaSettings): void; /** * Получена ошибка Vmoji * * @param error */ function onVmojiError(error: VmojiError): void; /** * Локальный стрим изменился * * @param mediaSettings * @param kind */ function onLocalStreamUpdate(mediaSettings: MediaSettings, kind: MediaTrackKind): void; /** * Изменился статус локального соединения * * @param status */ function onLocalStatus(status: ParticipantStatus): void; /** * Получен стрим собеседника. * Если сервер закончил стримить собеседника, вместо стрима будет передан null * * @param userId * @param stream */ function onRemoteStream(userId: ExternalParticipantId, stream: MediaStream | null): void; /** * Получен стрим лайв от собеседника. * Если сервер закончил стримить собеседника, вместо стрима будет передан null * * @param userId * @param data */ function onRemoteLive(userId: ExternalParticipantId, data: IOnRemoteMovieData): void; /** * Получен собственный стрим лайв. * Если сервер закончил стримить собеседника, вместо стрима будет передан null * * @param userId * @param data */ function onLocalLive(userId: ExternalParticipantId, data: IOnRemoteMovieData): void; /** * Получено обновление стрима или лайва от собеседника. * * @param userId * @param data */ function onRemoteLiveUpdate(userId: ExternalParticipantId, data: ISharedMovieState): void; /** * Получено обновление собственного стрима или лайва. * * @param userId * @param data */ function onLocalLiveUpdate(userId: ExternalParticipantId, data: ISharedMovieState): void; /** * Получен стрим с экрана собеседника. * Если сервер закончил стримить экран собеседника, вместо стрима будет передан null * * @param userId * @param stream */ function onRemoteScreenStream(userId: ExternalParticipantId, stream: MediaStream | null): void; /** * Получен стрим вимоджи собеседника. * Если сервер закончил стримить собеседника, вместо стрима будет передан null * * @param userId * @param stream */ function onRemoteVmojiStream(userId: ExternalParticipantId, stream: MediaStream | null): void; /** * Cтрим собеседника приостановлен/возобновлен. * * @param userId * @param mediaType тип отключённого/включённого потока * @param suspended true - стрим был приостановлен, false - стрим был запущен */ function onRemoteStreamSuspended(userId: ExternalParticipantId, mediaType: MediaType, suspended: boolean): void; /** * Начат звонок * * @param userId Внешний ID текущего пользователя * @param mediaModifiers Текущие настройки пользовательского медиа * @param muteStates Состояние устройств при входе в звонок * @param participants Список участников звонка * @param rooms Список сессионных залов в звонке */ function onConversation(userId: ExternalParticipantId, mediaModifiers: MediaModifiers, muteStates: MuteStates, participants: ExternalParticipant[], rooms?: Rooms): void; /** * Постраничные данные про участников при начале звонка * @param chunk */ function onConversationParticipantListChunk(chunk: ExternalParticipantListChunk): void; /** * Изменились данные стрима собеседника * * @param userId * @param mediaSettings * @param markers */ function onRemoteMediaSettings(userId: ExternalParticipantId, mediaSettings: MediaSettings, markers: ExternalParticipantListMarkers | null): void; /** * Изменились данные собственного стрима * * @param userId * @param mediaSettings */ function onLocalMediaSettings(userId: ExternalParticipantId, mediaSettings: MediaSettings): void; /** * Полученны данные по стримам (лайв/мувик) от собеседника * * @param userId * @param sharedMovieInfo * @param roomId */ function onRemoteSharedMovieInfo(userId: ExternalParticipantId, sharedMovieInfo: ISharedMovieInfo, roomId?: IRoomId): void; /** * Полученны данные по остановленным стримам (лайв/мувик) от собеседника * * @param userId * @param sharedMovieStoppedInfo * @param roomId */ function onRemoteSharedMovieStoppedInfo(userId: ExternalParticipantId, sharedMovieStoppedInfo: ISharedMovieStoppedInfo, roomId?: IRoomId): void; /** * Полученны данные по собственным стримам (лайв/мувик) * * @param userId * @param sharedMovieInfo * @param roomId */ function onLocalSharedMovieInfo(userId: ExternalParticipantId, sharedMovieInfo: ISharedMovieInfo, roomId?: IRoomId): void; /** * Полученны данные по собственным остановленным стримам (лайв/мувик) * * @param userId * @param sharedMovieStoppedInfo * @param roomId */ function onLocalSharedMovieStoppedInfo(userId: ExternalParticipantId, sharedMovieStoppedInfo: ISharedMovieStoppedInfo, roomId?: IRoomId): void; /** * Получены данные о совместном использовании стороннего web-приложения * * @param userId * @param sharedUrl * @param roomId */ function onRemoteSharedUrl(userId: ExternalParticipantId, sharedUrl: string | undefined, roomId: IRoomId): void; /** * Добавили участника * * @param userId * @param markers */ function onParticipantAdded(userId: ExternalId, markers: ExternalParticipantListMarkers | null): void; /** * Участник подключился * * @param userId * @param markers */ function onParticipantJoined(userId: ExternalId, markers: ExternalParticipantListMarkers | null): void; function onLocalParticipantState(participantState: ParticipantStateMapped, global?: boolean): void; /** * Изменились данные состояний собеседника * * @param userId * @param participantState * @param markers */ function onRemoteParticipantState(userId: ExternalParticipantId, participantState: ParticipantStateMapped, markers: ExternalParticipantListMarkers | null): void; /** * Изменились данные состояний нескольких собеседников * * @param stateList * @param roomId */ function onRemoteParticipantsState(stateList: ParticipantsStateList, roomId?: IRoomId): void; /** * Изменился статус соединения собеседников * * @param userIds * @param status * @param data */ function onRemoteStatus(userIds: ExternalParticipantId[], status: ParticipantStatus, data?: any): void; /** * Разрешения на доступы были запрошены в браузере */ function onPermissionsRequested(): void; /** * Ошибка получения трека с камеры или микрофона * * @param error * @param original */ function onPermissionsError(error: FatalError, original: Error): void; /** * Пользователь отключился от звонка * * @param userId * @param markers */ function onRemoteRemoved(userId: ExternalParticipantId, markers: ExternalParticipantListMarkers | null): void; /** * Изменилось состояние звонка * * @param isCallActive Активен ли сейчас звонок * @param canAddParticipants Можно ли добавлять собеседников * @param conversation Информация о звонке */ function onCallState(isCallActive: boolean, canAddParticipants: boolean, conversation: ConversationData): void; /** * Изменилось состояние камеры или микрофона * * @param mediaOption Тип устройства * @param enabled Включено или выключено */ function onDeviceSwitched(mediaOption: MediaOption, enabled: boolean): void; /** * Изменились состояния устройств пользователя или разрешения включать камеру/микрофон * * @param muteStates Состояния устройств * @param unmuteOptions Разрешения включать устройства * @param mediaOptions Изменения состояний * @param muteAll Команда распространяется на всех участников звонка * @param unmute Разрешение включить устройство * @param userId Пользователь, для которого изменились разрешения или `null` для текущего пользователя * @param adminId Пользователь, который изменил разрешения * @param stateUpdated Если `true`, значит глобальное/персональное состояние изменилось и поля `muteStates`/`unmuteOptions` содержат обновления, если `false`, значит, эти поля не имеют значения * @param requestedMedia Какие устройства попросили включить участника * @param roomId ID сессионного зала или ничего в случае основного зала */ function onMuteStates(muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll?: boolean, unmute?: boolean, userId?: ExternalParticipantId | null, adminId?: ExternalParticipantId | null, stateUpdated?: boolean, requestedMedia?: MediaOption[], roomId?: number | null): void; /** * Изменились роли собеседника в звонке * * @param userId Внешний ID пользователя * @param roles Список ролей * @param isInitial Коллбек вызван при инициализации (переподключение в звонок, заранее назначенный админ) */ function onRolesChanged(userId: ExternalId, roles: UserRole[], isInitial?: boolean): void; /** * Изменились свои роли в звонке * * @param roles Список ролей * @param isInitial Коллбек вызван при инициализации (переподключение в звонок, заранее назначенный админ) */ function onLocalRolesChanged(roles: UserRole[], isInitial?: boolean): void; /** * Закрепляет/открепляет собеседника для всех * * @param userId Внешний ID пользователя * @param unpin Открепить или закрепить * @param markers * @param roomId ID сессионного зала или ничего в случае основного зала */ function onPinnedParticipant(userId: ExternalParticipantId, unpin: boolean, markers: ExternalParticipantListMarkers | null, roomId?: number | null): void; /** * Закрепляет/открепляет текущего пользователя у других собеседников * * @param unpin Открепить или закрепить * @param roomId ID сессионного зала или ничего в случае основного зала */ function onLocalPin(unpin: boolean, roomId?: number | null): void; /** * Изменились опции звонка * * @param options Список опций звонка */ function onOptionsChanged(options: ConversationOption[]): void; /** * Входящий звонок был принят мной */ function onCallAccepted(): void; /** * Исходящий звонок был принят кем-то * @param userId * @param capabilities */ function onAcceptedCall(userId: ExternalId, capabilities: ParticipantCapabilities): void; function onRateNeeded(): void; /** * Изменился говорящий в звонке * * @param userId */ function onSpeakerChanged(userId: ExternalParticipantId): void; /** * Громкость собеседников * * @param volumes */ function onVolumesDetected(volumes: { uid: ExternalParticipantId; volume: number; }[]): void; /** * Громкость своего микрофона * * @param volume * @param isMicEnabled */ function onLocalVolume(volume: number, isMicEnabled: boolean): void; function onJoinStatus(available: boolean, chatId: string): void; /** * Звонок был завершен * * @param data Информация почему звонок завершился * @param conversationId ID звонка */ function onHangup(data: HangupReason, conversationId: string | null): void; function onMultipartyChatCreated(conversation: ConversationData): void; /** * Список устройств изменился */ function onDeviceChange(): void; /** * Изменилась подпись звонка 1:1 */ function onFingerprintChange(fingerprint: string): void; /** * Требуется обновление токена */ function onTokenExpired(): void; /** * Получено сообщение чата * * @param message Сообщение * @param from ID отправителя * @param direct Личное сообщение или общее */ function onChatMessage(message: string, from: ExternalParticipantId, direct?: boolean): void; /** * Получены данные от собеседника * * @param data Данные * @param from ID отправителя * @param direct Личное сообщение или общее */ function onCustomData(data: JSONObject, from: ExternalParticipantId, direct?: boolean): void; /** * Начата запись звонка * * @param initiator ID пользователя, начавшего запись * @param movieId ID ролика в который пишется звонок * @param startTime Время старта записи * @param type Тип записи * @param externalMovieId Внешний ID ролика * @param externalOwnerId Внешний ID пользователя/группы от которого ведётся трансляция * @param roomId ID зала в котором стартанула запись */ function onRecordStarted(initiator: ExternalParticipantId, movieId: number, startTime: number, type: 'STREAM' | 'RECORD', externalMovieId?: string, externalOwnerId?: string, roomId?: number | null): void; /** * Закончена запись звонка * @param roomId ID зала в котором остановлена запись */ function onRecordStopped(roomId: number | null | undefined, stopBy: ExternalParticipantId | null): void; /** * Состояние своей сети * * @param rating Оценка качества соединения от 0 до 1 */ function onLocalNetworkStatusChanged(rating: number): void; /** * Состояние сети участников * * @param status Оценки качества соединения участников от 0 до 1 */ function onNetworkStatusChanged(status: { uid: ExternalParticipantId; rating: number; }[]): void; /** * Получено отладочное сообщение. Работает только при выключенном режиме отладки * * @param type Тип сообщения * @param args */ function onDebugMessage(type: DebugMessageType, ...args: any[]): void; /** * Статистика звонка * * @param connection Статистика соединения * @param memory Статистика памяти */ function onStatistics(connection: StatResult, memory: Record): void; /** * Ошибка воспроизведения звука */ function onAutoplayError(): void; /** * Изменилось состояние зала ожидания/зала в режиме Audience * * @param eventType * @param totalCount Количество ожидающих/слушателей * @param firstParticipants Первые несколько ожидающих в зале * @param addedParticipantIds Некоторое количество участников, добавленных в зал * @param removedParticipantIds Некоторое количество участников, убранных из зала */ function onChatRoomUpdated(eventType: ChatRoomEventType, totalCount: number, firstParticipants: ExternalId[], addedParticipantIds: ExternalId[], removedParticipantIds: ExternalId[]): void; /** * Участник повышен/разжалован в зале ожидания/зале в режиме Audience * * @param demoted участник разжалован */ function onPromoted(demoted: boolean): void; /** * Получен микшированный аудио стрим. * * @param stream стрим от WebRTC */ function onRemoteMixedAudioStream(stream: MediaStream): void; /** * Получена новая ссылка на звонок * @param joinLink токен присоединения к звонку */ function onJoinLinkChanged(joinLink: string | null): void; /** * Получено обновление по сессионным залам * @param updates */ function onRoomsUpdated(updates: Partial>): void; /** * Получено обновление по сессионному залу * @param eventTypes * @param roomId * @param room * @param deactivate */ function onRoomUpdated(eventTypes: RoomsEventType[], roomId: number, room: Room | null, deactivate: boolean | null): void; /** * Получено обновление по участникам сессионного зала * @param update */ function onRoomParticipantsUpdated(update: RoomParticipantUpdate): void; /** * Произошел переход в другой активный зал (или основной) * @param roomId */ function onRoomSwitched(roomId: number | null): void; /** * Установить id сессионного зала на старте звонка * @param roomId */ function onRoomStart(roomId: number | null): void; /** * Получена новая реакция */ function onFeedback(feedback: IFeedbackExternal[], roomId?: number | null): void; /** * Изменилось состояние пермиссий фич в звонке * * @param featuresPerRole Информация о доступных фичах по ролям */ function onFeaturesPerRoleChanged(featuresPerRole: IFeaturesPerRole): void; /** * Изменился Vmoji-аватар пользователя * @param externalId Id пользователя */ function onParticipantVmojiUpdate(externalId: ExternalParticipantId): void; /** * Установка начальных параметров текстовой расшифровки звонка. (Используется при входе в звонок/ смене комнаты) * @param data Начальная информация по ASR * @param roomId Id Комнаты */ function onAsrSet(data: IAsrData | null, roomId: number | null): void; /** * Начата текстовая расшифровка звонка * @param initiatorId Id пользователя, запустившего расшифровку звонка * @param movieId Id расшифровки * @param roomId Id Комнаты */ function onAsrStarted(initiatorId: ExternalParticipantId, movieId: number, roomId: number | null): void; /** * Закончена текстовая расшифровка звонка * @param roomId Id Комнаты */ function onAsrStopped(roomId: number | null): void; function onAsrTranscription(id: ExternalParticipantId, text: string, timestamp: number, duration: number): void; /** * Изменился id участника (деанонимизация) * @param prevId * @param newId */ function onParticipantIdChanged(prevId: ExternalParticipantId, newId: ExternalParticipantId): void; function onVideoSuspendSuggest(bandwidth: number): void; /** * Одобрено повышение пользователя в зеле ожидания/зале в режиме Audience * * @param adminParticipantId админ, одобривший повышение */ function onPromotionApproved(adminParticipantId: ExternalParticipantId): void; /** * Собеседник подключился к сигналлингу */ function onPeerRegistered(): void; } export default External;