@drumee/setup-infra 1.0.28 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/bin/init-private +40 -0
  2. package/bin/set-jitsi-conf +14 -0
  3. package/index.js +2 -1
  4. package/package.json +1 -1
  5. package/template.js +453 -0
  6. package/templates/etc/bind/named.conf.private +21 -0
  7. package/templates/etc/bind/named.conf.public +21 -0
  8. package/templates/etc/drumee/conf.d/conference.json.tpl +9 -0
  9. package/templates/etc/drumee/dnsapi.sh.tpl +28 -0
  10. package/templates/etc/drumee/env.json +29 -0
  11. package/templates/etc/drumee/infrastructure/internals/accel.conf.tpl +47 -0
  12. package/templates/etc/drumee/infrastructure/mfs.conf.tpl +16 -0
  13. package/templates/etc/drumee/infrastructure/platform.json.tpl +16 -0
  14. package/templates/etc/drumee/infrastructure/routes/main.conf.tpl +153 -0
  15. package/templates/etc/drumee/infrastructure/routes/private.conf.tpl +1 -1
  16. package/templates/etc/drumee/infrastructure/routes/public.conf.tpl +1 -1
  17. package/templates/etc/jitsi/jicofo/jicofo.conf.tpl +46 -0
  18. package/templates/etc/jitsi/jicofo/sip-cmmunicator.properties +3 -0
  19. package/templates/etc/jitsi/meet.conf.tpl +132 -0
  20. package/templates/etc/jitsi/ssl.conf.tpl +25 -0
  21. package/templates/etc/jitsi/videobridge/jvb.conf +67 -0
  22. package/templates/etc/jitsi/web/config.js.tpl +208 -0
  23. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf +27 -0
  24. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf.tpl +27 -0
  25. package/templates/etc/nginx/sites-enabled/jitsi.conf.tpl +28 -0
  26. package/templates/etc/nginx/sites-enabled/localhost.conf +31 -0
  27. package/templates/etc/nginx/sites-enabled/pivate.jitsi.conf.tpl +28 -0
  28. package/templates/etc/nginx/sites-enabled/private.conf.tpl +40 -0
  29. package/templates/etc/nginx/sites-enabled/public.conf.tpl +40 -0
  30. package/templates/etc/nginx/sites-enabled/public.jitsi.conf.tpl +28 -0
  31. package/templates/etc/prosody/conf.d/vhost.cfg.lua.tpl +162 -0
  32. package/templates/etc/turnserver.conf.tpl +46 -0
  33. package/templates/var/lib/bind/prvate.tpl +70 -0
