From 9902e1d61f2219b2f8480aca5b444d7a7261e8fc Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 11 Mar 2025 20:48:30 +0100 Subject: [PATCH 001/592] [mirotalksfu] - update dep --- app/src/Server.js | 2 +- package.json | 8 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 +- public/js/RoomClient.js | 2 +- public/sfu/MediasoupClient.js | 881 ++++++++++++++++++++-------------- 6 files changed, 526 insertions(+), 373 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index 9e007ce79..b7b4b5f6c 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -58,7 +58,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.7.76 + * @version 1.7.77 * */ diff --git a/package.json b/package.json index 84e640151..d65195524 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.7.76", + "version": "1.7.77", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -75,11 +75,11 @@ "js-yaml": "^4.1.0", "jsdom": "^26.0.0", "jsonwebtoken": "^9.0.2", - "mediasoup": "3.15.5", - "mediasoup-client": "3.9.1", + "mediasoup": "3.15.6", + "mediasoup-client": "3.9.2", "ngrok": "^5.0.0-beta.2", "nodemailer": "^6.10.0", - "openai": "^4.86.2", + "openai": "^4.87.2", "qs": "6.14.0", "sanitize-filename": "^1.6.3", "socket.io": "4.8.1", diff --git a/public/js/Brand.js b/public/js/Brand.js index 87359902b..2600cb6e9 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -64,7 +64,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.7.76', + title: 'WebRTC SFU v1.7.77', html: ` From e34198d7388eed60fe6a1058964d0205cd145252 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Fri, 4 Apr 2025 03:01:58 +0200 Subject: [PATCH 057/592] [mirotalksfu] - fix typo, add shareQr in config/env --- .env.template | 1 + app/src/config.template.js | 1 + public/js/Room.js | 4 ++-- public/js/Rules.js | 1 + public/views/Room.html | 1 - 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.env.template b/.env.template index 49b0def29..1a9608764 100644 --- a/.env.template +++ b/.env.template @@ -238,6 +238,7 @@ COPYRIGHT_TEXT=MiroTalk SFU, all rights reserved # Copyright text # ---------------------------------------------------- # Main Control Buttons +SHOW_SHARE_QR=true # Show share room QR popup (true|false) SHOW_SHARE_BUTTON=true # Show share button (true|false) SHOW_HIDE_ME=true # Show hide me button (true|false) SHOW_AUDIO_BUTTON=true # Show audio button (true|false) diff --git a/app/src/config.template.js b/app/src/config.template.js index e8d4a6353..b2a4aaa09 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -942,6 +942,7 @@ module.exports = { buttons: { // Main control buttons visible in the UI main: { + shareQr: process.env.SHOW_SHARE_QR !== 'false', shareButton: process.env.SHOW_SHARE_BUTTON !== 'false', hideMeButton: process.env.SHOW_HIDE_ME !== 'false', startAudioButton: process.env.SHOW_AUDIO_BUTTON !== 'false', diff --git a/public/js/Room.js b/public/js/Room.js index 82e940ecf..61ca54008 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1723,11 +1723,11 @@ function handleButtons() { shareRoom(true); }; shareButton.onmouseenter = () => { - if (isMobileDevice) return; + if (isMobileDevice || !BUTTONS.main.shareQr) return; show(qrRoomPopupContainer); }; shareButton.onmouseleave = () => { - if (isMobileDevice) return; + if (isMobileDevice || !BUTTONS.main.shareQr) return; hide(qrRoomPopupContainer); }; hideMeButton.onclick = (e) => { diff --git a/public/js/Rules.js b/public/js/Rules.js index 0f29fd733..b385fa772 100644 --- a/public/js/Rules.js +++ b/public/js/Rules.js @@ -15,6 +15,7 @@ const isRulesActive = true; */ let BUTTONS = { main: { + shareQr: true, shareButton: true, // for quest, presenter default true hideMeButton: true, startAudioButton: true, diff --git a/public/views/Room.html b/public/views/Room.html index a945370a9..3d5093aa1 100644 --- a/public/views/Room.html +++ b/public/views/Room.html @@ -119,7 +119,6 @@ - From 943ee40c7cac08c9aaf35686290974f9f8688e7a Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sat, 5 Apr 2025 00:22:39 +0200 Subject: [PATCH 058/592] [mirotalksfu] - #200 improve webRTCTransport config, add restartTransportWithRetry, refactoring --- app/src/Room.js | 3 +- app/src/Server.js | 86 ++++++++++++++++-------------------- app/src/config.template.js | 6 +-- package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 +- public/js/RoomClient.js | 90 ++++++++++++++++++++++---------------- 7 files changed, 98 insertions(+), 95 deletions(-) diff --git a/app/src/Room.js b/app/src/Room.js index d2a1ac836..13cebeb81 100644 --- a/app/src/Room.js +++ b/app/src/Room.js @@ -566,8 +566,7 @@ module.exports = class Room { try { await transport.setMaxIncomingBitrate(maxIncomingBitrate); } catch (error) { - log.error('Failed to set max incoming bitrate', error); - throw new Error(`Failed to set max incoming bitrate for transport ${id}`); + log.warn('Failed to set max incoming bitrate', error); } } diff --git a/app/src/Server.js b/app/src/Server.js index 3592bd20b..f39ea5b25 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.8.10 + * @version 1.8.11 * */ @@ -1718,25 +1718,19 @@ function startServer() { } const { room, peer } = getRoomAndPeer(socket); - const peerInfo = getPeerInfo(peer); - log.debug('Get RouterRtpCapabilities', peerInfo); + log.debug('Request: getRouterRtpCapabilities', peerInfo); try { - const getRouterRtpCapabilities = room.getRtpCapabilities(); - - //log.debug('Get RouterRtpCapabilities callback', { callback: getRouterRtpCapabilities }); - - callback(getRouterRtpCapabilities); + const rtpCapabilities = room.getRtpCapabilities(); + callback(rtpCapabilities); } catch (err) { - log.error('Get RouterRtpCapabilities error', { - error: err, - peerInfo, - }); - callback({ + log.warn('Failed to get Router RTP Capabilities', { error: err.message, + peerInfo, }); + callback({ error: err.message }); } }); @@ -1746,22 +1740,15 @@ function startServer() { } const { room, peer } = getRoomAndPeer(socket); - const peerInfo = getPeerInfo(peer); - log.debug('Create WebRtc transport', peerInfo); + log.debug('Create WebRTC transport request received', peerInfo); try { const createWebRtcTransport = await room.createWebRtcTransport(socket.id); - - //log.debug('Create WebRtc transport callback', { callback: createWebRtcTransport }); - callback(createWebRtcTransport); } catch (err) { - log.error('Create WebRtc Transport error', { - error: err, - peerInfo, - }); + log.warn('Create WebRTC Transport warning', { error: err.message, peerInfo }); callback({ error: err.message }); } }); @@ -1772,22 +1759,15 @@ function startServer() { } const { room, peer } = getRoomAndPeer(socket); - const peerInfo = getPeerInfo(peer); - log.debug('Connect transport', { transport_id: transport_id, peerInfo }); + log.debug('Connect transport request received', { transport_id, peerInfo }); try { const connectTransport = await room.connectPeerTransport(socket.id, transport_id, dtlsParameters); - - //log.debug('Connect transport', { callback: connectTransport }); - callback(connectTransport); } catch (err) { - log.error('Connect transport error', { - error: err, - peerInfo, - }); + log.warn('Connect transport warning', { error: err.message, peerInfo }); callback({ error: err.message }); } }); @@ -1805,25 +1785,23 @@ function startServer() { const peerInfo = getPeerInfo(peer); - log.debug('Restart ICE', { transport_id: transport_id, peerInfo }); + log.debug('Restart ICE request received', { transport_id: transport_id, peerInfo }); try { const transport = peer.getTransport(transport_id); if (!transport) { - throw new Error(`Restart ICE, transport with id "${transport_id}" not found`); + log.warn(`Restart ICE attempt failed. Transport with ID "${transport_id}" not found.`); + return callback({ error: `Transport with id "${transport_id}" not found` }); } const iceParameters = await transport.restartIce(); - log.debug('Restart ICE callback', { callback: iceParameters }); + log.debug('ICE Restart successful', { transport_id: transport_id, iceParameters }); callback(iceParameters); } catch (err) { - log.error('Restart ICE error', { - error: err, - peerInfo, - }); + log.warn('Restart ICE warning', { error: err.message, peerInfo }); callback({ error: err.message }); } }); @@ -1877,7 +1855,7 @@ function startServer() { callback({ producer_id }); } catch (err) { - log.error('Producer transport error', { + log.warn('Producer transport error', { error: err, peerInfo, }); @@ -1910,7 +1888,7 @@ function startServer() { callback(params); } catch (err) { - log.error('Consumer transport error', { + log.warn('Consumer transport error', { error: err, type, consumerTransportId, @@ -1934,7 +1912,7 @@ function startServer() { try { room.closeProducer(socket.id, data.producer_id); } catch (err) { - log.error('Producer Close error', { + log.warn('Producer Close error', { error: err.message, peerInfo, }); @@ -1942,7 +1920,9 @@ function startServer() { }); socket.on('pauseProducer', async ({ producer_id, type }, callback) => { - if (!roomExists(socket)) return; + if (!roomExists(socket)) { + return callback({ error: 'Room not found' }); + } const peer = getPeer(socket); @@ -1967,7 +1947,7 @@ function startServer() { callback('successfully'); } catch (error) { - log.error('Pause producer', { + log.warn('Pause producer', { error: error, peerInfo, }); @@ -1976,7 +1956,9 @@ function startServer() { }); socket.on('resumeProducer', async ({ producer_id, type }, callback) => { - if (!roomExists(socket)) return; + if (!roomExists(socket)) { + return callback({ error: 'Room not found' }); + } const peer = getPeer(socket); @@ -2001,7 +1983,7 @@ function startServer() { callback('successfully'); } catch (error) { - log.error('Resume producer', { + log.warn('Resume producer', { error: error, peerInfo, }); @@ -2010,7 +1992,9 @@ function startServer() { }); socket.on('resumeConsumer', async ({ consumer_id, type }, callback) => { - if (!roomExists(socket)) return; + if (!roomExists(socket)) { + return callback({ error: 'Room not found' }); + } const peer = getPeer(socket); @@ -2035,7 +2019,7 @@ function startServer() { callback('successfully'); } catch (error) { - log.error('Resume consumer', { + log.warn('Resume consumer', { error: error, peerInfo, }); @@ -2059,7 +2043,9 @@ function startServer() { }); socket.on('getPeerCounts', async ({}, callback) => { - if (!roomExists(socket)) return; + if (!roomExists(socket)) { + return callback({ error: 'Room not found' }); + } const room = getRoom(socket); @@ -2310,7 +2296,9 @@ function startServer() { }); socket.on('getRoomInfo', async (_, cb) => { - if (!roomExists(socket)) return; + if (!roomExists(socket)) { + return cb({ error: 'Room not found' }); + } const { room, peer } = getRoomAndPeer(socket); diff --git a/app/src/config.template.js b/app/src/config.template.js index b2a4aaa09..909b2a87c 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -1396,9 +1396,9 @@ module.exports = { * - These values should be tuned based on Node resources * - Consider network plugin overhead (Calico, Cilium etc.) */ - initialAvailableOutgoingBitrate: 1000000, // 1 Mbps initial bitrate - minimumAvailableOutgoingBitrate: 600000, // 600 Kbps minimum guaranteed - maxIncomingBitrate: 1500000, // 1.5 Mbps max per producer + initialAvailableOutgoingBitrate: 2500000, // 2.5 Mbps initial bitrate + minimumAvailableOutgoingBitrate: 1000000, // 1 Mbps minimum guaranteed + maxIncomingBitrate: 3000000, // 3 Mbps max per producer /** * Data Channel Settings diff --git a/package.json b/package.json index aa2851441..2d4eb512f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.8.10", + "version": "1.8.11", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index 9dad2f803..1c8a1fd8a 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -64,7 +64,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.8.10', + title: 'WebRTC SFU v1.8.11', html: ` diff --git a/public/views/newroom.html b/public/views/newroom.html index a3e1c82cd..e589cb386 100755 --- a/public/views/newroom.html +++ b/public/views/newroom.html @@ -123,7 +123,7 @@

- + - +
+ + + + + +
+
+ +

Noise Suppression

+
+
+
+ +
+
+

From 7a9751f66e8cf910dae672a6f808d0bd6af4eba3 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 15 Jul 2025 12:11:17 +0200 Subject: [PATCH 165/592] [mirotalksfu] - #215 Fix typo --- public/js/NodeProcessor.js | 9 ++------- public/js/RoomClient.js | 4 +--- public/views/Room.html | 4 ++-- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/public/js/NodeProcessor.js b/public/js/NodeProcessor.js index ffaa13393..8d17813c2 100644 --- a/public/js/NodeProcessor.js +++ b/public/js/NodeProcessor.js @@ -29,13 +29,8 @@ class UIManager { `Audio processing ${isProcessing ? 'started' : 'stopped'}`, isProcessing ? 'success' : 'info' ); - if (noiseSuppressionEnabled) { - this.elements.labelNoiseSuppression.textContent = '🔊 Noise Suppression'; - this.elements.labelNoiseSuppression.style.color = 'lime'; - } else { - this.elements.labelNoiseSuppression.textContent = '🔇 Noise Suppression'; - this.elements.labelNoiseSuppression.style.color = 'white'; - } + + this.elements.labelNoiseSuppression.style.color = noiseSuppressionEnabled ? 'lime' : 'white'; } } diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 0a5707bbe..0d750e157 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -2157,9 +2157,7 @@ class RoomClient { } if (typeof labelNoiseSuppression !== 'undefined') { - labelNoiseSuppression.textContent = this.RNNoiseProcessor.noiseSuppressionEnabled - ? '🔊 Noise Suppression' - : '🔇 Noise Suppression'; + labelNoiseSuppression.style.color = this.RNNoiseProcessor.noiseSuppressionEnabled ? 'lime' : 'white'; } return processedStream; diff --git a/public/views/Room.html b/public/views/Room.html index d1e884072..4afdd9563 100644 --- a/public/views/Room.html +++ b/public/views/Room.html @@ -535,9 +535,9 @@

Paste Image URL

-
-
+
-

Noise Suppression

+

Noise Suppression

