Subchapter 149.1
references/events-reference.mdMarkdown13 KBView on GitHub
// Register
client.on('event-name', (payload) => { /* handle */ });
// Unregister
client.off('event-name', handler);Fired when connection state changes.
client.on('connection-change', (payload: {
state: 'Connected' | 'Connecting' | 'Reconnecting' | 'Closed' | 'Fail';
reason?: string;
}) => {});| State | Description |
|---|---|
Connected | Successfully connected to session |
Connecting | Attempting to connect |
Reconnecting | Lost connection, attempting reconnect |
Closed | Disconnected from session |
Fail | Connection failed |
Fired when participant(s) join the session.
client.on('user-added', (payload: Participant[]) => {});
interface Participant {
userId: number;
displayName: string;
avatar?: string;
isHost: boolean;
isManager: boolean;
bVideoOn: boolean;
muted: boolean;
// ... more properties
}Fired when participant(s) leave the session.
client.on('user-removed', (payload: Participant[]) => {});Fired when participant properties change (name, mute, video, etc.).
client.on('user-updated', (payload: Participant[]) => {});Fired when a remote participant starts or stops video.
client.on('peer-video-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});Critical: Use this to render/remove remote videos.
Fired when local video capture state changes.
client.on('video-capturing-change', (payload: {
state: 'Started' | 'Stopped' | 'Failed';
}) => {});Fired when video becomes active/inactive.
client.on('video-active-change', (payload: {
state: VideoActiveState;
userId: number;
}) => {});Fired when received video dimensions change.
client.on('video-dimension-change', (payload: {
width: number;
height: number;
type: 'received';
}) => {});Fired when video quality details change.
client.on('video-detailed-data-change', (payload: {
userId: number;
width?: number;
height?: number;
fps?: number;
quality?: VideoQuality;
}) => {});Fired when spotlight list changes.
client.on('video-spotlight-change', (payload: {
spotlightList: { userId: number }[];
}) => {});Fired when local audio state changes.
client.on('current-audio-change', (payload: {
action: 'join' | 'leave' | 'muted' | 'unmuted';
type?: 'computer' | 'phone';
source?: MutedSource | LeaveAudioSource;
}) => {});| Action | Description |
|---|---|
join | Joined audio (computer or phone) |
leave | Left audio |
muted | Audio muted |
unmuted | Audio unmuted |
| Source | Description |
|---|---|
active | User action |
passive(mute all) | Host muted all |
passive(mute one) | Host muted you |
passive | Host unmuted you |
Fired when host asks you to unmute.
client.on('host-ask-unmute-audio', (payload: {
reason: 'Unmute' | 'Spotlight' | 'Allow to talk';
}) => {});Fired when active speakers change.
client.on('active-speaker', (payload: {
userId: number;
displayName: string;
}[]) => {});Array is sorted by volume (loudest first).
Fired when browser blocks audio autoplay.
client.on('auto-play-audio-failed', () => {});Fired when local audio level changes.
client.on('current-audio-level-change', (payload: {
level: number;
}) => {});Fired when speaking while muted is detected.
client.on('speaking-while-muted', () => {});Fired when someone starts/stops sharing.
client.on('active-share-change', (payload: {
state: 'Active' | 'Inactive';
userId: number;
}) => {});Fired when peer share state changes.
client.on('peer-share-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});Fired when you’re forced to stop sharing.
client.on('passively-stop-share', (payload: PassiveStopShareReason) => {});
// Reasons: 'PrivilegeChange', 'AnotherShareStarted', etc.Fired when sharer switches windows/tabs.
client.on('share-content-change', (payload: {
userId: number;
}) => {});Fired when share dimensions change.
client.on('share-content-dimension-change', (payload: {
width: number;
height: number;
type: 'received' | 'sended';
}) => {});Fired when share privilege changes.
client.on('share-privilege-change', (payload: {
privilege: SharePrivilege;
}) => {});Fired when share audio state changes.
client.on('share-audio-change', (payload: {
state: 'on' | 'off';
}) => {});Fired when a chat message is received.
client.on('chat-on-message', (payload: {
id: string;
message: string;
sender: { userId: number; name: string; avatar?: string };
receiver: { userId: number; name: string } | 'everyone';
timestamp: number;
isPrivate: boolean;
}) => {});Fired when chat privilege changes.
client.on('chat-privilege-change', (payload: {
chatPrivilege: ChatPrivilege;
}) => {});Fired during file upload.
client.on('chat-file-upload-progress', (payload: {
fileName: string;
fileSize: number;
progress: number;
status: ChatFileUploadStatus;
receiverId: number;
retryToken?: string;
}) => {});Fired during file download.
client.on('chat-file-download-progress', (payload: {
fileName: string;
fileSize: number;
progress: number;
status: ChatFileDownloadStatus;
fileUrl: string;
fileBlob?: Blob;
senderId: number;
}) => {});Fired when cloud recording state changes.
client.on('recording-change', (payload: {
state: RecordingStatus;
}) => {});| Status | Description |
|---|---|
Recording | Recording in progress |
Paused | Recording paused |
Stopped | Recording stopped |
Fired for individual recording consent.
client.on('individual-recording-change', (payload: {
state: RecordingStatus | 'Ask' | 'Accept' | 'Decline';
userId?: number;
}) => {});Fired when transcription text is received.
client.on('caption-message', (payload: {
msgId: string;
text: string;
userId: number;
displayName: string;
source: 'caption' | 'translation';
language: string;
done: boolean; // true = final, false = interim
timestamp: number;
}) => {});Fired when caption status changes.
client.on('caption-status', (payload: {
autoCaption: boolean;
language?: string;
lang?: number;
sessionLanguage?: string;
translationStarted?: boolean;
}) => {});Fired when captions are enabled/disabled.
client.on('caption-enable', (isEnabled: boolean) => {});Fired when language is locked/unlocked.
client.on('caption-language-lock', (isLocked: boolean) => {});Fired when host disables captions.
client.on('caption-host-disable', (isDisabled: boolean) => {});Fired when devices are added/removed.
client.on('device-change', () => {});Fired when device permissions change.
client.on('device-permission-change', (payload: {
name: 'microphone' | 'camera';
state: 'granted' | 'denied' | 'prompt';
}) => {});Fired when network quality changes.
client.on('network-quality-change', (payload: {
userId: number;
type: 'uplink' | 'downlink';
level: number; // 0-5 (0=unknown, 1=bad, 5=excellent)
}) => {});Fired when video statistics change.
client.on('video-statistic-data-change', (payload: {
type: 'VIDEO_QOS_DATA';
data: {
encoding: boolean; // true=send, false=receive
width: number;
height: number;
fps: number;
bitrate: number;
avg_loss: number;
max_loss: number;
jitter: number;
rtt: number;
};
}) => {});Fired when audio statistics change.
client.on('audio-statistic-data-change', (payload: {
type: 'AUDIO_QOS_DATA';
data: {
encoding: boolean;
bitrate: number;
avg_loss: number;
max_loss: number;
jitter: number;
rtt: number;
sample_rate: number;
};
}) => {});Fired when command channel status changes.
client.on('command-channel-status', (payload: ConnectionState) => {});Fired when command channel message is received.
client.on('command-channel-message', (payload: {
msgid: string;
senderId: string;
senderName: string;
text: string;
timestamp: number;
}) => {});Fired when live stream status changes.
client.on('live-stream-status', (status: LiveStreamStatus) => {});Fired when someone requests camera control.
client.on('far-end-camera-request-control', (payload: {
userId: number;
displayName: string;
currentControllingUserId?: number;
currentControllingDisplayName?: string;
}) => {});Fired with camera control response.
client.on('far-end-camera-response-control', (payload: {
userId: number;
displayName: string;
isApproved: boolean;
reason?: FarEndCameraControlDeclinedReason;
}) => {});Fired when camera capabilities change.
client.on('far-end-camera-capability-change', (payload: {
userId: number;
ptz: PTZCameraCapability;
}) => {});Fired when invited to join subsession.
client.on('subsession-invite-to-join', (payload: {
subsessionId: string;
subsessionName: string;
}) => {});Fired when broadcast message received.
client.on('subsession-broadcast-message', (payload: {
message: string;
}) => {});Fired when subsession state changes.
client.on('subsession-state-change', (payload: {
status: SubsessionStatus;
}) => {});Fired when whiteboard status changes.
client.on('whiteboard-status-change', (status: WhiteboardStatus) => {});Fired when peer whiteboard state changes.
client.on('peer-whiteboard-state-change', (payload: {
action: 'Start' | 'Stop';
userId: number;
}) => {});| Category | Events |
|---|---|
| Session | connection-change |
| Participants | user-added, user-removed, user-updated |
| Video | peer-video-state-change, video-capturing-change, video-dimension-change, video-active-change |
| Audio | current-audio-change, host-ask-unmute-audio, active-speaker, auto-play-audio-failed |
| Share | active-share-change, passively-stop-share, share-privilege-change, share-content-change |
| Chat | chat-on-message, chat-privilege-change, chat-file-*-progress |
| Recording | recording-change, individual-recording-change |
| Transcription | caption-message, caption-status, caption-enable |
| Device | device-change, device-permission-change |
| Network | network-quality-change, *-statistic-data-change |
This file
Nearby