From 7f60048a9de89d74118db0c481111e1e8b8c743c Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Fri, 27 Feb 2026 13:23:29 -0800 Subject: [PATCH] update ConfigOverwrite to match latest Jitsi --- src/lib/jitsi-iframe-api.d.ts | 555 +++++++++++++++++++++++++++++++++- 1 file changed, 545 insertions(+), 10 deletions(-) diff --git a/src/lib/jitsi-iframe-api.d.ts b/src/lib/jitsi-iframe-api.d.ts index f3b7bc5..c82569f 100644 --- a/src/lib/jitsi-iframe-api.d.ts +++ b/src/lib/jitsi-iframe-api.d.ts @@ -438,28 +438,521 @@ export interface JitsiMeetExternalAPIOptions { } interface ConfigOverwrite { + // Audio settings startWithAudioMuted?: boolean; - startWithVideoMuted?: boolean; - disableDeepLinking?: boolean; - prejoinPageEnabled?: boolean; + startAudioMuted?: number; + startAudioOnly?: boolean; + startSilent?: boolean; enableNoisyMicDetection?: boolean; + enableOpusRed?: boolean; + audioQuality?: { + stereo?: boolean; + opusMaxAverageBitrate?: number | null; + enableOpusDtx?: boolean; + }; + noiseSuppression?: { + krisp?: { + enabled?: boolean; + logProcessStats?: boolean; + debugLogs?: boolean; + useBVC?: boolean; + bufferOverflowMS?: number; + }; + }; + disableAEC?: boolean; + disableAGC?: boolean; + disableAP?: boolean; + disableNS?: boolean; + + // Video settings + startWithVideoMuted?: boolean; + startVideoMuted?: number; + maxFullResolutionParticipants?: number; + disableSimulcast?: boolean; + disableResponsiveTiles?: boolean; + constraints?: { + video?: { + height?: { + ideal?: number; + max?: number; + min?: number; + }; + }; + }; + desktopSharingFrameRate?: { + min?: number; + max?: number; + }; + screenShareSettings?: { + desktopPreferCurrentTab?: boolean; + desktopSystemAudio?: 'include' | 'exclude'; + desktopSurfaceSwitching?: 'include' | 'exclude'; + desktopDisplaySurface?: string; + desktopSelfBrowserSurface?: 'include' | 'exclude'; + }; + videoQuality?: { + codecPreferenceOrder?: ('AV1' | 'VP9' | 'VP8' | 'H264')[]; + mobileCodecPreferenceOrder?: ('AV1' | 'VP9' | 'VP8' | 'H264')[]; + screenshareCodec?: string; + mobileScreenshareCodec?: string; + enableAdaptiveMode?: boolean; + minHeightForQualityLvl?: Record; + }; + + // Prejoin configuration (replaces prejoinPageEnabled) + prejoinConfig?: { + enabled?: boolean; + hideDisplayName?: boolean; + hideExtraJoinButtons?: ('no-audio' | 'by-phone')[]; + preCallTestEnabled?: boolean; + preCallTestICEUrl?: string; + showHangUp?: boolean; + }; + /** @deprecated Use prejoinConfig.enabled instead */ + prejoinPageEnabled?: boolean; + + // Lobby configuration + lobby?: { + autoKnock?: boolean; + enableChat?: boolean; + showHangUp?: boolean; + }; + /** @deprecated Use lobby.autoKnock instead */ + autoKnockLobby?: boolean; + /** @deprecated Use lobby.enableChat instead */ + enableLobbyChat?: boolean; + + // Security UI configuration + securityUi?: { + hideLobbyButton?: boolean; + disableLobbyPassword?: boolean; + }; + /** @deprecated Use securityUi.hideLobbyButton instead */ + hideLobbyButton?: boolean; + + // Deep linking configuration + deeplinking?: { + disabled?: boolean; + hideLogo?: boolean; + desktop?: { + appName?: string; + appScheme?: string; + download?: { + linux?: string; + macos?: string; + windows?: string; + }; + enabled?: boolean; + }; + ios?: { + appName?: string; + appScheme?: string; + downloadLink?: string; + }; + android?: { + appName?: string; + appScheme?: string; + downloadLink?: string; + appPackage?: string; + fDroidUrl?: string; + }; + }; + /** @deprecated Use deeplinking.disabled instead */ + disableDeepLinking?: boolean; + + // Welcome page configuration + welcomePage?: { + disabled?: boolean; + customUrl?: string; + }; + + // Recording configuration + recordings?: { + recordAudioAndVideo?: boolean; + suggestRecording?: boolean; + showPrejoinWarning?: boolean; + showRecordingLink?: boolean; + requireConsent?: boolean; + skipConsentInMeeting?: boolean; + consentLearnMoreLink?: string; + }; + recordingService?: { + enabled?: boolean; + sharingEnabled?: boolean; + hideStorageWarning?: boolean; + }; + localRecording?: { + disable?: boolean; + notifyAllParticipants?: boolean; + disableSelfRecording?: boolean; + }; + + // Live streaming configuration + liveStreaming?: { + enabled?: boolean; + termsLink?: string; + dataPrivacyLink?: string; + validatorRegExpString?: string; + helpLink?: string; + }; + + // Transcription configuration + transcription?: { + enabled?: boolean; + useAppLanguage?: boolean; + preferredLanguage?: string; + customLanguages?: Record; + autoTranscribeOnRecord?: boolean; + autoCaptionOnTranscribe?: boolean; + disableClosedCaptions?: boolean; + }; + + // Toolbar configuration + toolbarButtons?: ToolbarButton[]; + mainToolbarButtons?: ToolbarButton[][]; + reducedUImainToolbarButtons?: ToolbarButton[]; + reducedUIEnabled?: boolean; + buttonsWithNotifyClick?: (ToolbarButton | ButtonWithNotifyClick)[]; + participantMenuButtonsWithNotifyClick?: (string | ButtonWithNotifyClick)[]; + hiddenPremeetingButtons?: ( + | 'microphone' + | 'camera' + | 'select-background' + | 'invite' + | 'settings' + )[]; + customToolbarButtons?: Array<{ + icon: string; + id: string; + text: string; + backgroundColor?: string; + }>; + customParticipantMenuButtons?: Array<{ icon: string; id: string; text: string }>; + toolbar?: { + initialTimeout?: number; + timeout?: number; + alwaysVisible?: boolean; + autoHideWhileChatIsOpen?: boolean; + }; + + // UI settings enableClosePage?: boolean; disableInviteFunctions?: boolean; disableModeratorIndicator?: boolean; - enableLobbyChat?: boolean; - hideLobbyButton?: boolean; enableInsecureRoomNameWarning?: boolean; - toolbarButtons?: ToolbarButton[]; - buttonsWithNotifyClick?: (ToolbarButton | ButtonWithNotifyClick)[]; - mouseMoveCallbackInterval?: number; - faceLandmarks?: { - faceCenteringThreshold?: number; + disableReactions?: boolean; + disableReactionsModeration?: boolean; + disableReactionsInChat?: boolean; + disablePolls?: boolean; + disableChat?: boolean; + disableSelfDemote?: boolean; + disableSelfView?: boolean; + disableSelfViewSettings?: boolean; + showChatPermissionsModeratorSetting?: boolean; + disableShortcuts?: boolean; + disableInitialGUM?: boolean; + disable1On1Mode?: boolean | null; + defaultLocalDisplayName?: string; + defaultRemoteDisplayName?: string; + hideDisplayName?: boolean; + hideDominantSpeakerBadge?: boolean; + defaultLanguage?: string; + disableProfile?: boolean; + hideEmailInSettings?: boolean; + requireDisplayName?: boolean; + readOnlyName?: boolean; + enableWebHIDFeature?: boolean; + doNotStoreRoom?: boolean; + disableLocalVideoFlip?: boolean; + doNotFlipLocalVideo?: boolean; + disableVirtualBackground?: boolean; + disableAddingBackgroundImages?: boolean; + backgroundAlpha?: number; + disableTileView?: boolean; + disableTileEnlargement?: boolean; + hideConferenceSubject?: boolean; + hideConferenceTimer?: boolean; + hideRecordingLabel?: boolean; + hideParticipantsStats?: boolean; + subject?: string; + localSubject?: string; + disableChatSmileys?: boolean; + disableFilmstripAutohiding?: boolean; + disableCameraTintForeground?: boolean; + + // Filmstrip configuration + filmstrip?: { + disabled?: boolean; + disableResizable?: boolean; + disableStageFilmstrip?: boolean; + stageFilmstripParticipants?: number; + disableTopPanel?: boolean; + minParticipantCountForTopPanel?: number; + initialWidth?: number; + alwaysShowResizeBar?: boolean; }; + + // Tile view configuration + tileView?: { + disabled?: boolean; + numberOfVisibleTiles?: number; + }; + + // Participants pane configuration + participantsPane?: { + enabled?: boolean; + hideModeratorSettingsTab?: boolean; + hideMoreActionsButton?: boolean; + hideMuteAllButton?: boolean; + }; + + // Breakout rooms configuration + breakoutRooms?: { + hideAddRoomButton?: boolean; + hideAutoAssignButton?: boolean; + hideJoinRoomButton?: boolean; + }; + + // Raised hands configuration + raisedHands?: { + disableLowerHandByModerator?: boolean; + disableLowerHandNotification?: boolean; + disableNextSpeakerNotification?: boolean; + disableRemoveRaisedHandOnFocus?: boolean; + }; + disableRemoveRaisedHandOnFocus?: boolean; + + // Speaker stats configuration + speakerStats?: { + disabled?: boolean; + disableSearch?: boolean; + order?: ('role' | 'name' | 'hasLeft')[]; + }; + + // Connection indicators configuration + connectionIndicators?: { + autoHide?: boolean; + autoHideTimeout?: number; + disabled?: boolean; + disableDetails?: boolean; + inactiveDisabled?: boolean; + }; + + // Remote video menu configuration + remoteVideoMenu?: { + disabled?: boolean; + disableDemote?: boolean; + disableKick?: boolean; + disableGrantModerator?: boolean; + disablePrivateChat?: 'all' | 'allow-moderator-chat' | 'disable-visitor-chat'; + }; + disableRemoteMute?: boolean; + + // Face landmarks configuration + faceLandmarks?: { + enableFaceCentering?: boolean; + enableFaceExpressionsDetection?: boolean; + enableDisplayFaceExpressions?: boolean; + enableRTCStats?: boolean; + faceCenteringThreshold?: number; + captureInterval?: number; + }; + + // Notification settings + notificationTimeouts?: { + short?: number; + medium?: number; + long?: number; + extraLong?: number; + sticky?: number; + }; + notifications?: string[]; + disabledNotifications?: string[]; + + // Conference info configuration + conferenceInfo?: { + alwaysVisible?: string[]; + autoHide?: string[]; + }; + + // Giphy configuration + giphy?: { + enabled?: boolean; + sdkKey?: string; + displayMode?: 'tile' | 'chat' | 'all'; + tileTime?: number; + rating?: 'g' | 'pg' | 'pg-13' | 'r'; + }; + + // Whiteboard configuration + whiteboard?: { + enabled?: boolean; + collabServerBaseUrl?: string; + userLimit?: number; + limitUrl?: string; + }; + + // E2EE configuration + e2ee?: { + labels?: { + description?: string; + label?: string; + tooltip?: string; + warning?: string; + }; + externallyManagedKey?: boolean; + }; + + // Visitors configuration + visitors?: { + enableMediaOnPromote?: { + audio?: boolean; + video?: boolean; + }; + hideVisitorCountForVisitors?: boolean; + showJoinMeetingDialog?: boolean; + }; + + // P2P configuration + p2p?: { + enabled?: boolean; + iceTransportPolicy?: 'all' | 'relay'; + codecPreferenceOrder?: ('AV1' | 'VP9' | 'VP8' | 'H264')[]; + mobileCodecPreferenceOrder?: ('AV1' | 'VP9' | 'VP8' | 'H264')[]; + screenshareCodec?: string; + mobileScreenshareCodec?: string; + backToP2PDelay?: number; + stunServers?: Array<{ urls: string }>; + }; + + // Testing/experimental features + testing?: { + assumeBandwidth?: boolean; + enableAV1ForFF?: boolean; + enableCodecSelectionAPI?: boolean; + p2pTestMode?: boolean; + testMode?: boolean; + noAutoPlayVideo?: boolean; + skipInterimTranscriptions?: boolean; + dumpTranscript?: boolean; + debugAudioLevels?: boolean; + failICE?: boolean; + showSpotConsentDialog?: boolean; + }; + + // Analytics configuration + analytics?: { + disabled?: boolean; + rtcstatsEnabled?: boolean; + rtcstatsStoreLogs?: boolean; + rtcstatsEndpoint?: string; + rtcstatsPollInterval?: number; + rtcstatsSendSdp?: boolean; + watchRTCEnabled?: boolean; + }; + + // Gravatar configuration + gravatar?: { + baseUrl?: string; + disabled?: boolean; + }; + + // Legal URLs + legalUrls?: { + helpCentre?: string; + privacy?: string; + terms?: string; + }; + + // Other settings apiLogLevels?: LogLevel[]; + mouseMoveCallbackInterval?: number; + channelLastN?: number; + startLastN?: number; + useHostPageLocalStorage?: boolean; + disableRtx?: boolean; + enableTcc?: boolean; + enableRemb?: boolean; + enableForcedReload?: boolean; + useTurnUdp?: boolean; + enableEncodedTransformSupport?: boolean; + disableThirdPartyRequests?: boolean; + enableCalendarIntegration?: boolean; + notifyOnConferenceDestruction?: boolean; + feedbackPercentage?: number; + roomPasswordNumberOfDigits?: number | false; + noticeMessage?: string; + enableTalkWhileMuted?: boolean; + forceTurnRelay?: boolean; + hideLoginButton?: boolean; + disableWebrtcStats?: boolean; + disableShowMoreStats?: boolean; + etherpad_base?: string; + openSharedDocumentOnJoin?: boolean; + screenshotCapture?: { + enabled?: boolean; + mode?: 'recording' | 'always'; + }; + webrtcIceUdpDisable?: boolean; + webrtcIceTcpDisable?: boolean; + disableBeforeUnloadHandlers?: boolean; + + // Logging configuration + logging?: { + defaultLogLevel?: 'trace' | 'debug' | 'info' | 'log' | 'warn' | 'error'; + disableLogCollector?: boolean; + loggers?: Record; + }; + + // File sharing configuration + fileSharing?: { + apiUrl?: string; + enabled?: boolean; + maxFileSize?: number; + }; + + // Dropbox integration + dropbox?: { + appKey?: string; + redirectURI?: string; + }; + + // Dynamic branding + dynamicBrandingUrl?: string; + + // Shared video allowed domains + sharedVideoAllowedURLDomains?: string[]; + + // CORS avatar URLs + corsAvatarURLs?: string[]; + + // Recording limit + recordingLimit?: { + limit?: number; + appName?: string; + appURL?: string; + }; + + // Chrome extension banner + chromeExtensionBanner?: { + url?: string; + edgeUrl?: string; + chromeExtensionsInfo?: Array<{ + id: string; + path: string; + }>; + }; + + // Allow any additional config options [key: string]: unknown; } +/** + * @deprecated Most interfaceConfig options are being migrated to config.js. + * Use configOverwrite instead where possible. + */ interface InterfaceConfigOverwrite { + /** @deprecated Use config.disableModeratorIndicator instead */ DISABLE_DOMINANT_SPEAKER_INDICATOR?: boolean; TILE_VIEW_MAX_COLUMNS?: number; SHOW_JITSI_WATERMARK?: boolean; @@ -467,6 +960,7 @@ interface InterfaceConfigOverwrite { SHOW_BRAND_WATERMARK?: boolean; SHOW_POWERED_BY?: boolean; SHOW_PROMOTIONAL_CLOSE_PAGE?: boolean; + /** @deprecated Use config.toolbarButtons instead */ TOOLBAR_BUTTONS?: ToolbarButton[]; SETTINGS_SECTIONS?: SettingsSection[]; VIDEO_LAYOUT_FIT?: 'both' | 'width' | 'height'; @@ -474,8 +968,44 @@ interface InterfaceConfigOverwrite { FILM_STRIP_MAX_HEIGHT?: number; MOBILE_APP_PROMO?: boolean; HIDE_INVITE_MORE_HEADER?: boolean; + /** @deprecated Use config.disabledSounds instead */ DISABLE_JOIN_LEAVE_NOTIFICATIONS?: boolean; DISABLE_VIDEO_BACKGROUND?: boolean; + DEFAULT_BACKGROUND?: string; + DEFAULT_WELCOME_PAGE_LOGO_URL?: string; + DEFAULT_LOGO_URL?: string; + JITSI_WATERMARK_LINK?: string; + BRAND_WATERMARK_LINK?: string; + APP_NAME?: string; + NATIVE_APP_NAME?: string; + PROVIDER_NAME?: string; + LANG_DETECTION?: boolean; + ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT?: number; + MAXIMUM_ZOOMING_COEFFICIENT?: number; + SUPPORT_URL?: string; + CONNECTION_INDICATOR_AUTO_HIDE_ENABLED?: boolean; + CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT?: number; + CONNECTION_INDICATOR_DISABLED?: boolean; + AUTO_PIN_LATEST_SCREEN_SHARE?: string; + DISABLE_FOCUS_INDICATOR?: boolean; + DISABLE_PRESENCE_STATUS?: boolean; + DISABLE_TRANSCRIPTION_SUBTITLES?: boolean; + DISABLE_RINGING?: boolean; + AUDIO_LEVEL_PRIMARY_COLOR?: string; + AUDIO_LEVEL_SECONDARY_COLOR?: string; + FILMSTRIP_MAX_HEIGHT?: number; + GENERATE_ROOMNAMES_ON_WELCOME_PAGE?: boolean; + HIDE_DEEP_LINKING_LOGO?: boolean; + INITIAL_TOOLBAR_TIMEOUT?: number; + TOOLBAR_TIMEOUT?: number; + TOOLBAR_ALWAYS_VISIBLE?: boolean; + LOCAL_THUMBNAIL_RATIO?: number; + REMOTE_THUMBNAIL_RATIO?: number; + LIVE_STREAMING_HELP_LINK?: string; + POLICY_LOGO?: string; + RECENT_LIST_ENABLED?: boolean; + SHOW_CHROME_EXTENSION_BANNER?: boolean; + VIDEO_QUALITY_LABEL_DISABLED?: boolean; [key: string]: unknown; } @@ -1278,21 +1808,26 @@ type ToolbarButton = | 'dock-iframe' | 'download' | 'embedmeeting' + | 'end-meeting' | 'etherpad' | 'feedback' | 'filmstrip' | 'fullscreen' | 'hangup' + | 'hangup-menu' | 'help' | 'highlight' | 'invite' | 'linktosalesforce' | 'livestreaming' | 'microphone' + | 'mute-everyone' + | 'mute-video-everyone' | 'noisesuppression' | 'participants-pane' | 'profile' | 'raisehand' + | 'reactions' | 'recording' | 'security' | 'select-background'