1339 lines
37 KiB
TypeScript
1339 lines
37 KiB
TypeScript
/**
|
|
* Jitsi Meet External API TypeScript Definitions
|
|
* Based on: https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-iframe
|
|
*/
|
|
|
|
declare module '@jitsi/iframe-api' {
|
|
export = JitsiMeetExternalAPI;
|
|
}
|
|
|
|
export declare class JitsiMeetExternalAPI {
|
|
constructor(domain: string, options?: JitsiMeetExternalAPIOptions);
|
|
|
|
// ============================================================================
|
|
// FUNCTIONS
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Captures a high quality picture using the device's camera. Mobile browsers only.
|
|
* @param cameraFacingMode - The facing mode: 'environment' or 'user'. Defaults to 'environment'.
|
|
* @param descriptionText - Custom description text for the consent dialog.
|
|
* @param titleText - Custom title for the consent dialog.
|
|
*/
|
|
captureCameraPicture(
|
|
cameraFacingMode?: CameraFacingMode,
|
|
descriptionText?: string,
|
|
titleText?: string
|
|
): Promise<CaptureCameraPictureResult>;
|
|
|
|
/**
|
|
* Captures a screenshot for the participant in the large video view (on stage).
|
|
*/
|
|
captureLargeVideoScreenshot(): Promise<CaptureScreenshotResult>;
|
|
|
|
/**
|
|
* Retrieves a list of available devices.
|
|
*/
|
|
getAvailableDevices(): Promise<AvailableDevices>;
|
|
|
|
/**
|
|
* Returns a promise which resolves with an array of currently sharing participants IDs.
|
|
*/
|
|
getContentSharingParticipants(): Promise<ContentSharingParticipants>;
|
|
|
|
/**
|
|
* Retrieves a list of currently selected devices.
|
|
*/
|
|
getCurrentDevices(): Promise<CurrentDevices>;
|
|
|
|
/**
|
|
* Retrieves an object containing information about the deployment.
|
|
*/
|
|
getDeploymentInfo(): Promise<DeploymentInfo>;
|
|
|
|
/**
|
|
* Retrieves an object containing information about livestreamUrl of the current live stream.
|
|
*/
|
|
getLivestreamUrl(): Promise<LivestreamData>;
|
|
|
|
/**
|
|
* @deprecated Use getRoomsInfo instead.
|
|
* Returns an array containing participant information.
|
|
*/
|
|
getParticipantsInfo(): ParticipantInfo[];
|
|
|
|
/**
|
|
* Returns an array of available rooms and details.
|
|
*/
|
|
getRoomsInfo(): Promise<RoomsInfo>;
|
|
|
|
/**
|
|
* Returns the meeting's unique session ID.
|
|
*/
|
|
getSessionId(): Promise<string>;
|
|
|
|
/**
|
|
* Returns the meeting's unique etherpad shared document URL.
|
|
*/
|
|
getSharedDocumentUrl(): Promise<string>;
|
|
|
|
/**
|
|
* Returns the current video quality setting.
|
|
*/
|
|
getVideoQuality(): number;
|
|
|
|
/**
|
|
* Returns array of commands supported by executeCommand.
|
|
*/
|
|
getSupportedCommands(): string[];
|
|
|
|
/**
|
|
* Returns array of events supported by addListener.
|
|
*/
|
|
getSupportedEvents(): string[];
|
|
|
|
/**
|
|
* Resolves to true if the device change is available and to false if not.
|
|
* @param deviceType - The device type: 'output', 'input', or undefined.
|
|
*/
|
|
isDeviceChangeAvailable(deviceType?: DeviceType): Promise<boolean>;
|
|
|
|
/**
|
|
* Resolves to true if the device list is available and to false if not.
|
|
*/
|
|
isDeviceListAvailable(): Promise<boolean>;
|
|
|
|
/**
|
|
* Resolves to true if multiple audio input is supported and to false if not.
|
|
*/
|
|
isMultipleAudioInputSupported(): Promise<boolean>;
|
|
|
|
/**
|
|
* Selects the participant ID to be the pinned participant.
|
|
* @param participantId - The participant ID to pin.
|
|
* @param videoType - Optional. 'camera' or 'desktop'. Default is 'camera'.
|
|
*/
|
|
pinParticipant(participantId: string | null, videoType?: VideoType): void;
|
|
|
|
/**
|
|
* Resizes the large video container per the provided dimensions.
|
|
*/
|
|
resizeLargeVideo(width: number, height: number): void;
|
|
|
|
/**
|
|
* Sets the audio input device to the one with the passed label or ID.
|
|
*/
|
|
setAudioInputDevice(deviceLabel: string, deviceId?: string): void;
|
|
|
|
/**
|
|
* Sets the audio output device to the one with the passed label or ID.
|
|
*/
|
|
setAudioOutputDevice(deviceLabel: string, deviceId?: string): void;
|
|
|
|
/**
|
|
* Displays the participant with the given participant ID on the large video.
|
|
* @param participantId - The participant ID to display, or undefined for auto-selection.
|
|
*/
|
|
setLargeVideoParticipant(participantId?: string): void;
|
|
|
|
/**
|
|
* Sets the video input device to the one with the passed label or ID.
|
|
*/
|
|
setVideoInputDevice(deviceLabel: string, deviceId?: string): void;
|
|
|
|
/**
|
|
* Set your virtual background with a base64 image.
|
|
* @param enabled - Enable or disable the virtual background.
|
|
* @param backgroundImage - Base64 image string, e.g., "data:image/png;base64,iVBOR...".
|
|
*/
|
|
setVirtualBackground(enabled: boolean, backgroundImage?: string): void;
|
|
|
|
/**
|
|
* Starts a file recording or streaming session.
|
|
*/
|
|
startRecording(options: RecordingOptions): void;
|
|
|
|
/**
|
|
* Stops an ongoing file recording, streaming session, or transcription.
|
|
* @param mode - Recording mode: 'local', 'stream', or 'file'.
|
|
* @param transcription - Whether to stop transcription.
|
|
*/
|
|
stopRecording(mode: RecordingMode, transcription?: boolean): void;
|
|
|
|
/**
|
|
* Returns the number of conference participants.
|
|
*/
|
|
getNumberOfParticipants(): number;
|
|
|
|
/**
|
|
* @deprecated Use getRoomsInfo instead.
|
|
* Returns a participant's avatar URL.
|
|
*/
|
|
getAvatarURL(participantId: string): string;
|
|
|
|
/**
|
|
* Returns a participant's display name.
|
|
*/
|
|
getDisplayName(participantId: string): string;
|
|
|
|
/**
|
|
* Returns a participant's email.
|
|
*/
|
|
getEmail(participantId: string): string;
|
|
|
|
/**
|
|
* Returns the IFrame HTML element which is used to load the Jitsi Meet conference.
|
|
*/
|
|
getIFrame(): HTMLIFrameElement;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current audio disabled state.
|
|
*/
|
|
isAudioDisabled(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current audio muted state.
|
|
*/
|
|
isAudioMuted(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current video muted state.
|
|
*/
|
|
isVideoMuted(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current audio availability state.
|
|
*/
|
|
isAudioAvailable(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current video availability state.
|
|
*/
|
|
isVideoAvailable(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns whether the current user is a visitor or not.
|
|
*/
|
|
isVisitor(): boolean;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current moderation state of the given media type.
|
|
* @param mediaType - 'audio' (default) or 'video'.
|
|
*/
|
|
isModerationOn(mediaType?: MediaType): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to a Boolean or null when there is no conference.
|
|
*/
|
|
isP2pActive(): Promise<boolean | null>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves to the current force mute state of the given participant.
|
|
* @param participantId - The participant ID.
|
|
* @param mediaType - 'audio' (default) or 'video'.
|
|
*/
|
|
isParticipantForceMuted(participantId: string, mediaType?: MediaType): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves with the current participants pane state.
|
|
*/
|
|
isParticipantsPaneOpen(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves with whether meeting was started in view only.
|
|
*/
|
|
isStartSilent(): Promise<boolean>;
|
|
|
|
/**
|
|
* Returns a Promise which resolves with the map of breakout rooms.
|
|
*/
|
|
listBreakoutRooms(): Promise<BreakoutRoomsMap>;
|
|
|
|
/**
|
|
* Invite the given array of participants to the meeting.
|
|
*/
|
|
invite(invitees: Invitee[]): Promise<void>;
|
|
|
|
/**
|
|
* Removes the embedded Jitsi Meet conference.
|
|
*/
|
|
dispose(): void;
|
|
|
|
// ============================================================================
|
|
// COMMANDS - executeCommand
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Execute a single command.
|
|
*/
|
|
executeCommand(command: 'displayName', name: string): void;
|
|
executeCommand(command: 'password', password: string): void;
|
|
executeCommand(command: 'toggleLobby', enabled: boolean): void;
|
|
executeCommand(command: 'sendTones', options: SendTonesOptions): void;
|
|
executeCommand(command: 'startShareVideo', url: string): void;
|
|
executeCommand(command: 'stopShareVideo'): void;
|
|
executeCommand(command: 'subject', subject: string): void;
|
|
executeCommand(command: 'localSubject', subject: string): void;
|
|
executeCommand(command: 'toggleAudio'): void;
|
|
executeCommand(command: 'toggleVideo'): void;
|
|
executeCommand(command: 'toggleFilmStrip'): void;
|
|
executeCommand(command: 'toggleChat'): void;
|
|
executeCommand(command: 'toggleRaiseHand'): void;
|
|
executeCommand(command: 'toggleShareScreen'): void;
|
|
executeCommand(command: 'setNoiseSuppressionEnabled', options: NoiseSuppressionOptions): void;
|
|
executeCommand(command: 'toggleSubtitles'): void;
|
|
executeCommand(command: 'toggleTileView'): void;
|
|
executeCommand(command: 'hangup'): void;
|
|
executeCommand(command: 'endConference'): void;
|
|
executeCommand(command: 'email', email: string): void;
|
|
executeCommand(
|
|
command: 'sendCameraFacingMode',
|
|
receiverParticipantId: string,
|
|
facingMode?: CameraFacingMode
|
|
): void;
|
|
executeCommand(
|
|
command: 'sendEndpointTextMessage',
|
|
receiverParticipantId: string,
|
|
text: string
|
|
): void;
|
|
executeCommand(
|
|
command: 'setLargeVideoParticipant',
|
|
participantId?: string,
|
|
videoType?: VideoType
|
|
): void;
|
|
executeCommand(command: 'setVideoQuality', height: number): void;
|
|
executeCommand(command: 'muteEveryone', mediaType?: MediaType): void;
|
|
executeCommand(
|
|
command: 'muteRemoteParticipant',
|
|
participantId: string,
|
|
mediaType?: MediaType
|
|
): void;
|
|
executeCommand(command: 'startRecording', options: RecordingOptions): void;
|
|
executeCommand(command: 'stopRecording', mode: RecordingMode, transcription?: boolean): void;
|
|
executeCommand(command: 'initiatePrivateChat', participantId: string): void;
|
|
executeCommand(command: 'cancelPrivateChat'): void;
|
|
executeCommand(command: 'kickParticipant', participantId: string): void;
|
|
executeCommand(command: 'grantModerator', participantId: string): void;
|
|
executeCommand(command: 'overwriteConfig', config: Record<string, unknown>): void;
|
|
executeCommand(
|
|
command: 'sendChatMessage',
|
|
message: string,
|
|
to?: string,
|
|
ignorePrivacy?: boolean
|
|
): void;
|
|
executeCommand(command: 'setFollowMe', value: boolean, recorderOnly?: boolean): void;
|
|
executeCommand(
|
|
command: 'setSubtitles',
|
|
enabled: boolean,
|
|
displaySubtitles?: boolean,
|
|
language?: string | null
|
|
): void;
|
|
executeCommand(command: 'setTileView', enabled: boolean): void;
|
|
executeCommand(command: 'answerKnockingParticipant', id: string, approved: boolean): void;
|
|
executeCommand(command: 'toggleCamera', facingMode?: CameraFacingMode): void;
|
|
executeCommand(command: 'toggleCameraMirror'): void;
|
|
executeCommand(command: 'toggleVirtualBackgroundDialog'): void;
|
|
executeCommand(command: 'pinParticipant', participantId?: string | null): void;
|
|
executeCommand(command: 'setParticipantVolume', participantId: string, volume: number): void;
|
|
executeCommand(command: 'toggleParticipantsPane', enabled: boolean): void;
|
|
executeCommand(command: 'toggleModeration', enable: boolean, mediaType?: MediaType): void;
|
|
executeCommand(command: 'askToUnmute', participantId: string): void;
|
|
executeCommand(command: 'approveVideo', participantId: string): void;
|
|
executeCommand(command: 'rejectParticipant', participantId: string, mediaType?: MediaType): void;
|
|
executeCommand(command: 'addBreakoutRoom', name?: string): void;
|
|
executeCommand(command: 'autoAssignToBreakoutRooms'): void;
|
|
executeCommand(command: 'closeBreakoutRoom', roomId: string): void;
|
|
executeCommand(command: 'joinBreakoutRoom', roomId?: string): void;
|
|
executeCommand(command: 'removeBreakoutRoom', breakoutRoomJid: string): void;
|
|
executeCommand(command: 'resizeFilmStrip', options: ResizeFilmStripOptions): void;
|
|
executeCommand(command: 'resizeLargeVideo', width: number, height: number): void;
|
|
executeCommand(command: 'sendParticipantToRoom', participantId: string, roomId: string): void;
|
|
executeCommand(command: 'overwriteNames', names: OverwriteNameEntry[]): void;
|
|
executeCommand(command: 'showNotification', options: ShowNotificationOptions): void;
|
|
executeCommand(command: 'hideNotification', uid: string): void;
|
|
executeCommand(command: 'toggleWhiteboard'): void;
|
|
executeCommand(command: 'setAssumedBandwidthBps', assumedBandwidthBps: number): void;
|
|
executeCommand(command: 'setBlurredBackground', blurType: BlurType): void;
|
|
executeCommand(command: 'setAudioOnly', enable: boolean): void;
|
|
executeCommand(command: 'setVirtualBackground', enabled: boolean, backgroundImage: string): void;
|
|
executeCommand(command: string, ...args: unknown[]): void;
|
|
|
|
/**
|
|
* Execute multiple commands.
|
|
*/
|
|
executeCommands(commands: ExecuteCommands): void;
|
|
|
|
// ============================================================================
|
|
// EVENTS - addListener / removeListener / on
|
|
// ============================================================================
|
|
|
|
/**
|
|
* Add an event listener.
|
|
*/
|
|
addListener<E extends keyof JitsiMeetEventMap>(
|
|
event: E,
|
|
listener: (data: JitsiMeetEventMap[E]) => void
|
|
): void;
|
|
addListener(event: string, listener: (data: unknown) => void): void;
|
|
|
|
/**
|
|
* Remove an event listener.
|
|
*/
|
|
removeListener<E extends keyof JitsiMeetEventMap>(
|
|
event: E,
|
|
listener: (data: JitsiMeetEventMap[E]) => void
|
|
): void;
|
|
removeListener(event: string, listener: (data: unknown) => void): void;
|
|
|
|
/**
|
|
* Alias for addListener.
|
|
*/
|
|
on<E extends keyof JitsiMeetEventMap>(
|
|
event: E,
|
|
listener: (data: JitsiMeetEventMap[E]) => void
|
|
): void;
|
|
on(event: string, listener: (data: unknown) => void): void;
|
|
|
|
/**
|
|
* Add an event listener that only triggers once.
|
|
*/
|
|
once<E extends keyof JitsiMeetEventMap>(
|
|
event: E,
|
|
listener: (data: JitsiMeetEventMap[E]) => void
|
|
): void;
|
|
once(event: string, listener: (data: unknown) => void): void;
|
|
}
|
|
|
|
// ============================================================================
|
|
// CONSTRUCTOR OPTIONS
|
|
// ============================================================================
|
|
|
|
export interface JitsiMeetExternalAPIOptions {
|
|
/** The name of the room to join. */
|
|
roomName?: string;
|
|
/** The created IFrame width. */
|
|
width?: number | string;
|
|
/** The created IFrame height. */
|
|
height?: number | string;
|
|
/** The HTML DOM Element where the IFrame is added as a child. */
|
|
parentNode?: HTMLElement;
|
|
/** JS object with overrides for options defined in config.js. */
|
|
configOverwrite?: ConfigOverwrite;
|
|
/** JS object with overrides for options defined in interface_config.js. */
|
|
interfaceConfigOverwrite?: InterfaceConfigOverwrite;
|
|
/** The JWT token. */
|
|
jwt?: string;
|
|
/** The IFrame onload event handler. */
|
|
onload?: () => void;
|
|
/** Object arrays that contain information about participants invited to a call. */
|
|
invitees?: Invitee[];
|
|
/** Information map about the devices used in a call. */
|
|
devices?: DevicesConfig;
|
|
/** JS object that contains information about the participant. */
|
|
userInfo?: UserInfo;
|
|
/** The default meeting language. */
|
|
lang?: string;
|
|
/** Object with rules to modify/remove existing ice server configuration. */
|
|
iceServers?: IceServersConfig;
|
|
}
|
|
|
|
interface ConfigOverwrite {
|
|
startWithAudioMuted?: boolean;
|
|
startWithVideoMuted?: boolean;
|
|
disableDeepLinking?: boolean;
|
|
prejoinPageEnabled?: boolean;
|
|
enableNoisyMicDetection?: boolean;
|
|
enableClosePage?: boolean;
|
|
disableInviteFunctions?: boolean;
|
|
disableModeratorIndicator?: boolean;
|
|
enableLobbyChat?: boolean;
|
|
hideLobbyButton?: boolean;
|
|
enableInsecureRoomNameWarning?: boolean;
|
|
toolbarButtons?: ToolbarButton[];
|
|
buttonsWithNotifyClick?: (ToolbarButton | ButtonWithNotifyClick)[];
|
|
mouseMoveCallbackInterval?: number;
|
|
faceLandmarks?: {
|
|
faceCenteringThreshold?: number;
|
|
};
|
|
apiLogLevels?: LogLevel[];
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
interface InterfaceConfigOverwrite {
|
|
DISABLE_DOMINANT_SPEAKER_INDICATOR?: boolean;
|
|
TILE_VIEW_MAX_COLUMNS?: number;
|
|
SHOW_JITSI_WATERMARK?: boolean;
|
|
SHOW_WATERMARK_FOR_GUESTS?: boolean;
|
|
SHOW_BRAND_WATERMARK?: boolean;
|
|
SHOW_POWERED_BY?: boolean;
|
|
SHOW_PROMOTIONAL_CLOSE_PAGE?: boolean;
|
|
TOOLBAR_BUTTONS?: ToolbarButton[];
|
|
SETTINGS_SECTIONS?: SettingsSection[];
|
|
VIDEO_LAYOUT_FIT?: 'both' | 'width' | 'height';
|
|
VERTICAL_FILMSTRIP?: boolean;
|
|
FILM_STRIP_MAX_HEIGHT?: number;
|
|
MOBILE_APP_PROMO?: boolean;
|
|
HIDE_INVITE_MORE_HEADER?: boolean;
|
|
DISABLE_JOIN_LEAVE_NOTIFICATIONS?: boolean;
|
|
DISABLE_VIDEO_BACKGROUND?: boolean;
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
interface DevicesConfig {
|
|
audioInput?: string;
|
|
audioOutput?: string;
|
|
videoInput?: string;
|
|
}
|
|
|
|
interface UserInfo {
|
|
email?: string;
|
|
displayName?: string;
|
|
}
|
|
|
|
interface IceServersConfig {
|
|
replace?: IceServerReplacement[];
|
|
}
|
|
|
|
interface IceServerReplacement {
|
|
targetType: 'turn' | 'turns' | 'stun';
|
|
urls: string | null;
|
|
}
|
|
|
|
// ============================================================================
|
|
// FUNCTION RETURN TYPES
|
|
// ============================================================================
|
|
|
|
interface CaptureCameraPictureResult {
|
|
dataURL?: string;
|
|
error?: string;
|
|
}
|
|
|
|
interface CaptureScreenshotResult {
|
|
dataURL: string;
|
|
}
|
|
|
|
interface DeviceInfo {
|
|
deviceId: string;
|
|
groupId: string;
|
|
kind: string;
|
|
label: string;
|
|
}
|
|
|
|
interface AvailableDevices {
|
|
audioInput: DeviceInfo[];
|
|
audioOutput: DeviceInfo[];
|
|
videoInput: DeviceInfo[];
|
|
}
|
|
|
|
interface CurrentDevices {
|
|
audioInput?: DeviceInfo;
|
|
audioOutput?: DeviceInfo;
|
|
videoInput?: DeviceInfo;
|
|
}
|
|
|
|
interface ContentSharingParticipants {
|
|
sharingParticipantIds: string[];
|
|
}
|
|
|
|
interface DeploymentInfo {
|
|
region?: string;
|
|
shard?: string;
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
interface LivestreamData {
|
|
livestreamUrl: string;
|
|
}
|
|
|
|
interface ParticipantInfo {
|
|
participantId: string;
|
|
displayName: string;
|
|
avatarURL?: string;
|
|
email?: string;
|
|
}
|
|
|
|
interface RoomParticipant {
|
|
id: string;
|
|
jid: string;
|
|
role: string;
|
|
displayName: string;
|
|
avatarUrl?: string;
|
|
}
|
|
|
|
interface RoomInfo {
|
|
isMainRoom: boolean;
|
|
id: string;
|
|
jid: string;
|
|
participants: RoomParticipant[];
|
|
}
|
|
|
|
interface RoomsInfo {
|
|
rooms: RoomInfo[];
|
|
}
|
|
|
|
interface BreakoutRoom {
|
|
id: string;
|
|
jid: string;
|
|
name: string;
|
|
isMainRoom?: boolean;
|
|
participants: Record<string, BreakoutRoomParticipant>;
|
|
}
|
|
|
|
interface BreakoutRoomParticipant {
|
|
displayName: string;
|
|
jid: string;
|
|
role: string;
|
|
}
|
|
|
|
type BreakoutRoomsMap = Record<string, BreakoutRoom>;
|
|
|
|
// ============================================================================
|
|
// COMMAND TYPES
|
|
// ============================================================================
|
|
|
|
interface SendTonesOptions {
|
|
/** The dial pad touch tones to play. For example, '12345#'. */
|
|
tones: string;
|
|
/** The number of milliseconds each tone should play. Default is 200. */
|
|
duration?: number;
|
|
/** The number of milliseconds between each tone. Default is 200. */
|
|
pause?: number;
|
|
}
|
|
|
|
interface NoiseSuppressionOptions {
|
|
/** Enable or disable noise suppression. */
|
|
enabled: boolean;
|
|
}
|
|
|
|
interface RecordingOptions {
|
|
/** Recording mode: 'local', 'file', or 'stream'. */
|
|
mode: RecordingMode;
|
|
/** Dropbox OAuth2 token. */
|
|
dropboxToken?: string;
|
|
/** Whether to only record the local streams. Only applies to 'local' mode. */
|
|
onlySelf?: boolean;
|
|
/** Whether the recording should be shared with the participants. */
|
|
shouldShare?: boolean;
|
|
/** The RTMP stream key. */
|
|
rtmpStreamKey?: string;
|
|
/** The RTMP broadcast ID. */
|
|
rtmpBroadcastID?: string;
|
|
/** The YouTube stream key. */
|
|
youtubeStreamKey?: string;
|
|
/** The YouTube broadcast ID. */
|
|
youtubeBroadcastID?: string;
|
|
/** Any extra metadata for file recording. */
|
|
extraMetadata?: Record<string, unknown>;
|
|
/** Whether a transcription should be started. */
|
|
transcription?: boolean;
|
|
}
|
|
|
|
interface ResizeFilmStripOptions {
|
|
/** The desired filmstrip width. */
|
|
width: number;
|
|
}
|
|
|
|
interface OverwriteNameEntry {
|
|
/** The ID of the participant. */
|
|
id: string;
|
|
/** The new name. */
|
|
name: string;
|
|
}
|
|
|
|
interface CustomNotificationAction {
|
|
/** The label for the action button. */
|
|
label: string;
|
|
/** The unique identifier for the action. */
|
|
uuid: string;
|
|
}
|
|
|
|
interface ShowNotificationOptions {
|
|
/** Title of the notification. */
|
|
title: string;
|
|
/** Content of the notification. */
|
|
description: string;
|
|
/** Custom actions to be displayed on the notification. */
|
|
customActions?: CustomNotificationAction[];
|
|
/** Unique identifier for the notification. */
|
|
uid?: string;
|
|
/** Notification type. */
|
|
type?: NotificationType;
|
|
/** Notification timeout. */
|
|
timeout?: NotificationTimeout;
|
|
}
|
|
|
|
interface ExecuteCommands {
|
|
displayName?: [string];
|
|
password?: [string];
|
|
toggleLobby?: [boolean];
|
|
sendTones?: [SendTonesOptions];
|
|
startShareVideo?: [string];
|
|
stopShareVideo?: [];
|
|
subject?: [string];
|
|
localSubject?: [string];
|
|
toggleAudio?: [];
|
|
toggleVideo?: [];
|
|
toggleFilmStrip?: [];
|
|
toggleChat?: [];
|
|
toggleRaiseHand?: [];
|
|
toggleShareScreen?: [];
|
|
setNoiseSuppressionEnabled?: [NoiseSuppressionOptions];
|
|
toggleSubtitles?: [];
|
|
toggleTileView?: [];
|
|
hangup?: [];
|
|
endConference?: [];
|
|
email?: [string];
|
|
sendCameraFacingMode?: [string, CameraFacingMode?];
|
|
sendEndpointTextMessage?: [string, string];
|
|
setLargeVideoParticipant?: [string?, VideoType?];
|
|
setVideoQuality?: [number];
|
|
muteEveryone?: [MediaType?];
|
|
muteRemoteParticipant?: [string, MediaType?];
|
|
startRecording?: [RecordingOptions];
|
|
stopRecording?: [RecordingMode, boolean?];
|
|
initiatePrivateChat?: [string];
|
|
cancelPrivateChat?: [];
|
|
kickParticipant?: [string];
|
|
grantModerator?: [string];
|
|
overwriteConfig?: [Record<string, unknown>];
|
|
sendChatMessage?: [string, string?, boolean?];
|
|
setFollowMe?: [boolean, boolean?];
|
|
setSubtitles?: [boolean, boolean?, string?];
|
|
setTileView?: [boolean];
|
|
answerKnockingParticipant?: [string, boolean];
|
|
toggleCamera?: [CameraFacingMode?];
|
|
toggleCameraMirror?: [];
|
|
toggleVirtualBackgroundDialog?: [];
|
|
pinParticipant?: [string?];
|
|
setParticipantVolume?: [string, number];
|
|
toggleParticipantsPane?: [boolean];
|
|
toggleModeration?: [boolean, MediaType?];
|
|
askToUnmute?: [string];
|
|
approveVideo?: [string];
|
|
rejectParticipant?: [string, MediaType?];
|
|
addBreakoutRoom?: [string?];
|
|
autoAssignToBreakoutRooms?: [];
|
|
closeBreakoutRoom?: [string];
|
|
joinBreakoutRoom?: [string?];
|
|
removeBreakoutRoom?: [string];
|
|
resizeFilmStrip?: [ResizeFilmStripOptions];
|
|
resizeLargeVideo?: [number, number];
|
|
sendParticipantToRoom?: [string, string];
|
|
overwriteNames?: [OverwriteNameEntry[]];
|
|
showNotification?: [ShowNotificationOptions];
|
|
hideNotification?: [string];
|
|
toggleWhiteboard?: [];
|
|
setAssumedBandwidthBps?: [number];
|
|
setBlurredBackground?: [BlurType];
|
|
setAudioOnly?: [boolean];
|
|
setVirtualBackground?: [boolean, string];
|
|
[key: string]: unknown[] | undefined;
|
|
}
|
|
|
|
// ============================================================================
|
|
// EVENT TYPES
|
|
// ============================================================================
|
|
|
|
interface JitsiMeetEventMap {
|
|
cameraError: CameraErrorEvent;
|
|
micError: MicErrorEvent;
|
|
avatarChanged: AvatarChangedEvent;
|
|
audioAvailabilityChanged: AudioAvailabilityChangedEvent;
|
|
audioMuteStatusChanged: AudioMuteStatusChangedEvent;
|
|
breakoutRoomsUpdated: BreakoutRoomsUpdatedEvent;
|
|
browserSupport: BrowserSupportEvent;
|
|
contentSharingParticipantsChanged: ContentSharingParticipantsChangedEvent;
|
|
customNotificationActionTriggered: CustomNotificationActionTriggeredEvent;
|
|
dataChannelOpened: DataChannelOpenedEvent;
|
|
endpointTextMessageReceived: EndpointTextMessageReceivedEvent;
|
|
nonParticipantMessageReceived: NonParticipantMessageReceivedEvent;
|
|
faceLandmarkDetected: FaceLandmarkDetectedEvent;
|
|
errorOccurred: ErrorOccurredEvent;
|
|
knockingParticipant: KnockingParticipantEvent;
|
|
largeVideoChanged: LargeVideoChangedEvent;
|
|
log: LogEvent;
|
|
screenSharingStatusChanged: ScreenSharingStatusChangedEvent;
|
|
dominantSpeakerChanged: DominantSpeakerChangedEvent;
|
|
raiseHandUpdated: RaiseHandUpdatedEvent;
|
|
tileViewChanged: TileViewChangedEvent;
|
|
chatUpdated: ChatUpdatedEvent;
|
|
incomingMessage: IncomingMessageEvent;
|
|
mouseEnter: MouseEventData;
|
|
mouseLeave: MouseEventData;
|
|
mouseMove: MouseEventData;
|
|
participantMenuButtonClick: ParticipantMenuButtonClickEvent;
|
|
toolbarButtonClicked: ToolbarButtonClickedEvent;
|
|
outgoingMessage: OutgoingMessageEvent;
|
|
displayNameChange: DisplayNameChangeEvent;
|
|
deviceListChanged: DeviceListChangedEvent;
|
|
emailChange: EmailChangeEvent;
|
|
feedbackSubmitted: FeedbackSubmittedEvent;
|
|
filmstripDisplayChanged: FilmstripDisplayChangedEvent;
|
|
toolbarVisibilityChanged: ToolbarVisibilityChangedEvent;
|
|
moderationStatusChanged: ModerationStatusChangedEvent;
|
|
moderationParticipantApproved: ModerationParticipantApprovedEvent;
|
|
moderationParticipantRejected: ModerationParticipantRejectedEvent;
|
|
notificationTriggered: NotificationTriggeredEvent;
|
|
participantJoined: ParticipantJoinedEvent;
|
|
participantKickedOut: ParticipantKickedOutEvent;
|
|
participantLeft: ParticipantLeftEvent;
|
|
participantRoleChanged: ParticipantRoleChangedEvent;
|
|
participantsPaneToggled: ParticipantsPaneToggledEvent;
|
|
passwordRequired: PasswordRequiredEvent;
|
|
videoConferenceJoined: VideoConferenceJoinedEvent;
|
|
videoConferenceLeft: VideoConferenceLeftEvent;
|
|
conferenceCreatedTimestamp: ConferenceCreatedTimestampEvent;
|
|
videoAvailabilityChanged: VideoAvailabilityChangedEvent;
|
|
videoMuteStatusChanged: VideoMuteStatusChangedEvent;
|
|
videoQualityChanged: VideoQualityChangedEvent;
|
|
readyToClose: ReadyToCloseEvent;
|
|
recordingLinkAvailable: RecordingLinkAvailableEvent;
|
|
recordingStatusChanged: RecordingStatusChangedEvent;
|
|
subjectChange: SubjectChangeEvent;
|
|
suspendDetected: SuspendDetectedEvent;
|
|
peerConnectionFailure: PeerConnectionFailureEvent;
|
|
transcribingStatusChanged: TranscribingStatusChangedEvent;
|
|
transcriptionChunkReceived: TranscriptionChunkReceivedEvent;
|
|
whiteboardStatusChanged: WhiteboardStatusChangedEvent;
|
|
p2pStatusChanged: P2pStatusChangedEvent;
|
|
audioOnlyChanged: AudioOnlyChangedEvent;
|
|
}
|
|
|
|
interface CameraErrorEvent {
|
|
/** A constant representing the overall type of the error. */
|
|
type: string;
|
|
/** Additional information about the error. */
|
|
message: string;
|
|
}
|
|
|
|
interface MicErrorEvent {
|
|
/** A constant representing the overall type of the error. */
|
|
type: string;
|
|
/** Additional information about the error. */
|
|
message: string;
|
|
}
|
|
|
|
interface AvatarChangedEvent {
|
|
/** The ID of the participant that changed their avatar. */
|
|
id: string;
|
|
/** The new avatar URL. */
|
|
avatarURL: string;
|
|
}
|
|
|
|
interface AudioAvailabilityChangedEvent {
|
|
/** New available status. */
|
|
available: boolean;
|
|
}
|
|
|
|
interface AudioMuteStatusChangedEvent {
|
|
/** New muted status. */
|
|
muted: boolean;
|
|
}
|
|
|
|
interface BreakoutRoomsUpdatedEvent {
|
|
[roomId: string]: {
|
|
id: string;
|
|
jid: string;
|
|
name: string;
|
|
isMainRoom?: true;
|
|
participants: {
|
|
[participantJid: string]: {
|
|
displayName: string;
|
|
jid: string;
|
|
role: string;
|
|
};
|
|
};
|
|
};
|
|
}
|
|
|
|
interface BrowserSupportEvent {
|
|
supported: boolean;
|
|
}
|
|
|
|
interface ContentSharingParticipantsChangedEvent {
|
|
data: string[];
|
|
}
|
|
|
|
interface CustomNotificationActionTriggeredEvent {
|
|
data: {
|
|
/** UUID of the triggered action. */
|
|
id: string;
|
|
};
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
interface DataChannelOpenedEvent {}
|
|
|
|
interface EndpointTextMessageReceivedEvent {
|
|
senderInfo: {
|
|
/** The JID of the sender. */
|
|
jid: string;
|
|
/** The participant ID of the sender. */
|
|
id: string;
|
|
};
|
|
eventData: {
|
|
/** The name of the datachannel event. */
|
|
name: string;
|
|
/** The received text from the sender. */
|
|
text: string;
|
|
};
|
|
}
|
|
|
|
interface NonParticipantMessageReceivedEvent {
|
|
/** The ID of the message, may be null. */
|
|
id: string | null;
|
|
/** The message received. */
|
|
message: string;
|
|
}
|
|
|
|
interface FaceLandmarkDetectedEvent {
|
|
faceBox?: {
|
|
/** Face bounding box distance as percentage from the left video edge. */
|
|
left: number;
|
|
/** Face bounding box distance as percentage from the right video edge. */
|
|
right: number;
|
|
/** Face bounding box width as percentage of the total video width. */
|
|
width: number;
|
|
};
|
|
/** Face expression detected. */
|
|
faceExpression: string;
|
|
}
|
|
|
|
interface ErrorOccurredEvent {
|
|
/** Additional error details. */
|
|
details?: Record<string, unknown>;
|
|
/** The error message. */
|
|
message?: string;
|
|
/** The coded name of the error. */
|
|
name: string;
|
|
/** Error type/source: 'CONFIG', 'CONNECTION', 'CONFERENCE'. */
|
|
type: ErrorType;
|
|
/** Whether this is a fatal error which triggered a reconnect overlay. */
|
|
isFatal: boolean;
|
|
}
|
|
|
|
interface KnockingParticipantEvent {
|
|
participant: {
|
|
/** The ID of the participant knocking. */
|
|
id: string;
|
|
/** The name of the participant knocking. */
|
|
name: string;
|
|
};
|
|
}
|
|
|
|
interface LargeVideoChangedEvent {
|
|
/** ID of the participant that is now on large video. */
|
|
id: string;
|
|
}
|
|
|
|
interface LogEvent {
|
|
/** A constant representing the log type. */
|
|
logLevel: LogLevel;
|
|
/** Additional log information. */
|
|
args: string;
|
|
}
|
|
|
|
interface ScreenSharingStatusChangedEvent {
|
|
/** Whether screen sharing is on. */
|
|
on: boolean;
|
|
details: {
|
|
/** Source type: 'window', 'screen', 'proxy', 'device', or undefined. */
|
|
sourceType?: ScreenShareSourceType;
|
|
};
|
|
}
|
|
|
|
interface DominantSpeakerChangedEvent {
|
|
/** Participant ID of the new dominant speaker. */
|
|
id: string;
|
|
}
|
|
|
|
interface RaiseHandUpdatedEvent {
|
|
/** Participant ID of the user who raises/lowers the hand. */
|
|
id: string;
|
|
/** 0 when hand is lowered, timestamp when raised. */
|
|
handRaised: number;
|
|
}
|
|
|
|
interface TileViewChangedEvent {
|
|
/** Whether tile view is displayed or not. */
|
|
enabled: boolean;
|
|
}
|
|
|
|
interface ChatUpdatedEvent {
|
|
/** Whether the chat panel is open or not. */
|
|
isOpen: boolean;
|
|
/** The unread messages counter. */
|
|
unreadCount: number;
|
|
}
|
|
|
|
interface IncomingMessageEvent {
|
|
/** The ID of the user that sent the message. */
|
|
from: string;
|
|
/** The nickname of the user that sent the message. */
|
|
nick: string;
|
|
/** Whether this is a private or group message. */
|
|
privateMessage: boolean;
|
|
/** The text of the message. */
|
|
message: string;
|
|
/** The message timestamp as string (ISO-8601). */
|
|
stamp: string;
|
|
}
|
|
|
|
interface MouseEventData {
|
|
event: {
|
|
clientX: number;
|
|
clientY: number;
|
|
movementX: number;
|
|
movementY: number;
|
|
offsetX: number;
|
|
offsetY: number;
|
|
pageX: number;
|
|
pageY: number;
|
|
x: number;
|
|
y: number;
|
|
screenX: number;
|
|
screenY: number;
|
|
};
|
|
}
|
|
|
|
interface ParticipantMenuButtonClickEvent {
|
|
/** The pressed button's key. */
|
|
key: string;
|
|
/** The ID of the participant for which the button was clicked. */
|
|
participantId: string;
|
|
/** Whether the execution of the button click was prevented. */
|
|
preventExecution: boolean;
|
|
}
|
|
|
|
interface ToolbarButtonClickedEvent {
|
|
/** The pressed button's key. */
|
|
key: string;
|
|
/** Whether the click routine execution was prevented. */
|
|
preventExecution: boolean;
|
|
}
|
|
|
|
interface OutgoingMessageEvent {
|
|
/** The text of the message. */
|
|
message: string;
|
|
/** Whether this is a private or group message. */
|
|
privateMessage: boolean;
|
|
}
|
|
|
|
interface DisplayNameChangeEvent {
|
|
/** The ID of the participant that changed their display name. */
|
|
id: string;
|
|
/** The new display name. */
|
|
displayname: string;
|
|
}
|
|
|
|
interface DeviceListChangedEvent {
|
|
/** The new list of available devices. */
|
|
devices: AvailableDevices;
|
|
}
|
|
|
|
interface EmailChangeEvent {
|
|
/** The ID of the participant that changed their email. */
|
|
id: string;
|
|
/** The new email. */
|
|
email: string;
|
|
}
|
|
|
|
interface FeedbackSubmittedEvent {
|
|
/** The error which occurred during submission, if any. */
|
|
error?: string;
|
|
}
|
|
|
|
interface FilmstripDisplayChangedEvent {
|
|
/** Whether the filmstrip is displayed or hidden. */
|
|
visible: boolean;
|
|
}
|
|
|
|
interface ToolbarVisibilityChangedEvent {
|
|
/** Whether the toolbar is currently visible. */
|
|
visible: boolean;
|
|
}
|
|
|
|
interface ModerationStatusChangedEvent {
|
|
/** The media type for which moderation changed. */
|
|
mediaType: MediaType;
|
|
/** Whether moderation is enabled. */
|
|
enabled: boolean;
|
|
}
|
|
|
|
interface ModerationParticipantApprovedEvent {
|
|
/** The ID of the participant that got approved. */
|
|
id: string;
|
|
/** The media type for which the participant was approved. */
|
|
mediaType: MediaType;
|
|
}
|
|
|
|
interface ModerationParticipantRejectedEvent {
|
|
/** The ID of the participant that got rejected. */
|
|
id: string;
|
|
/** The media type for which the participant was rejected. */
|
|
mediaType: MediaType;
|
|
}
|
|
|
|
interface NotificationTriggeredEvent {
|
|
/** The notification title. */
|
|
title: string;
|
|
/** The notification description. */
|
|
description: string;
|
|
}
|
|
|
|
interface ParticipantJoinedEvent {
|
|
/** The ID of the participant. */
|
|
id: string;
|
|
/** The display name of the participant. */
|
|
displayName: string;
|
|
}
|
|
|
|
interface ParticipantKickedOutEvent {
|
|
kicked: {
|
|
/** The ID of the participant removed from the room. */
|
|
id: string;
|
|
/** Whether the participant is the local participant. */
|
|
local: boolean;
|
|
};
|
|
kicker: {
|
|
/** The ID of the participant who kicked out the other participant. */
|
|
id: string;
|
|
};
|
|
}
|
|
|
|
interface ParticipantLeftEvent {
|
|
/** The ID of the participant. */
|
|
id: string;
|
|
}
|
|
|
|
interface ParticipantRoleChangedEvent {
|
|
/** The ID of the participant. */
|
|
id: string;
|
|
/** The new role of the participant. */
|
|
role: ParticipantRole;
|
|
}
|
|
|
|
interface ParticipantsPaneToggledEvent {
|
|
/** Whether the pane is open or not. */
|
|
open: boolean;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
interface PasswordRequiredEvent {}
|
|
|
|
interface VideoConferenceJoinedEvent {
|
|
/** The room name of the conference. */
|
|
roomName: string;
|
|
/** The ID of the local participant. */
|
|
id: string;
|
|
/** The display name of the local participant. */
|
|
displayName: string;
|
|
/** The avatar URL of the local participant. */
|
|
avatarURL: string;
|
|
/** Whether the current room is a breakout room. */
|
|
breakoutRoom: boolean;
|
|
/** Whether the current user is a visitor. */
|
|
visitor: boolean;
|
|
}
|
|
|
|
interface VideoConferenceLeftEvent {
|
|
/** The room name of the conference. */
|
|
roomName: string;
|
|
}
|
|
|
|
interface ConferenceCreatedTimestampEvent {
|
|
/** Time the conference started. */
|
|
timestamp: number;
|
|
}
|
|
|
|
interface VideoAvailabilityChangedEvent {
|
|
/** New available status. */
|
|
available: boolean;
|
|
}
|
|
|
|
interface VideoMuteStatusChangedEvent {
|
|
/** New muted status. */
|
|
muted: boolean;
|
|
}
|
|
|
|
interface VideoQualityChangedEvent {
|
|
/** The height of the resolution related to the new video quality setting. */
|
|
videoQuality: number;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
interface ReadyToCloseEvent {}
|
|
|
|
interface RecordingLinkAvailableEvent {
|
|
/** The recording link. */
|
|
link: string;
|
|
/** The time to live of the recording link. */
|
|
ttl: number;
|
|
}
|
|
|
|
interface RecordingStatusChangedEvent {
|
|
/** New recording status. */
|
|
on: boolean;
|
|
/** Recording mode: 'local', 'stream', or 'file'. */
|
|
mode: RecordingMode;
|
|
/** Error type if recording fails. */
|
|
error?: string;
|
|
/** Whether a transcription is active. */
|
|
transcription: boolean;
|
|
}
|
|
|
|
interface SubjectChangeEvent {
|
|
/** The new subject. */
|
|
subject: string;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
interface SuspendDetectedEvent {}
|
|
|
|
interface PeerConnectionFailureEvent {
|
|
/** Type of PC, Peer2Peer or JVB connection. */
|
|
isP2P: boolean;
|
|
/** Was this connection previously connected. */
|
|
wasConnected: boolean;
|
|
}
|
|
|
|
interface TranscribingStatusChangedEvent {
|
|
on: boolean;
|
|
}
|
|
|
|
interface TranscriptionChunkReceivedEvent {
|
|
/** Transcription language. */
|
|
language: string;
|
|
/** ID for this chunk. */
|
|
messageID: string;
|
|
/** Participant info. */
|
|
participant: {
|
|
avatarUrl: string;
|
|
id: string;
|
|
name: string;
|
|
};
|
|
/** Final transcription text. */
|
|
final?: string;
|
|
/** High accuracy transcription text. */
|
|
stable?: string;
|
|
/** Low accuracy transcription text. */
|
|
unstable?: string;
|
|
}
|
|
|
|
interface WhiteboardStatusChangedEvent {
|
|
/** New whiteboard status. */
|
|
status: string;
|
|
}
|
|
|
|
interface P2pStatusChangedEvent {
|
|
/** Whether the new connection type is P2P. */
|
|
isP2p: boolean | null;
|
|
}
|
|
|
|
interface AudioOnlyChangedEvent {
|
|
/** Whether audio only is enabled or disabled. */
|
|
audioOnlyChanged: boolean;
|
|
}
|
|
|
|
// ============================================================================
|
|
// INVITEE TYPES
|
|
// ============================================================================
|
|
|
|
interface PhoneInvitee {
|
|
type: 'phone';
|
|
/** The phone number in E.164 format (e.g., +31201234567). */
|
|
number: string;
|
|
}
|
|
|
|
interface SipInvitee {
|
|
type: 'sip';
|
|
/** The SIP address. */
|
|
address: string;
|
|
}
|
|
|
|
type Invitee = PhoneInvitee | SipInvitee | Record<string, unknown>;
|
|
|
|
// ============================================================================
|
|
// UTILITY TYPES
|
|
// ============================================================================
|
|
|
|
type CameraFacingMode = 'user' | 'environment';
|
|
type DeviceType = 'input' | 'output';
|
|
type VideoType = 'camera' | 'desktop';
|
|
type MediaType = 'audio' | 'video';
|
|
type RecordingMode = 'local' | 'file' | 'stream';
|
|
type NotificationType = 'normal' | 'success' | 'warning' | 'error';
|
|
type NotificationTimeout = 'short' | 'medium' | 'long' | 'sticky';
|
|
type BlurType = 'slight-blur' | 'blur' | 'none';
|
|
type ErrorType = 'CONFIG' | 'CONNECTION' | 'CONFERENCE';
|
|
type LogLevel = 'info' | 'error' | 'debug' | 'warn';
|
|
type ScreenShareSourceType = 'window' | 'screen' | 'proxy' | 'device';
|
|
type ParticipantRole = 'none' | 'moderator' | 'participant';
|
|
|
|
type ToolbarButton =
|
|
| 'camera'
|
|
| 'chat'
|
|
| 'closedcaptions'
|
|
| 'desktop'
|
|
| 'dock-iframe'
|
|
| 'download'
|
|
| 'embedmeeting'
|
|
| 'etherpad'
|
|
| 'feedback'
|
|
| 'filmstrip'
|
|
| 'fullscreen'
|
|
| 'hangup'
|
|
| 'help'
|
|
| 'highlight'
|
|
| 'invite'
|
|
| 'linktosalesforce'
|
|
| 'livestreaming'
|
|
| 'microphone'
|
|
| 'noisesuppression'
|
|
| 'participants-pane'
|
|
| 'profile'
|
|
| 'raisehand'
|
|
| 'recording'
|
|
| 'security'
|
|
| 'select-background'
|
|
| 'settings'
|
|
| 'shareaudio'
|
|
| 'sharedvideo'
|
|
| 'shortcuts'
|
|
| 'stats'
|
|
| 'tileview'
|
|
| 'toggle-camera'
|
|
| 'undock-iframe'
|
|
| 'videoquality'
|
|
| 'whiteboard'
|
|
| '__end';
|
|
|
|
interface ButtonWithNotifyClick {
|
|
key: ToolbarButton;
|
|
preventExecution: boolean;
|
|
}
|
|
|
|
type SettingsSection =
|
|
| 'devices'
|
|
| 'language'
|
|
| 'moderator'
|
|
| 'profile'
|
|
| 'calendar'
|
|
| 'sounds'
|
|
| 'more';
|
|
|
|
// ============================================================================
|
|
// GLOBAL DECLARATION
|
|
// ============================================================================
|
|
|
|
declare global {
|
|
interface Window {
|
|
JitsiMeetExternalAPI: typeof JitsiMeetExternalAPI;
|
|
}
|
|
|
|
const JitsiMeetExternalAPI: typeof import('@jitsi/iframe-api');
|
|
}
|
|
|
|
// export = JitsiMeetExternalAPI;
|
|
export as namespace JitsiMeetExternalAPI;
|