@@ -0,0 +1,16 @@
1
+ # -------------------------------------------------------------
2
+ # ! DO NOT EDIT !
3
+ # Config file automatically generated by <setup-infra>
4
+ # Date : <%= date %>
5
+ # -------------------------------------------------------------
6
+
7
+ location / {
8
+ index /-/;
9
+
10
+ location ~ (.+)$ {
11
+ add_header Cache-Control max-age=31536000;
12
+ fastcgi_hide_header Set-Cookie;
13
+ add_header Access-Control-Allow-Origin <%= domain %>;
14
+ rewrite /(.+)$ <%= public_ui_root %>/svc/media.raw?p=/$1&d=inline;
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ # -------------------------------------------------------------
2
+ # ! DO NOT EDIT !
3
+ # Config file automatically generated by <setup-infra>
4
+ # Date : <%= date %>
5
+ # -------------------------------------------------------------
6
+
7
+ location / {
8
+ location ~ (.+)\.(.+)$ {
9
+ #expires 7d;
10
+ add_header Cache-Control max-age=31536000;
11
+ #add_header Vary "Accept-Encoding";
12
+ fastcgi_hide_header Set-Cookie;
13
+ add_header Access-Control-Allow-Origin <%= domain %>;
14
+ rewrite /(.+)$ <%= public_ui_root %>/service/?service=media.raw&p=$1&d=inline;
15
+ }
16
+ }
@@ -0,0 +1,153 @@
1
+ # -------------------------------------------------------------
2
+ # ! DO NOT EDIT !
3
+ # Config file automatically generated by <setup-infra>
4
+ # Date : <%= date %>
5
+ # -------------------------------------------------------------
6
+
7
+
8
+ location <%= location %>app/ {
9
+ alias <%= drumee_root %>/runtime/ui/<%= endpoint_name %>/app/;
10
+ add_header Cache-Control max-age=31536000;
11
+ add_header Access-Control-Allow-Origin <%= domain %>;
12
+ fastcgi_hide_header Set-Cookie;
13
+ break;
14
+ }
15
+
16
+ # Frontend application assets
17
+ location <%= location %>api/ {
18
+ alias <%= drumee_root %>/runtime/ui/<%= endpoint_name %>/api/;
19
+ add_header Cache-Control max-age=31536000;
20
+ add_header Access-Control-Allow-Origin <%= domain %>;
21
+ fastcgi_hide_header Set-Cookie;
22
+ break;
23
+ }
24
+
25
+ # Frontend application assets
26
+ location
27
+ plugins/ {
28
+ alias <%= drumee_root %>/runtime/ui/<%= endpoint_name %>/plugins/;
29
+ add_header Cache-Control max-age=31536000;
30
+ add_header Access-Control-Allow-Origin <%= domain %>;
31
+ fastcgi_hide_header Set-Cookie;
32
+ break;
33
+ }
34
+
35
+
36
+ # Frontend application templates
37
+ location <%= location %>bb-templates/ {
38
+ alias <%= drumee_root %>/runtime/ui/<%= endpoint_name %>/bb-templates/;
39
+ add_header Cache-Control max-age=31536000;
40
+ add_header Access-Control-Allow-Origin *;
41
+ fastcgi_hide_header Set-Cookie;
42
+ break;
43
+ }
44
+
45
+
46
+ location <%= location %> {
47
+ fastcgi_hide_header Set-Cookie;
48
+ add_header Cache-Control max-age=31536000;
49
+
50
+ location ~ /(svc|vdo|service)/ {
51
+ proxy_pass http://127.0.0.1:<%= restPort %>;
52
+ proxy_http_version 1.1;
53
+ proxy_set_header Upgrade $http_upgrade;
54
+ proxy_set_header Connection 'upgrade';
55
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
56
+ proxy_set_header X-Real-IP $remote_addr;
57
+ proxy_set_header X-Connecting-IP $remote_addr;
58
+ proxy_set_header X-Forwarded-Proto $scheme;
59
+ proxy_set_header Host $host;
60
+ proxy_set_header X-Forwarded-Port $server_port; # The port Nginx is listening on
61
+ proxy_set_header X-Original-Port $http_host;
62
+ add_header Vary "Accept-Encoding";
63
+ fastcgi_hide_header Set-Cookie;
64
+ break;
65
+ }
66
+
67
+ location ~ /(ws|websocket)/ {
68
+ proxy_pass http://127.0.0.1:<%= pushPort %>;
69
+ proxy_http_version 1.1;
70
+ proxy_set_header Upgrade $http_upgrade;
71
+ proxy_set_header Connection 'upgrade';
72
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
73
+ proxy_set_header X-Real-IP $remote_addr;
74
+ proxy_set_header X-Connecting-IP $remote_addr;
75
+ proxy_set_header X-Forwarded-Proto $scheme;
76
+ proxy_set_header Host $host;
77
+ proxy_set_header X-Forwarded-Port $server_port; # The port Nginx is listening on
78
+ proxy_set_header X-Original-Port $http_host;
79
+ add_header Vary "Accept-Encoding";
80
+ fastcgi_hide_header Set-Cookie;
81
+ break;
82
+ }
83
+
84
+ #------------ parts/apis ------------
85
+ location ~ /file/(.+)/(.*)$ {
86
+ fastcgi_hide_header Set-Cookie;
87
+ rewrite /file/(.+)/(.+)/(.+)\.(.*)$ /-/svc/media.$1?nid=$2&hub_id=$3 last;
88
+ rewrite /file/(.+)/(.+)/(.+)/(.*)$ /-/svc/media.$1?nid=$2&hub_id=$3 last;
89
+ rewrite /file/(.+)/(.+)/(.+)$ /-/svc/media.$1?nid=$2&hub_id=$3 last;
90
+ rewrite /file/(.+)/(.+)\.(.+)$ /-/svc/media.$1?nid=$2 last;
91
+ rewrite /file/(.+)/(.+)$ /-/svc/media.$1?nid=$2 last;
92
+ break;
93
+ }
94
+
95
+
96
+ location ~ /doc/(.+)/(.*)$ {
97
+ add_header Cache-Control max-age=31536000;
98
+ fastcgi_hide_header Set-Cookie;
99
+ rewrite /doc/(.+)/(.+)/(.+)\.(.*)$ /-/svc/media.read?page=$1&nid=$2&hub_id=$3 last;
100
+ rewrite /doc/(.+)/(.+)/(.+)$ /-/svc/media.read?page=$1&nid=$2&hub_id=$3 last;
101
+ rewrite /doc/(.+)/(.+)\.(.+)$ /-/svc/media.read?page=$1&nid=$2 last;
102
+ rewrite /doc/(.+)/(.+)$ /-/svc/media.read?page=$1&nid=$2 last;
103
+ break;
104
+ }
105
+
106
+ location ~ /letc/(.+)$ {
107
+ add_header Cache-Control max-age=31536000;
108
+ fastcgi_hide_header Set-Cookie;
109
+ rewrite /letc/(.+)\@(.+)$ /-/svc/block.content?hashtag=$1&owner=$2 last;
110
+ rewrite /letc/(.+)/(.+)$ /-/svc/block.content?hashtag=$1&owner=$2 last;
111
+ rewrite /letc/(.+)$ /-/svc/block.content?hashtag=$1 last;
112
+ break;
113
+ }
114
+
115
+
116
+ location ~ /avatar/(.+)$ {
117
+ add_header Pragma public;
118
+ add_header Cache-Control max-age=31536000;
119
+ fastcgi_hide_header Set-Cookie;
120
+ add_header Access-Control-Allow-Origin <%= domain %>;
121
+ rewrite /avatar/(.+)$ /-/svc/yp.avatar?id=$1 last;
122
+ break;
123
+ }
124
+
125
+ location ~ (.+)\.(.+)$ {
126
+ fastcgi_hide_header Set-Cookie;
127
+ add_header Cache-Control max-age=31536000;
128
+ add_header Access-Control-Allow-Origin <%= domain %>;
129
+ rewrite /<%= endpoint_name %>/(.+)$ /-/svc/media.raw&p=$1&d=inline;
130
+ break;
131
+ }
132
+
133
+
134
+ #------------ parts/index ------------
135
+ location ~ (/|)$ {
136
+ proxy_pass http://127.0.0.1:<%= pushPort %>;
137
+ proxy_http_version 1.1;
138
+ proxy_set_header Upgrade $http_upgrade;
139
+ proxy_set_header Connection 'upgrade';
140
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
141
+ proxy_set_header X-Real-IP $remote_addr;
142
+ proxy_set_header X-Connecting-IP $remote_addr;
143
+ proxy_set_header Host $host;
144
+ proxy_set_header X-Forwarded-Port $server_port; # The port Nginx is listening on
145
+ proxy_set_header X-Original-Port $http_host;
146
+ proxy_set_header Referer $http_referer;
147
+ proxy_set_header X-Forwarded-Proto $scheme;
148
+ add_header Access-Control-Allow-Credentials true;
149
+ add_header Vary "Accept-Encoding";
150
+ fastcgi_hide_header Set-Cookie;
151
+ }
152
+
153
+ }
@@ -24,7 +24,7 @@ location <%= location %>api/ {
24
24
 
25
25
  # Frontend application assets
26
26
  location <%= location %>plugins/ {
27
- alias <%= ui_location %>/plugins/;
27
+ alias <%= ui_plugins_home %>/;
28
28
  add_header Cache-Control max-age=31536000;
29
29
  add_header Access-Control-Allow-Origin <%= private_domain %>;
30
30
  fastcgi_hide_header Set-Cookie;
@@ -24,7 +24,7 @@ location <%= location %>api/ {
24
24
 
25
25
  # Frontend application assets
26
26
  location <%= location %>plugins/ {
27
- alias <%= ui_location %>/plugins/;
27
+ alias <%= ui_plugins_home %>/;
28
28
  add_header Cache-Control max-age=31536000;
29
29
  add_header Access-Control-Allow-Origin <%= public_domain %>;
30
30
  fastcgi_hide_header Set-Cookie;
@@ -0,0 +1,46 @@
1
+ jicofo {
2
+ // Configuration related to jitsi-videobridge
3
+ bridge {
4
+ brewery-jid = "jvbbrewery@internal-muc.<%= jitsi_domain %>"
5
+ }
6
+ // Configure the codecs and RTP extensions to be used in the offer sent to clients.
7
+ codec {
8
+ video {
9
+ }
10
+ audio {
11
+ }
12
+ }
13
+
14
+ conference {
15
+ }
16
+ octo {
17
+ // Whether or not to use Octo. Note that when enabled, its use will be determined by
18
+ // $jicofo.bridge.selection-strategy. There's a corresponding flag in the JVB and these
19
+ // two MUST be in sync (otherwise bridges will crash because they won't know how to
20
+ // deal with octo channels).
21
+ enabled = false
22
+ }
23
+ sctp {
24
+ enabled = false
25
+ }
26
+ authentication: {
27
+ enabled: true
28
+ type: JWT
29
+ login-url: <%= jitsi_domain %>
30
+ }
31
+ xmpp {
32
+ client {
33
+ enabled = true
34
+ hostname = "xmpp.<%= jitsi_domain %>"
35
+ port = "5222"
36
+ domain = "auth.<%= jitsi_domain %>"
37
+ xmpp-domain = "<%= jitsi_domain %>"
38
+ username = "focus"
39
+ password = "<%= jicofo_password %>"
40
+ conference-muc-jid = "muc.<%= jitsi_domain %>"
41
+ client-proxy = "focus.<%= jitsi_domain %>"
42
+ disable-certificate-verification = true
43
+ }
44
+ }
45
+ }
46
+
@@ -0,0 +1,3 @@
1
+ org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.<%= jitsi_domain %>
2
+ org.jitsi.jicofo.auth.URL=XMPP:<%= jitsi_domain %>
3
+ org.jitsi.jicofo.ALWAYS_TRUST_MODE_ENABLED=true
@@ -0,0 +1,132 @@
1
+ server_name _;
2
+
3
+ charset utf8;
4
+
5
+ client_max_body_size 0;
6
+
7
+ # Disable direct access to jitsi UI
8
+ # root /usr/share/jitsi-meet;
9
+ root <%= static_dir %>;
10
+
11
+ # ssi on with javascript for multidomain variables in config.js
12
+ ssi on;
13
+ ssi_types application/x-javascript application/javascript;
14
+
15
+ index index.html index.htm;
16
+ error_page 404 /static/404.html;
17
+
18
+ # Security headers
19
+ add_header X-Content-Type-Options nosniff;
20
+ add_header X-XSS-Protection "1; mode=block";
21
+
22
+ set $prefix "";
23
+
24
+
25
+ # Opt out of FLoC (deprecated)
26
+ add_header Permissions-Policy "interest-cohort=()";
27
+
28
+ location = /config.js {
29
+ alias /etc/jitsi/web/config.js;
30
+ }
31
+
32
+ location = /interface_config.js {
33
+ alias /etc/jitsi/web/interface_config.js;
34
+ }
35
+
36
+ location = /external_api.js {
37
+ alias /usr/share/jitsi-meet/libs/external_api.min.js;
38
+ }
39
+
40
+
41
+
42
+ # ensure all static content can always be found first
43
+ location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$ {
44
+ add_header 'Access-Control-Allow-Origin' '*';
45
+ alias /usr/share/jitsi-meet/$1/$2;
46
+
47
+ # cache all versioned files
48
+ if ($arg_v) {
49
+ expires 1y;
50
+ }
51
+ }
52
+
53
+
54
+ # colibri (JVB) websockets
55
+ location ~ ^/colibri-ws/([a-zA-Z0-9-\._]+)/(.*) {
56
+ tcp_nodelay on;
57
+ proxy_http_version 1.1;
58
+ proxy_set_header Upgrade $http_upgrade;
59
+ proxy_set_header Connection $connection_upgrade;
60
+ proxy_pass http://$1:9090/colibri-ws/$1/$2$is_args$args;
61
+ }
62
+
63
+
64
+ # BOSH
65
+ location = /http-bind {
66
+ proxy_set_header X-Forwarded-For $remote_addr;
67
+ proxy_set_header Host <%= jitsi_domain %>;
68
+ proxy_pass http://127.0.0.1:5280/http-bind?prefix=$prefix&$args;
69
+ }
70
+
71
+
72
+ # xmpp websockets
73
+ location = /xmpp-websocket {
74
+ proxy_pass http://localhost:5280/xmpp-websocket;
75
+ proxy_http_version 1.1;
76
+ proxy_set_header Connection "upgrade";
77
+ proxy_set_header Upgrade $http_upgrade;
78
+ proxy_set_header Host <%= jitsi_domain %>;
79
+ proxy_set_header X-Forwarded-For $remote_addr;
80
+ tcp_nodelay on;
81
+ }
82
+
83
+
84
+ location ~ ^/([^/?&:'"]+)$ {
85
+ try_files $uri @root_path;
86
+ }
87
+
88
+ location @root_path {
89
+ rewrite ^/(.*)$ / break;
90
+ }
91
+
92
+
93
+ # Matches /(TENANT)/pwa-worker.js or /(TENANT)/manifest.json to rewrite to / and look for file
94
+ location ~ ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ {
95
+ set $subdomain "$1.";
96
+ set $subdir "$1/";
97
+ rewrite ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ /$2;
98
+ }
99
+
100
+ location ~ ^/([^/?&:'"]+)/config.js$ {
101
+ set $subdomain "$1.";
102
+ set $subdir "$1/";
103
+
104
+ alias /etc/jitsi/web/config.js;
105
+ }
106
+
107
+ # BOSH for subdomains
108
+ location ~ ^/([^/?&:'"]+)/http-bind {
109
+ set $subdomain "$1.";
110
+ set $subdir "$1/";
111
+ set $prefix "$1";
112
+
113
+ rewrite ^/(.*)$ /http-bind;
114
+ }
115
+
116
+
117
+ # websockets for subdomains
118
+ location ~ ^/([^/?&:'"]+)/xmpp-websocket {
119
+ set $subdomain "$1.";
120
+ set $subdir "$1/";
121
+ set $prefix "$1";
122
+
123
+ rewrite ^/(.*)$ /xmpp-websocket;
124
+ }
125
+
126
+
127
+ # Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
128
+ location ~ ^/([^/?&:'"]+)/(.*)$ {
129
+ set $subdomain "$1.";
130
+ set $subdir "$1/";
131
+ rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
132
+ }
@@ -0,0 +1,25 @@
1
+ # session settings
2
+ ssl_session_timeout 1d;
3
+ ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
4
+ ssl_session_tickets off;
5
+
6
+ # ssl certs
7
+
8
+ ssl_certificate <%= certs_dir %>/<%= jitsi_domain %>_ecc/fullchain.cer;
9
+ ssl_certificate_key <%= certs_dir %>/<%= jitsi_domain %>_ecc/<%= jitsi_domain %>.key;
10
+ ssl_trusted_certificate <%= certs_dir %>/<%= jitsi_domain %>_ecc/ca.cer;
11
+
12
+ # protocols
13
+ # Mozilla Guideline v5.6, nginx 1.14.2, OpenSSL 1.1.1d, intermediate configuration, no OCSP
14
+ # https://ssl-config.mozilla.org/#server=nginx&version=1.14.2&config=intermediate&openssl=1.1.1d&ocsp=false&guideline=5.6
15
+ ssl_protocols TLSv1.2 TLSv1.3;
16
+ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
17
+ ssl_prefer_server_ciphers off;
18
+
19
+ # Diffie-Hellman parameter for DHE cipher suites
20
+ ssl_dhparam /etc/jitsi/web/defaults/ffdhe2048.txt;
21
+
22
+ # HSTS (ngx_http_headers_module is required) (63072000 seconds)
23
+
24
+ add_header Strict-Transport-Security "max-age=63072000" always;
25
+
@@ -0,0 +1,67 @@
1
+ videobridge {
2
+ ice {
3
+ udp {
4
+ port = 10000
5
+ }
6
+ advertise-private-candidates = true
7
+ }
8
+ apis {
9
+ xmpp-client {
10
+ configs {
11
+ shard0 {
12
+ HOSTNAME = "xmpp.<%= jitsi_domain %>"
13
+ PORT = "5222"
14
+ DOMAIN = "auth.<%= jitsi_domain %>"
15
+ USERNAME = "jvb"
16
+ PASSWORD = "<%= jvb_password %>"
17
+ MUC_JIDS = "jvbbrewery@internal-muc.<%= jitsi_domain %>"
18
+ MUC_NICKNAME = "shard0"
19
+ DISABLE_CERTIFICATE_VERIFICATION = true
20
+ }
21
+ }
22
+ }
23
+ rest {
24
+ enabled = false
25
+ }
26
+ }
27
+ rest {
28
+ shutdown {
29
+ enabled = false
30
+ }
31
+ }
32
+ stats {
33
+ enabled = true
34
+ }
35
+ websockets {
36
+ enabled = true
37
+ domain = "<%= jitsi_domain %>"
38
+ tls = true
39
+ server-id = "<%= local_address %>"
40
+ }
41
+ http-servers {
42
+ private {
43
+ host = 0.0.0.0
44
+ }
45
+ public {
46
+ host = 0.0.0.0
47
+ port = 9090
48
+ }
49
+ }
50
+ }
51
+
52
+ ice4j {
53
+ harvest {
54
+ mapping {
55
+ stun {
56
+ addresses = [ "meet-jit-si-turnrelay.jitsi.net:443" ]
57
+ }
58
+ static-mappings = [
59
+ {
60
+ local-address = "<%= local_address %>"
61
+ public-address = ""
62
+ name = "ip-0"
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,208 @@
1
+ // Jitsi Meet configuration.
2
+ var config = {};
3
+
4
+ if (!config.hasOwnProperty('hosts')) config.hosts = {};
5
+
6
+ config.hosts.domain = '<%= jitsi_domain %>';
7
+ config.focusUserJid = 'focus@auth.<%= jitsi_domain %>';
8
+
9
+ var subdir = '<!--# echo var="subdir" default="" -->';
10
+ var subdomain = "<!--# echo var="subdomain" default="" -->";
11
+ if (subdir.startsWith('<!--')) {
12
+ subdir = '';
13
+ }
14
+ if (subdomain) {
15
+ subdomain = subdomain.substring(0,subdomain.length-1).split('.').join('_').toLowerCase() + '.';
16
+ }
17
+ config.hosts.muc = 'muc.' + subdomain + '<%= jitsi_domain %>';
18
+ config.bosh = '/http-bind';
19
+
20
+ config.websocket = 'wss://<%= jitsi_domain %>:443/' + subdir + 'xmpp-websocket';
21
+
22
+ // Video configuration.
23
+ //
24
+
25
+ if (!config.hasOwnProperty('constraints')) config.constraints = {};
26
+ if (!config.constraints.hasOwnProperty('video')) config.constraints.video = {};
27
+
28
+ config.resolution = 720;
29
+ config.constraints.video.height = { ideal: 720, max: 720, min: 180 };
30
+ config.constraints.video.width = { ideal: 1280, max: 1280, min: 320};
31
+ config.disableSimulcast = false;
32
+ config.startVideoMuted = 10;
33
+ config.startWithVideoMuted = false;
34
+
35
+ if (!config.hasOwnProperty('flags')) config.flags = {};
36
+ config.flags.sourceNameSignaling = true;
37
+ config.flags.sendMultipleVideoStreams = true;
38
+ config.flags.receiveMultipleVideoStreams = true;
39
+
40
+
41
+ // ScreenShare Configuration.
42
+ //
43
+
44
+ config.desktopSharingFrameRate = { min: 5, max: 5 };
45
+
46
+ // Audio configuration.
47
+ //
48
+
49
+ config.enableNoAudioDetection = true;
50
+ config.enableTalkWhileMuted = false;
51
+ config.disableAP = false;
52
+
53
+ if (!config.hasOwnProperty('audioQuality')) config.audioQuality = {};
54
+ config.audioQuality.stereo = false;
55
+
56
+ config.startAudioOnly = false;
57
+ config.startAudioMuted = 10;
58
+ config.startWithAudioMuted = false;
59
+ config.startSilent = false;
60
+ config.enableOpusRed = false;
61
+ config.disableAudioLevels = false;
62
+ config.enableNoisyMicDetection = true;
63
+
64
+
65
+ // Peer-to-Peer options.
66
+ //
67
+
68
+ if (!config.hasOwnProperty('p2p')) config.p2p = {};
69
+
70
+ config.p2p.enabled = true;
71
+
72
+
73
+ // Breakout Rooms
74
+ //
75
+
76
+ config.hideAddRoomButton = false;
77
+
78
+
79
+ // Etherpad
80
+ //
81
+
82
+ // Recording.
83
+ //
84
+
85
+ // Local recording configuration.
86
+ if (!config.hasOwnProperty('localRecording')) config.localRecording = {};
87
+ config.localRecording.disable = false;
88
+ config.localRecording.notifyAllParticipants = false;
89
+ config.localRecording.disableSelfRecording = false;
90
+
91
+
92
+ // Analytics.
93
+ //
94
+
95
+ if (!config.hasOwnProperty('analytics')) config.analytics = {};
96
+
97
+ // Enables callstatsUsername to be reported as statsId and used
98
+ // by callstats as repoted remote id.
99
+ config.enableStatsID = false;
100
+
101
+
102
+ // Dial in/out services.
103
+ //
104
+
105
+
106
+ // Calendar service integration.
107
+ //
108
+
109
+ config.enableCalendarIntegration = false;
110
+
111
+ // Invitation service.
112
+ //
113
+
114
+ // Miscellaneous.
115
+ //
116
+
117
+ // Prejoin page.
118
+ if (!config.hasOwnProperty('prejoinConfig')) config.prejoinConfig = {};
119
+ config.prejoinConfig.enabled = true;
120
+
121
+ // Hides the participant name editing field in the prejoin screen.
122
+ config.prejoinConfig.hideDisplayName = false;
123
+
124
+ // List of buttons to hide from the extra join options dropdown on prejoin screen.
125
+ // Welcome page.
126
+ config.enableWelcomePage = true;
127
+
128
+ // Close page.
129
+ config.enableClosePage = false;
130
+
131
+ // Default language.
132
+ // Require users to always specify a display name.
133
+ config.requireDisplayName = false;
134
+
135
+ // Chrome extension banner.
136
+ // Disables profile and the edit of all fields from the profile settings (display name and email)
137
+ config.disableProfile = false;
138
+
139
+ // Room password (false for anything, number for max digits)
140
+ config.roomPasswordNumberOfDigits = false;
141
+ // Advanced.
142
+ //
143
+
144
+ // Lipsync hack in jicofo, may not be safe.
145
+ config.enableLipSync = false;
146
+
147
+ config.enableRemb = true;
148
+ config.enableTcc = true;
149
+
150
+ // Enable IPv6 support.
151
+ config.useIPv6 = true;
152
+
153
+ // Transcriptions (subtitles and buttons can be configured in interface_config)
154
+ config.transcription = { enabled: false };
155
+ config.transcription.translationLanguages = [];
156
+ config.transcription.translationLanguagesHead = ['en'];
157
+ config.transcription.useAppLanguage = true;
158
+ config.transcription.preferredLanguage = 'en-US';
159
+ config.transcription.disableStartForAll = false;
160
+ config.transcription.autoCaptionOnRecord = false;
161
+
162
+ // Deployment information.
163
+ //
164
+
165
+ if (!config.hasOwnProperty('deploymentInfo')) config.deploymentInfo = {};
166
+
167
+ // Testing
168
+ //
169
+
170
+ if (!config.hasOwnProperty('testing')) config.testing = {};
171
+ if (!config.testing.hasOwnProperty('octo')) config.testing.octo = {};
172
+
173
+ config.testing.capScreenshareBitrate = 1;
174
+ config.testing.octo.probability = 0;
175
+
176
+ // Deep Linking
177
+ config.disableDeepLinking = false;
178
+
179
+ // P2P preferred codec
180
+ // Enable preferred video Codec
181
+ if (!config.hasOwnProperty('videoQuality')) config.videoQuality = {};
182
+ config.videoQuality.enforcePreferredCodec = false;
183
+
184
+ if (!config.videoQuality.hasOwnProperty('maxBitratesVideo')) config.videoQuality.maxBitratesVideo = null;
185
+ // Reactions
186
+ config.disableReactions = false;
187
+
188
+ // Polls
189
+ config.disablePolls = false;
190
+
191
+ // Configure toolbar buttons
192
+ // Hides the buttons at pre-join screen
193
+ // Configure remote participant video menu
194
+ if (!config.hasOwnProperty('remoteVideoMenu')) config.remoteVideoMenu = {};
195
+ config.remoteVideoMenu.disabled = false;
196
+ config.remoteVideoMenu.disableKick = false;
197
+ config.remoteVideoMenu.disableGrantModerator = false;
198
+ config.remoteVideoMenu.disablePrivateChat = false;
199
+
200
+ // Configure e2eping
201
+ if (!config.hasOwnProperty('e2eping')) config.e2eping = {};
202
+ config.e2eping.enabled = false;
203
+
204
+
205
+ // Settings for the Excalidraw whiteboard integration.
206
+ if (!config.hasOwnProperty('whiteboard')) config.whiteboard = {};
207
+ config.whiteboard.enabled = false;
208
+ config.whiteboard.collabServerBaseUrl = '';