Merge remote-tracking branch 'upstream/v3.0.x-release' into gql-middleware-improve-perform

This commit is contained in:
Gustavo Trott 2024-06-25 12:40:45 -03:00
commit e8cd99b62f
34 changed files with 1593 additions and 1417 deletions

View File

@ -9,7 +9,7 @@
"version": "2.0", "version": "2.0",
"dependencies": { "dependencies": {
"@svgdotjs/svg.js": "^3.2.0", "@svgdotjs/svg.js": "^3.2.0",
"axios": "^1.6.5", "axios": "^1.7.2",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"opentype.js": "^1.3.4", "opentype.js": "^1.3.4",
"perfect-freehand": "^1.0.16", "perfect-freehand": "^1.0.16",
@ -258,11 +258,11 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.5", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.4", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -692,9 +692,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.5", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -1633,11 +1633,11 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
}, },
"axios": { "axios": {
"version": "1.6.5", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"requires": { "requires": {
"follow-redirects": "^1.15.4", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -1960,9 +1960,9 @@
"dev": true "dev": true
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.5", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
}, },
"fontkit": { "fontkit": {
"version": "2.0.2", "version": "2.0.2",

View File

@ -9,7 +9,7 @@
}, },
"dependencies": { "dependencies": {
"@svgdotjs/svg.js": "^3.2.0", "@svgdotjs/svg.js": "^3.2.0",
"axios": "^1.6.5", "axios": "^1.7.2",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"opentype.js": "^1.3.4", "opentype.js": "^1.3.4",
"perfect-freehand": "^1.0.16", "perfect-freehand": "^1.0.16",

View File

@ -12,7 +12,7 @@
"@types/express": "^4.17.18", "@types/express": "^4.17.18",
"@types/node": "^20.7.0", "@types/node": "^20.7.0",
"@types/redis": "^4.0.11", "@types/redis": "^4.0.11",
"axios": "^0.21.1", "axios": "^0.28.0",
"express": "^4.19.2", "express": "^4.19.2",
"redis": "^4.6.10" "redis": "^4.6.10"
}, },
@ -291,12 +291,19 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
}, },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": { "node_modules/axios": {
"version": "0.21.4", "version": "0.28.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.28.0.tgz",
"integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "integrity": "sha512-Tu7NYoGY4Yoc7I+Npf9HhUMtEEpV7ZiLH9yndTCoNhcpBH0kwcvFbzYN9/u5QKI5A6uefjsNNWaz5olJVYS62Q==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.14.0" "follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
} }
}, },
"node_modules/balanced-match": { "node_modules/balanced-match": {
@ -348,12 +355,12 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -420,6 +427,17 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": { "node_modules/concat-map": {
"version": "0.0.1", "version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@ -488,6 +506,14 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/depd": { "node_modules/depd": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@ -601,9 +627,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
@ -630,9 +656,9 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -648,6 +674,19 @@
} }
} }
}, },
"node_modules/form-data": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/forwarded": { "node_modules/forwarded": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@ -875,18 +914,6 @@
"node": ">=0.12.0" "node": ">=0.12.0"
} }
}, },
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/make-error": { "node_modules/make-error": {
"version": "1.3.6", "version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
@ -1092,6 +1119,11 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"node_modules/pstree.remy": { "node_modules/pstree.remy": {
"version": "1.1.8", "version": "1.1.8",
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
@ -1184,13 +1216,10 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.5.4", "version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true, "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },

View File

@ -27,7 +27,7 @@
"@types/express": "^4.17.18", "@types/express": "^4.17.18",
"@types/node": "^20.7.0", "@types/node": "^20.7.0",
"@types/redis": "^4.0.11", "@types/redis": "^4.0.11",
"axios": "^0.21.1", "axios": "^0.28.0",
"express": "^4.19.2", "express": "^4.19.2",
"redis": "^4.6.10" "redis": "^4.6.10"
}, },

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0", "@testing-library/user-event": "^13.5.0",
"fast-json-patch": "^3.1.1", "fast-json-patch": "^3.1.1",
"graphql": "^16.6.0", "graphql": "^16.8.1",
"graphql-ws": "^5.11.2", "graphql-ws": "^5.11.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"react": "^18.2.0", "react": "^18.2.0",

View File

@ -2133,7 +2133,14 @@ select "meeting"."meetingId",
select 1 select 1
from "v_screenshare" from "v_screenshare"
where "v_screenshare"."meetingId" = "meeting"."meetingId" where "v_screenshare"."meetingId" = "meeting"."meetingId"
and "contentType" = 'screenshare'
) as "hasScreenshare", ) as "hasScreenshare",
exists (
select 1
from "v_screenshare"
where "v_screenshare"."meetingId" = "meeting"."meetingId"
and "contentType" = 'camera'
) as "hasCameraAsContent",
exists ( exists (
select 1 select 1
from "v_externalVideo" from "v_externalVideo"

View File

@ -15,6 +15,7 @@ select_permissions:
- hasExternalVideo - hasExternalVideo
- hasPoll - hasPoll
- hasScreenshare - hasScreenshare
- hasCameraAsContent
- hasTimer - hasTimer
- showRemainingTime - showRemainingTime
filter: filter:

File diff suppressed because it is too large Load Diff

View File

@ -52,7 +52,7 @@
"eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.24.0", "eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-hooks": "^4.2.0",
"postcss": "^8.4.5", "postcss": "^8.4.32",
"tailwindcss": "^3.0.11" "tailwindcss": "^3.0.11"
} }
} }

