diff --git a/type/__jitsi_meet/manifest b/type/__jitsi_meet/manifest index 0c210a3..5b5a11e 100755 --- a/type/__jitsi_meet/manifest +++ b/type/__jitsi_meet/manifest @@ -195,15 +195,6 @@ upstream jvb1 { keepalive 2; } EOF -require="__directory${NGINX_ETC}/conf.d" __file "${NGINX_ETC}/conf.d/jicofo.conf" \ - --mode 644 \ - --source - << EOF -upstream jicofo { - zone upstreams 64K; - server 127.0.0.1:8888; - keepalive 2; -} -EOF if [ -f "${__object}/parameter/secured-domains" ]; then SECURED_DOMAINS_STATE='present' @@ -254,9 +245,6 @@ videobridge { enabled = true } } - cc { - trust-bwe = false - } } EOFJVB @@ -276,7 +264,7 @@ if [ -f "${__object}/parameter/disable-prometheus-exporter" ]; then else EXPORTER_STATE="present" fi -__single_binary_service prometheus-jitsi-meet-exporter \ +__evilham_single_binary_service prometheus-jitsi-meet-exporter \ --state "${EXPORTER_STATE}" \ --do-not-manage-user \ --user "nobody" \ diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 526af90..334d843 100755 --- a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh +++ b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh @@ -7,7 +7,7 @@ # We could automate this, but are using it as an indicator for the # latest branch with which we conciliated changes. -BRANCH="jitsi-meet_11031" +BRANCH="jitsi-meet_8319" REPO="https://github.com/jitsi/jitsi-meet" get_url() { diff --git a/type/__jitsi_meet_domain/files/config.js.sh b/type/__jitsi_meet_domain/files/config.js.sh index 8d8aa89..3c1cf1a 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -53,54 +53,27 @@ var config = { // BOSH URL. FIXME: use XEP-0156 to discover it. // useful for multidomain scenario -> src https://community.jitsi.org/t/same-jitsi-meet-instance-with-multiple-domain-names/17391/2 - bosh: 'https:///http-bind', + bosh: '///http-bind', - // Websocket URL (XMPP) - websocket: 'wss://${DOMAIN}/' + subdir + 'xmpp-websocket', - - // websocketKeepAliveUrl: 'https://${DOMAIN}/' + subdir + '_unlock', - - // Whether BOSH should be preferred over WebSocket if both are configured. - // preferBosh: false, + // Websocket URL + // websocket: 'wss://${DOMAIN}/xmpp-websocket', // The real JID of focus participant - can be overridden here // Do not change username - FIXME: Make focus username configurable // https://github.com/jitsi/jitsi-meet/issues/7376 focusUserJid: 'focus@auth.${JITSI_HOST}', - // Option to send conference requests to jicofo over http (requires nginx rule for it) - // conferenceRequestUrl: - // 'https:///' + subdir + 'conference-request/v1', - - // Options related to the bridge (colibri) data channel - bridgeChannel: { - // If the backend advertises multiple colibri websockets, this options allows - // to filter some of them out based on the domain name. We use the first URL - // which does not match ignoreDomain, falling back to the first one that matches - // ignoreDomain. Has no effect if undefined. - // ignoreDomain: 'example.com', - - // Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket. - // If SCTP is available in the backend it will be used instead of a WS. Defaults to - // false (SCTP is used only if available and no WS are available). - // preferSctp: false - }, // Testing / experimental features. // testing: { - // Allows the setting of a custom bandwidth value from the UI. - // assumeBandwidth: true, + // Disables the End to End Encryption feature. Useful for debugging + // issues related to insertable streams. + // disableE2EE: false, - // Enables use of getDisplayMedia in electron - // electronUseGetDisplayMedia: false, - - // Enables AV1 codec for FF. Note: By default it is disabled. - // enableAV1ForFF: false, - - // Enables the use of the codec selection API supported by the browsers . - // enableCodecSelectionAPI: false, + // Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users. + // mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users // P2P test mode disables automatic switching to P2P when there are 2 // participants in the conference. @@ -113,22 +86,10 @@ var config = { // This is useful when the client runs on a host with limited resources. // noAutoPlayVideo: false, - // Experiment: Whether to skip interim transcriptions. - // skipInterimTranscriptions: false, - - // Dump transcripts to a element for debugging. - // dumpTranscript: false, - - // Log the audio levels. - // debugAudioLevels: true, - - // Will replace ice candidates IPs with invalid ones in order to fail ice. - // failICE: true, - - // When running on Spot TV, this controls whether to show the recording consent dialog. - // If false (default), Spot instances will not show the recording consent dialog. - // If true, Spot instances will show the recording consent dialog like regular clients. - // showSpotConsentDialog: false, + // Enable callstats only for a percentage of users. + // This takes a value between 0 and 100 which determines the probability for + // the callstats to be enabled. + // callStatsThreshold: 5, // enable callstats for 5% of the users. }, // Disables moderator indicators. @@ -140,27 +101,15 @@ var config = { // Disables the reactions moderation feature. // disableReactionsModeration: false, - // Disables the reactions in chat feature. - disableReactionsInChat: true, // This has been annoying =D - // Disables polls feature. // disablePolls: false, - // Disables chat feature entirely including notifications, sounds, and private messages. - // disableChat: false, - - // Disables demote button from self-view - // disableSelfDemote: false, - // Disables self-view tile. (hides it from tile view and from filmstrip) // disableSelfView: false, // Disables self-view settings in UI // disableSelfViewSettings: false, - // Shows/hides the moderator setting for chat permissions. - // showChatPermissionsModeratorSetting: false, - // screenshotCapture : { // Enables the screensharing capture feature. // enabled: false, @@ -184,6 +133,9 @@ var config = { // Media // + // Enable unified plan implementation support on Chromium based browsers. + // enableUnifiedOnChrome: false, + // Audio // Disable measuring of audio levels. @@ -239,81 +191,14 @@ var config = { // enableOpusDtx: false, // }, - // Noise suppression configuration. By default rnnoise is used. Optionally Krisp - // can be used by enabling it below, but the Krisp JS SDK files must be supplied in your - // installation. Specifically, these files are needed: - // - https://meet.example.com/libs/krisp/krisp.mjs - // - https://meet.example.com/libs/krisp/models/model_8.kw - // - https://meet.example.com/libs/krisp/models/model_nc.kw - // - https://meet.example.com/libs/krisp/models/model_bvc.kw - // - https://meet.example.com/libs/krisp/assets/bvc-allowed.txt - // In case when you have known BVC supported devices and you want to extend allowed devices list - // - https://meet.example.com/libs/krisp/assets/bvc-allowed-ext.txt - // In case when you have known BVC supported devices and you want to extend allowed devices list - // - https://meet.example.com/libs/krisp/models/model_inbound_8.kw - // - https://meet.example.com/libs/krisp/models/model_inbound_16.kw - // In case when you want to use inbound noise suppression models - // NOTE: Krisp JS SDK v2.0.0 was tested. - // noiseSuppression: { - // krisp: { - // enabled: false, - // logProcessStats: false, - // debugLogs: false, - // useBVC: false, - // bufferOverflowMS: 1000, - // inboundModels: { - // modelInbound8: 'model_inbound_8.kef', - // modelInbound16: 'model_inbound_16.kef', - // }, - // preloadInboundModels: { - // modelInbound8: 'model_inbound_8.kef', - // modelInbound16: 'model_inbound_16.kef', - // }, - // preloadModels: { - // modelBVC: 'model_bvc.kef', - // model8: 'model_8.kef', - // modelNC: 'model_nc_mq.kef', - // }, - // models: { - // modelBVC: 'model_bvc.kef', - // model8: 'model_8.kef', - // modelNV: 'model_nc_mq.kef', - // }, - // bvc: { - // allowedDevices: 'bvc-allowed.txt', - // allowedDevicesExt: 'bvc-allowed-ext.txt', - // } - // }, - // }, - // Video - // Sets the default camera facing mode. - // cameraFacingMode: 'user', - // Sets the preferred resolution (height) for local video. Defaults to 720. // resolution: 720, - // DEPRECATED. Please use raisedHands.disableRemoveRaisedHandOnFocus instead. // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not // disableRemoveRaisedHandOnFocus: false, - // Specifies which raised hand related config should be set. - // raisedHands: { - // // Specifies whether the raised hand can be lowered by moderator. - // disableLowerHandByModerator: false, - - // // Specifies whether there is a notification before hiding the raised hand - // // when someone becomes the dominant speaker. - // disableLowerHandNotification: true, - - // // Specifies whether there is a notification when you are the next speaker in line. - // disableNextSpeakerNotification: false, - - // // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not. - // disableRemoveRaisedHandOnFocus: false, - // }, - // speakerStats: { // // Specifies whether the speaker stats is enable or not. // disabled: false, @@ -367,6 +252,12 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Enable / disable simulcast support. // disableSimulcast: false, + // 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. This is enabled by default. This must be enabled for screen + // sharing to work as expected on Chrome. Disabling this might result in low resolution screenshare being sent + // by the client. + // enableLayerSuspension: false, + // Every participant after the Nth will start video muted. startVideoMuted: ${START_VIDEO_MUTED}, @@ -377,28 +268,23 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Desktop sharing // Optional desktop sharing frame rate options. Default value: min:5, max:5. - // Setting higher min/max values will affect the resolution, it makes it worse. // desktopSharingFrameRate: { // min: 5, // max: 5, // }, - // Optional screenshare settings that give more control over screen capture in the browser. - // screenShareSettings: { - // // Show users the current tab is the preferred capture source, default: false. - // desktopPreferCurrentTab: false, - // // Allow users to select system audio, default: include. - // desktopSystemAudio: 'include', - // // Allow users to seamlessly switch which tab they are sharing without having to select the tab again. - // desktopSurfaceSwitching: 'include', - // // Allow a user to be shown a preference for what screen is to be captured, default: unset. - // desktopDisplaySurface: undefined, - // // Allow users to select the current tab as a capture source, default: exclude. - // desktopSelfBrowserSurface: 'exclude' - // }, + // This option has been deprecated since it is no longer supported as per the w3c spec. + // https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not + // interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the browser. This + // has already been implemented in Firefox and Safari and will be implemented in Chrome soon. + // https://bugs.chromium.org/p/chromium/issues/detail?id=1198918 + // startScreenSharing: false, // Recording + // DEPRECATED. Use recordingService.enabled instead. + // fileRecordingsEnabled: false, + // Enable the dropbox integration. // dropbox: { // appKey: '', // Specify your app key here. @@ -409,27 +295,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 'https://${DOMAIN}/subfolder/static/oauth.html', // }, - // configuration for all things recording related. Existing settings will be migrated here in the future. - // recordings: { - // // IF true (default) recording audio and video is selected by default in the recording dialog. - // // recordAudioAndVideo: true, - // // If true, shows a notification at the start of the meeting with a call to action button - // // to start recording (for users who can do so). - // // suggestRecording: true, - // // If true, shows a warning label in the prejoin screen to point out the possibility that - // // the call you're joining might be recorded. - // // showPrejoinWarning: true, - // // If true, the notification for recording start will display a link to download the cloud recording. - // // showRecordingLink: true, - // // If true, mutes audio and video when a recording begins and displays a dialog - // // explaining the effect of unmuting. - // // requireConsent: true, - // // If true consent will be skipped for users who are already in the meeting. - // // skipConsentInMeeting: true, - // // Link for the recording consent dialog's "Learn more" link. - // // consentLearnMoreLink: 'https://jitsi.org/meet/consent', - // }, - // recordingService: { // // When integrations like dropbox are enabled only that will be shown, // // by enabling fileRecordingsServiceEnabled, we show both the integrations @@ -490,7 +355,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // DEPRECATED. Use transcription.preferredLanguage instead. // preferredTranscribeLanguage: 'en-US', - // DEPRECATED. Use transcription.autoTranscribeOnRecord instead. + // DEPRECATED. Use transcription.autoCaptionOnRecord instead. // autoCaptionOnRecord: false, // Transcription options. @@ -500,10 +365,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // Translation languages. // // Available languages can be found in - // // ./lang/translation-languages.json. - // // Whether to enable translation (language selection) UI. Defaults to true. - // translationEnabled: true, - + // // ./src/react/features/transcribing/translation-languages.json. // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -522,31 +384,11 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // ./src/react/features/transcribing/transcriber-langs.json. // preferredLanguage: 'en-US', - // Allows extending the list of supported transcription languages. - // Useful for custom transcription backends (e.g. Vosk). - // - // Example: - // customLanguages: { - // 'hsb-DE': 'Upper Sorbian (Germany)', - // 'dsb-DE': 'Lower Sorbian (Germany)' - // }, - - // // Enables automatic turning on transcribing when recording is started - // autoTranscribeOnRecord: false, - - // // Enables automatic request of subtitles when transcriber is present in the meeting, uses the default - // // language that is set - // autoCaptionOnTranscribe: false, - // - // // Disables everything related to closed captions - the tab in the chat area, the button in the menu, - // // subtitles on stage and the "Show subtitles on stage" checkbox in the settings. - // // Note: Starting transcriptions from the recording dialog will still work. - // disableClosedCaptions: false, - // - // // When the backend provides diarization by setting a "speaker" field, append [Speaker N] for transcription - // // events from non-0 speakers. - // renderTranscriptDetails: false + // // Disable start transcription for all participants. + // disableStartForAll: false, + // // Enables automatic turning on captions when recording is started + // autoCaptionOnRecord: false, // }, // Misc @@ -568,69 +410,65 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // value will be used when the quality level is selected using "Manage Video Quality" slider. // startLastN: 1, + // Provides a way to use different "last N" values based on the number of participants in the conference. + // The keys in an Object represent number of participants and the values are "last N" to be used when number of + // participants gets to or above the number. + // + // For the given example mapping, "last N" will be set to 20 as long as there are at least 5, but less than + // 29 participants in the call and it will be lowered to 15 when the 30th participant joins. The 'channelLastN' + // will be used as default until the first threshold is reached. + // + // lastNLimits: { + // 5: 20, + // 30: 15, + // 50: 10, + // 70: 5, + // 90: 2, + // }, + // Specify the settings for video quality optimizations on the client. // videoQuality: { + // // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified + // // here will be removed from the list of codecs present in the SDP answer generated by the client. If the + // // same codec is specified for both the disabled and preferred option, the disable settings will prevail. + // // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case. + // disabledCodec: 'H264', // - // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ], + // // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here, + // // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only + // // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the + // // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this + // // to take effect. + // preferredCodec: 'VP8', // - // // Provides a way to set the codec for screenshare. - // screenshareCodec: 'AV1', - // mobileScreenshareCodec: 'VP8', + // // Provides a way to enforce the preferred codec for the conference even when the conference has endpoints + // // that do not support the preferred codec. For example, older versions of Safari do not support VP9 yet. + // // This will result in Safari not being able to decode video from endpoints sending VP9 video. + // // When set to false, the conference falls back to VP8 whenever there is an endpoint that doesn't support the + // // preferred codec and goes back to the preferred codec when that endpoint leaves. + // enforcePreferredCodec: false, // - // // Enables the adaptive mode in the client that will make runtime adjustments to selected codecs and received - // // videos for a better user experience. This mode will kick in only when CPU overuse is reported in the - // // WebRTC statistics for the outbound video streams. - // enableAdaptiveMode: false, - // - // // Codec specific settings for scalability modes and max bitrates. - // av1: { - // maxBitratesVideo: { - // low: 100000, - // standard: 300000, - // high: 1000000, - // fullHd: 2000000, - // ultraHd: 4000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true, - // useSimulcast: false, - // useKSVC: true - // }, - // h264: { - // maxBitratesVideo: { - // low: 200000, - // standard: 500000, - // high: 1500000, - // fullHd: 3000000, - // ultraHd: 6000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true - // }, - // vp8: { - // maxBitratesVideo: { - // low: 200000, - // standard: 500000, - // high: 1500000, - // fullHd: 3000000, - // ultraHd: 6000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: false - // }, - // vp9: { - // maxBitratesVideo: { - // low: 100000, - // standard: 300000, - // high: 1200000, - // fullHd: 2500000, - // ultraHd: 5000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true, - // useSimulcast: false, - // useKSVC: true + // // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for + // // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values + // // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on + // // the available bandwidth calculated by the browser, but it will be capped by the values specified here. + // // This is currently not implemented on app based clients on mobile. + // maxBitratesVideo: { + // H264: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // }, + // VP8 : { + // low: 200000, + // standard: 500000, + // high: 1500000, + // }, + // VP9: { + // low: 100000, + // standard: 300000, + // high: 1200000, + // }, // }, // // // The options can be used to override default thresholds of video thumbnail heights corresponding to @@ -648,8 +486,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 720: 'high', // }, // - // // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint - // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ], // }, // Notification timeouts @@ -657,8 +493,21 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // short: 2500, // medium: 5000, // long: 10000, - // extraLong: 60000, - // sticky: 0, + // }, + + // // Options for the recording limit notification. + // recordingLimit: { + // + // // The recording limit in minutes. Note: This number appears in the notification text + // // but doesn't enforce the actual recording time limit. This should be configured in + // // jibri! + // limit: 60, + // + // // The name of the app with unlimited recordings. + // appName: 'Unlimited recordings APP', + // + // // The URL of the app with unlimited recordings. + // appURL: 'https://unlimited.recordings.app.com/', // }, // Disables or enables RTX (RFC 4588) (defaults to false). @@ -673,6 +522,14 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Disables or enables REMB support in this client (default: enabled). // enableRemb: true, + // Enables ICE restart logic in LJM and displays the page reload overlay on + // ICE failure. Current disabled by default because it's causing issues with + // signaling when Octo is enabled. Also when we do an "ICE restart"(which is + // not a real ICE restart), the client maintains the TCC sequence number + // counter, but the bridge resets it. The bridge sends media packets with + // TCC sequence numbers starting from 0. + // enableIceRestart: false, + // Enables forced reload of the client when the call is migrated as a result of // the bridge going down. // enableForcedReload: true, @@ -712,9 +569,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Require users to always specify a display name. // requireDisplayName: true, - // Enables webhid functionality for Audio. - // enableWebHIDFeature: false, - // DEPRECATED! Use 'welcomePage.disabled' instead. // Whether to use a welcome page or not. In case it's false a random room // will be joined when no room is specified. @@ -725,18 +579,16 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // Whether to disable welcome page. In case it's disabled a random room // // will be joined when no room is specified. // disabled: false, - // // If set, landing page will redirect to this URL. + // // If set,landing page will redirect to this URL. // customUrl: '' // }, // Configs for the lobby screen. - // lobby: { + // lobby { // // If Lobby is enabled, it starts knocking automatically. Replaces \`autoKnockLobby\`. // autoKnock: false, // // Enables the lobby chat. Replaces \`enableLobbyChat\`. // enableChat: true, - // // Shows the hangup button in the lobby screen. - // showHangUp: true, // }, // Configs for the security related UI elements. @@ -776,7 +628,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. - // For iframe integrations, use the \`lang\` option directly instead. defaultLanguage: '${DEFAULT_LANGUAGE}', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -797,15 +648,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // and microsoftApiApplicationClientID // enableCalendarIntegration: false, - // Whether to notify when the conference is terminated because it was destroyed. - // notifyOnConferenceDestruction: true, - - // The client id for the google APIs used for the calendar integration, youtube livestreaming, etc. - // googleApiApplicationClientID: '', - // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. + // // This replaces \`prejoinPageEnabled\`. // enabled: true, // // Hides the participant name editing field in the prejoin screen. // // If requireDisplayName is also set as true, a name should still be provided through @@ -813,13 +659,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // hideDisplayName: false, // // List of buttons to hide from the extra join options dropdown. // hideExtraJoinButtons: ['no-audio', 'by-phone'], - // // Configuration for pre-call test - // // By setting preCallTestEnabled, you enable the pre-call test in the prejoin page. - // // ICE server credentials need to be provided over the preCallTestICEUrl - // preCallTestEnabled: false, - // preCallTestICEUrl: '', - // // Shows the hangup button in the lobby screen. - // showHangUp: true, // }, // When 'true', the user cannot edit the display name. @@ -838,6 +677,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // set or the lobby is not enabled. // enableInsecureRoomNameWarning: false, + // Whether to automatically copy invitation URL after creating a room. + // Document should be focused for this option to work + // enableAutomaticUrlCopy: false, + // Array with avatar URL prefixes that need to use CORS. // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ], @@ -864,7 +707,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // some other values in config.js to be enabled. Also, the "profile" button will // not display for users with a JWT. // Notes: - // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons + // - it's impossible to choose which buttons go in the "More actions" menu + // - it's impossible to control the placement of buttons // - 'desktop' controls the "Share your screen" button // - if \`toolbarButtons\` is undefined, we fallback to enabling all buttons on the UI // toolbarButtons: [ @@ -876,6 +720,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 'embedmeeting', // 'etherpad', // 'feedback', + // 'filmstrip', // 'fullscreen', // 'hangup', // 'help', @@ -915,34 +760,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // alwaysVisible: false, // // Indicates whether the toolbar should still autohide when chat is open // autoHideWhileChatIsOpen: false, - // // Default background color for the main toolbar. Accepts any valid CSS color. - // // backgroundColor: '#ffffff', // }, - // Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed - // buttons varies from 2 buttons to 8 buttons. Every array in the mainToolbarButtons array will replace the - // corresponding default buttons configuration matched by the number of buttons specified in the array. Arrays with - // more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a certain - // configuration (for example when 3 buttons are displayed) the default jitsi-meet configuration will be used. - // The order of the buttons in the array is preserved. - // mainToolbarButtons: [ - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'reactions', 'participants-pane', 'tileview' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane', 'tileview' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'participants-pane' ], - // [ 'microphone', 'camera', 'chat', 'participants-pane' ], - // [ 'microphone', 'camera', 'chat' ], - // [ 'microphone', 'camera' ] - // ], - - // Enable reduced UI on web. - // reducedUIEnabled: true, - - // Overrides the buttons displayed in the main toolbar for reduced UI. - // When there isn't an override for a certain configuration the default jitsi-meet configuration will be used. - // The order of the buttons in the array is preserved. - // reducedUImainToolbarButtons: [ 'microphone', 'camera' ], - // Toolbar buttons which have their click/tap event exposed through the API on // \`toolbarButtonClicked\`. Passing a string for the button key will // prevent execution of the click/tap routine; passing an object with \`key\` and @@ -1003,42 +822,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 'whiteboard', // ], - // Participant context menu buttons which have their click/tap event exposed through the API on - // \`participantMenuButtonClick\`. Passing a string for the button key will - // prevent execution of the click/tap routine; passing an object with \`key\` and - // \`preventExecution\` flag on false will not prevent execution of the click/tap - // routine. Below array with mixed mode for passing the buttons. - // participantMenuButtonsWithNotifyClick: [ - // 'allow-video', - // { - // key: 'ask-unmute', - // preventExecution: false - // }, - // 'conn-status', - // 'flip-local-video', - // 'grant-moderator', - // { - // key: 'kick', - // preventExecution: true - // }, - // { - // key: 'hide-self-view', - // preventExecution: false - // }, - // 'mute', - // 'mute-others', - // 'mute-others-video', - // 'mute-video', - // 'pinToStage', - // 'privateMessage', - // { - // key: 'remote-control', - // preventExecution: false - // }, - // 'send-participant-to-room', - // 'verify', - // ], - // List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons: // 'microphone', 'camera', 'select-background', 'invite', 'settings' // hiddenPremeetingButtons: [], @@ -1048,7 +831,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // customParticipantMenuButtons: [], // An array with custom option buttons for the toolbar - // type: Array<{ icon: string; id: string; text: string; backgroundColor?: string; }> + // type: Array<{ icon: string; id: string; text: string; }> // customToolbarButtons: [], // Stats @@ -1063,10 +846,38 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // The interval at which PeerConnection.getStats() is called. Defaults to 10000 // pcStatsInterval: 10000, - // Enables sending participants' display names to stats + // To enable sending statistics to callstats.io you must provide the + // Application ID and Secret. + // callStatsID: '', + // callStatsSecret: '', + // callStatsApplicationLogsDisabled: false, + + // The callstats initialize config params as described in the API: + // https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret + // callStatsConfigParams: { + // disableBeforeUnloadHandler: true, // disables callstats.js's window.onbeforeunload parameter. + // applicationVersion: "app_version", // Application version specified by the developer. + // disablePrecalltest: true, // disables the pre-call test, it is enabled by default. + // siteID: "siteID", // The name/ID of the site/campus from where the call/pre-call test is made. + // additionalIDs: { // additionalIDs object, contains application related IDs. + // customerID: "Customer Identifier. Example, walmart.", + // tenantID: "Tenant Identifier. Example, monster.", + // productName: "Product Name. Example, Jitsi.", + // meetingsName: "Meeting Name. Example, Jitsi loves callstats.", + // serverName: "Server/MiddleBox Name. Example, jvb-prod-us-east-mlkncws12.", + // pbxID: "PBX Identifier. Example, walmart.", + // pbxExtensionID: "PBX Extension Identifier. Example, 5625.", + // fqExtensionID: "Fully qualified Extension Identifier. Example, +71 (US) +5625.", + // sessionID: "Session Identifier. Example, session-12-34", + // }, + // collectLegacyStats: true, //enables the collection of legacy stats in chrome browser + // collectIP: true, //enables the collection localIP address + // }, + + // Enables sending participants' display names to callstats // enableDisplayNameInStats: false, - // Enables sending participants' emails (if available) to stats and other analytics + // Enables sending participants' emails (if available) to callstats and other analytics // enableEmailInStats: false, // faceLandmarks: { @@ -1089,7 +900,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // captureInterval: 1000, // }, - // Controls the percentage of automatic feedback shown to participants. + // Controls the percentage of automatic feedback shown to participants when callstats is enabled. // The default value is 100%. If set to 0, no automatic feedback will be requested // feedbackPercentage: 100, @@ -1097,7 +908,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // If third party requests are disabled, no other server will be contacted. - // This means avatars will be locally generated and external stats integration + // This means avatars will be locally generated and callstats integration // will not function. disableThirdPartyRequests: $(if [ -z "${ENABLE_THIRD_PARTY_REQUESTS}" ]; then printf "true"; else printf "false"; fi), @@ -1114,6 +925,9 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // connection. enabled: true, + // Enable unified plan implementation support on Chromium for p2p connection. + // enableUnifiedOnChrome: false, + // 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 @@ -1122,16 +936,12 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // If not set, the effective value is 'all'. // iceTransportPolicy: 'all', - // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based - // endpoints. - // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ], - // - // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ], + // Provides a way to set the video codec preference on the p2p connection. Acceptable + // codec values are 'VP8', 'VP9' and 'H264'. + // preferredCodec: 'H264', - // Provides a way to set the codec for screenshare. - // screenshareCodec: 'AV1', - // mobileScreenshareCodec: 'VP8', + // Provides a way to prevent a video codec from being negotiated on the p2p connection. + // disabledCodec: '', // 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). @@ -1150,6 +960,9 @@ ${ANALYTICS_SETTINGS} // True if the analytics should be disabled // disabled: false, + // The Google Analytics Tracking ID: + // googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1', + // Matomo configuration: // matomoEndpoint: 'https://your-matomo-endpoint/', // matomoSiteID: '42', @@ -1183,13 +996,9 @@ ${ANALYTICS_SETTINGS} // Array of script URLs to load as lib-jitsi-meet "analytics handlers". // scriptURLs: [ + // "libs/analytics-ga.min.js", // google-analytics // "https://example.com/my-custom-analytics.js", // ], - - // By enabling watchRTCEnabled option you would want to use watchRTC feature - // This would also require to configure watchRTCConfigParams. - // Please remember to keep rtcstatsEnabled disabled for watchRTC to work. - // watchRTCEnabled: false, }, // Logs that should go be passed through the 'log' event if a handler is defined for it @@ -1225,7 +1034,7 @@ ${ANALYTICS_SETTINGS} // - 'RECORDING_OFF_SOUND' // - 'RECORDING_ON_SOUND' // - 'TALK_WHILE_MUTED_SOUND' - disabledSounds: ['REACTION_SOUND'], // This is actually intrusive + // disabledSounds: [], // DEPRECATED! Use \`disabledSounds\` instead. // Decides whether the start/stop recording audio notifications should play on record. @@ -1261,14 +1070,8 @@ ${ANALYTICS_SETTINGS} // }, // e2ee: { - // labels: { - // description: '', - // label: '', - // tooltip: '', - // warning: '', - // }, + // labels, // externallyManagedKey: false, - // disabled: false, // }, // Options related to end-to-end (participant to participant) ping. @@ -1300,19 +1103,14 @@ ${ANALYTICS_SETTINGS} // disableDeepLinking: false, // The deeplinking config. + // For information about the properties of + // deeplinking.[ios/android].dynamicLink check: + // https://firebase.google.com/docs/dynamic-links/create-manually // deeplinking: { // - // // The desktop deeplinking config, disabled by default. + // // The desktop deeplinking config. // desktop: { - // appName: 'Jitsi Meet', - // appScheme: 'jitsi-meet, - // download: { - // linux: - // 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet-x86_64.AppImage', - // macos: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.dmg', - // windows: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.exe' - // }, - // enabled: false + // appName: 'Jitsi Meet' // }, // // If true, any checks to handoff to another application will be prevented // // and instead the app will continue to display in the current browser. @@ -1328,6 +1126,13 @@ ${ANALYTICS_SETTINGS} // appScheme: 'org.jitsi.meet', // // Custom URL for downloading ios mobile app. // downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905', + // dynamicLink: { + // apn: 'org.jitsi.meet', + // appCode: 'w2atb', + // customDomain: undefined, + // ibi: 'com.atlassian.JitsiMeet.ios', + // isi: '1165103905' + // } // }, // // The android deeplinking config. @@ -1340,20 +1145,16 @@ ${ANALYTICS_SETTINGS} // // Android app package name. // appPackage: 'org.jitsi.meet', // fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/', + // dynamicLink: { + // apn: 'org.jitsi.meet', + // appCode: 'w2atb', + // customDomain: undefined, + // ibi: 'com.atlassian.JitsiMeet.ios', + // isi: '1165103905' + // } // } // }, - // // The terms, privacy and help centre URL's. - // // TODO: Check and set these up - legalUrls: { - helpCentre: '', - privacy: '', - terms: '' - // helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html', - // privacy: 'https://jitsi.org/meet/privacy', - // terms: 'https://jitsi.org/meet/terms' - }, - // 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: false, @@ -1385,35 +1186,37 @@ ${ANALYTICS_SETTINGS} // remoteVideoMenu: { // // Whether the remote video context menu to be rendered or not. // disabled: true, - // // If set to true the 'Switch to visitor' button will be disabled. - // disableDemote: true, // // If set to true the 'Kick out' button will be disabled. // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. // disableGrantModerator: true, - // // If set to 'all' the 'Private chat' button will be disabled for all participants. - // // If set to 'allow-moderator-chat' the 'Private chat' button will be available for chats with moderators. - // // If set to 'disable-visitor-chat' the 'Private chat' button will be disabled for visitor-main participant - // // conversations. - // disablePrivateChat: 'all' | 'allow-moderator-chat' | 'disable-visitor-chat', + // // If set to true the 'Send private message' button will be disabled. + // disablePrivateChat: true, // }, + // Endpoint that enables support for salesforce integration with in-meeting resource linking + // This is required for: + // listing the most recent records - salesforceUrl/records/recents + // searching records - salesforceUrl/records?text=\${text} + // retrieving record details - salesforceUrl/records/\${id}?type=\${type} + // and linking the meeting - salesforceUrl/sessions/\${sessionId}/records/\${id} + // + // salesforceUrl: 'https://api.example.com/', // If set to true all muting operations of remote participants will be disabled. // disableRemoteMute: true, + // Enables support for lip-sync for this client (if the browser supports it). + // enableLipSync: false, + /** External API url used to receive branding specific information. If there is no url set or there are missing fields, the defaults are applied. The config file should be in JSON. None of the fields are mandatory and the response must have the shape: { - // Whether participant can only send group chat message if \`send-groupchat\` feature is enabled in jwt. - groupChatRequiresPermission: false, - // Whether participant can only create polls if \`create-polls\` feature is enabled in jwt. - pollCreationRequiresPermission: false, // The domain url to apply (will replace the domain in the sharing conference link/embed section) - inviteDomain: 'example-company.org', + inviteDomain: 'example-company.org, // The hex value for the colour used as background backgroundColor: '#fff', // The url for the image used as background @@ -1422,13 +1225,6 @@ ${ANALYTICS_SETTINGS} logoClickUrl: 'https://example-company.org', // The url used for the image used as logo logoImageUrl: 'https://example.com/logo-img.png', - // Endpoint that enables support for salesforce integration with in-meeting resource linking - // This is required for: - // listing the most recent records - salesforceUrl/records/recents - // searching records - salesforceUrl/records?text=${text} - // retrieving record details - salesforceUrl/records/${id}?type=${type} - // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} - // salesforceUrl: 'https://api.example.com/', // Overwrite for pool of background images for avatars avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'], // The lobby/prejoin screen background @@ -1436,16 +1232,6 @@ ${ANALYTICS_SETTINGS} // A list of images that can be used as video backgrounds. // When this field is present, the default images will be replaced with those provided. virtualBackgrounds: ['https://example.com/img.jpg'], - // Object containing customized icons that should replace the default ones. - // The keys need to be the exact same icon names used in here: - // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/icons/svg/index.ts - // To avoid having the icons trimmed or displayed in an unexpected way, please provide svg - // files containing svg xml icons in the size that the default icons come in. - customIcons: { - IconArrowUp: 'https://example.com/arrow-up.svg', - IconDownload: 'https://example.com/download.svg', - IconRemoteControlStart: 'https://example.com/remote-start.svg', - }, // Object containing a theme's properties. It also supports partial overwrites of the main theme. // For a list of all possible theme tokens and their current defaults, please check: // https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json @@ -1461,6 +1247,7 @@ ${ANALYTICS_SETTINGS} ui03: "violet", ui04: "magenta", ui05: "blueviolet", + field02Hover: 'red', action01: 'green', action01Hover: 'lightgreen', disabled01: 'beige', @@ -1479,17 +1266,8 @@ ${ANALYTICS_SETTINGS} */ dynamicBrandingUrl: "${DYNAMIC_BRANDING_URL}", - // A list of allowed URL domains for shared video. - // - // NOTE: - // '*' is allowed value and it will allow any URL to be used for shared video. We do not recommend using '*', - // use it at your own risk! - // sharedVideoAllowedURLDomains: [ ], - // Options related to the participants pane. // participantsPane: { - // // Enables feature - // enabled: true, // // Hides the moderator settings tab. // hideModeratorSettingsTab: false, // // Hides the more actions button. @@ -1508,80 +1286,15 @@ ${ANALYTICS_SETTINGS} // hideJoinRoomButton: false, // }, - // Sets the background transparency level. '0' is fully transparent, '1' is opaque. - // backgroundAlpha: 1, - - // @deprecated Use \`virtualBackground.disabled\` instead. When true, the virtual background - // feature is disabled. Kept here for backwards compatibility; will be removed in a future release. - // disableVirtualBackground: false, - - // @deprecated Use \`virtualBackground.disableAddingImages\` instead. When true the user cannot - // add more images to be used as virtual background; only the default ones will be available. - // Kept here for backwards compatibility; will be removed in a future release. + // When true the user cannot add more images to be used as virtual background. + // Only the default ones from will be available. // disableAddingBackgroundImages: false, - // Virtual background options. - // All fields are optional; omitting a field uses the default/auto-detected value. - virtualBackground: { + // Disables using screensharing as virtual background. + // disableScreensharingVirtualBackground: false, - // When true, virtual background feature will be disabled. - // disabled: false, - - // When true the user cannot add more images to be used as virtual background. - // Only the default ones will be available. - // disableAddingImages: false, - - // Enable the V2 processing engine. When false (default), the legacy - // TFLite WASM engine (V1) is used. Set to true to opt in to V2. - // enableV2: false, - - // V2-only tuning knobs. These have no effect when enableV2 is false. Defaults are - // tuned for typical hardware; most deployments should not need to override them. - // advanced: { - - // // Force a specific device tier regardless of what the browser supports. - // // Useful for testing lower-tier behaviour on high-end hardware. - // // Values: 'high' | 'medium' | 'low' — null means auto-detect (default). - // // tierOverride: null, - - // // Override the segmentation canvas dimensions (pixels). Applies to MEDIUM - // // and HIGH tiers only (TF.js input canvas). LOW tier (TFLite) always runs - // // at 256x144, fixed by the selfie_segmentation_landscape model and not - // // affected by this setting. - // // segmentationWidth: null, // auto: 512 (high) / 384 (medium) - // // segmentationHeight: null, // auto: 288 (high) / 216 (medium) - - // // Override the target frame rate for the effect. - // // targetFps: null, // auto: 30 (all tiers) - - // // Temporal mask blend ratio (0-1). Higher = smoother motion, slower to respond - // // to fast movement. 0 = raw mask each frame (no temporal smoothing). - // // temporalBlendRatio: 0.75, - - // // Smoothstep edge thresholds for the WebGL compositor (0-1). - // // Pixels with segmentation confidence below edgeLow are fully transparent; - // // above edgeHigh they are fully opaque; between the two they feather. - // // Defaults are tier-specific (tuned per model's confidence distribution): - // // LOW tier (TFLite selfie_segmentation_landscape): edgeLow = 0.10, edgeHigh = 0.50 - // // MEDIUM/HIGH (TF.js MediaPipe body-segmentation): edgeLow = 0.28, edgeHigh = 0.65 - // // Lower edgeLow = more hair retained at the cost of slight background bleed. - // // Higher edgeHigh = harder edge transition. - // // edgeLow: 0.28, - // // edgeHigh: 0.65, - - // // Insertable Streams (MediaStreamTrackProcessor/Generator) is used by default - // // when available. It reduces latency by ~1-2 frames and eliminates the keepalive - // // Web Worker. Set to false to force the legacy captureStream path instead. - // // useInsertableStreams: false, - - // // LOW tier (TFLite) inference stride. Inference is skipped on alternate frames; - // // skipped frames reuse the previous mask. Higher values = lower CPU usage at the - // // cost of reduced mask update frequency. Set to 1 to run inference every frame. - // // 1 = every frame (24 fps mask updates, ~37 ms slack per frame) ← default - // // 2 = every 2 frames (12 fps mask updates, ~74 ms slack per frame) - // // inferenceStride: 1, - // }, - }, + // Sets the background transparency level. '0' is fully transparent, '1' is opaque. + // backgroundAlpha: 1, // The URL of the moderated rooms microservice, if available. If it // is present, a link to the service will be rendered on the welcome page, @@ -1606,6 +1319,7 @@ ${ANALYTICS_SETTINGS} // 'conference-timer', // 'participants-count', // 'e2ee', + // 'transcribing', // 'video-quality', // 'insecure-room', // 'highlight-moment', @@ -1649,94 +1363,28 @@ ${ANALYTICS_SETTINGS} // dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in // or the other way around (more info in resources/cloud-api.swagger) - // You can use external service for authentication that will redirect back passing a jwt token - // You can use tokenAuthUrl config to point to a URL of such service. - // The URL for the service supports few params which will be filled in by the code. - // tokenAuthUrl: - // 'https://myservice.com/auth/{room}?code_challenge_method=S256&code_challenge={code_challenge}&state={state}' - // Supported parameters in tokenAuthUrl: - // {room} - will be replaced with the room name - // {code_challenge} - (A web only). A oauth 2.0 code challenge that will be sent to the service. See: - // https://datatracker.ietf.org/doc/html/rfc7636. The code verifier will be saved in the sessionStorage - // under key: 'code_verifier'. - // {state} - A json with the current state before redirecting. Keys that are included in the state: - // - room (The current room name as shown in the address bar) - // - roomSafe (the backend safe room name to use (lowercase), that is passed to the backend) - // - tenant (The tenant if any) - // - config.xxx (all config overrides) - // - interfaceConfig.xxx (all interfaceConfig overrides) - // - ios=true (in case ios mobile app is used) - // - android=true (in case android mobile app is used) - // - electron=true (when web is loaded in electron app) - // If there is a logout service you can specify its URL with: - // tokenLogoutUrl: 'https://myservice.com/logout' - // An option to respect the context.tenant jwt field compared to the current tenant from the url - // tokenRespectTenant: false, - // An option to get for user info (name, picture, email) in the token outside the user context. - // Can be used with Firebase tokens. - // tokenGetUserInfoOutOfContext: false, - // An option to pass the token in the iframe API directly instead of using the redirect flow. - // tokenAuthInline: false, - - // You can put an array of values to target different entity types in the invite dialog. - // Valid values are "phone", "room", "sip", "user", "videosipgw" and "email" - // peopleSearchQueryTypes: ["user", "email"], - // Directory endpoint which is called for invite dialog autocomplete - // peopleSearchUrl: "https://myservice.com/api/people", - // Endpoint which is called to send invitation requests - // inviteServiceUrl: "https://myservice.com/api/invite", - - // For external entities (e. g. email), the localStorage key holding the token value for directory authentication - // peopleSearchTokenLocation: "mytoken", - - - // Options related to visitors. - // visitors: { - // // Starts audio/video when the participant is promoted from visitor. - // enableMediaOnPromote: { - // audio: true, - // video: true - // }, - // // Hides the visitor count for visitors. - // // hideVisitorCountForVisitors: false, - // // Whether to show the join meeting dialog when joining as a visitor. - // // showJoinMeetingDialog: true, - // }, - // The default type of desktop sharing sources that will be used in the electron app. - // desktopSharingSources: ['screen', 'window'], - - // Disables the echo cancelation for local audio tracks. - // disableAEC: true, - - // Disables the auto gain control for local audio tracks. - // disableAGC: true, - - // Disables the audio processing (echo cancelation, auto gain control and noise suppression) for local audio tracks. - // disableAP: true, - - // Disables the anoise suppression for local audio tracks. - // disableNS: true, - - // Replaces the display name with the JID of the participants. - // displayJids: true, - - // Enables disables talk while muted detection. - // enableTalkWhileMuted: true, - - // Sets the peer connection ICE transport policy to "relay". - // forceTurnRelay: true, - // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold + debug + debugAudioLevels deploymentInfo dialOutAuthUrl dialOutCodesUrl dialOutRegionUrl disableRemoteControl + displayJids + externalConnectUrl + e2eeLabels + firefox_fake_device + googleApiApplicationClientID iAmRecorder iAmSipGateway microsoftApiApplicationClientID + peopleSearchQueryTypes + peopleSearchUrl + requireDisplayName + tokenAuthUrl */ /** @@ -1750,9 +1398,19 @@ ${ANALYTICS_SETTINGS} /** _peerConnStatusOutOfLastNTimeout _peerConnStatusRtcMuteTimeout + abTesting avgRtpStatsN + callStatsConfIDNamespace + callStatsCustomScriptUrl desktopSharingSources - disableLocalStats + disableAEC + disableAGC + disableAP + disableHPF + disableNS + enableTalkWhileMuted + forceJVB121Ratio + forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled ignoreStartMuted @@ -1775,7 +1433,6 @@ ${ANALYTICS_SETTINGS} */ // notifications: [ // 'connection.CONNFAIL', // shown when the connection fails, - // 'dialog.cameraConstraintFailedError', // shown when the camera failed // 'dialog.cameraNotSendingData', // shown when there's no feed from user's camera // 'dialog.kickTitle', // shown when user has been kicked // 'dialog.liveStreaming', // livestreaming notifications (pending, on, off, limits) @@ -1786,12 +1443,10 @@ ${ANALYTICS_SETTINGS} // 'dialog.recording', // recording notifications (pending, on, off, limits) // 'dialog.remoteControlTitle', // remote control notifications (allowed, denied, start, stop, error) // 'dialog.reservationError', - // 'dialog.screenSharingFailedTitle', // shown when the screen sharing failed // 'dialog.serviceUnavailable', // shown when server is not reachable // 'dialog.sessTerminated', // shown when there is a failed conference session // 'dialog.sessionRestarted', // show when a client reload is initiated because of bridge migration // 'dialog.tokenAuthFailed', // show when an invalid jwt is used - // 'dialog.tokenAuthFailedWithReasons', // show when an invalid jwt is used with the reason behind the error // 'dialog.transcribing', // transcribing notifications (pending, off) // 'dialOut.statusMessage', // shown when dial out status is updated. // 'liveStreaming.busy', // shown when livestreaming service is busy @@ -1799,45 +1454,37 @@ ${ANALYTICS_SETTINGS} // 'liveStreaming.unavailableTitle', // shown when livestreaming service is not reachable // 'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected // 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied - // 'notify.audioUnmuteBlockedTitle', // shown when mic unmute blocked // 'notify.chatMessages', // shown when receiving chat messages while the chat window is closed + // 'notify.disconnected', // shown when a participant has left // 'notify.connectedOneMember', // show when a participant joined - // 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously // 'notify.connectedTwoMembers', // show when two participants joined simultaneously - // 'notify.dataChannelClosed', // shown when the bridge channel has been disconnected + // 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously + // 'notify.leftOneMember', // show when a participant left + // 'notify.leftTwoMembers', // show when two participants left simultaneously + // 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously + // 'notify.grantedTo', // shown when moderator rights were granted to a participant // 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute // 'notify.invitedOneMember', // shown when 1 participant has been invited // 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited // 'notify.invitedTwoMembers', // shown when 2 participants have been invited // 'notify.kickParticipant', // shown when a participant is kicked - // 'notify.leftOneMember', // show when a participant left - // 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously - // 'notify.leftTwoMembers', // show when two participants left simultaneously // 'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration - // 'notify.localRecordingStarted', // shown when the local recording has been started - // 'notify.localRecordingStopped', // shown when the local recording has been stopped - // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation + // 'notify.moderationStartedTitle', // shown when AV moderation is activated + // 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated // 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation // 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation - // 'notify.moderator', // shown when user gets moderator privilege + // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation // 'notify.mutedRemotelyTitle', // shown when user is muted by a remote party // 'notify.mutedTitle', // shown when user has been muted upon joining, // 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device // 'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera - // 'notify.noiseSuppressionFailedTitle', // shown when failed to start noise suppression // 'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting - // 'notify.participantsWantToJoin', // shown when lobby is enabled and participants request to join meeting // 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely // 'notify.passwordSetRemotely', // shown when a password has been set remotely - // 'notify.raisedHand', // shown when a participant used raise hand, - // 'notify.screenShareNoAudio', // shown when the audio could not be shared for the selected screen - // 'notify.screenSharingAudioOnlyTitle', // shown when the best performance has been affected by screen sharing - // 'notify.selfViewTitle', // show "You can always un-hide the self-view from settings" + // 'notify.raisedHand', // shown when a partcipant used raise hand, // 'notify.startSilentTitle', // shown when user joined with no audio - // 'notify.suboptimalExperienceTitle', // show the browser warning // 'notify.unmute', // shown to moderator when user raises hand during AV moderation // 'notify.videoMutedRemotelyTitle', // shown when user's video is muted by a remote party, - // 'notify.videoUnmuteBlockedTitle', // shown when camera unmute and desktop sharing are blocked // 'prejoin.errorDialOut', // 'prejoin.errorDialOutDisconnected', // 'prejoin.errorDialOutFailed', @@ -1850,15 +1497,16 @@ ${ANALYTICS_SETTINGS} // 'toolbar.noAudioSignalTitle', // shown when a broken mic is detected // 'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone // 'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted - // 'transcribing.failed', // shown when transcribing fails + // 'transcribing.failedToStart', // shown when transcribing fails to start // ], // List of notifications to be disabled. Works in tandem with the above setting. // disabledNotifications: [], + // Prevent the filmstrip from autohiding when screen width is under a certain threshold + // disableFilmstripAutohiding: false, + // filmstrip: { - // // Disable the vertical/horizontal filmstrip. - // disabled: false, // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip // // (width, tiles aspect ratios) through the interfaceConfig options. // disableResizable: false, @@ -1877,19 +1525,10 @@ ${ANALYTICS_SETTINGS} // // The minimum number of participants that must be in the call for // // the top panel layout to be used. // minParticipantCountForTopPanel: 50, - - // // The width of the filmstrip on joining meeting. Can be resized afterwards. - // initialWidth: 400, - - // // Whether the draggable resize bar of the filmstrip is always visible. Setting this to true will make - // // the filmstrip always visible in case \`disableResizable\` is false. - // alwaysShowResizeBar: true, // }, // Tile view related config options. // tileView: { - // // Whether tileview should be disabled. - // disabled: false, // // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may // // not be possible to show the exact number of participants specified here. // numberOfVisibleTiles: 25, @@ -1913,20 +1552,22 @@ ${ANALYTICS_SETTINGS} // tileTime: 5000, // // Limit results by rating: g, pg, pg-13, r. Default value: g. // rating: 'pg', + // // The proxy server url for giphy requests in the web app. + // proxyUrl: 'https://giphy-proxy.example.com', // }, // Logging // logging: { // // Default log level for the app and lib-jitsi-meet. // defaultLogLevel: 'trace', - // // Option to disable LogCollector. + // // Option to disable LogCollector (which stores the logs on CallStats). // //disableLogCollector: true, // // Individual loggers are customizable. // loggers: { - // // The following are too verbose in their logging with the default level. - // 'modules/RTC/TraceablePeerConnection.js': 'info', - // 'modules/xmpp/strophe.util.js': 'log', - // }, + // // The following are too verbose in their logging with the default level. + // 'modules/RTC/TraceablePeerConnection.js': 'info', + // 'modules/statistics/CallStats.js': 'info', + // 'modules/xmpp/strophe.util.js': 'log', // }, // Application logo url @@ -1939,68 +1580,15 @@ ${ANALYTICS_SETTINGS} // // The server used to support whiteboard collaboration. // // https://github.com/jitsi/excalidraw-backend // collabServerBaseUrl: 'https://excalidraw-backend.example.com', - // // The user access limit to the whiteboard, introduced as a means - // // to control the performance. - // userLimit: 25, - // // The url for more info about the whiteboard and its usage limitations. - // limitUrl: 'https://example.com/blog/whiteboard-limits', - - // //Backend URL for storing whiteboard scenes and images - // //This backend service handles scene persistence and file uploads - // storageBackendUrl: 'https://excalidraw-s3-storage-backend.example.com', - // }, - - // The watchRTC initialize config params as described : - // https://testrtc.com/docs/installing-the-watchrtc-javascript-sdk/#h-set-up-the-sdk - // https://www.npmjs.com/package/@testrtc/watchrtc-sdk - // watchRTCConfigParams: { - // /** Watchrtc api key */ - // rtcApiKey: string; - // /** Identifier for the session */ - // rtcRoomId?: string; - // /** Identifier for the current peer */ - // rtcPeerId?: string; - // /** - // * ["tag1", "tag2", "tag3"] - // * @deprecated use 'keys' instead - // */ - // rtcTags?: string[]; - // /** { "key1": "value1", "key2": "value2"} */ - // keys?: any; - // /** Enables additional logging */ - // debug?: boolean; - // rtcToken?: string; - // /** - // * @deprecated No longer needed. Use "proxyUrl" instead. - // */ - // wsUrl?: string; - // proxyUrl?: string; - // console?: { - // level: string; - // override: boolean; - // }; - // allowBrowserLogCollection?: boolean; - // collectionInterval?: number; - // logGetStats?: boolean; - // }, - - // Hide login button on auth dialog, you may want to enable this if you are using JWT tokens to authenticate users - // hideLoginButton: true, - - // If true remove the tint foreground on focused user camera in filmstrip - // disableCameraTintForeground: false, - - // File sharign service. - // fileSharing: { - // // The URL of the file sharing service API. See resources/file-sharing.yaml for more details. - // apiUrl: 'https://example.com', - // // Whether the file sharing service is enabled or not. - // enabled: true, - // // Maximum file size limit (-1 value disables any file size limit check) - // maxFileSize: 50, // }, }; +// Temporary backwards compatibility with old mobile clients. +config.flags = config.flags || {}; +config.flags.sourceNameSignaling = true; +config.flags.sendMultipleVideoStreams = true; +config.flags.receiveMultipleVideoStreams = true; + // Set the default values for JaaS customers if (enableJaaS) { config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids'; diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index bc5ecc8..422d2f1 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -46,54 +46,27 @@ var config = { }, // BOSH URL. FIXME: use XEP-0156 to discover it. - bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind', + bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind', - // Websocket URL (XMPP) - websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket', - - // websocketKeepAliveUrl: 'https://jitsi-meet.example.com/' + subdir + '_unlock', - - // Whether BOSH should be preferred over WebSocket if both are configured. - // preferBosh: false, + // Websocket URL + // websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket', // The real JID of focus participant - can be overridden here // Do not change username - FIXME: Make focus username configurable // https://github.com/jitsi/jitsi-meet/issues/7376 // focusUserJid: 'focus@auth.jitsi-meet.example.com', - // Option to send conference requests to jicofo over http (requires nginx rule for it) - // conferenceRequestUrl: - // 'https:///' + subdir + 'conference-request/v1', - - // Options related to the bridge (colibri) data channel - bridgeChannel: { - // If the backend advertises multiple colibri websockets, this options allows - // to filter some of them out based on the domain name. We use the first URL - // which does not match ignoreDomain, falling back to the first one that matches - // ignoreDomain. Has no effect if undefined. - // ignoreDomain: 'example.com', - - // Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket. - // If SCTP is available in the backend it will be used instead of a WS. Defaults to - // false (SCTP is used only if available and no WS are available). - // preferSctp: false - }, // Testing / experimental features. // testing: { - // Allows the setting of a custom bandwidth value from the UI. - // assumeBandwidth: true, + // Disables the End to End Encryption feature. Useful for debugging + // issues related to insertable streams. + // disableE2EE: false, - // Enables use of getDisplayMedia in electron - // electronUseGetDisplayMedia: false, - - // Enables AV1 codec for FF. Note: By default it is disabled. - // enableAV1ForFF: false, - - // Enables the use of the codec selection API supported by the browsers . - // enableCodecSelectionAPI: false, + // Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users. + // mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users // P2P test mode disables automatic switching to P2P when there are 2 // participants in the conference. @@ -106,22 +79,10 @@ var config = { // This is useful when the client runs on a host with limited resources. // noAutoPlayVideo: false, - // Experiment: Whether to skip interim transcriptions. - // skipInterimTranscriptions: false, - - // Dump transcripts to a element for debugging. - // dumpTranscript: false, - - // Log the audio levels. - // debugAudioLevels: true, - - // Will replace ice candidates IPs with invalid ones in order to fail ice. - // failICE: true, - - // When running on Spot TV, this controls whether to show the recording consent dialog. - // If false (default), Spot instances will not show the recording consent dialog. - // If true, Spot instances will show the recording consent dialog like regular clients. - // showSpotConsentDialog: false, + // Enable callstats only for a percentage of users. + // This takes a value between 0 and 100 which determines the probability for + // the callstats to be enabled. + // callStatsThreshold: 5, // enable callstats for 5% of the users. }, // Disables moderator indicators. @@ -133,27 +94,15 @@ var config = { // Disables the reactions moderation feature. // disableReactionsModeration: false, - // Disables the reactions in chat feature. - // disableReactionsInChat: false, - // Disables polls feature. // disablePolls: false, - // Disables chat feature entirely including notifications, sounds, and private messages. - // disableChat: false, - - // Disables demote button from self-view - // disableSelfDemote: false, - // Disables self-view tile. (hides it from tile view and from filmstrip) // disableSelfView: false, // Disables self-view settings in UI // disableSelfViewSettings: false, - // Shows/hides the moderator setting for chat permissions. - // showChatPermissionsModeratorSetting: false, - // screenshotCapture : { // Enables the screensharing capture feature. // enabled: false, @@ -177,6 +126,9 @@ var config = { // Media // + // Enable unified plan implementation support on Chromium based browsers. + // enableUnifiedOnChrome: false, + // Audio // Disable measuring of audio levels. @@ -232,81 +184,14 @@ var config = { // enableOpusDtx: false, // }, - // Noise suppression configuration. By default rnnoise is used. Optionally Krisp - // can be used by enabling it below, but the Krisp JS SDK files must be supplied in your - // installation. Specifically, these files are needed: - // - https://meet.example.com/libs/krisp/krisp.mjs - // - https://meet.example.com/libs/krisp/models/model_8.kw - // - https://meet.example.com/libs/krisp/models/model_nc.kw - // - https://meet.example.com/libs/krisp/models/model_bvc.kw - // - https://meet.example.com/libs/krisp/assets/bvc-allowed.txt - // In case when you have known BVC supported devices and you want to extend allowed devices list - // - https://meet.example.com/libs/krisp/assets/bvc-allowed-ext.txt - // In case when you have known BVC supported devices and you want to extend allowed devices list - // - https://meet.example.com/libs/krisp/models/model_inbound_8.kw - // - https://meet.example.com/libs/krisp/models/model_inbound_16.kw - // In case when you want to use inbound noise suppression models - // NOTE: Krisp JS SDK v2.0.0 was tested. - // noiseSuppression: { - // krisp: { - // enabled: false, - // logProcessStats: false, - // debugLogs: false, - // useBVC: false, - // bufferOverflowMS: 1000, - // inboundModels: { - // modelInbound8: 'model_inbound_8.kef', - // modelInbound16: 'model_inbound_16.kef', - // }, - // preloadInboundModels: { - // modelInbound8: 'model_inbound_8.kef', - // modelInbound16: 'model_inbound_16.kef', - // }, - // preloadModels: { - // modelBVC: 'model_bvc.kef', - // model8: 'model_8.kef', - // modelNC: 'model_nc_mq.kef', - // }, - // models: { - // modelBVC: 'model_bvc.kef', - // model8: 'model_8.kef', - // modelNV: 'model_nc_mq.kef', - // }, - // bvc: { - // allowedDevices: 'bvc-allowed.txt', - // allowedDevicesExt: 'bvc-allowed-ext.txt', - // } - // }, - // }, - // Video - // Sets the default camera facing mode. - // cameraFacingMode: 'user', - // Sets the preferred resolution (height) for local video. Defaults to 720. // resolution: 720, - // DEPRECATED. Please use raisedHands.disableRemoveRaisedHandOnFocus instead. // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not // disableRemoveRaisedHandOnFocus: false, - // Specifies which raised hand related config should be set. - // raisedHands: { - // // Specifies whether the raised hand can be lowered by moderator. - // disableLowerHandByModerator: false, - - // // Specifies whether there is a notification before hiding the raised hand - // // when someone becomes the dominant speaker. - // disableLowerHandNotification: true, - - // // Specifies whether there is a notification when you are the next speaker in line. - // disableNextSpeakerNotification: false, - - // // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not. - // disableRemoveRaisedHandOnFocus: false, - // }, - // speakerStats: { // // Specifies whether the speaker stats is enable or not. // disabled: false, @@ -359,6 +244,12 @@ var config = { // Enable / disable simulcast support. // disableSimulcast: false, + // 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. This is enabled by default. This must be enabled for screen + // sharing to work as expected on Chrome. Disabling this might result in low resolution screenshare being sent + // by the client. + // enableLayerSuspension: false, + // Every participant after the Nth will start video muted. // startVideoMuted: 10, @@ -369,28 +260,23 @@ var config = { // Desktop sharing // Optional desktop sharing frame rate options. Default value: min:5, max:5. - // Setting higher min/max values will affect the resolution, it makes it worse. // desktopSharingFrameRate: { // min: 5, // max: 5, // }, - // Optional screenshare settings that give more control over screen capture in the browser. - // screenShareSettings: { - // // Show users the current tab is the preferred capture source, default: false. - // desktopPreferCurrentTab: false, - // // Allow users to select system audio, default: include. - // desktopSystemAudio: 'include', - // // Allow users to seamlessly switch which tab they are sharing without having to select the tab again. - // desktopSurfaceSwitching: 'include', - // // Allow a user to be shown a preference for what screen is to be captured, default: unset. - // desktopDisplaySurface: undefined, - // // Allow users to select the current tab as a capture source, default: exclude. - // desktopSelfBrowserSurface: 'exclude' - // }, + // This option has been deprecated since it is no longer supported as per the w3c spec. + // https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not + // interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the browser. This + // has already been implemented in Firefox and Safari and will be implemented in Chrome soon. + // https://bugs.chromium.org/p/chromium/issues/detail?id=1198918 + // startScreenSharing: false, // Recording + // DEPRECATED. Use recordingService.enabled instead. + // fileRecordingsEnabled: false, + // Enable the dropbox integration. // dropbox: { // appKey: '', // Specify your app key here. @@ -401,27 +287,6 @@ var config = { // 'https://jitsi-meet.example.com/subfolder/static/oauth.html', // }, - // configuration for all things recording related. Existing settings will be migrated here in the future. - // recordings: { - // // IF true (default) recording audio and video is selected by default in the recording dialog. - // // recordAudioAndVideo: true, - // // If true, shows a notification at the start of the meeting with a call to action button - // // to start recording (for users who can do so). - // // suggestRecording: true, - // // If true, shows a warning label in the prejoin screen to point out the possibility that - // // the call you're joining might be recorded. - // // showPrejoinWarning: true, - // // If true, the notification for recording start will display a link to download the cloud recording. - // // showRecordingLink: true, - // // If true, mutes audio and video when a recording begins and displays a dialog - // // explaining the effect of unmuting. - // // requireConsent: true, - // // If true consent will be skipped for users who are already in the meeting. - // // skipConsentInMeeting: true, - // // Link for the recording consent dialog's "Learn more" link. - // // consentLearnMoreLink: 'https://jitsi.org/meet/consent', - // }, - // recordingService: { // // When integrations like dropbox are enabled only that will be shown, // // by enabling fileRecordingsServiceEnabled, we show both the integrations @@ -482,7 +347,7 @@ var config = { // DEPRECATED. Use transcription.preferredLanguage instead. // preferredTranscribeLanguage: 'en-US', - // DEPRECATED. Use transcription.autoTranscribeOnRecord instead. + // DEPRECATED. Use transcription.autoCaptionOnRecord instead. // autoCaptionOnRecord: false, // Transcription options. @@ -492,10 +357,7 @@ var config = { // // Translation languages. // // Available languages can be found in - // // ./lang/translation-languages.json. - // // Whether to enable translation (language selection) UI. Defaults to true. - // translationEnabled: true, - + // // ./src/react/features/transcribing/translation-languages.json. // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -514,31 +376,11 @@ var config = { // // ./src/react/features/transcribing/transcriber-langs.json. // preferredLanguage: 'en-US', - // Allows extending the list of supported transcription languages. - // Useful for custom transcription backends (e.g. Vosk). - // - // Example: - // customLanguages: { - // 'hsb-DE': 'Upper Sorbian (Germany)', - // 'dsb-DE': 'Lower Sorbian (Germany)' - // }, - - // // Enables automatic turning on transcribing when recording is started - // autoTranscribeOnRecord: false, - - // // Enables automatic request of subtitles when transcriber is present in the meeting, uses the default - // // language that is set - // autoCaptionOnTranscribe: false, - // - // // Disables everything related to closed captions - the tab in the chat area, the button in the menu, - // // subtitles on stage and the "Show subtitles on stage" checkbox in the settings. - // // Note: Starting transcriptions from the recording dialog will still work. - // disableClosedCaptions: false, - // - // // When the backend provides diarization by setting a "speaker" field, append [Speaker N] for transcription - // // events from non-0 speakers. - // renderTranscriptDetails: false + // // Disable start transcription for all participants. + // disableStartForAll: false, + // // Enables automatic turning on captions when recording is started + // autoCaptionOnRecord: false, // }, // Misc @@ -560,69 +402,65 @@ var config = { // value will be used when the quality level is selected using "Manage Video Quality" slider. // startLastN: 1, + // Provides a way to use different "last N" values based on the number of participants in the conference. + // The keys in an Object represent number of participants and the values are "last N" to be used when number of + // participants gets to or above the number. + // + // For the given example mapping, "last N" will be set to 20 as long as there are at least 5, but less than + // 29 participants in the call and it will be lowered to 15 when the 30th participant joins. The 'channelLastN' + // will be used as default until the first threshold is reached. + // + // lastNLimits: { + // 5: 20, + // 30: 15, + // 50: 10, + // 70: 5, + // 90: 2, + // }, + // Specify the settings for video quality optimizations on the client. // videoQuality: { + // // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified + // // here will be removed from the list of codecs present in the SDP answer generated by the client. If the + // // same codec is specified for both the disabled and preferred option, the disable settings will prevail. + // // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case. + // disabledCodec: 'H264', // - // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ], + // // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here, + // // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only + // // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the + // // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this + // // to take effect. + // preferredCodec: 'VP8', // - // // Provides a way to set the codec for screenshare. - // screenshareCodec: 'AV1', - // mobileScreenshareCodec: 'VP8', + // // Provides a way to enforce the preferred codec for the conference even when the conference has endpoints + // // that do not support the preferred codec. For example, older versions of Safari do not support VP9 yet. + // // This will result in Safari not being able to decode video from endpoints sending VP9 video. + // // When set to false, the conference falls back to VP8 whenever there is an endpoint that doesn't support the + // // preferred codec and goes back to the preferred codec when that endpoint leaves. + // enforcePreferredCodec: false, // - // // Enables the adaptive mode in the client that will make runtime adjustments to selected codecs and received - // // videos for a better user experience. This mode will kick in only when CPU overuse is reported in the - // // WebRTC statistics for the outbound video streams. - // enableAdaptiveMode: false, - // - // // Codec specific settings for scalability modes and max bitrates. - // av1: { - // maxBitratesVideo: { - // low: 100000, - // standard: 300000, - // high: 1000000, - // fullHd: 2000000, - // ultraHd: 4000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true, - // useSimulcast: false, - // useKSVC: true - // }, - // h264: { - // maxBitratesVideo: { - // low: 200000, - // standard: 500000, - // high: 1500000, - // fullHd: 3000000, - // ultraHd: 6000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true - // }, - // vp8: { - // maxBitratesVideo: { - // low: 200000, - // standard: 500000, - // high: 1500000, - // fullHd: 3000000, - // ultraHd: 6000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: false - // }, - // vp9: { - // maxBitratesVideo: { - // low: 100000, - // standard: 300000, - // high: 1200000, - // fullHd: 2500000, - // ultraHd: 5000000, - // ssHigh: 2500000 - // }, - // scalabilityModeEnabled: true, - // useSimulcast: false, - // useKSVC: true + // // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for + // // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values + // // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on + // // the available bandwidth calculated by the browser, but it will be capped by the values specified here. + // // This is currently not implemented on app based clients on mobile. + // maxBitratesVideo: { + // H264: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // }, + // VP8 : { + // low: 200000, + // standard: 500000, + // high: 1500000, + // }, + // VP9: { + // low: 100000, + // standard: 300000, + // high: 1200000, + // }, // }, // // // The options can be used to override default thresholds of video thumbnail heights corresponding to @@ -640,8 +478,6 @@ var config = { // 720: 'high', // }, // - // // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint - // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ], // }, // Notification timeouts @@ -649,8 +485,21 @@ var config = { // short: 2500, // medium: 5000, // long: 10000, - // extraLong: 60000, - // sticky: 0, + // }, + + // // Options for the recording limit notification. + // recordingLimit: { + // + // // The recording limit in minutes. Note: This number appears in the notification text + // // but doesn't enforce the actual recording time limit. This should be configured in + // // jibri! + // limit: 60, + // + // // The name of the app with unlimited recordings. + // appName: 'Unlimited recordings APP', + // + // // The URL of the app with unlimited recordings. + // appURL: 'https://unlimited.recordings.app.com/', // }, // Disables or enables RTX (RFC 4588) (defaults to false). @@ -665,6 +514,14 @@ var config = { // Disables or enables REMB support in this client (default: enabled). // enableRemb: true, + // Enables ICE restart logic in LJM and displays the page reload overlay on + // ICE failure. Current disabled by default because it's causing issues with + // signaling when Octo is enabled. Also when we do an "ICE restart"(which is + // not a real ICE restart), the client maintains the TCC sequence number + // counter, but the bridge resets it. The bridge sends media packets with + // TCC sequence numbers starting from 0. + // enableIceRestart: false, + // Enables forced reload of the client when the call is migrated as a result of // the bridge going down. // enableForcedReload: true, @@ -704,9 +561,6 @@ var config = { // Require users to always specify a display name. // requireDisplayName: true, - // Enables webhid functionality for Audio. - // enableWebHIDFeature: false, - // DEPRECATED! Use 'welcomePage.disabled' instead. // Whether to use a welcome page or not. In case it's false a random room // will be joined when no room is specified. @@ -717,18 +571,16 @@ var config = { // // Whether to disable welcome page. In case it's disabled a random room // // will be joined when no room is specified. // disabled: false, - // // If set, landing page will redirect to this URL. + // // If set,landing page will redirect to this URL. // customUrl: '' // }, // Configs for the lobby screen. - // lobby: { + // lobby { // // If Lobby is enabled, it starts knocking automatically. Replaces `autoKnockLobby`. // autoKnock: false, // // Enables the lobby chat. Replaces `enableLobbyChat`. // enableChat: true, - // // Shows the hangup button in the lobby screen. - // showHangUp: true, // }, // Configs for the security related UI elements. @@ -768,7 +620,6 @@ var config = { // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. - // For iframe integrations, use the `lang` option directly instead. // defaultLanguage: 'en', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -789,15 +640,10 @@ var config = { // and microsoftApiApplicationClientID // enableCalendarIntegration: false, - // Whether to notify when the conference is terminated because it was destroyed. - // notifyOnConferenceDestruction: true, - - // The client id for the google APIs used for the calendar integration, youtube livestreaming, etc. - // googleApiApplicationClientID: '', - // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. + // // This replaces `prejoinPageEnabled`. // enabled: true, // // Hides the participant name editing field in the prejoin screen. // // If requireDisplayName is also set as true, a name should still be provided through @@ -805,13 +651,6 @@ var config = { // hideDisplayName: false, // // List of buttons to hide from the extra join options dropdown. // hideExtraJoinButtons: ['no-audio', 'by-phone'], - // // Configuration for pre-call test - // // By setting preCallTestEnabled, you enable the pre-call test in the prejoin page. - // // ICE server credentials need to be provided over the preCallTestICEUrl - // preCallTestEnabled: false, - // preCallTestICEUrl: '', - // // Shows the hangup button in the lobby screen. - // showHangUp: true, // }, // When 'true', the user cannot edit the display name. @@ -830,6 +669,10 @@ var config = { // set or the lobby is not enabled. // enableInsecureRoomNameWarning: false, + // Whether to automatically copy invitation URL after creating a room. + // Document should be focused for this option to work + // enableAutomaticUrlCopy: false, + // Array with avatar URL prefixes that need to use CORS. // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ], @@ -856,7 +699,8 @@ var config = { // some other values in config.js to be enabled. Also, the "profile" button will // not display for users with a JWT. // Notes: - // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons + // - it's impossible to choose which buttons go in the "More actions" menu + // - it's impossible to control the placement of buttons // - 'desktop' controls the "Share your screen" button // - if `toolbarButtons` is undefined, we fallback to enabling all buttons on the UI // toolbarButtons: [ @@ -868,6 +712,7 @@ var config = { // 'embedmeeting', // 'etherpad', // 'feedback', + // 'filmstrip', // 'fullscreen', // 'hangup', // 'help', @@ -907,34 +752,8 @@ var config = { // alwaysVisible: false, // // Indicates whether the toolbar should still autohide when chat is open // autoHideWhileChatIsOpen: false, - // // Default background color for the main toolbar. Accepts any valid CSS color. - // // backgroundColor: '#ffffff', // }, - // Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed - // buttons varies from 2 buttons to 8 buttons. Every array in the mainToolbarButtons array will replace the - // corresponding default buttons configuration matched by the number of buttons specified in the array. Arrays with - // more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a certain - // configuration (for example when 3 buttons are displayed) the default jitsi-meet configuration will be used. - // The order of the buttons in the array is preserved. - // mainToolbarButtons: [ - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'reactions', 'participants-pane', 'tileview' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane', 'tileview' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane' ], - // [ 'microphone', 'camera', 'desktop', 'chat', 'participants-pane' ], - // [ 'microphone', 'camera', 'chat', 'participants-pane' ], - // [ 'microphone', 'camera', 'chat' ], - // [ 'microphone', 'camera' ] - // ], - - // Enable reduced UI on web. - // reducedUIEnabled: true, - - // Overrides the buttons displayed in the main toolbar for reduced UI. - // When there isn't an override for a certain configuration the default jitsi-meet configuration will be used. - // The order of the buttons in the array is preserved. - // reducedUImainToolbarButtons: [ 'microphone', 'camera' ], - // Toolbar buttons which have their click/tap event exposed through the API on // `toolbarButtonClicked`. Passing a string for the button key will // prevent execution of the click/tap routine; passing an object with `key` and @@ -995,42 +814,6 @@ var config = { // 'whiteboard', // ], - // Participant context menu buttons which have their click/tap event exposed through the API on - // `participantMenuButtonClick`. Passing a string for the button key will - // prevent execution of the click/tap routine; passing an object with `key` and - // `preventExecution` flag on false will not prevent execution of the click/tap - // routine. Below array with mixed mode for passing the buttons. - // participantMenuButtonsWithNotifyClick: [ - // 'allow-video', - // { - // key: 'ask-unmute', - // preventExecution: false - // }, - // 'conn-status', - // 'flip-local-video', - // 'grant-moderator', - // { - // key: 'kick', - // preventExecution: true - // }, - // { - // key: 'hide-self-view', - // preventExecution: false - // }, - // 'mute', - // 'mute-others', - // 'mute-others-video', - // 'mute-video', - // 'pinToStage', - // 'privateMessage', - // { - // key: 'remote-control', - // preventExecution: false - // }, - // 'send-participant-to-room', - // 'verify', - // ], - // List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons: // 'microphone', 'camera', 'select-background', 'invite', 'settings' // hiddenPremeetingButtons: [], @@ -1040,7 +823,7 @@ var config = { // customParticipantMenuButtons: [], // An array with custom option buttons for the toolbar - // type: Array<{ icon: string; id: string; text: string; backgroundColor?: string; }> + // type: Array<{ icon: string; id: string; text: string; }> // customToolbarButtons: [], // Stats @@ -1055,10 +838,38 @@ var config = { // The interval at which PeerConnection.getStats() is called. Defaults to 10000 // pcStatsInterval: 10000, - // Enables sending participants' display names to stats + // To enable sending statistics to callstats.io you must provide the + // Application ID and Secret. + // callStatsID: '', + // callStatsSecret: '', + // callStatsApplicationLogsDisabled: false, + + // The callstats initialize config params as described in the API: + // https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret + // callStatsConfigParams: { + // disableBeforeUnloadHandler: true, // disables callstats.js's window.onbeforeunload parameter. + // applicationVersion: "app_version", // Application version specified by the developer. + // disablePrecalltest: true, // disables the pre-call test, it is enabled by default. + // siteID: "siteID", // The name/ID of the site/campus from where the call/pre-call test is made. + // additionalIDs: { // additionalIDs object, contains application related IDs. + // customerID: "Customer Identifier. Example, walmart.", + // tenantID: "Tenant Identifier. Example, monster.", + // productName: "Product Name. Example, Jitsi.", + // meetingsName: "Meeting Name. Example, Jitsi loves callstats.", + // serverName: "Server/MiddleBox Name. Example, jvb-prod-us-east-mlkncws12.", + // pbxID: "PBX Identifier. Example, walmart.", + // pbxExtensionID: "PBX Extension Identifier. Example, 5625.", + // fqExtensionID: "Fully qualified Extension Identifier. Example, +71 (US) +5625.", + // sessionID: "Session Identifier. Example, session-12-34", + // }, + // collectLegacyStats: true, //enables the collection of legacy stats in chrome browser + // collectIP: true, //enables the collection localIP address + // }, + + // Enables sending participants' display names to callstats // enableDisplayNameInStats: false, - // Enables sending participants' emails (if available) to stats and other analytics + // Enables sending participants' emails (if available) to callstats and other analytics // enableEmailInStats: false, // faceLandmarks: { @@ -1081,7 +892,7 @@ var config = { // captureInterval: 1000, // }, - // Controls the percentage of automatic feedback shown to participants. + // Controls the percentage of automatic feedback shown to participants when callstats is enabled. // The default value is 100%. If set to 0, no automatic feedback will be requested // feedbackPercentage: 100, @@ -1089,7 +900,7 @@ var config = { // // If third party requests are disabled, no other server will be contacted. - // This means avatars will be locally generated and external stats integration + // This means avatars will be locally generated and callstats integration // will not function. // disableThirdPartyRequests: false, @@ -1106,6 +917,9 @@ var config = { // connection. enabled: true, + // Enable unified plan implementation support on Chromium for p2p connection. + // enableUnifiedOnChrome: false, + // 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 @@ -1114,16 +928,12 @@ var config = { // If not set, the effective value is 'all'. // iceTransportPolicy: 'all', - // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based - // endpoints. - // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ], - // - // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ], + // Provides a way to set the video codec preference on the p2p connection. Acceptable + // codec values are 'VP8', 'VP9' and 'H264'. + // preferredCodec: 'H264', - // Provides a way to set the codec for screenshare. - // screenshareCodec: 'AV1', - // mobileScreenshareCodec: 'VP8', + // Provides a way to prevent a video codec from being negotiated on the p2p connection. + // disabledCodec: '', // 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). @@ -1141,6 +951,9 @@ var config = { // True if the analytics should be disabled // disabled: false, + // The Google Analytics Tracking ID: + // googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1', + // Matomo configuration: // matomoEndpoint: 'https://your-matomo-endpoint/', // matomoSiteID: '42', @@ -1174,13 +987,9 @@ var config = { // Array of script URLs to load as lib-jitsi-meet "analytics handlers". // scriptURLs: [ + // "libs/analytics-ga.min.js", // google-analytics // "https://example.com/my-custom-analytics.js", // ], - - // By enabling watchRTCEnabled option you would want to use watchRTC feature - // This would also require to configure watchRTCConfigParams. - // Please remember to keep rtcstatsEnabled disabled for watchRTC to work. - // watchRTCEnabled: false, }, // Logs that should go be passed through the 'log' event if a handler is defined for it @@ -1252,14 +1061,8 @@ var config = { // }, // e2ee: { - // labels: { - // description: '', - // label: '', - // tooltip: '', - // warning: '', - // }, + // labels, // externallyManagedKey: false, - // disabled: false, // }, // Options related to end-to-end (participant to participant) ping. @@ -1291,19 +1094,14 @@ var config = { // disableDeepLinking: false, // The deeplinking config. + // For information about the properties of + // deeplinking.[ios/android].dynamicLink check: + // https://firebase.google.com/docs/dynamic-links/create-manually // deeplinking: { // - // // The desktop deeplinking config, disabled by default. + // // The desktop deeplinking config. // desktop: { - // appName: 'Jitsi Meet', - // appScheme: 'jitsi-meet, - // download: { - // linux: - // 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet-x86_64.AppImage', - // macos: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.dmg', - // windows: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.exe' - // }, - // enabled: false + // appName: 'Jitsi Meet' // }, // // If true, any checks to handoff to another application will be prevented // // and instead the app will continue to display in the current browser. @@ -1319,6 +1117,13 @@ var config = { // appScheme: 'org.jitsi.meet', // // Custom URL for downloading ios mobile app. // downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905', + // dynamicLink: { + // apn: 'org.jitsi.meet', + // appCode: 'w2atb', + // customDomain: undefined, + // ibi: 'com.atlassian.JitsiMeet.ios', + // isi: '1165103905' + // } // }, // // The android deeplinking config. @@ -1331,16 +1136,16 @@ var config = { // // Android app package name. // appPackage: 'org.jitsi.meet', // fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/', + // dynamicLink: { + // apn: 'org.jitsi.meet', + // appCode: 'w2atb', + // customDomain: undefined, + // ibi: 'com.atlassian.JitsiMeet.ios', + // isi: '1165103905' + // } // } // }, - // // The terms, privacy and help centre URL's. - // legalUrls: { - // helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html', - // privacy: 'https://jitsi.org/meet/privacy', - // terms: 'https://jitsi.org/meet/terms' - // }, - // 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: false, @@ -1372,35 +1177,37 @@ var config = { // remoteVideoMenu: { // // Whether the remote video context menu to be rendered or not. // disabled: true, - // // If set to true the 'Switch to visitor' button will be disabled. - // disableDemote: true, // // If set to true the 'Kick out' button will be disabled. // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. // disableGrantModerator: true, - // // If set to 'all' the 'Private chat' button will be disabled for all participants. - // // If set to 'allow-moderator-chat' the 'Private chat' button will be available for chats with moderators. - // // If set to 'disable-visitor-chat' the 'Private chat' button will be disabled for visitor-main participant - // // conversations. - // disablePrivateChat: 'all' | 'allow-moderator-chat' | 'disable-visitor-chat', + // // If set to true the 'Send private message' button will be disabled. + // disablePrivateChat: true, // }, + // Endpoint that enables support for salesforce integration with in-meeting resource linking + // This is required for: + // listing the most recent records - salesforceUrl/records/recents + // searching records - salesforceUrl/records?text=${text} + // retrieving record details - salesforceUrl/records/${id}?type=${type} + // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} + // + // salesforceUrl: 'https://api.example.com/', // If set to true all muting operations of remote participants will be disabled. // disableRemoteMute: true, + // Enables support for lip-sync for this client (if the browser supports it). + // enableLipSync: false, + /** External API url used to receive branding specific information. If there is no url set or there are missing fields, the defaults are applied. The config file should be in JSON. None of the fields are mandatory and the response must have the shape: { - // Whether participant can only send group chat message if `send-groupchat` feature is enabled in jwt. - groupChatRequiresPermission: false, - // Whether participant can only create polls if `create-polls` feature is enabled in jwt. - pollCreationRequiresPermission: false, // The domain url to apply (will replace the domain in the sharing conference link/embed section) - inviteDomain: 'example-company.org', + inviteDomain: 'example-company.org, // The hex value for the colour used as background backgroundColor: '#fff', // The url for the image used as background @@ -1409,13 +1216,6 @@ var config = { logoClickUrl: 'https://example-company.org', // The url used for the image used as logo logoImageUrl: 'https://example.com/logo-img.png', - // Endpoint that enables support for salesforce integration with in-meeting resource linking - // This is required for: - // listing the most recent records - salesforceUrl/records/recents - // searching records - salesforceUrl/records?text=${text} - // retrieving record details - salesforceUrl/records/${id}?type=${type} - // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id} - // salesforceUrl: 'https://api.example.com/', // Overwrite for pool of background images for avatars avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'], // The lobby/prejoin screen background @@ -1423,16 +1223,6 @@ var config = { // A list of images that can be used as video backgrounds. // When this field is present, the default images will be replaced with those provided. virtualBackgrounds: ['https://example.com/img.jpg'], - // Object containing customized icons that should replace the default ones. - // The keys need to be the exact same icon names used in here: - // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/icons/svg/index.ts - // To avoid having the icons trimmed or displayed in an unexpected way, please provide svg - // files containing svg xml icons in the size that the default icons come in. - customIcons: { - IconArrowUp: 'https://example.com/arrow-up.svg', - IconDownload: 'https://example.com/download.svg', - IconRemoteControlStart: 'https://example.com/remote-start.svg', - }, // Object containing a theme's properties. It also supports partial overwrites of the main theme. // For a list of all possible theme tokens and their current defaults, please check: // https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json @@ -1448,6 +1238,7 @@ var config = { ui03: "violet", ui04: "magenta", ui05: "blueviolet", + field02Hover: 'red', action01: 'green', action01Hover: 'lightgreen', disabled01: 'beige', @@ -1466,17 +1257,8 @@ var config = { */ // dynamicBrandingUrl: '', - // A list of allowed URL domains for shared video. - // - // NOTE: - // '*' is allowed value and it will allow any URL to be used for shared video. We do not recommend using '*', - // use it at your own risk! - // sharedVideoAllowedURLDomains: [ ], - // Options related to the participants pane. // participantsPane: { - // // Enables feature - // enabled: true, // // Hides the moderator settings tab. // hideModeratorSettingsTab: false, // // Hides the more actions button. @@ -1495,80 +1277,15 @@ var config = { // hideJoinRoomButton: false, // }, - // Sets the background transparency level. '0' is fully transparent, '1' is opaque. - // backgroundAlpha: 1, - - // @deprecated Use `virtualBackground.disabled` instead. When true, the virtual background - // feature is disabled. Kept here for backwards compatibility; will be removed in a future release. - // disableVirtualBackground: false, - - // @deprecated Use `virtualBackground.disableAddingImages` instead. When true the user cannot - // add more images to be used as virtual background; only the default ones will be available. - // Kept here for backwards compatibility; will be removed in a future release. + // When true the user cannot add more images to be used as virtual background. + // Only the default ones from will be available. // disableAddingBackgroundImages: false, - // Virtual background options. - // All fields are optional; omitting a field uses the default/auto-detected value. - virtualBackground: { + // Disables using screensharing as virtual background. + // disableScreensharingVirtualBackground: false, - // When true, virtual background feature will be disabled. - // disabled: false, - - // When true the user cannot add more images to be used as virtual background. - // Only the default ones will be available. - // disableAddingImages: false, - - // Enable the V2 processing engine. When false (default), the legacy - // TFLite WASM engine (V1) is used. Set to true to opt in to V2. - // enableV2: false, - - // V2-only tuning knobs. These have no effect when enableV2 is false. Defaults are - // tuned for typical hardware; most deployments should not need to override them. - // advanced: { - - // // Force a specific device tier regardless of what the browser supports. - // // Useful for testing lower-tier behaviour on high-end hardware. - // // Values: 'high' | 'medium' | 'low' — null means auto-detect (default). - // // tierOverride: null, - - // // Override the segmentation canvas dimensions (pixels). Applies to MEDIUM - // // and HIGH tiers only (TF.js input canvas). LOW tier (TFLite) always runs - // // at 256x144, fixed by the selfie_segmentation_landscape model and not - // // affected by this setting. - // // segmentationWidth: null, // auto: 512 (high) / 384 (medium) - // // segmentationHeight: null, // auto: 288 (high) / 216 (medium) - - // // Override the target frame rate for the effect. - // // targetFps: null, // auto: 30 (all tiers) - - // // Temporal mask blend ratio (0-1). Higher = smoother motion, slower to respond - // // to fast movement. 0 = raw mask each frame (no temporal smoothing). - // // temporalBlendRatio: 0.75, - - // // Smoothstep edge thresholds for the WebGL compositor (0-1). - // // Pixels with segmentation confidence below edgeLow are fully transparent; - // // above edgeHigh they are fully opaque; between the two they feather. - // // Defaults are tier-specific (tuned per model's confidence distribution): - // // LOW tier (TFLite selfie_segmentation_landscape): edgeLow = 0.10, edgeHigh = 0.50 - // // MEDIUM/HIGH (TF.js MediaPipe body-segmentation): edgeLow = 0.28, edgeHigh = 0.65 - // // Lower edgeLow = more hair retained at the cost of slight background bleed. - // // Higher edgeHigh = harder edge transition. - // // edgeLow: 0.28, - // // edgeHigh: 0.65, - - // // Insertable Streams (MediaStreamTrackProcessor/Generator) is used by default - // // when available. It reduces latency by ~1-2 frames and eliminates the keepalive - // // Web Worker. Set to false to force the legacy captureStream path instead. - // // useInsertableStreams: false, - - // // LOW tier (TFLite) inference stride. Inference is skipped on alternate frames; - // // skipped frames reuse the previous mask. Higher values = lower CPU usage at the - // // cost of reduced mask update frequency. Set to 1 to run inference every frame. - // // 1 = every frame (24 fps mask updates, ~37 ms slack per frame) ← default - // // 2 = every 2 frames (12 fps mask updates, ~74 ms slack per frame) - // // inferenceStride: 1, - // }, - }, + // Sets the background transparency level. '0' is fully transparent, '1' is opaque. + // backgroundAlpha: 1, // The URL of the moderated rooms microservice, if available. If it // is present, a link to the service will be rendered on the welcome page, @@ -1593,6 +1310,7 @@ var config = { // 'conference-timer', // 'participants-count', // 'e2ee', + // 'transcribing', // 'video-quality', // 'insecure-room', // 'highlight-moment', @@ -1636,94 +1354,28 @@ var config = { // dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in // or the other way around (more info in resources/cloud-api.swagger) - // You can use external service for authentication that will redirect back passing a jwt token - // You can use tokenAuthUrl config to point to a URL of such service. - // The URL for the service supports few params which will be filled in by the code. - // tokenAuthUrl: - // 'https://myservice.com/auth/{room}?code_challenge_method=S256&code_challenge={code_challenge}&state={state}' - // Supported parameters in tokenAuthUrl: - // {room} - will be replaced with the room name - // {code_challenge} - (A web only). A oauth 2.0 code challenge that will be sent to the service. See: - // https://datatracker.ietf.org/doc/html/rfc7636. The code verifier will be saved in the sessionStorage - // under key: 'code_verifier'. - // {state} - A json with the current state before redirecting. Keys that are included in the state: - // - room (The current room name as shown in the address bar) - // - roomSafe (the backend safe room name to use (lowercase), that is passed to the backend) - // - tenant (The tenant if any) - // - config.xxx (all config overrides) - // - interfaceConfig.xxx (all interfaceConfig overrides) - // - ios=true (in case ios mobile app is used) - // - android=true (in case android mobile app is used) - // - electron=true (when web is loaded in electron app) - // If there is a logout service you can specify its URL with: - // tokenLogoutUrl: 'https://myservice.com/logout' - // An option to respect the context.tenant jwt field compared to the current tenant from the url - // tokenRespectTenant: false, - // An option to get for user info (name, picture, email) in the token outside the user context. - // Can be used with Firebase tokens. - // tokenGetUserInfoOutOfContext: false, - // An option to pass the token in the iframe API directly instead of using the redirect flow. - // tokenAuthInline: false, - - // You can put an array of values to target different entity types in the invite dialog. - // Valid values are "phone", "room", "sip", "user", "videosipgw" and "email" - // peopleSearchQueryTypes: ["user", "email"], - // Directory endpoint which is called for invite dialog autocomplete - // peopleSearchUrl: "https://myservice.com/api/people", - // Endpoint which is called to send invitation requests - // inviteServiceUrl: "https://myservice.com/api/invite", - - // For external entities (e. g. email), the localStorage key holding the token value for directory authentication - // peopleSearchTokenLocation: "mytoken", - - - // Options related to visitors. - // visitors: { - // // Starts audio/video when the participant is promoted from visitor. - // enableMediaOnPromote: { - // audio: true, - // video: true - // }, - // // Hides the visitor count for visitors. - // // hideVisitorCountForVisitors: false, - // // Whether to show the join meeting dialog when joining as a visitor. - // // showJoinMeetingDialog: true, - // }, - // The default type of desktop sharing sources that will be used in the electron app. - // desktopSharingSources: ['screen', 'window'], - - // Disables the echo cancelation for local audio tracks. - // disableAEC: true, - - // Disables the auto gain control for local audio tracks. - // disableAGC: true, - - // Disables the audio processing (echo cancelation, auto gain control and noise suppression) for local audio tracks. - // disableAP: true, - - // Disables the anoise suppression for local audio tracks. - // disableNS: true, - - // Replaces the display name with the JID of the participants. - // displayJids: true, - - // Enables disables talk while muted detection. - // enableTalkWhileMuted: true, - - // Sets the peer connection ICE transport policy to "relay". - // forceTurnRelay: true, - // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold + debug + debugAudioLevels deploymentInfo dialOutAuthUrl dialOutCodesUrl dialOutRegionUrl disableRemoteControl + displayJids + externalConnectUrl + e2eeLabels + firefox_fake_device + googleApiApplicationClientID iAmRecorder iAmSipGateway microsoftApiApplicationClientID + peopleSearchQueryTypes + peopleSearchUrl + requireDisplayName + tokenAuthUrl */ /** @@ -1737,9 +1389,19 @@ var config = { /** _peerConnStatusOutOfLastNTimeout _peerConnStatusRtcMuteTimeout + abTesting avgRtpStatsN + callStatsConfIDNamespace + callStatsCustomScriptUrl desktopSharingSources - disableLocalStats + disableAEC + disableAGC + disableAP + disableHPF + disableNS + enableTalkWhileMuted + forceJVB121Ratio + forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled ignoreStartMuted @@ -1762,7 +1424,6 @@ var config = { */ // notifications: [ // 'connection.CONNFAIL', // shown when the connection fails, - // 'dialog.cameraConstraintFailedError', // shown when the camera failed // 'dialog.cameraNotSendingData', // shown when there's no feed from user's camera // 'dialog.kickTitle', // shown when user has been kicked // 'dialog.liveStreaming', // livestreaming notifications (pending, on, off, limits) @@ -1773,12 +1434,10 @@ var config = { // 'dialog.recording', // recording notifications (pending, on, off, limits) // 'dialog.remoteControlTitle', // remote control notifications (allowed, denied, start, stop, error) // 'dialog.reservationError', - // 'dialog.screenSharingFailedTitle', // shown when the screen sharing failed // 'dialog.serviceUnavailable', // shown when server is not reachable // 'dialog.sessTerminated', // shown when there is a failed conference session // 'dialog.sessionRestarted', // show when a client reload is initiated because of bridge migration // 'dialog.tokenAuthFailed', // show when an invalid jwt is used - // 'dialog.tokenAuthFailedWithReasons', // show when an invalid jwt is used with the reason behind the error // 'dialog.transcribing', // transcribing notifications (pending, off) // 'dialOut.statusMessage', // shown when dial out status is updated. // 'liveStreaming.busy', // shown when livestreaming service is busy @@ -1786,45 +1445,37 @@ var config = { // 'liveStreaming.unavailableTitle', // shown when livestreaming service is not reachable // 'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected // 'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied - // 'notify.audioUnmuteBlockedTitle', // shown when mic unmute blocked // 'notify.chatMessages', // shown when receiving chat messages while the chat window is closed + // 'notify.disconnected', // shown when a participant has left // 'notify.connectedOneMember', // show when a participant joined - // 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously // 'notify.connectedTwoMembers', // show when two participants joined simultaneously - // 'notify.dataChannelClosed', // shown when the bridge channel has been disconnected + // 'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously + // 'notify.leftOneMember', // show when a participant left + // 'notify.leftTwoMembers', // show when two participants left simultaneously + // 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously + // 'notify.grantedTo', // shown when moderator rights were granted to a participant // 'notify.hostAskedUnmute', // shown to participant when host asks them to unmute // 'notify.invitedOneMember', // shown when 1 participant has been invited // 'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited // 'notify.invitedTwoMembers', // shown when 2 participants have been invited // 'notify.kickParticipant', // shown when a participant is kicked - // 'notify.leftOneMember', // show when a participant left - // 'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously - // 'notify.leftTwoMembers', // show when two participants left simultaneously // 'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration - // 'notify.localRecordingStarted', // shown when the local recording has been started - // 'notify.localRecordingStopped', // shown when the local recording has been stopped - // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation + // 'notify.moderationStartedTitle', // shown when AV moderation is activated + // 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated // 'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation // 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation - // 'notify.moderator', // shown when user gets moderator privilege + // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation // 'notify.mutedRemotelyTitle', // shown when user is muted by a remote party // 'notify.mutedTitle', // shown when user has been muted upon joining, // 'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device // 'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera - // 'notify.noiseSuppressionFailedTitle', // shown when failed to start noise suppression // 'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting - // 'notify.participantsWantToJoin', // shown when lobby is enabled and participants request to join meeting // 'notify.passwordRemovedRemotely', // shown when a password has been removed remotely // 'notify.passwordSetRemotely', // shown when a password has been set remotely - // 'notify.raisedHand', // shown when a participant used raise hand, - // 'notify.screenShareNoAudio', // shown when the audio could not be shared for the selected screen - // 'notify.screenSharingAudioOnlyTitle', // shown when the best performance has been affected by screen sharing - // 'notify.selfViewTitle', // show "You can always un-hide the self-view from settings" + // 'notify.raisedHand', // shown when a partcipant used raise hand, // 'notify.startSilentTitle', // shown when user joined with no audio - // 'notify.suboptimalExperienceTitle', // show the browser warning // 'notify.unmute', // shown to moderator when user raises hand during AV moderation // 'notify.videoMutedRemotelyTitle', // shown when user's video is muted by a remote party, - // 'notify.videoUnmuteBlockedTitle', // shown when camera unmute and desktop sharing are blocked // 'prejoin.errorDialOut', // 'prejoin.errorDialOutDisconnected', // 'prejoin.errorDialOutFailed', @@ -1837,15 +1488,16 @@ var config = { // 'toolbar.noAudioSignalTitle', // shown when a broken mic is detected // 'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone // 'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted - // 'transcribing.failed', // shown when transcribing fails + // 'transcribing.failedToStart', // shown when transcribing fails to start // ], // List of notifications to be disabled. Works in tandem with the above setting. // disabledNotifications: [], + // Prevent the filmstrip from autohiding when screen width is under a certain threshold + // disableFilmstripAutohiding: false, + // filmstrip: { - // // Disable the vertical/horizontal filmstrip. - // disabled: false, // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip // // (width, tiles aspect ratios) through the interfaceConfig options. // disableResizable: false, @@ -1864,19 +1516,10 @@ var config = { // // The minimum number of participants that must be in the call for // // the top panel layout to be used. // minParticipantCountForTopPanel: 50, - - // // The width of the filmstrip on joining meeting. Can be resized afterwards. - // initialWidth: 400, - - // // Whether the draggable resize bar of the filmstrip is always visible. Setting this to true will make - // // the filmstrip always visible in case `disableResizable` is false. - // alwaysShowResizeBar: true, // }, // Tile view related config options. // tileView: { - // // Whether tileview should be disabled. - // disabled: false, // // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may // // not be possible to show the exact number of participants specified here. // numberOfVisibleTiles: 25, @@ -1900,20 +1543,22 @@ var config = { // tileTime: 5000, // // Limit results by rating: g, pg, pg-13, r. Default value: g. // rating: 'pg', + // // The proxy server url for giphy requests in the web app. + // proxyUrl: 'https://giphy-proxy.example.com', // }, // Logging // logging: { // // Default log level for the app and lib-jitsi-meet. // defaultLogLevel: 'trace', - // // Option to disable LogCollector. + // // Option to disable LogCollector (which stores the logs on CallStats). // //disableLogCollector: true, // // Individual loggers are customizable. // loggers: { - // // The following are too verbose in their logging with the default level. - // 'modules/RTC/TraceablePeerConnection.js': 'info', - // 'modules/xmpp/strophe.util.js': 'log', - // }, + // // The following are too verbose in their logging with the default level. + // 'modules/RTC/TraceablePeerConnection.js': 'info', + // 'modules/statistics/CallStats.js': 'info', + // 'modules/xmpp/strophe.util.js': 'log', // }, // Application logo url @@ -1926,68 +1571,15 @@ var config = { // // The server used to support whiteboard collaboration. // // https://github.com/jitsi/excalidraw-backend // collabServerBaseUrl: 'https://excalidraw-backend.example.com', - // // The user access limit to the whiteboard, introduced as a means - // // to control the performance. - // userLimit: 25, - // // The url for more info about the whiteboard and its usage limitations. - // limitUrl: 'https://example.com/blog/whiteboard-limits', - - // //Backend URL for storing whiteboard scenes and images - // //This backend service handles scene persistence and file uploads - // storageBackendUrl: 'https://excalidraw-s3-storage-backend.example.com', - // }, - - // The watchRTC initialize config params as described : - // https://testrtc.com/docs/installing-the-watchrtc-javascript-sdk/#h-set-up-the-sdk - // https://www.npmjs.com/package/@testrtc/watchrtc-sdk - // watchRTCConfigParams: { - // /** Watchrtc api key */ - // rtcApiKey: string; - // /** Identifier for the session */ - // rtcRoomId?: string; - // /** Identifier for the current peer */ - // rtcPeerId?: string; - // /** - // * ["tag1", "tag2", "tag3"] - // * @deprecated use 'keys' instead - // */ - // rtcTags?: string[]; - // /** { "key1": "value1", "key2": "value2"} */ - // keys?: any; - // /** Enables additional logging */ - // debug?: boolean; - // rtcToken?: string; - // /** - // * @deprecated No longer needed. Use "proxyUrl" instead. - // */ - // wsUrl?: string; - // proxyUrl?: string; - // console?: { - // level: string; - // override: boolean; - // }; - // allowBrowserLogCollection?: boolean; - // collectionInterval?: number; - // logGetStats?: boolean; - // }, - - // Hide login button on auth dialog, you may want to enable this if you are using JWT tokens to authenticate users - // hideLoginButton: true, - - // If true remove the tint foreground on focused user camera in filmstrip - // disableCameraTintForeground: false, - - // File sharign service. - // fileSharing: { - // // The URL of the file sharing service API. See resources/file-sharing.yaml for more details. - // apiUrl: 'https://example.com', - // // Whether the file sharing service is enabled or not. - // enabled: true, - // // Maximum file size limit (-1 value disables any file size limit check) - // maxFileSize: 50, // }, }; +// Temporary backwards compatibility with old mobile clients. +config.flags = config.flags || {}; +config.flags.sourceNameSignaling = true; +config.flags.sendMultipleVideoStreams = true; +config.flags.receiveMultipleVideoStreams = true; + // Set the default values for JaaS customers if (enableJaaS) { config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids'; diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh b/type/__jitsi_meet_domain/files/interface_config.js.sh index 228625f..1aad856 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh @@ -52,6 +52,14 @@ var interfaceConfig = { */ DISABLE_PRESENCE_STATUS: false, + /** + * Whether the ringing sound in the call/ring overlay is disabled. If + * {@code undefined}, defaults to {@code false}. + * + * @type {boolean} + */ + DISABLE_RINGING: false, + /** * Whether the speech to text transcription subtitles panel is disabled. * If {@code undefined}, defaults to {@code false}. @@ -73,6 +81,8 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, + ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation. + FILM_STRIP_MAX_HEIGHT: 120, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, @@ -107,8 +117,8 @@ var interfaceConfig = { // 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, electron, firefox , safari, webkit - OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ], + // chrome, chromium, edge, electron, firefox, nwjs, opera, safari + OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ], POLICY_LOGO: null, PROVIDER_NAME: 'Jitsi', @@ -121,7 +131,7 @@ var interfaceConfig = { RECENT_LIST_ENABLED: true, REMOTE_THUMBNAIL_RATIO: 1, // 1:1 - SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'shortcuts', 'sounds', 'more' ], + SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'sounds', 'more' ], /** * Specify which sharing features should be displayed. If the value is not set @@ -203,6 +213,17 @@ var interfaceConfig = { // NATIVE_APP_NAME: 'Jitsi Meet', + /** + * Specify Firebase dynamic link properties for the mobile apps. + */ + // MOBILE_DYNAMIC_LINK: { + // APN: 'org.jitsi.meet', + // APP_CODE: 'w2atb', + // CUSTOM_DOMAIN: undefined, + // IBI: 'com.atlassian.JitsiMeet.ios', + // ISI: '1165103905' + // }, + /** * Hide the logo on the deep linking pages. */ @@ -216,7 +237,7 @@ var interfaceConfig = { /** * Specify custom URL for downloading f droid app. */ - // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/packages/org.jitsi.meet/', + // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/', // Connection indicators ( // CONNECTION_INDICATOR_AUTO_HIDE_ENABLED, diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig index 14b307a..2f8591c 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig @@ -41,6 +41,14 @@ var interfaceConfig = { */ DISABLE_PRESENCE_STATUS: false, + /** + * Whether the ringing sound in the call/ring overlay is disabled. If + * {@code undefined}, defaults to {@code false}. + * + * @type {boolean} + */ + DISABLE_RINGING: false, + /** * Whether the speech to text transcription subtitles panel is disabled. * If {@code undefined}, defaults to {@code false}. @@ -62,6 +70,8 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, + ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation. + FILM_STRIP_MAX_HEIGHT: 120, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, @@ -96,8 +106,8 @@ var interfaceConfig = { // 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, electron, firefox , safari, webkit - OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ], + // chrome, chromium, edge, electron, firefox, nwjs, opera, safari + OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ], POLICY_LOGO: null, PROVIDER_NAME: 'Jitsi', @@ -110,7 +120,7 @@ var interfaceConfig = { RECENT_LIST_ENABLED: true, REMOTE_THUMBNAIL_RATIO: 1, // 1:1 - SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'shortcuts', 'sounds', 'more' ], + SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'sounds', 'more' ], /** * Specify which sharing features should be displayed. If the value is not set @@ -192,6 +202,17 @@ var interfaceConfig = { // NATIVE_APP_NAME: 'Jitsi Meet', + /** + * Specify Firebase dynamic link properties for the mobile apps. + */ + // MOBILE_DYNAMIC_LINK: { + // APN: 'org.jitsi.meet', + // APP_CODE: 'w2atb', + // CUSTOM_DOMAIN: undefined, + // IBI: 'com.atlassian.JitsiMeet.ios', + // ISI: '1165103905' + // }, + /** * Hide the logo on the deep linking pages. */ @@ -205,7 +226,7 @@ var interfaceConfig = { /** * Specify custom URL for downloading f droid app. */ - // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/packages/org.jitsi.meet/', + // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/', // Connection indicators ( // CONNECTION_INDICATOR_AUTO_HIDE_ENABLED, diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index 72db1fb..d64455b 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.11031-1 \ No newline at end of file +2.0.8319-1 \ No newline at end of file diff --git a/type/__jitsi_meet_domain/files/nginx.sh b/type/__jitsi_meet_domain/files/nginx.sh index 4691004..249aa93 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh +++ b/type/__jitsi_meet_domain/files/nginx.sh @@ -12,11 +12,6 @@ JITSI_NGINX_CONFIG="$(cat <[^?]*)\?.*(?:jwt|token)= "\${url}?[params_redacted]"; -# default \$http_referer; -#} -# -#log_format jitsi_log '\$remote_addr - \$remote_user [\$time_local] ' -# '"\$request_method \$loggable_uri \$server_protocol" ' -# '\$status \$body_bytes_sent "\$loggable_referer" "\$http_user_agent"'; - server { listen 80; listen [::]:80; @@ -66,8 +45,8 @@ server { } } server { - listen 443 ssl http2; - listen [::]:443 ssl http2; + listen 443 ssl; + listen [::]:443 ssl; server_name ${DOMAIN}; include snippets/acme-challenge.conf; @@ -83,24 +62,18 @@ server { add_header Strict-Transport-Security "max-age=63072000" always; set \$prefix ""; - # Try the custom page for this domain, fallback to default page - set \$custom_index "index-${DOMAIN}.html"; - # We expect this domain to be properly configured, the file should exist - set \$config_js_location "/etc/jitsi/meet/${DOMAIN}-config.js"; ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem; root /usr/share/jitsi-meet; -# access_log /var/log/nginx/access.log jitsi_log; - # ssi on with javascript for multidomain variables in config.js ssi on; ssi_types application/x-javascript application/javascript; # Try the custom page for this domain, fallback to default page - index \$custom_index index.html index.htm; + index index-${DOMAIN}.html index.html index.htm; error_page 404 /static/404.html; gzip on; @@ -109,10 +82,9 @@ server { gzip_proxied no-cache no-store private expired auth; gzip_min_length 512; - # include /etc/jitsi/meet/jaas/*.conf; - + # We expect this domain to be properly configured, the file should exist location = /config.js { - alias \$config_js_location; + alias /etc/jitsi/meet/${DOMAIN}-config.js; } # We expect this domain to be properly configured, the file should exist location = /interface_config.js { @@ -138,13 +110,8 @@ server { proxy_set_header Host \$http_host; } - location ~ ^/_api/public/(.*)\$ { - autoindex off; - alias /etc/jitsi/meet/public/\$1; - } - # ensure all static content can always be found first - location ~ ^/(libs|css|static|images|fonts|lang|sounds|.well-known)/(.*)\$ + location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)\$ { add_header 'Access-Control-Allow-Origin' '*'; alias /usr/share/jitsi-meet/\$1/\$2; @@ -212,30 +179,11 @@ server { # alias /usr/share/jitsi-meet/load-test/libs/\$1; #} - location = /_unlock { - add_header 'Access-Control-Allow-Origin' '*'; - add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains'; - add_header "Cache-Control" "no-cache, no-store"; - } - - location ~ ^/conference-request/v1([/].*)?\$ { - proxy_pass http://jicofo/conference-request/v1\$1; - add_header "Cache-Control" "no-cache, no-store"; - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Content-Type'; - } - location ~ ^/([^/?&:'"]+)/conference-request/v1([/].*)?\$ { - rewrite ^/([^/?&:'"]+)/conference-request/v1([/].*)?\$ /conference-request/v1\$2; - } - location ~ ^/([^/?&:'"]+)\$ { - set \$roomname "\$1"; try_files \$uri @root_path; } location @root_path { - # rewrite ^/(.*)\$ /\$custom_index break; rewrite ^/(.*)\$ / break; } @@ -244,16 +192,9 @@ server { set \$subdomain "\$1."; set \$subdir "\$1/"; - alias \$config_js_location; + alias /etc/jitsi/meet/jitsi-meet.example.com-config.js; } - ## Matches /(TENANT)/pwa-worker.js or /(TENANT)/manifest.json to rewrite to / and look for file - #location ~ ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)\$ { - # set \$subdomain "\$1."; - # set \$subdir "\$1/"; - # rewrite ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)\$ /\$2; - #} - # BOSH for subdomains location ~ ^/([^/?&:'"]+)/http-bind { set \$subdomain "\$1."; diff --git a/type/__jitsi_meet_domain/files/nginx.sh.orig b/type/__jitsi_meet_domain/files/nginx.sh.orig index 43913bd..fd3914e 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh.orig +++ b/type/__jitsi_meet_domain/files/nginx.sh.orig @@ -10,12 +10,11 @@ upstream prosody { server 127.0.0.1:5280; keepalive 2; } -# Uncomment to enable colibri (JVB) WebSocket proxy (also requires websockets enabled in JVB config): -# upstream jvb1 { -# zone upstreams 64K; -# server 127.0.0.1:9090; -# keepalive 2; -# } +upstream jvb1 { + zone upstreams 64K; + server 127.0.0.1:9090; + keepalive 2; +} map $arg_vnode $prosody_node { default prosody; v1 v1; @@ -27,22 +26,6 @@ map $arg_vnode $prosody_node { v7 v7; v8 v8; } -# Matches any URI or Referer with some matches and redacts the whole -# query string. log_format and map must be at the http context level. -map $request_uri $loggable_uri { - ~^(?P[^?]*)\?.*(?:jwt|token)= "${path}?[params_redacted]"; - default $request_uri; -} - -map $http_referer $loggable_referer { - ~^(?P[^?]*)\?.*(?:jwt|token)= "${url}?[params_redacted]"; - default $http_referer; -} - -log_format jitsi_log '$remote_addr - $remote_user [$time_local] ' - '"$request_method $loggable_uri $server_protocol" ' - '$status $body_bytes_sent "$loggable_referer" "$http_user_agent"'; - server { listen 80; listen [::]:80; @@ -60,8 +43,8 @@ server { } } server { - listen 443 ssl http2; - listen [::]:443 ssl http2; + listen 443 ssl; + listen [::]:443 ssl; server_name jitsi-meet.example.com; # Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration @@ -75,16 +58,12 @@ server { add_header Strict-Transport-Security "max-age=63072000" always; set $prefix ""; - set $custom_index ""; - set $config_js_location /etc/jitsi/meet/jitsi-meet.example.com-config.js; ssl_certificate /etc/jitsi/meet/jitsi-meet.example.com.crt; ssl_certificate_key /etc/jitsi/meet/jitsi-meet.example.com.key; root /usr/share/jitsi-meet; - access_log /var/log/nginx/access.log jitsi_log; - # ssi on with javascript for multidomain variables in config.js ssi on; ssi_types application/x-javascript application/javascript; @@ -98,10 +77,8 @@ server { gzip_proxied no-cache no-store private expired auth; gzip_min_length 512; - include /etc/jitsi/meet/jaas/*.conf; - location = /config.js { - alias $config_js_location; + alias /etc/jitsi/meet/jitsi-meet.example.com-config.js; } location = /external_api.js { @@ -115,13 +92,8 @@ server { proxy_set_header Host $http_host; } - location ~ ^/_api/public/(.*)$ { - autoindex off; - alias /etc/jitsi/meet/public/$1; - } - # ensure all static content can always be found first - location ~ ^/(libs|css|static|images|fonts|lang|sounds|.well-known)/(.*)$ + location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$ { add_header 'Access-Control-Allow-Origin' '*'; alias /usr/share/jitsi-meet/$1/$2; @@ -151,14 +123,14 @@ server { tcp_nodelay on; } - # Uncomment to enable colibri (JVB) WebSocket proxy (also requires websockets enabled in JVB config): - # location ~ ^/colibri-ws/default-id/(.*) { - # proxy_pass http://jvb1/colibri-ws/default-id/$1$is_args$args; - # proxy_http_version 1.1; - # proxy_set_header Upgrade $http_upgrade; - # proxy_set_header Connection "upgrade"; - # tcp_nodelay on; - # } + # colibri (JVB) websockets for jvb1 + location ~ ^/colibri-ws/default-id/(.*) { + proxy_pass http://jvb1/colibri-ws/default-id/$1$is_args$args; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + tcp_nodelay on; + } # load test minimal client, uncomment when used #location ~ ^/_load-test/([^/?&:'"]+)$ { @@ -169,30 +141,12 @@ server { # alias /usr/share/jitsi-meet/load-test/libs/$1; #} - location = /_unlock { - add_header 'Access-Control-Allow-Origin' '*'; - add_header Strict-Transport-Security 'max-age=63072000; includeSubDomains'; - add_header "Cache-Control" "no-cache, no-store"; - } - - location ~ ^/conference-request/v1(\/.*)?$ { - proxy_pass http://127.0.0.1:8888/conference-request/v1$1; - add_header "Cache-Control" "no-cache, no-store"; - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Content-Type'; - } - location ~ ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ { - rewrite ^/([^/?&:'"]+)/conference-request/v1(\/.*)?$ /conference-request/v1$2; - } - location ~ ^/([^/?&:'"]+)$ { - set $roomname "$1"; try_files $uri @root_path; } location @root_path { - rewrite ^/(.*)$ /$custom_index break; + rewrite ^/(.*)$ / break; } location ~ ^/([^/?&:'"]+)/config.js$ @@ -200,14 +154,7 @@ server { set $subdomain "$1."; set $subdir "$1/"; - alias $config_js_location; - } - - # Matches /(TENANT)/pwa-worker.js or /(TENANT)/manifest.json to rewrite to / and look for file - location ~ ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ { - set $subdomain "$1."; - set $subdir "$1/"; - rewrite ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ /$2; + alias /etc/jitsi/meet/jitsi-meet.example.com-config.js; } # BOSH for subdomains diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh index 97c9853..ed2cd54 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh @@ -30,10 +30,6 @@ PROSODY_CONFIG="$(cat <&2 @@ -71,31 +77,49 @@ if [ -f "${__object:?}/parameter/userid" ]; then export USERID fi +# Custom configuration handling. +if [ -f "${__object:?}/parameter/custom-config" ]; then + CUSTOM_CONFIG="$(cat "${__object:?}/parameter/custom-config")" + export CUSTOM_CONFIG +fi + +# Debian: set configuration specific to debian packaging if no explicit value +# is requested. +if [ "$os" = "debian" ]; then + # In Debian, opendkim runs as user "opendkim". A umask of 007 is required when + # using a local socket with MTAs that access the socket as a non-privileged + # user (for example, Postfix). You may need to add user "postfix" to group + # "opendkim" in that case. + + # We only set UserID if it is not provided via custom configuration. + if [ -z "$USERID" ] && echo "$CUSTOM_CONFIG" | grep -Eq '^UserID\s+\w+$'; then + export USERID="opendkim" + fi + + if [ -z "$UMASK" ] && echo "$CUSTOM_CONFIG" | grep -Eq '^UMask\s+\w+$'; then + export UMASK="007" + fi + + if ! echo "$CUSTOM_CONFIG" | grep -Eq '^PidFile\s+\w+$'; then + export PIDFILE="/run/opendkim/opendkim.pid" + fi +fi + # Boolean parameters [ -f "${__object:?}/parameter/syslog" ] && export SYSLOG=yes # Generate and deploy configuration file. source_file="${__object:?}/files/opendkim.conf" -target_file="${CFG_DIR}/opendkim.conf" +target_file="${CFG_FILE}" mkdir -p "${__object:?}/files" "${__type:?}/files/opendkim.conf.sh" >"$source_file" -# Add user custom config -if [ -f "${__object:?}/parameter/custom-config" ]; then - echo "# Custom user config" >>"$source_file" - cat "${__object:?}/parameter/custom-config" >>"$source_file" -fi - require="__package/opendkim" __file "$target_file" \ --source "$source_file" --mode 0644 -# Due to the way rc.conf works on *BSD, we find ourselves in the awkward -# situation, where a service's name can contain a '-' symbol, but the -# rc.conf setting to enable a service at boot cannot. -# Unless start_service has been defined before, these two match. -require="__package/opendkim" __start_on_boot "${start_service:-${service}}" +require="__package/opendkim" __start_on_boot "${service}" # Ensure Key and Signing tables exist and have proper permissions key_table="${CFG_DIR}/KeyTable" @@ -110,7 +134,7 @@ require="__package/opendkim" \ --mode 444 require="__file${target_file} __file${key_table} - __file${signing_table} __start_on_boot/${start_service:-${service}}" \ + __file${signing_table} __start_on_boot/${service}" \ __check_messages opendkim \ --pattern "^__file${target_file}" \ --execute "service ${service} restart" diff --git a/type/__opendkim_genkey/explorer/key-state b/type/__opendkim_genkey/explorer/key-state index 75998f9..906abc0 100755 --- a/type/__opendkim_genkey/explorer/key-state +++ b/type/__opendkim_genkey/explorer/key-state @@ -1,12 +1,22 @@ #!/bin/sh -e -DIRECTORY="/var/db/dkim/" + +os=$( "${__explorer:?}/os" ) + +case "$os" in +'debian') + DIRECTORY="/etc/dkimkeys/" +;; +*) + DIRECTORY="/var/db/dkim/" +;; +esac + if [ -f "${__object:?}/parameter/directory" ]; then # Be forgiving about a lack of trailing slash DIRECTORY="$(sed -E 's!([^/])$!\1/!' < "${__object:?}/parameter/directory")" fi - KEY_ID="$(echo "${__object_id:?)}" | tr '/' '_')" DEFAULT_PATH="${DIRECTORY:?}${KEY_ID:?}.private" if [ -s "${DEFAULT_PATH}" ]; then diff --git a/type/__opendkim_genkey/man.rst b/type/__opendkim_genkey/man.rst index 0d52ca3..08a0f27 100644 --- a/type/__opendkim_genkey/man.rst +++ b/type/__opendkim_genkey/man.rst @@ -22,7 +22,7 @@ associating any given `sigkey` values to this key. Take into account that if you use this type without the `--domain` and `--selector` parameters, the `$__object_id` must be in form `$domain/$selector`. -Currently, this type is only implemented for Alpine Linux and FreeBSD. +Currently, this type is only implemented for Alpine Linux, Debian and FreeBSD. Please contribute an implementation if you can. NOTE: the name of the key file under `--directory` will default to diff --git a/type/__opendkim_genkey/manifest b/type/__opendkim_genkey/manifest index 58e9b06..ddf53f9 100755 --- a/type/__opendkim_genkey/manifest +++ b/type/__opendkim_genkey/manifest @@ -21,12 +21,20 @@ os=$(cat "${__global:?}/explorer/os") -CFG_DIR="/etc/opendkim" -user="opendkim" -group="opendkim" case "$os" in 'alpine') - : + CFG_DIR="/etc/opendkim" + user="opendkim" + group="opendkim" + + __package opendkim-utils +;; +'debian') + CFG_DIR="/etc/dkimkeys" + user="opendkim" + group="opendkim" + + __package opendkim-tools ;; 'freebsd') CFG_DIR="/usr/local/etc/mail" @@ -35,8 +43,8 @@ case "$os" in ;; *) cat <<- EOF >&2 - __opendkim_genkey currently only supports Alpine Linux and FreeBSD. - Please contribute an implementation for $os if you can. + __opendkim_genkey does not support $os (yet). + Please contribute an implementation if you can. EOF exit 1 ;; @@ -78,13 +86,6 @@ printf '%s' "${group:?}" > "${__object:?}/group" printf '%s' "${DOMAIN:?}" > "${__object:?}/domain" printf '%s' "${SELECTOR:?}" > "${__object:?}/selector" -DIRECTORY="/var/db/dkim/" -if [ -f "${__object:?}/parameter/directory" ]; -then - # Be forgiving about a lack of trailing slash - DIRECTORY="$(sed -E 's!([^/])$!\1/!' < "${__object:?}/parameter/directory")" -fi - SIGKEY="${DOMAIN:?}" if [ -f "${__object:?}/parameter/sigkey" ]; then @@ -96,24 +97,18 @@ then SIGDOMAIN="$(cat "${__object:?}/parameter/sigdomain")" fi -# Ensure the key-container directory exists with the proper permissions -__directory "${DIRECTORY}" \ - --mode 0750 \ - --owner "${user}" --group "${group}" - -# OS-specific code -case "$os" in -'alpine') - # This is needed for opendkim-genkey - __package opendkim-utils -;; -esac +KEY_STATE="$(cut -f 1 "${__object:?}/explorer/key-state")" +KEY_LOCATION="$(cut -f 2- "${__object:?}/explorer/key-state")" +keys_dir=$(dirname "${KEY_LOCATION:?}") key_table="${CFG_DIR}/KeyTable" signing_table="${CFG_DIR}/SigningTable" -KEY_STATE="$(cut -f 1 "${__object:?}/explorer/key-state")" -KEY_LOCATION="$(cut -f 2- "${__object:?}/explorer/key-state")" +# Ensure the key-container directory exists with the proper permissions +__directory "${keys_dir}" \ + --mode 0750 \ + --owner "${user}" \ + --group "${group}" __line "__opendkim_genkey/${__object_id:?}" \ --file "${key_table}" \ diff --git a/type/__single_binary_service/man.rst b/type/__single_binary_service/man.rst index 1f94cd9..464785f 100644 --- a/type/__single_binary_service/man.rst +++ b/type/__single_binary_service/man.rst @@ -27,6 +27,22 @@ This type supports services managed by `__runit(7)` when `systemd` is not the init system being used. +REQUIRED PARAMETERS +------------------- +checksum + This will be passed verbatim to `__download(7)`. + Use something like `sha256:...`. + +url + This will be passed verbatim to `__download(7)`. + +version + This type will use a thumbstone file with a "version" number to track + whether or not a service must be updated. + This thumbstone file is placed under + `/usr/local/bin/.${__object_id}.cdist.version`. + + BOOLEAN PARAMETERS ------------------ unpack @@ -43,36 +59,12 @@ do-not-manage-user OPTIONAL PARAMETERS ------------------- -version - Required when installing a service. - This type will use a thumbstone file with a "version" number to track - whether or not a service must be updated. - This thumbstone file is placed under - `/usr/local/bin/.${__object_id}.cdist.version`. - -checksum - This will be passed verbatim to `__download(7)`. - Use something like `sha256:...`. - Required if using `--url`. - -config-file-destination - The remote path in which to locate the service's configuration. - Defaults to `ETC_DIR/${__object_id}.conf`. - config-file-source If present, this file's contents will be placed under `/etc/${__object_id}.conf` with permissions `0440` and ownership assigned to `--user` and `--group`. If `-` is passed, this type's `stdin` will be used. -local-source - A file on the cdist controller that will be used instead of downloading - the binary. - -url - This will be passed verbatim to `__download(7)`. - When used, you must specify `--checksum` as well. - user The user under which the service will run. Defaults to `root`. If this user is not `root` and `--do-not-manage-user` is not present, @@ -138,10 +130,6 @@ unpack-extension working-directory If set, the working directory with which the service will be started. -working-directory-permissions - The permissions that will be set for the working directory. - Defaults to `0750`. - OPTIONAL MULTIPLE PARAMETERS ---------------------------- diff --git a/type/__single_binary_service/manifest b/type/__single_binary_service/manifest index f46d62e..e9d1691 100755 --- a/type/__single_binary_service/manifest +++ b/type/__single_binary_service/manifest @@ -1,4 +1,4 @@ -#!/bin/sh -eu +#!/bin/sh -e SERVICE_NAME="${__object_id}" OS="$(cat "${__global}/explorer/os")" @@ -32,7 +32,7 @@ case "${INIT}" in service_command="sv %s ${SERVICE_NAME}" ;; *) - echo "Init system '${INIT}' is currently not supported." >&2 + echo "Init system ${INIT}' is currently not supported." >&2 exit 1 ;; esac @@ -44,7 +44,7 @@ BIN_DIR="/usr/local/bin" __directory "${BIN_DIR}" \ --state "exists" \ --mode 0755 -export require="${require:-} __directory${BIN_DIR}" +export require="${require} __directory${BIN_DIR}" STATE="$(cat "${__object}/parameter/state")" USER="$(cat "${__object}/parameter/user")" @@ -86,36 +86,18 @@ fi SERVICE_DEFINITION="$(cat "${__object}/parameter/service-definition" 2>/dev/null || true)" -CHECKSUM="$(cat "${__object}/parameter/checksum")" -SHOULD_VERSION="$(cat "${__object}/parameter/version" 2>/dev/null || true)" +WORKING_DIRECTORY_PATH="$(cat "${__object}/parameter/working-directory" 2>/dev/null || true)" +if [ -n "${WORKING_DIRECTORY_PATH}" ]; then + WORKING_DIRECTORY_SYSTEMD="WorkingDirectory=${WORKING_DIRECTORY_PATH}" + WORKING_DIRECTORY_RUNIT="cd '${WORKING_DIRECTORY_PATH}'" +fi + DOWNLOAD_URL="$(cat "${__object}/parameter/url")" -LOCAL_SOURCE="$(cat "${__object}/parameter/local-source")" -if [ "${STATE}" = "present" ] && [ -z "${SHOULD_VERSION}" ]; then - cat >&1 <<-EOM - When installing a service, --version must be specified. - EOM - exit 1 -fi -if [ "${STATE}" = "present" ] && [ -z "${DOWNLOAD_URL}${LOCAL_SOURCE}" ]; then - cat >&1 <<-EOM - Exactly one of --url or --local-source must be specified. - EOM - exit 1 -fi -if [ -n "${DOWNLOAD_URL}" ] && [ -z "${CHECKSUM}" ]; then - cat >&1 <<-EOM - You must specify --checksum when using --url. - EOM - exit 1 -fi -if [ "${LOCAL_SOURCE}" = "-" ]; then - LOCAL_SOURCE="${__object}/stdin" -fi +CHECKSUM="$(cat "${__object}/parameter/checksum")" +SHOULD_VERSION="$(cat "${__object}/parameter/version")" # Create a user for the service if it is not root USER_HOME_DIR="/root" -require_user_created="" -service_require="" if [ "${USER}" != "root" ] && \ [ ! -f "${__object}/parameter/do-not-manage-user" ]; then if [ "${STATE}" = "absent" ]; then @@ -126,45 +108,24 @@ if [ "${USER}" != "root" ] && \ if [ "${USER_HOME_DIR}" != "/nonexistent" ]; then USER_CREATE_HOME="--create-home" fi - require="${require} ${user_require:-}" __user "${USER}" \ + require="${require} ${user_require}" __user "${USER}" \ --system \ --state "${STATE}" \ --home "${USER_HOME_DIR}" \ --comment "cdist-managed service user" \ ${USER_CREATE_HOME} - require_user_created="__user/${USER}" # Track dependencies - service_require="${service_require} ${require_user_created}" -fi - -# Adapt directory permissions when necessary -WORKING_DIRECTORY_PERMISSIONS="$(cat "${__object}/parameter/working-directory-permissions")" -WORKING_DIRECTORY_PATH="$(cat "${__object}/parameter/working-directory" 2>/dev/null || true)" -if [ -n "${WORKING_DIRECTORY_PATH}" ]; then - WORKING_DIRECTORY_SYSTEMD="WorkingDirectory=${WORKING_DIRECTORY_PATH}" - WORKING_DIRECTORY_RUNIT="cd '${WORKING_DIRECTORY_PATH}'" - require="${require_user_created}" __directory \ - "${WORKING_DIRECTORY_PATH}" --state present \ - --mode "${WORKING_DIRECTORY_PERMISSIONS}" \ - --owner "${USER}" --group "${GROUP}" + service_require="${service_require} __user/${USER}" fi # Place config file if necessary -CONFIG_FILE_DEST="$(cat "${__object}/parameter/config-file-destination" 2>/dev/null || true)" -if [ -z "${CONFIG_FILE_DEST}" ]; then - CONFIG_FILE_DEST="${ETC_DIR}/${SERVICE_NAME}.conf" -else - require="${require_user_created}" __directory \ - "$(dirname "${WORKING_DIRECTORY_PATH}")" --state present \ - --mode "${WORKING_DIRECTORY_PERMISSIONS}" \ - --owner "${USER}" --group "${GROUP}" -fi +CONFIG_FILE_DEST="${ETC_DIR}/${SERVICE_NAME}.conf" CONFIG_FILE_SOURCE="$(cat "${__object}/parameter/config-file-source" 2>/dev/null || true)" if [ "${CONFIG_FILE_SOURCE}" = "-" ]; then CONFIG_FILE_SOURCE="${__object}/stdin" fi if [ -n "${CONFIG_FILE_SOURCE}" ] && [ "${STATE}" = "present" ]; then - require="${require} ${require_user_created}" __file \ + require="${require} __user/${USER}" __file \ "${CONFIG_FILE_DEST}" \ --owner "${USER}" \ --group "${GROUP}" \ @@ -203,7 +164,7 @@ Group=${GROUP} ExecStart=${SERVICE_EXEC} Restart=always EnvironmentFile=${SYSTEMD_ENV_FILE} -${WORKING_DIRECTORY_SYSTEMD:-} +${WORKING_DIRECTORY_SYSTEMD} [Install] WantedBy=multi-user.target @@ -300,23 +261,15 @@ EOF UNPACK_EXTENSION="$(cat "${__object}/parameter/unpack-extension")" UNPACK_ARGS="$(cat "${__object}/parameter/unpack-args" \ 2>/dev/null || true)" - # Place packed file - if [ -n "${DOWNLOAD_URL}" ]; then - __download "${TMP_PATH}${UNPACK_EXTENSION}" \ - --url "${DOWNLOAD_URL}" \ - --download remote \ - --sum "${CHECKSUM}" - require_place_file="__download${TMP_PATH}${UNPACK_EXTENSION}" - else - # TODO: this doesn't use CHECKSUM - __file "${TMP_PATH}${UNPACK_EXTENSION}" \ - --source "${LOCAL_SOURCE}" - require_place_file="__file${TMP_PATH}${UNPACK_EXTENSION}" - fi + # Download packed file + __download "${TMP_PATH}${UNPACK_EXTENSION}" \ + --url "${DOWNLOAD_URL}" \ + --download remote \ + --sum "${CHECKSUM}" # Unpack file and also perform service upgrade # shellcheck disable=SC2086 - require="${require_place_file}" \ + require="__download${TMP_PATH}${UNPACK_EXTENSION}" \ __unpack "${TMP_PATH}${UNPACK_EXTENSION}" \ ${UNPACK_ARGS} \ --destination "${TMP_PATH}" @@ -324,20 +277,14 @@ EOF else # Create temp directory __directory "${TMP_PATH}" - # Place in temp directory with the specified binary name - if [ -n "${DOWNLOAD_URL}" ]; then - require="__directory${TMP_PATH}" __download \ - "${TMP_PATH}/${BINARY}" \ - --url "${DOWNLOAD_URL}" \ - --download remote \ - --sum "${CHECKSUM}" - version_bump_require="__download${TMP_PATH}/${BINARY}" - else - require="__directory${TMP_PATH}" __file \ - "${TMP_PATH}/${BINARY}" \ - --source "${LOCAL_SOURCE}" - version_bump_require="__file${TMP_PATH}/${BINARY}" - fi + # Download binary directoy to the temp directory with the + # specified binary name + require="__directory${TMP_PATH}" __download \ + "${TMP_PATH}/${BINARY}" \ + --url "${DOWNLOAD_URL}" \ + --download remote \ + --sum "${CHECKSUM}" + version_bump_require="__download${TMP_PATH}/${BINARY}" fi # Perform update of cdist-managed version file diff --git a/type/__single_binary_service/parameter/default/checksum b/type/__single_binary_service/parameter/default/checksum deleted file mode 100644 index e69de29..0000000 diff --git a/type/__single_binary_service/parameter/default/local-source b/type/__single_binary_service/parameter/default/local-source deleted file mode 100644 index e69de29..0000000 diff --git a/type/__single_binary_service/parameter/default/url b/type/__single_binary_service/parameter/default/url deleted file mode 100644 index e69de29..0000000 diff --git a/type/__single_binary_service/parameter/default/working-directory-permissions b/type/__single_binary_service/parameter/default/working-directory-permissions deleted file mode 100644 index 4cd9d53..0000000 --- a/type/__single_binary_service/parameter/default/working-directory-permissions +++ /dev/null @@ -1 +0,0 @@ -0750 diff --git a/type/__single_binary_service/parameter/optional b/type/__single_binary_service/parameter/optional index aaed0ac..e51681b 100644 --- a/type/__single_binary_service/parameter/optional +++ b/type/__single_binary_service/parameter/optional @@ -1,20 +1,14 @@ -checksum config-file-source -config-file-destination env user group state binary -local-source service-args service-exec service-description service-definition unpack-extension unpack-args -url user-home-dir -version working-directory -working-directory-permissions diff --git a/type/__single_binary_service/parameter/required b/type/__single_binary_service/parameter/required new file mode 100644 index 0000000..b1e8d01 --- /dev/null +++ b/type/__single_binary_service/parameter/required @@ -0,0 +1,3 @@ +url +checksum +version