@signalwire/realtime-api
Version:
SignalWire RealTime SDK for Node.js
808 lines • 35.3 kB
TypeScript
import type { GlobalVideoEvents, VideoMemberEventNames, RoomStarted, RoomUpdated, RoomSubscribed, RoomEnded, VideoLayoutEventNames, MemberTalkingEventNames, MemberUpdated, MemberUpdatedEventNames, RoomAudienceCount, VideoRoomAudienceCountEventParams, OnRoomStarted, OnRoomEnded, OnRoomUpdated, OnRoomAudienceCount, OnRoomSubscribed, OnMemberUpdated, OnLayoutChanged, OnMemberJoined, MemberJoined, OnMemberLeft, MemberLeft, OnMemberTalking, MemberTalking, OnMemberListUpdated, MemberListUpdated, PlaybackStarted, OnPlaybackStarted, OnPlaybackUpdated, PlaybackUpdated, OnPlaybackEnded, PlaybackEnded, OnRecordingStarted, RecordingStarted, OnRecordingUpdated, RecordingUpdated, OnRecordingEnded, RecordingEnded, OnStreamStarted, OnStreamEnded, StreamStarted, StreamEnded, OnMemberTalkingStarted, MemberTalkingStarted, OnMemberTalkingEnded, MemberTalkingEnded, OnMemberDeaf, OnMemberVisible, OnMemberAudioMuted, OnMemberVideoMuted, OnMemberInputVolume, OnMemberOutputVolume, OnMemberInputSensitivity, VideoPlaybackEventNames, VideoRecordingEventNames, VideoStreamEventNames, MemberCommandParams, MemberCommandWithVolumeParams, MemberCommandWithValueParams } from '@signalwire/core';
import type { RoomSession } from '../video/RoomSession';
import type { RoomSessionMember, RoomSessionMemberUpdated } from '../video/RoomSessionMember';
import { RoomSessionPlayback, RoomSessionPlaybackPromise } from '../video/RoomSessionPlayback';
import { RoomSessionRecording, RoomSessionRecordingPromise } from '../video/RoomSessionRecording';
import { RoomSessionStream, RoomSessionStreamPromise } from '../video/RoomSessionStream';
import { RoomMethods } from '../video/methods';
/**
* Public Contract for a realtime VideoRoomSession
*/
export interface VideoRoomSessionContract {
/** Unique id for this room session */
id: string;
/** Display name for this room. Defaults to the value of `name` */
displayName: string;
/** Id of the room associated to this room session */
roomId: string;
/** @internal */
eventChannel: string;
/** Name of this room */
name: string;
/** Whether recording is active */
recording: boolean;
/** Whether muted videos are shown in the room layout. See {@link setHideVideoMuted} */
hideVideoMuted: boolean;
/** URL to the room preview. */
previewUrl?: string;
/** Current layout name used in the room. */
layoutName: string;
/** Whether the room is locked */
locked: boolean;
/** Metadata associated to this room session. */
meta?: Record<string, unknown>;
/** Fields that have changed in this room session */
updated?: Array<Exclude<keyof VideoRoomSessionContract, 'updated'>>;
/** Whether the room is streaming */
streaming: boolean;
/**
* Puts the microphone on mute. The other participants will not hear audio
* from the muted participant anymore. You can use this method to mute
* either yourself or another participant in the room.
* @param params
* @param params.memberId id of the member to mute. If omitted, mutes the
* default device in the local client.
*
* @permissions
* - `room.self.audio_mute`: to mute a local device
* - `room.member.audio_mute`: to mute a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Muting your own microphone:
* ```typescript
* await room.audioMute()
* ```
*
* @example Muting the microphone of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.audioMute({memberId: id})
* ```
*/
audioMute(params?: MemberCommandParams): RoomMethods.AudioMuteMember;
/**
* Unmutes the microphone if it had been previously muted. You can use this
* method to unmute either yourself or another participant in the room.
* @param params
* @param params.memberId id of the member to unmute. If omitted, unmutes
* the default device in the local client.
*
* @permissions
* - `room.self.audio_unmute`: to unmute a local device
* - `room.member.audio_unmute`: to unmute a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Unmuting your own microphone:
* ```typescript
* await room.audioUnmute()
* ```
*
* @example Unmuting the microphone of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.audioUnmute({memberId: id})
* ```
*/
audioUnmute(params?: MemberCommandParams): RoomMethods.AudioUnmuteMember;
/**
* Puts the video on mute. Participants will see a mute image instead of the
* video stream. You can use this method to mute either yourself or another
* participant in the room.
* @param params
* @param params.memberId id of the member to mute. If omitted, mutes the
* default device in the local client.
*
* @permissions
* - `room.self.video_mute`: to unmute a local device
* - `room.member.video_mute`: to unmute a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Muting your own video:
* ```typescript
* await room.videoMute()
* ```
*
* @example Muting the video of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.videoMute({memberId: id})
* ```
*/
videoMute(params?: MemberCommandParams): RoomMethods.VideoMuteMember;
/**
* Unmutes the video if it had been previously muted. Participants will
* start seeing the video stream again. You can use this method to unmute
* either yourself or another participant in the room.
* @param params
* @param params.memberId id of the member to unmute. If omitted, unmutes
* the default device in the local client.
*
* @permissions
* - `room.self.video_mute`: to unmute a local device
* - `room.member.video_mute`: to unmute a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Unmuting your own video:
* ```typescript
* await room.videoUnmute()
* ```
*
* @example Unmuting the video of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.videoUnmute({memberId: id})
* ```
*/
videoUnmute(params?: MemberCommandParams): RoomMethods.VideoUnmuteMember;
/** @deprecated Use {@link setInputVolume} instead. */
setMicrophoneVolume(params: MemberCommandWithVolumeParams): RoomMethods.SetInputVolumeMember;
/**
* Sets the input volume level (e.g. for the microphone). You can use this
* method to set the input volume for either yourself or another participant
* in the room.
*
* @param params
* @param params.memberId id of the member for which to set input volume. If
* omitted, sets the volume of the default device in the local client.
* @param params.volume desired volume. Values range from -50 to 50, with a
* default of 0.
*
* @permissions
* - `room.self.set_input_volume`: to set the volume for a local device
* - `room.member.set_input_volume`: to set the volume for a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Setting your own microphone volume:
* ```typescript
* await room.setInputVolume({volume: -10})
* ```
*
* @example Setting the microphone volume of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.setInputVolume({memberId: id, volume: -10})
* ```
*/
setInputVolume(params: MemberCommandWithVolumeParams): RoomMethods.SetInputVolumeMember;
/**
* Sets the input level at which the participant is identified as currently
* speaking. You can use this method to set the input sensitivity for either
* yourself or another participant in the room.
* @param params
* @param params.memberId id of the member to affect. If omitted, affects
* the default device in the local client.
* @param params.value desired sensitivity. The default value is 30 and the
* scale goes from 0 (lowest sensitivity, essentially muted) to 100 (highest
* sensitivity).
*
* @permissions
* - `room.self.set_input_sensitivity`: to set the sensitivity for a local
* device
* - `room.member.set_input_sensitivity`: to set the sensitivity for a
* remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Setting your own input sensitivity:
* ```typescript
* await room.setInputSensitivity({value: 80})
* ```
*
* @example Setting the input sensitivity of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.setInputSensitivity({memberId: id, value: 80})
* ```
*/
setInputSensitivity(params: MemberCommandWithValueParams): RoomMethods.SetInputSensitivityMember;
/**
* Returns a list of members currently in the room.
*
* @example
* ```typescript
* await room.getMembers()
* ```
*/
getMembers(): RoomMethods.GetMembers;
/**
* Mutes the incoming audio. The affected participant will not hear audio
* from the other participants anymore. You can use this method to make deaf
* either yourself or another participant in the room.
*
* Note that in addition to making a participant deaf, this will also
* automatically mute the microphone of the target participant (even if
* there is no `audio_mute` permission). If you want, you can then manually
* unmute it by calling {@link audioUnmute}.
* @param params
* @param params.memberId id of the member to affect. If omitted, affects
* the default device in the local client.
*
* @permissions
* - `room.self.deaf`: to make yourself deaf
* - `room.member.deaf`: to make deaf a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Making yourself deaf:
* ```typescript
* await room.deaf()
* ```
*
* @example Making another participant deaf:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.deaf({memberId: id})
* ```
*/
deaf(params?: MemberCommandParams): RoomMethods.DeafMember;
/**
* Unmutes the incoming audio. The affected participant will start hearing
* audio from the other participants again. You can use this method to
* undeaf either yourself or another participant in the room.
*
* Note that in addition to allowing a participants to hear the others, this
* will also automatically unmute the microphone of the target participant
* (even if there is no `audio_unmute` permission). If you want, you can then
* manually mute it by calling {@link audioMute}.
* @param params
* @param params.memberId id of the member to affect. If omitted, affects
* the default device in the local client.
*
* @permissions
* - `room.self.deaf`: to make yourself deaf
* - `room.member.deaf`: to make deaf a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Undeaf yourself:
* ```typescript
* await room.undeaf()
* ```
*
* @example Undeaf another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.undeaf({memberId: id})
* ```
*/
undeaf(params?: MemberCommandParams): RoomMethods.UndeafMember;
/** @deprecated Use {@link setOutputVolume} instead. */
setSpeakerVolume(params: MemberCommandWithVolumeParams): RoomMethods.SetOutputVolumeMember;
/**
* Sets the output volume level (e.g., for the speaker). You can use this
* method to set the output volume for either yourself or another participant
* in the room.
* @param params
* @param params.memberId id of the member to affect. If omitted, affects the
* default device in the local client.
* @param params.volume desired volume. Values range from -50 to 50, with a
* default of 0.
*
* @permissions
* - `room.self.set_output_volume`: to set the speaker volume for yourself
* - `room.member.set_output_volume`: to set the speaker volume for a remote
* member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Setting your own output volume:
* ```typescript
* await room.setOutputVolume({volume: -10})
* ```
*
* @example Setting the output volume of another participant:
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.setOutputVolume({memberId: id, volume: -10})
* ```
*/
setOutputVolume(params: MemberCommandWithVolumeParams): RoomMethods.SetOutputVolumeMember;
/**
* Removes a specific participant from the room.
* @param params
* @param params.memberId id of the member to remove
*
* @permissions
* - `room.member.remove`: to remove a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* const id = 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* await room.removeMember({memberId: id})
* ```
*/
removeMember(params: Required<MemberCommandParams>): RoomMethods.RemoveMember;
/**
* Removes all the participants from the room.
*
* @permissions
* - `room.member.remove`: to remove a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.removeAllMembers()
* ```
*/
removeAllMembers(): RoomMethods.RemoveAllMembers;
/**
* Show or hide muted videos in the room layout. Members that have been muted
* via {@link videoMute} will display a mute image instead of the video, if
* this setting is enabled.
*
* @param value whether to show muted videos in the room layout.
*
* @permissions
* - `room.hide_video_muted`
* - `room.show_video_muted`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await roomSession.setHideVideoMuted(false)
* ```
*/
setHideVideoMuted(value: boolean): RoomMethods.SetHideVideoMuted;
/**
* Returns a list of available layouts for the room. To set a room layout,
* use {@link setLayout}.
*
* @permissions
* - `room.list_available_layouts`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.getLayouts()
* ```
*/
getLayouts(): RoomMethods.GetLayouts;
/**
* Sets a layout for the room. You can obtain a list of available layouts
* with {@link getLayouts}.
*
* @permissions
* - `room.set_layout`
* - `room.set_position` (if you need to assign positions)
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example Set the 6x6 layout:
* ```typescript
* await room.setLayout({name: "6x6"})
* ```
*/
setLayout(params: RoomMethods.SetLayoutParams): RoomMethods.SetLayout;
/**
* Assigns a position in the layout for multiple members.
*
* @permissions
* - `room.set_position`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```js
* await roomSession.setPositions({
* positions: {
* "1bf4d4fb-a3e4-4d46-80a8-3ebfdceb2a60": "reserved-1",
* "e0c5be44-d6c7-438f-8cda-f859a1a0b1e7": "auto"
* }
* })
* ```
*/
setPositions(params: RoomMethods.SetPositionsParams): RoomMethods.SetPositions;
/**
* Assigns a position in the layout to the specified member.
*
* @permissions
* - `room.self.set_position`: to set the position for the local member
* - `room.member.set_position`: to set the position for a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```js
* await roomSession.setMemberPosition({
* memberId: "1bf4d4fb-a3e4-4d46-80a8-3ebfdceb2a60",
* position: "off-canvas"
* })
* ```
*/
setMemberPosition(params: RoomMethods.SetMemberPositionParams): RoomMethods.SetMemberPosition;
/**
* Obtains a list of recordings for the current room session. To download the
* actual mp4 file, please use the [REST
* API](https://developer.signalwire.com/apis/reference/overview).
*
* @permissions
* - `room.recording`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.getRecordings()
* ```
*
* From your server, you can obtain the mp4 file using the [REST API](https://developer.signalwire.com/apis/reference/overview):
* ```typescript
* curl --request GET \
* --url https://<yourspace>.signalwire.com/api/video/room_recordings/<recording_id> \
* --header 'Accept: application/json' \
* --header 'Authorization: Basic <your API token>'
* ```
*/
getRecordings(): RoomMethods.GetRecordings;
/**
* Starts the recording of the room. You can use the returned
* {@link RoomSessionRecording} object to control the recording (e.g., pause,
* resume, stop).
*
* @permissions
* - `room.recording`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* const rec = await room.startRecording().onStarted()
* await rec.stop()
* ```
*/
startRecording(params?: RoomMethods.StartRecordingParams): RoomSessionRecordingPromise;
/**
* Obtains a list of recordings for the current room session.
*
* @permissions
* - `room.playback`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @returns The returned objects contain all the properties of a
* {@link RoomSessionPlayback}, but no methods.
*/
getPlaybacks(): RoomMethods.GetPlaybacks;
/**
* Starts a playback in the room. You can use the returned
* {@link RoomSessionPlayback} object to control the playback (e.g., pause,
* resume, setVolume and stop).
*
* @permissions
* - `room.playback`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* const playback = await roomSession.play({ url: 'rtmp://example.com/foo' }).onStarted()
* await playback.stop()
* ```
*/
play(params: RoomMethods.PlayParams): RoomSessionPlaybackPromise;
/**
* Assigns custom metadata to the RoomSession. You can use this to store
* metadata whose meaning is entirely defined by your application.
*
* Note that calling this method overwrites any metadata that had been
* previously set on this RoomSession.
*
* @param meta The medatada object to assign to the RoomSession.
*
* @permissions
* - `room.set_meta`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```js
* await roomSession.setMeta({ foo: 'bar' })
* ```
*/
setMeta(params: RoomMethods.SetMetaParams): RoomMethods.SetMeta;
/**
* Retrieve the custom metadata for the RoomSession.
*
* @example
* ```js
* const { meta } = await roomSession.getMeta()
* ```
*/
getMeta(): RoomMethods.GetMeta;
updateMeta(params: RoomMethods.UpdateMetaParams): RoomMethods.UpdateMeta;
deleteMeta(params: RoomMethods.DeleteMetaParams): RoomMethods.DeleteMeta;
/**
* Assigns custom metadata to the specified RoomSession member. You can use
* this to store metadata whose meaning is entirely defined by your
* application.
*
* Note that calling this method overwrites any metadata that had been
* previously set on the specified member.
*
* @param params.memberId Id of the member to affect. If omitted, affects the
* default device in the local client.
* @param params.meta The medatada object to assign to the member.
*
* @permissions
* - `room.self.set_meta`: to set the metadata for the local member
* - `room.member.set_meta`: to set the metadata for a remote member
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* Setting metadata for the current member:
* ```js
* await roomSession.setMemberMeta({
* meta: {
* email: 'joe@example.com'
* }
* })
* ```
*
* @example
* Setting metadata for another member:
* ```js
* await roomSession.setMemberMeta({
* memberId: 'de550c0c-3fac-4efd-b06f-b5b8614b8966' // you can get this from getMembers()
* meta: {
* email: 'joe@example.com'
* }
* })
* ```
*/
setMemberMeta(params: RoomMethods.SetMemberMetaParams): RoomMethods.SetMemberMeta;
/**
* Retrieve the custom metadata for the specified RoomSession member.
*
* @param params.memberId Id of the member to retrieve the meta. If omitted, fallback to the current memberId.
*
* @example
* ```js
* const { meta } = await roomSession.getMemberMeta({ memberId: 'de550c0c-3fac-4efd-b06f-b5b8614b8966' })
* ```
*/
getMemberMeta(params?: MemberCommandParams): RoomMethods.GetMemberMeta;
updateMemberMeta(params: RoomMethods.UpdateMemberMetaParams): RoomMethods.UpdateMemberMeta;
deleteMemberMeta(params: RoomMethods.DeleteMemberMetaParams): RoomMethods.DeleteMemberMeta;
promote(params: RoomMethods.PromoteMemberParams): RoomMethods.PromoteMember;
demote(params: RoomMethods.DemoteMemberParams): RoomMethods.DemoteMember;
/**
* Obtains a list of streams for the current room session.
*
* @permissions
* - `room.stream`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.getStreams()
* ```
*/
getStreams(): RoomMethods.GetStreams;
/**
* Starts to stream the room to the provided URL. You can use the returned
* {@link RoomSessionStream} object to then stop the stream.
*
* @permissions
* - `room.stream.start` or `room.stream`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* const stream = await room.startStream({ url: 'rtmp://example.com' }).onStarted()
* await stream.stop()
* ```
*/
startStream(params: RoomMethods.StartStreamParams): RoomSessionStreamPromise;
/**
* Lock the room
*
* @permissions
* - `room.lock`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.lock()
* ```
*/
lock(): RoomMethods.Lock;
/**
* Unlock the room
*
* @permissions
* - `room.unlock`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.unlock()
* ```
*/
unlock(): RoomMethods.Unlock;
/**
* Raise or lower hand of a member
*
* @permissions
* - `room.member.raisehand` and `room.member.lowerhand`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.setRaisedHand({ raised: true, memberId: '123...' })
* ```
*/
setRaisedHand(params: RoomMethods.SetRaisedHandRoomParams): RoomMethods.SetRaisedHand;
/**
* Set hand raise prioritization
*
* @permissions
* - `room.self.prioritize_handraise`
*
* You need to specify the permissions when [creating the Video Room
* Token](https://developer.signalwire.com/apis/reference/create_room_token)
* on the server side.
*
* @example
* ```typescript
* await room.setPrioritizeHandraise(true)
* ```
*/
setPrioritizeHandraise(prioritize: boolean): RoomMethods.SetPrioritizeHandraise;
}
/**
* RealTime Video API
*/
export type RealTimeVideoEventsHandlerMapping = Record<GlobalVideoEvents, (room: RoomSession) => void>;
export type RealTimeVideoEvents = {
[k in keyof RealTimeVideoEventsHandlerMapping]: RealTimeVideoEventsHandlerMapping[k];
};
export interface RealTimeVideoListeners {
onRoomStarted?: (room: RoomSession) => unknown;
onRoomEnded?: (room: RoomSession) => unknown;
}
export type RealTimeVideoListenersEventsMapping = {
onRoomStarted: RoomStarted;
onRoomEnded: RoomEnded;
};
/**
* RealTime Video Room API
*/
export type RealTimeRoomEventsHandlerMapping = Record<VideoLayoutEventNames, (layout: any) => void> & Record<Exclude<VideoMemberEventNames, MemberUpdated | MemberUpdatedEventNames>, (member: RoomSessionMember) => void> & Record<Extract<VideoMemberEventNames, MemberUpdated | MemberUpdatedEventNames>, (member: RoomSessionMemberUpdated) => void> & Record<MemberTalkingEventNames, (member: RoomSessionMember) => void> & Record<RoomStarted | RoomEnded, (roomSession: RoomSession) => void> & Record<RoomUpdated, (roomSession: RoomSession) => void> & Record<RoomAudienceCount, (params: VideoRoomAudienceCountEventParams) => void> & Record<RoomSubscribed, (roomSessionFull: RoomSession) => void> & Record<PlaybackStarted, (playback: RoomSessionPlayback) => void> & Record<PlaybackUpdated, (playback: RoomSessionPlayback) => void> & Record<PlaybackEnded, (playback: RoomSessionPlayback) => void> & Record<RecordingStarted, (recording: RoomSessionRecording) => void> & Record<RecordingUpdated, (recording: RoomSessionRecording) => void> & Record<RecordingEnded, (recording: RoomSessionRecording) => void> & Record<StreamStarted, (stream: RoomSessionStream) => void> & Record<StreamEnded, (stream: RoomSessionStream) => void>;
export type RealTimeRoomEvents = {
[k in keyof RealTimeRoomEventsHandlerMapping]: RealTimeRoomEventsHandlerMapping[k];
};
export interface RealTimeRoomListeners {
onRoomSubscribed?: (room: RoomSession) => unknown;
onRoomStarted?: (room: RoomSession) => unknown;
onRoomUpdated?: (room: RoomSession) => unknown;
onRoomEnded?: (room: RoomSession) => unknown;
onRoomAudienceCount?: (params: VideoRoomAudienceCountEventParams) => unknown;
onLayoutChanged?: (layout: any) => unknown;
onMemberJoined?: (member: RoomSessionMember) => unknown;
onMemberUpdated?: (member: RoomSessionMember) => unknown;
onMemberListUpdated?: (member: RoomSessionMember) => unknown;
onMemberLeft?: (member: RoomSessionMember) => unknown;
onMemberDeaf?: (member: RoomSessionMember) => unknown;
onMemberVisible?: (member: RoomSessionMember) => unknown;
onMemberAudioMuted?: (member: RoomSessionMember) => unknown;
onMemberVideoMuted?: (member: RoomSessionMember) => unknown;
onMemberInputVolume?: (member: RoomSessionMember) => unknown;
onMemberOutputVolume?: (member: RoomSessionMember) => unknown;
onMemberInputSensitivity?: (member: RoomSessionMember) => unknown;
onMemberTalking?: (member: RoomSessionMember) => unknown;
onMemberTalkingStarted?: (member: RoomSessionMember) => unknown;
onMemberTalkingEnded?: (member: RoomSessionMember) => unknown;
onPlaybackStarted?: (playback: RoomSessionPlayback) => unknown;
onPlaybackUpdated?: (playback: RoomSessionPlayback) => unknown;
onPlaybackEnded?: (playback: RoomSessionPlayback) => unknown;
onRecordingStarted?: (recording: RoomSessionRecording) => unknown;
onRecordingUpdated?: (recording: RoomSessionRecording) => unknown;
onRecordingEnded?: (recording: RoomSessionRecording) => unknown;
onStreamStarted?: (stream: RoomSessionStream) => unknown;
onStreamEnded?: (stream: RoomSessionStream) => unknown;
}
type MemberUpdatedEventMapping = {
[K in MemberUpdatedEventNames]: K;
};
export type RealtimeRoomListenersEventsMapping = Record<OnRoomSubscribed, RoomSubscribed> & Record<OnRoomStarted, RoomStarted> & Record<OnRoomUpdated, RoomUpdated> & Record<OnRoomEnded, RoomEnded> & Record<OnRoomAudienceCount, RoomAudienceCount> & Record<OnLayoutChanged, VideoLayoutEventNames> & Record<OnMemberJoined, MemberJoined> & Record<OnMemberUpdated, MemberUpdated> & Record<OnMemberLeft, MemberLeft> & Record<OnMemberListUpdated, MemberListUpdated> & Record<OnMemberTalking, MemberTalking> & Record<OnMemberTalkingStarted, MemberTalkingStarted> & Record<OnMemberTalkingEnded, MemberTalkingEnded> & Record<OnMemberDeaf, MemberUpdatedEventMapping['member.updated.deaf']> & Record<OnMemberVisible, MemberUpdatedEventMapping['member.updated.visible']> & Record<OnMemberAudioMuted, MemberUpdatedEventMapping['member.updated.audioMuted']> & Record<OnMemberVideoMuted, MemberUpdatedEventMapping['member.updated.videoMuted']> & Record<OnMemberInputVolume, MemberUpdatedEventMapping['member.updated.inputVolume']> & Record<OnMemberOutputVolume, MemberUpdatedEventMapping['member.updated.outputVolume']> & Record<OnMemberInputSensitivity, MemberUpdatedEventMapping['member.updated.inputSensitivity']> & Record<OnPlaybackStarted, PlaybackStarted> & Record<OnPlaybackUpdated, PlaybackUpdated> & Record<OnPlaybackEnded, PlaybackEnded> & Record<OnRecordingStarted, RecordingStarted> & Record<OnRecordingUpdated, RecordingUpdated> & Record<OnRecordingEnded, RecordingEnded> & Record<OnStreamStarted, StreamStarted> & Record<OnStreamEnded, StreamEnded>;
/**
* RealTime Room CallPlayback API
*/
export type RealTimeRoomPlaybackEvents = Record<VideoPlaybackEventNames, (playback: RoomSessionPlayback) => void>;
export interface RealTimeRoomPlaybackListeners {
onStarted?: (playback: RoomSessionPlayback) => unknown;
onUpdated?: (playback: RoomSessionPlayback) => unknown;
onEnded?: (playback: RoomSessionPlayback) => unknown;
}
export type RealtimeRoomPlaybackListenersEventsMapping = Record<'onStarted', PlaybackStarted> & Record<'onUpdated', PlaybackUpdated> & Record<'onEnded', PlaybackEnded>;
/**
* RealTime Room CallRecording API
*/
export type RealTimeRoomRecordingEvents = Record<VideoRecordingEventNames, (recording: RoomSessionRecording) => void>;
export interface RealTimeRoomRecordingListeners {
onStarted?: (recording: RoomSessionRecording) => unknown;
onUpdated?: (recording: RoomSessionRecording) => unknown;
onEnded?: (recording: RoomSessionRecording) => unknown;
}
export type RealtimeRoomRecordingListenersEventsMapping = Record<'onStarted', RecordingStarted> & Record<'onUpdated', RecordingUpdated> & Record<'onEnded', RecordingEnded>;
/**
* RealTime Room CallStream API
*/
export type RealTimeRoomStreamEvents = Record<VideoStreamEventNames, (stream: RoomSessionStream) => void>;
export interface RealTimeRoomStreamListeners {
onStarted?: (stream: RoomSessionStream) => unknown;
onEnded?: (stream: RoomSessionStream) => unknown;
}
export type RealtimeRoomStreamListenersEventsMapping = Record<'onStarted', StreamStarted> & Record<'onEnded', StreamEnded>;
export {};
//# sourceMappingURL=video.d.ts.map