View File

@ -1 +1 @@
git clone --branch v3.2.0-beta.0 --depth 1 https://github.com/bigbluebutton/bbb-webhooks bbb-webhooks git clone --branch v3.2.0-beta.1 --depth 1 https://github.com/bigbluebutton/bbb-webhooks bbb-webhooks

View File

@ -9,6 +9,7 @@ import { LoadingContext } from '/imports/ui/components/common/loading-screen/loa
import { UI_DATA_LISTENER_SUBSCRIBED } from 'bigbluebutton-html-plugin-sdk/dist/cjs/ui-data-hooks/consts'; import { UI_DATA_LISTENER_SUBSCRIBED } from 'bigbluebutton-html-plugin-sdk/dist/cjs/ui-data-hooks/consts';
import intlHolder from '/imports/ui/core/singletons/intlHolder'; import intlHolder from '/imports/ui/core/singletons/intlHolder';
import useUserChangedLocalSettings from '/imports/ui/services/settings/hooks/useUserChangedLocalSettings'; import useUserChangedLocalSettings from '/imports/ui/services/settings/hooks/useUserChangedLocalSettings';
import { localUserSettings } from '/imports/ui/core/local-states/useUserSettings';
const RTL_LANGUAGES = ['ar', 'dv', 'fa', 'he']; const RTL_LANGUAGES = ['ar', 'dv', 'fa', 'he'];
const LARGE_FONT_LANGUAGES = ['te', 'km']; const LARGE_FONT_LANGUAGES = ['te', 'km'];
@ -71,7 +72,10 @@ const IntlAdapter: React.FC<IntlAdapterProps> = ({
const { locale } = Settings.application; const { locale } = Settings.application;
const clientSettings = JSON.parse(sessionStorage.getItem('clientStartupSettings') || '{}'); const clientSettings = JSON.parse(sessionStorage.getItem('clientStartupSettings') || '{}');
const { overrideLocale } = clientSettings; const { overrideLocale } = clientSettings;
if ( const { bbb_override_default_locale } = localUserSettings();
if (typeof bbb_override_default_locale === 'string') {
setCurrentLocale(bbb_override_default_locale);
} else if (
typeof locale === 'string' typeof locale === 'string'
&& locale !== currentLocale && locale !== currentLocale
) { ) {

View File

@ -104,6 +104,7 @@ export interface ComponentsFlags {
hasScreenshare: boolean; hasScreenshare: boolean;
hasTimer: boolean; hasTimer: boolean;
showRemainingTime: boolean; showRemainingTime: boolean;
hasCameraAsContent: boolean;
} }
export interface Metadata { export interface Metadata {

View File

@ -23,7 +23,6 @@ import { EXTERNAL_VIDEO_STOP } from '../external-video-player/mutations';
import { PINNED_PAD_SUBSCRIPTION } from '../notes/queries'; import { PINNED_PAD_SUBSCRIPTION } from '../notes/queries';
import useDeduplicatedSubscription from '../../core/hooks/useDeduplicatedSubscription'; import useDeduplicatedSubscription from '../../core/hooks/useDeduplicatedSubscription';
import connectionStatus from '../../core/graphql/singletons/connectionStatus'; import connectionStatus from '../../core/graphql/singletons/connectionStatus';
import { getSceenShareType } from './queries';
const isReactionsButtonEnabled = () => { const isReactionsButtonEnabled = () => {
const USER_REACTIONS_ENABLED = window.meetingClientSettings.public.userReaction.enabled; const USER_REACTIONS_ENABLED = window.meetingClientSettings.public.userReaction.enabled;
@ -39,10 +38,6 @@ const ActionsBarContainer = (props) => {
const RAISE_HAND_BUTTON_CENTERED = window.meetingClientSettings const RAISE_HAND_BUTTON_CENTERED = window.meetingClientSettings
.public.app.raiseHandActionButton.centered; .public.app.raiseHandActionButton.centered;
const {
data: sceenShareType,
} = useDeduplicatedSubscription(getSceenShareType);
const actionsBarStyle = layoutSelectOutput((i) => i.actionBar); const actionsBarStyle = layoutSelectOutput((i) => i.actionBar);
const layoutContextDispatch = layoutDispatch(); const layoutContextDispatch = layoutDispatch();
@ -108,8 +103,7 @@ const ActionsBarContainer = (props) => {
setPresentationIsOpen: MediaService.setPresentationIsOpen, setPresentationIsOpen: MediaService.setPresentationIsOpen,
hasScreenshare: currentMeeting?.componentsFlags?.hasScreenshare ?? false, hasScreenshare: currentMeeting?.componentsFlags?.hasScreenshare ?? false,
isMeteorConnected: connected, isMeteorConnected: connected,
hasCameraAsContent: currentMeeting?.componentsFlags?.hasScreenshare hasCameraAsContent: currentMeeting?.componentsFlags?.hasCameraAsContent,
&& sceenShareType?.screenshare[0]?.contentType,
intl, intl,
allowExternalVideo, allowExternalVideo,
isPollingEnabled, isPollingEnabled,

View File

@ -1,21 +0,0 @@
import { gql } from '@apollo/client';
interface ScreenShare {
contentType: string;
}
export interface GetScreenShareTypeResponse {
screenshare: ScreenShare[];
}
export const getSceenShareType = gql`
subscription getSceenShareType {
screenshare {
contentType
}
}
`;
export default {
getSceenShareType,
};

View File

@ -239,10 +239,9 @@ class App extends Component {
&& currentUserEmoji.status !== 'raiseHand' && currentUserEmoji.status !== 'raiseHand'
&& currentUserEmoji.status !== 'away' && currentUserEmoji.status !== 'away'
) { ) {
const formattedEmojiStatus = intl.formatMessage({ id: `app.actionsBar.emojiMenu.${currentUserEmoji.status}Label` }) const formattedEmojiStatus = currentUserEmoji.status;
|| currentUserEmoji.status;
if (currentUserEmoji.status === 'none') { if (currentUserEmoji.status === null) {
notify( notify(
intl.formatMessage(intlMessages.clearedEmoji), intl.formatMessage(intlMessages.clearedEmoji),
'info', 'info',

View File

@ -255,7 +255,8 @@ const AppContainer = (props) => {
}; };
const shouldShowScreenshare = (viewScreenshare || isPresenter) const shouldShowScreenshare = (viewScreenshare || isPresenter)
&& currentMeeting?.componentsFlags?.hasScreenshare; && (currentMeeting?.componentsFlags?.hasScreenshare
|| currentMeeting?.componentsFlags?.hasCameraAsContent);
const shouldShowPresentation = (!shouldShowScreenshare && !isSharedNotesPinned const shouldShowPresentation = (!shouldShowScreenshare && !isSharedNotesPinned
&& !shouldShowExternalVideo && !shouldShowGenericMainContent && !shouldShowExternalVideo && !shouldShowGenericMainContent
&& (presentationIsOpen || presentationRestoreOnUpdate)) && isPresentationEnabled; && (presentationIsOpen || presentationRestoreOnUpdate)) && isPresentationEnabled;

View File

@ -1,5 +1,5 @@
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { Session } from 'meteor/session'; import Session from '/imports/ui/services/storage/in-memory';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import { ErrorScreen } from '../../error-screen/component'; import { ErrorScreen } from '../../error-screen/component';
import LoadingScreen from '../../common/loading-screen/component'; import LoadingScreen from '../../common/loading-screen/component';
@ -86,7 +86,7 @@ const StartupDataFetch: React.FC<StartupDataFetchProps> = ({
clearTimeout(timeoutRef.current); clearTimeout(timeoutRef.current);
setLoading(false); setLoading(false);
}).catch(() => { }).catch(() => {
Session.set('errorMessageDescription', 'meeting_ended'); Session.setItem('errorMessageDescription', 'meeting_ended');
setError('Error fetching startup data'); setError('Error fetching startup data');
setLoading(false); setLoading(false);
}); });

View File

@ -26,7 +26,17 @@ const GenericContentSidekickContainer: React.FC<GenericContentSidekickContainerP
genericContentSidekickAreaExtensibleArea = [...genericContentSidekickArea]; genericContentSidekickAreaExtensibleArea = [...genericContentSidekickArea];
} }
if (genericContentSidekickAreaExtensibleArea.length === 0) { const pickedGenericSidekickContent = genericContentSidekickAreaExtensibleArea
.filter((gsc) => gsc.id === genericSidekickContentIdIsolated)[0];
if (genericContentSidekickAreaExtensibleArea.length === 0 || !pickedGenericSidekickContent) {
logger.error({
logCode: 'generic_sidekick_content_not_found',
extraInfo: {
genericSidekickContentId,
genericSidekickContentIdIsolated,
},
}, `Generic sidekick content with id ${genericSidekickContentIdIsolated} not found`);
layoutContextDispatch({ layoutContextDispatch({
type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN, type: ACTIONS.SET_SIDEBAR_CONTENT_IS_OPEN,
value: false, value: false,
@ -37,18 +47,6 @@ const GenericContentSidekickContainer: React.FC<GenericContentSidekickContainerP
}); });
return null; return null;
} }
const pickedGenericSidekickContent = genericContentSidekickAreaExtensibleArea
.filter((gsc) => gsc.id === genericSidekickContentIdIsolated)[0];
if (!pickedGenericSidekickContent) {
logger.error({
logCode: 'generic_sidekick_content_not_found',
extraInfo: {
genericSidekickContentId,
genericSidekickContentIdIsolated,
},
}, `Generic sidekick content with id ${genericSidekickContentIdIsolated} not found`);
}
return ( return (
<GenericSidekickContent <GenericSidekickContent

View File

@ -1,11 +1,15 @@
import React, { useEffect, useRef } from 'react'; import React, { useEffect, useRef, useState } from 'react';
import { DocumentNode } from 'graphql'; import { DocumentNode } from 'graphql';
import { GraphqlResponseWrapper, UpdatedEventDetails } from 'bigbluebutton-html-plugin-sdk/dist/cjs/core/types'; import {
GraphqlResponseWrapper, HookEventWrapper, SubscribedEventDetails, UpdatedEventDetails,
} from 'bigbluebutton-html-plugin-sdk/dist/cjs/core/types';
import { DataChannelHooks, DataChannelTypes } from 'bigbluebutton-html-plugin-sdk/dist/cjs/data-channel/enums'; import { DataChannelHooks, DataChannelTypes } from 'bigbluebutton-html-plugin-sdk/dist/cjs/data-channel/enums';
import { PLUGIN_DATA_CHANNEL_LATEST_ITEM, PLUGIN_DATA_CHANNEL_NEW_ITEMS, PLUGIN_DATA_CHANNEL_All_ITEMS } from '../subscriptions';
import createUseSubscription from '/imports/ui/core/hooks/createUseSubscription'; import createUseSubscription from '/imports/ui/core/hooks/createUseSubscription';
import { HookEvents } from 'bigbluebutton-html-plugin-sdk/dist/cjs/core/enum';
import { DataChannelArguments } from 'bigbluebutton-html-plugin-sdk/dist/cjs/data-channel/types';
import { PLUGIN_DATA_CHANNEL_LATEST_ITEM, PLUGIN_DATA_CHANNEL_NEW_ITEMS, PLUGIN_DATA_CHANNEL_All_ITEMS } from '../subscriptions';
export interface DataChannelItemManagerReaderProps { export interface DataChannelItemManagerReaderProps {
pluginName: string; pluginName: string;
@ -32,6 +36,7 @@ export const DataChannelItemManagerReader: React.ElementType<DataChannelItemMana
subChannelName, subChannelName,
dataChannelIdentifier, dataChannelIdentifier,
} = props; } = props;
const [sendSignal, setSendSignal] = useState<boolean>(false);
const cursor = useRef(new Date()); const cursor = useRef(new Date());
let subscription: DocumentNode; let subscription: DocumentNode;
const variables: SubscriptionVariables = { const variables: SubscriptionVariables = {
@ -61,6 +66,30 @@ export const DataChannelItemManagerReader: React.ElementType<DataChannelItemMana
const dataResultFromSubscription = createUseSubscription<object>(subscription, const dataResultFromSubscription = createUseSubscription<object>(subscription,
variables, usePatchedSubscription)((obj) => obj); variables, usePatchedSubscription)((obj) => obj);
useEffect(() => {
const subscribeHandler: EventListener = (
(event: HookEventWrapper<void>) => {
if (event.detail.hook === DataChannelHooks.DATA_CHANNEL_BUILDER) {
const eventDetails = event.detail as SubscribedEventDetails;
const hookArguments = eventDetails?.hookArguments as DataChannelArguments;
const dataChannelTypeFromEvent = hookArguments.dataChannelType!;
if (hookArguments?.channelName && hookArguments?.pluginName
&& hookArguments.subChannelName === subChannelName
&& hookArguments.pluginName === pluginName
&& hookArguments.channelName === channelName
&& dataChannelTypeFromEvent === dataChannelType
) {
setSendSignal((signal) => !signal);
}
}
}) as EventListener;
window.addEventListener(HookEvents.SUBSCRIBED, subscribeHandler);
return () => {
window.removeEventListener(HookEvents.SUBSCRIBED, subscribeHandler);
};
}, []);
useEffect(() => { useEffect(() => {
const dataResult = { const dataResult = {
data: dataResultFromSubscription.data, data: dataResultFromSubscription.data,
@ -82,7 +111,7 @@ export const DataChannelItemManagerReader: React.ElementType<DataChannelItemMana
}, },
}), }),
); );
}, [dataResultFromSubscription]); }, [dataResultFromSubscription, sendSignal]);
return null; return null;
}; };

View File

@ -48,7 +48,7 @@ const PluginDataChannelManager: React.ElementType<PluginDataChannelManagerProps>
totalUses: (previousMap.get(uniqueId)?.totalUses || 0) + deltaSubscribe, totalUses: (previousMap.get(uniqueId)?.totalUses || 0) + deltaSubscribe,
subChannelName, subChannelName,
channelName, channelName,
types: newArrayTypes, types: [...new Set(newArrayTypes)],
}); });
return newMap; return newMap;
} }

