import { CHANNEL_EVENTS, MEDIASOUP_EVENTS, PEER_EVENTS } from '../constants/events'; import EnhancedEventEmitter from '../EnhancedEventEmitter'; import { type ChangePreferredLayersPayload, type PayloadOfPublishedMedia, type PayloadOfUnpublishedMedia, type PeerGroup, type PeerInfo, type PeerShortData, type ProducerData, type ProducerSetMaxSpatialLayer, type Role, type SubscribeOptions, TrackLabel, type TrackLabelString } from '../types/common'; import type { PeerConsumerFactory } from '../types/container'; import type { GroupsChangedPayload, ProducePermissionsChangedPayload } from '../types/engine'; import type { PeerTrack } from '../types/peerTrack'; import type { CallState } from './CallState'; import type Logger from './Logger'; import type Media from './media'; import type { MyPeer } from './MyPeer'; import type Network from './network'; import type PeerConsumer from './PeerConsumer'; import PeerProducer from './PeerProducer'; import type { Peers } from './Peers'; import type { RemotePeerTracks } from './RemotePeerTracks'; export interface PeerDependencies { callState: CallState; loggerFactory: (namespace: string) => Logger; media: Media; myPeer: MyPeer; network: Network; peers: Peers; remotePeerTracks: RemotePeerTracks; peerConsumerFactory: PeerConsumerFactory; } interface PeerConstructor extends PeerDependencies { id: string; channelIds: string[]; groups: PeerGroup[]; producePermissions: TrackLabel[]; appId: string; producers: ProducerData[]; videoConsumer?: PeerConsumer; audioConsumer?: PeerConsumer; soundLevel?: number; loginDate: Date; uid?: string; appData?: Record; role: Role; } /** * Карта событий участника канала, доступная через `peer.observer`. */ export interface PeerObserverEvents { [PEER_EVENTS.mediaPublished]: [PayloadOfPublishedMedia]; [PEER_EVENTS.appDataUpdated]: [Record]; [PEER_EVENTS.connectionQualityChanged]: [{ connectionQuality: number; }]; [PEER_EVENTS.publisherPaused]: [PayloadOfPublishedMedia]; [PEER_EVENTS.publisherResumed]: [PayloadOfPublishedMedia]; [PEER_EVENTS.mediaUnPublished]: [PayloadOfUnpublishedMedia]; [PEER_EVENTS.trackStart]: [PeerTrack]; [PEER_EVENTS.trackEnd]: [PeerTrack]; [PEER_EVENTS.trackResumed]: [PeerTrack]; [PEER_EVENTS.trackPaused]: [PeerTrack]; [PEER_EVENTS.trackFailed]: [PeerTrack]; [PEER_EVENTS.producePermissionsChanged]: [ProducePermissionsChangedPayload]; [PEER_EVENTS.groupsChanged]: [GroupsChangedPayload]; [MEDIASOUP_EVENTS.producerClose]: [ProducerData]; [MEDIASOUP_EVENTS.newProducer]: [ProducerData]; [MEDIASOUP_EVENTS.closeConsumer]: [consumerId: string]; [MEDIASOUP_EVENTS.pauseConsumer]: [consumerId: string]; [MEDIASOUP_EVENTS.resumeConsumer]: [consumerId: string]; [MEDIASOUP_EVENTS.consumerChangePreferredLayers]: [ChangePreferredLayersPayload]; [MEDIASOUP_EVENTS.producerSetMaxSpatialLayer]: [ProducerSetMaxSpatialLayer]; [CHANNEL_EVENTS.updatePeerAppData]: [Record]; [event: string]: unknown[]; } /** * Представление участника канала в публичном API SDK. * * Через `Peer` приложение получает информацию об удалённом пользователе, * может подписываться на его медиа и отслеживать изменения его состояния. */ declare class Peer { #private; /** Идентификатор участника внутри канала. */ id: string; /** Список каналов, к которым привязан участник. */ channelIds: string[]; /** Группы прав участника, например `moderator` или `user`. */ groups: PeerGroup[]; /** Метки треков, которые участнику разрешено публиковать. */ producePermissions: TrackLabel[]; /** Идентификатор приложения, из которого подключён участник. */ appId: string; /** Время входа участника в систему или канал. */ loginDate: Date; /** Дополнительный пользовательский идентификатор, если он передаётся. */ uid?: string; private applicationData; /** Роль участника в канале. */ role: Role; /** Активные опубликованные producer'ы участника. */ producers: Map; /** Удалённые треки, на которые клиент уже подписался у этого участника. */ readonly tracks: Map; private readonly _observer; constructor({ id, channelIds, groups, producePermissions, appId, loginDate, producers, appData, uid, role, loggerFactory, myPeer, callState, peers, remotePeerTracks, media, network, peerConsumerFactory, }: PeerConstructor); /** Пользовательские данные участника, переданные через `appData`. */ get appData(): Record; /** Шина событий участника для подписки на медиапотоки, изменения метаданных и состояния соединения. */ get observer(): EnhancedEventEmitter; /** Показывает, принадлежит ли этот объект `Peer` к текущему локальному пользователю. */ get isMe(): boolean; /** Показывает, входит ли участник в группу `moderator`. Модератор может управлять правами других участников. */ get isModerator(): boolean; /** Показывает, входит ли участник в группу `user`. */ get isUser(): boolean; /** Текущий список опубликованных участником медиаисточников. */ get publishedMedia(): PayloadOfPublishedMedia[]; get shortData(): PeerShortData; /** Проверяет, может ли участник публиковать трек с указанной меткой. */ hasPermission(producePermission: TrackLabel): boolean; /** Проверяет, состоит ли участник в указанной группе прав. */ hasGroup(group: PeerGroup): boolean; /** * Подписывает текущего клиента на удалённый producer участника. * * После успешного вызова соответствующий удалённый трек появится в `peer.tracks`. */ subscribe({ producerId, muted }: SubscribeOptions): Promise; /** Отписывает клиента от ранее созданной подписки на producer участника. */ unsubscribe(producerId: string): Promise; /** Полностью заменяет набор разрешений на публикацию для выбранного участника. Доступно модератору. */ setProducePermissions(producePermissions: TrackLabelString[]): Promise; /** Добавляет одно разрешение на публикацию трека для участника. Доступно модератору. */ addProducePermission(label: TrackLabelString): Promise; /** Удаляет одно разрешение на публикацию трека у участника. Доступно модератору. */ removeProducePermission(label: TrackLabelString): Promise; /** Возвращает срез данных об участнике и его активных треках в удобной для UI форме. */ getInfo(): Promise; /** Возвращает список producer'ов участника в том виде, как их знает SDK. */ getProducers(): PeerProducer[]; /** Возвращает техническое состояние consumer'ов, созданных для подписки на треки участника. */ getConsumersState(): Array<{ id: string; producerId: string; paused: boolean; }>; private handleNewProducer; private handlePeerEvents; /** Сбрасывает локальное состояние участника и освобождает созданные для него подписки. */ reset(): Promise; getActiveTracksCount(): number; getActivePublishersCount(): number; handleProducePermissionsChange(producePermissions: TrackLabel[]): void; handleGroupsChange(groups: PeerGroup[]): void; private getAllConsumers; private getConsumerByProducerId; private getConsumerById; private getTrackByConsumerId; private setAppData; private throwIfIamNotModerator; } export default Peer;