From cb78623ff301fd65e9e8c64a240e092b959b103a Mon Sep 17 00:00:00 2001 From: Suraj Kiran S Date: Wed, 16 Jun 2021 21:30:11 +0530 Subject: [PATCH 1/2] missing config type added --- src/types.tsx | 2051 +++++++++++++++++++++++++------------------------ 1 file changed, 1035 insertions(+), 1016 deletions(-) diff --git a/src/types.tsx b/src/types.tsx index 585344e..fdf51cd 100644 --- a/src/types.tsx +++ b/src/types.tsx @@ -1,733 +1,713 @@ -import { ReactNode } from 'react'; +import { ReactNode } from "react"; declare global { - - interface Window { - JitsiMeetExternalAPI: any; - } - + interface Window { + JitsiMeetExternalAPI: any; + } } export interface JitsiMeetAPI { - // TODO, add definitions + // TODO, add definitions + captureLargeVideoScreenshot: () => Promise; } export interface JitsiMeetAPIOptions { + roomName?: string; - roomName?: string; - - width?: number; + width?: number; - height?: number; + height?: number; - parentNode?: ReactNode; + parentNode?: ReactNode; - configOverwrite?: ConfigOptions; + configOverwrite?: ConfigOptions; - interfaceConfigOverwrite?: InterfaceConfigOptions; + interfaceConfigOverwrite?: InterfaceConfigOptions; - noSSL?: boolean; + noSSL?: boolean; - jwt?: string; + jwt?: string; - onLoad?: () => void; + onLoad?: () => void; - invites?: {}; + invites?: {}; - devices?: { - audioInput?: string; - audioOutput?: string; - videoInput?: string; - }; + devices?: { + audioInput?: string; + audioOutput?: string; + videoInput?: string; + }; - userInfo?: { - email?: string; - }; + userInfo?: { + email?: string; + }; } - export interface ConfigOptions { + // ---- Connection - // ---- Connection - - hosts?: { - - /** - * XMPP domain. - */ - domain?: string; - - /** - * When using authentication, domain for guest users. - */ - anonymousdomain?: string; - - /** - * Domain for authenticated users. Defaults to . - */ - authdomain?: string; - - /** - * Jirecon recording component domain. - */ - jirecon?: string; - - /** - * Call control component (Jigasi). - */ - call_control?: string; - - /** - * Focus component domain. Defaults to focus.. - */ - focus?: string; - - /** - * XMPP MUC domain. FIXME: use XEP-0030 to discover it. - */ - muc?: string; - - }; - - /** - * BOSH URL. FIXME: use XEP-0156 to discover it. - */ - bosh?: string; - - /** - * Websocket URL - */ - websocket?: string; - + hosts?: { /** - * The name of client node advertised in XEP-0115 'c' stanza - */ - clientNode?: string; - - /** - * The real JID of focus participant - can be overridden here - */ - focusUserJid?: string; - - - // ---- Testing / experimental features. - - testing?: { - - /** - * Enables experimental simulcast support on Firefox. - */ - enableFirefoxSimulcast?: boolean; - - /** - * P2P test mode disables automatic switching to P2P when there are 2 participants in the conference. - */ - p2pTestMode?: boolean; - - /** - * Enables the test specific features consumed by jitsi-meet-torture - */ - testMode?: boolean; - - /** - * Disables the auto-play behavior of *all* newly created video element. - * This is useful when the client runs on a host with limited resources. - */ - noAutoPlayVideo?: boolean; - - }; - - /** - * Disables ICE/UDP by filtering out local and remote UDP candidates in signalling. - */ - webrtcIceUdpDisable?: boolean; - - /** - * Disables ICE/TCP by filtering out local and remote TCP candidates in signalling. - */ - webrtcIceTcpDisable?: boolean; - - - // ---- Media - - // -- Audio - - /** - * Disable measuring of audio levels. - */ - disableAudioLevels?: boolean; - - audioLevelsInterval?: number; - - /** - * Enabling this will run the lib-jitsi-meet no audio detection module which - * will notify the user if the current selected microphone has no audio - * input and will suggest another valid device if one is present. - */ - enableNoAudioDetection?: boolean; - - /** - * Enabling this will run the lib-jitsi-meet noise detection module which will - * notify the user if there is noise, other than voice, coming from the current - * selected microphone. The purpose it to let the user know that the input could - * be potentially unpleasant for other meeting participants. + * XMPP domain. */ - enableNoisyMicDetection?: boolean; - - /** - * Start the conference in audio only mode (no video is being received nor sent). - */ - startAudioOnly?: boolean; - - /** - * Every participant after the Nth will start audio muted. - */ - startAudioMuted?: number; + domain?: string; - /** - * Start calls with audio muted.Unlike the option above, this one is only applied locally. - * FIXME: having these 2 options is confusing. + /** + * When using authentication, domain for guest users. */ - startWithAudioMuted?: boolean; + anonymousdomain?: string; - /** - * Enabling it (with #params) will disable local audio output of remote - * participants and to enable it back a reload is needed. + /** + * Domain for authenticated users. Defaults to . */ - startSilent?: boolean; - - // -- Video + authdomain?: string; - /** - * Sets the preferred resolution (height) for local video. Defaults to 720. - */ - resolution?: number; - - /** - * w3c spec-compliant video constraints to use for video capture. Currently - * used by browsers that return true from lib-jitsi-meet's - * util#browser#usesNewGumFlow. The constraints are independent from - * this config's resolution value. Defaults to requesting an ideal - * resolution of 720p. + /** + * Jirecon recording component domain. */ - constraints?: { - video?: { - height?: { - ideal?: number; - max?: number; - min?: number; - }; - }; - }; + jirecon?: string; /** - * Enable / disable simulcast support. + * Call control component (Jigasi). */ - disableSimulcast?: boolean; + call_control?: string; - /** - * Enable / disable layer suspension. - * If enabled, endpoints whose HD layers are not in use will be suspended (no longer sent) until they - * are requested again. + /** + * Focus component domain. Defaults to focus.. */ - enableLayerSuspension?: boolean; + focus?: string; /** - * Every participant after the Nth will start video muted. + * XMPP MUC domain. FIXME: use XEP-0030 to discover it. */ - startVideoMuted?: number; + muc?: string; - /** - * Start calls with video muted. - * Unlike the option above, this one is only applied locally. - * FIXME: having these 2 options is confusing. + /** + * Show prejoin screen */ - startWithVideoMuted?: boolean; + prejoinPageEnabled?: string; + }; - /** - * If set to true, prefer to use the H.264 video codec (if supported). - * Note that it's not recommended to do this because simulcast is not - * supported when using H.264. For 1-to-1 calls this setting is enabled by - * default and can be toggled in the p2p section. - */ - preferH264?: boolean; + /** + * BOSH URL. FIXME: use XEP-0156 to discover it. + */ + bosh?: string; - /** - * If set to true, disable H.264 video codec by stripping it out of the SDP. - */ - disableH264?: boolean; + /** + * Websocket URL + */ + websocket?: string; - // ---- Desktop sharing + /** + * The name of client node advertised in XEP-0115 'c' stanza + */ + clientNode?: string; - /** - * The ID of the jidesha extension for Chrome. - */ - desktopSharingChromeExtId?: string; + /** + * The real JID of focus participant - can be overridden here + */ + focusUserJid?: string; - /** - * Whether desktop sharing should be disabled on Chrome. - */ - desktopSharingChromeDisabled?: boolean; + // ---- Testing / experimental features. - /** - * The media sources to use when using screen sharing with the Chrome - * extension. - * @example ['screen', 'window', 'tab'] + testing?: { + /** + * Enables experimental simulcast support on Firefox. */ - desktopSharingChromeSources?: ('screen' | 'window' | 'tab')[]; + enableFirefoxSimulcast?: boolean; - /** - * Required version of Chrome extension - * @example '0.1' + /** + * P2P test mode disables automatic switching to P2P when there are 2 participants in the conference. */ - desktopSharingChromeMinExtVersion?: string; + p2pTestMode?: boolean; - /** - * Whether desktop sharing should be disabled on Firefox. + /** + * Enables the test specific features consumed by jitsi-meet-torture */ - desktopSharingFirefoxDisabled?: boolean; + testMode?: boolean; - /** - * Optional desktop sharing frame rate options. Default value: min:5, max:5. - */ - desktopSharingFrameRate?: { - min?: number; + /** + * Disables the auto-play behavior of *all* newly created video element. + * This is useful when the client runs on a host with limited resources. + */ + noAutoPlayVideo?: boolean; + }; + + /** + * Disables ICE/UDP by filtering out local and remote UDP candidates in signalling. + */ + webrtcIceUdpDisable?: boolean; + + /** + * Disables ICE/TCP by filtering out local and remote TCP candidates in signalling. + */ + webrtcIceTcpDisable?: boolean; + + // ---- Media + + // -- Audio + + /** + * Disable measuring of audio levels. + */ + disableAudioLevels?: boolean; + + audioLevelsInterval?: number; + + /** + * Enabling this will run the lib-jitsi-meet no audio detection module which + * will notify the user if the current selected microphone has no audio + * input and will suggest another valid device if one is present. + */ + enableNoAudioDetection?: boolean; + + /** + * Enabling this will run the lib-jitsi-meet noise detection module which will + * notify the user if there is noise, other than voice, coming from the current + * selected microphone. The purpose it to let the user know that the input could + * be potentially unpleasant for other meeting participants. + */ + enableNoisyMicDetection?: boolean; + + /** + * Start the conference in audio only mode (no video is being received nor sent). + */ + startAudioOnly?: boolean; + + /** + * Every participant after the Nth will start audio muted. + */ + startAudioMuted?: number; + + /** + * Start calls with audio muted.Unlike the option above, this one is only applied locally. + * FIXME: having these 2 options is confusing. + */ + startWithAudioMuted?: boolean; + + /** + * Enabling it (with #params) will disable local audio output of remote + * participants and to enable it back a reload is needed. + */ + startSilent?: boolean; + + // -- Video + + /** + * Sets the preferred resolution (height) for local video. Defaults to 720. + */ + resolution?: number; + + /** + * w3c spec-compliant video constraints to use for video capture. Currently + * used by browsers that return true from lib-jitsi-meet's + * util#browser#usesNewGumFlow. The constraints are independent from + * this config's resolution value. Defaults to requesting an ideal + * resolution of 720p. + */ + constraints?: { + video?: { + height?: { + ideal?: number; max?: number; + min?: number; + }; }; - - /** - * Try to start calls with screen-sharing instead of camera video. - */ - startScreenSharing?: boolean; - - // ---- Recording - - /** - * Whether to enable file recording or not. - */ - fileRecordingsEnabled?: boolean; - - /** - * Enable the dropbox integration. - */ - dropbox?: { - - /** - * Specify your app key here. - */ - appKey?: string; - - /** - * A URL to redirect the user to, after authenticating by default uses: - * 'https://jitsi-meet.example.com/static/oauth.html' - */ - redirectURI?: string; - - }; - + }; + + /** + * Enable / disable simulcast support. + */ + disableSimulcast?: boolean; + + /** + * Enable / disable layer suspension. + * If enabled, endpoints whose HD layers are not in use will be suspended (no longer sent) until they + * are requested again. + */ + enableLayerSuspension?: boolean; + + /** + * Every participant after the Nth will start video muted. + */ + startVideoMuted?: number; + + /** + * Start calls with video muted. + * Unlike the option above, this one is only applied locally. + * FIXME: having these 2 options is confusing. + */ + startWithVideoMuted?: boolean; + + /** + * If set to true, prefer to use the H.264 video codec (if supported). + * Note that it's not recommended to do this because simulcast is not + * supported when using H.264. For 1-to-1 calls this setting is enabled by + * default and can be toggled in the p2p section. + */ + preferH264?: boolean; + + /** + * If set to true, disable H.264 video codec by stripping it out of the SDP. + */ + disableH264?: boolean; + + // ---- Desktop sharing + + /** + * The ID of the jidesha extension for Chrome. + */ + desktopSharingChromeExtId?: string; + + /** + * Whether desktop sharing should be disabled on Chrome. + */ + desktopSharingChromeDisabled?: boolean; + + /** + * The media sources to use when using screen sharing with the Chrome + * extension. + * @example ['screen', 'window', 'tab'] + */ + desktopSharingChromeSources?: ("screen" | "window" | "tab")[]; + + /** + * Required version of Chrome extension + * @example '0.1' + */ + desktopSharingChromeMinExtVersion?: string; + + /** + * Whether desktop sharing should be disabled on Firefox. + */ + desktopSharingFirefoxDisabled?: boolean; + + /** + * Optional desktop sharing frame rate options. Default value: min:5, max:5. + */ + desktopSharingFrameRate?: { + min?: number; + max?: number; + }; + + /** + * Try to start calls with screen-sharing instead of camera video. + */ + startScreenSharing?: boolean; + + // ---- Recording + + /** + * Whether to enable file recording or not. + */ + fileRecordingsEnabled?: boolean; + + /** + * Enable the dropbox integration. + */ + dropbox?: { /** - * When integrations like dropbox are enabled only that will be shown, - * by enabling fileRecordingsServiceEnabled, we show both the integrations - * and the generic recording service (its configuration and storage type - * depends on jibri configuration) - */ - fileRecordingsServiceEnabled?: boolean; - - /** - * Whether to show the possibility to share file recording with other people - * (e.g. meeting participants), based on the actual implementation - * on the backend. + * Specify your app key here. */ - fileRecordingsServiceSharingEnabled?: boolean; + appKey?: string; /** - * Whether to enable live streaming or not. - */ - liveStreamingEnabled?: boolean; - - /** - * Transcription (in interface_config, subtitles and buttons can be configured) - */ - transcribingEnabled?: boolean; - - /** - * Enables automatic turning on captions when recording is started - */ - autoCaptionOnRecord?: boolean; - - // ---- Misc - - /** - * Default value for the channel "last N" attribute. -1 for unlimited. - */ - channelLastN?: number; - - /** - * Disables or enables RTX (RFC 4588) (defaults to false). - */ - disableRtx?: boolean; - + * A URL to redirect the user to, after authenticating by default uses: + * 'https://jitsi-meet.example.com/static/oauth.html' + */ + redirectURI?: string; + }; + + /** + * When integrations like dropbox are enabled only that will be shown, + * by enabling fileRecordingsServiceEnabled, we show both the integrations + * and the generic recording service (its configuration and storage type + * depends on jibri configuration) + */ + fileRecordingsServiceEnabled?: boolean; + + /** + * Whether to show the possibility to share file recording with other people + * (e.g. meeting participants), based on the actual implementation + * on the backend. + */ + fileRecordingsServiceSharingEnabled?: boolean; + + /** + * Whether to enable live streaming or not. + */ + liveStreamingEnabled?: boolean; + + /** + * Transcription (in interface_config, subtitles and buttons can be configured) + */ + transcribingEnabled?: boolean; + + /** + * Enables automatic turning on captions when recording is started + */ + autoCaptionOnRecord?: boolean; + + // ---- Misc + + /** + * Default value for the channel "last N" attribute. -1 for unlimited. + */ + channelLastN?: number; + + /** + * Disables or enables RTX (RFC 4588) (defaults to false). + */ + disableRtx?: boolean; + + /** + * Disables or enables TCC (the default is in Jicofo and set to true) + * (draft-holmer-rmcat-transport-wide-cc-extensions-01). + * This setting affects congestion control, it practically enables send-side bandwidth estimations. + */ + enableTcc?: boolean; + + /** + * Disables or enables REMB (the default is in Jicofo and set to false) + * (draft-alvestrand-rmcat-remb-03). This setting affects congestion + * control, it practically enables recv-side bandwidth estimations. When + * both TCC and REMB are enabled, TCC takes precedence. When both are + * disabled, then bandwidth estimations are disabled. + */ + enableRemb?: boolean; + + /** + * Defines the minimum number of participants to start a call (the default + * is set in Jicofo and set to 2). + */ + minParticipants?: number; + + /** + * Use XEP-0215 to fetch STUN and TURN servers. + */ + useStunTurn?: boolean; + + /** + * Enable IPv6 support. + */ + useIPv6?: boolean; + + /** + * Enables / disables a data communication channel with the Videobridge. + * Values can be 'datachannel', 'websocket', true (treat it as + * 'datachannel'), undefined (treat it as 'datachannel') and false (don't + * open any channel). + */ + openBridgeChannel?: boolean; + + // ---- UI + + /** + * Use display name as XMPP nickname. + */ + useNicks?: boolean; + + /** + * Require users to always specify a display name. + */ + requireDisplayName?: boolean; + + /** + * Whether to use a welcome page or not. In case it's false a random room + * will be joined when no room is specified. + */ + enableWelcomePage?: boolean; + + /** + * Enabling the close page will ignore the welcome page redirection when + * a call is hangup. + */ + enableClosePage?: boolean; + + /** + * Disable hiding of remote thumbnails when in a 1-on-1 conference call. + */ + disable1On1Mode?: boolean; + + /** + * Default language for the user interface. + */ + defaultLanguage?: string; + + /** + * If true all users without a token will be considered guests and all users + * with token will be considered non-guests. Only guests will be allowed to + * edit their profile. + */ + enableUserRolesBasedOnToken?: boolean; + + /** + * Whether or not some features are checked based on token. + */ + enableFeaturesBasedOnToken?: boolean; + + /** + * Enable lock room for all moderators, even when userRolesBasedOnToken is enabled and participants are guests. + */ + lockRoomGuestEnabled?: boolean; + + /** + * When enabled the password used for locking a room is restricted to up to the number of digits specified + */ + roomPasswordNumberOfDigits?: number; + + /** + * Message to show the users. Example: 'The service will be down for + * maintenance at 01:00 AM GMT, + */ + noticeMessage?: string; + + /** + * Enables calendar integration, depends on googleApiApplicationClientID + * and microsoftApiApplicationClientID + */ + enableCalendarIntegration?: boolean; + + // ---- Stats + + /** + * Whether to enable stats collection or not in the TraceablePeerConnection. + * This can be useful for debugging purposes (post-processing/analysis of + * the webrtc stats) as it is done in the jitsi-meet-torture bandwidth + * estimation tests. + */ + gatherStats?: boolean; + + /** + * The interval at which PeerConnection.getStats() is called. + * Defaults to 10000 + */ + pcStatsInterval?: string; + + /** + * To enable sending statistics to callstats.io you must provide the + * Application ID and Secret. + */ + callStatsID?: string; + callStatsSecret?: string; + + /** + * enables sending participants display name to callstats + */ + enableDisplayNameInStats?: boolean; + + /** + * enables sending participants email if available to callstats and other analytics + */ + enableEmailInStats?: boolean; + + // ---- Privacy + + /** + * If third party requests are disabled, no other server will be contacted. + * This means avatars will be locally generated and callstats integration + * will not function. + */ + disableThirdPartyRequests?: boolean; + + /** + * Peer-To-Peer mode: used (if enabled) when there are just 2 participants. + */ + p2p?: { /** - * Disables or enables TCC (the default is in Jicofo and set to true) - * (draft-holmer-rmcat-transport-wide-cc-extensions-01). - * This setting affects congestion control, it practically enables send-side bandwidth estimations. + * Enables peer to peer mode. When enabled the system will try to + * establish a direct connection when there are exactly 2 participants + * in the room. If that succeeds the conference will stop sending data + * through the JVB and use the peer to peer connection instead. When a + * 3rd participant joins the conference will be moved back to the JVB + * connection. */ - enableTcc?: boolean; - - /** - * Disables or enables REMB (the default is in Jicofo and set to false) - * (draft-alvestrand-rmcat-remb-03). This setting affects congestion - * control, it practically enables recv-side bandwidth estimations. When - * both TCC and REMB are enabled, TCC takes precedence. When both are - * disabled, then bandwidth estimations are disabled. - */ - enableRemb?: boolean; - - /** - * Defines the minimum number of participants to start a call (the default - * is set in Jicofo and set to 2). - */ - minParticipants?: number; + enabled?: boolean; /** * Use XEP-0215 to fetch STUN and TURN servers. */ useStunTurn?: boolean; - /** - * Enable IPv6 support. - */ - useIPv6?: boolean; - - /** - * Enables / disables a data communication channel with the Videobridge. - * Values can be 'datachannel', 'websocket', true (treat it as - * 'datachannel'), undefined (treat it as 'datachannel') and false (don't - * open any channel). - */ - openBridgeChannel?: boolean; - - // ---- UI - - /** - * Use display name as XMPP nickname. - */ - useNicks?: boolean; - /** - * Require users to always specify a display name. - */ - requireDisplayName?: boolean; - - /** - * Whether to use a welcome page or not. In case it's false a random room - * will be joined when no room is specified. + * The STUN servers that will be used in the peer to peer connections */ - enableWelcomePage?: boolean; + stunServers?: { urls: string }[]; /** - * Enabling the close page will ignore the welcome page redirection when - * a call is hangup. + * Sets the ICE transport policy for the p2p connection. At the time + * of this writing the list of possible values are 'all' and 'relay', + * but that is subject to change in the future. The enum is defined in + * the WebRTC standard: + * https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum. + * If not set, the effective value is 'all'. */ - enableClosePage?: boolean; + iceTransportPolicy?: string; /** - * Disable hiding of remote thumbnails when in a 1-on-1 conference call. + * If set to true, it will prefer to use H.264 for P2P calls (if H.264 + * is supported). */ - disable1On1Mode?: boolean; + preferH264?: boolean; /** - * Default language for the user interface. + * If set to true, disable H.264 video codec by stripping it out of the + * SDP. */ - defaultLanguage?: string; + disableH264?: boolean; /** - * If true all users without a token will be considered guests and all users - * with token will be considered non-guests. Only guests will be allowed to - * edit their profile. - */ - enableUserRolesBasedOnToken?: boolean; - - /** - * Whether or not some features are checked based on token. + * How long we're going to wait, before going back to P2P after the 3rd + * participant has left the conference (to filter out page reload). + * + * @example 5 */ - enableFeaturesBasedOnToken?: boolean; + backToP2PDelay?: number; + }; + analytics?: { /** - * Enable lock room for all moderators, even when userRolesBasedOnToken is enabled and participants are guests. + * The Google Analytics Tracking ID: */ - lockRoomGuestEnabled?: boolean; + googleAnalyticsTrackingId?: string; /** - * When enabled the password used for locking a room is restricted to up to the number of digits specified + * The Amplitude APP Key: */ - roomPasswordNumberOfDigits?: number; - - /** - * Message to show the users. Example: 'The service will be down for - * maintenance at 01:00 AM GMT, - */ - noticeMessage?: string; - - /** - * Enables calendar integration, depends on googleApiApplicationClientID - * and microsoftApiApplicationClientID - */ - enableCalendarIntegration?: boolean; - - // ---- Stats - - /** - * Whether to enable stats collection or not in the TraceablePeerConnection. - * This can be useful for debugging purposes (post-processing/analysis of - * the webrtc stats) as it is done in the jitsi-meet-torture bandwidth - * estimation tests. - */ - gatherStats?: boolean; - - /** - * The interval at which PeerConnection.getStats() is called. - * Defaults to 10000 - */ - pcStatsInterval?: string; - - /** - * To enable sending statistics to callstats.io you must provide the - * Application ID and Secret. - */ - callStatsID?: string; - callStatsSecret?: string; - - /** - * enables sending participants display name to callstats - */ - enableDisplayNameInStats?: boolean; - - /** - * enables sending participants email if available to callstats and other analytics - */ - enableEmailInStats?: boolean; - - // ---- Privacy - - /** - * If third party requests are disabled, no other server will be contacted. - * This means avatars will be locally generated and callstats integration - * will not function. - */ - disableThirdPartyRequests?: boolean; + amplitudeAPPKey?: string; /** - * Peer-To-Peer mode: used (if enabled) when there are just 2 participants. - */ - p2p?: { - /** - * Enables peer to peer mode. When enabled the system will try to - * establish a direct connection when there are exactly 2 participants - * in the room. If that succeeds the conference will stop sending data - * through the JVB and use the peer to peer connection instead. When a - * 3rd participant joins the conference will be moved back to the JVB - * connection. - */ - enabled?: boolean; - - /** - * Use XEP-0215 to fetch STUN and TURN servers. - */ - useStunTurn?: boolean; - - /** - * The STUN servers that will be used in the peer to peer connections - */ - stunServers?: ({ urls: string })[]; - - /** - * Sets the ICE transport policy for the p2p connection. At the time - * of this writing the list of possible values are 'all' and 'relay', - * but that is subject to change in the future. The enum is defined in - * the WebRTC standard: - * https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum. - * If not set, the effective value is 'all'. - */ - iceTransportPolicy?: string; - - /** - * If set to true, it will prefer to use H.264 for P2P calls (if H.264 - * is supported). - */ - preferH264?: boolean; - - /** - * If set to true, disable H.264 video codec by stripping it out of the - * SDP. - */ - disableH264?: boolean; - - /** - * How long we're going to wait, before going back to P2P after the 3rd - * participant has left the conference (to filter out page reload). - * - * @example 5 - */ - backToP2PDelay?: number; - - }; - - analytics?: { - - /** - * The Google Analytics Tracking ID: - */ - googleAnalyticsTrackingId?: string; - - /** - * The Amplitude APP Key: - */ - amplitudeAPPKey?: string; - - /** - * Array of script URLs to load as lib-jitsi-meet "analytics handlers" - * @example - * [ - * "libs/analytics-ga.min.js", // google-analytics - * "https://example.com/my-custom-analytics.js" - * ] - */ - scriptURLs?: string[]; - - }; - - /** - * Information about the jitsi-meet instance we are connecting to, including - * the user region as seen by the server. + * Array of script URLs to load as lib-jitsi-meet "analytics handlers" * @example - * { - * shard: "shard1", - * region: "europe", - * userRegion: "asia" - * } - */ - deploymentInfo?: object; - - /** - * Decides whether the start/stop recording audio notifications should play on record. + * [ + * "libs/analytics-ga.min.js", // google-analytics + * "https://example.com/my-custom-analytics.js" + * ] + */ + scriptURLs?: string[]; + }; + + /** + * Information about the jitsi-meet instance we are connecting to, including + * the user region as seen by the server. + * @example + * { + * shard: "shard1", + * region: "europe", + * userRegion: "asia" + * } + */ + deploymentInfo?: object; + + /** + * Decides whether the start/stop recording audio notifications should play on record. + */ + disableRecordAudioNotification?: boolean; + + /** + * Information for the chrome extension banner + */ + chromeExtensionBanner?: { + /** + * The chrome extension to be installed address */ - disableRecordAudioNotification?: boolean; + url?: string; - /** - * Information for the chrome extension banner + /** + * Extensions info which allows checking if they are installed or not */ - chromeExtensionBanner?: { - /** - * The chrome extension to be installed address - */ - url?: string; - - /** - * Extensions info which allows checking if they are installed or not - */ - chromeExtensionsInfo?: ({ id: string; path: string })[]; + chromeExtensionsInfo?: { id: string; path: string }[]; + }; - }; + // ---- Local Recording - // ---- Local Recording - - localRecording?: { - - /** - * Enables local recording. - * Additionally, 'localrecording' (all lowercase) needs to be added to - * TOOLBAR_BUTTONS in interface_config.js for the Local Recording - * button to show up on the toolbar. - */ - enabled?: boolean; - - - /** - * The recording format, can be one of 'ogg', 'flac' or 'wav'. - */ - format?: 'ogg' | 'flac' | 'wav'; - - }; - - /** - * Options related to end-to-end (participant to participant) ping. + localRecording?: { + /** + * Enables local recording. + * Additionally, 'localrecording' (all lowercase) needs to be added to + * TOOLBAR_BUTTONS in interface_config.js for the Local Recording + * button to show up on the toolbar. */ - e2eping?: { - - /** - * The interval in milliseconds at which pings will be sent. - * Defaults to 10000, set to <= 0 to disable. - */ - pingInterval?: number; + enabled?: boolean; - /** - * The interval in milliseconds at which analytics events - * with the measured RTT will be sent. Defaults to 60000, set - * to <= 0 to disable. - */ - analyticsInterval?: number; - - }; - - /** - * If set, will attempt to use the provided video input device label when - * triggering a screenshare, instead of proceeding through the normal flow - * for obtaining a desktop stream. - * NOTE: This option is experimental and is currently intended for internal - * use only. + /** + * The recording format, can be one of 'ogg', 'flac' or 'wav'. */ - _desktopSharingSourceDevice?: boolean; + format?: "ogg" | "flac" | "wav"; + }; + /** + * Options related to end-to-end (participant to participant) ping. + */ + e2eping?: { /** - * If true, any checks to handoff to another application will be prevented - * and instead the app will continue to display in the current browser. + * The interval in milliseconds at which pings will be sent. + * Defaults to 10000, set to <= 0 to disable. */ - disableDeepLinking?: boolean; + pingInterval?: number; /** - * A property to disable the right click context menu for localVideo - * the menu has option to flip the locally seen video for local presentations + * The interval in milliseconds at which analytics events + * with the measured RTT will be sent. Defaults to 60000, set + * to <= 0 to disable. + */ + analyticsInterval?: number; + }; + + /** + * If set, will attempt to use the provided video input device label when + * triggering a screenshare, instead of proceeding through the normal flow + * for obtaining a desktop stream. + * NOTE: This option is experimental and is currently intended for internal + * use only. + */ + _desktopSharingSourceDevice?: boolean; + + /** + * If true, any checks to handoff to another application will be prevented + * and instead the app will continue to display in the current browser. + */ + disableDeepLinking?: boolean; + + /** + * A property to disable the right click context menu for localVideo + * the menu has option to flip the locally seen video for local presentations + */ + disableLocalVideoFlip?: boolean; + + /** + * Deployment specific URLs. + */ + deploymentUrls?: { + /** + * If specified a 'Help' button will be displayed in the overflow menu with a link to the specified URL for + * user documentation. */ - disableLocalVideoFlip?: boolean; + userDocumentationURL?: string; - /** - * Deployment specific URLs. + /** + * If specified a 'Download our apps' button will be displayed in the overflow menu with a link + * to the specified URL for an app download page. */ - deploymentUrls?: { - - /** - * If specified a 'Help' button will be displayed in the overflow menu with a link to the specified URL for - * user documentation. - */ - userDocumentationURL?: string; - - /** - * If specified a 'Download our apps' button will be displayed in the overflow menu with a link - * to the specified URL for an app download page. - */ - downloadAppsUrl?: string; + downloadAppsUrl?: string; + }; - }; - - /** - * Options related to the remote participant menu. + /** + * Options related to the remote participant menu. + */ + remoteVideoMenu?: { + /** + * If set to true the 'Kick out' button will be disabled. */ - remoteVideoMenu?: { - - /** - * If set to true the 'Kick out' button will be disabled. - */ - disableKick?: boolean; - - }; + disableKick?: boolean; + }; - /** - * If set to true all muting operations of remote participants will be disabled. - */ - disableRemoteMute?: boolean; + /** + * If set to true all muting operations of remote participants will be disabled. + */ + disableRemoteMute?: boolean; - /** + /** * List of undocumented settings used in jitsi-meet: _immediateReloadThreshold @@ -755,7 +735,7 @@ export interface ConfigOptions { tokenAuthUrl */ - /** + /** * List of undocumented settings used in lib-jitsi-meet: _peerConnStatusOutOfLastNTimeout @@ -779,408 +759,447 @@ export interface ConfigOptions { startBitrate */ - /** - * Allow all above example options to include a trailing comma and - * prevent fear when commenting out the last value. - */ - makeJsonParserHappy?: string; - + /** + * Allow all above example options to include a trailing comma and + * prevent fear when commenting out the last value. + */ + makeJsonParserHappy?: string; } - export interface InterfaceConfigOptions { - - /** - * TO FIX: this needs to be handled from SASS variables. - * There are some methods allowing to use variables both in css and js. - */ - DEFAULT_BACKGROUND?: string; - - /** - * Whether or not the blurred video background for large video should be - * displayed on browsers that can support it. - */ - DISABLE_VIDEO_BACKGROUND?: boolean; - - INITIAL_TOOLBAR_TIMEOUT?: number; - - TOOLBAR_TIMEOUT?: number; - - TOOLBAR_ALWAYS_VISIBLE?: boolean; - - DEFAULT_REMOTE_DISPLAY_NAME?: string; - - DEFAULT_LOCAL_DISPLAY_NAME?: string; - - SHOW_JITSI_WATERMARK?: boolean; - - JITSI_WATERMARK_LINK?: string; - - /** - * if watermark is disabled by default, it can be shown only for guests - */ - SHOW_WATERMARK_FOR_GUESTS?: boolean; - - SHOW_BRAND_WATERMARK?: boolean; - - BRAND_WATERMARK_LINK?: ''; - - SHOW_POWERED_BY?: boolean; - - SHOW_DEEP_LINKING_IMAGE?: boolean; - - GENERATE_ROOMNAMES_ON_WELCOME_PAGE?: boolean; - - DISPLAY_WELCOME_PAGE_CONTENT?: boolean; - - DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT?: boolean; - - APP_NAME?: string; - - NATIVE_APP_NAME?: string; - - PROVIDER_NAME?: string; - - /** - * Allow i18n to detect the system language - */ - LANG_DETECTION?: boolean; - - /** - * Hide the invite prompt in the header when alone in the meeting. - */ - HIDE_INVITE_MORE_HEADER?: boolean; - - INVITATION_POWERED_BY?: boolean; - - /** - * If we should show authentication block in profile - */ - AUTHENTICATION_ENABLE?: boolean; - - /** - * The name of the toolbar buttons to display in the toolbar. If present, - * the button will display. Exceptions are "livestreaming" and "recording" - * which also require being a moderator and some values in config.js to be - * enabled. Also, the "profile" button will not display for user's with a - * jwt. - */ - TOOLBAR_BUTTONS?: ( - 'microphone' | 'camera' | 'closedcaptions' | 'desktop' | 'fullscreen' | - 'fodeviceselection' | 'hangup' | 'profile' | 'info' | 'chat' | 'recording' | - 'livestreaming' | 'etherpad' | 'sharedvideo' | 'settings' | 'raisehand' | - 'videoquality' | 'filmstrip' | 'invite' | 'feedback' | 'stats' | 'shortcuts' | - 'tileview' | 'videobackgroundblur' | 'download' | 'help' | 'mute-everyone' - )[]; - - SETTINGS_SECTIONS?: ('devices' | 'language' | 'moderator' | 'profile' | 'calendar')[]; - - /** - * Determines how the video would fit the screen. 'both' would fit the whole - * screen, 'height' would fit the original video height to the height of the - * screen, 'width' would fit the original video width to the width of the - * screen respecting ratio. - */ - VIDEO_LAYOUT_FIT?: string; - - /** - * Whether to only show the filmstrip (and hide the toolbar). - */ - filmStripOnly?: boolean; - - /** - * Whether to show thumbnails in filmstrip as a column instead of as a row. - */ - VERTICAL_FILMSTRIP?: boolean; - - // A html text to be shown to guests on the close page, false disables it - CLOSE_PAGE_GUEST_HINT?: boolean; - - SHOW_PROMOTIONAL_CLOSE_PAGE?: boolean; - - RANDOM_AVATAR_URL_PREFIX?: boolean; - - RANDOM_AVATAR_URL_SUFFIX?: boolean; - - /** - * example: 120 - */ - FILM_STRIP_MAX_HEIGHT?: number; - - /** - * Enables feedback star animation. - */ - ENABLE_FEEDBACK_ANIMATION?: boolean; - - DISABLE_FOCUS_INDICATOR?: boolean; - - DISABLE_DOMINANT_SPEAKER_INDICATOR?: boolean; - - /** - * Whether the speech to text transcription subtitles panel is disabled. - * If {@code undefined}, defaults to {@code false}. - * - */ - DISABLE_TRANSCRIPTION_SUBTITLES?: boolean; - - /** - * Whether the ringing sound in the call/ring overlay is disabled. If - * {@code undefined}, defaults to {@code false}. - * - */ - DISABLE_RINGING?: boolean; - - AUDIO_LEVEL_PRIMARY_COLOR?: string; - - /** - * @example: 'rgba(255,255,255,0.2)' - */ - AUDIO_LEVEL_SECONDARY_COLOR?: string; - - - POLICY_LOGO?: string; - - /** - * @example: 16/9, // 16:9 - */ - LOCAL_THUMBNAIL_RATIO?: number; - - /** - * @example: 1, // 1:1 - */ - REMOTE_THUMBNAIL_RATIO?: number; - - /** - * Documentation reference for the live streaming feature. - */ - LIVE_STREAMING_HELP_LINK?: string; - - /** - * Whether the mobile app Jitsi Meet is to be promoted to participants - * attempting to join a conference in a mobile Web browser. If - * {@code undefined}, defaults to {@code true}. - * - */ - MOBILE_APP_PROMO?: boolean; - - /** - * Maximum coeficient of the ratio of the large video to the visible area - * after the large video is scaled to fit the window. - * - * @example 1.3 - * - */ - MAXIMUM_ZOOMING_COEFFICIENT?: number; - - /* - * If indicated some of the error dialogs may point to the support URL for - * help. - */ - SUPPORT_URL?: string; - - /** - * Whether the connection indicator icon should hide itself based on - * connection strength. If true, the connection indicator will remain - * displayed while the participant has a weak connection and will hide - * itself after the CONNECTION_INDICATOR_HIDE_TIMEOUT when the connection is - * strong. - */ - CONNECTION_INDICATOR_AUTO_HIDE_ENABLED?: boolean; - - /** - * How long the connection indicator should remain displayed before hiding. - * Used in conjunction with CONNECTION_INDICATOR_AUTOHIDE_ENABLED. - * - * @example: 5000 - */ - CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT?: number; - - /** - * If true, hides the connection indicators completely. - */ - CONNECTION_INDICATOR_DISABLED?: boolean; - - /** - * If true, hides the video quality label indicating the resolution status - * of the current large video. - */ - VIDEO_QUALITY_LABEL_DISABLED?: boolean; - - /** - * If true, will display recent list - */ - RECENT_LIST_ENABLED?: boolean; - - /** - * Names of browsers which should show a warning stating the current browser - * has a suboptimal experience. Browsers which are not listed as optimal or - * unsupported are considered suboptimal. - * Valid values are: chrome, chromium, edge, electron, firefox, nwjs, opera, safari - */ - OPTIMAL_BROWSERS?: ('chrome' | 'chromium' | 'edge' | 'electron' | 'firefox' | 'nwjs' | 'opera' | 'safari')[]; - - /** - * Browsers, in addition to those which do not fully support WebRTC, - * that are not supported and should show the unsupported browser page. - */ - UNSUPPORTED_BROWSERS?: ('chrome' | 'chromium' | 'edge' | 'electron' | 'firefox' | 'nwjs' | 'opera' | 'safari')[]; - - /** - * A UX mode where the last screen share participant is automatically - * pinned. Valid values are the string "remote-only" so remote participants - * get pinned but not local, otherwise any truthy value for all participants, - * and any falsy value to disable the feature. - * - * Note: this mode is experimental and subject to breakage. - */ - AUTO_PIN_LATEST_SCREEN_SHARE?: string; - - /** - * If true, presence status: busy, calling, connected etc. is not displayed. - */ - DISABLE_PRESENCE_STATUS?: boolean; - - /** - * If true, notifications regarding joining/leaving are no longer displayed. - */ - DISABLE_JOIN_LEAVE_NOTIFICATIONS?: boolean; - - /** - * Decides whether the chrome extension banner should be rendered on the landing page and during the meeting. - * If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s) - * being already installed is done before rendering. - */ - SHOW_CHROME_EXTENSION_BANNER?: boolean; - - /** - * When enabled, the kick participant button will not be presented for users without a JWT - */ - HIDE_KICK_BUTTON_FOR_GUESTS?: boolean; - - /** - * How many columns the tile view can expand to. The respected range is - * between 1 and 5. - */ - TILE_VIEW_MAX_COLUMNS?: number; - - /** - * Specify custom URL for downloading android mobile app. - */ - MOBILE_DOWNLOAD_LINK_ANDROID?: string; - - /** - * Specify URL for downloading ios mobile app. - */ - MOBILE_DOWNLOAD_LINK_IOS?: string; - - /** - * Specify mobile app scheme for opening the app from the mobile browser. - */ - APP_SCHEME?: string; - - /** - * Specify the Android app package name. - */ - ANDROID_APP_PACKAGE?: string; - - /** - * Override the behavior of some notifications to remain displayed until - * explicitly dismissed through a user action. The value is how long, in - * milliseconds, those notifications should remain displayed. - */ - ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT?: 15000; - - /** List of undocumented settings + /** + * TO FIX: this needs to be handled from SASS variables. + * There are some methods allowing to use variables both in css and js. + */ + DEFAULT_BACKGROUND?: string; + + /** + * Whether or not the blurred video background for large video should be + * displayed on browsers that can support it. + */ + DISABLE_VIDEO_BACKGROUND?: boolean; + + INITIAL_TOOLBAR_TIMEOUT?: number; + + TOOLBAR_TIMEOUT?: number; + + TOOLBAR_ALWAYS_VISIBLE?: boolean; + + DEFAULT_REMOTE_DISPLAY_NAME?: string; + + DEFAULT_LOCAL_DISPLAY_NAME?: string; + + SHOW_JITSI_WATERMARK?: boolean; + + JITSI_WATERMARK_LINK?: string; + + /** + * if watermark is disabled by default, it can be shown only for guests + */ + SHOW_WATERMARK_FOR_GUESTS?: boolean; + + SHOW_BRAND_WATERMARK?: boolean; + + BRAND_WATERMARK_LINK?: ""; + + SHOW_POWERED_BY?: boolean; + + SHOW_DEEP_LINKING_IMAGE?: boolean; + + GENERATE_ROOMNAMES_ON_WELCOME_PAGE?: boolean; + + DISPLAY_WELCOME_PAGE_CONTENT?: boolean; + + DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT?: boolean; + + APP_NAME?: string; + + NATIVE_APP_NAME?: string; + + PROVIDER_NAME?: string; + + /** + * Allow i18n to detect the system language + */ + LANG_DETECTION?: boolean; + + /** + * Hide the invite prompt in the header when alone in the meeting. + */ + HIDE_INVITE_MORE_HEADER?: boolean; + + INVITATION_POWERED_BY?: boolean; + + /** + * If we should show authentication block in profile + */ + AUTHENTICATION_ENABLE?: boolean; + + /** + * The name of the toolbar buttons to display in the toolbar. If present, + * the button will display. Exceptions are "livestreaming" and "recording" + * which also require being a moderator and some values in config.js to be + * enabled. Also, the "profile" button will not display for user's with a + * jwt. + */ + TOOLBAR_BUTTONS?: ( + | "microphone" + | "camera" + | "closedcaptions" + | "desktop" + | "fullscreen" + | "fodeviceselection" + | "hangup" + | "profile" + | "info" + | "chat" + | "recording" + | "livestreaming" + | "etherpad" + | "sharedvideo" + | "settings" + | "raisehand" + | "videoquality" + | "filmstrip" + | "invite" + | "feedback" + | "stats" + | "shortcuts" + | "tileview" + | "videobackgroundblur" + | "download" + | "help" + | "mute-everyone" + )[]; + + SETTINGS_SECTIONS?: ( + | "devices" + | "language" + | "moderator" + | "profile" + | "calendar" + )[]; + + /** + * Determines how the video would fit the screen. 'both' would fit the whole + * screen, 'height' would fit the original video height to the height of the + * screen, 'width' would fit the original video width to the width of the + * screen respecting ratio. + */ + VIDEO_LAYOUT_FIT?: string; + + /** + * Whether to only show the filmstrip (and hide the toolbar). + */ + filmStripOnly?: boolean; + + /** + * Whether to show thumbnails in filmstrip as a column instead of as a row. + */ + VERTICAL_FILMSTRIP?: boolean; + + // A html text to be shown to guests on the close page, false disables it + CLOSE_PAGE_GUEST_HINT?: boolean; + + SHOW_PROMOTIONAL_CLOSE_PAGE?: boolean; + + RANDOM_AVATAR_URL_PREFIX?: boolean; + + RANDOM_AVATAR_URL_SUFFIX?: boolean; + + /** + * example: 120 + */ + FILM_STRIP_MAX_HEIGHT?: number; + + /** + * Enables feedback star animation. + */ + ENABLE_FEEDBACK_ANIMATION?: boolean; + + DISABLE_FOCUS_INDICATOR?: boolean; + + DISABLE_DOMINANT_SPEAKER_INDICATOR?: boolean; + + /** + * Whether the speech to text transcription subtitles panel is disabled. + * If {@code undefined}, defaults to {@code false}. + * + */ + DISABLE_TRANSCRIPTION_SUBTITLES?: boolean; + + /** + * Whether the ringing sound in the call/ring overlay is disabled. If + * {@code undefined}, defaults to {@code false}. + * + */ + DISABLE_RINGING?: boolean; + + AUDIO_LEVEL_PRIMARY_COLOR?: string; + + /** + * @example: 'rgba(255,255,255,0.2)' + */ + AUDIO_LEVEL_SECONDARY_COLOR?: string; + + POLICY_LOGO?: string; + + /** + * @example: 16/9, // 16:9 + */ + LOCAL_THUMBNAIL_RATIO?: number; + + /** + * @example: 1, // 1:1 + */ + REMOTE_THUMBNAIL_RATIO?: number; + + /** + * Documentation reference for the live streaming feature. + */ + LIVE_STREAMING_HELP_LINK?: string; + + /** + * Whether the mobile app Jitsi Meet is to be promoted to participants + * attempting to join a conference in a mobile Web browser. If + * {@code undefined}, defaults to {@code true}. + * + */ + MOBILE_APP_PROMO?: boolean; + + /** + * Maximum coeficient of the ratio of the large video to the visible area + * after the large video is scaled to fit the window. + * + * @example 1.3 + * + */ + MAXIMUM_ZOOMING_COEFFICIENT?: number; + + /* + * If indicated some of the error dialogs may point to the support URL for + * help. + */ + SUPPORT_URL?: string; + + /** + * Whether the connection indicator icon should hide itself based on + * connection strength. If true, the connection indicator will remain + * displayed while the participant has a weak connection and will hide + * itself after the CONNECTION_INDICATOR_HIDE_TIMEOUT when the connection is + * strong. + */ + CONNECTION_INDICATOR_AUTO_HIDE_ENABLED?: boolean; + + /** + * How long the connection indicator should remain displayed before hiding. + * Used in conjunction with CONNECTION_INDICATOR_AUTOHIDE_ENABLED. + * + * @example: 5000 + */ + CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT?: number; + + /** + * If true, hides the connection indicators completely. + */ + CONNECTION_INDICATOR_DISABLED?: boolean; + + /** + * If true, hides the video quality label indicating the resolution status + * of the current large video. + */ + VIDEO_QUALITY_LABEL_DISABLED?: boolean; + + /** + * If true, will display recent list + */ + RECENT_LIST_ENABLED?: boolean; + + /** + * Names of browsers which should show a warning stating the current browser + * has a suboptimal experience. Browsers which are not listed as optimal or + * unsupported are considered suboptimal. + * Valid values are: chrome, chromium, edge, electron, firefox, nwjs, opera, safari + */ + OPTIMAL_BROWSERS?: ( + | "chrome" + | "chromium" + | "edge" + | "electron" + | "firefox" + | "nwjs" + | "opera" + | "safari" + )[]; + + /** + * Browsers, in addition to those which do not fully support WebRTC, + * that are not supported and should show the unsupported browser page. + */ + UNSUPPORTED_BROWSERS?: ( + | "chrome" + | "chromium" + | "edge" + | "electron" + | "firefox" + | "nwjs" + | "opera" + | "safari" + )[]; + + /** + * A UX mode where the last screen share participant is automatically + * pinned. Valid values are the string "remote-only" so remote participants + * get pinned but not local, otherwise any truthy value for all participants, + * and any falsy value to disable the feature. + * + * Note: this mode is experimental and subject to breakage. + */ + AUTO_PIN_LATEST_SCREEN_SHARE?: string; + + /** + * If true, presence status: busy, calling, connected etc. is not displayed. + */ + DISABLE_PRESENCE_STATUS?: boolean; + + /** + * If true, notifications regarding joining/leaving are no longer displayed. + */ + DISABLE_JOIN_LEAVE_NOTIFICATIONS?: boolean; + + /** + * Decides whether the chrome extension banner should be rendered on the landing page and during the meeting. + * If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s) + * being already installed is done before rendering. + */ + SHOW_CHROME_EXTENSION_BANNER?: boolean; + + /** + * When enabled, the kick participant button will not be presented for users without a JWT + */ + HIDE_KICK_BUTTON_FOR_GUESTS?: boolean; + + /** + * How many columns the tile view can expand to. The respected range is + * between 1 and 5. + */ + TILE_VIEW_MAX_COLUMNS?: number; + + /** + * Specify custom URL for downloading android mobile app. + */ + MOBILE_DOWNLOAD_LINK_ANDROID?: string; + + /** + * Specify URL for downloading ios mobile app. + */ + MOBILE_DOWNLOAD_LINK_IOS?: string; + + /** + * Specify mobile app scheme for opening the app from the mobile browser. + */ + APP_SCHEME?: string; + + /** + * Specify the Android app package name. + */ + ANDROID_APP_PACKAGE?: string; + + /** + * Override the behavior of some notifications to remain displayed until + * explicitly dismissed through a user action. The value is how long, in + * milliseconds, those notifications should remain displayed. + */ + ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT?: 15000; + + /** List of undocumented settings INDICATOR_FONT_SIZES MOBILE_DYNAMIC_LINK PHONE_NUMBER_REGEX */ } - export interface Props { - - /** - * Main container styles - */ - containerStyle?: React.CSSProperties; - - /** - * Jitsi iframe container styles - */ - frameStyle?: React.CSSProperties; - - /** - * Component shown until JitsiMeet video conference is not started - */ - loadingComponent?: React.ComponentType; - - /** - * Callback function invoked with JitsiMeetExternalAPI object when it is loaded - */ - onAPILoad?: (api: JitsiMeetAPI) => void; - - /** - * Callback function invoked when JitsiMeet iframe is loaded - */ - onIframeLoad?: () => void; - - /** - * Domain used to build the conference URL, 'meet.jit.si' for example. - */ - domain?: string; - - /** - * Name of the room to join - */ - roomName?: string; - - /** - * Password to set for the meeting room - */ - password?: string; - - /** - * Participant's name - */ - displayName?: string; - - // Options passed to JitsiMeetExternalAPI - - /** - * Overrides for the default meeting options - */ - config?: ConfigOptions; - - /** - * Overrides for default meeting interface options - */ - interfaceConfig?: InterfaceConfigOptions; - - /** - * Boolean indicating if the server should be contacted using HTTP or HTTPS - */ - noSSL?: boolean; - - /** - * JWT token to pass to the domain - */ - jwt?: string; - - /** - * A map containing information about the initial devices that will be used in the call. - */ - devices?: { - audioInput?: string; - audioOutput?: string; - videoInput?: string; - }; - - /** - * Object containing information about the participant opening the meeting, such as email - */ - userInfo?: { - email?: string; - }; - -} \ No newline at end of file + /** + * Main container styles + */ + containerStyle?: React.CSSProperties; + + /** + * Jitsi iframe container styles + */ + frameStyle?: React.CSSProperties; + + /** + * Component shown until JitsiMeet video conference is not started + */ + loadingComponent?: React.ComponentType; + + /** + * Callback function invoked with JitsiMeetExternalAPI object when it is loaded + */ + onAPILoad?: (api: JitsiMeetAPI) => void; + + /** + * Callback function invoked when JitsiMeet iframe is loaded + */ + onIframeLoad?: () => void; + + /** + * Domain used to build the conference URL, 'meet.jit.si' for example. + */ + domain?: string; + + /** + * Name of the room to join + */ + roomName?: string; + + /** + * Password to set for the meeting room + */ + password?: string; + + /** + * Participant's name + */ + displayName?: string; + + // Options passed to JitsiMeetExternalAPI + + /** + * Overrides for the default meeting options + */ + config?: ConfigOptions; + + /** + * Overrides for default meeting interface options + */ + interfaceConfig?: InterfaceConfigOptions; + + /** + * Boolean indicating if the server should be contacted using HTTP or HTTPS + */ + noSSL?: boolean; + + /** + * JWT token to pass to the domain + */ + jwt?: string; + + /** + * A map containing information about the initial devices that will be used in the call. + */ + devices?: { + audioInput?: string; + audioOutput?: string; + videoInput?: string; + }; + + /** + * Object containing information about the participant opening the meeting, such as email + */ + userInfo?: { + email?: string; + }; +} From 65a2dd183a73f12c240c34098f3af433300055d3 Mon Sep 17 00:00:00 2001 From: Suraj Kiran S Date: Wed, 16 Jun 2021 22:25:55 +0530 Subject: [PATCH 2/2] listener api fix --- src/Jitsi.tsx | 188 ++++++++++++++++++++++++++------------------------ src/types.tsx | 1 + 2 files changed, 100 insertions(+), 89 deletions(-) diff --git a/src/Jitsi.tsx b/src/Jitsi.tsx index 97f3a54..13ae01c 100644 --- a/src/Jitsi.tsx +++ b/src/Jitsi.tsx @@ -1,97 +1,107 @@ -import React, { useState, useEffect, useRef } from 'react' -import { Props, JitsiMeetAPIOptions } from './types' -import * as Default from './defaults' -import { importJitsiApi } from './utils' +import React, { useState, useEffect, useRef } from "react"; +import { Props, JitsiMeetAPIOptions } from "./types"; +import * as Default from "./defaults"; +import { importJitsiApi } from "./utils"; const Jitsi: React.FC = (props: Props) => { - const { - containerStyle, - frameStyle, - loadingComponent, - onAPILoad, - onIframeLoad, - domain, + const { + containerStyle, + frameStyle, + loadingComponent, + onAPILoad, + onIframeLoad, + domain, + roomName, + password, + displayName, + config, + interfaceConfig, + noSSL, + jwt, + devices, + userInfo, + } = { ...Default.Props, ...props }; + + const [loading, setLoading] = useState(true); + const ref = useRef(null); + + const Loader = loadingComponent || Default.Loader; + + const startConference = (JitsiMeetExternalAPI: any): void => { + try { + console.log("interfaceConfig", interfaceConfig); + + const options: JitsiMeetAPIOptions = { roomName, - password, - displayName, - config, - interfaceConfig, + parentNode: ref.current, + configOverwrite: config, + interfaceConfigOverwrite: interfaceConfig, noSSL, jwt, + onLoad: onIframeLoad, devices, userInfo, - } = { ...Default.Props, ...props } - - const [loading, setLoading] = useState(true) - const ref = useRef(null) - - const Loader = loadingComponent || Default.Loader - - const startConference = (JitsiMeetExternalAPI: any): void => { - - try { - - console.log('interfaceConfig', interfaceConfig); - - - const options: JitsiMeetAPIOptions = { - roomName, - parentNode: ref.current, - configOverwrite: config, - interfaceConfigOverwrite: interfaceConfig, - noSSL, - jwt, - onLoad: onIframeLoad, - devices, - userInfo, - } - - const api = new JitsiMeetExternalAPI(domain, options) - - if (!api) throw new Error('Failed to create JitsiMeetExternalAPI istance') - - if (onAPILoad) onAPILoad(api) - - api.addEventListener('videoConferenceJoined', () => { - - setLoading(false) - - api.executeCommand('displayName', displayName) - - if (domain === Default.Props.domain && password) - api.executeCommand('password', password) - - }) - - /** - * If we are on a self hosted Jitsi domain, we need to become moderators before setting a password - * Issue: https://community.jitsi.org/t/lock-failed-on-jitsimeetexternalapi/32060 - */ - api.addEventListener('participantRoleChanged', (e: { id: string; role: string }) => { - - if (domain !== Default.Props.domain && password && e.role === 'moderator') - api.executeCommand('password', password) - - }) - - } catch (error) { console.error('Failed to start the conference', error) } - + }; + + const api = new JitsiMeetExternalAPI(domain, options); + + if (!api) + throw new Error("Failed to create JitsiMeetExternalAPI istance"); + + if (onAPILoad) onAPILoad(api); + + api.addListener("videoConferenceJoined", () => { + setLoading(false); + + api.executeCommand("displayName", displayName); + + if (domain === Default.Props.domain && password) + api.executeCommand("password", password); + }); + + /** + * If we are on a self hosted Jitsi domain, we need to become moderators before setting a password + * Issue: https://community.jitsi.org/t/lock-failed-on-jitsimeetexternalapi/32060 + */ + api.addListener( + "participantRoleChanged", + (e: { id: string; role: string }) => { + if ( + domain !== Default.Props.domain && + password && + e.role === "moderator" + ) + api.executeCommand("password", password); + } + ); + } catch (error) { + console.error("Failed to start the conference", error); } - - useEffect(() => { - importJitsiApi().then(jitsiApi => { - startConference(jitsiApi); - }).catch(err => { - console.error('Jitsi Meet API library not loaded.', err) - }) - }, []) - - return ( -
- {loading && } -
-
- ) -} - -export default Jitsi + }; + + useEffect(() => { + importJitsiApi() + .then((jitsiApi) => { + startConference(jitsiApi); + }) + .catch((err) => { + console.error("Jitsi Meet API library not loaded.", err); + }); + }, []); + + return ( +
+ {loading && } +
+
+ ); +}; + +export default Jitsi; diff --git a/src/types.tsx b/src/types.tsx index fdf51cd..d52ab42 100644 --- a/src/types.tsx +++ b/src/types.tsx @@ -9,6 +9,7 @@ declare global { export interface JitsiMeetAPI { // TODO, add definitions captureLargeVideoScreenshot: () => Promise; + addListener(event: string, listener: (data: any) => any): void; } export interface JitsiMeetAPIOptions {