From 876d6f43a9f31650449def2ac7d8f36c94fe2731 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 15 Jul 2025 12:36:52 +0200 Subject: [PATCH 166/592] [mirotalksfu] - #215 add tippy --- public/js/Room.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/public/js/Room.js b/public/js/Room.js index 9b79a9204..6a5dee5eb 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -335,9 +335,14 @@ function initClient() { 'If Active, When a participant speaks, their video will be focused and enlarged', 'right' ); + setTippy( + 'switchNoiseSuppression', + 'If Active, the audio will be processed to reduce background noise, making the voice clearer', + 'right' + ); setTippy( 'switchPushToTalk', - 'If Active, When SpaceBar keydown the microphone will be resumed, on keyup will be paused, like a walkie-talkie.', + 'If Active, When SpaceBar keydown the microphone will be resumed, on keyup will be paused, like a walkie-talkie', 'right' ); setTippy('lobbyAcceptAllBtn', 'Accept', 'top'); From 8c39b4dd8999eb05bfa366f8abb80ddde000e4b7 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 15 Jul 2025 16:16:21 +0200 Subject: [PATCH 167/592] [mirotalksfu] - #215 add typo --- public/js/NodeProcessor.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/public/js/NodeProcessor.js b/public/js/NodeProcessor.js index 8d17813c2..19c82df5a 100644 --- a/public/js/NodeProcessor.js +++ b/public/js/NodeProcessor.js @@ -21,6 +21,7 @@ class UIManager { break; default: console.log(printMessage); + break; } } @@ -114,8 +115,8 @@ class RNNoiseProcessor { localStorageSettings.mic_noise_suppression = e.currentTarget.checked; lS.setSettings(localStorageSettings); userLog( - 'info', - localStorageSettings.mic_noise_suppression ? 'Noise suppression enabled' : 'Noise suppression disabled', + localStorageSettings.mic_noise_suppression ? 'success' : 'info', + `Noise suppression ${localStorageSettings.mic_noise_suppression ? 'enabled' : 'disabled'}`, 'top-end', 3000 ); From b5420da69543b52e560795dc2c8b5396f5030a86 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 15 Jul 2025 17:59:43 +0200 Subject: [PATCH 168/592] [mirotalksfu] - fix typo --- package.json | 2 +- public/js/RoomClient.js | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0a4bf988e..ef9f065d6 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", - "webpack": "^5.100.1", + "webpack": "^5.100.2", "webpack-cli": "^6.0.1" } } diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 0d750e157..80b008add 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -2180,10 +2180,8 @@ class RoomClient { // #################################################### getAudioConstraints(deviceId) { - const audioConstraints = {}; - if (deviceId) { - audioConstraints.deviceId = deviceId; - } + let audioConstraints = {}; + deviceId ? (audioConstraints.deviceId = deviceId) : (audioConstraints = true); return { audio: audioConstraints, video: false, From 21704f6823e2c8ffac05060319b7e03560f07c71 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 15 Jul 2025 18:08:37 +0200 Subject: [PATCH 169/592] [mirotalksfu] - update package --- package-lock.json | 12 ++++++------ package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6fd17c2c..b1d4b5437 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.00", + "version": "1.9.01", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.00", + "version": "1.9.01", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.844.0", @@ -54,7 +54,7 @@ "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", - "webpack": "^5.100.1", + "webpack": "^5.100.2", "webpack-cli": "^6.0.1" }, "engines": { @@ -10538,9 +10538,9 @@ } }, "node_modules/webpack": { - "version": "5.100.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.1.tgz", - "integrity": "sha512-YJB/ESPUe2Locd0NKXmw72Dx8fZQk1gTzI6rc9TAT4+Sypbnhl8jd8RywB1bDsDF9Dy1RUR7gn3q/ZJTd0OZZg==", + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ef9f065d6..8b59c0007 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.00", + "version": "1.9.01", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index 52c8b5fc8..1571eae59 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.00', + title: 'WebRTC SFU v1.9.01', html: ` -
+
Date: Wed, 16 Jul 2025 18:01:08 +0200 Subject: [PATCH 171/592] [mirotalksfu] - #217 fix emoji in the URL --- package-lock.json | 342 ++++++++++++++++++++-------------------- package.json | 10 +- public/js/Brand.js | 2 +- public/js/Room.js | 122 +++++++------- public/js/RoomClient.js | 2 +- 5 files changed, 240 insertions(+), 238 deletions(-) diff --git a/package-lock.json b/package-lock.json index b1d4b5437..fb3c84245 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "mirotalksfu", - "version": "1.9.01", + "version": "1.9.02", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.01", + "version": "1.9.02", "license": "AGPL-3.0", "dependencies": { - "@aws-sdk/client-s3": "^3.844.0", - "@aws-sdk/lib-storage": "^3.844.0", + "@aws-sdk/client-s3": "^3.846.0", + "@aws-sdk/lib-storage": "^3.846.0", "@mattermost/client": "10.8.0", "@ngrok/ngrok": "1.5.1", - "@sentry/node": "^9.38.0", + "@sentry/node": "^9.39.0", "async-mutex": "^0.5.0", "axios": "^1.10.0", "chokidar": "^4.0.3", @@ -36,7 +36,7 @@ "mediasoup": "3.16.6", "mediasoup-client": "3.12.5", "nodemailer": "^7.0.5", - "openai": "^5.9.0", + "openai": "^5.9.2", "qs": "6.14.0", "sanitize-filename": "^1.6.3", "socket.io": "4.8.1", @@ -297,32 +297,32 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.844.0.tgz", - "integrity": "sha512-Yhp8+U4KFVQqL6phZ5yrHF5PdCvKWbYtLSS+egAfAW+N5w78amhbZcctervj59uqOZHMGDWXuDBklN+7eVfasg==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.846.0.tgz", + "integrity": "sha512-+C9qRJ7SFN+Bi2DJqfJ73Aj4ORpic9Jk5boosiOZj+TZi6qYHW6TCUqxheiC6JT/0xtE5C7VFIhW/UP/CAh0Tw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.844.0", - "@aws-sdk/credential-provider-node": "3.844.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-node": "3.846.0", "@aws-sdk/middleware-bucket-endpoint": "3.840.0", "@aws-sdk/middleware-expect-continue": "3.840.0", - "@aws-sdk/middleware-flexible-checksums": "3.844.0", + "@aws-sdk/middleware-flexible-checksums": "3.846.0", "@aws-sdk/middleware-host-header": "3.840.0", "@aws-sdk/middleware-location-constraint": "3.840.0", "@aws-sdk/middleware-logger": "3.840.0", "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-sdk-s3": "3.844.0", + "@aws-sdk/middleware-sdk-s3": "3.846.0", "@aws-sdk/middleware-ssec": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.844.0", + "@aws-sdk/middleware-user-agent": "3.846.0", "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/signature-v4-multi-region": "3.844.0", + "@aws-sdk/signature-v4-multi-region": "3.846.0", "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.844.0", + "@aws-sdk/util-endpoints": "3.845.0", "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.844.0", + "@aws-sdk/util-user-agent-node": "3.846.0", "@aws-sdk/xml-builder": "3.821.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.7.0", @@ -336,21 +336,21 @@ "@smithy/invalid-dependency": "^4.0.4", "@smithy/md5-js": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.14", - "@smithy/middleware-retry": "^4.1.15", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.1.0", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.22", - "@smithy/util-defaults-mode-node": "^4.0.22", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -379,44 +379,44 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.844.0.tgz", - "integrity": "sha512-FktodSx+pfUfIqMjoNwZ6t1xqq/G3cfT7I4JJ0HKHoIIZdoCHQB52x0OzKDtHDJAnEQPInasdPS8PorZBZtHmg==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.846.0.tgz", + "integrity": "sha512-7MgMl3nlwf2ixad5Xe8pFHtcwFchkx37MEvGuB00tn5jyBp3AQQ4dK3iHtj2HjhXcXD0G67zVPvH4/QNOL7/gw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/middleware-host-header": "3.840.0", "@aws-sdk/middleware-logger": "3.840.0", "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.844.0", + "@aws-sdk/middleware-user-agent": "3.846.0", "@aws-sdk/region-config-resolver": "3.840.0", "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.844.0", + "@aws-sdk/util-endpoints": "3.845.0", "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.844.0", + "@aws-sdk/util-user-agent-node": "3.846.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.7.0", "@smithy/fetch-http-handler": "^5.1.0", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.14", - "@smithy/middleware-retry": "^4.1.15", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.1.0", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.22", - "@smithy/util-defaults-mode-node": "^4.0.22", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -428,9 +428,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.844.0.tgz", - "integrity": "sha512-pfpI54bG5Xf2NkqrDBC2REStXlDXNCw/whORhkEs+Tp5exU872D5QKguzjPA6hH+8Pvbq1qgt5zXMbduISTHJw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz", + "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.840.0", @@ -440,7 +440,7 @@ "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", @@ -454,12 +454,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.844.0.tgz", - "integrity": "sha512-WB94Ox86MqcZ4CnRjKgopzaSuZH4hMP0GqdOxG4s1it1lRWOIPOHOC1dPiM0Zbj1uqITIhbXUQVXyP/uaJeNkw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz", + "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -470,18 +470,18 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.844.0.tgz", - "integrity": "sha512-e+efVqfkhpM8zxYeiLNgTUlX+tmtXzVm3bw1A02U9Z9cWBHyQNb8pi90M7QniLoqRURY1B0C2JqkOE61gd4KNg==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz", + "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/fetch-http-handler": "^5.1.0", "@smithy/node-http-handler": "^4.1.0", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.3", "tslib": "^2.6.2" @@ -491,18 +491,18 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.844.0.tgz", - "integrity": "sha512-jc5ArGz2HfAx5QPXD+Ep36+QWyCKzl2TG6Vtl87/vljfLhVD0gEHv8fRsqWEp3Rc6hVfKnCjLW5ayR2HYcow9w==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.844.0", - "@aws-sdk/credential-provider-env": "3.844.0", - "@aws-sdk/credential-provider-http": "3.844.0", - "@aws-sdk/credential-provider-process": "3.844.0", - "@aws-sdk/credential-provider-sso": "3.844.0", - "@aws-sdk/credential-provider-web-identity": "3.844.0", - "@aws-sdk/nested-clients": "3.844.0", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.846.0.tgz", + "integrity": "sha512-GUxaBBKsYx1kOlRbcs77l6BVyG9K70zekJX+5hdwTEgJq7AoHl/XYoWiDxPf6zQ7J4euixPJoyRhpNbJjAXdFw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.846.0", + "@aws-sdk/credential-provider-web-identity": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -515,17 +515,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.844.0.tgz", - "integrity": "sha512-pUqB0StTNyW0R03XjTA3wrQZcie/7FJKSXlYHue921ZXuhLOZpzyDkLNfdRsZTcEoYYWVPSmyS+Eu/g5yVsBNA==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.846.0.tgz", + "integrity": "sha512-du2DsXYRfQ8VIt/gXGThhT8KdUEt2j9W91W87Bl9IA5DINt4nSZv+gzh8LqHBYsTSqoUpKb+qIfP1RjZM/8r0A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.844.0", - "@aws-sdk/credential-provider-http": "3.844.0", - "@aws-sdk/credential-provider-ini": "3.844.0", - "@aws-sdk/credential-provider-process": "3.844.0", - "@aws-sdk/credential-provider-sso": "3.844.0", - "@aws-sdk/credential-provider-web-identity": "3.844.0", + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-ini": "3.846.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.846.0", + "@aws-sdk/credential-provider-web-identity": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -538,12 +538,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.844.0.tgz", - "integrity": "sha512-VCI8XvIDt2WBfk5Gi/wXKPcWTS3OkAbovB66oKcNQalllH8ESDg4SfLNhchdnN8A5sDGj6tIBJ19nk+dQ6GaqQ==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz", + "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -555,14 +555,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.844.0.tgz", - "integrity": "sha512-UNp/uWufGlb5nWa4dpc6uQnDOB/9ysJJFG95ACowNVL9XWfi1LJO7teKrqNkVhq0CzSJS1tCt3FvX4UfM+aN1g==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.846.0.tgz", + "integrity": "sha512-Dxz9dpdjfxUsSfW92SAldu9wy8wgEbskn4BNWBFHslQHTmqurmR0ci4P1SMxJJKd498AUEoIAzZOtjGOC38irQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.844.0", - "@aws-sdk/core": "3.844.0", - "@aws-sdk/token-providers": "3.844.0", + "@aws-sdk/client-sso": "3.846.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/token-providers": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -574,13 +574,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.844.0.tgz", - "integrity": "sha512-iDmX4pPmatjttIScdspZRagaFnCjpHZIEEwTyKdXxUaU0iAOSXF8ecrCEvutETvImPOC86xdrq+MPacJOnMzUA==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.846.0.tgz", + "integrity": "sha512-j6zOd+kynPQJzmVwSKSUTpsLXAf7vKkr7hCPbQyqC8ZqkIuExsRqu2vRQjX2iH/MKhwZ+qEWMxPMhfDoyv7Gag==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", - "@aws-sdk/nested-clients": "3.844.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -591,14 +591,14 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.844.0.tgz", - "integrity": "sha512-zxNiqKUjU0f7AYkDQ/SE6fCXd1iBKFKrxDC/7zZYY7smLL9D7vPElbdjiUzRPOEmiGViwzzYW6NCcksPHYVZmw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.846.0.tgz", + "integrity": "sha512-Vd1BdkRDoDAAKgUcBAko1OezMHD90PjoP43iGi2HyMJaqak/rhoOXpPlejH4B1uGkrDEUVYbJz8UtKl8UdQp4g==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.14", - "@smithy/smithy-client": "^4.4.6", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/smithy-client": "^4.4.7", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -608,7 +608,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.844.0" + "@aws-sdk/client-s3": "^3.846.0" } }, "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { @@ -655,15 +655,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.844.0.tgz", - "integrity": "sha512-LCImZd1hpM0cegfdpgZyK6x4on4Ky+c9XCFURfE4wil1J9HXf6OP4KsfHQwt1yIkMEbFqvd/ab2I5fmp7S7aFA==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.846.0.tgz", + "integrity": "sha512-CdkeVfkwt3+bDLhmOwBxvkUf6oY9iUhvosaUnqkoPsOqIiUEN54yTGOnO8A0wLz6mMsZ6aBlfFrQhFnxt3c+yw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.1.3", @@ -737,19 +737,19 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.844.0.tgz", - "integrity": "sha512-vOD5reqZszXBWMbZFN3EUar203o2i8gcoTdrymY4GMsAPDsh0k8yd3VJRNPuxT/017tP6G+rQepOGzna4umung==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.846.0.tgz", + "integrity": "sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/core": "^3.7.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.4", @@ -776,14 +776,14 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.844.0.tgz", - "integrity": "sha512-SIbDNUL6ZYXPj5Tk0qEz05sW9kNS1Gl3/wNWEmH+AuUACipkyIeKKWzD6z5433MllETh73vtka/JQF3g7AuZww==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.846.0.tgz", + "integrity": "sha512-85/oUc2jMXqQWo+HHH7WwrdqqArzhMmTmBCpXZwklBHG+ZMzTS5Wug2B0HhGDVWo9aYRMeikSq4lsrpHFVd2MQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.844.0", + "@aws-sdk/util-endpoints": "3.845.0", "@smithy/core": "^3.7.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", @@ -794,44 +794,44 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.844.0.tgz", - "integrity": "sha512-p2XILWc7AcevUSpBg2VtQrk79eWQC4q2JsCSY7HxKpFLZB4mMOfmiTyYkR1gEA6AttK/wpCOtfz+hi1/+z2V1A==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.846.0.tgz", + "integrity": "sha512-LCXPVtNQnkTuE8inPCtpfWN2raE/ndFBKf5OIbuHnC/0XYGOUl5q7VsJz471zJuN9FX3WMfopaFwmNc7cQNMpQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.844.0", + "@aws-sdk/core": "3.846.0", "@aws-sdk/middleware-host-header": "3.840.0", "@aws-sdk/middleware-logger": "3.840.0", "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.844.0", + "@aws-sdk/middleware-user-agent": "3.846.0", "@aws-sdk/region-config-resolver": "3.840.0", "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.844.0", + "@aws-sdk/util-endpoints": "3.845.0", "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.844.0", + "@aws-sdk/util-user-agent-node": "3.846.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.7.0", "@smithy/fetch-http-handler": "^5.1.0", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.14", - "@smithy/middleware-retry": "^4.1.15", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.1.0", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.22", - "@smithy/util-defaults-mode-node": "^4.0.22", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -860,12 +860,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.844.0.tgz", - "integrity": "sha512-QC8nocQcZ3Bj7vTnuL47iNhcuUjMC46E2L85mU+sPQo3LN2qBVGSOTF+xSWGvmSFDpkN4ZXUMVeA0cJoJFEDFA==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.846.0.tgz", + "integrity": "sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.844.0", + "@aws-sdk/middleware-sdk-s3": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", @@ -877,13 +877,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.844.0.tgz", - "integrity": "sha512-Kh728FEny0fil+LeH8U1offPJCTd/EDh8liBAvLtViLHt2WoX2xC8rk98D38Q5p79aIUhHb3Pf4n9IZfTu/Kog==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.846.0.tgz", + "integrity": "sha512-sGNk3xclK7xx+rIJZDJC4FNFqaSSqN0nSr+AdVdQ+/iKQKaUA6hixRbXaQ7I7M5mhqS6fMW1AsqVRywQq2BSMw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.844.0", - "@aws-sdk/nested-clients": "3.844.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -920,9 +920,9 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.844.0.tgz", - "integrity": "sha512-1DHh0WTUmxlysz3EereHKtKoxVUG9UC5BsfAw6Bm4/6qDlJiqtY3oa2vebkYN23yltKdfsCK65cwnBRU59mWVg==", + "version": "3.845.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.845.0.tgz", + "integrity": "sha512-MBmOf0Pb4q6xs9V7jXT1+qciW2965yvaoZUlUUnxUEoX6zxWROeIu/gttASc4vSjOHr/+64hmFkxjeBUF37FJA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.840.0", @@ -960,12 +960,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.844.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.844.0.tgz", - "integrity": "sha512-0eTpURp9Gxbyyeqr78ogARZMSWS5KUMZuN+XMHxNpQLmn2S+J3g+MAyoklCcwhKXlbdQq2aMULEiy0mqIWytuw==", + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.846.0.tgz", + "integrity": "sha512-MXYXCplw76xe8A9ejVaIru6Carum/2LQbVtNHsIa4h0TlafLdfulywsoMWL1F53Y9XxQSeOKyyqDKLNOgRVimw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.844.0", + "@aws-sdk/middleware-user-agent": "3.846.0", "@aws-sdk/types": "3.840.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", @@ -3745,18 +3745,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.38.0.tgz", - "integrity": "sha512-dUwSv1VXDfsrcY69a/cgZNDsFal6iYOf0C4T+/ylpmgYp5SVe3vQK+2FLXUMuvgnOf+kHO6IeW0RhnhSyUflmA==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.39.0.tgz", + "integrity": "sha512-9Z32C64rUGEI0ROxXXOtpJDaldPYtkzOQyGzToVgq5LefXkdgQInd8BhCt6PIBALfj7n25lLOYllTrHlboFJug==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.38.0.tgz", - "integrity": "sha512-OhfRTge6hncSehrTBHpnz5R66OWRd8WMKn6ZoS0nwBmTfREjPkNRfOADIUqEElfyuaNj+gWsqTM1/E915pnZew==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-9.39.0.tgz", + "integrity": "sha512-UDDT+yPvggrTcHqdGqnSQjEkyT982rFEAp5Zc8X/yKWSK8n6EA2kXIUe/M7293WtDuAvYsHY36tMqIalqGe1Ew==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -3789,9 +3789,9 @@ "@opentelemetry/sdk-trace-base": "^1.30.1", "@opentelemetry/semantic-conventions": "^1.34.0", "@prisma/instrumentation": "6.11.1", - "@sentry/core": "9.38.0", - "@sentry/node-core": "9.38.0", - "@sentry/opentelemetry": "9.38.0", + "@sentry/core": "9.39.0", + "@sentry/node-core": "9.39.0", + "@sentry/opentelemetry": "9.39.0", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -3809,13 +3809,13 @@ } }, "node_modules/@sentry/node/node_modules/@sentry/node-core": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.38.0.tgz", - "integrity": "sha512-G0JmsntsvALoqS9iLTi4Jn1DcQB7gw9PY1Fmkdcdcf7i4EJEdRDX0tiD9ssDrcjgzzFPnm0PCrSAkIfTtd3Zyg==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-9.39.0.tgz", + "integrity": "sha512-e+D/5xharSysEqwjGOToI6zyn7zkuufwhO3n4jtqqjCXbSwI2zK9ARmn8ZLIdVnNETL+KZ82+5HRVhJWXxrpNg==", "license": "MIT", "dependencies": { - "@sentry/core": "9.38.0", - "@sentry/opentelemetry": "9.38.0", + "@sentry/core": "9.39.0", + "@sentry/opentelemetry": "9.39.0", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -3832,12 +3832,12 @@ } }, "node_modules/@sentry/node/node_modules/@sentry/opentelemetry": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.38.0.tgz", - "integrity": "sha512-Oa0kk4EiBMwCvHS5ZI50M/SMNfGM9ztsmedFEfpS+mZz8y9C5Artd0ukGK4OAYcSBggNVQkhmmhWbwpNnRNQiw==", + "version": "9.39.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-9.39.0.tgz", + "integrity": "sha512-FaD+tMXFSdHIyjx1UumTXYayBT9PJHCM8nbTTRsMSlZYWoaSeAl6oO7N8djFVxNGU/mTJMCx2RvjKGI42GNFuA==", "license": "MIT", "dependencies": { - "@sentry/core": "9.38.0" + "@sentry/core": "9.39.0" }, "engines": { "node": ">=18" @@ -4200,9 +4200,9 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.1.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.14.tgz", - "integrity": "sha512-+BGLpK5D93gCcSEceaaYhUD/+OCGXM1IDaq/jKUQ+ujB0PTWlWN85noodKw/IPFZhIKFCNEe19PGd/reUMeLSQ==", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.15.tgz", + "integrity": "sha512-L2M0oz+r6Wv0KZ90MgClXmWkV7G72519Hd5/+K5i3gQMu4WNQykh7ERr58WT3q60dd9NqHSMc3/bAK0FsFg3Fw==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.7.0", @@ -4219,15 +4219,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.15.tgz", - "integrity": "sha512-iKYUJpiyTQ33U2KlOZeUb0GwtzWR3C0soYcKuCnTmJrvt6XwTPQZhMfsjJZNw7PpQ3TU4Ati1qLSrkSJxnnSMQ==", + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.16.tgz", + "integrity": "sha512-PpPhMpC6U1fLW0evKnC8gJtmobBYn0oi4RrIKGhN1a86t6XgVEK+Vb9C8dh5PPXb3YDr8lE6aYKh1hd3OikmWw==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/protocol-http": "^5.1.2", "@smithy/service-error-classification": "^4.0.6", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -4407,13 +4407,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.6.tgz", - "integrity": "sha512-3wfhywdzB/CFszP6moa5L3lf5/zSfQoH0kvVSdkyK2az5qZet0sn2PAHjcTDiq296Y4RP5yxF7B6S6+3oeBUCQ==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.7.tgz", + "integrity": "sha512-x+MxBNOcG7rY9i5QsbdgvvRJngKKvUJrbU5R5bT66PTH3e6htSupJ4Q+kJ3E7t6q854jyl57acjpPi6qG1OY5g==", "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.7.0", - "@smithy/middleware-endpoint": "^4.1.14", + "@smithy/middleware-endpoint": "^4.1.15", "@smithy/middleware-stack": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", @@ -4514,13 +4514,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.0.22", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.22.tgz", - "integrity": "sha512-hjElSW18Wq3fUAWVk6nbk7pGrV7ZT14DL1IUobmqhV3lxcsIenr5FUsDe2jlTVaS8OYBI3x+Og9URv5YcKb5QA==", + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.23.tgz", + "integrity": "sha512-NqRi6VvEIwpJ+KSdqI85+HH46H7uVoNqVTs2QO7p1YKnS7k8VZnunJj8R5KdmmVnTojkaL1OMPyZC8uR5F7fSg==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -4530,16 +4530,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.0.22", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.22.tgz", - "integrity": "sha512-7B8mfQBtwwr2aNRRmU39k/bsRtv9B6/1mTMrGmmdJFKmLAH+KgIiOuhaqfKOBGh9sZ/VkZxbvm94rI4MMYpFjQ==", + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.23.tgz", + "integrity": "sha512-NE9NtEVigFa+HHJ5bBeQT7KF3KiltW880CLN9TnWWL55akeou3ziRAHO22QSUPgPZ/nqMfPXi/LGMQ6xQvXPNQ==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.1.4", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", - "@smithy/smithy-client": "^4.4.6", + "@smithy/smithy-client": "^4.4.7", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -8573,9 +8573,9 @@ } }, "node_modules/openai": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.9.0.tgz", - "integrity": "sha512-cmLC0pfqLLhBGxE4aZPyRPjydgYCncppV2ClQkKmW79hNjCvmzkfhz8rN5/YVDmjVQlFV+UsF1JIuNjNgeagyQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.9.2.tgz", + "integrity": "sha512-d7t/lRkwZpSwIk7GW3EHRSGAlsuoi1WL6VhCO02raEzZO2ahEVAbWn3WmOcpeh9zF6xF9weJXoVeDkWJRz+SHA==", "license": "Apache-2.0", "bin": { "openai": "bin/cli" diff --git a/package.json b/package.json index 8b59c0007..aaa094b79 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.01", + "version": "1.9.02", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,11 +57,11 @@ "node": ">=18" }, "dependencies": { - "@aws-sdk/client-s3": "^3.844.0", - "@aws-sdk/lib-storage": "^3.844.0", + "@aws-sdk/client-s3": "^3.846.0", + "@aws-sdk/lib-storage": "^3.846.0", "@mattermost/client": "10.8.0", "@ngrok/ngrok": "1.5.1", - "@sentry/node": "^9.38.0", + "@sentry/node": "^9.39.0", "async-mutex": "^0.5.0", "axios": "^1.10.0", "chokidar": "^4.0.3", @@ -84,7 +84,7 @@ "mediasoup": "3.16.6", "mediasoup-client": "3.12.5", "nodemailer": "^7.0.5", - "openai": "^5.9.0", + "openai": "^5.9.2", "qs": "6.14.0", "sanitize-filename": "^1.6.3", "socket.io": "4.8.1", diff --git a/public/js/Brand.js b/public/js/Brand.js index 1571eae59..21a06b596 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.01', + title: 'WebRTC SFU v1.9.02', html: ` - - + + From 972b1173c83b10f028c351f6c5d5d83b109b4fee Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 21 Jul 2025 09:22:11 +0200 Subject: [PATCH 179/592] Revert "[mirotalksfu] - invert audio/video buttons" This reverts commit ecad005d6077b7c08ab546543d72f8c518058a56. --- package-lock.json | 4 ++-- package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- public/views/Room.html | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9a265e450..c7e1c62aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.06", + "version": "1.9.05", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.06", + "version": "1.9.05", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.848.0", diff --git a/package.json b/package.json index 335c30937..1a5542d18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.06", + "version": "1.9.05", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index bf040178c..35bae7e84 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.06', + title: 'WebRTC SFU v1.9.05', html: ` + + - - From 2e5962e082bf12eeb25fc6c4d530d043f05c6c75 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 21 Jul 2025 17:07:21 +0200 Subject: [PATCH 180/592] [mirotalksfu] - update dep --- package-lock.json | 12 ++++++------ package.json | 4 ++-- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7e1c62aa..0b6dccd7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.05", + "version": "1.9.06", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.05", + "version": "1.9.06", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.848.0", @@ -33,7 +33,7 @@ "js-yaml": "^4.1.0", "jsdom": "^26.1.0", "jsonwebtoken": "^9.0.2", - "mediasoup": "3.16.6", + "mediasoup": "3.16.7", "mediasoup-client": "3.12.5", "nodemailer": "^7.0.5", "openai": "^5.10.1", @@ -8052,9 +8052,9 @@ } }, "node_modules/mediasoup": { - "version": "3.16.6", - "resolved": "https://registry.npmjs.org/mediasoup/-/mediasoup-3.16.6.tgz", - "integrity": "sha512-WNdP6qv5arY9sKPshYI6fI9feIEkxIYHYp2b2suPGQKTOoHP9EHHb9XPGnDJxdAFFiq/V6VVyfVHWuaFEllj0A==", + "version": "3.16.7", + "resolved": "https://registry.npmjs.org/mediasoup/-/mediasoup-3.16.7.tgz", + "integrity": "sha512-1Hd9FI7jDwtZY/usaxG15p4L8k5spPGBZU2emZEqecXi26cGciStuK6XjJ/dLdGv+XEBPmcXmlekNeQLow4rTQ==", "hasInstallScript": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 1a5542d18..9c80e811e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.05", + "version": "1.9.06", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -81,7 +81,7 @@ "js-yaml": "^4.1.0", "jsdom": "^26.1.0", "jsonwebtoken": "^9.0.2", - "mediasoup": "3.16.6", + "mediasoup": "3.16.7", "mediasoup-client": "3.12.5", "nodemailer": "^7.0.5", "openai": "^5.10.1", diff --git a/public/js/Brand.js b/public/js/Brand.js index 35bae7e84..bf040178c 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.05', + title: 'WebRTC SFU v1.9.06', html: ` +
+ +
+
+ + + From 2671f32762eaafbd949f544179343438a662a605 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 4 Aug 2025 03:27:49 +0200 Subject: [PATCH 199/592] [mirotalksfu] - fix typo --- public/views/activeRooms.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/activeRooms.html b/public/views/activeRooms.html index aff8875f1..7dd95ac0e 100644 --- a/public/views/activeRooms.html +++ b/public/views/activeRooms.html @@ -11,7 +11,7 @@ - +
From 2a762b8886253f43725cdc0c70214c7b39e6e2ee Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 5 Aug 2025 17:48:39 +0200 Subject: [PATCH 200/592] [mirotalksfu] - welcome Rambox --- README.md | 1 + app/src/Server.js | 2 +- package-lock.json | 42 +++++++++++++++--------------- package.json | 4 +-- public/advertisers/Rambox.png | Bin 0 -> 2283 bytes public/advertisers/RamboxLogo.png | Bin 0 -> 13787 bytes public/js/Brand.js | 2 +- public/js/Room.js | 4 +-- public/js/RoomClient.js | 2 +- public/views/landing.html | 10 +++++++ 10 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 public/advertisers/Rambox.png create mode 100644 public/advertisers/RamboxLogo.png diff --git a/README.md b/README.md index e037facf4..25205f65e 100644 --- a/README.md +++ b/README.md @@ -471,6 +471,7 @@ Do you find MiroTalk SFU indispensable for your needs? Join us in supporting thi | | | | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | [![Hostinger](public/advertisers/Hostinger.png)](https://hostinger.com/?REFERRALCODE=MIROTALK) | [![Contabo](public/advertisers/Contabo.png)](https://www.dpbolvw.net/click-101027391-14462707) | +| [![Rambox](public/advertisers/RamboxLogo.png)](https://rambox.app?via=mirotalk) | | --- diff --git a/app/src/Server.js b/app/src/Server.js index 1d60ff869..a0670f668 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.20 + * @version 1.9.21 * */ diff --git a/package-lock.json b/package-lock.json index e978da4e8..b52f2ef1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "mirotalksfu", - "version": "1.9.20", + "version": "1.9.21", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.20", + "version": "1.9.21", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.859.0", "@aws-sdk/lib-storage": "^3.859.0", "@mattermost/client": "10.9.0", "@ngrok/ngrok": "1.5.1", - "@sentry/node": "^10.0.0", + "@sentry/node": "^10.1.0", "async-mutex": "^0.5.0", "axios": "^1.11.0", "chokidar": "^4.0.3", @@ -3725,18 +3725,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.0.0.tgz", - "integrity": "sha512-UvkPzWVcXVSB6GOmETlEXlBumquFWCve0VnR2SqQIAyJPcj7mO6BvYrpuyit4c4XXaChaJe+bPZ6+4XQbUHnAA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.1.0.tgz", + "integrity": "sha512-sda76pKjgEgh6VNRNJa9P0WG2egA7N85dTQ8wS/QZ6rD/dNXQZ+ITfL99Jb0b6WhTgvzspJq8bNSl/nRUdbwbQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.0.0.tgz", - "integrity": "sha512-HxGpAjweehnmypQq3ZRGdoukXMeYLagvg/fCSjgPB9etpfddwN21ngRJsGeHwE7WF6kGDPtA9Kuq31FMBYC+Bg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.1.0.tgz", + "integrity": "sha512-A+mM6Mz5aVGQkV+HWD+1xDAr+ineJ3BT3y3nXWB1ev9EMO3W+2ZeQ6BZMJjy2Yrak8FjZpeHnsvBLHppxZmEow==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -3769,9 +3769,9 @@ "@opentelemetry/sdk-trace-base": "^2.0.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@prisma/instrumentation": "6.12.0", - "@sentry/core": "10.0.0", - "@sentry/node-core": "10.0.0", - "@sentry/opentelemetry": "10.0.0", + "@sentry/core": "10.1.0", + "@sentry/node-core": "10.1.0", + "@sentry/opentelemetry": "10.1.0", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -3780,13 +3780,13 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.0.0.tgz", - "integrity": "sha512-YWcRRAVeO8I0vIePu45X0OHORLawG2mwtNjE3CRsy+j/mEYyLHTU1pw5CvL9pdte9qxKL/wDSuwjidYgOwoaKQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.1.0.tgz", + "integrity": "sha512-v9riYu689y/jJ3aPYjpLguwBAIE7B0wGHbJhU0OPxAHuieqIzaLlPvmlMO3hLQRxVBI/Ht2aA5Fqnx24x1hQZQ==", "license": "MIT", "dependencies": { - "@sentry/core": "10.0.0", - "@sentry/opentelemetry": "10.0.0", + "@sentry/core": "10.1.0", + "@sentry/opentelemetry": "10.1.0", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -3803,12 +3803,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.0.0.tgz", - "integrity": "sha512-gbfBU1U7bB2dwyITsz3Fg8Cj8uOpB55RTdtYgK+tfrwRcZEcdp0ZebwUOawBdcto4yMrA6rpeM00wCBPYwCWKQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.1.0.tgz", + "integrity": "sha512-REwbS5UgNI4bQ4zovUzE2C0ppv4Fvxq48o8r/0ldvR1pmFi6P7kAmz5ixUonrXCy2XtX4Zs5wZmbZ7Am5hzmRQ==", "license": "MIT", "dependencies": { - "@sentry/core": "10.0.0" + "@sentry/core": "10.1.0" }, "engines": { "node": ">=18" diff --git a/package.json b/package.json index 2b14b6549..8dc37daf8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.20", + "version": "1.9.21", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -61,7 +61,7 @@ "@aws-sdk/lib-storage": "^3.859.0", "@mattermost/client": "10.9.0", "@ngrok/ngrok": "1.5.1", - "@sentry/node": "^10.0.0", + "@sentry/node": "^10.1.0", "async-mutex": "^0.5.0", "axios": "^1.11.0", "chokidar": "^4.0.3", diff --git a/public/advertisers/Rambox.png b/public/advertisers/Rambox.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ef859000220988c0b4acfdd704c3271467f7bc GIT binary patch literal 2283 zcmYk8c{~#i8^BkZYt7YMqug@L&$c!yB+PxrcxSnmn30MoH(^xf&Y2^}a;;2`9JzDn z$kpK$AwtX<}Vh6Wf*0N@1dm<`!kjy-*4 z8G0P>7A9C-6Oz}_|3oA$+@>B-0>ArA4@YUK-&az zqE~{edPSE+`<1sQVxEkX3x1$Z+E0vlHmzZDJjZd@!1f*h0OI?vofw`B`3(TDa~oo` zuzp!9S)Vh@5OS^QmdTFSQmGo0ocl$F52?sd@UpYYDy-F5 zXufCaFKG7lbUPen5JhnFRxLSP0D9kxb|EG0glcq(NyekGc1io88UwlF9dy$Twz~R% zXUEc_2*usi-UTauNB_<19dZp z(>>&Ky5Arb|I+nZN?}Su%z5x?a5P_2kIZ*@yK7A)=_RjT;=T9YcowO(HQHC2K`uS4 zwBl9t)=EsC$^uL8Paj%K+SN2LLGfal8bfyxj7vy?+sXvD!!xrI{rOki2Rl=KdNVR( z94oFX>&;|0tfGEs@@1KLOpNZ##CEkV^Hrqj424@c*wyHYRRC<~^$J8Wa+Qz9hkwq;_VI1Pnh)@%iRTWTO>e6MfJCu2=B zOpqr8Z+*ZF zs~$%eHTlzdqJ#2-tCuYlVJRhXH8Z9_{@iyry0zUcXYLq|r9|Q=@%sk$yl(#_ z-sJ7$E=J((w6cc=^KEb#|JTfS*277hPM9ZE+05`lo(x4EQWe~fmgO5C4Z}7t4u;0% zgMV7m=Ig{#>oqU4#iWb8PL<)!ge&P%cYP953W02ne)4s$lcGhn3`Xk|t3B`3W9JE+ zb2Jd){g7>f!?<`{9foElxt;MB_7L3GB%t&1lcR)Ew|<;k<4Vjxe5=rL zJuMgEQLMRJ2R#cw&0#fia=wf=BtYdh4}5XFAU$C#^9p>bZ`dM~%M_yq=WEr(3cjO@ zUpu*7yzN%Rk9l7^Ke`?ZLBQ%}yMeeKuwlxN1~*K7GgqI&_rfoE(731hqgtIvU){m1 zlIZ!8ZIp#dOM)cyVu!u#ZBq)QUDEtxWVJMq$(rhLvN2tZ8VqIrv@ZC(`{Eot*?~x= zRt^=EYs^)3a)u%EU%wBNxqs*xVV!Wt2_YB1a)3Q$+^=-ObJvATHnC%&m9kk&1z~_1 zDP2W1)@TB6=B>ySozR)7mR@oFtVNzzE%`BY+LMBXlf@Y?M02%^KZF~bI;~IkW=7;D zV?fFK1mJYJ>&D^*C#pot25lDG2<+z(B=F)d?eOEcIFlL(vHmT{K^B5b0~%Df>wn=X zlDo`{Gotr04YkK!tb(N`G_%>;j-RdaXbR_FY`2J`Bn|EPkiy|O-?beD`5akTkwp@S z<&=T$`X|Q=U0B~vqGBMMGxBbkX!jo}(Z1eU#(Oxk_m!`6 zWd8y?NamTb2+b{o^ovF5K3_YV{WjCYBG3VLZd#P35Av;%X#OoNa%?V!qeHh0%5ZEk z0*n`CJD0sPy7kD47$5-400@!A9!0-QZQ$s4ceX@zk!)_i&J+?(;{rR5R0Y$!&2aEj zeY4U);&2V%O~=g#TRi>qyl(Yl zmX6kY60aq(pvsu3W95kogUzF`1>%ACG}ixX(=ctpWz?uwFw<89QNttrldj<9rF`1B zG$|&OMV&lGIW!cAOpBC3y9D)7R#b<`O?T#$0=LGh9hasB$N@b@W=a#3%)&6$t9Ei+ zd?1iLXWy@z(i5sb5AARG6S-dzN*6gC&#yLHe_i|Xv~?-r$5!=~wBKZu;PK^wK0&#>k9ZOoT^|SrpNci|EDZFU))2l-TwSapYFPLvH@a4=o`%AAbM0Oq= r$vh5X(@BE7+20T`Nd`5AY>E+VsJ)WM#(IVY0)en!D#&VpKuDp$wLTaf_}{Rm9t7M_ zw~>)ivoSXZfndqzrlxORvcd+<%uG!O$5@!KT)i}+qvJJ9gNEQ;@L}pfcrQFV!_aUI zinoTM)eZWj-qmCWiKo8)%05^To_n=azRMpI4vX`7I7}0bDy2koE-oTrMA?>*tVlCd z)9Qx9zaYKENKGdSo+p-URKTB9m-NJq{)l770jf=*-eWW6qmdeyJjbLqpcbOzLL2Nr zdb>+c6H`K0>*l7IQs4+`$z|l@;DsujAk{)-IK$||IFcY1N9N8Lk=ULM45kg^kShop zBn=`5$%Je}o$nV;6kM5podaAp{x zaOcwXc3(rGo_iR=e#FwsyRf9ZKDe{9r_>vDT2a}jowYJe`W<&;%F}1mZh6)Je%K!oehl4=Zz^&jd z5XgfQ1llnLfrK+aAX4X?R&`OJ0R4@Uye#P9@i+flNeXZW(^)~!4Fn>2{&*n0)Sy2C zZeqBqr=BuUau3_dy?dDO%mDYsF1G zVCGWLoWA|9@ls{7YRN&XGWDX#vg*C(Dcf@J(UFO_wl%5Hmw}e9;_t6LSbeN@TwA({ z)ib!cw8D;Ss{{r`1>yd9h$H(i9Lfol&nGSC&zHF+{XJ;+^VqzbVT`-__o||p z5y~JfFWOkMMyaD|8YU%`$ z0>ieg(_PG6*TtnK26el6$j(k2mtSwR&()pJ+p8uV?Mnz`1R~80&5l9o7y;GBuJuw@ zO3Qn3|KpV#8Nz3v^RO*0j9wv_6n^vJOLpoT5pg0ab;FVYTQDxytNpns2&poI#2c7-R$O424P z;0S8q0~Lpma3>oa0tX1T?O4%O^%M zhlJzJ%*}nOt0Tn5#uf~`6%-a0UOTx`)6t2XnwpB2T*V2;13Ccy!h6gv?*bvXxaM!) zqVn+YK*`8tIH9BDEXfM=6VF`nc;d!pA8O49oHs|Gl1l`VN8wO}P9S8owTbQdmm&}C z=Va@Ro9(h9y+srH`s7fNksvrYzkXC2G`k^iEUm0~+E9V9`sk3uUq`L_EqTuppvl!Tzz4 z^Zl()j+h?_WujG6R6}HPGXCxLTxWmKJtF9hySuwQ`79vquTK@VwP#lk&Z%?JC=)S) zZU=(msczRW1pUrg6%`dd{S?T)l$CWKZw#m#7{r-!f;(69j?EwEW%`#SEOdBS(XiPW zY4zd$;`_>q(M;&9WnBRv#U zDKJfF0UQJ|rYr#`y>DYwc*F5hKYS=`ZGHCV&mUkCNBr6gVcy%t>1)n{Ns7fs zK@S%}le{X-C^52swdR{*gWYhVdO{>F!zADlPe}Q-kw->GpycGeYirbikZNmcf)(h$ zZp6Yjj@Jg0>9+Rw-Kx2xqhnKvHf{2r%z0%ZeD~~^)BUE?(XTiTY3<6h zm8mHL@%u~j+nde@5%H_Mhpw4k)b~U5u;Tnw%ddf6I}@T-^aNc;N1WH!*PJ3EPnwqA zMMk2Jtb`Q8tgWpjsqx@InY&Rs11%usPkSPArdi?RA4Q^`kg~)7xav^~2na;w-Jh0R zZmR~x-rolvxx0_o;eFlocvB0d6!Q(w%zWxCN?BiDugi=Ah;nDgcDW;fOi4+pO{|X~ z=51c>p|VV>2CzLgZm&*+2>ZI%IRo!c@-}|;#pxOvE;kSZJFK;8vje_Ib z=~N^Iq?pLa$jE!YVUClFD@2!-!3z!OY+(Mi#h0<7+T2`9auLtbDf(2!V(0xuKEqab z%*Q9Pt6|b`LQuR8mb*IdmO9P+{g~Y4perTWPv5ZzV6mYI2{@;xr|@;>!3uLgMCL$q zNwAcM2j8n4L8Pdj+VvAz+7K3Ca=XGXCOrb0qT0;%Vq}riIZXNi$wGSOo#Ussd)+3) ztbCjvcZ|__8g0$ezM%glCo>BRn?zn--atuSV63;Oaq1@VxX>m7aeRfyqf1uM{ki)6 zll;18Tb%3ddod6KL=#*V`!M{m81+U0KjS_`CJINdDnqlB==$d7`106%WY&`l_-eG7 zy@!Dhe&KY<*m;_Y>wq45{Tf3~-P0*Q$LUb@YdPL5dT|4G<4>L%u?uATZ&vxd4Z&Y- z*ezwh%AL=W<-@SrjjM~3W_Yo~!ontb9h#ytNoD4^xP&kt_E`Om4nV_gJjw&*3SUHO^2`a`eRTu8m{ul!&*80;2jVq@9?Qe877r6#uQ)oG8KG~y!#RDU5ZeZ+Y7ee^Nt%yzgscFIXDb$49B=^o4 z>n^faHHp-k$ei0k`d>`;Gt_J|Z6&_wx~+57ZcTBp^5*C6}1VqReVQ$!8vsB|9&M(%7qKC-^Slcgce z{9MHr=`@90{F_(!zqudqq)nTaF2a4H@!rqT+>Ra=;GroFZU#lHh(^z06xXp(d~U^^ zk1>p086B7(^T*4K`>Q<9*vX58AdivlcKy@IVwS$t3khpremMqRO0KdIK}W0&(R=e^ zsUeTtA|p#`OOe0A<5}RCxQr>2ws8pK;)am0=I=H7uup$~$&}=9vPsSv-|+eKzW77^ z332RK-&f^s#RIa6ilABaLguwrq^&G)`ieb7FTvwYlar`C^Yf~Q`k&?}*PbHLJv7Rm zpysL&#+2ZvM)lKk0@X@3*B^&E8avK^Hu(jN_XRBM2b%>m5*T>B&-UTNVU#>N%^T3P zG+{#K*_+~o%>U?XEic2$n`ml#+JaU%Z+~><|6x`$jvexWtL92*3k3xN2T~E9qkY;?XXrcY72`u_oHrG!k3Cf_AdDLfjFWhOAA(tU~3g@ z1rN3_11K8$SwrHRtvI;~!BOd5A3nfINQ1Qq3{*J{9|VQ+%kqgGlggNrxYNBca>n`Q zNG>{%NsQ5Pqq?NK*o^Y#?eoXj@{RMnRoyB2Z^`Fp=r0vR)efUsf;m8885F3bToB)HMtN0qZi$_@=3}Jwe|H{T6b|iqB#6w zOgcJ35zH8plEa2TV>Q*Y&=2VdV-*%GYX`RZOSiJ7P`Y9nW7YnXEjpa3OpY>-N;NNOK+7`Tlv3~)lO?l}7gOh=Uu zqd~M5>@YSqHT@+iJG;IF%P~LepEAg-&8Q^cU=`JntGd+n55|53MQ_YC2DAZ}1gQCQ$n{SCN^8re&jIoIJ6h^+$!T7|b)?HwF081qA46Dn zHU9Xa6W+64NKnK8_(p={f;Ur2Fb@aT}}=tO*MUeDHdiOH0|?5r@NEqsPqn-!AmJaCY%h6 zrty%FF~rp|Ggj(n%lQNfla-;2;j${6va(<{cI0rlXBkF)gUa&j{wjxD0k%B~PrN); zux}H_;))0`r}=5xYORTqHg*_eua@hcr56@?k!$B`&jyd3%bGPUb4o5#Ci6`FOh#O9 ziV5b=2uL1Z!*_NH65n-0DbP$}9JgD0|AbC0V-zN4F;Bz2sjolr^^I{{f5YHHr`3*OjD&+|Ox3}aC8UaeQM!-} ztYyovsd;cmJA{n@Nwv4>jNCIW;1d|6uIp%R4em0<)7I7|6R)nU?8|oQhyk2mz#aI- zS@~8995T1t*W!j?yv! ze$WYagPNPaVf;ST`YOiWl_Na(+P@~*_(+zV6>t6nH#IxyOiD>UFCS^Hpmo(|fcQLM z8;1=eD$AxP(si_D#C#!&cG+szySb`T6I=lS8hV&JrQza}xaPjL8{~j#F~Zg`M#5`7 z7v8q2pgce~!I7eRW_Tv`7I$GicrgG~(QfJ4^BQ4NEQLzaqF&70c!@UaHVV@TIc%e{XDOc);@FFYZ39$$ACK3=q|E+{V_arHm; zCI{TAd1t4blhGV#q`GLr?_~j&y|baW_f+EAH9yal$Z=={mCdfgH#j3|_qA{pga_wiHPR!&&>Uyr3`s+#mVDC5JzyX_ zAs%OBoz*b4MUetZaaLuIzI(DIT0cv9xKLCfOwe-=ibElcs>p;K0yuk^aj??!Nj`CMX~|Bn|EjX-r!){*s0RKeWMy-Js8)RW0v}3YTtD;0kL%;) z|w4QUrIc_e34P4mx`+==wYQk0W)m!dg@39oy#SCbuPxwzkW!Ud-F=ynCjO z^M+~*qOP;ux#RnrLm+rAYWBx07ho-vQOs#U6GjAo=*}|Hx?Y{{E>sY#(>?n`zgo9J zE~{PO=^m^SABGmD>K}w=BC^W0fM8l9?>)c^Obia%T{3_#W zQm4*4{*L2!PH@Bt4N2Vk{oT#wQ4g-m$>tb^gNx09>#L8#5nihSq}84Gtrl8@=8&GA zo@W0m?l-l%mI7*;nqiNHL6=cM%?va30MY>jUWfMwhj=(qc^w>PEF}o?qIx1l`I6|a zaSy1u={l!r4Igrd-LumIq@=GJlh^2Ya%f587P>L9Nt0SwqAOmZ^Y*kvwS}~u3*j1g zO=P_W7~yn6(mGGVBGP$iJ{Hw0%gQ_8Q^th=W{^h)d>I?N+|9B}X{}8hJ$C+9TUH1o zJMYoj4w!>fqsDc#gp2_mLbN(4KIhEZj+ap&d4B@&XMr6w1$ag-X@@!87&T zbrY6ap;STSPfw|~AORlqTm{L)AdtQ>lDY#w03uTiY zj=uB6-hh0%AiRbE2_#$G_pDzy_M4z+h_3u8-OL}=Grc* zfGEm*s(D!2&&~_yg4XeH_V>$nqFaJ#_D-a14h`RJ*3weg$dM;>oBx_ym0?EP0OF@w zu9``W{zMtTA+_a-QuLE&u%G(7ZSfrSFRPqn4h}2|r&>6Y4FlfwA>B-r5+gg4WP+~} z96b#f9#jWwqKT>faf-l-#e8?q?hJ2MSBj}a1_Rw-&j)tP9pmt1{Q6M(u+yJ{O6 z0Mi$Avvj#8agPFkL9?^7-n*4eYx;=x!het&013;;&Hd?_&ND6qD+ctgyqA}Nap09j z`}Iz_&;UmCxUGr*F`D?zUR}HsTvXM=<1DhDkAaw&_{jGg^w~4t*4SXYq`$6{3GBgj z%Mz@!47BcLWs(6NLOn00c>wGyYyzWVe>6U1Y&@84wAwPNe?w>-)zk)mR04$rtNXk= zP6!PQM5pa<{QhKMqxAnqt*>^hT>LP$etid`Q4?wVTmAVdpnjsxXB}!5GWl4P_(f21 z72rSIgb&9f=PAndW(^E$oY~LqEKFD zCj04^IE*;97cutj>n1rXd88+Te}3aQ9$A+s(iv*c4k9rO-Pfv~r}*uQFl3+Xe^H|b zo@^K;Crcp=E`*=o&h@pKURltlCM=~qh;c%;KG98LTwl0zL;*V{xTXLR_qSHR0Kg#0 z1RU4GaK+&!4`(Jlh!efQ35Cw0a6Dj3HLp01$g%_K`}))da8LQh7sohNUKJM?f2pc^ zVPr&+KrR$|aBz@wm!<+We}pc720a9@va%AnukK3t?ckUzO4)s@NqZff(SoW2i^aQ- z5X8Wiq5s0hfnZ+;fwCHp2joi!?KlaOr`m{f6}vLBh%&nd5|GLwXt~`;NBa*9fPjt@ z{briqrs7IG@r5bmRK~`7l#HgwgW`INQy1PTg?}uI+`k1*{lE_sH%ZuHsB7=%5Bw1y za)mNUC61?Px+3;A+=Uk_AfKvt|7Er}YhZc~O4(qoDbMtq*9B$y@7_tP|7m^DQVb6g ze@48Sb9P~!KqE%l>ln2^IwzU)qm8ie3lIzTj>}Hyw{xLy91AMgl&V!+dBU!KqV$`_ zCrSl5n`BI$bNWf++ha(B0hJ?uy+x;`rM33a>!*~1!+w^zAVR@%mSLEYS4mOvNIvLP zertPs;Va4yR@&EqvRYhR#1_F}f%L#Xig+DuP(45a*ej%Jw=YGY=Kfwwo0or~O4EG> zVQ)rxJ(uJ+dK^7pl+14iHRjZ42HTAzS;P629y8~#kl(&14*Ym+ z0d`VUIboF*!E9)i`#td?5z>GqNc}2m_NBCFUhMaL*YR5ddl#wHph0sw#-(}uqqhY8 zTSsLCgI@NcIOg7Jsn`=VvY6Vkg=ECBfPu(w__-`XJKiNNReYK0r!+!B59TiaT}WG*h_N>ePH9t!zo zC2{igeZJFdRW^zSgQ7C*44c{!SD{4-hOBKg=DJC%FFP|36DI!}baX47s)4`QN-Q

F0uAhJU~&|*dBA?cA;UEGy*yMc z>Agm+2p#=CZ}s4n-$pCW<^^JGXXWUltZ3ax-DzhAUzH)dsf|m|w@eWLsFoIU_a=1v zvxtC`Y!<9^wr%^hzMj7TK{epHlH@8<1d)*zFa+!jnxSw>O}%`*70cr$0^i`>1OVx<4(&SiH%%2i8k z3(i1jDqDPb{`*^#zJhP znu`pX>u+aWzUhsFtRzJ{8W6qEr0B3+U&mP$g+;2=rQX4GneLg{`T7=GQwXpIxcFL1 zMqX7T;4oxqutp3jyGciUK>>}w#|8WNw_|j29E_Z{0P%;&1X`2z^vb{HS16#C#R;LVPv!Ee3TtL%sjN9#Zre1Nl`%_=N_R zz8+?A>C^tpjAeWxkp&A{Fiob!xX_Ci^2gq;1Q!QCBPMp`PW9-GEX<(jB&4K(P2&Pw z<7@$^U+4Qvc7IX79wJFv-pakK()OYGI5bt>r{b`>t8C$6Z1MuaGc(8kIDNev(r8?Bvd!Zc`^`0xrzZs8yc)TB+VpE<6yXT}VbWP>q!I05I>M2!Qat^Iv*(N<4th7$t#FdI|FN>D1Qfvqjr zZJ-3yJTvRXW`@3j!T0%jFbFWj{k^@t&*apJIML~#sM$HX*~&7}Fs}BOw8XVb1)dbh zi30@^dn3t7DX*+;ZN~iAc?#kl4J!xA=M8OjIo_lZwBjn`R4D9k2hjwP^pqHdVfjic zzYrykNc7T2i6#CtfDUQot$`I^kQ@N$3dg4` z7iwdXi)%4wv~vwic^Eu>Y}O}Im}(SI74;HEt>y5IddlqJR#sT$mA_d-rk3CP$tT%- zYJH>kA&Z|s<{n>98x<>31JIE0QsW{=LkwKBi_@F>Y9av61(GJ2-1x@T0w)W}bn=hO z<1v;1a!B)kTgE;MG8B97JtwPCyXg0-c=ON z@~Po^Arik?LHup_uz*@2n|z)R)F0^@YLLJH6gZtGFQyuphvLa)giSOad{XX%OUFt@A-K!8OdjlA&IO`&6i7Xw zD}0bP)-=QF?=@HVVs7jCIDi851H;B{Ndudky1BiH%Hk-}R?l~*2=)E-cD!HCFC?IW zE^6?cfKfkp0Y~j0!rUiRz8=E1$*F(3gddkI)Cqpyt$%1!MRQ3}= zVnKuifT;KYsD09Lg@}b!)09jvVxQm8B$b!C!5A*l#$Ulvo<{9pAG!FQsr%J)vX|+m zk+vx1rAP*bqxFXL2?R-si7*#+lf2dST%6js1r^G6b&%6N-kJ0990u_>byC~Hs2cj{ z{5&X)sgx)frcGh3D}_xiGM`|A8CGWSO;XvG1Xih6ii!o45-p2QXfQ+@k?(#Q)i{Im zu~Pf{a|W_k#*&m{T?zY6mspd;K7q0Hkg~OfP6CWI=zUPG`nQ|~SqCx>>k9ihO_fE_ z0l3h&j4>#KQaiuCG3IBrC8k*}yL7tpCc91kqO5w876B_B9`?2nX=d>sVzqYT?@3~+ z$=sMzjfcLIWz6acbme~$pNrc=Sb0_k(L)APUT&e>SeBa?)s)qRY*u^z@9Q`upc#s4ZurGj?s;<*to*fG&xQZ zD-~IA_oz)I63J0qc=_2YM16}K6?u5&#p&k>xATl;o42 zC{BR0=~#knI91c1rVSo+5-|AWmClU;6g|FHo?3ghhC(O{$n>1~N-ZtQQI7DB%pRiq zb?e!m(~KXeunxU5gJxu8NCNr$zYM~W$*X$(KI?q8f*1xw@1%4&n@dli{MmS;+f;%l z6C^(p=i*Jj+J30h6Hz(|oQr>l=(MD9gV$a)V}IzR#7A7oh)mC|ZR&pQ7@a zmGf@Ur!`Yi3T+xxyOWg}d7rO3e_W|RO0%&r{-OwNFzn{nK=W)r*EWB;y)UyBA(=Xs zkBe3I=QoD^k?>#YnGyqrFQym`s6)fO64j#{Km5N>AZJzo0kw2`#^TFjxz)a ze?WjWp8i7*AOD#&f;cDa>TdGDAI;poh&rO14u8w*P_oTW9&CJKXz=`wqLDoOr%M76ec2*LqTX8pavMN?{e|dUqAs%J z=WbArGpM;mZ=e(vu9zsps)WJ*i+wiH>DcSVa(J{TeqwVg~Wa`$?=1Z|) z_Qj)z)0qLue9i~fj36C){=Q$q1u~^hsERot3~zdfx&LS@YNO3ms~?7~6=`${K}~6Q z$UcWNjvz*2c)`jy6aWtVF^f5!{y8ivbW&bk2hF*|M~Ojh;rCmD`VM1R_2Sp%SN#(* zQpu@k0ZJ_!=~p zW%anBC;$Q@D;`l6%1F3&a#Gl{L}{;8$4G=ktJ#4YTX6;AXH;D{@DByFTj?<|-d0P7gTBO!-xGtGwgH zVuBld(a|j#>`l+AbBSi0S0bC@!!MB+xC-ihW9k;d)_0#RB1?%C3Z$C9@N<1$d%u;~ zK9CBki6TOxK?M>3ud9tCmiGHEIxfWAy}S;;Wn7npf3|sqQ-As$iUG-j1OIs#LR#&! z(p!}Ir(|Eug2yIMPEHI&s+nf!%%GdLqHPBO=fjKLGw_s`>vlDQRzHQn>_}aV*}#J7 z()DR?u&ZWFBf>st^2X6z+kBuL+8f0?iVGU%t6s_p!_Gh`6#wYJ&7_ zXj-sYH{>XiuKFYU_f!y}Gf}7MR{Lb{DPVdmfE4s`xycehhn$to-3wr0!0tFf+ESQ8~@ANS0gxT{5cOma}N z9PbtgKjw-043&NqR>iL=AwsHY<$1*2AGtjJWKQ|*?c|G;u?s7hf(Tt*T{sZ;I&bu2 z-yV2%j_jf06l$a@&@Wj{Fd<9APUL$&PKd}|-l?j3izc+%d8mr+YD?q5c)5p{-Ri6ZltVO-ld+4_i+CN5!xZLQR`kK9N#RFZY$4 z0e)jk0>D3HV`BrT4`f87#YAIcV*r3U@su(-KEe0+SS`O_9QYKB7rE?s3MHh_{x z&FzlGhqxsGS?$Mk8jv7a`s?!?Abz#&`AnfGj&UHih6oGeD(mePoM83yXLi{_H!MkZ@v} zVJd#4Ztd*saEggxj|I_9;VBx*bEzqY=AQk_v_B*)qKcJZ^vDe#2MhUC2hy~ucnCTg&* zR8-F+7xs}j3*dMo!vN~l)g^U%IUvzLTmHIfc`p|a*=YI*;I*Zur$2IQ&;7soy45r{ zM=PbXuRp?ow8_z0$d9zZh4feuUisD4mCxwtD8ST%BhI?@G&Cl?Jd6e&Q-**BTA%B@ z=hHyT3a`-B)9ad_hYBKq<&1Xo9AxV44W;rwLSi>=k4CHWiIN2d%z2}OpP_PSWogMN zDhhd6CeJW~Z@YJIyN7DDzIf!{TJy#Nu#sVh|5JcF*h^~SU;F1{F!3XK6bc36VM*@H z@In|sq$T^BGj=pLH1yK{e8KASY9a`r2;4)J7KkMtmvs~kKyvh}_C6;u%aLhVm<+h& zOrR2pMCAJ6eEj$kAaY>Ppe8Gz0v2fN@NnSn=HmO@TvYx-h;`IjPMAh4uuaIte2K)w z!~}g$VgBM&ib_gAesvAVja(cUiTYpS0a@7;x!=G-;8~Z1ArtmP0XChI(vz(0Y#y$A zK)F0BquyTB!tL`YRi#Vreo3YXfNiX)NoZ?l_qacRJU4(uiUPfV3NJ!_qzH!slrrVf zLI=yIv3q5?6N;BrR5Ish#s8GO4@gtff%Q?_$C*I@rX%uRPdK1y02PJ(xEN!82h$OU z03XSn{}00U1FrnbMv1sdFG}Fei&zWYmzF9jAZFki3_?YE20{a_kbpxRiR|CkFOXm$ zlz;9cgFsO>Ak_b?^9ndW{v-j%W1Igtqr8s_JGl!fZ4UuAp1aHGy1zAZw-5$OfD?$Dlber?Q;?05Pm7CBm|IYo zQ;>y|Q<#%;G_(H0e{102^w!4G=l^c-trzk*R@lFv;BMn!;pT1zytnW_9>V>f5BYM+ z91XM~cx+?gZDT1c2mDjDv~;s@2MGuc&G<0_rOXZ5sOj0OU@r{{R30 literal 0 HcmV?d00001 diff --git a/public/js/Brand.js b/public/js/Brand.js index 0fdaefa0d..eadd478ee 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.20', + title: 'WebRTC SFU v1.9.21', html: `

From 2ad37ab94e028a9239019e51d7748dd8c4495040 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 5 Aug 2025 17:49:55 +0200 Subject: [PATCH 201/592] [mirotalksfu] - fix typo [skip ci] --- public/views/landing.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/landing.html b/public/views/landing.html index d77699b78..9298b6020 100644 --- a/public/views/landing.html +++ b/public/views/landing.html @@ -576,7 +576,7 @@

Our advertisers

/> -
  • +
  • + +

    ${customMessages.heading}

    +

    ${customMessages.subheading}

    +
    + ${expertImages + .map( + (img, i) => ` + Expert consultant ${i + 1} + ` + ) + .join('')} +
    +
    ${customMessages.connectText}
    + ${this.createActionButtons()} + + `; + } + + createActionButtons() { + const buttons = [ + { action: 'startAudioCall', icon: this.getAudioIcon(), text: 'Start Audio Call' }, + { action: 'startVideoCall', icon: this.getVideoIcon(), text: 'Start Video Call' }, + { action: 'startScreenShare', icon: this.getScreenIcon(), text: 'Start Screen Share' }, + { action: 'joinRoom', icon: this.getJoinIcon(), text: 'Join Room' }, + ]; + + return buttons + .map( + (btn) => ` + + ` + ) + .join(''); + } + + // ============================================================================ + // STATE MANAGEMENT METHODS + // ============================================================================ + + minimizeWidget() { + const widget = document.querySelector('.mirotalk-support-widget'); + if (!widget) { + console.warn('Widget not found for minimizing'); + return; + } + + widget.classList.add('minimized'); + this.widgetState = 'minimized'; + this.createMinimizedButton(); + console.log('Widget minimized'); + } + + restoreWidget() { + const widget = document.querySelector('.mirotalk-support-widget'); + const minimizedBtn = document.querySelector('.mirotalk-minimized-btn'); + + if (widget) { + widget.classList.remove('minimized'); + this.widgetState = 'normal'; + } + if (minimizedBtn) { + minimizedBtn.remove(); + } + console.log('Widget restored'); + } + + closeWidget() { + this.removeAllWidgetElements(); + this.widgetState = 'closed'; + this.createReopenerButton(); + console.log('Widget closed'); + } + + reopenWidget() { + const reopenerBtn = document.querySelector('.mirotalk-reopener-btn'); + if (reopenerBtn) reopenerBtn.remove(); + this.createWidget(); + console.log('Widget reopened'); + } + + // ============================================================================ + // BUTTON CREATION METHODS + // ============================================================================ + + createMinimizedButton() { + this.removeExistingElement('.mirotalk-minimized-btn'); + + if (!this.options.supportWidget?.position) { + console.error('Support widget position not defined'); + return; + } + + const minimizedBtn = this.createElement('div', { + className: this.buildClassNames([ + 'mirotalk-minimized-btn', + this.options.supportWidget.position, + this.options.theme === 'light' ? 'light-theme' : '', + ]), + }); + + const widgetId = this.generateWidgetId('minimized'); + this.registerWidget(widgetId, minimizedBtn); + + const content = this.createMinimizedContent(); + minimizedBtn.appendChild(content); + minimizedBtn.addEventListener('click', () => this.restoreWidget()); + + document.body.appendChild(minimizedBtn); + console.log('Minimized button created'); + } + + createMinimizedContent() { + const contentDiv = this.createElement('div', { className: 'minimized-content' }); + const statusDot = this.createElement('div', { + className: `status-dot ${this.isOnline ? 'online' : 'offline'}`, + }); + const textSpan = this.createElement('span', { textContent: 'Support' }); + + contentDiv.appendChild(statusDot); + contentDiv.appendChild(textSpan); + return contentDiv; + } + + createReopenerButton() { + this.removeExistingElement('.mirotalk-reopener-btn'); + + if (!this.options.supportWidget?.position) { + console.error('Support widget position not defined'); + return; + } + + const reopenerBtn = this.createElement('div', { + className: this.buildClassNames([ + 'mirotalk-reopener-btn', + this.options.supportWidget.position, + this.options.theme === 'light' ? 'light-theme' : 'dark-theme', + ]), + }); + + const widgetId = this.generateWidgetId('reopener'); + this.registerWidget(widgetId, reopenerBtn); + + reopenerBtn.innerHTML = ` +
    + + Support +
    + `; + + reopenerBtn.addEventListener('click', () => this.reopenWidget()); + document.body.appendChild(reopenerBtn); + console.log('Reopener button created'); + } + + // ============================================================================ + // STATUS MANAGEMENT METHODS + // ============================================================================ + + async checkOnlineStatus() { + try { + const response = await fetch(`${this.protocol}://${this.domain}/isRoomActive`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ roomId: this.roomId }), + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json(); + const online = data.message && data.message !== 'Unauthorized'; + this.updateOnlineStatus(online); + } catch (error) { + console.warn('Failed to check room status:', error.message); + this.updateOnlineStatus(false); + } + } + + updateOnlineStatus(online) { + this.isOnline = online; + + const elementsToUpdate = ['.mirotalk-support-widget', '.mirotalk-minimized-btn']; + + elementsToUpdate.forEach((selector) => { + const element = document.querySelector(selector); + if (element) { + this.updateStatusInElement(element, online); + } + }); + + console.log('Online status updated:', online); + } + + updateStatusInElement(element, online) { + const statusDot = element.querySelector('.status-dot'); + const onlineText = element.querySelector('.online-text'); + const offlineText = element.querySelector('.offline-text'); + + if (statusDot) { + statusDot.classList.toggle('online', online); + statusDot.classList.toggle('offline', !online); + } + + if (onlineText && offlineText) { + onlineText.style.display = online ? 'inline' : 'none'; + offlineText.style.display = online ? 'none' : 'inline'; + } + } + + // ============================================================================ + // ACTION METHODS + // ============================================================================ + + startAudioCall() { + if (this.isOnline) { + console.log('Starting audio call...'); + this.openMeetingWindow({ audio: 1, video: 0, screen: 0 }); + } else { + this.supportOffline(); + } + } + + startVideoCall() { + if (this.isOnline) { + console.log('Starting video call...'); + this.openMeetingWindow({ audio: 0, video: 1, screen: 0 }); + } else { + this.supportOffline(); + } + } + + startScreenShare() { + if (this.isOnline) { + console.log('Starting screen share...'); + this.openMeetingWindow({ audio: 0, video: 0, screen: 1 }); + } else { + this.supportOffline(); + } + } + + joinRoom() { + if (this.isOnline) { + console.log('Joining room...'); + window.open(`${this.protocol}://${this.domain}/join?room=${this.roomId}`, '_blank'); + } else { + this.supportOffline(); + } + } + + openMiroTalk() { + window.open(`https://${this.domain}`, '_blank'); + } + + openMeetingWindow(params) { + const queryParams = new URLSearchParams({ + room: this.roomId, + name: this.userName, + ...params, + }); + window.open(`${this.protocol}://${this.domain}/join?${queryParams}`, '_blank'); + } + + supportOffline() { + alert('Sorry, support is currently offline.'); + } + + // ============================================================================ + // UTILITY METHODS + // ============================================================================ + + async injectExternalCSS(url, id) { + if (document.getElementById(id)) return Promise.resolve(); + + return new Promise((resolve, reject) => { + const link = document.createElement('link'); + link.id = id; + link.rel = 'stylesheet'; + link.href = url; + link.onload = () => { + console.log(`CSS loaded successfully: ${url}`); + resolve(); + }; + link.onerror = () => { + console.error(`Failed to load CSS: ${url}`); + reject(new Error(`Failed to load CSS: ${url}`)); + }; + document.head.appendChild(link); + }); + } + + createElement(tag, properties = {}) { + const element = document.createElement(tag); + Object.assign(element, properties); + return element; + } + + generateWidgetId(prefix = 'widget') { + return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; + } + + registerWidget(widgetId, element) { + window.miroTalkWidgets.set(widgetId, this); + element.setAttribute('data-widget-id', widgetId); + } + + buildClassNames(classes) { + return classes.filter(Boolean).join(' '); + } + + removeExistingElement(selector) { + const existingElement = document.querySelector(selector); + if (existingElement) existingElement.remove(); + } + + removeAllWidgetElements() { + const selectors = ['.mirotalk-support-widget', '.mirotalk-minimized-btn', '.mirotalk-reopener-btn']; + selectors.forEach((selector) => { + document.querySelectorAll(selector).forEach((element) => element.remove()); + }); + } + + getParentNode() { + return document.querySelector('#mirotalk-widget') || document.body; + } + + clearParentNode(parentNode) { + parentNode.innerHTML = ''; + } + + getWidgetFromElement(element) { + const widget = element.closest('.mirotalk-support-widget, .mirotalk-minimized-btn, .mirotalk-reopener-btn'); + if (widget) { + const widgetId = widget.getAttribute('data-widget-id'); + return window.miroTalkWidgets ? window.miroTalkWidgets.get(widgetId) : this; + } + return this; + } + + // ============================================================================ + // ICON METHODS + // ============================================================================ + + getAudioIcon() { + return ` + + `; + } + + getVideoIcon() { + return ` + + `; + } + + getScreenIcon() { + return ` + + + `; + } + + getJoinIcon() { + return ` + + `; + } + + // ============================================================================ + // PUBLIC API METHODS + // ============================================================================ + + join() { + if (!this.getParentNode()) { + this.createWidget(); + } + } + + destroy() { + this.removeAllWidgetElements(); + + const parentNode = this.getParentNode(); + if (parentNode && parentNode !== document.body) { + this.clearParentNode(parentNode); + } + + if (window.miroTalkWidgets) { + for (const [key, widget] of window.miroTalkWidgets.entries()) { + if (widget === this) { + window.miroTalkWidgets.delete(key); + break; + } + } + } + + console.log('Widget destroyed'); + } + + updateRoom(newRoomId) { + this.roomId = newRoomId; + this.createWidget(); + } + + updateUser(newUserName) { + this.userName = newUserName; + this.createWidget(); + } + + getState() { + return this.widgetState; + } + + isVisible() { + return this.widgetState === 'normal'; + } +} + +// ============================================================================ +// GLOBAL ACTION HANDLER +// ============================================================================ + +window.miroTalkWidgetAction = function (action, element) { + try { + const widgetElement = element.closest( + '.mirotalk-support-widget, .mirotalk-minimized-btn, .mirotalk-reopener-btn' + ); + + if (!widgetElement) { + console.error('Widget element not found'); + return; + } + + const widgetId = widgetElement.getAttribute('data-widget-id'); + const widget = window.miroTalkWidgets?.get(widgetId); + + if (!widget) { + console.error('Widget instance not found'); + return; + } + + const actions = { + minimize: () => widget.minimizeWidget(), + close: () => widget.closeWidget(), + restore: () => widget.restoreWidget(), + reopen: () => widget.reopenWidget(), + startAudioCall: () => widget.startAudioCall(), + startVideoCall: () => widget.startVideoCall(), + startScreenShare: () => widget.startScreenShare(), + joinRoom: () => widget.joinRoom(), + }; + + const actionHandler = actions[action]; + if (actionHandler) { + actionHandler(); + } else { + console.warn('Unknown action:', action); + } + } catch (error) { + console.error('Error executing widget action:', error); + } +}; + +// ============================================================================ +// AUTO-INITIALIZATION +// ============================================================================ + +document.addEventListener('DOMContentLoaded', function () { + const autoInit = document.querySelector('[data-mirotalk-auto]'); + if (!autoInit) return; + + try { + const config = { + domain: autoInit.getAttribute('data-domain'), + roomId: autoInit.getAttribute('data-room') || 'support-room', + userName: autoInit.getAttribute('data-user') || `guest-${Math.floor(Math.random() * 10000)}`, + theme: autoInit.getAttribute('data-theme') || MiroTalkWidget.DEFAULT_OPTIONS.theme, + widgetState: autoInit.getAttribute('data-widget-state') || MiroTalkWidget.DEFAULT_OPTIONS.widgetState, + position: autoInit.getAttribute('data-position') || MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.position, + checkOnline: autoInit.getAttribute('data-check-online') === 'true', + customMessages: { + heading: + autoInit.getAttribute('data-heading') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.heading, + subheading: + autoInit.getAttribute('data-subheading') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.subheading, + connectText: + autoInit.getAttribute('data-connect-text') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.connectText, + onlineText: + autoInit.getAttribute('data-online-text') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.onlineText, + offlineText: + autoInit.getAttribute('data-offline-text') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.offlineText, + poweredBy: + autoInit.getAttribute('data-powered-by') || + MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.customMessages.poweredBy, + }, + }; + + if (config.domain) { + new MiroTalkWidget(config.domain, config.roomId, config.userName, { + widgetState: config.widgetState, + theme: config.theme, + supportWidget: { + ...MiroTalkWidget.DEFAULT_OPTIONS.supportWidget, + position: config.position, + checkOnlineStatus: config.checkOnline, + customMessages: config.customMessages, + }, + }); + } + } catch (error) { + console.error('Failed to auto-initialize MiroTalk Widget:', error); + } +}); diff --git a/widgets/example-0.html b/widgets/example-0.html new file mode 100644 index 000000000..10b55e10f --- /dev/null +++ b/widgets/example-0.html @@ -0,0 +1,19 @@ + + + + + + +
    + + diff --git a/widgets/example-1.html b/widgets/example-1.html index 7133f485b..68216bee1 100644 --- a/widgets/example-1.html +++ b/widgets/example-1.html @@ -1,738 +1,25 @@ - + - - - MiroTalk SFU - Support Widget - + -
    - -
    - -
    We are online
    -
    We are offline
    -
    - × -
    -
    - - -

    Need a hand?

    - - -

    - Hop on a Free 1:1 or Group Consultation with a MiroTalk Expert - right now! -

    - - -
    - Expert consultant 1 - Expert consultant 2 - Expert consultant 3 -
    - -
    connect in < 10 seconds
    - - - - - - - - - - - -
    - - +
    diff --git a/widgets/example-2.html b/widgets/example-2.html index 791b4eada..da73774de 100644 --- a/widgets/example-2.html +++ b/widgets/example-2.html @@ -1,17 +1,44 @@ - - - - MiroTalk SFU - Simple Iframe Example + - + diff --git a/widgets/example-3.html b/widgets/example-3.html index c315cd614..fc08536b2 100644 --- a/widgets/example-3.html +++ b/widgets/example-3.html @@ -3,34 +3,819 @@ - MiroTalk SFU - Embedded Meeting Widget + MiroTalk SFU - Custom Support Widget + + + + +
    + +
    +
    +
    We are online
    +
    We are offline
    +
    + + +
    +
    + + +

    Need a hand?

    + + +

    + Hop on a Free 1:1 or Group Consultation with a MiroTalk Expert + right now! +

    + + +
    + Expert consultant 1 + Expert consultant 2 + Expert consultant 3 +
    + +
    connect in < 10 seconds
    + + + + + + + + + + + +
    + + +
    +
    +
    + Support +
    +
    + + +
    +
    + + + + Support +
    +
    - - -
    diff --git a/widgets/example-4.html b/widgets/example-4.html new file mode 100644 index 000000000..791b4eada --- /dev/null +++ b/widgets/example-4.html @@ -0,0 +1,17 @@ + + + + + + + MiroTalk SFU - Simple Iframe Example + + + + + diff --git a/widgets/example-5.html b/widgets/example-5.html new file mode 100644 index 000000000..c315cd614 --- /dev/null +++ b/widgets/example-5.html @@ -0,0 +1,36 @@ + + + + + + MiroTalk SFU - Embedded Meeting Widget + + + + + + +
    + + diff --git a/widgets/maker.html b/widgets/maker.html new file mode 100644 index 000000000..5c070a0af --- /dev/null +++ b/widgets/maker.html @@ -0,0 +1,702 @@ + + + + + + MiroTalk Widget Maker + + + + + + +
    +
    +

    MiroTalk Widget Maker

    +

    Create custom embeddable widgets for your website in seconds

    +
    + +
    + +
    +

    Widget Configuration

    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    +
    + + +
    +
    +
    + + +
    +

    Custom Messages

    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    + + +
    +

    Generated Code

    +
    +
    + HTML + +
    + +
    + +
    + + +
    +
    +
    +
    + + + + From f65d8654d54ea9025d36dbb2e6dc25d922fdc0e4 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Thu, 7 Aug 2025 14:31:05 +0200 Subject: [PATCH 204/592] [mirotalksfu] - fix add improvements --- .env.template | 3 ++- app/src/Server.js | 2 +- app/src/config.template.js | 3 ++- package.json | 8 ++++---- public/js/Brand.js | 2 +- public/js/Room.js | 17 ++++++++--------- public/js/RoomClient.js | 5 ++--- public/js/Rules.js | 3 ++- public/js/Widget.js | 35 ++++++++++++++--------------------- 9 files changed, 36 insertions(+), 42 deletions(-) diff --git a/.env.template b/.env.template index e42deb2e3..4183a4460 100644 --- a/.env.template +++ b/.env.template @@ -285,7 +285,8 @@ COPYRIGHT_TEXT=MiroTalk SFU, all rights reserved # Copyright text SHOW_ACTIVE_ROOMS=false # Show active rooms feature (true|false) # Main Control Buttons -SHOW_SHARE_QR=true # Show share room QR popup (true|false) +SHOW_SHARE_ROOM_POPUP=true # Show share room popup (true|false) +SHOW_SHARE_ROOM_QR_ON_HOVER=true # Show share room QR popup on mouse hover (true|false) SHOW_SHARE_BUTTON=true # Show share button (true|false) SHOW_HIDE_ME=true # Show hide me button (true|false) SHOW_FULLSCREEN_BUTTON=true # Show fullscreen button (true|false) diff --git a/app/src/Server.js b/app/src/Server.js index fdc6fb20f..88228e2fe 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.22 + * @version 1.9.23 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 87c05e726..4f66ada97 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -1120,7 +1120,8 @@ module.exports = { buttons: { // Main control buttons visible in the UI main: { - shareQr: process.env.SHOW_SHARE_QR !== 'false', + shareRoomPopup: process.env.SHOW_SHARE_ROOM_POPUP !== 'false', + shareRoomQrOnHover: process.env.SHOW_SHARE_ROOM_QR_ON_HOVER !== 'false', shareButton: process.env.SHOW_SHARE_BUTTON !== 'false', hideMeButton: process.env.SHOW_HIDE_ME !== 'false', fullScreenButton: process.env.SHOW_FULLSCREEN_BUTTON !== 'false', diff --git a/package.json b/package.json index 0d24be92a..302f23bd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.22", + "version": "1.9.23", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,11 +57,11 @@ "node": ">=18" }, "dependencies": { - "@aws-sdk/client-s3": "^3.859.0", - "@aws-sdk/lib-storage": "^3.859.0", + "@aws-sdk/client-s3": "^3.862.0", + "@aws-sdk/lib-storage": "^3.862.0", "@mattermost/client": "10.9.0", "@ngrok/ngrok": "1.5.2", - "@sentry/node": "^10.1.0", + "@sentry/node": "^10.2.0", "async-mutex": "^0.5.0", "axios": "^1.11.0", "chokidar": "^4.0.3", diff --git a/public/js/Brand.js b/public/js/Brand.js index 75f67eb68..e8a6b3367 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.22', + title: 'WebRTC SFU v1.9.23', html: ` - ` + ` ) .join(''); } @@ -709,6 +722,21 @@ document.addEventListener('DOMContentLoaded', function () { if (!autoInit) return; try { + const buttonsAttr = autoInit.getAttribute('data-buttons'); + let buttonsConfig = { ...MiroTalkWidget.DEFAULT_OPTIONS.supportWidget.buttons }; + if (buttonsAttr) { + // Normalize and map + const requested = buttonsAttr + .split(',') + .map((b) => b.trim().toLowerCase()) + .filter(Boolean); + // Start all false then enable requested valid keys + buttonsConfig = { audio: false, video: false, screen: false, chat: false, join: false }; + requested.forEach((key) => { + if (key in buttonsConfig) buttonsConfig[key] = true; + }); + } + const config = { domain: autoInit.getAttribute('data-domain') || window.location.host, roomId: autoInit.getAttribute('data-room') || 'support-room', @@ -756,6 +784,7 @@ document.addEventListener('DOMContentLoaded', function () { expertImages: config.expertImages, checkOnlineStatus: config.checkOnline, customMessages: config.customMessages, + buttons: buttonsConfig, }, }); } diff --git a/widgets/example-1.html b/widgets/example-1.html index a23261895..e2ce4588c 100644 --- a/widgets/example-1.html +++ b/widgets/example-1.html @@ -15,6 +15,7 @@ data-position="bottom-right" data-check-online="false" data-expert-images="https://i.pravatar.cc/40?img=1,https://i.pravatar.cc/40?img=2,https://i.pravatar.cc/40?img=3" + data-buttons="audio,video,screen,chat,join" data-heading="Need Help?" data-subheading="Get instant support from our expert team!" data-connect-text="connect in < 5 seconds" diff --git a/widgets/maker.html b/widgets/maker.html index 714825a5f..a926e12cf 100644 --- a/widgets/maker.html +++ b/widgets/maker.html @@ -346,6 +346,63 @@ display: none; } + .button-toggle-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); + gap: 10px 14px; + margin-top: 8px; + } + + .toggle { + position: relative; + display: flex; + align-items: center; + gap: 8px; + font-size: 13px; + font-weight: 600; + background: #eef1f4; + border: 1px solid #d5dade; + padding: 8px 10px 8px 40px; + border-radius: 8px; + cursor: pointer; + user-select: none; + transition: + background 0.25s, + border-color 0.25s; + } + + .toggle input { + position: absolute; + opacity: 0; + pointer-events: none; + } + + .toggle::before { + content: ''; + position: absolute; + left: 10px; + width: 20px; + height: 20px; + border-radius: 6px; + background: linear-gradient(135deg, #9aa0a6, #7e858c); + box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.5); + transition: background 0.25s; + } + + .toggle.checked { + background: #e5faf0; + border-color: #00c853; + color: #116d3d; + } + + .toggle.checked::before { + background: linear-gradient(135deg, #00e676, #00c853); + } + + .toggle:active { + transform: scale(0.97); + } + @media (max-width: 768px) { .content { grid-template-columns: 1fr; @@ -453,6 +510,30 @@

    Widget Configuration

    + + +
    + +
    + + + + + +
    +
    @@ -555,6 +636,11 @@

    Generated Code

    offlineText: document.getElementById('offline-text'), poweredBy: document.getElementById('powered-by'), expertImages: document.getElementById('expert-images'), + btnAudio: document.getElementById('btn-audio'), + btnVideo: document.getElementById('btn-video'), + btnScreen: document.getElementById('btn-screen'), + btnChat: document.getElementById('btn-chat'), + btnJoin: document.getElementById('btn-join'), }; const generatedCode = document.getElementById('generated-code'); @@ -579,36 +665,45 @@

    Generated Code

    'https://i.pravatar.cc/40?img=1,https://i.pravatar.cc/40?img=2,https://i.pravatar.cc/40?img=3', }; + const buttonsSelected = []; + if (form.btnAudio.checked) buttonsSelected.push('audio'); + if (form.btnVideo.checked) buttonsSelected.push('video'); + if (form.btnScreen.checked) buttonsSelected.push('screen'); + if (form.btnChat.checked) buttonsSelected.push('chat'); + if (form.btnJoin.checked) buttonsSelected.push('join'); + + const buttonsAttr = buttonsSelected.join(','); + const html = ` - - - MiroTalk Widget - + + +
    + + +``` + +**[Explore Integrations →](https://docs.mirotalk.com/mirotalk-sfu/integration/)** +
    From 12b4037bc23b5cfcdab4c3e29268f17d6508b08c Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 13 Aug 2025 09:34:24 +0200 Subject: [PATCH 230/592] [mirotalksfu] - fix typo [skip ci] --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 52e62c9f5..d8262b95a 100644 --- a/README.md +++ b/README.md @@ -276,8 +276,6 @@ To embed a meeting within `your service or app` using an iframe, you can use the ## WIdget -
    - To quickly add a support widget to your site, include the script in your `` and place the widget `
    ` at the end of your ``. Your support widget will be ready instantly! ```html From c4b29779c1051a97bb9c16f56e756074d9422230 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 13 Aug 2025 10:07:51 +0200 Subject: [PATCH 231/592] [mirotalksfu] - update readme [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d8262b95a..444d65297 100644 --- a/README.md +++ b/README.md @@ -276,7 +276,7 @@ To embed a meeting within `your service or app` using an iframe, you can use the ## WIdget -To quickly add a support widget to your site, include the script in your `` and place the widget `
    ` at the end of your ``. Your support widget will be ready instantly! +To quickly add a support [widget](https://codepen.io/Miroslav-Pejic/pen/LEpzGXO) to your site, include the script in your `` and place the widget `
    ` at the end of your ``. Your support widget will be ready instantly! ```html From a0f2300cc8d903ed045e45c5dbe2e6f7654d3459 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 13 Aug 2025 20:49:33 +0200 Subject: [PATCH 232/592] [mirotalksfu] - update dep --- app/src/Server.js | 2 +- package-lock.json | 12 ++++++------ package.json | 4 ++-- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- public/sfu/MediasoupClient.js | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index 35a54cafb..27259265b 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.31 + * @version 1.9.32 * */ diff --git a/package-lock.json b/package-lock.json index 3824ef5ba..2b54a8a34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.31", + "version": "1.9.32", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.31", + "version": "1.9.32", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.864.0", @@ -34,7 +34,7 @@ "jsdom": "^26.1.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.18.0", - "mediasoup-client": "3.14.2", + "mediasoup-client": "3.15.0", "nodemailer": "^7.0.5", "openai": "^5.12.2", "qs": "6.14.0", @@ -8064,9 +8064,9 @@ } }, "node_modules/mediasoup-client": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/mediasoup-client/-/mediasoup-client-3.14.2.tgz", - "integrity": "sha512-wwvI9JUoA0iLjZvMESzoAseTnQjzWMEW08emnGb7Dwu1rkpYbykb0ZWvzCAJsZQ/QKT8tu9qadJKrG6swvxtlA==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/mediasoup-client/-/mediasoup-client-3.15.0.tgz", + "integrity": "sha512-GMEDqnh9SWtXthsJ+GrCglr8CIuAD0Sx4wNw+AvMHmGOM/Zwi1TwHjO7+V+Axk+F1vd/yHjUpApMhBxSjBEtPQ==", "license": "ISC", "dependencies": { "@types/debug": "^4.1.12", diff --git a/package.json b/package.json index 3fa13f721..4f8dfb424 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.31", + "version": "1.9.32", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -82,7 +82,7 @@ "jsdom": "^26.1.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.18.0", - "mediasoup-client": "3.14.2", + "mediasoup-client": "3.15.0", "nodemailer": "^7.0.5", "openai": "^5.12.2", "qs": "6.14.0", diff --git a/public/js/Brand.js b/public/js/Brand.js index f450a48c0..c36a7e0ae 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -110,7 +110,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.31', + title: 'WebRTC SFU v1.9.32', html: ` +
    + +
    From 4172732e517fb1f8bc5e60fcb93709600667a054 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 00:23:21 +0200 Subject: [PATCH 247/592] [mirotalksfu] - fix typo --- public/views/login.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/public/views/login.html b/public/views/login.html index 34e8654b7..1576462d2 100644 --- a/public/views/login.html +++ b/public/views/login.html @@ -57,6 +57,10 @@ + + + + @@ -147,11 +151,6 @@

    JOIN ROOM

    - -
    From 340b963b8feb93118040e5d53c46148c7d12041d Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 01:04:17 +0200 Subject: [PATCH 248/592] [mirotalksfu] - fix typo --- public/js/Login.js | 2 +- public/js/Utils.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/Login.js b/public/js/Login.js index 8b8a619dd..7b1d9eef0 100644 --- a/public/js/Login.js +++ b/public/js/Login.js @@ -10,7 +10,7 @@ const loginBtn = document.getElementById('loginButton'); const joinRoomForm = document.getElementById('joinRoomForm'); const selectRoom = document.getElementById('selectRoom'); const joinSelectRoomBtn = document.getElementById('joinSelectRoomButton'); -const generateRoomBtn = document.getElementById('generateRoomButton'); // ADD +const generateRoomBtn = document.getElementById('generateRoomButton'); // Default handler (will be overridden for admin below) joinSelectRoomBtn.onclick = (e) => { diff --git a/public/js/Utils.js b/public/js/Utils.js index d20d47357..d065e44bf 100644 --- a/public/js/Utils.js +++ b/public/js/Utils.js @@ -1,6 +1,6 @@ 'use strict'; -function popup(icon, text, position = 'center') { +function popup(icon, text, position = 'top') { Swal.fire({ background: '#1D2026', position: position, From fd5f3fe4eeba972f93b72d950754e9d8e7d1247c Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 01:17:42 +0200 Subject: [PATCH 249/592] [mirotalksfu] - add room input maxlength --- public/js/Login.js | 1 + 1 file changed, 1 insertion(+) diff --git a/public/js/Login.js b/public/js/Login.js index 7b1d9eef0..7a1e9d9f8 100644 --- a/public/js/Login.js +++ b/public/js/Login.js @@ -103,6 +103,7 @@ function login() { input.id = 'customRoomInput'; input.placeholder = 'Enter room name'; input.className = 'form-control mb-2'; + input.maxLength = 32; selectRoom.parentNode.insertBefore(input, selectRoom); selectRoom.style.display = 'none'; // Show random button for admin From 4cc7bff69683d434a4bc421f563eb03394e0df74 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 02:49:14 +0200 Subject: [PATCH 250/592] [mirotalksfu] - improve UI --- public/css/landing.css | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/public/css/landing.css b/public/css/landing.css index a788391db..4ce22ccb8 100644 --- a/public/css/landing.css +++ b/public/css/landing.css @@ -2117,6 +2117,18 @@ main { #joinRoomForm { display: none; + margin-top: 32px; + background: rgba(70, 120, 249, 0.08); + border-radius: 10px; + padding: 32px 24px; + transition: + box-shadow 0.3s, + border-color 0.3s; +} + +#joinRoomForm:focus-within, +#joinRoomForm:hover { + border-color: #376df9; } /*-------------------------------------------------------------- From f3f39c19c03002f06ffd285c63346eb1567701e2 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 16:51:22 +0200 Subject: [PATCH 251/592] [mirotalksfu] - #221 - Fix server side rec. duration --- app/src/FixDurationOrRemux.js | 64 +++++++++++ app/src/FixWebmDurationBuffer.js | 192 +++++++++++++++++++++++++++++++ app/src/Server.js | 53 ++++++++- package-lock.json | 12 +- package.json | 4 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 +- public/js/RoomClient.js | 47 +++++++- 8 files changed, 361 insertions(+), 17 deletions(-) create mode 100644 app/src/FixDurationOrRemux.js create mode 100644 app/src/FixWebmDurationBuffer.js diff --git a/app/src/FixDurationOrRemux.js b/app/src/FixDurationOrRemux.js new file mode 100644 index 000000000..612505ea9 --- /dev/null +++ b/app/src/FixDurationOrRemux.js @@ -0,0 +1,64 @@ +'use strict'; + +const { spawnSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const { fixWebmDurationBuffer } = require('./FixWebmDurationBuffer'); + +const Logger = require('./Logger'); +const log = new Logger('DurationOrRemux'); + +function hasFfmpeg() { + const r = spawnSync('ffmpeg', ['-version'], { stdio: 'ignore' }); + return r.status === 0; +} + +function remuxWithFfmpeg(inputPath, format = 'webm') { + const dir = path.dirname(inputPath); + const base = path.basename(inputPath, path.extname(inputPath)); + const out = path.join(dir, `${base}.fixed.${format}`); + + const args = [ + '-hide_banner', + '-loglevel', + 'error', + '-y', + '-i', + inputPath, + '-c', + 'copy', + ...(format === 'mp4' ? ['-movflags', '+faststart'] : []), + out, + ]; + const r = spawnSync('ffmpeg', args); + if (r.status !== 0 || !fs.existsSync(out)) return null; + + fs.renameSync(out, inputPath); + return inputPath; +} + +function fixDurationOrRemux(inputPath, durationMs) { + const ext = path.extname(inputPath).toLowerCase(); + const isWebm = ext === '.webm'; + const isMp4 = ext === '.mp4'; + + if (hasFfmpeg() && (isWebm || isMp4)) { + const ok = remuxWithFfmpeg(inputPath, isMp4 ? 'mp4' : 'webm'); + log.info('ffmpeg detected remuxWithFfmpeg:', ok); + if (ok) return true; + } + + if (isWebm && Number.isFinite(durationMs)) { + const inBuf = fs.readFileSync(inputPath); + const outBuf = fixWebmDurationBuffer(inBuf, Number(durationMs)); + if (outBuf && outBuf.length) { + fs.writeFileSync(inputPath, outBuf); + log.info('No ffmpeg detected fixWebmDurationBuffer - true'); + return true; + } + } + log.info('No ffmpeg detected fixWebmDurationBuffer - false'); + return false; +} + +module.exports = { fixDurationOrRemux }; diff --git a/app/src/FixWebmDurationBuffer.js b/app/src/FixWebmDurationBuffer.js new file mode 100644 index 000000000..a806ef156 --- /dev/null +++ b/app/src/FixWebmDurationBuffer.js @@ -0,0 +1,192 @@ +'use strict'; + +// Minimal Node helper: fixWebmDurationBuffer(buffer: Buffer, durationMs: number) -> Buffer +function padHex(h) { + return h.length % 2 === 1 ? '0' + h : h; +} + +class WebmBase { + constructor(name, type) { + this.name = name || 'Unknown'; + this.type = type || 'Unknown'; + } + updateBySource() {} + setSource(s) { + this.source = s; + this.updateBySource(); + } + updateByData() {} + setData(d) { + this.data = d; + this.updateByData(); + } +} +class WebmUint extends WebmBase { + constructor() { + super('Uint', 'Uint'); + } + updateBySource() { + this.data = ''; + for (let i = 0; i < this.source.length; i++) this.data += padHex(this.source[i].toString(16)); + } + updateByData() { + const len = this.data.length / 2; + this.source = new Uint8Array(len); + for (let i = 0; i < len; i++) this.source[i] = parseInt(this.data.substr(i * 2, 2), 16); + } + getValue() { + return parseInt(this.data, 16); + } + setValue(v) { + this.setData(padHex(v.toString(16))); + } +} +class WebmFloat extends WebmBase { + constructor() { + super('Float', 'Float'); + } + _arrType() { + return this.source && this.source.length === 4 ? Float32Array : Float64Array; + } + updateBySource() { + const bytes = this.source.slice().reverse(); + const T = this._arrType(); + this.data = new T(bytes.buffer)[0]; + } + updateByData() { + const T = this._arrType(); + const fa = new T([this.data]); + const bytes = new Uint8Array(fa.buffer); + this.source = bytes.reverse(); + } + getValue() { + return this.data; + } + setValue(v) { + this.setData(v); + } +} +class WebmContainer extends WebmBase { + constructor(name) { + super(name || 'Container', 'Container'); + } + readByte() { + return this.source[this.offset++]; + } + readVint() { + const b0 = this.readByte(); + const bytes = 8 - b0.toString(2).length; + let v = b0 - (1 << (7 - bytes)); + for (let i = 0; i < bytes; i++) { + v = v * 256 + this.readByte(); + } + return v; + } + updateBySource() { + this.data = []; + for (this.offset = 0; this.offset < this.source.length; ) { + const id = this.readVint(); + const len = this.readVint(); + const end = Math.min(this.offset + len, this.source.length); + const bytes = this.source.slice(this.offset, end); + let ctor = WebmBase; + if (id === ID.Segment || id === ID.Info) ctor = WebmContainer; + else if (id === ID.TimecodeScale) ctor = WebmUint; + else if (id === ID.Duration) ctor = WebmFloat; + const elem = new ctor(); + elem.setSource(bytes); + this.data.push({ id, data: elem }); + this.offset = end; + } + } + writeVint(x, draft) { + let bytes = 1, + flag = 0x80; + while (x >= flag && bytes < 8) { + bytes++; + flag *= 0x80; + } + if (!draft) { + let val = flag + x; + for (let i = bytes - 1; i >= 0; i--) { + const c = val % 256; + this.source[this.offset + i] = c; + val = (val - c) / 256; + } + } + this.offset += bytes; + } + writeSections(draft) { + this.offset = 0; + for (const s of this.data) { + const content = s.data.source; + const len = content.length; + this.writeVint(s.id, draft); + this.writeVint(len, draft); + if (!draft) this.source.set(content, this.offset); + this.offset += len; + } + return this.offset; + } + updateByData() { + const len = this.writeSections(true); + this.source = new Uint8Array(len); + this.writeSections(false); + } + getSectionById(id) { + for (const s of this.data) { + if (s.id === id) return s.data; + } + return null; + } +} +class WebmFile extends WebmContainer { + constructor(src) { + super('File'); + this.setSource(src); + } + toBuffer() { + return Buffer.from(this.source.buffer); + } + fixDuration(durationMs) { + const segment = this.getSectionById(ID.Segment); + if (!segment) return false; + const info = segment.getSectionById(ID.Info); + if (!info) return false; + let scale = info.getSectionById(ID.TimecodeScale); + if (!scale) return false; + scale.setValue(1000000); // 1ms + let dur = info.getSectionById(ID.Duration); + if (dur) { + if (dur.getValue() > 0) return false; + dur.setValue(durationMs); + } else { + dur = new WebmFloat(); + dur.setValue(durationMs); + info.data.push({ id: ID.Duration, data: dur }); + } + info.updateByData(); + segment.updateByData(); + this.updateByData(); + return true; + } +} +const ID = { + Segment: 0x8538067, // 0x18538067 + Info: 0x549a966, // 0x1549A966 + TimecodeScale: 0xad7b1, // 0x2AD7B1 + Duration: 0x489, // 0x4489 +}; + +function fixWebmDurationBuffer(inputBuffer, durationMs) { + if (!Buffer.isBuffer(inputBuffer) || !Number.isFinite(durationMs)) return inputBuffer; + try { + const file = new WebmFile(new Uint8Array(inputBuffer)); + const fixed = file.fixDuration(Math.max(0, Math.round(durationMs))); + return fixed ? file.toBuffer() : inputBuffer; + } catch { + return inputBuffer; + } +} + +module.exports = { fixWebmDurationBuffer }; diff --git a/app/src/Server.js b/app/src/Server.js index 1554dda41..fc858fe51 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.41 + * @version 1.9.42 * */ @@ -74,6 +74,7 @@ const { withFileLock } = require('./MutexManager'); const { PassThrough } = require('stream'); const { S3Client } = require('@aws-sdk/client-s3'); const { Upload } = require('@aws-sdk/lib-storage'); +const { fixDurationOrRemux } = require('./FixDurationOrRemux'); const cors = require('cors'); const compression = require('compression'); const socketIo = require('socket.io'); @@ -900,7 +901,7 @@ function startServer() { // RECORDING UTILITY // #################################################### - function isValidRequest(req, fileName, roomId, checkContentType = true) { + function isValidRequest(req, fileName, roomId, durationMs = false, checkContentType = true) { const contentType = req.headers['content-type']; if (checkContentType && contentType !== 'application/octet-stream') { throw new Error('Invalid content type'); @@ -913,6 +914,14 @@ function startServer() { if (!roomList || typeof roomList.has !== 'function' || !roomList.has(roomId)) { throw new Error('Invalid room ID'); } + + if ( + durationMs && + typeof durationMs !== 'undefined' && + (!Number.isFinite(Number(durationMs)) || Number(durationMs) <= 0) + ) { + throw new Error('Invalid durationMs'); + } } function getRoomIdFromFilename(fileName) { @@ -1044,6 +1053,34 @@ function startServer() { } }); + app.post('/recSyncFixWebm', async (req, res) => { + try { + const { fileName, durationMs } = checkXSS(req.query); + const roomId = getRoomIdFromFilename(fileName); + + isValidRequest(req, fileName, roomId, durationMs, false); + + const filePath = path.resolve(dir.rec, fileName); + + if (!fs.existsSync(filePath)) { + return res.status(404).json({ message: 'File not found' }); + } + + if (durationMs && fs.existsSync(filePath)) { + try { + fixDurationOrRemux(filePath, Number(durationMs)); + } catch (e) { + console.warn('Finalize fix skipped:', e?.message || e); + } + } + + return res.status(200).json({ message: 'OK' }); + } catch (err) { + console.error('recSyncFixWebm error', err); + return res.status(500).json({ message: 'Internal error' }); + } + }); + app.post('/recSyncFinalize', async (req, res) => { try { const shouldUploadToS3 = config?.integrations?.aws?.enabled && config?.media?.recording?.uploadToS3; @@ -1052,10 +1089,10 @@ function startServer() { } const start = Date.now(); - const { fileName } = checkXSS(req.query); + const { fileName, durationMs } = checkXSS(req.query); const roomId = getRoomIdFromFilename(fileName); - isValidRequest(req, fileName, roomId, false); + isValidRequest(req, fileName, roomId, durationMs, false); const filePath = path.resolve(dir.rec, fileName); @@ -1063,6 +1100,14 @@ function startServer() { return res.status(500).json({ error: 'Rec Finalization failed file not exists' }); } + if (durationMs && fs.existsSync(filePath)) { + try { + fixDurationOrRemux(filePath, Number(durationMs)); + } catch (e) { + log.warn('Finalize fix skipped:', e?.message || e); + } + } + const bucket = config?.integrations?.aws?.bucket; const s3 = await uploadToS3(filePath, fileName, roomId, bucket, s3Client); diff --git a/package-lock.json b/package-lock.json index ac0b690ca..15ba04bcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.40", + "version": "1.9.42", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.40", + "version": "1.9.42", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.864.0", @@ -54,7 +54,7 @@ "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", - "webpack": "^5.101.2", + "webpack": "^5.101.3", "webpack-cli": "^6.0.1" }, "engines": { @@ -10525,9 +10525,9 @@ } }, "node_modules/webpack": { - "version": "5.101.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", - "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", + "version": "5.101.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", + "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index c98726cc8..96218d397 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.41", + "version": "1.9.42", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -102,7 +102,7 @@ "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", - "webpack": "^5.101.2", + "webpack": "^5.101.3", "webpack-cli": "^6.0.1" } } diff --git a/public/js/Brand.js b/public/js/Brand.js index 8e9861dad..cba65f4dc 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.41', + title: 'WebRTC SFU v1.9.42', html: `
    @@ -503,10 +501,9 @@ Do you find MiroTalk SFU indispensable for your needs? Join us in supporting thi --- -| | | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| [![Hostinger](public/advertisers/Hostinger.png)](https://hostinger.com/?REFERRALCODE=MIROTALK) | [![Contabo](public/advertisers/Contabo.png)](https://www.dpbolvw.net/click-101027391-14462707) | -| [![Rambox](public/advertisers/RamboxLogo.png)](https://rambox.app?via=mirotalk) | | +| | | | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| [![Hostinger](public/advertisers/Hostinger.png)](https://hostinger.com/?REFERRALCODE=MIROTALK) | [![Contabo](public/advertisers/Contabo.png)](https://www.dpbolvw.net/click-101027391-14462707) | [![Rambox](public/advertisers/RamboxLogo.png)](https://rambox.app?via=mirotalk) | --- From a0cf2de469f85d610253ec286223ab43fcfebc84 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 21:25:11 +0200 Subject: [PATCH 254/592] [mirotalksfu] - update readme [skip ci] --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 047269bb4..fc8537efd 100644 --- a/README.md +++ b/README.md @@ -553,6 +553,4 @@ This project is tested with [BrowserStack](https://www.browserstack.com). --- -## Star History - ![Star History Chart](https://api.star-history.com/svg?repos=miroslavpejic85/mirotalksfu&type=Date&theme=auto) From ddf70882d6944865fd4b1332dc9f511e8237824f Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 18 Aug 2025 23:26:17 +0200 Subject: [PATCH 255/592] [mirotalksfu] - fix typo --- app/src/Server.js | 18 ++++-------------- package-lock.json | 4 ++-- package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- 6 files changed, 11 insertions(+), 21 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index fc858fe51..8a1273052 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.42 + * @version 1.9.43 * */ @@ -3430,12 +3430,7 @@ function startServer() { log.info('[Disconnect] - Last peer - current active RTMP streams', activeStreams); } - if (isPresenter) removeIP(socket); - - if (!OIDC.enabled && hostCfg.protected) { - hostCfg.authenticated = false; - removeIP(socket); - } + removeIP(socket); socket.room_id = null; }); @@ -3491,15 +3486,10 @@ function startServer() { log.info('[REMOVE ME] - Last peer - current active RTMP streams', activeStreams); } - if (isPresenter) removeIP(socket); + removeIP(socket); socket.room_id = null; - if (!OIDC.enabled && hostCfg.protected) { - hostCfg.authenticated = false; - removeIP(socket); - } - callback('Successfully exited room'); }); @@ -4004,7 +3994,7 @@ function startServer() { authHost.deleteIP(ip); hostCfg.authenticated = false; log.info('Remove IP from auth', { - ip: ip, + removedIp: ip, authorizedIps: authHost.getAuthorizedIPs(), }); } diff --git a/package-lock.json b/package-lock.json index 15ba04bcc..0d3293547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.42", + "version": "1.9.43", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.42", + "version": "1.9.43", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.864.0", diff --git a/package.json b/package.json index 96218d397..1251acb12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.42", + "version": "1.9.43", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index cba65f4dc..aea88addf 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -76,7 +76,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.42', + title: 'WebRTC SFU v1.9.43', html: `
  • -
    +
    From 8ba07cfa3ed9b9da1de40bf8f4277d5c5720c0ea Mon Sep 17 00:00:00 2001 From: Dmitry Lenshin Date: Wed, 24 Sep 2025 13:17:34 +0300 Subject: [PATCH 303/592] Configuration to disable custom denoise --- .env.template | 3 +++ app/src/config.template.js | 1 + public/js/Room.js | 18 ++++++++++++++---- public/js/RoomClient.js | 2 +- public/js/Rules.js | 1 + 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.env.template b/.env.template index f1afea0e8..6d078bb73 100644 --- a/.env.template +++ b/.env.template @@ -412,6 +412,9 @@ STATS_ENABLED=true # Enable usage statistics (tru STATS_SRC=https://stats.mirotalk.com/script.js # Stats script URL STATS_ID=41d26670-f275-45bb-af82-3ce91fe57756 # Stats tracking ID +# Custom noise supression +CUSTOM_NOISE_SUPPRESSION_ENABLED=true # Enable custom noise supression, default one will still work if this is disabled (true|false) + # ----------------------------------------------------- # 11. Global Moderation Configuration # ----------------------------------------------------- diff --git a/app/src/config.template.js b/app/src/config.template.js index 99b498bd4..d42962f99 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -1211,6 +1211,7 @@ module.exports = { pushToTalk: process.env.ENABLE_PUSH_TO_TALK !== 'false', keyboardShortcuts: process.env.SHOW_KEYBOARD_SHORTCUTS !== 'false', virtualBackground: process.env.SHOW_VIRTUAL_BACKGROUND !== 'false', + customNoiseSuppression: process.env.CUSTOM_NOISE_SUPPRESSION_ENABLED !== 'false', }, // Video controls for producer (local user) diff --git a/public/js/Room.js b/public/js/Room.js index d9acbb088..668926563 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1124,10 +1124,8 @@ async function whoAreYou() { const serverButtons = response.data.message; if (serverButtons) { // Merge serverButtons into BUTTONS, keeping the existing keys in BUTTONS if they are not present in serverButtons - BUTTONS = { - ...BUTTONS, // Spread current BUTTONS first to keep existing keys - ...serverButtons, // Overwrite or add new keys from serverButtons - }; + BUTTONS = mergeConfig(BUTTONS, serverButtons); + console.log('04 ----> AXIOS ROOM BUTTONS SETTINGS', { serverButtons: serverButtons, clientButtons: BUTTONS, @@ -1289,6 +1287,17 @@ async function whoAreYou() { } } +function mergeConfig(current, updated) { + for (const key of Object.keys(updated)) { + if (!current.hasOwnProperty(key) || typeof updated[key] !== 'object') { + current[key] = updated[key]; + } else { + mergeConfig(current[key], updated[key]); + } + } + return current; +} + function handleAudio() { isAudioAllowed = isAudioAllowed ? false : true; initAudioButton.className = 'fas fa-microphone' + (isAudioAllowed ? '' : '-slash'); @@ -1698,6 +1707,7 @@ function roomIsReady() { BUTTONS.settings.broadcastingButton && show(broadcastingButton); BUTTONS.settings.lobbyButton && show(lobbyButton); BUTTONS.settings.sendEmailInvitation && show(sendEmailInvitation); + !BUTTONS.settings.customNoiseSuppression && hide(noiseSuppressionButton); if (rc.recording.recSyncServerRecording) show(roomRecordingServer); BUTTONS.main.aboutButton && show(aboutButton); if (!isMobileDevice) show(pinUnpinGridDiv); diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index fed33a8c2..3818d7d67 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -1773,7 +1773,7 @@ class RoomClient { } } - if (audio) { + if (audio && BUTTONS.settings.customNoiseSuppression) { /* * Initialize RNNoise Suppression if enabled and supported * This will only apply to audio tracks diff --git a/public/js/Rules.js b/public/js/Rules.js index 723583688..b0344aebc 100644 --- a/public/js/Rules.js +++ b/public/js/Rules.js @@ -56,6 +56,7 @@ let BUTTONS = { pushToTalk: true, keyboardShortcuts: true, virtualBackground: true, + customNoiseSuppression: true, }, producerVideo: { videoPictureInPicture: true, From 8ddbb29e15adf3e88504a63ba5a2a5be40fb1117 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 24 Sep 2025 18:41:53 +0200 Subject: [PATCH 304/592] [mirotalksfu] - fix typo --- .env.template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.template b/.env.template index 6d078bb73..cd64f2b6a 100644 --- a/.env.template +++ b/.env.template @@ -412,8 +412,8 @@ STATS_ENABLED=true # Enable usage statistics (tru STATS_SRC=https://stats.mirotalk.com/script.js # Stats script URL STATS_ID=41d26670-f275-45bb-af82-3ce91fe57756 # Stats tracking ID -# Custom noise supression -CUSTOM_NOISE_SUPPRESSION_ENABLED=true # Enable custom noise supression, default one will still work if this is disabled (true|false) +# Custom noise suppression +CUSTOM_NOISE_SUPPRESSION_ENABLED=true # Enable custom noise suppression, default one will still work if this is disabled (true|false) # ----------------------------------------------------- # 11. Global Moderation Configuration From cf9ee9d5db3324145102a65c2032c0d25ccd1353 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 24 Sep 2025 18:47:53 +0200 Subject: [PATCH 305/592] [mirotalksfu] - update dep --- app/src/Server.js | 2 +- package-lock.json | 50 +++++++++++++++++------------------ package.json | 6 ++--- public/js/Brand.js | 2 +- public/js/Room.js | 4 +-- public/js/RoomClient.js | 2 +- public/sfu/MediasoupClient.js | 2 +- 7 files changed, 34 insertions(+), 34 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index 45752ba42..e01cee179 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.69 + * @version 1.9.70 * */ diff --git a/package-lock.json b/package-lock.json index 4ddffdbec..1c8f36940 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "mirotalksfu", - "version": "1.9.69", + "version": "1.9.70", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.69", + "version": "1.9.70", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.895.0", "@aws-sdk/lib-storage": "^3.895.0", "@mattermost/client": "10.12.0", "@ngrok/ngrok": "1.5.2", - "@sentry/node": "^10.14.0", + "@sentry/node": "^10.15.0", "async-mutex": "^0.5.0", "axios": "^1.12.2", "chokidar": "^4.0.3", @@ -34,7 +34,7 @@ "jsdom": "^27.0.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.19.3", - "mediasoup-client": "3.16.5", + "mediasoup-client": "3.16.6", "nodemailer": "^7.0.6", "openai": "^5.23.0", "qs": "6.14.0", @@ -3797,18 +3797,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "10.14.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.14.0.tgz", - "integrity": "sha512-gyJB7/mW0OteM+vwEsAWaPcLd3fTaKRAc4LZM1aXRbl7juPRmhgwFftjqGg7AMMGNDE0JMs1Fb2W4xSVxH1ItQ==", + "version": "10.15.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.15.0.tgz", + "integrity": "sha512-J7WsQvb9G6nsVgWkTHwyX7wR2djtEACYCx19hAnRbSGIg+ysVG+7Ti3RL4bz9/VXfcxsz346cleKc7ljhynYlQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.14.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.14.0.tgz", - "integrity": "sha512-2e4g9lPJ/DuJsS4IMcd7RZq8vhqTAnT30GNSY/Sd2Pv6t64Eb5suXtkrHpH6y14QPlp0egQmq5jRs6RpINZSAA==", + "version": "10.15.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.15.0.tgz", + "integrity": "sha512-5V9BX55DEIscU/S5+AEIQuIMKKbSd+MVo1/x5UkOceBxfiA0KUmgQ0POIpUEZqGCS9rpQ5fEajByRXAQ7bjaWA==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -3841,9 +3841,9 @@ "@opentelemetry/sdk-trace-base": "^2.1.0", "@opentelemetry/semantic-conventions": "^1.37.0", "@prisma/instrumentation": "6.15.0", - "@sentry/core": "10.14.0", - "@sentry/node-core": "10.14.0", - "@sentry/opentelemetry": "10.14.0", + "@sentry/core": "10.15.0", + "@sentry/node-core": "10.15.0", + "@sentry/opentelemetry": "10.15.0", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -3852,13 +3852,13 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.14.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.14.0.tgz", - "integrity": "sha512-IHL2gEWTb1YvlPduPi9bRLUM43ZpS+/ZbkKgjI/X8X/ck0LCpgu93Kq/Fzgk3Ae9DyB7p+dd/Tu+B89td5kTVw==", + "version": "10.15.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.15.0.tgz", + "integrity": "sha512-X6QAHulgfkpONYrXNK2QXfW02ja5FS31sn5DWfCDO8ggHej/u2mrf5nwnUU8vilSwbInHmiMpkUswGEKYDEKTA==", "license": "MIT", "dependencies": { - "@sentry/core": "10.14.0", - "@sentry/opentelemetry": "10.14.0", + "@sentry/core": "10.15.0", + "@sentry/opentelemetry": "10.15.0", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -3875,12 +3875,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.14.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.14.0.tgz", - "integrity": "sha512-DAVv6vFVeFclCtg8+6g90r2n2MmM6LZLEwfd8POgCL2MNd3cswC5CM1XFNOwG61stYtQ9PTFh/FQWHFv9fA+Pg==", + "version": "10.15.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.15.0.tgz", + "integrity": "sha512-j+uk3bfxGgsBejwpq78iRZ+aBOKR/fWcJi72MBTboTEK3B4LINO65PyJqwOhcZOJVVAPL6IK1+sWQp4RL24GTg==", "license": "MIT", "dependencies": { - "@sentry/core": "10.14.0" + "@sentry/core": "10.15.0" }, "engines": { "node": ">=18" @@ -8102,9 +8102,9 @@ } }, "node_modules/mediasoup-client": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/mediasoup-client/-/mediasoup-client-3.16.5.tgz", - "integrity": "sha512-42XmBdXlNBiYAMn/I8SUbAM/UW+aCr3UuzpQNZ5d6UjXY/KQtGiKapYbBBFZUT4ikZh0M2c0MdDnTApB6bLlIQ==", + "version": "3.16.6", + "resolved": "https://registry.npmjs.org/mediasoup-client/-/mediasoup-client-3.16.6.tgz", + "integrity": "sha512-g2NF3mPKtQVhgBoAoAzln2etFeXywQuOVU9t6omnjy6YYmc6UebnsTGvPvyr2dy1gbZZgawDv5Ep65IOxzlnyg==", "license": "ISC", "dependencies": { "@types/debug": "^4.1.12", diff --git a/package.json b/package.json index 9237dad5d..f73ff5ced 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.69", + "version": "1.9.70", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -61,7 +61,7 @@ "@aws-sdk/lib-storage": "^3.895.0", "@mattermost/client": "10.12.0", "@ngrok/ngrok": "1.5.2", - "@sentry/node": "^10.14.0", + "@sentry/node": "^10.15.0", "async-mutex": "^0.5.0", "axios": "^1.12.2", "chokidar": "^4.0.3", @@ -82,7 +82,7 @@ "jsdom": "^27.0.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.19.3", - "mediasoup-client": "3.16.5", + "mediasoup-client": "3.16.6", "nodemailer": "^7.0.6", "openai": "^5.23.0", "qs": "6.14.0", diff --git a/public/js/Brand.js b/public/js/Brand.js index 8bdb75c20..cef83721b 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -78,7 +78,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.69', + title: 'WebRTC SFU v1.9.70', html: ` + @@ -605,6 +608,49 @@

    Paste Image URL


    +
    + Notifications mode +
    +
    +
    + +

    Email

    +
    +
    + + +
    +
    +
    +
    + +

    Events:

    +
    + + + + + +
    +
    + +

    First User Join

    +
    +
    +
    + +
    +
    + +
    +
    Moderator options for Everyone
    From 14e455621a078774a55950391901c64c54db9102 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sun, 19 Oct 2025 13:30:59 +0200 Subject: [PATCH 335/592] [mirotalksfu] - fix typo --- public/js/Room.js | 1 + public/js/RoomClient.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/public/js/Room.js b/public/js/Room.js index b700d1761..249a40351 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1957,6 +1957,7 @@ function handleButtons() { }; notifyEmailCleanBtn.onclick = () => { rc.cleanNotifications(); + rc.saveNotifications(); }; saveNotificationsBtn.onclick = () => { rc.saveNotifications(); diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 253703e07..f159d6b6f 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -10670,7 +10670,6 @@ class RoomClient { cleanNotifications() { getId('notifyEmailInput').value = ''; getId('switchNotifyUserJoin').checked = false; - this.saveNotifications(false); } saveNotifications(validate = true) { From d9357cb9924007891e6934de7faf58386c4ba041 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sun, 19 Oct 2025 13:38:07 +0200 Subject: [PATCH 336/592] [mirotalksfu] - fix typo --- app/src/Server.js | 2 ++ public/js/Room.js | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/Server.js b/app/src/Server.js index 65f1a3010..c45c7a648 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -2558,6 +2558,8 @@ function startServer() { if (!isPresenter) return; room.updateRoomNotifications(data); + + return cb({ message: true }); }); socket.on('updateRoomModerator', (dataObject) => { diff --git a/public/js/Room.js b/public/js/Room.js index 249a40351..b700d1761 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1957,7 +1957,6 @@ function handleButtons() { }; notifyEmailCleanBtn.onclick = () => { rc.cleanNotifications(); - rc.saveNotifications(); }; saveNotificationsBtn.onclick = () => { rc.saveNotifications(); From 8f0b508f85a416cfe50db9e1633a920586fffe1a Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 20 Oct 2025 05:16:39 +0200 Subject: [PATCH 337/592] [mirotalksfu] - move notifications clean button --- app/src/Server.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- public/css/Room.css | 21 ++++++++++++--------- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- public/views/Room.html | 21 +++++++++------------ 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index c45c7a648..315f6d611 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.84 + * @version 1.9.85 * */ diff --git a/package-lock.json b/package-lock.json index 9b48a71a7..b921d0119 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.84", + "version": "1.9.85", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.84", + "version": "1.9.85", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.913.0", diff --git a/package.json b/package.json index b5e381b4e..93dc621e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.84", + "version": "1.9.85", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/css/Room.css b/public/css/Room.css index cf6f3fc23..468c11bc7 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -783,6 +783,17 @@ body { align-items: center; } +.input-container button { + flex: 1; + width: 20px; +} + +.buttons-container { + display: flex; + justify-content: space-between; + gap: 6px; +} + #rtmpStreamURL, #rtmpLiveUrl { margin-top: 5px; @@ -803,11 +814,6 @@ body { background: var(--select-bg) !important; } -.input-container button { - flex: 1; - width: 20px; -} - .btn-custom { width: 100%; background: var(--body-bg); @@ -1058,10 +1064,7 @@ body { } #notifyEmailCleanBtn { - height: 45px; - padding: 10px; - margin: 10px 0 10px 5px; /* top | right | bottom | left */ - border: var(--border); + width: 130px; } /*-------------------------------------------------------------- diff --git a/public/js/Brand.js b/public/js/Brand.js index 706873bc9..3cb3997f4 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -78,7 +78,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.84', + title: 'WebRTC SFU v1.9.85', html: ` -
    +

    @@ -646,9 +638,14 @@

    Paste Image URL

    - +
    + + +
    From f2bfc1e699f9d48dfdd0878370e722fec96a99f1 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 20 Oct 2025 05:29:44 +0200 Subject: [PATCH 338/592] [mirotalksfu] - fix typo --- public/js/Room.js | 1 + public/js/RoomClient.js | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index d086d6f75..5650c0292 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1957,6 +1957,7 @@ function handleButtons() { }; notifyEmailCleanBtn.onclick = () => { rc.cleanNotifications(); + rc.saveNotifications(false); }; saveNotificationsBtn.onclick = () => { rc.saveNotifications(); diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index dc4c68d06..b5f80a352 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -10670,6 +10670,7 @@ class RoomClient { cleanNotifications() { getId('notifyEmailInput').value = ''; getId('switchNotifyUserJoin').checked = false; + return true; } saveNotifications(validate = true) { @@ -10684,12 +10685,9 @@ class RoomClient { setNotificationsData(data) { this.socket.emit('updateRoomNotifications', data, (response) => { - if (response.error) { - this.cleanNotifications(); - this.userLog('warning', response.error, 'top-end', 6000); - } else { - this.roomMessage('save_room_notifications', true); - } + response.error + ? this.cleanNotifications() && this.userLog('warning', response.error, 'top-end', 6000) + : this.roomMessage('save_room_notifications', true); }); } From edbede0b58686c834ec413ba5cf70d86df45d326 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 20 Oct 2025 06:04:41 +0200 Subject: [PATCH 339/592] [mirotalksfu] - update message --- app/src/Server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/Server.js b/app/src/Server.js index 315f6d611..e1f23956e 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -2544,7 +2544,7 @@ function startServer() { if (config.integrations?.email?.notify !== true) { const message = - 'The email notification has been disabled. Please contact the administrator for further information.'; + 'Email notifications are disabled by the admin. Enable this feature in your self-hosted instance for full functionality.'; log.debug(message); return cb({ error: message }); } From c9b3da5ad1fe87f8f96c554ec6f664c0fe7704b3 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 20 Oct 2025 06:54:17 +0200 Subject: [PATCH 340/592] [mirotalksfu] - improve email validation --- app/src/Server.js | 2 +- app/src/Validator.js | 6 ++---- package-lock.json | 4 ++-- package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 18 ++++++++++++++++-- public/js/RoomClient.js | 11 ++--------- 7 files changed, 25 insertions(+), 20 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index e1f23956e..22c4dba5e 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.9.85 + * @version 1.9.86 * */ diff --git a/app/src/Validator.js b/app/src/Validator.js index f9e154f82..970770655 100644 --- a/app/src/Validator.js +++ b/app/src/Validator.js @@ -57,10 +57,8 @@ function hasPathTraversal(input) { } function isValidEmail(email) { - if (!email || typeof email !== 'string') return false; - const e = email.trim(); - const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[A-Za-z]{2,}$/; - return re.test(e); + const emailRegex = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i; + return emailRegex.test(email); } module.exports = { diff --git a/package-lock.json b/package-lock.json index b921d0119..d2e35fff8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "1.9.85", + "version": "1.9.86", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.85", + "version": "1.9.86", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.913.0", diff --git a/package.json b/package.json index 93dc621e1..cbd1754f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.85", + "version": "1.9.86", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index 3cb3997f4..eed905cec 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -78,7 +78,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.85', + title: 'WebRTC SFU v1.9.86', html: `

    /> -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • -
  • +
  • @@ -651,7 +651,7 @@

    Our advertisers

    /> -
  • +
  • -
  • +
  • From a2510dc91a5227ce15390bcfd6b10238aaf7bb2b Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Thu, 13 Nov 2025 00:19:12 +0100 Subject: [PATCH 374/592] [mirotalksfu] - add missing OG --- app/src/Server.js | 6 +- package-lock.json | 838 ++++++++++++++++++------------------ package.json | 8 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 +- public/js/RoomClient.js | 2 +- public/views/whoAreYou.html | 9 + 7 files changed, 439 insertions(+), 430 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index 8faab2402..c008223f3 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.07 + * @version 2.0.08 * */ @@ -318,7 +318,7 @@ const views = { whoAreYou: path.join(__dirname, '../../', 'public/views/whoAreYou.html'), }; -const filesPath = [views.landing, views.newRoom, views.room, views.login]; +const filesPath = [views.landing, views.newRoom, views.room, views.login, views.whoAreYou]; const htmlInjector = new HtmlInjector(filesPath, config.ui.brand); @@ -820,7 +820,7 @@ function startServer() { // handle who are you: Presenter or Guest app.get('/whoAreYou/:roomId', (req, res) => { - res.sendFile(views.whoAreYou); + htmlInjector.injectHtml(views.whoAreYou, res); }); // handle login if user_auth enabled diff --git a/package-lock.json b/package-lock.json index ca4407a9d..274f98f07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "mirotalksfu", - "version": "2.0.07", + "version": "2.0.08", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.07", + "version": "2.0.08", "license": "AGPL-3.0", "dependencies": { - "@aws-sdk/client-s3": "^3.929.0", - "@aws-sdk/lib-storage": "^3.929.0", + "@aws-sdk/client-s3": "^3.930.0", + "@aws-sdk/lib-storage": "^3.930.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.5.2", "@sentry/node": "^10.25.0", @@ -30,7 +30,7 @@ "he": "^1.2.0", "helmet": "^8.1.0", "httpolyglot": "0.1.2", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "jsdom": "^27.2.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.19.9", @@ -337,67 +337,67 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.929.0.tgz", - "integrity": "sha512-M6G+1CBTowN+m0Jrww5/AXMqlk4nIJqwaa/vOw+EbvLD7ROpBs6bStSai9esP9PkIVW6KMu4zCIgHzKhGa3R2A==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.930.0.tgz", + "integrity": "sha512-5ddhr3ShseFRIdNXH8bkh1CIC78p0ZXpa7HJZpONDU3JGvd/B+yHHgTr141rtgoFTaW0gjPdbdtqtPLnhlnK+A==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.928.0", - "@aws-sdk/credential-provider-node": "3.929.0", - "@aws-sdk/middleware-bucket-endpoint": "3.922.0", - "@aws-sdk/middleware-expect-continue": "3.922.0", - "@aws-sdk/middleware-flexible-checksums": "3.928.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-location-constraint": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-sdk-s3": "3.928.0", - "@aws-sdk/middleware-ssec": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.928.0", - "@aws-sdk/region-config-resolver": "3.925.0", - "@aws-sdk/signature-v4-multi-region": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.928.0", - "@aws-sdk/xml-builder": "3.921.0", - "@smithy/config-resolver": "^4.4.2", - "@smithy/core": "^3.17.2", - "@smithy/eventstream-serde-browser": "^4.2.4", - "@smithy/eventstream-serde-config-resolver": "^4.3.4", - "@smithy/eventstream-serde-node": "^4.2.4", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-blob-browser": "^4.2.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/hash-stream-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/md5-js": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/credential-provider-node": "3.930.0", + "@aws-sdk/middleware-bucket-endpoint": "3.930.0", + "@aws-sdk/middleware-expect-continue": "3.930.0", + "@aws-sdk/middleware-flexible-checksums": "3.930.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-location-constraint": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-sdk-s3": "3.930.0", + "@aws-sdk/middleware-ssec": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.930.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/signature-v4-multi-region": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.930.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/eventstream-serde-browser": "^4.2.5", + "@smithy/eventstream-serde-config-resolver": "^4.3.5", + "@smithy/eventstream-serde-node": "^4.2.5", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-blob-browser": "^4.2.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/hash-stream-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/md5-js": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.8", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.4", + "@smithy/util-waiter": "^4.2.5", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -406,47 +406,47 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.929.0.tgz", - "integrity": "sha512-CE1T7PvN2MDRCw96BTUz2Zcnb6Lae3Dl4w3TPB5auBv2sAiIPbQegFUwT2C8teMDGCNXyndzoTvAd4wmO9AcpA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.930.0.tgz", + "integrity": "sha512-sASqgm1iMLcmi+srSH9WJuqaf3GQAKhuB4xIJwkNEPUQ+yGV8HqErOOHJLXXuTUyskcdtK+4uMaBRLT2ESm+QQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.928.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.928.0", - "@aws-sdk/region-config-resolver": "3.925.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.928.0", - "@smithy/config-resolver": "^4.4.2", - "@smithy/core": "^3.17.2", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.930.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.930.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.8", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -455,22 +455,22 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.928.0.tgz", - "integrity": "sha512-e28J2uKjy2uub4u41dNnmzAu0AN3FGB+LRcLN2Qnwl9Oq3kIcByl5sM8ZD+vWpNG+SFUrUasBCq8cMnHxwXZ4w==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.922.0", - "@aws-sdk/xml-builder": "3.921.0", - "@smithy/core": "^3.17.2", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.930.0.tgz", + "integrity": "sha512-E95pWT1ayfRWg0AW2KNOCYM7QQcVeOhMRLX5PXLeDKcdxP7s3x0LHG9t7a3nPbAbvYLRrhC7O2lLWzzMCpqjsw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.930.0", + "@aws-sdk/xml-builder": "3.930.0", + "@smithy/core": "^3.18.2", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.4", + "@smithy/util-middleware": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -479,15 +479,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.928.0.tgz", - "integrity": "sha512-tB8F9Ti0/NFyFVQX8UQtgRik88evtHpyT6WfXOB4bAY6lEnEHA0ubJZmk9y+aUeoE+OsGLx70dC3JUsiiCPJkQ==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.930.0.tgz", + "integrity": "sha512-5tJyxNQmm9C1XKeiWt/K67mUHtTiU2FxTkVsqVrzAMjNsF3uyA02kyTK70byh5n29oVR9XNValVEl6jk01ipYg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -495,20 +495,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.928.0.tgz", - "integrity": "sha512-67ynC/8UW9Y8Gn1ZZtC3OgcQDGWrJelHmkbgpmmxYUrzVhp+NINtz3wiTzrrBFhPH/8Uy6BxvhMfXhn0ptcMEQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/util-stream": "^4.5.5", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.930.0.tgz", + "integrity": "sha512-vw565GctpOPoRJyRvgqXM8U/4RG8wYEPfhe6GHvt9dchebw0OaFeW1mmSYpwEPkMhZs9Z808dkSPScwm8WZBKA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/util-stream": "^4.5.6", "tslib": "^2.6.2" }, "engines": { @@ -516,23 +516,23 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.929.0.tgz", - "integrity": "sha512-XIzWsJUYeS/DjggHFB53sGGjXdlN/BA6x+Y/JvLbpdkGD2yLISU34/cDPbK/O8BAQCRTCQ69VPa/1AdNgZZRQw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/credential-provider-env": "3.928.0", - "@aws-sdk/credential-provider-http": "3.928.0", - "@aws-sdk/credential-provider-process": "3.928.0", - "@aws-sdk/credential-provider-sso": "3.929.0", - "@aws-sdk/credential-provider-web-identity": "3.929.0", - "@aws-sdk/nested-clients": "3.929.0", - "@aws-sdk/types": "3.922.0", - "@smithy/credential-provider-imds": "^4.2.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.930.0.tgz", + "integrity": "sha512-Ua4T5MWjm7QdHi7ZSUvnPBFwBZmLFP/IEGCLacPKbUT1sQO30hlWuB/uQOj0ns4T6p7V4XsM8bz5+xsW2yRYbQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.930.0", + "@aws-sdk/credential-provider-env": "3.930.0", + "@aws-sdk/credential-provider-http": "3.930.0", + "@aws-sdk/credential-provider-process": "3.930.0", + "@aws-sdk/credential-provider-sso": "3.930.0", + "@aws-sdk/credential-provider-web-identity": "3.930.0", + "@aws-sdk/nested-clients": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -540,22 +540,22 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.929.0.tgz", - "integrity": "sha512-GhNZEacpa7fh8GNggshm5S93UK25bCV5aDK8c2vfe7Y3OxBiL89Ox5GUKCu0xIOqiBdfYkI9wvWCFsQRRn7Bjw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.928.0", - "@aws-sdk/credential-provider-http": "3.928.0", - "@aws-sdk/credential-provider-ini": "3.929.0", - "@aws-sdk/credential-provider-process": "3.928.0", - "@aws-sdk/credential-provider-sso": "3.929.0", - "@aws-sdk/credential-provider-web-identity": "3.929.0", - "@aws-sdk/types": "3.922.0", - "@smithy/credential-provider-imds": "^4.2.4", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.930.0.tgz", + "integrity": "sha512-LTx5G0PsL51hNCCzOIdacGPwqnTp3X2Ck8CjLL4Kz9FTR0mfY02qEJB5y5segU1hlge/WdQYxzBBMhtMUR2h8A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.930.0", + "@aws-sdk/credential-provider-http": "3.930.0", + "@aws-sdk/credential-provider-ini": "3.930.0", + "@aws-sdk/credential-provider-process": "3.930.0", + "@aws-sdk/credential-provider-sso": "3.930.0", + "@aws-sdk/credential-provider-web-identity": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/credential-provider-imds": "^4.2.5", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -563,16 +563,16 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.928.0.tgz", - "integrity": "sha512-XL0juran8yhqwn0mreV+NJeHJOkcRBaExsvVn9fXWW37A4gLh4esSJxM2KbSNh0t+/Bk3ehBI5sL9xad+yRDuw==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.930.0.tgz", + "integrity": "sha512-lqC4lepxgwR2uZp/JROTRjkHld4/FEpSgofmiIOAfUfDx0OWSg7nkWMMS/DzlMpODqATl9tO0DcvmIJ8tMbh6g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -580,18 +580,18 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.929.0.tgz", - "integrity": "sha512-aADe6cLo4+9MUOe0GnC5kUn8IduEKnTxqBlsciZOplU0/0+Rdp9rRh/e9ZBskeIXZ33eO2HG+KDAf1lvtPT7dA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.929.0", - "@aws-sdk/core": "3.928.0", - "@aws-sdk/token-providers": "3.929.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.930.0.tgz", + "integrity": "sha512-LIs2aaVoFfioRokR1R9SpLS9u8CmbHhrV/gpHO1ED41qNCujn23vAxRNQmWzJ2XoCxSTwvToiHD2i6CjPA6rHQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.930.0", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/token-providers": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -599,17 +599,17 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.929.0.tgz", - "integrity": "sha512-L18JtW28xUZVTRHblgqZ8QTVGQfxpMLIuVYgQXrVWiY9Iz9EF4XrfZo3ywCAgqfgLi5pgg3fCxx/pe7uiMOs2w==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.930.0.tgz", + "integrity": "sha512-iIYF8GReLOp16yn2bnRWrc4UOW/vVLifqyRWZ3iAGe8NFzUiHBq+Nok7Edh+2D8zt30QOCOsWCZ31uRrPuXH8w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/nested-clients": "3.929.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/nested-clients": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -617,14 +617,14 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.929.0.tgz", - "integrity": "sha512-hVvdfidhYg8hff/48XL5LViNtyqH10oGKa+hG/twTFe7ndCxdwHJAhhFRKjgwXeHe0v8wO8lQfwMmb/B2NjOlg==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.930.0.tgz", + "integrity": "sha512-x7m+frHKTh/OxFfCHDml+OKb5jxBy9Rex7hb80envAYzfo0vE4gPbs9PBcFh1GEC7+GDhBNMvhoiKUqlRKM3jQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/smithy-client": "^4.9.2", + "@smithy/abort-controller": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/smithy-client": "^4.9.5", "buffer": "5.6.0", "events": "3.3.0", "stream-browserify": "3.0.0", @@ -634,7 +634,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.929.0" + "@aws-sdk/client-s3": "^3.930.0" } }, "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { @@ -648,16 +648,16 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.922.0.tgz", - "integrity": "sha512-Dpr2YeOaLFqt3q1hocwBesynE3x8/dXZqXZRuzSX/9/VQcwYBFChHAm4mTAl4zuvArtDbLrwzWSxmOWYZGtq5w==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.930.0.tgz", + "integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", + "@aws-sdk/types": "3.930.0", "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, @@ -666,14 +666,14 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.922.0.tgz", - "integrity": "sha512-xmnLWMtmHJHJBupSWMUEW1gyxuRIeQ1Ov2xa8Tqq77fPr4Ft2AluEwiDMaZIMHoAvpxWKEEt9Si59Li7GIA+bQ==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz", + "integrity": "sha512-5HEQ+JU4DrLNWeY27wKg/jeVa8Suy62ivJHOSUf6e6hZdVIMx0h/kXS1fHEQNNiLu2IzSEP/bFXsKBaW7x7s0g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -681,22 +681,22 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.928.0.tgz", - "integrity": "sha512-9+aCRt7teItSIMbnGvOY+FhtJnW2ZBUbfD+ug29a/ZbobDfTwmtrmtgEIWdXryFaRbT03HHfaJ3a++lTw4osuw==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.930.0.tgz", + "integrity": "sha512-ZbAwwe7sqIO7tmNH3Q8rH91tZCQwBGliyXUbANoVMp1CWLPDAeaECurkmuBe/UJmoszi2U3gyhIQlbfzD2SBLw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", "@smithy/is-array-buffer": "^4.2.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -705,14 +705,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz", - "integrity": "sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.930.0.tgz", + "integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -720,13 +720,13 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.922.0.tgz", - "integrity": "sha512-T4iqd7WQ2DDjCH/0s50mnhdoX+IJns83ZE+3zj9IDlpU0N2aq8R91IG890qTfYkUEdP9yRm0xir/CNed+v6Dew==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.930.0.tgz", + "integrity": "sha512-QIGNsNUdRICog+LYqmtJ03PLze6h2KCORXUs5td/hAEjVP5DMmubhtrGg1KhWyctACluUH/E/yrD14p4pRXxwA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -734,13 +734,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz", - "integrity": "sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.930.0.tgz", + "integrity": "sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -748,15 +748,15 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz", - "integrity": "sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz", + "integrity": "sha512-gv0sekNpa2MBsIhm2cjP3nmYSfI4nscx/+K9u9ybrWZBWUIC4kL2sV++bFjjUz4QxUIlvKByow3/a9ARQyCu7Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", + "@aws-sdk/types": "3.930.0", "@aws/lambda-invoke-store": "^0.1.1", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -764,23 +764,23 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.928.0.tgz", - "integrity": "sha512-LTkjS6cpJ2PEtsottTKq7JxZV0oH+QJ12P/dGNPZL4URayjEMBVR/dp4zh835X/FPXzijga3sdotlIKzuFy9FA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.930.0.tgz", + "integrity": "sha512-bnVK0xVVmrPyKTbV5MgG6KP7MPe87GngBPD5MrYj9kWmGrJIvnt0qer0UIgWAnsyCi7XrTfw7SMgYRpSxOYEMw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/core": "^3.17.2", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", + "@smithy/core": "^3.18.2", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-stream": "^4.5.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-stream": "^4.5.6", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -789,13 +789,13 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.922.0.tgz", - "integrity": "sha512-eHvSJZTSRJO+/tjjGD6ocnPc8q9o3m26+qbwQTu/4V6yOJQ1q+xkDZNqwJQphL+CodYaQ7uljp8g1Ji/AN3D9w==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz", + "integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -803,17 +803,17 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.928.0.tgz", - "integrity": "sha512-ESvcfLx5PtpdUM3ptCwb80toBTd3y5I4w5jaeOPHihiZr7jkRLE/nsaCKzlqscPs6UQ8xI0maav04JUiTskcHw==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.930.0.tgz", + "integrity": "sha512-UUItqy02biaHoZDd1Z2CskFon3Lej15ZCIZzW4n2lsJmgLWNvz21jtFA8DQny7ZgCLAOOXI8YK3VLZptZWtIcg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@smithy/core": "^3.17.2", - "@smithy/protocol-http": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@smithy/core": "^3.18.2", + "@smithy/protocol-http": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -821,47 +821,47 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.929.0.tgz", - "integrity": "sha512-emR4LTSupxPed1ni0zVxz5msezz/gA1YYXooiW567+NyhvLgSzDvNjK7GPU1waLCj1LrRFe7NkXX1pwa5sPrpw==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.930.0.tgz", + "integrity": "sha512-eEDjTVXNiDkoV0ZV+X+WV40GTpF70xZmDW13CQzQF7rzOC2iFjtTRU+F7MUhy/Vs+e9KvDgiuCDecITtaOXUNw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.928.0", - "@aws-sdk/middleware-host-header": "3.922.0", - "@aws-sdk/middleware-logger": "3.922.0", - "@aws-sdk/middleware-recursion-detection": "3.922.0", - "@aws-sdk/middleware-user-agent": "3.928.0", - "@aws-sdk/region-config-resolver": "3.925.0", - "@aws-sdk/types": "3.922.0", - "@aws-sdk/util-endpoints": "3.922.0", - "@aws-sdk/util-user-agent-browser": "3.922.0", - "@aws-sdk/util-user-agent-node": "3.928.0", - "@smithy/config-resolver": "^4.4.2", - "@smithy/core": "^3.17.2", - "@smithy/fetch-http-handler": "^5.3.5", - "@smithy/hash-node": "^4.2.4", - "@smithy/invalid-dependency": "^4.2.4", - "@smithy/middleware-content-length": "^4.2.4", - "@smithy/middleware-endpoint": "^4.3.6", - "@smithy/middleware-retry": "^4.4.6", - "@smithy/middleware-serde": "^4.2.4", - "@smithy/middleware-stack": "^4.2.4", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/node-http-handler": "^4.4.4", - "@smithy/protocol-http": "^5.3.4", - "@smithy/smithy-client": "^4.9.2", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/middleware-host-header": "3.930.0", + "@aws-sdk/middleware-logger": "3.930.0", + "@aws-sdk/middleware-recursion-detection": "3.930.0", + "@aws-sdk/middleware-user-agent": "3.930.0", + "@aws-sdk/region-config-resolver": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@aws-sdk/util-endpoints": "3.930.0", + "@aws-sdk/util-user-agent-browser": "3.930.0", + "@aws-sdk/util-user-agent-node": "3.930.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/core": "^3.18.2", + "@smithy/fetch-http-handler": "^5.3.6", + "@smithy/hash-node": "^4.2.5", + "@smithy/invalid-dependency": "^4.2.5", + "@smithy/middleware-content-length": "^4.2.5", + "@smithy/middleware-endpoint": "^4.3.9", + "@smithy/middleware-retry": "^4.4.9", + "@smithy/middleware-serde": "^4.2.5", + "@smithy/middleware-stack": "^4.2.5", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/node-http-handler": "^4.4.5", + "@smithy/protocol-http": "^5.3.5", + "@smithy/smithy-client": "^4.9.5", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.5", - "@smithy/util-defaults-mode-node": "^4.2.8", - "@smithy/util-endpoints": "^3.2.4", - "@smithy/util-middleware": "^4.2.4", - "@smithy/util-retry": "^4.2.4", + "@smithy/util-defaults-mode-browser": "^4.3.8", + "@smithy/util-defaults-mode-node": "^4.2.11", + "@smithy/util-endpoints": "^3.2.5", + "@smithy/util-middleware": "^4.2.5", + "@smithy/util-retry": "^4.2.5", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -870,15 +870,15 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.925.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.925.0.tgz", - "integrity": "sha512-FOthcdF9oDb1pfQBRCfWPZhJZT5wqpvdAS5aJzB1WDZ+6EuaAhLzLH/fW1slDunIqq1PSQGG3uSnVglVVOvPHQ==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz", + "integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/config-resolver": "^4.4.2", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/config-resolver": "^4.4.3", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -886,16 +886,16 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.928.0.tgz", - "integrity": "sha512-1+Ic8+MyqQy+OE6QDoQKVCIcSZO+ETmLLLpVS5yu0fihBU85B5HHU7iaKX1qX7lEaGPMpSN/mbHW0VpyQ0Xqaw==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.930.0.tgz", + "integrity": "sha512-UOAq1ftbrZc9HRP/nG970OONNykIDWunjth9GvGDODkW0FR7DHJWBmTwj61ZnrSiuSParp1eQfa+JsZ8eXNPcw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@smithy/protocol-http": "^5.3.4", - "@smithy/signature-v4": "^5.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/middleware-sdk-s3": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/protocol-http": "^5.3.5", + "@smithy/signature-v4": "^5.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -903,17 +903,17 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.929.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.929.0.tgz", - "integrity": "sha512-78kph1R6TVJ53VXDKUmt64HMqWjTECLymJ7kLguz2QJiWh2ZdLvpyYGvaueEwwhisHYBh2qef1tGIf/PpEb8SQ==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.930.0.tgz", + "integrity": "sha512-K+fJFJXA2Tdx10WhhTm+xQmf1WDHu14rUutByyqx6W0iW2rhtl3YeRr188LWSU3/hpz7BPyvigaAb0QyRti6FQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.928.0", - "@aws-sdk/nested-clients": "3.929.0", - "@aws-sdk/types": "3.922.0", - "@smithy/property-provider": "^4.2.4", - "@smithy/shared-ini-file-loader": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/core": "3.930.0", + "@aws-sdk/nested-clients": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/property-provider": "^4.2.5", + "@smithy/shared-ini-file-loader": "^4.4.0", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -921,12 +921,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.922.0.tgz", - "integrity": "sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.930.0.tgz", + "integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -946,15 +946,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz", - "integrity": "sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.930.0.tgz", + "integrity": "sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", - "@smithy/url-parser": "^4.2.4", - "@smithy/util-endpoints": "^3.2.4", + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", + "@smithy/url-parser": "^4.2.5", + "@smithy/util-endpoints": "^3.2.5", "tslib": "^2.6.2" }, "engines": { @@ -974,27 +974,27 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.922.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz", - "integrity": "sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz", + "integrity": "sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.922.0", - "@smithy/types": "^4.8.1", + "@aws-sdk/types": "3.930.0", + "@smithy/types": "^4.9.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.928.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.928.0.tgz", - "integrity": "sha512-s0jP67nQLLWVWfBtqTkZUkSWK5e6OI+rs+wFya2h9VLyWBFir17XSDI891s8HZKIVCEl8eBrup+hhywm4nsIAA==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.930.0.tgz", + "integrity": "sha512-tYc5uFKogn0vLukeZ6Zz2dR1/WiTjxZH7+Jjoce6aEYgRVfyrDje1POFb7YxhNZ7Pp1WzHCuwW2KgkmMoYVbxQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.928.0", - "@aws-sdk/types": "3.922.0", - "@smithy/node-config-provider": "^4.3.4", - "@smithy/types": "^4.8.1", + "@aws-sdk/middleware-user-agent": "3.930.0", + "@aws-sdk/types": "3.930.0", + "@smithy/node-config-provider": "^4.3.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -1010,12 +1010,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.921.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz", - "integrity": "sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==", + "version": "3.930.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", + "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, @@ -4080,9 +4080,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.0.tgz", - "integrity": "sha512-vGSDXOJFZgOPTatSI1ly7Gwyy/d/R9zh2TO3y0JZ0uut5qQ88p9IaWaZYIWSSqtdekNM4CGok/JppxbAff4KcQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.3.tgz", + "integrity": "sha512-qqpNskkbHOSfrbFbjhYj5o8VMXO26fvN1K/+HbCzUNlTuxgNcPRouUDNm+7D6CkN244WG7aK533Ne18UtJEgAA==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.2.5", @@ -4117,13 +4117,13 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.4.tgz", - "integrity": "sha512-aV8blR9RBDKrOlZVgjOdmOibTC2sBXNiT7WA558b4MPdsLTV6sbyc1WIE9QiIuYMJjYtnPLciefoqSW8Gi+MZQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", + "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, @@ -4132,13 +4132,13 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.4.tgz", - "integrity": "sha512-d5T7ZS3J/r8P/PDjgmCcutmNxnSRvPH1U6iHeXjzI50sMr78GLmFcrczLw33Ap92oEKqa4CLrkAPeSSOqvGdUA==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", + "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -4146,12 +4146,12 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.4.tgz", - "integrity": "sha512-lxfDT0UuSc1HqltOGsTEAlZ6H29gpfDSdEPTapD5G63RbnYToZ+ezjzdonCCH90j5tRRCw3aLXVbiZaBW3VRVg==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", + "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -4159,13 +4159,13 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.4.tgz", - "integrity": "sha512-TPhiGByWnYyzcpU/K3pO5V7QgtXYpE0NaJPEZBCa1Y5jlw5SjqzMSbFiLb+ZkJhqoQc0ImGyVINqnq1ze0ZRcQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", + "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-serde-universal": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -4173,13 +4173,13 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.4.tgz", - "integrity": "sha512-GNI/IXaY/XBB1SkGBFmbW033uWA0tj085eCxYih0eccUe/PFR7+UBQv9HNDk2fD9TJu7UVsCWsH99TkpEPSOzQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", + "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/eventstream-codec": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -4203,14 +4203,14 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.5.tgz", - "integrity": "sha512-kCdgjD2J50qAqycYx0imbkA9tPtyQr1i5GwbK/EOUkpBmJGSkJe4mRJm+0F65TUSvvui1HZ5FFGFCND7l8/3WQ==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", + "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.2.0", "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -4233,12 +4233,12 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.4.tgz", - "integrity": "sha512-amuh2IJiyRfO5MV0X/YFlZMD6banjvjAwKdeJiYGUbId608x+oSNwv3vlyW2Gt6AGAgl3EYAuyYLGRX/xU8npQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", + "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -4272,12 +4272,12 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.4.tgz", - "integrity": "sha512-h7kzNWZuMe5bPnZwKxhVbY1gan5+TZ2c9JcVTHCygB14buVGOZxLl+oGfpY2p2Xm48SFqEWdghpvbBdmaz3ncQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", + "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.8.1", + "@smithy/types": "^4.9.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -4300,12 +4300,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.7.tgz", - "integrity": "sha512-i8Mi8OuY6Yi82Foe3iu7/yhBj1HBRoOQwBSsUNYglJTNSFaWYTNM2NauBBs/7pq2sqkLRqeUXA3Ogi2utzpUlQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.10.tgz", + "integrity": "sha512-SoAag3QnWBFoXjwa1jenEThkzJYClidZUyqsLKwWZ8kOlZBwehrLBp4ygVDjNEM2a2AamCQ2FBA/HuzKJ/LiTA==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.0", + "@smithy/core": "^3.18.3", "@smithy/middleware-serde": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -4319,15 +4319,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.7.tgz", - "integrity": "sha512-E7Vc6WHCHlzDRTx1W0jZ6J1L6ziEV0PIWcUdmfL4y+c8r7WYr6I+LkQudaD8Nfb7C5c4P3SQ972OmXHtv6m/OA==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.10.tgz", + "integrity": "sha512-6fOwX34gXxcqKa3bsG0mR0arc2Cw4ddOS6tp3RgUD2yoTrDTbQ2aVADnDjhUuxaiDZN2iilxndgGDhnpL/XvJA==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/protocol-http": "^5.3.5", "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.3", + "@smithy/smithy-client": "^4.9.6", "@smithy/types": "^4.9.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", @@ -4494,13 +4494,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.3.tgz", - "integrity": "sha512-8tlueuTgV5n7inQCkhyptrB3jo2AO80uGrps/XTYZivv5MFQKKBj3CIWIGMI2fRY5LEduIiazOhAWdFknY1O9w==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.6.tgz", + "integrity": "sha512-hGz42hggqReicRRZUvrKDQiAmoJnx1Q+XfAJnYAGu544gOfxQCAC3hGGD7+Px2gEUUxB/kKtQV7LOtBRNyxteQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.0", - "@smithy/middleware-endpoint": "^4.3.7", + "@smithy/core": "^3.18.3", + "@smithy/middleware-endpoint": "^4.3.10", "@smithy/middleware-stack": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", @@ -4601,13 +4601,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.6.tgz", - "integrity": "sha512-kbpuXbEf2YQ9zEE6eeVnUCQWO0e1BjMnKrXL8rfXgiWA0m8/E0leU4oSNzxP04WfCmW8vjEqaDeXWxwE4tpOjQ==", + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.9.tgz", + "integrity": "sha512-Bh5bU40BgdkXE2BcaNazhNtEXi1TC0S+1d84vUwv5srWfvbeRNUKFzwKQgC6p6MXPvEgw+9+HdX3pOwT6ut5aw==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.3", + "@smithy/smithy-client": "^4.9.6", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -4616,16 +4616,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.9.tgz", - "integrity": "sha512-dgyribrVWN5qE5usYJ0m5M93mVM3L3TyBPZWe1Xl6uZlH2gzfQx3dz+ZCdW93lWqdedJRkOecnvbnoEEXRZ5VQ==", + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.12.tgz", + "integrity": "sha512-EHZwe1E9Q7umImIyCKQg/Cm+S+7rjXxCRvfGmKifqwYvn7M8M4ZcowwUOQzvuuxUUmdzCkqL0Eq0z1m74Pq6pw==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.3", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.3", + "@smithy/smithy-client": "^4.9.6", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -4731,13 +4731,13 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.4.tgz", - "integrity": "sha512-roKXtXIC6fopFvVOju8VYHtguc/jAcMlK8IlDOHsrQn0ayMkHynjm/D2DCMRf7MJFXzjHhlzg2edr3QPEakchQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", + "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.4", - "@smithy/types": "^4.8.1", + "@smithy/abort-controller": "^4.2.5", + "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, "engines": { @@ -7815,9 +7815,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" diff --git a/package.json b/package.json index 4a2abdcb2..d20fb2a22 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.07", + "version": "2.0.08", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,8 +57,8 @@ "node": ">=22" }, "dependencies": { - "@aws-sdk/client-s3": "^3.929.0", - "@aws-sdk/lib-storage": "^3.929.0", + "@aws-sdk/client-s3": "^3.930.0", + "@aws-sdk/lib-storage": "^3.930.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.5.2", "@sentry/node": "^10.25.0", @@ -78,7 +78,7 @@ "he": "^1.2.0", "helmet": "^8.1.0", "httpolyglot": "0.1.2", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "jsdom": "^27.2.0", "jsonwebtoken": "^9.0.2", "mediasoup": "3.19.9", diff --git a/public/js/Brand.js b/public/js/Brand.js index e59759747..836bd5e76 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -79,7 +79,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.07', + title: 'WebRTC SFU v2.0.08', html: ` + From 6a03599089c2d19a8be1003b3d0d5928fb9795ca Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 25 Nov 2025 13:59:29 +0100 Subject: [PATCH 412/592] [mirotalksfu] - fix typo --- public/js/Room.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index 09ee35abc..4af6c64ee 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -2014,14 +2014,13 @@ function handleButtons() { }; chatButton.onclick = () => { rc.toggleChat(); - if (isMobileDevice) { - rc.toggleShowParticipants(); - } }; participantsButton.onclick = async () => { - rc.toggleChat(); - await rc.sleep(100); - rc.toggleShowParticipants(); + if (!rc.isChatOpen) rc.toggleChat(); + await rc.sleep(500); + if ((isDesktopDevice && rc.isChatPinned) || !isDesktopDevice) { + rc.toggleShowParticipants(); + } }; // Polls pollButton.onclick = () => { From a4a8802eeeeee043b4d9cc610447546a6081f7a7 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 25 Nov 2025 14:02:57 +0100 Subject: [PATCH 413/592] [mirotalksfu] - move logic --- public/js/Room.js | 6 +----- public/js/RoomClient.js | 8 ++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index 4af6c64ee..c9936f5b1 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -2016,11 +2016,7 @@ function handleButtons() { rc.toggleChat(); }; participantsButton.onclick = async () => { - if (!rc.isChatOpen) rc.toggleChat(); - await rc.sleep(500); - if ((isDesktopDevice && rc.isChatPinned) || !isDesktopDevice) { - rc.toggleShowParticipants(); - } + rc.toggleParticipants(); }; // Polls pollButton.onclick = () => { diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index f8a98eb1e..d23252b1a 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -4975,6 +4975,14 @@ class RoomClient { plist.style.position = this.isMobileDevice ? 'fixed' : 'absolute'; } + async toggleParticipants() { + if (!this.isChatOpen) this.toggleChat(); + await this.sleep(500); + if ((isDesktopDevice && this.isChatPinned) || !isDesktopDevice) { + this.toggleShowParticipants(); + } + } + toggleChatHistorySize(max = true) { const chatHistory = this.getId('chatHistory'); chatHistory.style.minHeight = max ? 'calc(100vh - 210px)' : '490px'; From d4695eb53b25566035f656d1fe1fe1db63be5059 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 25 Nov 2025 16:38:09 +0100 Subject: [PATCH 414/592] [mirotalksfu] - add participants badge --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 96 +++++++++++++++++++++++++++----------- package.json | 2 +- public/css/Room.css | 24 ++++++++++ public/js/Brand.js | 2 +- public/js/Room.js | 14 +++++- public/js/RoomClient.js | 2 +- public/views/Room.html | 5 +- 10 files changed, 114 insertions(+), 37 deletions(-) diff --git a/.env.template b/.env.template index 6f448fdc9..9901b2a95 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.32 - Environment Configuration +# MiroTalk SFU v.2.0.33 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index d5f6e132d..9ab598fae 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.32 + * @version 2.0.33 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index c6b7894ff..7c421f347 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.32 - Configuration File + * MiroTalk SFU v2.0.33 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index e5e1a3172..d2526db28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "2.0.32", + "version": "2.0.33", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.32", + "version": "2.0.33", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.939.0", @@ -5595,23 +5595,43 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/bowser": { @@ -7804,19 +7824,23 @@ "license": "BSD-2-Clause" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-proxy-agent": { @@ -9945,18 +9969,34 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/readable-stream": { @@ -10841,9 +10881,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" diff --git a/package.json b/package.json index 9559676e1..49dc1dc10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.32", + "version": "2.0.33", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/css/Room.css b/public/css/Room.css index aa953ab59..c8473d0d4 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -465,6 +465,30 @@ body { } } +#participantsButton { + position: relative; +} + +/* Participants count badge for participants button */ +#participantsCountBadge { + position: absolute; + top: 2px; + right: 2px; + min-width: 18px; + height: 18px; + background: #e74c3c; + color: #fff; + border-radius: 9px; + font-size: 12px; + display: flex; + align-items: center; + justify-content: center; + padding: 0 5px; + pointer-events: none; + z-index: 2; + display: none; +} + /*-------------------------------------------------------------- # Room QR --------------------------------------------------------------*/ diff --git a/public/js/Brand.js b/public/js/Brand.js index 4c07de1a2..859b6721a 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.32', + title: 'WebRTC SFU v2.0.33', html: ` - + From c7816e3caabb7993985f00d0e6fae159717f0b56 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 25 Nov 2025 18:06:50 +0100 Subject: [PATCH 415/592] [mirotalksfu] - fix toggleParticipants --- public/js/RoomClient.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 6d403b58d..7bcba5605 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -324,6 +324,7 @@ class RoomClient { this.isEditorLocked = false; this.isEditorPinned = false; this.isSpeechSynthesisSupported = isSpeechSynthesisSupported; + this.isParticipantsOpen = false; this.speechInMessages = false; this.showChatOnMessage = true; this.isChatBgTransparent = false; @@ -4976,8 +4977,15 @@ class RoomClient { } async toggleParticipants() { - if (!this.isChatOpen) this.toggleChat(); - await this.sleep(500); + this.isParticipantsOpen = !this.isParticipantsOpen; + if (!this.isParticipantsOpen && this.isChatOpen) { + this.toggleChat(); + return; + } + if (!this.isChatOpen) { + this.toggleChat(); + await this.sleep(500); + } if ((isDesktopDevice && this.isChatPinned) || !isDesktopDevice) { this.toggleShowParticipants(); } From 51b53225f0e63333d55f8e8d1027c24cdf6c3c12 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 26 Nov 2025 09:13:05 +0100 Subject: [PATCH 416/592] [mirotalksfu] - update dep --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 282 ++++++++++++++++++++----------------- package.json | 12 +- public/js/Brand.js | 2 +- public/js/Room.js | 4 +- public/js/RoomClient.js | 2 +- public/views/Room.html | 2 +- 9 files changed, 170 insertions(+), 140 deletions(-) diff --git a/.env.template b/.env.template index 9901b2a95..eafa820a6 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.33 - Environment Configuration +# MiroTalk SFU v.2.0.34 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index 9ab598fae..14255af3e 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.33 + * @version 2.0.34 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 7c421f347..72b1b7e62 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.33 - Configuration File + * MiroTalk SFU v2.0.34 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index d2526db28..26453cbf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,22 @@ { "name": "mirotalksfu", - "version": "2.0.33", + "version": "2.0.34", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.33", + "version": "2.0.34", "license": "AGPL-3.0", "dependencies": { - "@aws-sdk/client-s3": "^3.939.0", - "@aws-sdk/lib-storage": "^3.939.0", + "@aws-sdk/client-s3": "^3.940.0", + "@aws-sdk/lib-storage": "^3.940.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.6.0", "@sentry/node": "^10.27.0", "async-mutex": "^0.5.0", "axios": "^1.13.2", - "chokidar": "^4.0.3", + "chokidar": "^5.0.0", "colors": "1.4.0", "compression": "1.8.1", "cors": "2.8.5", @@ -34,10 +34,10 @@ "js-yaml": "^4.1.1", "jsdom": "^27.2.0", "jsonwebtoken": "^9.0.2", - "mediasoup": "3.19.11", + "mediasoup": "3.19.12", "mediasoup-client": "3.18.1", "mime-types": "^3.0.2", - "nodemailer": "^7.0.10", + "nodemailer": "^7.0.11", "openai": "^6.9.1", "qs": "6.14.0", "sanitize-filename": "^1.6.3", @@ -339,33 +339,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.939.0.tgz", - "integrity": "sha512-VMiaEDwKUr8w7B8NIFHal8ViPne7Buc+/idDvA3SeY1pDQcK/4saA2CNh1xHzsxQ8YjUbL0DuB3aztr6hU8K5Q==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.940.0.tgz", + "integrity": "sha512-Wi4qnBT6shRRMXuuTgjMFTU5mu2KFWisgcigEMPptjPGUtJvBVi4PTGgS64qsLoUk/obqDAyOBOfEtRZ2ddC2w==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-node": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/credential-provider-node": "3.940.0", "@aws-sdk/middleware-bucket-endpoint": "3.936.0", "@aws-sdk/middleware-expect-continue": "3.936.0", - "@aws-sdk/middleware-flexible-checksums": "3.936.0", + "@aws-sdk/middleware-flexible-checksums": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-location-constraint": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-sdk-s3": "3.939.0", + "@aws-sdk/middleware-sdk-s3": "3.940.0", "@aws-sdk/middleware-ssec": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/signature-v4-multi-region": "3.939.0", + "@aws-sdk/signature-v4-multi-region": "3.940.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/eventstream-serde-browser": "^4.2.5", @@ -406,23 +406,23 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.936.0.tgz", - "integrity": "sha512-0G73S2cDqYwJVvqL08eakj79MZG2QRaB56Ul8/Ps9oQxllr7DMI1IQ/N3j3xjxgpq/U36pkoFZ8aK1n7Sbr3IQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.940.0.tgz", + "integrity": "sha512-SdqJGWVhmIURvCSgkDditHRO+ozubwZk9aCX9MK8qxyOndhobCndW1ozl3hX9psvMAo9Q4bppjuqy/GHWpjB+A==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -455,9 +455,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.936.0.tgz", - "integrity": "sha512-eGJ2ySUMvgtOziHhDRDLCrj473RJoL4J1vPjVM3NrKC/fF3/LoHjkut8AAnKmrW6a2uTzNKubigw8dEnpmpERw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.940.0.tgz", + "integrity": "sha512-KsGD2FLaX5ngJao1mHxodIVU9VYd1E8810fcYiGwO1PFHDzf5BEkp6D9IdMeQwT8Q6JLYtiiT1Y/o3UCScnGoA==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.936.0", @@ -479,12 +479,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.936.0.tgz", - "integrity": "sha512-dKajFuaugEA5i9gCKzOaVy9uTeZcApE+7Z5wdcZ6j40523fY1a56khDAUYkCfwqa7sHci4ccmxBkAo+fW1RChA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.940.0.tgz", + "integrity": "sha512-/G3l5/wbZYP2XEQiOoIkRJmlv15f1P3MSd1a0gz27lHEMrOJOGq66rF1Ca4OJLzapWt3Fy9BPrZAepoAX11kMw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", @@ -495,12 +495,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.936.0.tgz", - "integrity": "sha512-5FguODLXG1tWx/x8fBxH+GVrk7Hey2LbXV5h9SFzYCx/2h50URBm0+9hndg0Rd23+xzYe14F6SI9HA9c1sPnjg==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.940.0.tgz", + "integrity": "sha512-dOrc03DHElNBD6N9Okt4U0zhrG4Wix5QUBSZPr5VN8SvmjD9dkrrxOkkJaMCl/bzrW7kbQEp7LuBdbxArMmOZQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/node-http-handler": "^4.4.5", @@ -516,19 +516,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.939.0.tgz", - "integrity": "sha512-RHQ3xKz5pn5PMuoBYNYLMIdN4iU8gklxcsfJzOflSrwkhb8ukVRS9LjHXUtyE4qQ2J+dfj1QSr4PFOSxvzRZkA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-login": "3.939.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.939.0", - "@aws-sdk/credential-provider-web-identity": "3.939.0", - "@aws-sdk/nested-clients": "3.939.0", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.940.0.tgz", + "integrity": "sha512-gn7PJQEzb/cnInNFTOaDoCN/hOKqMejNmLof1W5VW95Qk0TPO52lH8R4RmJPnRrwFMswOWswTOpR1roKNLIrcw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.940.0", + "@aws-sdk/credential-provider-env": "3.940.0", + "@aws-sdk/credential-provider-http": "3.940.0", + "@aws-sdk/credential-provider-login": "3.940.0", + "@aws-sdk/credential-provider-process": "3.940.0", + "@aws-sdk/credential-provider-sso": "3.940.0", + "@aws-sdk/credential-provider-web-identity": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -541,13 +541,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.939.0.tgz", - "integrity": "sha512-SbbzlsH2ZSsu2szyl494QOUS69LZgU8bYlFoDnUxy2L89YzLyR4D9wWlJzKCm4cS1eyNxPsOMkbVVL42JRvdZw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.940.0.tgz", + "integrity": "sha512-fOKC3VZkwa9T2l2VFKWRtfHQPQuISqqNl35ZhcXjWKVwRwl/o7THPMkqI4XwgT2noGa7LLYVbWMwnsgSsBqglg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", @@ -560,17 +560,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.939.0.tgz", - "integrity": "sha512-OAwCqDNlKC3JmWb+N0zFfsPJJ8J5b8ZD63vWHdSf9c7ZlRKpFRD/uePqVMQKOq4h3DO0P0smAPk/m5p66oYLrw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.940.0.tgz", + "integrity": "sha512-M8NFAvgvO6xZjiti5kztFiAYmSmSlG3eUfr4ZHSfXYZUA/KUdZU/D6xJyaLnU8cYRWBludb6K9XPKKVwKfqm4g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.936.0", - "@aws-sdk/credential-provider-http": "3.936.0", - "@aws-sdk/credential-provider-ini": "3.939.0", - "@aws-sdk/credential-provider-process": "3.936.0", - "@aws-sdk/credential-provider-sso": "3.939.0", - "@aws-sdk/credential-provider-web-identity": "3.939.0", + "@aws-sdk/credential-provider-env": "3.940.0", + "@aws-sdk/credential-provider-http": "3.940.0", + "@aws-sdk/credential-provider-ini": "3.940.0", + "@aws-sdk/credential-provider-process": "3.940.0", + "@aws-sdk/credential-provider-sso": "3.940.0", + "@aws-sdk/credential-provider-web-identity": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -583,12 +583,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.936.0.tgz", - "integrity": "sha512-GpA4AcHb96KQK2PSPUyvChvrsEKiLhQ5NWjeef2IZ3Jc8JoosiedYqp6yhZR+S8cTysuvx56WyJIJc8y8OTrLA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.940.0.tgz", + "integrity": "sha512-pILBzt5/TYCqRsJb7vZlxmRIe0/T+FZPeml417EK75060ajDGnVJjHcuVdLVIeKoTKm9gmJc9l45gon6PbHyUQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -600,14 +600,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.939.0.tgz", - "integrity": "sha512-gXWI+5xf+2n7kJSqYgDw1VkNLGRe2IYNCjOW/F04/7l8scxOP84SZ634OI9IR/8JWvFwMUjxH4JigPU0j6ZWzQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.940.0.tgz", + "integrity": "sha512-q6JMHIkBlDCOMnA3RAzf8cGfup+8ukhhb50fNpghMs1SNBGhanmaMbZSgLigBRsPQW7fOk2l8jnzdVLS+BB9Uw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.936.0", - "@aws-sdk/core": "3.936.0", - "@aws-sdk/token-providers": "3.939.0", + "@aws-sdk/client-sso": "3.940.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/token-providers": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -619,13 +619,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.939.0.tgz", - "integrity": "sha512-b/ySLC6DfWwZIAP2Glq9mkJJ/9LIDiKfYN2f9ZenQF+k2lO1i6/QtBuslvLmBJ+mNz0lPRSHW29alyqOpBgeCQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.940.0.tgz", + "integrity": "sha512-9QLTIkDJHHaYL0nyymO41H8g3ui1yz6Y3GmAN1gYQa6plXisuFBnGAbmKVj7zNvjWaOKdF0dV3dd3AFKEDoJ/w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -637,9 +637,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.939.0.tgz", - "integrity": "sha512-PLpzeX2oA2i29MQ6h7CFN0QMuE3V8AF2kPtyHtd05lwBKcF5qJDriIUSIbvB56XEg/ceWYZaF5lAwSF7JkIitA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.940.0.tgz", + "integrity": "sha512-4pHgz9tuFJNSy/qoTbW5FqXPjoR4B18jB656UsE+TP5GWd7EPx7m4F0EUwIsD3OF5+KPiiyICi8zkxOs7erfQw==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.5", @@ -654,7 +654,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.939.0" + "@aws-sdk/client-s3": "^3.940.0" } }, "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { @@ -701,15 +701,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.936.0.tgz", - "integrity": "sha512-l3GG6CrSQtMCM6fWY7foV3JQv0WJWT+3G6PSP3Ceb/KEE/5Lz5PrYFXTBf+bVoYL1b0bGjGajcgAXpstBmtHtQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.940.0.tgz", + "integrity": "sha512-WdsxDAVj5qaa5ApAP+JbpCOMHFGSmzjs2Y2OBSbWPeR9Ew7t/Okj+kUub94QJPsgzhvU1/cqNejhsw5VxeFKSQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/is-array-buffer": "^4.2.0", "@smithy/node-config-provider": "^4.3.5", @@ -784,12 +784,12 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.939.0.tgz", - "integrity": "sha512-9WMPAAyuSPvEawZJ5ndZKD+UZuISGS885kFyNyfHCNNWMws8Rohji6nysda2gL8SSpGdbvTBZRjSIzim13bYRg==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.940.0.tgz", + "integrity": "sha512-JYkLjgS1wLoKHJ40G63+afM1ehmsPsjcmrHirKh8+kSCx4ip7+nL1e/twV4Zicxr8RJi9Y0Ahq5mDvneilDDKQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-arn-parser": "3.893.0", "@smithy/core": "^3.18.5", @@ -823,12 +823,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.936.0.tgz", - "integrity": "sha512-YB40IPa7K3iaYX0lSnV9easDOLPLh+fJyUDF3BH8doX4i1AOSsYn86L4lVldmOaSX+DwiaqKHpvk4wPBdcIPWw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.940.0.tgz", + "integrity": "sha512-nJbLrUj6fY+l2W2rIB9P4Qvpiy0tnTdg/dmixRxrU1z3e8wBdspJlyE+AZN4fuVbeL6rrRrO/zxQC1bB3cw5IA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@smithy/core": "^3.18.5", @@ -841,23 +841,23 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.939.0.tgz", - "integrity": "sha512-QeNsjHBCbsVRbgEt9FZNnrrbMTUuIYML3FX5xFgEJz4aI5uXwMBjYOi5TvAY+Y4CBHY4cp3dd/zSpHu0gX68GQ==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.940.0.tgz", + "integrity": "sha512-x0mdv6DkjXqXEcQj3URbCltEzW6hoy/1uIL+i8gExP6YKrnhiZ7SzuB4gPls2UOpK5UqLiqXjhRLfBb1C9i4Dw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.936.0", + "@aws-sdk/core": "3.940.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.936.0", + "@aws-sdk/util-user-agent-node": "3.940.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -906,12 +906,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.939.0.tgz", - "integrity": "sha512-pERVG90nneZWIenPvPoOnEcfqpUHiL9KMHf+TtHIWSBcaRL1kWuNm4CfEs7mo4EM0LHbaMgoZma6woIsJ6MOwA==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.940.0.tgz", + "integrity": "sha512-ugHZEoktD/bG6mdgmhzLDjMP2VrYRAUPRPF1DpCyiZexkH7DCU7XrSJyXMvkcf0DHV+URk0q2sLf/oqn1D2uYw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.939.0", + "@aws-sdk/middleware-sdk-s3": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/protocol-http": "^5.3.5", "@smithy/signature-v4": "^5.3.5", @@ -923,13 +923,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.939.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.939.0.tgz", - "integrity": "sha512-paNeLZdr2/sk7XYMZz2OIqFFF3AkA5vUpKYahVDYmMeiMecQTqa/EptA3aVvWa4yWobEF0Kk+WSUPrOIGI3eQg==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.940.0.tgz", + "integrity": "sha512-k5qbRe/ZFjW9oWEdzLIa2twRVIEx7p/9rutofyrRysrtEnYh3HAWCngAnwbgKMoiwa806UzcTRx0TjyEpnKcCg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.936.0", - "@aws-sdk/nested-clients": "3.939.0", + "@aws-sdk/core": "3.940.0", + "@aws-sdk/nested-clients": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -1006,12 +1006,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.936.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.936.0.tgz", - "integrity": "sha512-XOEc7PF9Op00pWV2AYCGDSu5iHgYjIO53Py2VUQTIvP7SRCaCsXmA33mjBvC2Ms6FhSyWNa4aK4naUGIz0hQcw==", + "version": "3.940.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.940.0.tgz", + "integrity": "sha512-dlD/F+L/jN26I8Zg5x0oDGJiA+/WEQmnSE27fi5ydvYnpfQLwThtQo9SsNS47XSR/SOULaaoC9qx929rZuo74A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.936.0", + "@aws-sdk/middleware-user-agent": "3.940.0", "@aws-sdk/types": "3.936.0", "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", @@ -5865,15 +5865,15 @@ } }, "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -8922,9 +8922,9 @@ } }, "node_modules/mediasoup": { - "version": "3.19.11", - "resolved": "https://registry.npmjs.org/mediasoup/-/mediasoup-3.19.11.tgz", - "integrity": "sha512-RK06kmadDk/4NtWdZkzqFENqhJHepvfKjzpAKMrBoYMIKxBYlIOg/zTyLrkEPoKcsZ/gWTzV3M4WrExPiHi4ew==", + "version": "3.19.12", + "resolved": "https://registry.npmjs.org/mediasoup/-/mediasoup-3.19.12.tgz", + "integrity": "sha512-W+PGXfuHeDYJHpTqqEtyLkbnceOyYaBqvyaRhBeMaZju/GCwmdjaVTb0NILaVytY4RTOwaLlyzVtWQ/1ks66Tg==", "hasInstallScript": true, "license": "ISC", "dependencies": { @@ -9093,6 +9093,36 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -9189,9 +9219,9 @@ "license": "MIT" }, "node_modules/nodemailer": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.10.tgz", - "integrity": "sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.11.tgz", + "integrity": "sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==", "license": "MIT-0", "engines": { "node": ">=6.0.0" @@ -10014,12 +10044,12 @@ } }, "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "license": "MIT", "engines": { - "node": ">= 14.18.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", diff --git a/package.json b/package.json index 49dc1dc10..737964e49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.33", + "version": "2.0.34", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,14 +57,14 @@ "node": ">=22" }, "dependencies": { - "@aws-sdk/client-s3": "^3.939.0", - "@aws-sdk/lib-storage": "^3.939.0", + "@aws-sdk/client-s3": "^3.940.0", + "@aws-sdk/lib-storage": "^3.940.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.6.0", "@sentry/node": "^10.27.0", "async-mutex": "^0.5.0", "axios": "^1.13.2", - "chokidar": "^4.0.3", + "chokidar": "^5.0.0", "colors": "1.4.0", "compression": "1.8.1", "cors": "2.8.5", @@ -82,10 +82,10 @@ "js-yaml": "^4.1.1", "jsdom": "^27.2.0", "jsonwebtoken": "^9.0.2", - "mediasoup": "3.19.11", + "mediasoup": "3.19.12", "mediasoup-client": "3.18.1", "mime-types": "^3.0.2", - "nodemailer": "^7.0.10", + "nodemailer": "^7.0.11", "openai": "^6.9.1", "qs": "6.14.0", "sanitize-filename": "^1.6.3", diff --git a/public/js/Brand.js b/public/js/Brand.js index 859b6721a..c857702cf 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.33', + title: 'WebRTC SFU v2.0.34', html: ` -
    +
    + +
    + Empty chat illustration +
    Start Transcription
    +

    + There are no transcriptions here yet. Start transcription by clicking the "Start" button. +

    +
    +
    From 2dca6d98cb7f026c871a1883c199c590d237f961 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 26 Nov 2025 14:55:47 +0100 Subject: [PATCH 419/592] [mirotalksfu] - fix updateChatEmptyNotice --- public/js/Room.js | 10 +++++----- public/js/RoomClient.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index caebd9791..d7c214940 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -1757,15 +1757,15 @@ function roomIsReady() { function updateChatEmptyNotice() { const chatLists = [ - getId('chatPublicMessages'), - getId('chatPrivateMessages'), getId('chatGPTMessages'), getId('deepSeekMessages'), - ]; + getId('chatPublicMessages'), + getId('chatPrivateMessages'), + ].filter(Boolean); const emptyNotice = getId('chatEmptyNotice'); if (!emptyNotice) return; - const hasMessages = chatLists.some((ul) => ul && ul.children.length > 0); - emptyNotice.style.display = hasMessages ? 'none' : ''; + const hasMessages = chatLists.some((ul) => ul.children.length > 0); + hasMessages ? emptyNotice.classList.add('hidden') : emptyNotice.classList.remove('hidden'); } function elemDisplay(elem, display, mode = 'block') { diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 2507d83f4..ed495fb53 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -5578,7 +5578,6 @@ class RoomClient { if (result.isConfirmed) { this.getId(id).remove(); this.sound('delete'); - // Update empty chat notice after deleting a message updateChatEmptyNotice(); } }); @@ -5790,6 +5789,7 @@ class RoomClient { this.chatMessages = []; this.chatGPTContext = []; this.deepSeekContext = []; + updateChatEmptyNotice(); this.sound('delete'); } }); From 50dea9353efa808e5db7f8ccba0fd82b6e67709d Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Thu, 27 Nov 2025 13:57:25 +0100 Subject: [PATCH 420/592] [mirotalksfu] - fix typo --- public/css/Room.css | 2 +- public/css/VideoGrid.css | 17 +++++++++++++++++ public/js/Room.js | 16 ++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/public/css/Room.css b/public/css/Room.css index 380ff1f8b..87ae5081c 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -872,7 +872,7 @@ body { .dropdown-menu { position: fixed; /* max-height: 300px; */ - border: none; + border: none !important; border-radius: 10px !important; background: var(--body-bg) !important; box-shadow: var(--box-shadow); diff --git a/public/css/VideoGrid.css b/public/css/VideoGrid.css index a2671c31b..c2e542495 100644 --- a/public/css/VideoGrid.css +++ b/public/css/VideoGrid.css @@ -21,6 +21,23 @@ /* border: 3px solid blue; */ } +/* Video container with mouse light effect */ +#videoMediaContainer.mouse-light { + background: + radial-gradient( + 1024px 1024px at var(--mouse-x, 50%) var(--mouse-y, 50%), + rgba(255,255,255,0.30) 0%, + rgba(255,255,255,0.18) 20%, + rgba(255,255,255,0.08) 40%, + rgba(0,0,0,0.00) 60%, + rgba(0,0,0,0.10) 80%, + rgba(0,0,0,0.25) 100% + ), + var(--body-bg, linear-gradient(135deg, #222, #444)); + background-blend-mode: multiply, normal; + transition: background 0.2s; +} + #videoPinMediaContainer { z-index: 1; position: absolute; diff --git a/public/js/Room.js b/public/js/Room.js index d7c214940..b53636a34 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -325,9 +325,25 @@ let quill = null; // #################################################### document.addEventListener('DOMContentLoaded', function () { + //initCursorLightEffect(); initClient(); }); +// #################################################### +// MOUSE CURSOR LIGHT EFFECT +// #################################################### +function initCursorLightEffect() { + if (!videoMediaContainer || !isDesktopDevice) return; + videoMediaContainer.classList.add('mouse-light'); + videoMediaContainer.addEventListener('mousemove', function(e) { + const rect = videoMediaContainer.getBoundingClientRect(); + const x = ((e.clientX - rect.left) / rect.width) * 100; + const y = ((e.clientY - rect.top) / rect.height) * 100; + videoMediaContainer.style.setProperty('--mouse-x', x + '%'); + videoMediaContainer.style.setProperty('--mouse-y', y + '%'); + }); +} + function initClient() { setTheme(); From d8abf6ca916a5a37c485f6c16e02b39c7f7ad654 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Thu, 27 Nov 2025 14:03:01 +0100 Subject: [PATCH 421/592] [mirotalksfu] - update dep --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 12 ++++++------ package.json | 4 ++-- public/css/VideoGrid.css | 14 +++++++------- public/js/Brand.js | 2 +- public/js/Room.js | 7 ++++--- public/js/RoomClient.js | 2 +- public/views/404.html | 2 +- public/views/permission.html | 6 +++++- widgets/example-4.html | 11 ++++++++++- 12 files changed, 40 insertions(+), 26 deletions(-) diff --git a/.env.template b/.env.template index 339bf40f4..64f62cb39 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.36 - Environment Configuration +# MiroTalk SFU v.2.0.37 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index ab3f5c742..2dae9f54a 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.36 + * @version 2.0.37 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 5c137e391..3fecf830f 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.36 - Configuration File + * MiroTalk SFU v2.0.37 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index ce6932904..97fa0ddba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "2.0.36", + "version": "2.0.37", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.36", + "version": "2.0.37", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.940.0", @@ -52,7 +52,7 @@ "mocha": "^11.7.5", "node-fetch": "^3.3.2", "nodemon": "^3.1.11", - "prettier": "3.6.2", + "prettier": "3.7.1", "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", @@ -9880,9 +9880,9 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.1.tgz", + "integrity": "sha512-RWKXE4qB3u5Z6yz7omJkjWwmTfLdcbv44jUVHC5NpfXwFGzvpQM798FGv/6WNK879tc+Cn0AAyherCl1KjbyZQ==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 834bd0528..cdc6762f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.36", + "version": "2.0.37", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -100,7 +100,7 @@ "mocha": "^11.7.5", "node-fetch": "^3.3.2", "nodemon": "^3.1.11", - "prettier": "3.6.2", + "prettier": "3.7.1", "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", diff --git a/public/css/VideoGrid.css b/public/css/VideoGrid.css index c2e542495..a0f026aaa 100644 --- a/public/css/VideoGrid.css +++ b/public/css/VideoGrid.css @@ -26,17 +26,17 @@ background: radial-gradient( 1024px 1024px at var(--mouse-x, 50%) var(--mouse-y, 50%), - rgba(255,255,255,0.30) 0%, - rgba(255,255,255,0.18) 20%, - rgba(255,255,255,0.08) 40%, - rgba(0,0,0,0.00) 60%, - rgba(0,0,0,0.10) 80%, - rgba(0,0,0,0.25) 100% + rgba(255, 255, 255, 0.3) 0%, + rgba(255, 255, 255, 0.18) 20%, + rgba(255, 255, 255, 0.08) 40%, + rgba(0, 0, 0, 0) 60%, + rgba(0, 0, 0, 0.1) 80%, + rgba(0, 0, 0, 0.25) 100% ), var(--body-bg, linear-gradient(135deg, #222, #444)); background-blend-mode: multiply, normal; transition: background 0.2s; -} +} #videoPinMediaContainer { z-index: 1; diff --git a/public/js/Brand.js b/public/js/Brand.js index 1910a9e1d..f7b4e0cc1 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.36', + title: 'WebRTC SFU v2.0.37', html: ` + @@ -1380,6 +1381,9 @@

    Paste Image URL

    + +
    +
    +
    +

    General

    +
    +Clone:  ⌘/Ctrl + C
    +Erase:  ⌘/Ctrl + X
    +Undo:   ⌘/Ctrl + Z
    +Redo:   ⌘/Ctrl + Shift + Z or ⌘/Ctrl + Y
    + +

    Create Objects

    +

    Hold:

    +
      +
    • • Alt + Cmd (Mac)
    • +
    • • Alt + Ctrl (Win/Linux)
    • +
    +

    Then press:

    +
    +T = Text
    +L = Line
    +C = Circle
    +R = Rectangle
    +G = Triangle
    +N = Sticky Note
    +V = Vanishing Pen
    +U = Image URL
    +I = Image
    +P = PDF
    +Q = Clear all
    +
    +
    From 4329a8132fe5c97322c97eaa4a1a798fb8a5db6d Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 1 Dec 2025 22:06:14 +0100 Subject: [PATCH 428/592] [mirotalksfu] - fix typo --- public/css/Room.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/public/css/Room.css b/public/css/Room.css index 7e22303c3..c7b7ef2b8 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -1868,6 +1868,14 @@ progress { .wb-shortcuts-text { margin: 10px 0 5px 0; + color: #66beff; + font-weight: 600; + font-size: 1.05rem; + letter-spacing: 0.02em; + background: rgba(102, 190, 255, 0.08); + padding: 6px 12px; + border-radius: 6px; + display: inline-block; } .wb-shortcuts-list { From 84114c66d4b359ff86a902b17c9673cb82116022 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 2 Dec 2025 01:11:31 +0100 Subject: [PATCH 429/592] [mirotalksfu] - fix wb undo-redo --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 4 +-- package.json | 2 +- public/js/Brand.js | 2 +- public/js/Room.js | 69 +++++--------------------------------- public/js/RoomClient.js | 2 +- 8 files changed, 17 insertions(+), 68 deletions(-) diff --git a/.env.template b/.env.template index 464d2dfc5..14c25ba77 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.42 - Environment Configuration +# MiroTalk SFU v.2.0.43 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index 40a74702b..75e0a38d9 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.42 + * @version 2.0.43 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 96a293d29..b5183bcdb 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.42 - Configuration File + * MiroTalk SFU v2.0.43 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index 7c17db1e6..f16311f64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "2.0.42", + "version": "2.0.43", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.42", + "version": "2.0.43", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.940.0", diff --git a/package.json b/package.json index 6dbd342a8..cdc6d4200 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.42", + "version": "2.0.43", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/js/Brand.js b/public/js/Brand.js index 8ef5abff2..9d5bf8330 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.42', + title: 'WebRTC SFU v2.0.43', html: ` + From 4ad1d0d3ce69bc30849c53750e8c0ec2fb590b24 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 2 Dec 2025 21:42:31 +0100 Subject: [PATCH 435/592] [mirotalksfu] - fix wb --- public/js/Room.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index 6aa4a2f09..724e3a506 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -4796,7 +4796,9 @@ function setupWhiteboardLocalListeners() { function mouseDown(e) { wbIsDrawing = true; if (wbIsEraser && e.target) { - wbPop.push(e.target); // To allow redo + if (!wbVanishingObjects.includes(e.target)) { + wbPop.push(e.target); // To allow redo + } wbCanvas.remove(e.target); return; } @@ -4832,7 +4834,10 @@ function wbCanvasBackgroundColor(color) { function wbCanvasUndo() { if (wbCanvas._objects.length > 0) { - wbPop.push(wbCanvas._objects.pop()); + const obj = wbCanvas._objects.pop(); + if (!wbVanishingObjects.includes(obj)) { + wbPop.push(obj); + } wbCanvas.renderAll(); } } From 78ef8f371dfd079af436f574872ec8654e6e6f65 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Wed, 3 Dec 2025 23:37:58 +0100 Subject: [PATCH 436/592] [mirotalksfu] - improve whiteboard responsive UI, update dep --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 322 ++++++++++++++++++------------------- package.json | 10 +- public/css/Room.css | 75 ++++++++- public/css/Root.css | 4 +- public/js/Brand.js | 2 +- public/js/Room.js | 64 ++++++-- public/js/RoomClient.js | 2 +- 10 files changed, 290 insertions(+), 195 deletions(-) diff --git a/.env.template b/.env.template index e24770202..de41e8d43 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.45 - Environment Configuration +# MiroTalk SFU v.2.0.46 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index e3a56b9ce..c71faefc7 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.45 + * @version 2.0.46 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 4b17b5435..2326c8711 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.45 - Configuration File + * MiroTalk SFU v2.0.46 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index 97b802281..1dccbed22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "mirotalksfu", - "version": "2.0.44", + "version": "2.0.46", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.44", + "version": "2.0.46", "license": "AGPL-3.0", "dependencies": { - "@aws-sdk/client-s3": "^3.940.0", - "@aws-sdk/lib-storage": "^3.940.0", + "@aws-sdk/client-s3": "^3.943.0", + "@aws-sdk/lib-storage": "^3.943.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.6.0", - "@sentry/node": "^10.27.0", + "@sentry/node": "^10.28.0", "async-mutex": "^0.5.0", "axios": "^1.13.2", "chokidar": "^5.0.0", @@ -52,7 +52,7 @@ "mocha": "^11.7.5", "node-fetch": "^3.3.2", "nodemon": "^3.1.11", - "prettier": "3.7.3", + "prettier": "3.7.4", "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", @@ -339,33 +339,33 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.940.0.tgz", - "integrity": "sha512-Wi4qnBT6shRRMXuuTgjMFTU5mu2KFWisgcigEMPptjPGUtJvBVi4PTGgS64qsLoUk/obqDAyOBOfEtRZ2ddC2w==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.943.0.tgz", + "integrity": "sha512-UOX8/1mmNaRmEkxoIVP2+gxd5joPJqz+fygRqlIXON1cETLGoctinMwQs7qU8g8hghm76TU2G6ZV6sLH8cySMw==", "license": "Apache-2.0", "peer": true, "dependencies": { "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/credential-provider-node": "3.940.0", + "@aws-sdk/core": "3.943.0", + "@aws-sdk/credential-provider-node": "3.943.0", "@aws-sdk/middleware-bucket-endpoint": "3.936.0", "@aws-sdk/middleware-expect-continue": "3.936.0", - "@aws-sdk/middleware-flexible-checksums": "3.940.0", + "@aws-sdk/middleware-flexible-checksums": "3.943.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-location-constraint": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-sdk-s3": "3.940.0", + "@aws-sdk/middleware-sdk-s3": "3.943.0", "@aws-sdk/middleware-ssec": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", + "@aws-sdk/middleware-user-agent": "3.943.0", "@aws-sdk/region-config-resolver": "3.936.0", - "@aws-sdk/signature-v4-multi-region": "3.940.0", + "@aws-sdk/signature-v4-multi-region": "3.943.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", + "@aws-sdk/util-user-agent-node": "3.943.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/eventstream-serde-browser": "^4.2.5", @@ -406,23 +406,23 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.940.0.tgz", - "integrity": "sha512-SdqJGWVhmIURvCSgkDditHRO+ozubwZk9aCX9MK8qxyOndhobCndW1ozl3hX9psvMAo9Q4bppjuqy/GHWpjB+A==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.943.0.tgz", + "integrity": "sha512-kOTO2B8Ks2qX73CyKY8PAajtf5n39aMe2spoiOF5EkgSzGV7hZ/HONRDyADlyxwfsX39Q2F2SpPUaXzon32IGw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", + "@aws-sdk/middleware-user-agent": "3.943.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", + "@aws-sdk/util-user-agent-node": "3.943.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -455,9 +455,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.940.0.tgz", - "integrity": "sha512-KsGD2FLaX5ngJao1mHxodIVU9VYd1E8810fcYiGwO1PFHDzf5BEkp6D9IdMeQwT8Q6JLYtiiT1Y/o3UCScnGoA==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.943.0.tgz", + "integrity": "sha512-8CBy2hI9ABF7RBVQuY1bgf/ue+WPmM/hl0adrXFlhnhkaQP0tFY5zhiy1Y+n7V+5f3/ORoHBmCCQmcHDDYJqJQ==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.936.0", @@ -479,12 +479,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.940.0.tgz", - "integrity": "sha512-/G3l5/wbZYP2XEQiOoIkRJmlv15f1P3MSd1a0gz27lHEMrOJOGq66rF1Ca4OJLzapWt3Fy9BPrZAepoAX11kMw==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.943.0.tgz", + "integrity": "sha512-WnS5w9fK9CTuoZRVSIHLOMcI63oODg9qd1vXMYb7QGLGlfwUm4aG3hdu7i9XvYrpkQfE3dzwWLtXF4ZBuL1Tew==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/types": "^4.9.0", @@ -495,12 +495,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.940.0.tgz", - "integrity": "sha512-dOrc03DHElNBD6N9Okt4U0zhrG4Wix5QUBSZPr5VN8SvmjD9dkrrxOkkJaMCl/bzrW7kbQEp7LuBdbxArMmOZQ==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.943.0.tgz", + "integrity": "sha512-SA8bUcYDEACdhnhLpZNnWusBpdmj4Vl67Vxp3Zke7SvoWSYbuxa+tiDiC+c92Z4Yq6xNOuLPW912ZPb9/NsSkA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/fetch-http-handler": "^5.3.6", "@smithy/node-http-handler": "^4.4.5", @@ -516,19 +516,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.940.0.tgz", - "integrity": "sha512-gn7PJQEzb/cnInNFTOaDoCN/hOKqMejNmLof1W5VW95Qk0TPO52lH8R4RmJPnRrwFMswOWswTOpR1roKNLIrcw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/credential-provider-env": "3.940.0", - "@aws-sdk/credential-provider-http": "3.940.0", - "@aws-sdk/credential-provider-login": "3.940.0", - "@aws-sdk/credential-provider-process": "3.940.0", - "@aws-sdk/credential-provider-sso": "3.940.0", - "@aws-sdk/credential-provider-web-identity": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.943.0.tgz", + "integrity": "sha512-BcLDb8l4oVW+NkuqXMlO7TnM6lBOWW318ylf4FRED/ply5eaGxkQYqdGvHSqGSN5Rb3vr5Ek0xpzSjeYD7C8Kw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.943.0", + "@aws-sdk/credential-provider-env": "3.943.0", + "@aws-sdk/credential-provider-http": "3.943.0", + "@aws-sdk/credential-provider-login": "3.943.0", + "@aws-sdk/credential-provider-process": "3.943.0", + "@aws-sdk/credential-provider-sso": "3.943.0", + "@aws-sdk/credential-provider-web-identity": "3.943.0", + "@aws-sdk/nested-clients": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -541,13 +541,13 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.940.0.tgz", - "integrity": "sha512-fOKC3VZkwa9T2l2VFKWRtfHQPQuISqqNl35ZhcXjWKVwRwl/o7THPMkqI4XwgT2noGa7LLYVbWMwnsgSsBqglg==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.943.0.tgz", + "integrity": "sha512-9iCOVkiRW+evxiJE94RqosCwRrzptAVPhRhGWv4osfYDhjNAvUMyrnZl3T1bjqCoKNcETRKEZIU3dqYHnUkcwQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", + "@aws-sdk/core": "3.943.0", + "@aws-sdk/nested-clients": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/protocol-http": "^5.3.5", @@ -560,17 +560,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.940.0.tgz", - "integrity": "sha512-M8NFAvgvO6xZjiti5kztFiAYmSmSlG3eUfr4ZHSfXYZUA/KUdZU/D6xJyaLnU8cYRWBludb6K9XPKKVwKfqm4g==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.943.0.tgz", + "integrity": "sha512-14eddaH/gjCWoLSAELVrFOQNyswUYwWphIt+PdsJ/FqVfP4ay2HsiZVEIYbQtmrKHaoLJhiZKwBQRjcqJDZG0w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.940.0", - "@aws-sdk/credential-provider-http": "3.940.0", - "@aws-sdk/credential-provider-ini": "3.940.0", - "@aws-sdk/credential-provider-process": "3.940.0", - "@aws-sdk/credential-provider-sso": "3.940.0", - "@aws-sdk/credential-provider-web-identity": "3.940.0", + "@aws-sdk/credential-provider-env": "3.943.0", + "@aws-sdk/credential-provider-http": "3.943.0", + "@aws-sdk/credential-provider-ini": "3.943.0", + "@aws-sdk/credential-provider-process": "3.943.0", + "@aws-sdk/credential-provider-sso": "3.943.0", + "@aws-sdk/credential-provider-web-identity": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/property-provider": "^4.2.5", @@ -583,12 +583,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.940.0.tgz", - "integrity": "sha512-pILBzt5/TYCqRsJb7vZlxmRIe0/T+FZPeml417EK75060ajDGnVJjHcuVdLVIeKoTKm9gmJc9l45gon6PbHyUQ==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.943.0.tgz", + "integrity": "sha512-GIY/vUkthL33AdjOJ8r9vOosKf/3X+X7LIiACzGxvZZrtoOiRq0LADppdiKIB48vTL63VvW+eRIOFAxE6UDekw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -600,14 +600,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.940.0.tgz", - "integrity": "sha512-q6JMHIkBlDCOMnA3RAzf8cGfup+8ukhhb50fNpghMs1SNBGhanmaMbZSgLigBRsPQW7fOk2l8jnzdVLS+BB9Uw==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.943.0.tgz", + "integrity": "sha512-1c5G11syUrru3D9OO6Uk+ul5e2lX1adb+7zQNyluNaLPXP6Dina6Sy6DFGRLu7tM8+M7luYmbS3w63rpYpaL+A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.940.0", - "@aws-sdk/core": "3.940.0", - "@aws-sdk/token-providers": "3.940.0", + "@aws-sdk/client-sso": "3.943.0", + "@aws-sdk/core": "3.943.0", + "@aws-sdk/token-providers": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -619,13 +619,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.940.0.tgz", - "integrity": "sha512-9QLTIkDJHHaYL0nyymO41H8g3ui1yz6Y3GmAN1gYQa6plXisuFBnGAbmKVj7zNvjWaOKdF0dV3dd3AFKEDoJ/w==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.943.0.tgz", + "integrity": "sha512-VtyGKHxICSb4kKGuaqotxso8JVM8RjCS3UYdIMOxUt9TaFE/CZIfZKtjTr+IJ7M0P7t36wuSUb/jRLyNmGzUUA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", + "@aws-sdk/core": "3.943.0", + "@aws-sdk/nested-clients": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -637,9 +637,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.940.0.tgz", - "integrity": "sha512-4pHgz9tuFJNSy/qoTbW5FqXPjoR4B18jB656UsE+TP5GWd7EPx7m4F0EUwIsD3OF5+KPiiyICi8zkxOs7erfQw==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.943.0.tgz", + "integrity": "sha512-B0LZgoD3zgWDy3qXgd+CaMLVhecc8PPYEDw8xLiciUwRkLAOJCyt/AuyLegeLXfQtgZnD+Th0V9MwPpM2DKmHA==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.5", @@ -654,7 +654,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.940.0" + "@aws-sdk/client-s3": "^3.943.0" } }, "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { @@ -701,15 +701,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.940.0.tgz", - "integrity": "sha512-WdsxDAVj5qaa5ApAP+JbpCOMHFGSmzjs2Y2OBSbWPeR9Ew7t/Okj+kUub94QJPsgzhvU1/cqNejhsw5VxeFKSQ==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.943.0.tgz", + "integrity": "sha512-J2oYbAQXTFEezs5m2Vij6H3w71K1hZfCtb85AsR/2Ovp/FjABMnK+Es1g1edRx6KuMTc9HkL/iGU4e+ek+qCZw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@aws-crypto/crc32c": "5.2.0", "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/is-array-buffer": "^4.2.0", "@smithy/node-config-provider": "^4.3.5", @@ -784,12 +784,12 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.940.0.tgz", - "integrity": "sha512-JYkLjgS1wLoKHJ40G63+afM1ehmsPsjcmrHirKh8+kSCx4ip7+nL1e/twV4Zicxr8RJi9Y0Ahq5mDvneilDDKQ==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.943.0.tgz", + "integrity": "sha512-kd2mALfthU+RS9NsPS+qvznFcPnVgVx9mgmStWCPn5Qc5BTnx4UAtm+HPA+XZs+zxOopp+zmAfE4qxDHRVONBA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-arn-parser": "3.893.0", "@smithy/core": "^3.18.5", @@ -823,12 +823,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.940.0.tgz", - "integrity": "sha512-nJbLrUj6fY+l2W2rIB9P4Qvpiy0tnTdg/dmixRxrU1z3e8wBdspJlyE+AZN4fuVbeL6rrRrO/zxQC1bB3cw5IA==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.943.0.tgz", + "integrity": "sha512-956n4kVEwFNXndXfhSAN5wO+KRgqiWEEY+ECwLvxmmO8uQ0NWOa8l6l65nTtyuiWzMX81c9BvlyNR5EgUeeUvA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@smithy/core": "^3.18.5", @@ -841,23 +841,23 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.940.0.tgz", - "integrity": "sha512-x0mdv6DkjXqXEcQj3URbCltEzW6hoy/1uIL+i8gExP6YKrnhiZ7SzuB4gPls2UOpK5UqLiqXjhRLfBb1C9i4Dw==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.943.0.tgz", + "integrity": "sha512-anFtB0p2FPuyUnbOULwGmKYqYKSq1M73c9uZ08jR/NCq6Trjq9cuF5TFTeHwjJyPRb4wMf2Qk859oiVfFqnQiw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.940.0", + "@aws-sdk/core": "3.943.0", "@aws-sdk/middleware-host-header": "3.936.0", "@aws-sdk/middleware-logger": "3.936.0", "@aws-sdk/middleware-recursion-detection": "3.936.0", - "@aws-sdk/middleware-user-agent": "3.940.0", + "@aws-sdk/middleware-user-agent": "3.943.0", "@aws-sdk/region-config-resolver": "3.936.0", "@aws-sdk/types": "3.936.0", "@aws-sdk/util-endpoints": "3.936.0", "@aws-sdk/util-user-agent-browser": "3.936.0", - "@aws-sdk/util-user-agent-node": "3.940.0", + "@aws-sdk/util-user-agent-node": "3.943.0", "@smithy/config-resolver": "^4.4.3", "@smithy/core": "^3.18.5", "@smithy/fetch-http-handler": "^5.3.6", @@ -906,12 +906,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.940.0.tgz", - "integrity": "sha512-ugHZEoktD/bG6mdgmhzLDjMP2VrYRAUPRPF1DpCyiZexkH7DCU7XrSJyXMvkcf0DHV+URk0q2sLf/oqn1D2uYw==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.943.0.tgz", + "integrity": "sha512-KKvmxNQ/FZbM6ml6nKd8ltDulsUojsXnMJNgf1VHTcJEbADC/6mVWOq0+e9D0WP1qixUBEuMjlS2HqD5KoqwEg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.940.0", + "@aws-sdk/middleware-sdk-s3": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/protocol-http": "^5.3.5", "@smithy/signature-v4": "^5.3.5", @@ -923,13 +923,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.940.0.tgz", - "integrity": "sha512-k5qbRe/ZFjW9oWEdzLIa2twRVIEx7p/9rutofyrRysrtEnYh3HAWCngAnwbgKMoiwa806UzcTRx0TjyEpnKcCg==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.943.0.tgz", + "integrity": "sha512-cRKyIzwfkS+XztXIFPoWORuaxlIswP+a83BJzelX4S1gUZ7FcXB4+lj9Jxjn8SbQhR4TPU3Owbpu+S7pd6IRbQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.940.0", - "@aws-sdk/nested-clients": "3.940.0", + "@aws-sdk/core": "3.943.0", + "@aws-sdk/nested-clients": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/property-provider": "^4.2.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -1006,12 +1006,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.940.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.940.0.tgz", - "integrity": "sha512-dlD/F+L/jN26I8Zg5x0oDGJiA+/WEQmnSE27fi5ydvYnpfQLwThtQo9SsNS47XSR/SOULaaoC9qx929rZuo74A==", + "version": "3.943.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.943.0.tgz", + "integrity": "sha512-gn+ILprVRrgAgTIBk2TDsJLRClzIOdStQFeFTcN0qpL8Z4GBCqMFhw7O7X+MM55Stt5s4jAauQ/VvoqmCADnQg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.940.0", + "@aws-sdk/middleware-user-agent": "3.943.0", "@aws-sdk/types": "3.936.0", "@smithy/node-config-provider": "^4.3.5", "@smithy/types": "^4.9.0", @@ -1044,9 +1044,9 @@ } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.1.tgz", - "integrity": "sha512-sIyFcoPZkTtNu9xFeEoynMef3bPJIAbOfUh+ueYcfhVl6xm2VRtMcMclSxmZCMnHHd4hlYKJeq/aggmBEWynww==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -3796,18 +3796,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "10.27.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.27.0.tgz", - "integrity": "sha512-Zc68kdH7tWTDtDbV1zWIbo3Jv0fHAU2NsF5aD2qamypKgfSIMSbWVxd22qZyDBkaX8gWIPm/0Sgx6aRXRBXrYQ==", + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.28.0.tgz", + "integrity": "sha512-9yFIPxyfWkDzt+IaRjboeNiXOKi22ZRGG3ELmZlLak8JCC+vA+q/+AmF/8Jnw59WlL3/KVC1Q8+t8bLCkxlswg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.27.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.27.0.tgz", - "integrity": "sha512-1cQZ4+QqV9juW64Jku1SMSz+PoZV+J59lotz4oYFvCNYzex8hRAnDKvNiKW1IVg5mEEkz98mg1fvcUtiw7GTiQ==", + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.28.0.tgz", + "integrity": "sha512-aih3iqagUU/9Xa6RObgdS9cKL3q5eerYNMJoO9SflMgeyhHBM5BRqo0IPSMQ9nuogrDBp443sgtW450VXYO7Bg==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -3840,9 +3840,9 @@ "@opentelemetry/sdk-trace-base": "^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0", "@prisma/instrumentation": "6.19.0", - "@sentry/core": "10.27.0", - "@sentry/node-core": "10.27.0", - "@sentry/opentelemetry": "10.27.0", + "@sentry/core": "10.28.0", + "@sentry/node-core": "10.28.0", + "@sentry/opentelemetry": "10.28.0", "import-in-the-middle": "^2", "minimatch": "^9.0.0" }, @@ -3851,14 +3851,14 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.27.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.27.0.tgz", - "integrity": "sha512-Dzo1I64Psb7AkpyKVUlR9KYbl4wcN84W4Wet3xjLmVKMgrCo2uAT70V4xIacmoMH5QLZAx0nGfRy9yRCd4nzBg==", + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.28.0.tgz", + "integrity": "sha512-OOmNtMSPHjiVb+dmTC9Lq+uIrC2FplZSdst033mH+ucBF7xjyY1/WAk02pw+hqNVFQKwaItqhGNFTmC7aST60Q==", "license": "MIT", "dependencies": { "@apm-js-collab/tracing-hooks": "^0.3.1", - "@sentry/core": "10.27.0", - "@sentry/opentelemetry": "10.27.0", + "@sentry/core": "10.28.0", + "@sentry/opentelemetry": "10.28.0", "import-in-the-middle": "^2" }, "engines": { @@ -3875,12 +3875,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.27.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.27.0.tgz", - "integrity": "sha512-z2vXoicuGiqlRlgL9HaYJgkin89ncMpNQy0Kje6RWyhpzLe8BRgUXlgjux7WrSrcbopDdC1OttSpZsJ/Wjk7fg==", + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.28.0.tgz", + "integrity": "sha512-SiSLN294vlxipDG0/FvMYIFmyXEffXmPvvdyp5DUqY8NyJytYPPUJ3DuQhc9XRVyEd9XeOgra661nxNIKPr1pg==", "license": "MIT", "dependencies": { - "@sentry/core": "10.27.0" + "@sentry/core": "10.28.0" }, "engines": { "node": ">=18" @@ -4024,9 +4024,9 @@ } }, "node_modules/@smithy/core": { - "version": "3.18.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.5.tgz", - "integrity": "sha512-6gnIz3h+PEPQGDj8MnRSjDvKBah042jEoPgjFGJ4iJLBE78L4lY/n98x14XyPF4u3lN179Ub/ZKFY5za9GeLQw==", + "version": "3.18.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.7.tgz", + "integrity": "sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-serde": "^4.2.6", @@ -4244,12 +4244,12 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.12.tgz", - "integrity": "sha512-9pAX/H+VQPzNbouhDhkW723igBMLgrI8OtX+++M7iKJgg/zY/Ig3i1e6seCcx22FWhE6Q/S61BRdi2wXBORT+A==", + "version": "4.3.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.14.tgz", + "integrity": "sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", + "@smithy/core": "^3.18.7", "@smithy/middleware-serde": "^4.2.6", "@smithy/node-config-provider": "^4.3.5", "@smithy/shared-ini-file-loader": "^4.4.0", @@ -4263,15 +4263,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.12.tgz", - "integrity": "sha512-S4kWNKFowYd0lID7/DBqWHOQxmxlsf0jBaos9chQZUWTVOjSW1Ogyh8/ib5tM+agFDJ/TCxuCTvrnlc+9cIBcQ==", + "version": "4.4.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.14.tgz", + "integrity": "sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.5", "@smithy/protocol-http": "^5.3.5", "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.10", "@smithy/types": "^4.9.0", "@smithy/util-middleware": "^4.2.5", "@smithy/util-retry": "^4.2.5", @@ -4438,13 +4438,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.8", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.8.tgz", - "integrity": "sha512-8xgq3LgKDEFoIrLWBho/oYKyWByw9/corz7vuh1upv7ZBm0ZMjGYBhbn6v643WoIqA9UTcx5A5htEp/YatUwMA==", + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.10.tgz", + "integrity": "sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.5", - "@smithy/middleware-endpoint": "^4.3.12", + "@smithy/core": "^3.18.7", + "@smithy/middleware-endpoint": "^4.3.14", "@smithy/middleware-stack": "^4.2.5", "@smithy/protocol-http": "^5.3.5", "@smithy/types": "^4.9.0", @@ -4545,13 +4545,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.11", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.11.tgz", - "integrity": "sha512-yHv+r6wSQXEXTPVCIQTNmXVWs7ekBTpMVErjqZoWkYN75HIFN5y9+/+sYOejfAuvxWGvgzgxbTHa/oz61YTbKw==", + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.13.tgz", + "integrity": "sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.10", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -4560,16 +4560,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.14.tgz", - "integrity": "sha512-ljZN3iRvaJUgulfvobIuG97q1iUuCMrvXAlkZ4msY+ZuVHQHDIqn7FKZCEj+bx8omz6kF5yQXms/xhzjIO5XiA==", + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.16.tgz", + "integrity": "sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.3", "@smithy/credential-provider-imds": "^4.2.5", "@smithy/node-config-provider": "^4.3.5", "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.8", + "@smithy/smithy-client": "^4.9.10", "@smithy/types": "^4.9.0", "tslib": "^2.6.2" }, @@ -5635,9 +5635,9 @@ } }, "node_modules/bowser": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.0.tgz", - "integrity": "sha512-yHAbSRuT6LTeKi6k2aS40csueHqgAsFEgmrOsfRyFpJnFv5O2hl9FYmWEUZ97gZ/dG17U4IQQcTx4YAFYPuWRQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "license": "MIT" }, "node_modules/brace-expansion": { @@ -9881,9 +9881,9 @@ } }, "node_modules/prettier": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.3.tgz", - "integrity": "sha512-QgODejq9K3OzoBbuyobZlUhznP5SKwPqp+6Q6xw6o8gnhr4O85L2U915iM2IDcfF2NPXVaM9zlo9tdwipnYwzg==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 6321aa2ed..1324d8add 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.45", + "version": "2.0.46", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,11 +57,11 @@ "node": ">=22" }, "dependencies": { - "@aws-sdk/client-s3": "^3.940.0", - "@aws-sdk/lib-storage": "^3.940.0", + "@aws-sdk/client-s3": "^3.943.0", + "@aws-sdk/lib-storage": "^3.943.0", "@mattermost/client": "11.1.0", "@ngrok/ngrok": "1.6.0", - "@sentry/node": "^10.27.0", + "@sentry/node": "^10.28.0", "async-mutex": "^0.5.0", "axios": "^1.13.2", "chokidar": "^5.0.0", @@ -100,7 +100,7 @@ "mocha": "^11.7.5", "node-fetch": "^3.3.2", "nodemon": "^3.1.11", - "prettier": "3.7.3", + "prettier": "3.7.4", "proxyquire": "^2.1.3", "should": "^13.2.3", "sinon": "^21.0.0", diff --git a/public/css/Room.css b/public/css/Room.css index df3ffd138..ba3353353 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -1740,9 +1740,36 @@ progress { border: var(--border); box-shadow: var(--box-shadow); border-radius: 10px; + box-sizing: border-box; /* overflow: hidden; */ } +/* Mobile optimizations */ +@media (max-width: 768px) { + #whiteboard { + padding: 5px; + border-radius: 5px; + } + + .whiteboard-header { + padding: 2px; + } + + .whiteboard-header-title button, + .whiteboard-header-options button { + padding: 5px; + font-size: 0.75rem; + min-width: 28px; + height: 28px; + } + + .whiteboardColorPicker { + width: 16px; + height: 12px; + margin: 1px; + } +} + /* #wbCanvas { border: var(--border); } */ @@ -1939,26 +1966,34 @@ progress { background: var(--body-bg); flex-direction: column; gap: 1.2rem; - padding: 0.5rem; + padding: 1.2rem; + border-radius: 12px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12); + border: 1px solid rgba(255, 215, 0, 0.18); + max-width: 100%; + box-sizing: border-box; } .sticky-note-colors-row { display: flex; gap: 1rem; width: 100%; + flex-wrap: wrap; } .sticky-note-textarea { width: 100%; padding: 12px; border: 2px solid rgba(255, 215, 0, 0.3); - border-radius: 8px; - background: rgba(255, 235, 59, 0.05); + border-radius: 10px; + background: rgba(255, 235, 59, 0.07); color: var(--text-color, #ffffff); font-size: 1rem; font-family: 'Segoe UI', Arial, sans-serif; resize: vertical; transition: all 0.3s ease; + box-shadow: 0 2px 8px rgba(255, 215, 0, 0.08); + box-sizing: border-box; } .sticky-note-color-group { @@ -1966,7 +2001,7 @@ progress { flex-direction: column; gap: 0.5rem; flex: 1; - min-width: 0; + min-width: 120px; } .sticky-note-color-label { @@ -1982,9 +2017,10 @@ progress { width: 100%; height: 50px; border: none !important; - border-radius: 8px; + border-radius: 10px; cursor: pointer; transition: all 0.3s ease; + box-shadow: 0 1px 4px rgba(255, 215, 0, 0.07); } .sticky-note-color-input:hover { @@ -1993,16 +2029,41 @@ progress { .sticky-note-color-input::-webkit-color-swatch-wrapper { padding: 4px; + border-radius: 10px; } .sticky-note-color-input::-webkit-color-swatch { border: none; - border-radius: 6px; + border-radius: 8px; } .sticky-note-color-input::-moz-color-swatch { border: none; - border-radius: 6px; + border-radius: 8px; +} + +/* Responsive styles for small screens */ +@media (max-width: 600px) { + .sticky-note-form { + padding: 0.7rem; + border-radius: 8px; + gap: 0.7rem; + } + .sticky-note-colors-row { + flex-direction: column; + gap: 0.7rem; + } + .sticky-note-color-group { + min-width: 0; + } + .sticky-note-textarea { + font-size: 0.95rem; + padding: 8px; + } + .sticky-note-color-input { + height: 38px; + border-radius: 8px; + } } /*-------------------------------------------------------------- diff --git a/public/css/Root.css b/public/css/Root.css index 325126a10..58ed7df54 100644 --- a/public/css/Root.css +++ b/public/css/Root.css @@ -8,8 +8,8 @@ --msger-height: 700px; --msger-bubble-width: 85%; --msger-bg: radial-gradient(#393939, #000000); - --wb-width: 800px; - --wb-height: 600px; + --wb-width: 1920px; + --wb-height: 1080px; --wb-bg: radial-gradient(#393939, #000000); --select-bg: #2c2c2c; --left-msg-bg: #252d31; diff --git a/public/js/Brand.js b/public/js/Brand.js index 1f60a6eb1..d32f48eb4 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.45', + title: 'WebRTC SFU v2.0.46', html: ` + + From 70185f90382c21695f852fe61f086598d5bf680c Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 15 Dec 2025 23:45:37 +0100 Subject: [PATCH 461/592] [mirotalksfu] - fix typo --- public/css/Room.css | 1 + 1 file changed, 1 insertion(+) diff --git a/public/css/Room.css b/public/css/Room.css index 92a251a5c..86349f735 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -443,6 +443,7 @@ body { } #bottomButtons .device-dropdown-toggle i { + color: #fff !important; font-size: 0.9rem; } From aa29bc4396c51e6b693e021072822993eff1ec44 Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Mon, 15 Dec 2025 23:57:50 +0100 Subject: [PATCH 462/592] [mirotalksfu] - fix typo --- public/js/Room.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index 2c5badae2..fbbbd83d1 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -4334,9 +4334,7 @@ function setupQuickDeviceSwitchDropdowns() { if (deviceChangeFrame) cancelAnimationFrame(deviceChangeFrame); deviceChangeFrame = requestAnimationFrame(async () => { try { - if (typeof refreshMyAudioVideoDevices === 'function') { - await refreshMyAudioVideoDevices(); - } + await refreshMyAudioVideoDevices(); } catch (err) { // ignore } From 07454306023f94acf48da166a2e0286f3d6c0f6e Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 16 Dec 2025 00:45:00 +0100 Subject: [PATCH 463/592] [mirotalksfu] - fix typo --- public/js/Room.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/js/Room.js b/public/js/Room.js index fbbbd83d1..d57437ba8 100644 --- a/public/js/Room.js +++ b/public/js/Room.js @@ -4310,8 +4310,8 @@ function setupQuickDeviceSwitchDropdowns() { } // Build menus when opening (click or hover) - videoDropdown.addEventListener('show.bs.dropdown', rebuildVideoMenu); - audioDropdown.addEventListener('show.bs.dropdown', rebuildAudioMenu); + videoDropdown.addEventListener('click', rebuildVideoMenu); + audioDropdown.addEventListener('click', rebuildAudioMenu); videoToggle.addEventListener('mouseenter', rebuildVideoMenu); audioToggle.addEventListener('mouseenter', rebuildAudioMenu); From 4eabbffc2d02746e697c86cb248fec87afd29c3e Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 16 Dec 2025 03:01:28 +0100 Subject: [PATCH 464/592] [mirotalksfu] - fix typo --- public/css/Room.css | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/public/css/Room.css b/public/css/Room.css index 86349f735..948249883 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -427,8 +427,9 @@ body { } #bottomButtons button { - width: 48px; - font-size: 1.4rem; + width: 50px; + height: 50px; + font-size: 1.6rem; padding: 10px; border-radius: 10px; background: var(--btns-bg-color); @@ -438,8 +439,13 @@ body { /* Quick device picker (Start Audio/Video) */ #bottomButtons .device-dropdown-toggle { - width: 28px; - padding: 10px 6px; + width: 25px; + height: 50px; + padding: 0; + display: inline-flex; + align-items: center; + justify-content: center; + line-height: 1; } #bottomButtons .device-dropdown-toggle i { @@ -468,13 +474,14 @@ body { #bottomButtons #startAudioDeviceMenu button, #bottomButtons #startVideoDeviceMenu button { display: flex; + width: 100%; align-items: center; justify-content: flex-start; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - width: 100%; + transform: none !important; } #bottomButtons button:hover { @@ -489,10 +496,18 @@ body { } #bottomButtons button { width: 38px; + height: 38px; font-size: 0.95rem; padding: 8px; margin: 0 1px; } + #bottomButtons .device-dropdown-toggle { + width: 19px; + height: 38px; + } + #bottomButtons .device-dropdown-toggle i { + font-size: 0.8rem; + } } @media screen and (max-width: 360px) { @@ -502,10 +517,18 @@ body { } #bottomButtons button { width: 28px; + height: 28px; font-size: 0.65rem; padding: 6px; margin: 0 1px; } + #bottomButtons .device-dropdown-toggle { + width: 14px; + height: 28px; + } + #bottomButtons .device-dropdown-toggle i { + font-size: 0.7rem; + } } #participantsButton { From 5e924543945d32ba78b2676bfc3db49f8f2d4a0f Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 16 Dec 2025 03:13:54 +0100 Subject: [PATCH 465/592] [mirotalksfu] - fix typo --- public/css/Room.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/css/Room.css b/public/css/Room.css index 948249883..8347440c3 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -439,7 +439,7 @@ body { /* Quick device picker (Start Audio/Video) */ #bottomButtons .device-dropdown-toggle { - width: 25px; + width: 35px; height: 50px; padding: 0; display: inline-flex; From 3487bfe0833d94e169a64597650190292c0e8a6c Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Tue, 16 Dec 2025 10:33:45 +0100 Subject: [PATCH 466/592] [mirotalksfu] - improve quick devices access UI --- .env.template | 2 +- app/src/Server.js | 2 +- app/src/config.template.js | 2 +- package-lock.json | 4 ++-- package.json | 2 +- public/css/Room.css | 17 +++++++++++++++-- public/js/Brand.js | 2 +- public/js/Room.js | 4 ++-- public/js/RoomClient.js | 2 +- 9 files changed, 25 insertions(+), 12 deletions(-) diff --git a/.env.template b/.env.template index 20909d357..a259ada0b 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk SFU v.2.0.60 - Environment Configuration +# MiroTalk SFU v.2.0.61 - Environment Configuration # ==================================================== # config.js - Main configuration with: diff --git a/app/src/Server.js b/app/src/Server.js index 87ccbfa07..933baf5cf 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -64,7 +64,7 @@ dev dependencies: { * @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 2.0.60 + * @version 2.0.61 * */ diff --git a/app/src/config.template.js b/app/src/config.template.js index 0e3f9418c..200c6e8c6 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk SFU v2.0.60 - Configuration File + * MiroTalk SFU v2.0.61 - Configuration File * ============================================== * * This file contains all configurable settings for the MiroTalk SFU application. diff --git a/package-lock.json b/package-lock.json index bfa5395e6..462e5d196 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mirotalksfu", - "version": "2.0.60", + "version": "2.0.61", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "2.0.60", + "version": "2.0.61", "license": "AGPL-3.0", "dependencies": { "@aws-sdk/client-s3": "^3.952.0", diff --git a/package.json b/package.json index 2595b06c1..021c2cdd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "2.0.60", + "version": "2.0.61", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { diff --git a/public/css/Room.css b/public/css/Room.css index 8347440c3..6751f40ba 100644 --- a/public/css/Room.css +++ b/public/css/Room.css @@ -453,6 +453,17 @@ body { font-size: 0.9rem; } +#bottomButtons .dropup .dropdown-menu { + z-index: 9999; + position: absolute; + left: 0; + padding: 10px 5px; + bottom: 14px !important; + border: var(--border); + background: var(--body-bg); + box-shadow: var(--box-shadow); +} + /* Override bottomButtons button rule for dropdown menu items */ #bottomButtons .dropdown-menu button { width: auto; @@ -466,15 +477,17 @@ body { /* Quick device picker dropdown menu: keep items left-aligned and avoid wrapping */ #bottomButtons #startAudioDeviceMenu, #bottomButtons #startVideoDeviceMenu { - min-width: 280px; - max-width: calc(100vw - 24px); + min-width: 280px !important; + max-width: calc(100vw - 24px) !important; text-align: left; + border: var(--border) !important; } #bottomButtons #startAudioDeviceMenu button, #bottomButtons #startVideoDeviceMenu button { display: flex; width: 100%; + height: 35px; align-items: center; justify-content: flex-start; text-align: left; diff --git a/public/js/Brand.js b/public/js/Brand.js index 62dddf4ed..cb09eb4b2 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -80,7 +80,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v2.0.60', + title: 'WebRTC SFU v2.0.61', html: ` - - -