livekit-client
Version:
JavaScript/TypeScript client SDK for LiveKit
273 lines • 12.5 kB
TypeScript
import { DataPacket_Kind, DisconnectReason, ParticipantPermission, SipDTMF, SubscriptionError, TranscriptionSegment as TranscriptionSegmentModel } from '@livekit/protocol';
import type TypedEmitter from 'typed-emitter';
import 'webrtc-adapter';
import type { InternalRoomOptions, RoomConnectOptions, RoomOptions } from '../options';
import RTCEngine from './RTCEngine';
import LocalParticipant from './participant/LocalParticipant';
import type Participant from './participant/Participant';
import type { ConnectionQuality } from './participant/Participant';
import RemoteParticipant from './participant/RemoteParticipant';
import LocalTrackPublication from './track/LocalTrackPublication';
import type RemoteTrack from './track/RemoteTrack';
import RemoteTrackPublication from './track/RemoteTrackPublication';
import { Track } from './track/Track';
import type { TrackPublication } from './track/TrackPublication';
import type { SimulationOptions, SimulationScenario, TranscriptionSegment } from './types';
export declare enum ConnectionState {
Disconnected = "disconnected",
Connecting = "connecting",
Connected = "connected",
Reconnecting = "reconnecting",
SignalReconnecting = "signalReconnecting"
}
declare const Room_base: new () => TypedEmitter<RoomEventCallbacks>;
/**
* In LiveKit, a room is the logical grouping for a list of participants.
* Participants in a room can publish tracks, and subscribe to others' tracks.
*
* a Room fires [[RoomEvent | RoomEvents]].
*
* @noInheritDoc
*/
declare class Room extends Room_base {
state: ConnectionState;
/**
* map of identity: [[RemoteParticipant]]
*/
remoteParticipants: Map<string, RemoteParticipant>;
/**
* list of participants that are actively speaking. when this changes
* a [[RoomEvent.ActiveSpeakersChanged]] event is fired
*/
activeSpeakers: Participant[];
/** @internal */
engine: RTCEngine;
/** the current participant */
localParticipant: LocalParticipant;
/** options of room */
options: InternalRoomOptions;
/** reflects the sender encryption status of the local participant */
isE2EEEnabled: boolean;
private roomInfo?;
private sidToIdentity;
/** connect options of room */
private connOptions?;
private audioEnabled;
private audioContext?;
/** used for aborting pending connections to a LiveKit server */
private abortController?;
/** future holding client initiated connection attempt */
private connectFuture?;
private disconnectLock;
private e2eeManager;
private connectionReconcileInterval?;
private regionUrlProvider?;
private regionUrl?;
private isVideoPlaybackBlocked;
private log;
private bufferedEvents;
private isResuming;
/**
* map to store first point in time when a particular transcription segment was received
*/
private transcriptionReceivedTimes;
/**
* Creates a new Room, the primary construct for a LiveKit session.
* @param options
*/
constructor(options?: RoomOptions);
/**
* @experimental
*/
setE2EEEnabled(enabled: boolean): Promise<void>;
private setupE2EE;
private get logContext();
/**
* if the current room has a participant with `recorder: true` in its JWT grant
**/
get isRecording(): boolean;
/**
* server assigned unique room id.
* returns once a sid has been issued by the server.
*/
getSid(): Promise<string>;
/** user assigned name, derived from JWT token */
get name(): string;
/** room metadata */
get metadata(): string | undefined;
get numParticipants(): number;
get numPublishers(): number;
private maybeCreateEngine;
/**
* getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.
* In particular, it handles Chrome's unique behavior of creating `default`
* devices. When encountered, it'll be removed from the list of devices.
* The actual default device will be placed at top.
* @param kind
* @returns a list of available local devices
*/
static getLocalDevices(kind?: MediaDeviceKind, requestPermissions?: boolean): Promise<MediaDeviceInfo[]>;
/**
* prepareConnection should be called as soon as the page is loaded, in order
* to speed up the connection attempt. This function will
* - perform DNS resolution and pre-warm the DNS cache
* - establish TLS connection and cache TLS keys
*
* With LiveKit Cloud, it will also determine the best edge data center for
* the current client to connect to if a token is provided.
*/
prepareConnection(url: string, token?: string): Promise<void>;
connect: (url: string, token: string, opts?: RoomConnectOptions) => Promise<void>;
private connectSignal;
private applyJoinResponse;
private attemptConnection;
/**
* disconnects the room, emits [[RoomEvent.Disconnected]]
*/
disconnect: (stopTracks?: boolean) => Promise<void>;
/**
* retrieves a participant by identity
* @param identity
* @returns
*/
getParticipantByIdentity(identity: string): Participant | undefined;
private clearConnectionFutures;
/**
* @internal for testing
*/
simulateScenario(scenario: SimulationScenario, arg?: any): Promise<void>;
private onPageLeave;
/**
* Browsers have different policies regarding audio playback. Most requiring
* some form of user interaction (click/tap/etc).
* In those cases, audio will be silent until a click/tap triggering one of the following
* - `startAudio`
* - `getUserMedia`
*/
startAudio: () => Promise<void>;
startVideo: () => Promise<void>;
/**
* Returns true if audio playback is enabled
*/
get canPlaybackAudio(): boolean;
/**
* Returns true if video playback is enabled
*/
get canPlaybackVideo(): boolean;
getActiveDevice(kind: MediaDeviceKind): string | undefined;
/**
* Switches all active devices used in this room to the given device.
*
* Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)
*
* @param kind use `videoinput` for camera track,
* `audioinput` for microphone track,
* `audiooutput` to set speaker for all incoming audio tracks
* @param deviceId
*/
switchActiveDevice(kind: MediaDeviceKind, deviceId: string, exact?: boolean): Promise<boolean>;
private setupLocalParticipantEvents;
private recreateEngine;
private onTrackAdded;
private handleRestarting;
private handleSignalRestarted;
private handleDisconnect;
private handleParticipantUpdates;
private handleParticipantDisconnected;
private handleActiveSpeakersUpdate;
private handleSpeakersChanged;
private handleStreamStateUpdate;
private handleSubscriptionPermissionUpdate;
private handleSubscriptionError;
private handleDataPacket;
private handleUserPacket;
private handleSipDtmf;
bufferedSegments: Map<string, TranscriptionSegmentModel>;
private handleTranscription;
private handleAudioPlaybackStarted;
private handleAudioPlaybackFailed;
private handleVideoPlaybackStarted;
private handleVideoPlaybackFailed;
private handleDeviceChange;
private handleRoomUpdate;
private handleConnectionQualityUpdate;
private acquireAudioContext;
private createParticipant;
private getOrCreateParticipant;
private sendSyncState;
/**
* After resuming, we'll need to notify the server of the current
* subscription settings.
*/
private updateSubscriptions;
private getRemoteParticipantBySid;
private registerConnectionReconcile;
private clearConnectionReconcile;
private setAndEmitConnectionState;
private emitBufferedEvents;
private emitWhenConnected;
private onLocalParticipantMetadataChanged;
private onLocalParticipantNameChanged;
private onLocalAttributesChanged;
private onLocalTrackMuted;
private onLocalTrackUnmuted;
private onTrackProcessorUpdate;
private onLocalTrackPublished;
private onLocalTrackUnpublished;
private onLocalConnectionQualityChanged;
private onMediaDevicesError;
private onLocalParticipantPermissionsChanged;
/**
* Allows to populate a room with simulated participants.
* No actual connection to a server will be established, all state is
* @experimental
*/
simulateParticipants(options: SimulationOptions): Promise<void>;
emit<E extends keyof RoomEventCallbacks>(event: E, ...args: Parameters<RoomEventCallbacks[E]>): boolean;
}
export default Room;
export type RoomEventCallbacks = {
connected: () => void;
reconnecting: () => void;
signalReconnecting: () => void;
reconnected: () => void;
disconnected: (reason?: DisconnectReason) => void;
connectionStateChanged: (state: ConnectionState) => void;
mediaDevicesChanged: () => void;
participantConnected: (participant: RemoteParticipant) => void;
participantDisconnected: (participant: RemoteParticipant) => void;
trackPublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
trackSubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
trackSubscriptionFailed: (trackSid: string, participant: RemoteParticipant, reason?: SubscriptionError) => void;
trackUnpublished: (publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
trackUnsubscribed: (track: RemoteTrack, publication: RemoteTrackPublication, participant: RemoteParticipant) => void;
trackMuted: (publication: TrackPublication, participant: Participant) => void;
trackUnmuted: (publication: TrackPublication, participant: Participant) => void;
localTrackPublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
localTrackUnpublished: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
localAudioSilenceDetected: (publication: LocalTrackPublication) => void;
participantMetadataChanged: (metadata: string | undefined, participant: RemoteParticipant | LocalParticipant) => void;
participantNameChanged: (name: string, participant: RemoteParticipant | LocalParticipant) => void;
participantPermissionsChanged: (prevPermissions: ParticipantPermission | undefined, participant: RemoteParticipant | LocalParticipant) => void;
participantAttributesChanged: (changedAttributes: Record<string, string>, participant: RemoteParticipant | LocalParticipant) => void;
activeSpeakersChanged: (speakers: Array<Participant>) => void;
roomMetadataChanged: (metadata: string) => void;
dataReceived: (payload: Uint8Array, participant?: RemoteParticipant, kind?: DataPacket_Kind, topic?: string) => void;
sipDTMFReceived: (dtmf: SipDTMF, participant?: RemoteParticipant) => void;
transcriptionReceived: (transcription: TranscriptionSegment[], participant?: Participant, publication?: TrackPublication) => void;
connectionQualityChanged: (quality: ConnectionQuality, participant: Participant) => void;
mediaDevicesError: (error: Error) => void;
trackStreamStateChanged: (publication: RemoteTrackPublication, streamState: Track.StreamState, participant: RemoteParticipant) => void;
trackSubscriptionPermissionChanged: (publication: RemoteTrackPublication, status: TrackPublication.PermissionStatus, participant: RemoteParticipant) => void;
trackSubscriptionStatusChanged: (publication: RemoteTrackPublication, status: TrackPublication.SubscriptionStatus, participant: RemoteParticipant) => void;
audioPlaybackChanged: (playing: boolean) => void;
videoPlaybackChanged: (playing: boolean) => void;
signalConnected: () => void;
recordingStatusChanged: (recording: boolean) => void;
participantEncryptionStatusChanged: (encrypted: boolean, participant?: Participant) => void;
encryptionError: (error: Error) => void;
dcBufferStatusChanged: (isLow: boolean, kind: DataPacket_Kind) => void;
activeDeviceChanged: (kind: MediaDeviceKind, deviceId: string) => void;
localTrackSubscribed: (publication: LocalTrackPublication, participant: LocalParticipant) => void;
};
//# sourceMappingURL=Room.d.ts.map