From 14fb0183155f2316f035ea885363428a8949153c Mon Sep 17 00:00:00 2001 From: Romain Dartigues Date: Thu, 11 Apr 2024 20:30:18 +0200 Subject: [PATCH 01/21] add: __package_xbps Introduce support for XBPS, the void-linux package manager. --- type/__package_xbps/explorer/state | 36 +++++++++++++ type/__package_xbps/gencode-remote | 49 ++++++++++++++++++ type/__package_xbps/man.rst | 57 +++++++++++++++++++++ type/__package_xbps/manifest | 31 +++++++++++ type/__package_xbps/nonparallel | 0 type/__package_xbps/parameter/default/state | 1 + type/__package_xbps/parameter/optional | 3 ++ 7 files changed, 177 insertions(+) create mode 100755 type/__package_xbps/explorer/state create mode 100755 type/__package_xbps/gencode-remote create mode 100644 type/__package_xbps/man.rst create mode 100755 type/__package_xbps/manifest create mode 100644 type/__package_xbps/nonparallel create mode 100644 type/__package_xbps/parameter/default/state create mode 100644 type/__package_xbps/parameter/optional diff --git a/type/__package_xbps/explorer/state b/type/__package_xbps/explorer/state new file mode 100755 index 0000000..ca4e7d2 --- /dev/null +++ b/type/__package_xbps/explorer/state @@ -0,0 +1,36 @@ +#!/bin/sh +# +# 2019 Nico Schottelius (nico-cdist at schottelius.org) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# +# +# Retrieve the status of a package - parsed apk output +# + +if [ -f "$__object/parameter/name" ] +then name="$(cat "$__object/parameter/name")" +else name="$__object_id" +fi + +# Remove the @.. repo tag for finding out whether it is installed +# f.i. pass@testing => pass +name="$(echo "$name" | sed 's/@.*//')" + +if xbps-query -S "$name" | grep -q 'state: installed' +then echo present +else echo absent +fi diff --git a/type/__package_xbps/gencode-remote b/type/__package_xbps/gencode-remote new file mode 100755 index 0000000..9d97589 --- /dev/null +++ b/type/__package_xbps/gencode-remote @@ -0,0 +1,49 @@ +#!/bin/sh -e +# +# 2024 Romain Dartigues (romain.dartigues@gmail.com) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +if [ -f "$__object/parameter/name" ] +then name="$(cat "$__object/parameter/name")" +else name="$__object_id" +fi + +state_should="$(cat "$__object/parameter/state")" +state_is="$(cat "$__object/explorer/state")" + +# Nothing to be done +[ "$state_is" = "$state_should" ] && exit 0 + +case "$state_should" in +present) + echo "xbps-install '$name'" + echo "installed" >> "$__messages_out" + ;; +absent) + echo "xbps-remove '$name'" + echo "removed" >> "$__messages_out" + ;; +*) + echo "Unknown state: $state_should" >&2 + exit 1 + ;; +esac + +if [ -s "$__object/parameter/onchange" ] +then cat "$__object/parameter/onchange" +fi diff --git a/type/__package_xbps/man.rst b/type/__package_xbps/man.rst new file mode 100644 index 0000000..89aadd2 --- /dev/null +++ b/type/__package_xbps/man.rst @@ -0,0 +1,57 @@ +cdist-type__package_xbps(7) +=========================== + +NAME +---- +cdist-type__package_xbps - Manage packages with XBPS + + +DESCRIPTION +----------- +The X Binary Package System (XBPS) is a fast package manager that has is usually used on the Void Linux distribution. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + +onchange + The code to run if line is added, removed or updated. + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh in installed + __package_xbps zsh --state present + + # Remove package + __package_xbps apache --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Romain Dartigues + + +COPYING +------- +Copyright \(C) 2024 Romain Dartigues. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/type/__package_xbps/manifest b/type/__package_xbps/manifest new file mode 100755 index 0000000..a0aa064 --- /dev/null +++ b/type/__package_xbps/manifest @@ -0,0 +1,31 @@ +#!/bin/sh -e +# +# 2024 Romain Dartigues (romain.dartigues@gmail.com) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + + +os=$(cat "$__global/explorer/os") + +case "$os" in +void) ;; +*) + printf "Your operating system (%s) is currently not supported by this type (%s)\n" "$os" "${__type##*/}" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; +esac diff --git a/type/__package_xbps/nonparallel b/type/__package_xbps/nonparallel new file mode 100644 index 0000000..e69de29 diff --git a/type/__package_xbps/parameter/default/state b/type/__package_xbps/parameter/default/state new file mode 100644 index 0000000..e7f6134 --- /dev/null +++ b/type/__package_xbps/parameter/default/state @@ -0,0 +1 @@ +present diff --git a/type/__package_xbps/parameter/optional b/type/__package_xbps/parameter/optional new file mode 100644 index 0000000..4cd69d7 --- /dev/null +++ b/type/__package_xbps/parameter/optional @@ -0,0 +1,3 @@ +name +onchange +state From 3bc9a9ff4a80a91d6ba6ee0eb6d4586ce1568ec9 Mon Sep 17 00:00:00 2001 From: Joachim Desroches Date: Tue, 22 Mar 2022 16:24:00 +0100 Subject: [PATCH 02/21] __php_fpm{,_pool}: initial implementation. --- type/__php_fpm/files/php.ini.sh | 45 +++++++++++ type/__php_fpm/man.rst | 75 ++++++++++++++++++ type/__php_fpm/manifest | 47 +++++++++++ type/__php_fpm/parameter/boolean | 2 + type/__php_fpm/parameter/default/memory-limit | 1 + .../parameter/default/upload-max-filesize | 1 + type/__php_fpm/parameter/optional | 2 + type/__php_fpm/parameter/required | 1 + type/__php_fpm/singleton | 0 type/__php_fpm_pool/files/www.conf.sh | 34 ++++++++ type/__php_fpm_pool/man.rst | 79 +++++++++++++++++++ type/__php_fpm_pool/manifest | 37 +++++++++ type/__php_fpm_pool/parameter/optional | 2 + type/__php_fpm_pool/parameter/required | 5 ++ 14 files changed, 331 insertions(+) create mode 100755 type/__php_fpm/files/php.ini.sh create mode 100644 type/__php_fpm/man.rst create mode 100644 type/__php_fpm/manifest create mode 100644 type/__php_fpm/parameter/boolean create mode 100644 type/__php_fpm/parameter/default/memory-limit create mode 100644 type/__php_fpm/parameter/default/upload-max-filesize create mode 100644 type/__php_fpm/parameter/optional create mode 100644 type/__php_fpm/parameter/required create mode 100644 type/__php_fpm/singleton create mode 100755 type/__php_fpm_pool/files/www.conf.sh create mode 100644 type/__php_fpm_pool/man.rst create mode 100644 type/__php_fpm_pool/manifest create mode 100644 type/__php_fpm_pool/parameter/optional create mode 100644 type/__php_fpm_pool/parameter/required diff --git a/type/__php_fpm/files/php.ini.sh b/type/__php_fpm/files/php.ini.sh new file mode 100755 index 0000000..8fbc4ac --- /dev/null +++ b/type/__php_fpm/files/php.ini.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +cat < + + +COPYING +------- +Copyright \(C) 2022 Joachim Desroches. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/type/__php_fpm/manifest b/type/__php_fpm/manifest new file mode 100644 index 0000000..84c4383 --- /dev/null +++ b/type/__php_fpm/manifest @@ -0,0 +1,47 @@ +#!/bin/sh + +os=$(cat "${__global:?}/explorer/os") + +PHPVER=$(cat "${__object:?}/parameter/php-version") +export PHPVER + +case "$os" in +'alpine') + package="php${PHPVER}-fpm" + service="php-fpm${PHPVER}" + opcache_package="php${PHPVER}-opcache" + apcu_package="php${PHPVER}-pecl-apcu" + ;; + +*) + printf "Your operating system is currently not supported by this type\n" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; +esac + +__package "$package" +require="__package/$package" __start_on_boot "$service" + +if [ -f "${__object:?}/parameter/enable-opcache" ]; then + __package "$opcache_package" +fi + +if [ -f "${__object:?}/parameter/enable-apcu" ]; then + __package "$apcu_package" +fi + +MEMORY_LIMIT=$(cat "${__object:?}/parameter/memory-limit") +export MEMORY_LIMIT + +UPLOAD_MAX_FILESIZE=$(cat "${__object:?}/parameter/upload-max-filesize") +export UPLOAD_MAX_FILESIZE + +mkdir -p "${__object:?}/files" +"${__type:?}/files/php.ini.sh" >"${__object:?}/files/php.ini" + +require="__package/$package" __file "/etc/php${PHPVER}/php.ini" \ + --mode 644 --source "${__object:?}/files/php.ini" \ + --onchange "service $service restart" + +require="__file/etc/php${PHPVER}/php.ini" __service "$service" --action start diff --git a/type/__php_fpm/parameter/boolean b/type/__php_fpm/parameter/boolean new file mode 100644 index 0000000..9964486 --- /dev/null +++ b/type/__php_fpm/parameter/boolean @@ -0,0 +1,2 @@ +enable-opcache +enable-apcu diff --git a/type/__php_fpm/parameter/default/memory-limit b/type/__php_fpm/parameter/default/memory-limit new file mode 100644 index 0000000..d95fe12 --- /dev/null +++ b/type/__php_fpm/parameter/default/memory-limit @@ -0,0 +1 @@ +512M diff --git a/type/__php_fpm/parameter/default/upload-max-filesize b/type/__php_fpm/parameter/default/upload-max-filesize new file mode 100644 index 0000000..5fbcf1c --- /dev/null +++ b/type/__php_fpm/parameter/default/upload-max-filesize @@ -0,0 +1 @@ +2M diff --git a/type/__php_fpm/parameter/optional b/type/__php_fpm/parameter/optional new file mode 100644 index 0000000..a41a87c --- /dev/null +++ b/type/__php_fpm/parameter/optional @@ -0,0 +1,2 @@ +upload-max-filesize +memory-limit diff --git a/type/__php_fpm/parameter/required b/type/__php_fpm/parameter/required new file mode 100644 index 0000000..173609d --- /dev/null +++ b/type/__php_fpm/parameter/required @@ -0,0 +1 @@ +php-version diff --git a/type/__php_fpm/singleton b/type/__php_fpm/singleton new file mode 100644 index 0000000..e69de29 diff --git a/type/__php_fpm_pool/files/www.conf.sh b/type/__php_fpm_pool/files/www.conf.sh new file mode 100755 index 0000000..aa8fa7c --- /dev/null +++ b/type/__php_fpm_pool/files/www.conf.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +cat < + + +COPYING +------- +Copyright \(C) 2022 Joachim Desroches. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/type/__php_fpm_pool/manifest b/type/__php_fpm_pool/manifest new file mode 100644 index 0000000..b090c9d --- /dev/null +++ b/type/__php_fpm_pool/manifest @@ -0,0 +1,37 @@ +#!/bin/sh + +# XXX: this type does not configure or install php-fpm: it expects the +# __recycledcloud_php_fpm type to be used first before pools are configured. + +os=$(cat "${__global:?}/explorer/os") +name=${__object_id:?} + +PHPVER=$(cat "${__object:?}/parameter/php-version") +export PHPVER + +case "$os" in +'alpine') + service="php-fpm${PHPVER}" + : + ;; + +*) + printf "Your operating system is currently not supported by this type\n" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; +esac + +POOL_NAME="$name" +POOL_USER=$(cat "${__object:?}/parameter/pool-user") +POOL_GROUP=$(cat "${__object:?}/parameter/pool-group") +POOL_LISTEN_ADDR=$(cat "${__object:?}/parameter/pool-listen-addr") +POOL_LISTEN_OWNER=$(cat "${__object:?}/parameter/pool-listen-owner") +export POOL_USER POOL_GROUP POOL_LISTEN_ADDR POOL_LISTEN_OWNER POOL_NAME + +mkdir -p "${__object:?}/files" +"${__type:?}/files/www.conf.sh" >"${__object:?}/files/www.conf" + +__file "/etc/php${PHPVER:?}/php-fpm.d/${name}.conf" \ + --mode 644 --source "${__object:?}/files/www.conf" \ + --onchange "service $service reload" diff --git a/type/__php_fpm_pool/parameter/optional b/type/__php_fpm_pool/parameter/optional new file mode 100644 index 0000000..7adc0a3 --- /dev/null +++ b/type/__php_fpm_pool/parameter/optional @@ -0,0 +1,2 @@ +memory-limit +open-basedir diff --git a/type/__php_fpm_pool/parameter/required b/type/__php_fpm_pool/parameter/required new file mode 100644 index 0000000..d247290 --- /dev/null +++ b/type/__php_fpm_pool/parameter/required @@ -0,0 +1,5 @@ +php-version +pool-user +pool-group +pool-listen-addr +pool-listen-owner From f2850de5eba95c42e2d887b150f75ccdbb096d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Wed, 15 May 2024 12:16:08 +0200 Subject: [PATCH 03/21] [__php_fpm_pool] remove mention to recycledcloud / e-Durable SA --- type/__php_fpm_pool/manifest | 3 --- 1 file changed, 3 deletions(-) diff --git a/type/__php_fpm_pool/manifest b/type/__php_fpm_pool/manifest index b090c9d..49579d7 100644 --- a/type/__php_fpm_pool/manifest +++ b/type/__php_fpm_pool/manifest @@ -1,8 +1,5 @@ #!/bin/sh -# XXX: this type does not configure or install php-fpm: it expects the -# __recycledcloud_php_fpm type to be used first before pools are configured. - os=$(cat "${__global:?}/explorer/os") name=${__object_id:?} From cc2b1af65354a53d87a14c9a28200cd36ad9128c Mon Sep 17 00:00:00 2001 From: Evilham Date: Fri, 25 Mar 2022 10:56:53 +0100 Subject: [PATCH 04/21] [__opendkim_key] Overall improvements in key management While developing this, I noticed that the type was handling inconsistently the expectation that a cdist object with the same __object_id gets *modified*. Instead more and more lines were added to, e.g. SigningTable and KeyTable. In order to solve this, some backwards compatibility breaking is necessary. This is probably not too terrible since: - the `--selector` parameter was mandatory, therefore the fallback for the key location is triggered. - OpenDKIM uses the first match in `SigningTable` and `KeyTable` - __line and __block respectively append if they do not match Closes #19 and #20. --- type/__opendkim_genkey/explorer/key-state | 32 +++++++ type/__opendkim_genkey/gencode-remote | 33 +++++--- type/__opendkim_genkey/man.rst | 83 ++++++++++++++----- type/__opendkim_genkey/manifest | 74 ++++++++++++++--- type/__opendkim_genkey/parameter/optional | 4 +- .../parameter/optional_multiple | 1 + type/__opendkim_genkey/parameter/required | 2 - 7 files changed, 183 insertions(+), 46 deletions(-) create mode 100755 type/__opendkim_genkey/explorer/key-state create mode 100644 type/__opendkim_genkey/parameter/optional_multiple delete mode 100644 type/__opendkim_genkey/parameter/required diff --git a/type/__opendkim_genkey/explorer/key-state b/type/__opendkim_genkey/explorer/key-state new file mode 100755 index 0000000..75998f9 --- /dev/null +++ b/type/__opendkim_genkey/explorer/key-state @@ -0,0 +1,32 @@ +#!/bin/sh -e +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 + + +KEY_ID="$(echo "${__object_id:?)}" | tr '/' '_')" +DEFAULT_PATH="${DIRECTORY:?}${KEY_ID:?}.private" +if [ -s "${DEFAULT_PATH}" ]; then + # This is the main location for the key + FOUND_PATH="${DEFAULT_PATH}" +else + # This is a backwards-compatible location for the key + # Keys generated post March 2022 should not land here + if [ -f "${__object:?}/parameter/selector" ]; then + SELECTOR="$(cat "${__object:?}/parameter/selector")" + if [ -s "${DIRECTORY}${SELECTOR:?}.private" ]; then + FOUND_PATH="${DIRECTORY}${SELECTOR:?}.private" + fi + fi +fi + +if [ -n "${FOUND_PATH}" ]; then + printf "present\t%s" "${FOUND_PATH}" +else + # We didn't find the key + # We pass the default path here, to easen logic in the rest of the type + printf "absent\t%s" "${DEFAULT_PATH}" +fi diff --git a/type/__opendkim_genkey/gencode-remote b/type/__opendkim_genkey/gencode-remote index d8dfb4d..d2bea50 100755 --- a/type/__opendkim_genkey/gencode-remote +++ b/type/__opendkim_genkey/gencode-remote @@ -19,8 +19,8 @@ # # Required parameters -DOMAIN="$(cat "${__object:?}/parameter/domain")" -SELECTOR="$(cat "${__object:?}/parameter/selector")" +DOMAIN="$(cat "${__object:?}/domain")" +SELECTOR="$(cat "${__object:?}/selector")" # Optional parameters BITS= @@ -28,12 +28,6 @@ if [ -f "${__object:?}/parameter/bits" ]; then BITS="-b $(cat "${__object:?}/parameter/bits")" fi -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 - # Boolean parameters SUBDOMAINS= if [ -f "${__object:?}/parameter/no-subdomains" ]; then @@ -48,9 +42,24 @@ fi user="$(cat "${__object:?}/user")" group="$(cat "${__object:?}/group")" -if ! [ -f "${DIRECTORY}${SELECTOR}.private" ]; then - echo "opendkim-genkey $BITS --domain=$DOMAIN --directory=$DIRECTORY $RESTRICTED --selector=$SELECTOR $SUBDOMAINS" - echo "chown ${user}:${group} ${DIRECTORY}${SELECTOR}.private" +KEY_STATE="$(cut -f 1 "${__object:?}/explorer/key-state")" +KEY_LOCATION="$(cut -f 2- "${__object:?}/explorer/key-state")" + +if [ "${KEY_STATE:?}" = "absent" ]; then + # opendkim-genkey(8) does not allow specifying the file name. + # To err on the safe side (and avoid potentially killing other keys) + # we operate on a temporary directory first, then move the resulting key + cat <<-EOF + tmp_dir="\$(mktemp -d cdist-dkim.XXXXXXXXXXX)" + opendkim-genkey $BITS --domain=${DOMAIN:?} --directory=\${tmp_dir:?} $RESTRICTED --selector=${SELECTOR:?} $SUBDOMAINS + # Relocate and ensure permissions + mv "\${tmp_dir:?}/${SELECTOR:?}.private" '${KEY_LOCATION:?}' + chown ${user}:${group} '${KEY_LOCATION}' + chmod 0600 '${KEY_LOCATION}' # This is usually generated, if it weren't we do not want to fail - echo "chown ${user}:${group} ${DIRECTORY}${SELECTOR}.txt || true" + mv "\${tmp_dir:?}/${SELECTOR:?}.txt" '${KEY_LOCATION%.private}.txt' || true + chown ${user}:${group} '${KEY_LOCATION%.private}.txt' || true + # Cleanup after ourselves + rmdir "\${tmp_dir:?}" || true + EOF fi diff --git a/type/__opendkim_genkey/man.rst b/type/__opendkim_genkey/man.rst index b3fd013..0d52ca3 100644 --- a/type/__opendkim_genkey/man.rst +++ b/type/__opendkim_genkey/man.rst @@ -10,23 +10,27 @@ DESCRIPTION ----------- This type uses the `opendkim-genkey(8)` to generate signing keys suitable for -usage by `opendkim(8)` to sign outgoing emails. Then, a line with the domain, -selector and keyname in the `$selector._domainkey.$domain` format will be added -to the OpenDKIM key table located at `/etc/opendkim/KeyTable`. Finally, a line -will be added to the OpenDKIM signing table, using either the domain or the -provided key for the `domain:selector:keyfile` value in the table. An existing -key will not be overwritten. +usage by `opendkim(8)` to sign outgoing emails. + +It also manages the key, identified by its `$__object_id` in OpenDKIM's +KeyTable and sets its `s=` and `d=` parameters (see: `--selector` and +`--sigdomain` respectively). + +This type will also manage the entries in the OpenDKIM's SigningTable by +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. Please contribute an implementation if you can. -REQUIRED PARAMETERS -------------------- -domain - The domain to generate the key for. - -selector - The DKIM selector to generate the key for. +NOTE: the name of the key file under `--directory` will default to +`$__object_id.private`, but if that fails and `--selector` is used, +`SELECTOR.private` will be considered. +Take care when using unrelated keys that might collide this way. +For more information see: +https://code.ungleich.ch/ungleich-public/cdist-contrib/issues/20 OPTIONAL PARAMETERS @@ -38,10 +42,36 @@ bits directory The directory in which to generate the key, `/var/db/dkim/` by default. +domain + The domain to generate the key for. + If omitted, `--selector` must be omitted as well and `$__object_id` must be + in form: `$domain/$selector`. + +selector + The DKIM selector to generate the key for. + If omitted, `--domain` must be omitted as well and `$__object_id` must be + in form: `$domain/$selector`. + +sigdomain + Specified in the KeyTable, the domain to use in the signature's "d=" value. + Defaults to the specified domain. If `%`, it will be replaced by the apparent + domain of the sender when generating a signature. + Note you probably don't want to set both `--sigdomain` and `--sigkey` to `%`. + See `KeyTable` in `opendkim.conf(5)` for more information. + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- sigkey - The key used in the SigningTable for this signing key. Defaults to the + The key used in the `SigningTable` for this signing key. Defaults to the specified domain. If `%`, OpenDKIM will replace it with the domain found in the `From:` header. See `opendkim.conf(5)` for more options. + Note you probably don't want to set both `--sigdomain` and `--sigkey` to `%`. + This can be passed multiple times, resulting in multiple lines in the + SigningTable, which can be used to support signing of subdomains or multiple + domains with the same key; in that case, you probably want to set + `--sigdomain` to `%`, else the domains will not be aligned. + BOOLEAN PARAMETERS ------------------ @@ -57,6 +87,7 @@ EXAMPLES .. code-block:: sh + # Setup the OpenDKIM service __opendkim \ --socket inet:8891@localhost \ --basedir /var/lib/opendkim \ @@ -65,14 +96,24 @@ EXAMPLES --umask 002 \ --syslog - require='__opendkim' \ - __opendkim_genkey default \ - --domain example.com \ - --selector default + # Continue only after the service has been set up + export require="__opendkim" - __opendkim_genkey myfoo \ - --domain foo.com \ - --selector backup + # Generate a key for 'example.com' with selector 'default' + __opendkim_genkey default \ + --domain example.com \ + --selector default + + # Generate a key for 'foo.com' with selector 'backup' + __opendkim_genkey 'foo.com/backup' + + # Generate a key for 'example.org' with selector 'main' + # that can also sign 'cdi.st' and subdomains of 'example.org' + __opendkim_genkey 'example.org/main' \ + --sigdomain '%' \ + --sigkey 'example.org' \ + --sigkey '.example.org' \ + --sigkey 'cdi.st' SEE ALSO diff --git a/type/__opendkim_genkey/manifest b/type/__opendkim_genkey/manifest index 50dcee5..1fee0c1 100755 --- a/type/__opendkim_genkey/manifest +++ b/type/__opendkim_genkey/manifest @@ -38,14 +38,45 @@ case "$os" in __opendkim_genkey currently only supports Alpine Linux. Please contribute an implementation for $os if you can. EOF + exit 1 ;; esac -# Persist user and group for gencode-remote -printf '%s' "${user}" > "${__object:?}/user" -printf '%s' "${group}" > "${__object:?}/group" -SELECTOR="$(cat "${__object:?}/parameter/selector")" -DOMAIN="$(cat "${__object:?}/parameter/domain")" +# Logic to simplify the type as documented in +# https://code.ungleich.ch/ungleich-public/cdist-contrib/issues/20#issuecomment-14711 +DOMAIN="$(cat "${__object:?}/parameter/domain" 2>/dev/null || true)" +SELECTOR="$(cat "${__object:?}/parameter/selector" 2>/dev/null || true)" +if [ -z "${DOMAIN}${SELECTOR}" ]; then + # Neither SELECTOR nor DOMAIN were passed, try to use __object_id + if echo "${__object_id:?}" | \ + grep -qE '^[^/[:space:]]+/[^/[:space:]]+$'; then + # __object_id matches, let's get the data + DOMAIN="$(echo "${__object_id:?}" | cut -d '/' -f 1)" + SELECTOR="$(echo "${__object_id:?}" | cut -d '/' -f 2)" + else + # It doesn't match the pattern, this is sad + cat <<- EOF >&2 + The arguments --domain and --selector were not used. + So __object_id must match DOMAIN/SELECTOR. + But instead the type got: ${__object_id:?} + EOF + exit 1 + fi +elif [ -z "${DOMAIN}" ] || [ -z "${SELECTOR}" ]; then + # Only one was passed, this is sad :-( + cat <<- EOF >&2 + You must pass either both --selector and --domain or none of them. + If these arguments are absent, __object_id must match: DOMAIN/SELECTOR. + EOF + exit 1 +# else: both were passed +fi + +# Persist data for gencode-remote +printf '%s' "${user:?}" > "${__object:?}/user" +printf '%s' "${group:?}" > "${__object:?}/group" +printf '%s' "${DOMAIN:?}" > "${__object:?}/domain" +printf '%s' "${SELECTOR:?}" > "${__object:?}/selector" DIRECTORY="/var/db/dkim/" if [ -f "${__object:?}/parameter/directory" ]; @@ -59,6 +90,11 @@ if [ -f "${__object:?}/parameter/sigkey" ]; then SIGKEY="$(cat "${__object:?}/parameter/sigkey")" fi +SIGDOMAIN="${DOMAIN:?}" +if [ -f "${__object:?}/parameter/sigdomain" ]; +then + SIGDOMAIN="$(cat "${__object:?}/parameter/sigdomain")" +fi # Ensure the key-container directory exists with the proper permissions __directory "${DIRECTORY}" \ @@ -76,10 +112,28 @@ esac key_table="${CFG_DIR}/KeyTable" signing_table="${CFG_DIR}/SigningTable" -__line "line-key-${__object_id:?}" \ - --file "${key_table}" \ - --line "${SELECTOR:?}._domainkey.${DOMAIN:?} ${DOMAIN:?}:${SELECTOR:?}:${DIRECTORY:?}${SELECTOR:?}.private" +KEY_STATE="$(cut -f 1 "${__object:?}/explorer/key-state")" +KEY_LOCATION="$(cut -f 2- "${__object:?}/explorer/key-state")" -__line "line-sig-${__object_id:?}" \ +__line "__opendkim_genkey/${__object_id:?}" \ + --file "${key_table}" \ + --line "${__object_id:?} ${SIGDOMAIN:?}:${SELECTOR:?}:${KEY_LOCATION:?}" \ + --regex "^${__object_id:?}[[:space:]]" \ + --state 'replace' + +sigtable_block() { + for sigkey in ${SIGKEY:?}; do + echo "${sigkey:?} ${__object_id:?}" + done +} +__block "__opendkim_genkey/${__object_id:?}" \ --file "${signing_table}" \ - --line "${SIGKEY:?} ${SELECTOR:?}._domainkey.${DOMAIN:?}" + --text "$(sigtable_block)" + +if [ "${KEY_STATE:?}" = "present" ]; then + # Ensure proper permissions for the key file + __file "${KEY_LOCATION}" \ + --owner "${user}" \ + --group "${group}" \ + --mode 0600 +fi diff --git a/type/__opendkim_genkey/parameter/optional b/type/__opendkim_genkey/parameter/optional index e44793f..9d9b6d1 100644 --- a/type/__opendkim_genkey/parameter/optional +++ b/type/__opendkim_genkey/parameter/optional @@ -1,4 +1,6 @@ bits directory +domain unrestricted -sigkey +selector +sigdomain diff --git a/type/__opendkim_genkey/parameter/optional_multiple b/type/__opendkim_genkey/parameter/optional_multiple new file mode 100644 index 0000000..35978a9 --- /dev/null +++ b/type/__opendkim_genkey/parameter/optional_multiple @@ -0,0 +1 @@ +sigkey diff --git a/type/__opendkim_genkey/parameter/required b/type/__opendkim_genkey/parameter/required deleted file mode 100644 index 4dacb77..0000000 --- a/type/__opendkim_genkey/parameter/required +++ /dev/null @@ -1,2 +0,0 @@ -domain -selector From 79baaf02b1ffd472679ecb6fb3ff0fd927f75c51 Mon Sep 17 00:00:00 2001 From: Evilham Date: Fri, 25 Mar 2022 11:08:39 +0100 Subject: [PATCH 05/21] [__opendkim_genkey] Improve error text for unsupported OS It was not listing FreeBSD, which is currently supported. --- type/__opendkim_genkey/manifest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/type/__opendkim_genkey/manifest b/type/__opendkim_genkey/manifest index 1fee0c1..58e9b06 100755 --- a/type/__opendkim_genkey/manifest +++ b/type/__opendkim_genkey/manifest @@ -35,8 +35,8 @@ case "$os" in ;; *) cat <<- EOF >&2 - __opendkim_genkey currently only supports Alpine Linux. Please - contribute an implementation for $os if you can. + __opendkim_genkey currently only supports Alpine Linux and FreeBSD. + Please contribute an implementation for $os if you can. EOF exit 1 ;; From 116acebd102986303921d24209084b2c28e6416a Mon Sep 17 00:00:00 2001 From: Evilham Date: Tue, 15 Mar 2022 21:39:26 +0100 Subject: [PATCH 06/21] [__opendkim] Deprecate --userid The parameter could produce inconsistencies permissions-wise. Users of the type that need this functionality can still use: --custom-config 'UserId $USERID' Closes #17 --- type/__opendkim/man.rst | 14 +++++++++----- type/__opendkim/parameter/deprecated/userid | 2 ++ 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 type/__opendkim/parameter/deprecated/userid diff --git a/type/__opendkim/man.rst b/type/__opendkim/man.rst index e3f3e7a..996f16d 100644 --- a/type/__opendkim/man.rst +++ b/type/__opendkim/man.rst @@ -41,21 +41,25 @@ subdomains umask Set the umask for the socket and PID file. -userid - Change the user the opendkim program is to run as. - By default, Alpine Linux's OpenRC service will set this to `opendkim` on the - command-line and FreeBSD's rc will set it to `mailnull`. - custom-config The string following this parameter is appended as-is in the configuration, to enable more complex configurations. + BOOLEAN PARAMETERS ------------------ syslog Log to syslog. +DEPRECATED PARAMETERS +--------------------- +userid + Change the user the opendkim program is to run as. + By default, Alpine Linux's OpenRC service will set this to `opendkim` on the + command-line and FreeBSD's rc will set it to `mailnull`. + + EXAMPLES -------- diff --git a/type/__opendkim/parameter/deprecated/userid b/type/__opendkim/parameter/deprecated/userid new file mode 100644 index 0000000..1815a0a --- /dev/null +++ b/type/__opendkim/parameter/deprecated/userid @@ -0,0 +1,2 @@ +This can cause inconsistencies with permissions and will stop being supported. +If you still need this, you can use --custom-config 'UserId $USERID'. From b7ba43553b5af90df2d18e83f4ad86b7820553dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Floure?= Date: Thu, 16 May 2024 17:05:45 +0200 Subject: [PATCH 07/21] [__php_fpm*] add support for Debian and Ubuntu --- type/__php_fpm/files/php.ini.sh | 2 +- type/__php_fpm/man.rst | 3 +-- type/__php_fpm/manifest | 45 ++++++++++++++++++++++++--------- type/__php_fpm_pool/man.rst | 2 +- type/__php_fpm_pool/manifest | 24 +++++++++++------- 5 files changed, 51 insertions(+), 25 deletions(-) diff --git a/type/__php_fpm/files/php.ini.sh b/type/__php_fpm/files/php.ini.sh index 8fbc4ac..ec7e446 100755 --- a/type/__php_fpm/files/php.ini.sh +++ b/type/__php_fpm/files/php.ini.sh @@ -20,7 +20,7 @@ variables_order = "GPCS" zend.assertions = -1 ; Local custom variations -include_path = ".:/usr/share/php${PHPVER:?}" +include_path = ".:${PHP_INCLUDEDIR}" memory_limit = ${MEMORY_LIMIT:?} post_max_size = ${UPLOAD_MAX_FILESIZE:?} upload_max_filesize = ${UPLOAD_MAX_FILESIZE:?} diff --git a/type/__php_fpm/man.rst b/type/__php_fpm/man.rst index 08b479e..4306687 100644 --- a/type/__php_fpm/man.rst +++ b/type/__php_fpm/man.rst @@ -12,8 +12,7 @@ This type installs and configures PHP-FPM for a given version of PHP. It is expected to be used in combination with cdist-type__php_fpm_pool, which configures specific pools. -Note that currently, this type is only implemented for Alpine Linux. - +This type supports Debian, Ubuntu and Alpine Linux. REQUIRED PARAMETERS ------------------- diff --git a/type/__php_fpm/manifest b/type/__php_fpm/manifest index 84c4383..9c32716 100644 --- a/type/__php_fpm/manifest +++ b/type/__php_fpm/manifest @@ -6,18 +6,39 @@ PHPVER=$(cat "${__object:?}/parameter/php-version") export PHPVER case "$os" in -'alpine') - package="php${PHPVER}-fpm" - service="php-fpm${PHPVER}" - opcache_package="php${PHPVER}-opcache" - apcu_package="php${PHPVER}-pecl-apcu" - ;; + 'alpine') + # Alpine packages looks like php81-fpm - we make sure to remove dots from user + # input. + PHPVER=$(echo "$PHPVER" | tr -d '.') -*) - printf "Your operating system is currently not supported by this type\n" >&2 - printf "Please contribute an implementation for it if you can.\n" >&2 - exit 1 + package="php${PHPVER}-fpm" + opcache_package="php${PHPVER}-opcache" + apcu_package="php${PHPVER}-pecl-apcu" + + service="php-fpm${PHPVER}" + php_confdir="/etc/php${PHPVER}" + php_ini="${php_confdir:?}/php.ini" + + PHP_INCLUDEDIR="/usr/share/php${PHPVER:?}" + export PHP_INCLUDEDIR ;; + 'debian'|'ubuntu') + package="php${PHPVER}-fpm" + opcache_package="php${PHPVER}-opcache" + apcu_package="php${PHPVER}-apcu" + + service="php${PHPVER}-fpm" + php_confdir="/etc/php/${PHPVER}" + php_ini="${php_confdir:?}/fpm/php.ini" + + PHP_INCLUDEDIR="/usr/share/php/${PHPVER:?}" + export PHP_INCLUDEDIR + ;; + *) + printf "Your operating system is currently not supported by this type\n" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; esac __package "$package" @@ -40,8 +61,8 @@ export UPLOAD_MAX_FILESIZE mkdir -p "${__object:?}/files" "${__type:?}/files/php.ini.sh" >"${__object:?}/files/php.ini" -require="__package/$package" __file "/etc/php${PHPVER}/php.ini" \ +require="__package/$package" __file "${php_ini:?}" \ --mode 644 --source "${__object:?}/files/php.ini" \ --onchange "service $service restart" -require="__file/etc/php${PHPVER}/php.ini" __service "$service" --action start +require="__file/${php_ini:?}" __service "$service" --action start diff --git a/type/__php_fpm_pool/man.rst b/type/__php_fpm_pool/man.rst index cd96175..da6dd3a 100644 --- a/type/__php_fpm_pool/man.rst +++ b/type/__php_fpm_pool/man.rst @@ -13,7 +13,7 @@ This type configures a pool named after the `__object_id` for a specified PHP version. Note that this types expects a same-version cdist-type__php_fpm type to have been run first: the user is responsible for doing so. -Note that currently, this type is only implemented for Alpine Linux. +This type supports Debian, Ubuntu and Alpine Linux. REQUIRED PARAMETERS diff --git a/type/__php_fpm_pool/manifest b/type/__php_fpm_pool/manifest index 49579d7..3c8491a 100644 --- a/type/__php_fpm_pool/manifest +++ b/type/__php_fpm_pool/manifest @@ -7,16 +7,22 @@ PHPVER=$(cat "${__object:?}/parameter/php-version") export PHPVER case "$os" in -'alpine') - service="php-fpm${PHPVER}" - : + 'alpine') + PHPVER=$(echo "$PHP_VERSION" | tr -d '.') + service="php-fpm${PHPVER}" + php_confdir="/etc/php${PHPVER}" + php_pooldir="${php_confdir:?}/php-fpm.d" ;; - -*) - printf "Your operating system is currently not supported by this type\n" >&2 - printf "Please contribute an implementation for it if you can.\n" >&2 - exit 1 + 'debian'|'ubuntu') + service="php${PHPVER}-fpm" + php_confdir="/etc/php/${PHPVER}" + php_pooldir="${php_confdir:?}/fpm/pool.d" ;; + *) + printf "Your operating system is currently not supported by this type\n" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; esac POOL_NAME="$name" @@ -29,6 +35,6 @@ export POOL_USER POOL_GROUP POOL_LISTEN_ADDR POOL_LISTEN_OWNER POOL_NAME mkdir -p "${__object:?}/files" "${__type:?}/files/www.conf.sh" >"${__object:?}/files/www.conf" -__file "/etc/php${PHPVER:?}/php-fpm.d/${name}.conf" \ +__file "${php_pooldir:?}/${name}.conf" \ --mode 644 --source "${__object:?}/files/www.conf" \ --onchange "service $service reload" From 624bf996f69f86bdb342a05ef6e72bf1c81c2012 Mon Sep 17 00:00:00 2001 From: Evilham Date: Thu, 16 May 2024 11:55:41 +0200 Subject: [PATCH 08/21] [__jitsi_meet*] Update to 2.0.9457 Changelog: https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-WEB.md#209457-2024-04-23 Sponsored by: camilion.eu, eXO.cat --- type/__jitsi_meet/manifest | 11 +- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 482 +++++++++++++----- .../files/config.js.sh.orig | 478 ++++++++++++----- .../files/interface_config.js.sh | 7 +- .../files/interface_config.js.sh.orig | 7 +- type/__jitsi_meet_domain/files/jitsi-version | 2 +- type/__jitsi_meet_domain/files/nginx.sh | 47 +- type/__jitsi_meet_domain/files/nginx.sh.orig | 38 +- .../files/prosody.cfg.lua.sh | 13 +- .../files/prosody.cfg.lua.sh.orig | 13 +- 11 files changed, 800 insertions(+), 300 deletions(-) diff --git a/type/__jitsi_meet/manifest b/type/__jitsi_meet/manifest index 5b5a11e..63c8a28 100755 --- a/type/__jitsi_meet/manifest +++ b/type/__jitsi_meet/manifest @@ -195,6 +195,15 @@ 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' @@ -264,7 +273,7 @@ if [ -f "${__object}/parameter/disable-prometheus-exporter" ]; then else EXPORTER_STATE="present" fi -__evilham_single_binary_service prometheus-jitsi-meet-exporter \ +__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 334d843..f7511e8 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_8319" +BRANCH="jitsi-meet_9457" 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 3c1cf1a..abcb0a9 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -53,25 +53,51 @@ 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: '///http-bind', + bosh: 'https:///http-bind', - // Websocket URL + // Websocket URL (XMPP) // websocket: 'wss://${DOMAIN}/xmpp-websocket', + // Whether BOSH should be preferred over WebSocket if both are configured. + // preferBosh: false, + // 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 supports for AV1 codec. + // enableAv1Support: 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 @@ -86,10 +112,11 @@ var config = { // This is useful when the client runs on a host with limited resources. // noAutoPlayVideo: 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. + // Experiment: Whether to skip interim transcriptions. + // skipInterimTranscriptions: false, + + // Dump transcripts to a element for debugging. + // dumpTranscript: false, }, // Disables moderator indicators. @@ -133,9 +160,6 @@ var config = { // Media // - // Enable unified plan implementation support on Chromium based browsers. - // enableUnifiedOnChrome: false, - // Audio // Disable measuring of audio levels. @@ -191,8 +215,27 @@ 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_16.kw + // - https://meet.example.com/libs/krisp/models/model_32.kw + // NOTE: Krisp JS SDK v1.0.9 was tested. + // noiseSuppression: { + // krisp: { + // enabled: false, + // logProcessStats: false, + // debugLogs: false, + // }, + // }, + // Video + // Sets the default camera facing mode. + // cameraFacingMode: 'user', + // Sets the preferred resolution (height) for local video. Defaults to 720. // resolution: 720, @@ -252,12 +295,6 @@ $(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}, @@ -273,12 +310,19 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // max: 5, // }, - // 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, + // 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' + // }, // Recording @@ -295,6 +339,18 @@ $(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, + // }, + // recordingService: { // // When integrations like dropbox are enabled only that will be shown, // // by enabling fileRecordingsServiceEnabled, we show both the integrations @@ -355,7 +411,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // DEPRECATED. Use transcription.preferredLanguage instead. // preferredTranscribeLanguage: 'en-US', - // DEPRECATED. Use transcription.autoCaptionOnRecord instead. + // DEPRECATED. Use transcription.autoTranscribeOnRecord instead. // autoCaptionOnRecord: false, // Transcription options. @@ -384,11 +440,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // ./src/react/features/transcribing/transcriber-langs.json. // preferredLanguage: 'en-US', - // // Disable start transcription for all participants. - // disableStartForAll: false, - - // // Enables automatic turning on captions when recording is started - // autoCaptionOnRecord: false, + // // Enables automatic turning on transcribing when recording is started + // autoTranscribeOnRecord: false, // }, // Misc @@ -410,44 +463,55 @@ $(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 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 preference on desktop based endpoints. + // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ], // - // // 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, + // // Codec specific settings for scalability modes and max bitrates. + // av1: { + // maxBitratesVideo: { + // low: 100000, + // standard: 300000, + // high: 1000000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true, + // useSimulcast: false, + // useKSVC: true + // }, + // h264: { + // maxBitratesVideo: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true + // }, + // vp8: { + // maxBitratesVideo: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: false + // }, + // vp9: { + // maxBitratesVideo: { + // low: 100000, + // standard: 300000, + // high: 1200000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true, + // useSimulcast: false, + // useKSVC: true + // } // + // DEPRECATED! Use \`codec specific settings\` instead. // // 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 @@ -486,6 +550,24 @@ $(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' ], + // + // // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. + // // 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', + // + // // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. + // // 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', + // // }, // Notification timeouts @@ -569,6 +651,9 @@ $(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. @@ -579,12 +664,12 @@ $(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\`. @@ -628,6 +713,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. + // DEPRECATED! Use the \`lang\` iframe option directly instead. defaultLanguage: '${DEFAULT_LANGUAGE}', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -651,7 +737,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. - // // This replaces \`prejoinPageEnabled\`. + // // This replaces \`prejoinPageEnabled\`. Defaults to true. // 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 @@ -822,6 +908,42 @@ $(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: [], @@ -831,7 +953,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; }> + // type: Array<{ icon: string; id: string; text: string; backgroundColor?: string; }> // customToolbarButtons: [], // Stats @@ -846,38 +968,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // The interval at which PeerConnection.getStats() is called. Defaults to 10000 // pcStatsInterval: 10000, - // 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 + // Enables sending participants' display names to stats // enableDisplayNameInStats: false, - // Enables sending participants' emails (if available) to callstats and other analytics + // Enables sending participants' emails (if available) to stats and other analytics // enableEmailInStats: false, // faceLandmarks: { @@ -900,7 +994,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // captureInterval: 1000, // }, - // Controls the percentage of automatic feedback shown to participants when callstats is enabled. + // Controls the percentage of automatic feedback shown to participants. // The default value is 100%. If set to 0, no automatic feedback will be requested // feedbackPercentage: 100, @@ -908,7 +1002,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 callstats integration + // This means avatars will be locally generated and external stats integration // will not function. disableThirdPartyRequests: $(if [ -z "${ENABLE_THIRD_PARTY_REQUESTS}" ]; then printf "true"; else printf "false"; fi), @@ -925,9 +1019,6 @@ $(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 @@ -936,12 +1027,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 video codec preference on the p2p connection. Acceptable - // codec values are 'VP8', 'VP9' and 'H264'. - // preferredCodec: 'H264', - - // Provides a way to prevent a video codec from being negotiated on the p2p connection. - // disabledCodec: '', + // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based + // endpoints. + // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ], + // + // Provides a way to set the codec preference on desktop based endpoints. + // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ], // 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). @@ -953,6 +1044,15 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // { urls: 'stun:jitsi-meet.example.com:3478' }, { urls: 'stun:${TURN_SERVER}:443' }, ], + + // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. + // Provides a way to set the video codec preference on the p2p connection. Acceptable + // codec values are 'VP8', 'VP9' and 'H264'. + // preferredCodec: 'H264', + + // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. + // Provides a way to prevent a video codec from being negotiated on the p2p connection. + // disabledCodec: '', }, analytics: { @@ -970,6 +1070,10 @@ ${ANALYTICS_SETTINGS} // The Amplitude APP Key: // amplitudeAPPKey: '', + // Enables Amplitude UTM tracking: + // Default value is false. + // amplitudeIncludeUTM: false, + // Obfuscates room name sent to analytics (amplitude, rtcstats) // Default value is false. // obfuscateRoomName: false, @@ -999,6 +1103,11 @@ ${ANALYTICS_SETTINGS} // "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 @@ -1070,7 +1179,12 @@ ${ANALYTICS_SETTINGS} // }, // e2ee: { - // labels, + // labels: { + // description: '', + // label: '', + // tooltip: '', + // warning: '', + // }, // externallyManagedKey: false, // }, @@ -1108,9 +1222,17 @@ ${ANALYTICS_SETTINGS} // https://firebase.google.com/docs/dynamic-links/create-manually // deeplinking: { // - // // The desktop deeplinking config. + // // The desktop deeplinking config, disabled by default. // desktop: { - // appName: 'Jitsi Meet' + // 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 // }, // // If true, any checks to handoff to another application will be prevented // // and instead the app will continue to display in the current browser. @@ -1155,6 +1277,17 @@ ${ANALYTICS_SETTINGS} // } // }, + // // 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, @@ -1186,6 +1319,8 @@ ${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. @@ -1206,9 +1341,6 @@ ${ANALYTICS_SETTINGS} // 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. @@ -1232,6 +1364,16 @@ ${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 @@ -1247,7 +1389,6 @@ ${ANALYTICS_SETTINGS} ui03: "violet", ui04: "magenta", ui05: "blueviolet", - field02Hover: 'red', action01: 'green', action01Hover: 'lightgreen', disabled01: 'beige', @@ -1268,6 +1409,8 @@ ${ANALYTICS_SETTINGS} // Options related to the participants pane. // participantsPane: { + // // Enables feature + // enabled: true, // // Hides the moderator settings tab. // hideModeratorSettingsTab: false, // // Hides the more actions button. @@ -1286,13 +1429,13 @@ ${ANALYTICS_SETTINGS} // hideJoinRoomButton: false, // }, + // When true, virtual background feature will be disabled. + // disableVirtualBackground: false, + // When true the user cannot add more images to be used as virtual background. // Only the default ones from will be available. // disableAddingBackgroundImages: false, - // Disables using screensharing as virtual background. - // disableScreensharingVirtualBackground: false, - // Sets the background transparency level. '0' is fully transparent, '1' is opaque. // backgroundAlpha: 1, @@ -1319,7 +1462,6 @@ ${ANALYTICS_SETTINGS} // 'conference-timer', // 'participants-count', // 'e2ee', - // 'transcribing', // 'video-quality', // 'insecure-room', // 'highlight-moment', @@ -1363,6 +1505,31 @@ ${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' + // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before + // and will automatically redirect to the token service to get the token for the meeting. + // tokenAuthUrlAutoRedirect: false + // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold @@ -1374,8 +1541,6 @@ ${ANALYTICS_SETTINGS} dialOutRegionUrl disableRemoteControl displayJids - externalConnectUrl - e2eeLabels firefox_fake_device googleApiApplicationClientID iAmRecorder @@ -1384,7 +1549,6 @@ ${ANALYTICS_SETTINGS} peopleSearchQueryTypes peopleSearchUrl requireDisplayName - tokenAuthUrl */ /** @@ -1398,18 +1562,15 @@ ${ANALYTICS_SETTINGS} /** _peerConnStatusOutOfLastNTimeout _peerConnStatusRtcMuteTimeout - abTesting avgRtpStatsN - callStatsConfIDNamespace - callStatsCustomScriptUrl desktopSharingSources disableAEC disableAGC disableAP disableHPF + disableLocalStats disableNS enableTalkWhileMuted - forceJVB121Ratio forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled @@ -1433,6 +1594,7 @@ ${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) @@ -1443,10 +1605,12 @@ ${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 @@ -1454,37 +1618,45 @@ ${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.connectedTwoMembers', // show when two participants joined simultaneously // '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.connectedTwoMembers', // show when two participants joined simultaneously + // 'notify.dataChannelClosed', // shown when the bridge channel has been disconnected // '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.moderationStartedTitle', // shown when AV moderation is activated - // 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated + // '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.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation // 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation - // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation + // 'notify.moderator', // shown when user gets moderator privilege // '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 partcipant 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.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', @@ -1507,6 +1679,8 @@ ${ANALYTICS_SETTINGS} // disableFilmstripAutohiding: false, // filmstrip: { + // // Disable the vertical/horizonal filmstrip. + // disabled: false, // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip // // (width, tiles aspect ratios) through the interfaceConfig options. // disableResizable: false, @@ -1529,6 +1703,8 @@ ${ANALYTICS_SETTINGS} // 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, @@ -1560,13 +1736,12 @@ ${ANALYTICS_SETTINGS} // logging: { // // Default log level for the app and lib-jitsi-meet. // defaultLogLevel: 'trace', - // // Option to disable LogCollector (which stores the logs on CallStats). + // // Option to disable LogCollector. // //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/statistics/CallStats.js': 'info', // 'modules/xmpp/strophe.util.js': 'log', // }, @@ -1580,6 +1755,45 @@ ${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, + // }, + + // 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; // }, }; diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 422d2f1..6cc6723 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -46,25 +46,51 @@ var config = { }, // BOSH URL. FIXME: use XEP-0156 to discover it. - bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind', + bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind', - // Websocket URL + // Websocket URL (XMPP) // websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket', + // Whether BOSH should be preferred over WebSocket if both are configured. + // preferBosh: false, + // 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 supports for AV1 codec. + // enableAv1Support: 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 @@ -79,10 +105,11 @@ var config = { // This is useful when the client runs on a host with limited resources. // noAutoPlayVideo: 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. + // Experiment: Whether to skip interim transcriptions. + // skipInterimTranscriptions: false, + + // Dump transcripts to a element for debugging. + // dumpTranscript: false, }, // Disables moderator indicators. @@ -126,9 +153,6 @@ var config = { // Media // - // Enable unified plan implementation support on Chromium based browsers. - // enableUnifiedOnChrome: false, - // Audio // Disable measuring of audio levels. @@ -184,8 +208,27 @@ 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_16.kw + // - https://meet.example.com/libs/krisp/models/model_32.kw + // NOTE: Krisp JS SDK v1.0.9 was tested. + // noiseSuppression: { + // krisp: { + // enabled: false, + // logProcessStats: false, + // debugLogs: false, + // }, + // }, + // Video + // Sets the default camera facing mode. + // cameraFacingMode: 'user', + // Sets the preferred resolution (height) for local video. Defaults to 720. // resolution: 720, @@ -244,12 +287,6 @@ 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, @@ -265,12 +302,19 @@ var config = { // max: 5, // }, - // 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, + // 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' + // }, // Recording @@ -287,6 +331,18 @@ 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, + // }, + // recordingService: { // // When integrations like dropbox are enabled only that will be shown, // // by enabling fileRecordingsServiceEnabled, we show both the integrations @@ -347,7 +403,7 @@ var config = { // DEPRECATED. Use transcription.preferredLanguage instead. // preferredTranscribeLanguage: 'en-US', - // DEPRECATED. Use transcription.autoCaptionOnRecord instead. + // DEPRECATED. Use transcription.autoTranscribeOnRecord instead. // autoCaptionOnRecord: false, // Transcription options. @@ -376,11 +432,8 @@ var config = { // // ./src/react/features/transcribing/transcriber-langs.json. // preferredLanguage: 'en-US', - // // Disable start transcription for all participants. - // disableStartForAll: false, - - // // Enables automatic turning on captions when recording is started - // autoCaptionOnRecord: false, + // // Enables automatic turning on transcribing when recording is started + // autoTranscribeOnRecord: false, // }, // Misc @@ -402,44 +455,55 @@ 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 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 preference on desktop based endpoints. + // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ], // - // // 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, + // // Codec specific settings for scalability modes and max bitrates. + // av1: { + // maxBitratesVideo: { + // low: 100000, + // standard: 300000, + // high: 1000000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true, + // useSimulcast: false, + // useKSVC: true + // }, + // h264: { + // maxBitratesVideo: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true + // }, + // vp8: { + // maxBitratesVideo: { + // low: 200000, + // standard: 500000, + // high: 1500000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: false + // }, + // vp9: { + // maxBitratesVideo: { + // low: 100000, + // standard: 300000, + // high: 1200000, + // ssHigh: 2500000 + // }, + // scalabilityModeEnabled: true, + // useSimulcast: false, + // useKSVC: true + // } // + // DEPRECATED! Use `codec specific settings` instead. // // 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 @@ -478,6 +542,24 @@ 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' ], + // + // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. + // // 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', + // + // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. + // // 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', + // // }, // Notification timeouts @@ -561,6 +643,9 @@ 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. @@ -571,12 +656,12 @@ 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`. @@ -620,6 +705,7 @@ var config = { // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. + // DEPRECATED! Use the `lang` iframe option directly instead. // defaultLanguage: 'en', // Disables profile and the edit of all fields from the profile settings (display name and email) @@ -643,7 +729,7 @@ var config = { // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. - // // This replaces `prejoinPageEnabled`. + // // This replaces `prejoinPageEnabled`. Defaults to true. // 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 @@ -814,6 +900,42 @@ 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: [], @@ -823,7 +945,7 @@ var config = { // customParticipantMenuButtons: [], // An array with custom option buttons for the toolbar - // type: Array<{ icon: string; id: string; text: string; }> + // type: Array<{ icon: string; id: string; text: string; backgroundColor?: string; }> // customToolbarButtons: [], // Stats @@ -838,38 +960,10 @@ var config = { // The interval at which PeerConnection.getStats() is called. Defaults to 10000 // pcStatsInterval: 10000, - // 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 + // Enables sending participants' display names to stats // enableDisplayNameInStats: false, - // Enables sending participants' emails (if available) to callstats and other analytics + // Enables sending participants' emails (if available) to stats and other analytics // enableEmailInStats: false, // faceLandmarks: { @@ -892,7 +986,7 @@ var config = { // captureInterval: 1000, // }, - // Controls the percentage of automatic feedback shown to participants when callstats is enabled. + // Controls the percentage of automatic feedback shown to participants. // The default value is 100%. If set to 0, no automatic feedback will be requested // feedbackPercentage: 100, @@ -900,7 +994,7 @@ var config = { // // If third party requests are disabled, no other server will be contacted. - // This means avatars will be locally generated and callstats integration + // This means avatars will be locally generated and external stats integration // will not function. // disableThirdPartyRequests: false, @@ -917,9 +1011,6 @@ 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 @@ -928,12 +1019,12 @@ var config = { // If not set, the effective value is 'all'. // iceTransportPolicy: 'all', - // 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 prevent a video codec from being negotiated on the p2p connection. - // disabledCodec: '', + // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based + // endpoints. + // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ], + // + // Provides a way to set the codec preference on desktop based endpoints. + // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ], // 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). @@ -945,6 +1036,15 @@ var config = { // { urls: 'stun:jitsi-meet.example.com:3478' }, { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }, ], + + // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. + // Provides a way to set the video codec preference on the p2p connection. Acceptable + // codec values are 'VP8', 'VP9' and 'H264'. + // preferredCodec: 'H264', + + // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. + // Provides a way to prevent a video codec from being negotiated on the p2p connection. + // disabledCodec: '', }, analytics: { @@ -961,6 +1061,10 @@ var config = { // The Amplitude APP Key: // amplitudeAPPKey: '', + // Enables Amplitude UTM tracking: + // Default value is false. + // amplitudeIncludeUTM: false, + // Obfuscates room name sent to analytics (amplitude, rtcstats) // Default value is false. // obfuscateRoomName: false, @@ -990,6 +1094,11 @@ var config = { // "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 @@ -1061,7 +1170,12 @@ var config = { // }, // e2ee: { - // labels, + // labels: { + // description: '', + // label: '', + // tooltip: '', + // warning: '', + // }, // externallyManagedKey: false, // }, @@ -1099,9 +1213,17 @@ var config = { // https://firebase.google.com/docs/dynamic-links/create-manually // deeplinking: { // - // // The desktop deeplinking config. + // // The desktop deeplinking config, disabled by default. // desktop: { - // appName: 'Jitsi Meet' + // 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 // }, // // If true, any checks to handoff to another application will be prevented // // and instead the app will continue to display in the current browser. @@ -1146,6 +1268,13 @@ var config = { // } // }, + // // 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, @@ -1177,6 +1306,8 @@ 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. @@ -1197,9 +1328,6 @@ var config = { // 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. @@ -1223,6 +1351,16 @@ 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 @@ -1238,7 +1376,6 @@ var config = { ui03: "violet", ui04: "magenta", ui05: "blueviolet", - field02Hover: 'red', action01: 'green', action01Hover: 'lightgreen', disabled01: 'beige', @@ -1259,6 +1396,8 @@ var config = { // Options related to the participants pane. // participantsPane: { + // // Enables feature + // enabled: true, // // Hides the moderator settings tab. // hideModeratorSettingsTab: false, // // Hides the more actions button. @@ -1277,13 +1416,13 @@ var config = { // hideJoinRoomButton: false, // }, + // When true, virtual background feature will be disabled. + // disableVirtualBackground: false, + // When true the user cannot add more images to be used as virtual background. // Only the default ones from will be available. // disableAddingBackgroundImages: false, - // Disables using screensharing as virtual background. - // disableScreensharingVirtualBackground: false, - // Sets the background transparency level. '0' is fully transparent, '1' is opaque. // backgroundAlpha: 1, @@ -1310,7 +1449,6 @@ var config = { // 'conference-timer', // 'participants-count', // 'e2ee', - // 'transcribing', // 'video-quality', // 'insecure-room', // 'highlight-moment', @@ -1354,6 +1492,31 @@ 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' + // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before + // and will automatically redirect to the token service to get the token for the meeting. + // tokenAuthUrlAutoRedirect: false + // List of undocumented settings used in jitsi-meet /** _immediateReloadThreshold @@ -1365,8 +1528,6 @@ var config = { dialOutRegionUrl disableRemoteControl displayJids - externalConnectUrl - e2eeLabels firefox_fake_device googleApiApplicationClientID iAmRecorder @@ -1375,7 +1536,6 @@ var config = { peopleSearchQueryTypes peopleSearchUrl requireDisplayName - tokenAuthUrl */ /** @@ -1389,18 +1549,15 @@ var config = { /** _peerConnStatusOutOfLastNTimeout _peerConnStatusRtcMuteTimeout - abTesting avgRtpStatsN - callStatsConfIDNamespace - callStatsCustomScriptUrl desktopSharingSources disableAEC disableAGC disableAP disableHPF + disableLocalStats disableNS enableTalkWhileMuted - forceJVB121Ratio forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled @@ -1424,6 +1581,7 @@ 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) @@ -1434,10 +1592,12 @@ 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 @@ -1445,37 +1605,45 @@ 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.connectedTwoMembers', // show when two participants joined simultaneously // '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.connectedTwoMembers', // show when two participants joined simultaneously + // 'notify.dataChannelClosed', // shown when the bridge channel has been disconnected // '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.moderationStartedTitle', // shown when AV moderation is activated - // 'notify.moderationStoppedTitle', // shown when AV moderation is deactivated + // '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.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation // 'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation - // 'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation + // 'notify.moderator', // shown when user gets moderator privilege // '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 partcipant 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.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', @@ -1498,6 +1666,8 @@ var config = { // disableFilmstripAutohiding: false, // filmstrip: { + // // Disable the vertical/horizonal filmstrip. + // disabled: false, // // Disables user resizable filmstrip. Also, allows configuration of the filmstrip // // (width, tiles aspect ratios) through the interfaceConfig options. // disableResizable: false, @@ -1520,6 +1690,8 @@ var config = { // 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, @@ -1551,13 +1723,12 @@ var config = { // logging: { // // Default log level for the app and lib-jitsi-meet. // defaultLogLevel: 'trace', - // // Option to disable LogCollector (which stores the logs on CallStats). + // // Option to disable LogCollector. // //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/statistics/CallStats.js': 'info', // 'modules/xmpp/strophe.util.js': 'log', // }, @@ -1571,6 +1742,45 @@ 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, + // }, + + // 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; // }, }; diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh b/type/__jitsi_meet_domain/files/interface_config.js.sh index 1aad856..e9d8a21 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh @@ -81,7 +81,8 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, - ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation. + // DEPRECATED. Animation no longer supported. + // ENABLE_FEEDBACK_ANIMATION: false, FILM_STRIP_MAX_HEIGHT: 120, @@ -117,8 +118,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, edge, electron, firefox, nwjs, opera, safari - OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ], + // chrome, chromium, electron, firefox , safari, webkit + OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ], POLICY_LOGO: null, PROVIDER_NAME: 'Jitsi', 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 2f8591c..ae1ea30 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig @@ -70,7 +70,8 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, - ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation. + // DEPRECATED. Animation no longer supported. + // ENABLE_FEEDBACK_ANIMATION: false, FILM_STRIP_MAX_HEIGHT: 120, @@ -106,8 +107,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, edge, electron, firefox, nwjs, opera, safari - OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ], + // chrome, chromium, electron, firefox , safari, webkit + OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ], POLICY_LOGO: null, PROVIDER_NAME: 'Jitsi', diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index d64455b..aa2ad3c 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.8319-1 \ No newline at end of file +2.0.9457-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 249aa93..241de9b 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh +++ b/type/__jitsi_meet_domain/files/nginx.sh @@ -12,6 +12,11 @@ JITSI_NGINX_CONFIG="$(cat < Date: Thu, 16 May 2024 11:59:34 +0200 Subject: [PATCH 09/21] __jitsi_meet: improve screensharing in certain situations We had been noticing issues when sharing screen that required refreshing (sometimes from presentors, sometimes from receivers), or else people would get a shared black screen or hanging screen after some time. This somewhat undocumented jitsi-videobridge setting appears to have fixed the issue on all instances tested: videobridge.cc.trust-bwe = false Announcement: https://agora.exo.cat/t/exofasia-3/276#meetexocatguifinet-4 Relevant links: - https://community.jitsi.org/t/jitsi-users-video-turned-off-to-save-bandwidth-on-meet-jit-si/12735/2 - https://github.com/jitsi/jitsi-videobridge/blob/master/CONFIG.md#migrating-from-old-config Sponsored by: camilion.eu, eXO.cat --- type/__jitsi_meet/manifest | 3 +++ 1 file changed, 3 insertions(+) diff --git a/type/__jitsi_meet/manifest b/type/__jitsi_meet/manifest index 63c8a28..0c210a3 100755 --- a/type/__jitsi_meet/manifest +++ b/type/__jitsi_meet/manifest @@ -254,6 +254,9 @@ videobridge { enabled = true } } + cc { + trust-bwe = false + } } EOFJVB From fe523fe9937dd05a0deb3cbbd79cf4311e46112d Mon Sep 17 00:00:00 2001 From: Evilham Date: Thu, 16 May 2024 12:36:40 +0200 Subject: [PATCH 10/21] __opendkim: fix start_on_boot on FreeBSD There was a bit of an oddity with this, it is implemented in a way that should not be an issue for other systems. Reviewed at: https://code.ungleich.ch/ungleich-public/cdist-contrib/pulls/31 --- type/__opendkim/manifest | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/type/__opendkim/manifest b/type/__opendkim/manifest index dbd9fc0..28dd808 100755 --- a/type/__opendkim/manifest +++ b/type/__opendkim/manifest @@ -29,6 +29,7 @@ case "$os" in 'freebsd') CFG_DIR="/usr/local/etc/mail" service="milter-opendkim" + start_service="milteropendkim" ;; *) printf "__opendkim does not yet support %s.\n" "$os" >&2 @@ -90,7 +91,11 @@ fi require="__package/opendkim" __file "$target_file" \ --source "$source_file" --mode 0644 -require="__package/opendkim" __start_on_boot "${service}" +# 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}}" # Ensure Key and Signing tables exist and have proper permissions key_table="${CFG_DIR}/KeyTable" @@ -105,7 +110,7 @@ require="__package/opendkim" \ --mode 444 require="__file${target_file} __file${key_table} - __file${signing_table} __start_on_boot/${service}" \ + __file${signing_table} __start_on_boot/${start_service:-${service}}" \ __check_messages opendkim \ --pattern "^__file${target_file}" \ --execute "service ${service} restart" From 0f6b03b7c16f9da14ed714baf425b25a823d269e Mon Sep 17 00:00:00 2001 From: Evilham Date: Fri, 11 Apr 2025 10:20:05 +0200 Subject: [PATCH 11/21] __jitsi_meet: upgrade to 2.0.10184 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 319 +++++++++++------- .../files/config.js.sh.orig | 319 +++++++++++------- .../files/interface_config.js.sh | 13 +- .../files/interface_config.js.sh.orig | 13 +- type/__jitsi_meet_domain/files/jitsi-version | 2 +- type/__jitsi_meet_domain/files/nginx.sh | 8 + type/__jitsi_meet_domain/files/nginx.sh.orig | 8 + .../files/prosody.cfg.lua.sh | 22 +- .../files/prosody.cfg.lua.sh.orig | 19 ++ 10 files changed, 465 insertions(+), 260 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index f7511e8..7fcc7cf 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_9457" +BRANCH="jitsi-meet_10184" 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 abcb0a9..d703ddd 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -56,7 +56,9 @@ var config = { bosh: 'https:///http-bind', // Websocket URL (XMPP) - // websocket: 'wss://${DOMAIN}/xmpp-websocket', + websocket: 'wss://${DOMAIN}/' + subdir + 'xmpp-websocket', + + // websocketKeepAliveUrl: 'https://${DOMAIN}/' + subdir + '_unlock', // Whether BOSH should be preferred over WebSocket if both are configured. // preferBosh: false, @@ -91,15 +93,11 @@ var config = { // 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 supports for AV1 codec. - // enableAv1Support: 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 + // Enables the use of the codec selection API supported by the browsers . + // enableCodecSelectionAPI: false, // P2P test mode disables automatic switching to P2P when there are 2 // participants in the conference. @@ -117,6 +115,12 @@ var config = { // 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, }, // Disables moderator indicators. @@ -131,6 +135,9 @@ var config = { // Disables polls feature. // disablePolls: false, + // Disables demote button from self-view + // disableSelfDemote: false, + // Disables self-view tile. (hides it from tile view and from filmstrip) // disableSelfView: false, @@ -220,14 +227,45 @@ var config = { // 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_16.kw - // - https://meet.example.com/libs/krisp/models/model_32.kw - // NOTE: Krisp JS SDK v1.0.9 was tested. + // - 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', + // } // }, // }, @@ -239,9 +277,26 @@ var config = { // 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, @@ -326,9 +381,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Recording - // DEPRECATED. Use recordingService.enabled instead. - // fileRecordingsEnabled: false, - // Enable the dropbox integration. // dropbox: { // appKey: '', // Specify your app key here. @@ -349,6 +401,11 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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, // }, // recordingService: { @@ -421,7 +478,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // Translation languages. // // Available languages can be found in - // // ./src/react/features/transcribing/translation-languages.json. + // // ./lang/translation-languages.json. // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -442,6 +499,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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, // }, // Misc @@ -467,7 +528,16 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // videoQuality: { // // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ], + // + // // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', + // + // // 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: { @@ -475,6 +545,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // low: 100000, // standard: 300000, // high: 1000000, + // fullHd: 2000000, + // ultraHd: 4000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, @@ -486,6 +558,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true @@ -495,6 +569,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: false @@ -504,35 +580,13 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // low: 100000, // standard: 300000, // high: 1200000, + // fullHd: 2500000, + // ultraHd: 5000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, // useSimulcast: false, // useKSVC: true - // } - // - // DEPRECATED! Use \`codec specific settings\` instead. - // // 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 @@ -551,23 +605,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // }, // // // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint - // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264' ], - // - // // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. - // // 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', - // - // // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. - // // 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', - // + // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ], // }, // Notification timeouts @@ -575,6 +613,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // short: 2500, // medium: 5000, // long: 10000, + // extraLong: 60000, // }, // // Options for the recording limit notification. @@ -604,14 +643,6 @@ $(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, @@ -734,6 +765,12 @@ $(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. @@ -745,6 +782,11 @@ $(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: '' // }, // When 'true', the user cannot edit the display name. @@ -763,10 +805,6 @@ $(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/' ], @@ -848,6 +886,22 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // autoHideWhileChatIsOpen: false, // }, + // 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' ] + // ], + // 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 @@ -1029,10 +1083,14 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based // endpoints. - // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ], + // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ], // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ], + + // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', // 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). @@ -1044,15 +1102,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // { urls: 'stun:jitsi-meet.example.com:3478' }, { urls: 'stun:${TURN_SERVER}:443' }, ], - - // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. - // Provides a way to set the video codec preference on the p2p connection. Acceptable - // codec values are 'VP8', 'VP9' and 'H264'. - // preferredCodec: 'H264', - - // DEPRECATED! Use \`codecPreferenceOrder/mobileCodecPreferenceOrder\` instead. - // Provides a way to prevent a video codec from being negotiated on the p2p connection. - // disabledCodec: '', }, analytics: { @@ -1060,9 +1109,6 @@ ${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', @@ -1100,7 +1146,6 @@ ${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", // ], @@ -1186,6 +1231,7 @@ ${ANALYTICS_SETTINGS} // warning: '', // }, // externallyManagedKey: false, + // disabled: false, // }, // Options related to end-to-end (participant to participant) ping. @@ -1347,8 +1393,12 @@ ${ANALYTICS_SETTINGS} 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 @@ -1407,6 +1457,13 @@ ${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 @@ -1529,26 +1586,64 @@ ${ANALYTICS_SETTINGS} // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before // and will automatically redirect to the token service to get the token for the meeting. // tokenAuthUrlAutoRedirect: false + // An option to respect the context.tenant jwt field compared to the current tenant from the url + // tokenRespectTenant: 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 + // }, + // }, + // 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 - firefox_fake_device - googleApiApplicationClientID iAmRecorder iAmSipGateway microsoftApiApplicationClientID - peopleSearchQueryTypes - peopleSearchUrl - requireDisplayName */ /** @@ -1564,14 +1659,7 @@ ${ANALYTICS_SETTINGS} _peerConnStatusRtcMuteTimeout avgRtpStatsN desktopSharingSources - disableAEC - disableAGC - disableAP - disableHPF disableLocalStats - disableNS - enableTalkWhileMuted - forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled ignoreStartMuted @@ -1648,7 +1736,7 @@ ${ANALYTICS_SETTINGS} // '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 partcipant used raise hand, + // '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" @@ -1669,7 +1757,7 @@ ${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.failedToStart', // shown when transcribing fails to start + // 'transcribing.failed', // shown when transcribing fails // ], // List of notifications to be disabled. Works in tandem with the above setting. @@ -1679,7 +1767,7 @@ ${ANALYTICS_SETTINGS} // disableFilmstripAutohiding: false, // filmstrip: { - // // Disable the vertical/horizonal 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. @@ -1728,8 +1816,6 @@ ${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 @@ -1740,9 +1826,10 @@ ${ANALYTICS_SETTINGS} // //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/xmpp/strophe.util.js': 'log', + // }, // }, // Application logo url @@ -1759,7 +1846,7 @@ ${ANALYTICS_SETTINGS} // // 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, + // limitUrl: 'https://example.com/blog/whiteboard-limits', // }, // The watchRTC initialize config params as described : @@ -1795,13 +1882,13 @@ ${ANALYTICS_SETTINGS} // collectionInterval?: number; // logGetStats?: boolean; // }, -}; -// Temporary backwards compatibility with old mobile clients. -config.flags = config.flags || {}; -config.flags.sourceNameSignaling = true; -config.flags.sendMultipleVideoStreams = true; -config.flags.receiveMultipleVideoStreams = true; + // 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, +}; // Set the default values for JaaS customers if (enableJaaS) { diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 6cc6723..5b62ced 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -49,7 +49,9 @@ var config = { bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind', // Websocket URL (XMPP) - // websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket', + 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, @@ -84,15 +86,11 @@ var config = { // 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 supports for AV1 codec. - // enableAv1Support: 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 + // Enables the use of the codec selection API supported by the browsers . + // enableCodecSelectionAPI: false, // P2P test mode disables automatic switching to P2P when there are 2 // participants in the conference. @@ -110,6 +108,12 @@ var config = { // 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, }, // Disables moderator indicators. @@ -124,6 +128,9 @@ var config = { // Disables polls feature. // disablePolls: false, + // Disables demote button from self-view + // disableSelfDemote: false, + // Disables self-view tile. (hides it from tile view and from filmstrip) // disableSelfView: false, @@ -213,14 +220,45 @@ var config = { // 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_16.kw - // - https://meet.example.com/libs/krisp/models/model_32.kw - // NOTE: Krisp JS SDK v1.0.9 was tested. + // - 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', + // } // }, // }, @@ -232,9 +270,26 @@ var config = { // 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, @@ -318,9 +373,6 @@ var config = { // Recording - // DEPRECATED. Use recordingService.enabled instead. - // fileRecordingsEnabled: false, - // Enable the dropbox integration. // dropbox: { // appKey: '', // Specify your app key here. @@ -341,6 +393,11 @@ var config = { // // 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, // }, // recordingService: { @@ -413,7 +470,7 @@ var config = { // // Translation languages. // // Available languages can be found in - // // ./src/react/features/transcribing/translation-languages.json. + // // ./lang/translation-languages.json. // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -434,6 +491,10 @@ var config = { // // 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, // }, // Misc @@ -459,7 +520,16 @@ var config = { // videoQuality: { // // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ], + // + // // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', + // + // // 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: { @@ -467,6 +537,8 @@ var config = { // low: 100000, // standard: 300000, // high: 1000000, + // fullHd: 2000000, + // ultraHd: 4000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, @@ -478,6 +550,8 @@ var config = { // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true @@ -487,6 +561,8 @@ var config = { // low: 200000, // standard: 500000, // high: 1500000, + // fullHd: 3000000, + // ultraHd: 6000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: false @@ -496,35 +572,13 @@ var config = { // low: 100000, // standard: 300000, // high: 1200000, + // fullHd: 2500000, + // ultraHd: 5000000, // ssHigh: 2500000 // }, // scalabilityModeEnabled: true, // useSimulcast: false, // useKSVC: true - // } - // - // DEPRECATED! Use `codec specific settings` instead. - // // 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 @@ -543,23 +597,7 @@ var config = { // }, // // // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint - // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264' ], - // - // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // // 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', - // - // // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // // 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', - // + // mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ], // }, // Notification timeouts @@ -567,6 +605,7 @@ var config = { // short: 2500, // medium: 5000, // long: 10000, + // extraLong: 60000, // }, // // Options for the recording limit notification. @@ -596,14 +635,6 @@ 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, @@ -726,6 +757,12 @@ 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. @@ -737,6 +774,11 @@ 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: '' // }, // When 'true', the user cannot edit the display name. @@ -755,10 +797,6 @@ 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/' ], @@ -840,6 +878,22 @@ var config = { // autoHideWhileChatIsOpen: false, // }, + // 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' ] + // ], + // 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 @@ -1021,10 +1075,14 @@ var config = { // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based // endpoints. - // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ], + // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ], // // Provides a way to set the codec preference on desktop based endpoints. - // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ], + // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ], + + // Provides a way to set the codec for screenshare. + // screenshareCodec: 'AV1', + // mobileScreenshareCodec: 'VP8', // 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). @@ -1036,24 +1094,12 @@ var config = { // { urls: 'stun:jitsi-meet.example.com:3478' }, { urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }, ], - - // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // Provides a way to set the video codec preference on the p2p connection. Acceptable - // codec values are 'VP8', 'VP9' and 'H264'. - // preferredCodec: 'H264', - - // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead. - // Provides a way to prevent a video codec from being negotiated on the p2p connection. - // disabledCodec: '', }, analytics: { // 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', @@ -1091,7 +1137,6 @@ 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", // ], @@ -1177,6 +1222,7 @@ var config = { // warning: '', // }, // externallyManagedKey: false, + // disabled: false, // }, // Options related to end-to-end (participant to participant) ping. @@ -1334,8 +1380,12 @@ var config = { 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 @@ -1394,6 +1444,13 @@ 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 @@ -1516,26 +1573,64 @@ var config = { // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before // and will automatically redirect to the token service to get the token for the meeting. // tokenAuthUrlAutoRedirect: false + // An option to respect the context.tenant jwt field compared to the current tenant from the url + // tokenRespectTenant: 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 + // }, + // }, + // 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 - firefox_fake_device - googleApiApplicationClientID iAmRecorder iAmSipGateway microsoftApiApplicationClientID - peopleSearchQueryTypes - peopleSearchUrl - requireDisplayName */ /** @@ -1551,14 +1646,7 @@ var config = { _peerConnStatusRtcMuteTimeout avgRtpStatsN desktopSharingSources - disableAEC - disableAGC - disableAP - disableHPF disableLocalStats - disableNS - enableTalkWhileMuted - forceTurnRelay hiddenDomain hiddenFromRecorderFeatureEnabled ignoreStartMuted @@ -1635,7 +1723,7 @@ var config = { // '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 partcipant used raise hand, + // '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" @@ -1656,7 +1744,7 @@ 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.failedToStart', // shown when transcribing fails to start + // 'transcribing.failed', // shown when transcribing fails // ], // List of notifications to be disabled. Works in tandem with the above setting. @@ -1666,7 +1754,7 @@ var config = { // disableFilmstripAutohiding: false, // filmstrip: { - // // Disable the vertical/horizonal 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. @@ -1715,8 +1803,6 @@ 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 @@ -1727,9 +1813,10 @@ var config = { // //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/xmpp/strophe.util.js': 'log', + // }, // }, // Application logo url @@ -1746,7 +1833,7 @@ var config = { // // 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, + // limitUrl: 'https://example.com/blog/whiteboard-limits', // }, // The watchRTC initialize config params as described : @@ -1782,13 +1869,13 @@ var config = { // collectionInterval?: number; // logGetStats?: boolean; // }, -}; -// Temporary backwards compatibility with old mobile clients. -config.flags = config.flags || {}; -config.flags.sourceNameSignaling = true; -config.flags.sendMultipleVideoStreams = true; -config.flags.receiveMultipleVideoStreams = true; + // 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, +}; // Set the default values for JaaS customers if (enableJaaS) { diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh b/type/__jitsi_meet_domain/files/interface_config.js.sh index e9d8a21..6142281 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh @@ -52,14 +52,6 @@ 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}. @@ -81,9 +73,6 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, - // DEPRECATED. Animation no longer supported. - // ENABLE_FEEDBACK_ANIMATION: false, - FILM_STRIP_MAX_HEIGHT: 120, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, @@ -238,7 +227,7 @@ var interfaceConfig = { /** * Specify custom URL for downloading f droid app. */ - // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/', + // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/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 ae1ea30..07fa56d 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig @@ -41,14 +41,6 @@ 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}. @@ -70,9 +62,6 @@ var interfaceConfig = { ENABLE_DIAL_OUT: true, - // DEPRECATED. Animation no longer supported. - // ENABLE_FEEDBACK_ANIMATION: false, - FILM_STRIP_MAX_HEIGHT: 120, GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true, @@ -227,7 +216,7 @@ var interfaceConfig = { /** * Specify custom URL for downloading f droid app. */ - // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/en/packages/org.jitsi.meet/', + // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/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 aa2ad3c..ce2e564 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.9457-1 \ No newline at end of file +2.0.10184-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 241de9b..853aaf6 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh +++ b/type/__jitsi_meet_domain/files/nginx.sh @@ -194,10 +194,18 @@ 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; diff --git a/type/__jitsi_meet_domain/files/nginx.sh.orig b/type/__jitsi_meet_domain/files/nginx.sh.orig index 5b96ec9..0ea213d 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh.orig +++ b/type/__jitsi_meet_domain/files/nginx.sh.orig @@ -150,10 +150,18 @@ 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; diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh index d696709..ee60fdd 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh @@ -30,6 +30,10 @@ PROSODY_CONFIG="$(cat < Date: Sat, 26 Apr 2025 18:49:54 +0200 Subject: [PATCH 12/21] __single_binary_service: add more features - the type can now deploy single-binary services that are not downloaded (--url), but held in the cdist-controller instead (--local-source) - We can also specify the destination of the service's configuration file (--config-file-destination) - And the permissions of the service's working directory (--working-directory-permissions) --- type/__single_binary_service/man.rst | 28 +++-- type/__single_binary_service/manifest | 105 +++++++++++++----- .../parameter/default/checksum | 0 .../parameter/default/local-source | 0 .../parameter/default/url | 0 .../default/working-directory-permissions | 1 + .../parameter/optional | 5 + .../parameter/required | 2 - 8 files changed, 103 insertions(+), 38 deletions(-) create mode 100644 type/__single_binary_service/parameter/default/checksum create mode 100644 type/__single_binary_service/parameter/default/local-source create mode 100644 type/__single_binary_service/parameter/default/url create mode 100644 type/__single_binary_service/parameter/default/working-directory-permissions diff --git a/type/__single_binary_service/man.rst b/type/__single_binary_service/man.rst index 464785f..47bcdbd 100644 --- a/type/__single_binary_service/man.rst +++ b/type/__single_binary_service/man.rst @@ -29,13 +29,6 @@ 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. @@ -59,12 +52,29 @@ do-not-manage-user OPTIONAL PARAMETERS ------------------- +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, @@ -130,6 +140,10 @@ 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 e9d1691..8277603 100755 --- a/type/__single_binary_service/manifest +++ b/type/__single_binary_service/manifest @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/sh -eu 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,18 +86,30 @@ fi SERVICE_DEFINITION="$(cat "${__object}/parameter/service-definition" 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")" CHECKSUM="$(cat "${__object}/parameter/checksum")" SHOULD_VERSION="$(cat "${__object}/parameter/version")" +DOWNLOAD_URL="$(cat "${__object}/parameter/url")" +LOCAL_SOURCE="$(cat "${__object}/parameter/local-source")" +if [ -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 # 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 @@ -108,24 +120,45 @@ 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} __user/${USER}" + 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}" fi # Place config file if necessary -CONFIG_FILE_DEST="${ETC_DIR}/${SERVICE_NAME}.conf" +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_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} __user/${USER}" __file \ + require="${require} ${require_user_created}" __file \ "${CONFIG_FILE_DEST}" \ --owner "${USER}" \ --group "${GROUP}" \ @@ -164,7 +197,7 @@ Group=${GROUP} ExecStart=${SERVICE_EXEC} Restart=always EnvironmentFile=${SYSTEMD_ENV_FILE} -${WORKING_DIRECTORY_SYSTEMD} +${WORKING_DIRECTORY_SYSTEMD:-} [Install] WantedBy=multi-user.target @@ -261,15 +294,23 @@ EOF UNPACK_EXTENSION="$(cat "${__object}/parameter/unpack-extension")" UNPACK_ARGS="$(cat "${__object}/parameter/unpack-args" \ 2>/dev/null || true)" - # Download packed file - __download "${TMP_PATH}${UNPACK_EXTENSION}" \ - --url "${DOWNLOAD_URL}" \ - --download remote \ - --sum "${CHECKSUM}" + # 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 # Unpack file and also perform service upgrade # shellcheck disable=SC2086 - require="__download${TMP_PATH}${UNPACK_EXTENSION}" \ + require="${require_place_file}" \ __unpack "${TMP_PATH}${UNPACK_EXTENSION}" \ ${UNPACK_ARGS} \ --destination "${TMP_PATH}" @@ -277,14 +318,20 @@ EOF else # Create temp directory __directory "${TMP_PATH}" - # 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}" + # 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 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 new file mode 100644 index 0000000..e69de29 diff --git a/type/__single_binary_service/parameter/default/local-source b/type/__single_binary_service/parameter/default/local-source new file mode 100644 index 0000000..e69de29 diff --git a/type/__single_binary_service/parameter/default/url b/type/__single_binary_service/parameter/default/url new file mode 100644 index 0000000..e69de29 diff --git a/type/__single_binary_service/parameter/default/working-directory-permissions b/type/__single_binary_service/parameter/default/working-directory-permissions new file mode 100644 index 0000000..4cd9d53 --- /dev/null +++ b/type/__single_binary_service/parameter/default/working-directory-permissions @@ -0,0 +1 @@ +0750 diff --git a/type/__single_binary_service/parameter/optional b/type/__single_binary_service/parameter/optional index e51681b..b4ada3d 100644 --- a/type/__single_binary_service/parameter/optional +++ b/type/__single_binary_service/parameter/optional @@ -1,14 +1,19 @@ +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 working-directory +working-directory-permissions diff --git a/type/__single_binary_service/parameter/required b/type/__single_binary_service/parameter/required index b1e8d01..088eda4 100644 --- a/type/__single_binary_service/parameter/required +++ b/type/__single_binary_service/parameter/required @@ -1,3 +1 @@ -url -checksum version From 7c0ec375ff26968a1bf208b82d5a69431d6bbc1a Mon Sep 17 00:00:00 2001 From: Evilham Date: Mon, 5 May 2025 20:22:05 +0200 Subject: [PATCH 13/21] __single_binary_service: fix oddities when removing a service We were requiring too many arguments --- type/__single_binary_service/man.rst | 16 +++++++--------- type/__single_binary_service/manifest | 10 ++++++++-- type/__single_binary_service/parameter/optional | 1 + type/__single_binary_service/parameter/required | 1 - 4 files changed, 16 insertions(+), 12 deletions(-) delete mode 100644 type/__single_binary_service/parameter/required diff --git a/type/__single_binary_service/man.rst b/type/__single_binary_service/man.rst index 47bcdbd..1f94cd9 100644 --- a/type/__single_binary_service/man.rst +++ b/type/__single_binary_service/man.rst @@ -27,15 +27,6 @@ This type supports services managed by `__runit(7)` when `systemd` is not the init system being used. -REQUIRED PARAMETERS -------------------- -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 @@ -52,6 +43,13 @@ 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:...`. diff --git a/type/__single_binary_service/manifest b/type/__single_binary_service/manifest index 8277603..f46d62e 100755 --- a/type/__single_binary_service/manifest +++ b/type/__single_binary_service/manifest @@ -87,10 +87,16 @@ fi SERVICE_DEFINITION="$(cat "${__object}/parameter/service-definition" 2>/dev/null || true)" CHECKSUM="$(cat "${__object}/parameter/checksum")" -SHOULD_VERSION="$(cat "${__object}/parameter/version")" +SHOULD_VERSION="$(cat "${__object}/parameter/version" 2>/dev/null || true)" DOWNLOAD_URL="$(cat "${__object}/parameter/url")" LOCAL_SOURCE="$(cat "${__object}/parameter/local-source")" -if [ -z "${DOWNLOAD_URL}${LOCAL_SOURCE}" ]; then +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 diff --git a/type/__single_binary_service/parameter/optional b/type/__single_binary_service/parameter/optional index b4ada3d..aaed0ac 100644 --- a/type/__single_binary_service/parameter/optional +++ b/type/__single_binary_service/parameter/optional @@ -15,5 +15,6 @@ 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 deleted file mode 100644 index 088eda4..0000000 --- a/type/__single_binary_service/parameter/required +++ /dev/null @@ -1 +0,0 @@ -version From ca1eba2b223212e1322147fa10f03fd5a3cacbad Mon Sep 17 00:00:00 2001 From: Evilham Date: Wed, 2 Jul 2025 16:25:22 +0200 Subject: [PATCH 14/21] __jitsi_meet: upgrade to 2.0.10314 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 57 ++++++++++++------- .../files/config.js.sh.orig | 52 ++++++++++------- .../files/interface_config.js.sh | 11 ---- .../files/interface_config.js.sh.orig | 11 ---- type/__jitsi_meet_domain/files/jitsi-version | 2 +- .../files/prosody.cfg.lua.sh.orig | 1 + 7 files changed, 71 insertions(+), 65 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 7fcc7cf..2f93b72 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_10184" +BRANCH="jitsi-meet_10314" 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 d703ddd..193bd8e 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -96,6 +96,9 @@ var config = { // 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, @@ -132,6 +135,9 @@ 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, @@ -406,6 +412,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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: { @@ -503,6 +513,14 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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, + + // // Whether to invite jigasi when backend transcriptions are enabled. By default, we invite it. + // inviteJigasiOnBackendTranscribing: true, // }, // Misc @@ -614,6 +632,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // medium: 5000, // long: 10000, // extraLong: 60000, + // sticky: 0, // }, // // Options for the recording limit notification. @@ -831,8 +850,7 @@ $(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 impossible to choose which buttons go in the "More actions" menu - // - it's impossible to control the placement of buttons + // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons // - 'desktop' controls the "Share your screen" button // - if \`toolbarButtons\` is undefined, we fallback to enabling all buttons on the UI // toolbarButtons: [ @@ -1263,9 +1281,6 @@ ${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. @@ -1294,13 +1309,6 @@ ${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. @@ -1313,13 +1321,6 @@ ${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' - // } // } // }, @@ -1393,9 +1394,9 @@ ${ANALYTICS_SETTINGS} 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. + // 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. + // 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', @@ -1588,6 +1589,9 @@ ${ANALYTICS_SETTINGS} // tokenAuthUrlAutoRedirect: false // 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, // 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" @@ -1888,7 +1892,16 @@ ${ANALYTICS_SETTINGS} // 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, + // },}; // Set the default values for JaaS customers if (enableJaaS) { diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 5b62ced..21de0c5 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -89,6 +89,9 @@ var config = { // 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, @@ -125,6 +128,9 @@ var config = { // Disables the reactions moderation feature. // disableReactionsModeration: false, + // Disables the reactions in chat feature. + // disableReactionsInChat: false, + // Disables polls feature. // disablePolls: false, @@ -398,6 +404,10 @@ var config = { // // 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: { @@ -495,6 +505,14 @@ var config = { // // 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, + + // // Whether to invite jigasi when backend transcriptions are enabled. By default, we invite it. + // inviteJigasiOnBackendTranscribing: true, // }, // Misc @@ -606,6 +624,7 @@ var config = { // medium: 5000, // long: 10000, // extraLong: 60000, + // sticky: 0, // }, // // Options for the recording limit notification. @@ -823,8 +842,7 @@ 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 impossible to choose which buttons go in the "More actions" menu - // - it's impossible to control the placement of buttons + // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons // - 'desktop' controls the "Share your screen" button // - if `toolbarButtons` is undefined, we fallback to enabling all buttons on the UI // toolbarButtons: [ @@ -1254,9 +1272,6 @@ 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. @@ -1285,13 +1300,6 @@ 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. @@ -1304,13 +1312,6 @@ 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' - // } // } // }, @@ -1575,6 +1576,9 @@ var config = { // tokenAuthUrlAutoRedirect: false // 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, // 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" @@ -1875,6 +1879,16 @@ var config = { // 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, + // }, }; // Set the default values for JaaS customers diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh b/type/__jitsi_meet_domain/files/interface_config.js.sh index 6142281..d2ebaa3 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh @@ -203,17 +203,6 @@ 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. */ 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 07fa56d..1e774b3 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig @@ -192,17 +192,6 @@ 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. */ diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index ce2e564..0983883 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10184-1 \ No newline at end of file +2.0.10314-1 \ No newline at end of file diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig index eb421f9..d794391 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig @@ -15,6 +15,7 @@ external_services = { cross_domain_bosh = false; consider_bosh_secure = true; +consider_websocket_secure = true; -- https_ports = { }; -- Remove this line to prevent listening on port 5284 -- by default prosody 0.12 sends cors headers, if you want to disable it uncomment the following (the config is available on 0.12.1) From 14ea8845588a0b7c91e89cda7132b7330a798343 Mon Sep 17 00:00:00 2001 From: Evilham Date: Wed, 2 Jul 2025 17:39:41 +0200 Subject: [PATCH 15/21] __jitsi_meet: disable reaction sounds --- type/__jitsi_meet_domain/files/config.js.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/type/__jitsi_meet_domain/files/config.js.sh b/type/__jitsi_meet_domain/files/config.js.sh index 193bd8e..efe13e9 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -1206,7 +1206,7 @@ ${ANALYTICS_SETTINGS} // - 'RECORDING_OFF_SOUND' // - 'RECORDING_ON_SOUND' // - 'TALK_WHILE_MUTED_SOUND' - // disabledSounds: [], + disabledSounds: ['REACTION_SOUND'], // This is actually intrusive // DEPRECATED! Use \`disabledSounds\` instead. // Decides whether the start/stop recording audio notifications should play on record. From 4ad8a4bbe0e38de029f448508f75e1046fb36d04 Mon Sep 17 00:00:00 2001 From: Evilham Date: Wed, 2 Jul 2025 18:02:18 +0200 Subject: [PATCH 16/21] __jitsi_meet: fix typo introduced in latest upgrade --- type/__jitsi_meet_domain/files/config.js.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/type/__jitsi_meet_domain/files/config.js.sh b/type/__jitsi_meet_domain/files/config.js.sh index efe13e9..a763784 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -1901,7 +1901,8 @@ ${ANALYTICS_SETTINGS} // enabled: true, // // Maximum file size limit (-1 value disables any file size limit check) // maxFileSize: 50, - // },}; + // }, +}; // Set the default values for JaaS customers if (enableJaaS) { From 8763095e5064ca8cb2e82ed8658416bd2d832557 Mon Sep 17 00:00:00 2001 From: Evilham Date: Wed, 27 Aug 2025 11:43:47 +0200 Subject: [PATCH 17/21] __jitsi_meet: upgrade to 2.0.10431 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 39 ++++++++++++------- .../files/config.js.sh.orig | 39 ++++++++++++------- type/__jitsi_meet_domain/files/jitsi-version | 2 +- .../files/prosody.cfg.lua.sh | 12 ++---- .../files/prosody.cfg.lua.sh.orig | 12 ++---- 6 files changed, 58 insertions(+), 48 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 2f93b72..9355ed2 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_10314" +BRANCH="jitsi-meet_10431" 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 a763784..7555b68 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -124,6 +124,11 @@ var config = { // 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, }, // Disables moderator indicators. @@ -519,7 +524,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // Note: Starting transcriptions from the recording dialog will still work. // disableClosedCaptions: false, - // // Whether to invite jigasi when backend transcriptions are enabled. By default, we invite it. + // // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata). + // // By default, we invite it. // inviteJigasiOnBackendTranscribing: true, // }, @@ -1134,10 +1140,6 @@ ${ANALYTICS_SETTINGS} // The Amplitude APP Key: // amplitudeAPPKey: '', - // Enables Amplitude UTM tracking: - // Default value is false. - // amplitudeIncludeUTM: false, - // Obfuscates room name sent to analytics (amplitude, rtcstats) // Default value is false. // obfuscateRoomName: false, @@ -1372,18 +1374,11 @@ ${ANALYTICS_SETTINGS} // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. // disableGrantModerator: true, - // // If set to true the 'Send private message' button will be disabled. - // disablePrivateChat: 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. + // disablePrivateChat: 'all' | 'allow-moderator-chat', // }, - // 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, @@ -1408,6 +1403,13 @@ ${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 @@ -1791,6 +1793,13 @@ ${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. diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 21de0c5..23f7df6 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -117,6 +117,11 @@ var config = { // 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, }, // Disables moderator indicators. @@ -511,7 +516,8 @@ var config = { // // Note: Starting transcriptions from the recording dialog will still work. // disableClosedCaptions: false, - // // Whether to invite jigasi when backend transcriptions are enabled. By default, we invite it. + // // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata). + // // By default, we invite it. // inviteJigasiOnBackendTranscribing: true, // }, @@ -1125,10 +1131,6 @@ var config = { // The Amplitude APP Key: // amplitudeAPPKey: '', - // Enables Amplitude UTM tracking: - // Default value is false. - // amplitudeIncludeUTM: false, - // Obfuscates room name sent to analytics (amplitude, rtcstats) // Default value is false. // obfuscateRoomName: false, @@ -1359,18 +1361,11 @@ var config = { // disableKick: true, // // If set to true the 'Grant moderator' button will be disabled. // disableGrantModerator: true, - // // If set to true the 'Send private message' button will be disabled. - // disablePrivateChat: 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. + // disablePrivateChat: 'all' | 'allow-moderator-chat', // }, - // 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, @@ -1395,6 +1390,13 @@ 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 @@ -1778,6 +1780,13 @@ 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. diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index 0983883..cb73109 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10314-1 \ No newline at end of file +2.0.10431-1 \ No newline at end of file diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh index ee60fdd..9683d07 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh @@ -97,23 +97,17 @@ VirtualHost "${JITSI_DOMAIN:?}" key = "/etc/prosody/certs/${JITSI_DOMAIN:?}.key"; certificate = "/etc/prosody/certs/${JITSI_DOMAIN:?}.crt"; } - av_moderation_component = "avmoderation.${JITSI_DOMAIN:?}" - speakerstats_component = "speakerstats.${JITSI_DOMAIN:?}" - end_conference_component = "endconference.${JITSI_DOMAIN:?}" -- we need bosh modules_enabled = { "bosh"; "websocket"; "smacks"; "ping"; -- Enable mod_ping - "speakerstats"; "external_services"; + "features_identity"; "conference_duration"; - "end_conference"; "muc_lobby_rooms"; "muc_breakout_rooms"; - "av_moderation"; - "room_metadata"; ${PROSODY_WEBSOCKET} "websocket"; ${PROSODY_WEBSOCKET} "smacks"; } @@ -124,7 +118,6 @@ ${PROSODY_WEBSOCKET} "smacks"; c2s_require_encryption = false lobby_muc = "lobby.${JITSI_DOMAIN:?}" breakout_rooms_muc = "breakout.${JITSI_DOMAIN:?}" - room_metadata_component = "metadata.${JITSI_DOMAIN:?}" main_muc = "conference.${JITSI_DOMAIN:?}" -- muc_lobby_whitelist = { "recorder.${JITSI_DOMAIN:?}" } -- Here we can whitelist jibri to enter lobby enabled rooms @@ -212,6 +205,9 @@ Component "endconference.${JITSI_DOMAIN:?}" "end_conference" Component "avmoderation.${JITSI_DOMAIN:?}" "av_moderation_component" muc_component = "conference.${JITSI_DOMAIN:?}" +Component "filesharing.${JITSI_DOMAIN:?}" "filesharing_component" + muc_component = "conference.${JITSI_DOMAIN:?}" + Component "lobby.${JITSI_DOMAIN:?}" "muc" storage = "memory" restrict_room_creation = true diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig index d794391..a98abdf 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig @@ -58,28 +58,21 @@ VirtualHost "jitmeet.example.com" key = "/etc/prosody/certs/jitmeet.example.com.key"; certificate = "/etc/prosody/certs/jitmeet.example.com.crt"; } - av_moderation_component = "avmoderation.jitmeet.example.com" - speakerstats_component = "speakerstats.jitmeet.example.com" - end_conference_component = "endconference.jitmeet.example.com" -- we need bosh modules_enabled = { "bosh"; "websocket"; "smacks"; "ping"; -- Enable mod_ping - "speakerstats"; "external_services"; + "features_identity"; "conference_duration"; - "end_conference"; "muc_lobby_rooms"; "muc_breakout_rooms"; - "av_moderation"; - "room_metadata"; } c2s_require_encryption = false lobby_muc = "lobby.jitmeet.example.com" breakout_rooms_muc = "breakout.jitmeet.example.com" - room_metadata_component = "metadata.jitmeet.example.com" main_muc = "conference.jitmeet.example.com" -- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms @@ -155,6 +148,9 @@ Component "endconference.jitmeet.example.com" "end_conference" Component "avmoderation.jitmeet.example.com" "av_moderation_component" muc_component = "conference.jitmeet.example.com" +Component "filesharing.jitmeet.example.com" "filesharing_component" + muc_component = "conference.jitmeet.example.com" + Component "lobby.jitmeet.example.com" "muc" storage = "memory" restrict_room_creation = true From f8490aeb8ec4447a29bdb8ad289a6ba8ec937c06 Mon Sep 17 00:00:00 2001 From: Evilham Date: Mon, 12 Jan 2026 15:44:03 +0100 Subject: [PATCH 18/21] __jitsi_meet: upgrade to 2.0.10655 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 23 +++++++++++++++---- .../files/config.js.sh.orig | 23 +++++++++++++++---- type/__jitsi_meet_domain/files/jitsi-version | 2 +- .../files/prosody.cfg.lua.sh | 3 ++- .../files/prosody.cfg.lua.sh.orig | 4 ++-- 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 9355ed2..31ac655 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_10431" +BRANCH="jitsi-meet_10655" 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 7555b68..ff976b2 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -146,6 +146,9 @@ var config = { // 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, @@ -371,6 +374,7 @@ $(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, @@ -730,6 +734,8 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 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. @@ -769,7 +775,7 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. - // DEPRECATED! Use the \`lang\` iframe option directly instead. + // 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) @@ -799,7 +805,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. - // // This replaces \`prejoinPageEnabled\`. Defaults to true. // 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 @@ -811,7 +816,9 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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: '' + // preCallTestICEUrl: '', + // // Shows the hangup button in the lobby screen. + // showHangUp: true, // }, // When 'true', the user cannot edit the display name. @@ -908,6 +915,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 @@ -1376,7 +1385,9 @@ ${ANALYTICS_SETTINGS} // 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. - // disablePrivateChat: 'all' | 'allow-moderator-chat', + // // 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', // }, @@ -1614,6 +1625,10 @@ ${ANALYTICS_SETTINGS} // 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'], diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 23f7df6..07c9095 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -139,6 +139,9 @@ var config = { // 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, @@ -363,6 +366,7 @@ 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, @@ -722,6 +726,8 @@ var config = { // 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. @@ -761,7 +767,7 @@ var config = { // hideDominantSpeakerBadge: false, // Default language for the user interface. Cannot be overwritten. - // DEPRECATED! Use the `lang` iframe option directly instead. + // 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) @@ -791,7 +797,6 @@ var config = { // Configs for prejoin page. // prejoinConfig: { // // When 'true', it shows an intermediate page before joining, where the user can configure their devices. - // // This replaces `prejoinPageEnabled`. Defaults to true. // 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 @@ -803,7 +808,9 @@ var config = { // // 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: '' + // preCallTestICEUrl: '', + // // Shows the hangup button in the lobby screen. + // showHangUp: true, // }, // When 'true', the user cannot edit the display name. @@ -900,6 +907,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 @@ -1363,7 +1372,9 @@ var config = { // 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. - // disablePrivateChat: 'all' | 'allow-moderator-chat', + // // 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', // }, @@ -1601,6 +1612,10 @@ var config = { // 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'], diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index cb73109..0459f40 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10431-1 \ No newline at end of file +2.0.10655-1 \ No newline at end of file diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh index 9683d07..97c9853 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh @@ -216,12 +216,13 @@ Component "lobby.${JITSI_DOMAIN:?}" "muc" modules_enabled = { "muc_hide_all"; "muc_rate_limit"; - "polls"; } Component "metadata.${JITSI_DOMAIN:?}" "room_metadata_component" muc_component = "conference.${JITSI_DOMAIN:?}" breakout_rooms_component = "breakout.${JITSI_DOMAIN:?}" + +Component "polls.${JITSI_DOMAIN:?}" "polls_component" ${PROSODY_DOMAIN_END} ${PROSODY_SECUREDOMAIN_START} diff --git a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig index a98abdf..bfd5e6a 100644 --- a/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig +++ b/type/__jitsi_meet_domain/files/prosody.cfg.lua.sh.orig @@ -83,7 +83,6 @@ Component "conference.jitmeet.example.com" "muc" "muc_hide_all"; "muc_meeting_id"; "muc_domain_mapper"; - "polls"; --"token_verification"; "muc_rate_limit"; "muc_password_whitelist"; @@ -159,9 +158,10 @@ Component "lobby.jitmeet.example.com" "muc" modules_enabled = { "muc_hide_all"; "muc_rate_limit"; - "polls"; } Component "metadata.jitmeet.example.com" "room_metadata_component" muc_component = "conference.jitmeet.example.com" breakout_rooms_component = "breakout.jitmeet.example.com" + +Component "polls.jitmeet.example.com" "polls_component" From 701a1a6a8bc31d09a0e810bbb4f1591d59f527cc Mon Sep 17 00:00:00 2001 From: Evilham Date: Sat, 17 Jan 2026 18:41:58 +0100 Subject: [PATCH 19/21] __jitsi_meet: upgrade to 2.0.10710 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 11 ++++++++--- type/__jitsi_meet_domain/files/config.js.sh.orig | 11 ++++++++--- type/__jitsi_meet_domain/files/jitsi-version | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 31ac655..911d9b4 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_10655" +BRANCH="jitsi-meet_10710" 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 ff976b2..5a65a25 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -158,6 +158,9 @@ var config = { // 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, @@ -528,9 +531,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // Note: Starting transcriptions from the recording dialog will still work. // disableClosedCaptions: false, - // // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata). - // // By default, we invite it. - // inviteJigasiOnBackendTranscribing: true, // }, // Misc @@ -935,6 +935,11 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // [ 'microphone', 'camera' ] // ], + // 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 diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 07c9095..b560e59 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -151,6 +151,9 @@ var config = { // 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, @@ -520,9 +523,6 @@ var config = { // // Note: Starting transcriptions from the recording dialog will still work. // disableClosedCaptions: false, - // // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata). - // // By default, we invite it. - // inviteJigasiOnBackendTranscribing: true, // }, // Misc @@ -927,6 +927,11 @@ var config = { // [ 'microphone', 'camera' ] // ], + // 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 diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index 0459f40..9babc67 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10655-1 \ No newline at end of file +2.0.10710-1 \ No newline at end of file From 0d75d44551e7baa5da7d55562f8e7e297d0d534b Mon Sep 17 00:00:00 2001 From: Evilham Date: Fri, 31 Jul 2026 13:23:34 +0200 Subject: [PATCH 20/21] jitsi: uncommitted updates to 10888 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 32 ++++++++----------- .../files/config.js.sh.orig | 32 ++++++++----------- type/__jitsi_meet_domain/files/jitsi-version | 2 +- type/__jitsi_meet_domain/files/nginx.sh | 18 +++++++++++ type/__jitsi_meet_domain/files/nginx.sh.orig | 18 +++++++++++ 6 files changed, 66 insertions(+), 38 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 911d9b4..35471b0 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_10710" +BRANCH="jitsi-meet_10888" 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 5a65a25..86daafa 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -519,6 +519,15 @@ $(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, @@ -645,21 +654,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 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). // disableRtx: false, @@ -935,6 +929,9 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // [ '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. @@ -1602,14 +1599,13 @@ ${ANALYTICS_SETTINGS} // - 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' - // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before - // and will automatically redirect to the token service to get the token for the meeting. - // tokenAuthUrlAutoRedirect: false // 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" diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index b560e59..3e1c70d 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -511,6 +511,15 @@ 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, @@ -637,21 +646,6 @@ var config = { // 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). // disableRtx: false, @@ -927,6 +921,9 @@ var config = { // [ '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. @@ -1589,14 +1586,13 @@ var config = { // - 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' - // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before - // and will automatically redirect to the token service to get the token for the meeting. - // tokenAuthUrlAutoRedirect: false // 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" diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index 9babc67..8c9a48c 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10710-1 \ No newline at end of file +2.0.10888-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 853aaf6..4691004 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh +++ b/type/__jitsi_meet_domain/files/nginx.sh @@ -38,6 +38,22 @@ JITSI_NGINX_CONFIG="$(cat <[^?]*)\?.*(?: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; @@ -77,6 +93,8 @@ server { 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; diff --git a/type/__jitsi_meet_domain/files/nginx.sh.orig b/type/__jitsi_meet_domain/files/nginx.sh.orig index 0ea213d..1c9881e 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh.orig +++ b/type/__jitsi_meet_domain/files/nginx.sh.orig @@ -26,6 +26,22 @@ 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; @@ -66,6 +82,8 @@ server { 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; From 76c8fb8b92a85f615bbf998d43e20e65206f003d Mon Sep 17 00:00:00 2001 From: Evilham Date: Fri, 31 Jul 2026 13:30:33 +0200 Subject: [PATCH 21/21] jitsi: upgraded to 11031 --- .../files/_update_jitsi_configurations.sh | 2 +- type/__jitsi_meet_domain/files/config.js.sh | 94 ++++++++++++++++--- .../files/config.js.sh.orig | 94 ++++++++++++++++--- .../files/interface_config.js.sh | 2 +- .../files/interface_config.js.sh.orig | 2 +- type/__jitsi_meet_domain/files/jitsi-version | 2 +- type/__jitsi_meet_domain/files/nginx.sh.orig | 27 +++--- 7 files changed, 184 insertions(+), 39 deletions(-) diff --git a/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh b/type/__jitsi_meet_domain/files/_update_jitsi_configurations.sh index 35471b0..526af90 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_10888" +BRANCH="jitsi-meet_11031" 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 86daafa..8d8aa89 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh +++ b/type/__jitsi_meet_domain/files/config.js.sh @@ -501,6 +501,9 @@ $(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, + // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -539,6 +542,10 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // // 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 // }, @@ -869,7 +876,6 @@ $(if [ -n "${VIDEO_CONSTRAINTS}" ]; then echo "${VIDEO_CONSTRAINTS},"; fi) // 'embedmeeting', // 'etherpad', // 'feedback', - // 'filmstrip', // 'fullscreen', // 'hangup', // 'help', @@ -1502,16 +1508,81 @@ ${ANALYTICS_SETTINGS} // hideJoinRoomButton: false, // }, - // When true, virtual background feature will be disabled. - // disableVirtualBackground: false, - - // When true the user cannot add more images to be used as virtual background. - // Only the default ones from will be available. - // disableAddingBackgroundImages: 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. + // disableAddingBackgroundImages: false, + + // Virtual background options. + // All fields are optional; omitting a field uses the default/auto-detected value. + virtualBackground: { + + // 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, + // }, + }, + // 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, // otherwise the app doesn't render it. @@ -1785,9 +1856,6 @@ ${ANALYTICS_SETTINGS} // 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, @@ -1876,6 +1944,10 @@ ${ANALYTICS_SETTINGS} // 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 : diff --git a/type/__jitsi_meet_domain/files/config.js.sh.orig b/type/__jitsi_meet_domain/files/config.js.sh.orig index 3e1c70d..bc5ecc8 100644 --- a/type/__jitsi_meet_domain/files/config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/config.js.sh.orig @@ -493,6 +493,9 @@ 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, + // translationLanguages: ['en', 'es', 'fr', 'ro'], // // Important languages to show on the top of the language list. @@ -531,6 +534,10 @@ var config = { // // 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 // }, @@ -861,7 +868,6 @@ var config = { // 'embedmeeting', // 'etherpad', // 'feedback', - // 'filmstrip', // 'fullscreen', // 'hangup', // 'help', @@ -1489,16 +1495,81 @@ var config = { // hideJoinRoomButton: false, // }, - // When true, virtual background feature will be disabled. - // disableVirtualBackground: false, - - // When true the user cannot add more images to be used as virtual background. - // Only the default ones from will be available. - // disableAddingBackgroundImages: 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. + // disableAddingBackgroundImages: false, + + // Virtual background options. + // All fields are optional; omitting a field uses the default/auto-detected value. + virtualBackground: { + + // 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, + // }, + }, + // 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, // otherwise the app doesn't render it. @@ -1772,9 +1843,6 @@ var config = { // 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, @@ -1863,6 +1931,10 @@ var config = { // 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 : diff --git a/type/__jitsi_meet_domain/files/interface_config.js.sh b/type/__jitsi_meet_domain/files/interface_config.js.sh index d2ebaa3..228625f 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh @@ -121,7 +121,7 @@ var interfaceConfig = { RECENT_LIST_ENABLED: true, REMOTE_THUMBNAIL_RATIO: 1, // 1:1 - SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'sounds', 'more' ], + SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'shortcuts', 'sounds', 'more' ], /** * Specify which sharing features should be displayed. If the value is not set 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 1e774b3..14b307a 100644 --- a/type/__jitsi_meet_domain/files/interface_config.js.sh.orig +++ b/type/__jitsi_meet_domain/files/interface_config.js.sh.orig @@ -110,7 +110,7 @@ var interfaceConfig = { RECENT_LIST_ENABLED: true, REMOTE_THUMBNAIL_RATIO: 1, // 1:1 - SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'sounds', 'more' ], + SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'shortcuts', 'sounds', 'more' ], /** * Specify which sharing features should be displayed. If the value is not set diff --git a/type/__jitsi_meet_domain/files/jitsi-version b/type/__jitsi_meet_domain/files/jitsi-version index 8c9a48c..72db1fb 100644 --- a/type/__jitsi_meet_domain/files/jitsi-version +++ b/type/__jitsi_meet_domain/files/jitsi-version @@ -1 +1 @@ -2.0.10888-1 \ No newline at end of file +2.0.11031-1 \ No newline at end of file diff --git a/type/__jitsi_meet_domain/files/nginx.sh.orig b/type/__jitsi_meet_domain/files/nginx.sh.orig index 1c9881e..43913bd 100644 --- a/type/__jitsi_meet_domain/files/nginx.sh.orig +++ b/type/__jitsi_meet_domain/files/nginx.sh.orig @@ -10,11 +10,12 @@ upstream prosody { server 127.0.0.1:5280; keepalive 2; } -upstream jvb1 { - zone upstreams 64K; - server 127.0.0.1:9090; - 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; +# } map $arg_vnode $prosody_node { default prosody; v1 v1; @@ -150,14 +151,14 @@ server { 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; - } + # 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; + # } # load test minimal client, uncomment when used #location ~ ^/_load-test/([^/?&:'"]+)$ {