View File

@ -4,9 +4,11 @@ import { USER_AGGREGATE_COUNT_SUBSCRIPTION } from '/imports/ui/core/graphql/quer
import UserTitleOptionsContainer from './user-options-dropdown/component'; import UserTitleOptionsContainer from './user-options-dropdown/component';
import Styled from './styles'; import Styled from './styles';
import useDeduplicatedSubscription from '/imports/ui/core/hooks/useDeduplicatedSubscription'; import useDeduplicatedSubscription from '/imports/ui/core/hooks/useDeduplicatedSubscription';
import { USER_WITH_AUDIO_AGGREGATE_COUNT_SUBSCRIPTION } from './queries';
interface UserTitleProps { interface UserTitleProps {
count: number; count: number;
countWithAudio: number;
} }
const messages = defineMessages({ const messages = defineMessages({
@ -18,13 +20,19 @@ const messages = defineMessages({
const UserTitle: React.FC<UserTitleProps> = ({ const UserTitle: React.FC<UserTitleProps> = ({
count, count,
countWithAudio,
}) => { }) => {
const intl = useIntl(); const intl = useIntl();
return ( return (
<Styled.Container> <Styled.Container>
<Styled.SmallTitle> <Styled.SmallTitle>
{intl.formatMessage(messages.usersTitle)} {intl.formatMessage(messages.usersTitle)}
<span
data-test-users-count={count}
data-test-users-with-audio-count={countWithAudio}
>
{` (${count.toLocaleString('en-US', { notation: 'standard' })})`} {` (${count.toLocaleString('en-US', { notation: 'standard' })})`}
</span>
</Styled.SmallTitle> </Styled.SmallTitle>
<UserTitleOptionsContainer /> <UserTitleOptionsContainer />
</Styled.Container> </Styled.Container>
@ -35,8 +43,18 @@ const UserTitleContainer: React.FC = () => {
const { const {
data: countData, data: countData,
} = useDeduplicatedSubscription(USER_AGGREGATE_COUNT_SUBSCRIPTION); } = useDeduplicatedSubscription(USER_AGGREGATE_COUNT_SUBSCRIPTION);
const {
data: audioUsersCountData,
} = useDeduplicatedSubscription(USER_WITH_AUDIO_AGGREGATE_COUNT_SUBSCRIPTION);
const count = countData?.user_aggregate?.aggregate?.count || 0; const count = countData?.user_aggregate?.aggregate?.count || 0;
return <UserTitle count={count} />; const countWithAudio = audioUsersCountData?.user_aggregate?.aggregate?.count || 0;
return (
<UserTitle
count={count}
countWithAudio={countWithAudio}
/>
);
}; };
export default UserTitleContainer; export default UserTitleContainer;

View File

@ -0,0 +1,15 @@
import { gql } from '@apollo/client';
export const USER_WITH_AUDIO_AGGREGATE_COUNT_SUBSCRIPTION = gql`
subscription UsersWithAudioCount {
user_aggregate(where: {voice: {joined: {_eq: true}}}) {
aggregate {
count
}
}
}
`;
export default {
USER_WITH_AUDIO_AGGREGATE_COUNT_SUBSCRIPTION,
};

View File

@ -404,7 +404,8 @@ export const useVideoStreams = (
export const useHasVideoStream = () => { export const useHasVideoStream = () => {
const { streams } = useStreams(); const { streams } = useStreams();
return streams.some((s) => videoService.isLocalStream(s.stream)); const connectingStream = useConnectingStream();
return !!connectingStream || streams.some((s) => videoService.isLocalStream(s.stream));
}; };
const useOwnVideoStreamsQuery = () => useLazyQuery<OwnVideoStreamsResponse>( const useOwnVideoStreamsQuery = () => useLazyQuery<OwnVideoStreamsResponse>(

View File

@ -145,8 +145,6 @@ const JoinVideoButton: React.FC<JoinVideoButtonProps> = ({
? intl.formatMessage(intlMessages[disableReason as keyof typeof intlMessages]) ? intl.formatMessage(intlMessages[disableReason as keyof typeof intlMessages])
: intl.formatMessage(intlMessages[getMessageFromStatus() as keyof typeof intlMessages]); : intl.formatMessage(intlMessages[getMessageFromStatus() as keyof typeof intlMessages]);
const isSharing = hasVideoStream || status === 'videoConnecting';
const renderUserActions = () => { const renderUserActions = () => {
const actions = []; const actions = [];
@ -223,9 +221,9 @@ const JoinVideoButton: React.FC<JoinVideoButtonProps> = ({
data-test={hasVideoStream ? 'leaveVideo' : 'joinVideo'} data-test={hasVideoStream ? 'leaveVideo' : 'joinVideo'}
onClick={handleOnClick} onClick={handleOnClick}
hideLabel hideLabel
color={isSharing ? 'primary' : 'default'} color={hasVideoStream ? 'primary' : 'default'}
icon={isSharing ? 'video' : 'video_off'} icon={hasVideoStream ? 'video' : 'video_off'}
ghost={!isSharing} ghost={!hasVideoStream}
size="lg" size="lg"
circle circle
disabled={!!disableReason} disabled={!!disableReason}

View File

@ -121,6 +121,7 @@ const MEETING_SUBSCRIPTION = gql`
hasScreenshare hasScreenshare
hasTimer hasTimer
showRemainingTime showRemainingTime
hasCameraAsContent
} }
} }
} }

View File

@ -6,7 +6,7 @@
"": { "": {
"dependencies": { "dependencies": {
"@playwright/test": "^1.37.1", "@playwright/test": "^1.37.1",
"axios": "^1.6.0", "axios": "^1.7.2",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"deep-equal": "^2.2.1", "deep-equal": "^2.2.1",
"dotenv": "^16.1.4", "dotenv": "^16.1.4",
@ -81,11 +81,11 @@
} }
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.0", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -226,9 +226,9 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.2", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -899,11 +899,11 @@
"integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
}, },
"axios": { "axios": {
"version": "1.6.0", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"requires": { "requires": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -1008,9 +1008,9 @@
} }
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.2", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
}, },
"for-each": { "for-each": {
"version": "0.3.3", "version": "0.3.3",

View File

@ -11,7 +11,7 @@
}, },
"dependencies": { "dependencies": {
"@playwright/test": "^1.37.1", "@playwright/test": "^1.37.1",
"axios": "^1.6.0", "axios": "^1.7.2",
"chalk": "^4.1.2", "chalk": "^4.1.2",
"deep-equal": "^2.2.1", "deep-equal": "^2.2.1",
"dotenv": "^16.1.4", "dotenv": "^16.1.4",

View File

@ -5,7 +5,7 @@
"packages": { "packages": {
"": { "": {
"dependencies": { "dependencies": {
"axios": "^1.6.0", "axios": "^1.7.2",
"babel-jest": "^27.5.1", "babel-jest": "^27.5.1",
"child_process": "^1.0.2", "child_process": "^1.0.2",
"dotenv": "^16.0.1", "dotenv": "^16.0.1",
@ -37,11 +37,11 @@
} }
}, },
"node_modules/@babel/code-frame": { "node_modules/@babel/code-frame": {
"version": "7.24.2", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"dependencies": { "dependencies": {
"@babel/highlight": "^7.24.2", "@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
}, },
"engines": { "engines": {
@ -91,11 +91,11 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
"integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.5", "@babel/types": "^7.24.7",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@ -120,31 +120,34 @@
} }
}, },
"node_modules/@babel/helper-environment-visitor": { "node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"dependencies": {
"@babel/types": "^7.24.7"
},
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-function-name": { "node_modules/@babel/helper-function-name": {
"version": "7.23.0", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dependencies": { "dependencies": {
"@babel/template": "^7.22.15", "@babel/template": "^7.24.7",
"@babel/types": "^7.23.0" "@babel/types": "^7.24.7"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-hoist-variables": { "node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
"dependencies": { "dependencies": {
"@babel/types": "^7.22.5" "@babel/types": "^7.24.7"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
@ -199,28 +202,28 @@
} }
}, },
"node_modules/@babel/helper-split-export-declaration": { "node_modules/@babel/helper-split-export-declaration": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dependencies": { "dependencies": {
"@babel/types": "^7.24.5" "@babel/types": "^7.24.7"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-string-parser": { "node_modules/@babel/helper-string-parser": {
"version": "7.24.1", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/helper-validator-identifier": { "node_modules/@babel/helper-validator-identifier": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
@ -247,11 +250,11 @@
} }
}, },
"node_modules/@babel/highlight": { "node_modules/@babel/highlight": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
"integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2", "chalk": "^2.4.2",
"js-tokens": "^4.0.0", "js-tokens": "^4.0.0",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
@ -261,9 +264,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
}, },
@ -435,31 +438,31 @@
} }
}, },
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.24.0", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
"integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.23.5", "@babel/code-frame": "^7.24.7",
"@babel/parser": "^7.24.0", "@babel/parser": "^7.24.7",
"@babel/types": "^7.24.0" "@babel/types": "^7.24.7"
}, },
"engines": { "engines": {
"node": ">=6.9.0" "node": ">=6.9.0"
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
"integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.24.2", "@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.24.5", "@babel/generator": "^7.24.7",
"@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.23.0", "@babel/helper-function-name": "^7.24.7",
"@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-hoist-variables": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.5", "@babel/helper-split-export-declaration": "^7.24.7",
"@babel/parser": "^7.24.5", "@babel/parser": "^7.24.7",
"@babel/types": "^7.24.5", "@babel/types": "^7.24.7",
"debug": "^4.3.1", "debug": "^4.3.1",
"globals": "^11.1.0" "globals": "^11.1.0"
}, },
@ -468,12 +471,12 @@
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
"dependencies": { "dependencies": {
"@babel/helper-string-parser": "^7.24.1", "@babel/helper-string-parser": "^7.24.7",
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
}, },
"engines": { "engines": {
@ -2230,11 +2233,11 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.0", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -2418,11 +2421,11 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -3071,9 +3074,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -3094,9 +3097,9 @@
} }
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -7460,11 +7463,11 @@
} }
}, },
"@babel/code-frame": { "@babel/code-frame": {
"version": "7.24.2", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
"integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
"requires": { "requires": {
"@babel/highlight": "^7.24.2", "@babel/highlight": "^7.24.7",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
} }
}, },
@ -7503,11 +7506,11 @@
} }
}, },
"@babel/generator": { "@babel/generator": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
"integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
"requires": { "requires": {
"@babel/types": "^7.24.5", "@babel/types": "^7.24.7",
"@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25", "@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1" "jsesc": "^2.5.1"
@ -7526,25 +7529,28 @@
} }
}, },
"@babel/helper-environment-visitor": { "@babel/helper-environment-visitor": {
"version": "7.22.20", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
"requires": {
"@babel/types": "^7.24.7"
}
}, },
"@babel/helper-function-name": { "@babel/helper-function-name": {
"version": "7.23.0", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"requires": { "requires": {
"@babel/template": "^7.22.15", "@babel/template": "^7.24.7",
"@babel/types": "^7.23.0" "@babel/types": "^7.24.7"
} }
}, },
"@babel/helper-hoist-variables": { "@babel/helper-hoist-variables": {
"version": "7.22.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
"requires": { "requires": {
"@babel/types": "^7.22.5" "@babel/types": "^7.24.7"
} }
}, },
"@babel/helper-module-imports": { "@babel/helper-module-imports": {
@ -7581,22 +7587,22 @@
} }
}, },
"@babel/helper-split-export-declaration": { "@babel/helper-split-export-declaration": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
"integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"requires": { "requires": {
"@babel/types": "^7.24.5" "@babel/types": "^7.24.7"
} }
}, },
"@babel/helper-string-parser": { "@babel/helper-string-parser": {
"version": "7.24.1", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
"integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg=="
}, },
"@babel/helper-validator-identifier": { "@babel/helper-validator-identifier": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
"integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w=="
}, },
"@babel/helper-validator-option": { "@babel/helper-validator-option": {
"version": "7.23.5", "version": "7.23.5",
@ -7614,20 +7620,20 @@
} }
}, },
"@babel/highlight": { "@babel/highlight": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
"integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
"requires": { "requires": {
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.7",
"chalk": "^2.4.2", "chalk": "^2.4.2",
"js-tokens": "^4.0.0", "js-tokens": "^4.0.0",
"picocolors": "^1.0.0" "picocolors": "^1.0.0"
} }
}, },
"@babel/parser": { "@babel/parser": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
"integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==" "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw=="
}, },
"@babel/plugin-syntax-async-generators": { "@babel/plugin-syntax-async-generators": {
"version": "7.8.4", "version": "7.8.4",
@ -7742,39 +7748,39 @@
} }
}, },
"@babel/template": { "@babel/template": {
"version": "7.24.0", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
"integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
"requires": { "requires": {
"@babel/code-frame": "^7.23.5", "@babel/code-frame": "^7.24.7",
"@babel/parser": "^7.24.0", "@babel/parser": "^7.24.7",
"@babel/types": "^7.24.0" "@babel/types": "^7.24.7"
} }
}, },
"@babel/traverse": { "@babel/traverse": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
"integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
"requires": { "requires": {
"@babel/code-frame": "^7.24.2", "@babel/code-frame": "^7.24.7",
"@babel/generator": "^7.24.5", "@babel/generator": "^7.24.7",
"@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-environment-visitor": "^7.24.7",
"@babel/helper-function-name": "^7.23.0", "@babel/helper-function-name": "^7.24.7",
"@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-hoist-variables": "^7.24.7",
"@babel/helper-split-export-declaration": "^7.24.5", "@babel/helper-split-export-declaration": "^7.24.7",
"@babel/parser": "^7.24.5", "@babel/parser": "^7.24.7",
"@babel/types": "^7.24.5", "@babel/types": "^7.24.7",
"debug": "^4.3.1", "debug": "^4.3.1",
"globals": "^11.1.0" "globals": "^11.1.0"
} }
}, },
"@babel/types": { "@babel/types": {
"version": "7.24.5", "version": "7.24.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
"integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
"requires": { "requires": {
"@babel/helper-string-parser": "^7.24.1", "@babel/helper-string-parser": "^7.24.7",
"@babel/helper-validator-identifier": "^7.24.5", "@babel/helper-validator-identifier": "^7.24.7",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
@ -9127,11 +9133,11 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
}, },
"axios": { "axios": {
"version": "1.6.0", "version": "1.7.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
"integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
"requires": { "requires": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.6",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
}, },
@ -9274,11 +9280,11 @@
} }
}, },
"braces": { "braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"requires": { "requires": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
} }
}, },
"browserslist": { "browserslist": {
@ -9736,9 +9742,9 @@
} }
}, },
"fill-range": { "fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"requires": { "requires": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
} }
@ -9753,9 +9759,9 @@
} }
}, },
"follow-redirects": { "follow-redirects": {
"version": "1.15.3", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
}, },
"fs": { "fs": {
"version": "0.0.1-security", "version": "0.0.1-security",

View File

@ -6,7 +6,7 @@
"verbose": false "verbose": false
}, },
"dependencies": { "dependencies": {
"axios": "^1.6.0", "axios": "^1.7.2",
"babel-jest": "^27.5.1", "babel-jest": "^27.5.1",
"child_process": "^1.0.2", "child_process": "^1.0.2",
"dotenv": "^16.0.1", "dotenv": "^16.0.1",

View File

@ -66,10 +66,13 @@ We have enhanced the view of the polling results that appear over the whiteboard
We have made significant changes to the architecture of BigBlueButton and have introduced support to plugins -- optional custom modules included in the client which allow expanding the capabilities of BigBlueButton. A data channel is provided to allow for data exchange between clients. See the [HTML5 Plugin SDK](https://github.com/bigbluebutton/bigbluebutton-html-plugin-sdk) for examples and more information. We have made significant changes to the architecture of BigBlueButton and have introduced support to plugins -- optional custom modules included in the client which allow expanding the capabilities of BigBlueButton. A data channel is provided to allow for data exchange between clients. See the [HTML5 Plugin SDK](https://github.com/bigbluebutton/bigbluebutton-html-plugin-sdk) for examples and more information.
At the moment of writing these documentation, the official list of plugins includes: At the moment of writing these documentation, the official list of plugins includes:
- [Select Random User](https://github.com/bigbluebutton/plugins/tree/main/pick-random-user-plugin) - [Select Random User](https://github.com/bigbluebutton/plugin-pick-random-user)
- [Generic Link Share](https://github.com/bigbluebutton/plugins/tree/main/generic-link-share) - [Share a link](https://github.com/bigbluebutton/plugin-generic-link-share)
- [Session Share](https://github.com/bigbluebutton/plugins/tree/main/session-share) - [H5P plugin for BigBlueButton](https://github.com/bigbluebutton/plugin-h5p)
- [Decrease external video's volume on speak](https://github.com/bigbluebutton/plugins/tree/main/decrease-volume-on-speak) - [Session share](https://github.com/bigbluebutton/plugin-session-share)
- [Decrease the volume of external video when someone speaks](https://github.com/bigbluebutton/plugin-decrease-volume-on-speak)
- [Typed captions](https://github.com/bigbluebutton/plugin-typed-captions)
- [Source code highlight](https://github.com/bigbluebutton/plugin-code-highlight)
#### Replaced Akka framework with Pekko #### Replaced Akka framework with Pekko

23
docs/docs/plugins.md Normal file
View File

@ -0,0 +1,23 @@
## Plugins for BigBlueButton
### What they are
### How to use
### List of official plugins
This list is updated periodically. All official plugins can be found at our [GitHub plugins repository list](https://github.com/orgs/bigbluebutton/repositories?language=&q=plugin-&sort=&type=public)
- [H5P plugin for BigBlueButton](https://github.com/bigbluebutton/plugin-h5p)
- [Select random user](https://github.com/bigbluebutton/plugin-pick-random-user)
- [Typed captions](https://github.com/bigbluebutton/plugin-typed-captions)
- [Decrease the volume of external video when someone speaks](https://github.com/bigbluebutton/plugin-decrease-volume-on-speak)
- [Share a link](https://github.com/bigbluebutton/plugin-generic-link-share)
- [Session share](https://github.com/bigbluebutton/plugin-session-share)
- [Source code highlight](https://github.com/bigbluebutton/plugin-code-highlight)
### Building information

View File

@ -63,6 +63,7 @@ const config = {
{to: '/administration/install', label: 'Administration', position: 'left'}, {to: '/administration/install', label: 'Administration', position: 'left'},
{to: '/greenlight/v3/install', label: 'Greenlight', position: 'left'}, {to: '/greenlight/v3/install', label: 'Greenlight', position: 'left'},
{to: '/new-features', label: 'New Features', position: 'left'}, {to: '/new-features', label: 'New Features', position: 'left'},
// {to: '/plugins', label: 'Plugins', position: 'left'},
{to: '/support/getting-help', label: 'Support', position: 'left'}, {to: '/support/getting-help', label: 'Support', position: 'left'},
{ {
type: 'docsVersionDropdown', type: 'docsVersionDropdown',

26
docs/package-lock.json generated
View File

@ -4625,11 +4625,11 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -6628,9 +6628,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -14635,9 +14635,9 @@
} }
}, },
"node_modules/webpack-dev-server/node_modules/ws": { "node_modules/webpack-dev-server/node_modules/ws": {
"version": "8.14.2", "version": "8.17.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
"integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
"engines": { "engines": {
"node": ">=10.0.0" "node": ">=10.0.0"
}, },
@ -14879,9 +14879,9 @@
} }
}, },
"node_modules/ws": { "node_modules/ws": {
"version": "7.5.9", "version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"engines": { "engines": {
"node": ">=8.3.0" "node": ">=8.3.0"
}, },