diff --git a/.env.template b/.env.template index 3b8b35a7..ba306880 100644 --- a/.env.template +++ b/.env.template @@ -1,5 +1,5 @@ # ==================================================== -# MiroTalk P2P v.1.6.88 - Environment Configuration +# MiroTalk P2P v.1.6.89 - Environment Configuration # ==================================================== # App environment diff --git a/app/src/config.template.js b/app/src/config.template.js index 05c65798..a2946e62 100644 --- a/app/src/config.template.js +++ b/app/src/config.template.js @@ -2,7 +2,7 @@ /** * ============================================== - * MiroTalk P2P v.1.6.88 - Configuration File + * MiroTalk P2P v.1.6.89 - Configuration File * ============================================== * * Branding and customizations require a license: diff --git a/app/src/server.js b/app/src/server.js index 9f62f3cc..99aecd71 100755 --- a/app/src/server.js +++ b/app/src/server.js @@ -45,7 +45,7 @@ dependencies: { * @license For commercial use or closed source, contact us at license.mirotalk@gmail.com or purchase directly from CodeCanyon * @license CodeCanyon: https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661 * @author Miroslav Pejic - miroslav.pejic.85@gmail.com - * @version 1.6.88 + * @version 1.6.89 * */ diff --git a/package-lock.json b/package-lock.json index 6e375e56..e6c38763 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "mirotalk", - "version": "1.6.88", + "version": "1.6.89", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalk", - "version": "1.6.88", + "version": "1.6.89", "license": "AGPL-3.0", "dependencies": { "@mattermost/client": "11.2.0", "@ngrok/ngrok": "1.7.0", - "@sentry/node": "^10.32.0", + "@sentry/node": "^10.32.1", "axios": "^1.13.2", "chokidar": "^5.0.0", "colors": "^1.4.0", @@ -30,7 +30,7 @@ "jsdom": "^27.3.0", "jsonwebtoken": "^9.0.3", "nodemailer": "^7.0.11", - "openai": "^6.14.0", + "openai": "^6.15.0", "qs": "^6.14.0", "socket.io": "^4.8.1", "swagger-ui-express": "^5.0.1", @@ -43,7 +43,7 @@ "prettier": "3.7.4", "proxyquire": "^2.1.3", "should": "^13.2.3", - "sinon": "^21.0.0" + "sinon": "^21.0.1" } }, "node_modules/@acemir/cssom": { @@ -1107,18 +1107,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "10.32.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.32.0.tgz", - "integrity": "sha512-E+ihb8+5PBfYMamnXHalgsmxkcG2YQqhRdgYf3yWJ5dJvi4njh1VWK3kNVj1GvsU6ktaielAx4Rg5dwEFMnbZg==", + "version": "10.32.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.32.1.tgz", + "integrity": "sha512-PH2ldpSJlhqsMj2vCTyU0BI2Fx1oIDhm7Izo5xFALvjVCS0gmlqHt1udu6YlKn8BtpGH6bGzssvv5APrk+OdPQ==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.32.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.32.0.tgz", - "integrity": "sha512-KENGLH34gUlrNd9QVJFp37w64DZmorWarm67sFJ2J+VmBII0JMkbIJy1SdHyHxGtgitbokotMTjjf9isVnWwlw==", + "version": "10.32.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.32.1.tgz", + "integrity": "sha512-oxlybzt8QW0lx/QaEj1DcvZDRXkgouewFelu/10dyUwv5So3YvipfvWInda+yMLmn25OggbloDQ0gyScA2jU3g==", "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -1151,9 +1151,9 @@ "@opentelemetry/sdk-trace-base": "^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0", "@prisma/instrumentation": "6.19.0", - "@sentry/core": "10.32.0", - "@sentry/node-core": "10.32.0", - "@sentry/opentelemetry": "10.32.0", + "@sentry/core": "10.32.1", + "@sentry/node-core": "10.32.1", + "@sentry/opentelemetry": "10.32.1", "import-in-the-middle": "^2", "minimatch": "^9.0.0" }, @@ -1162,14 +1162,14 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.32.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.32.0.tgz", - "integrity": "sha512-O+TVuF1fO0j37W6IzdHCpTIr4uUkFzcSKgxNmH9ihYpRzkQgfLDZJWVxtov+H8/1pC5lkvl2VZhWmY+SWj2kHA==", + "version": "10.32.1", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.32.1.tgz", + "integrity": "sha512-w56rxdBanBKc832zuwnE+zNzUQ19fPxfHEtOhK8JGPu3aSwQYcIxwz9z52lOx3HN7k/8Fj5694qlT3x/PokhRw==", "license": "MIT", "dependencies": { "@apm-js-collab/tracing-hooks": "^0.3.1", - "@sentry/core": "10.32.0", - "@sentry/opentelemetry": "10.32.0", + "@sentry/core": "10.32.1", + "@sentry/opentelemetry": "10.32.1", "import-in-the-middle": "^2" }, "engines": { @@ -1186,12 +1186,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.32.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.32.0.tgz", - "integrity": "sha512-owGL94JAgbwxgaeUNLktJWMShZPo04ZKTaQhhLz3YmVDJFj8VFOQXdWBMqv1Gv6T6/fCuTlwzJ3rvpSOImxXUQ==", + "version": "10.32.1", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.32.1.tgz", + "integrity": "sha512-YLssSz5Y+qPvufrh2cDaTXDoXU8aceOhB+YTjT8/DLF6SOj7Tzen52aAcjNaifawaxEsLCC8O+B+A2iA+BllvA==", "license": "MIT", "dependencies": { - "@sentry/core": "10.32.0" + "@sentry/core": "10.32.1" }, "engines": { "node": ">=18" @@ -1248,9 +1248,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.0.tgz", + "integrity": "sha512-cqfapCxwTGsrR80FEgOoPsTonoefMBY7dnUEbQ+GRcved0jvkJLzvX6F4WtN+HBqbPX/SiFsIRUp+IrCW/2I2w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1258,14 +1258,13 @@ } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", - "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", + "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", "type-detect": "^4.1.0" } }, @@ -4397,14 +4396,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5051,9 +5042,9 @@ } }, "node_modules/openai": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-6.14.0.tgz", - "integrity": "sha512-ZPD9MG5/sPpyGZ0idRoDK0P5MWEMuXe0Max/S55vuvoxqyEVkN94m9jSpE3YgNgz3WoESFvozs57dxWqAco31w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-6.15.0.tgz", + "integrity": "sha512-F1Lvs5BoVvmZtzkUEVyh8mDQPPFolq4F+xdsx/DO8Hee8YF3IGAlZqUIsF+DVGhqf4aU0a3bTghsxB6OIsRy1g==", "license": "Apache-2.0", "bin": { "openai": "bin/cli" @@ -6093,16 +6084,16 @@ } }, "node_modules/sinon": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.0.tgz", - "integrity": "sha512-TOgRcwFPbfGtpqvZw+hyqJDvqfapr1qUlOizROIk4bBLjlsjlB00Pg6wMFXNtJRpu+eCZuVOaLatG7M8105kAw==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-21.0.1.tgz", + "integrity": "sha512-Z0NVCW45W8Mg5oC/27/+fCqIHFnW8kpkFOq0j9XJIev4Ld0mKmERaZv5DMLAb9fGCevjKwaEeIQz5+MBXfZcDw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", "supports-color": "^7.2.0" }, "funding": { @@ -6110,6 +6101,16 @@ "url": "https://opencollective.com/sinon" } }, + "node_modules/sinon/node_modules/diff": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", + "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index ca1953b8..ea20e5eb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalk", - "version": "1.6.88", + "version": "1.6.89", "description": "A free WebRTC browser-based video call", "main": "server.js", "scripts": { @@ -43,7 +43,7 @@ "dependencies": { "@mattermost/client": "11.2.0", "@ngrok/ngrok": "1.7.0", - "@sentry/node": "^10.32.0", + "@sentry/node": "^10.32.1", "axios": "^1.13.2", "chokidar": "^5.0.0", "colors": "^1.4.0", @@ -62,7 +62,7 @@ "jsdom": "^27.3.0", "jsonwebtoken": "^9.0.3", "nodemailer": "^7.0.11", - "openai": "^6.14.0", + "openai": "^6.15.0", "qs": "^6.14.0", "socket.io": "^4.8.1", "swagger-ui-express": "^5.0.1", @@ -75,6 +75,6 @@ "prettier": "3.7.4", "proxyquire": "^2.1.3", "should": "^13.2.3", - "sinon": "^21.0.0" + "sinon": "^21.0.1" } } diff --git a/public/css/client.css b/public/css/client.css index 2931c2ac..238c6e29 100755 --- a/public/css/client.css +++ b/public/css/client.css @@ -426,7 +426,8 @@ body { transform: none !important; } -/* Quick device picker (Audio): section headers + divider (Microphones / Speakers) */ +/* Quick device picker: section headers + divider (Cameras / Microphones / Speakers) */ +#bottomButtons #videoMenu .device-menu-header, #bottomButtons #audioMenu .device-menu-header { display: flex; align-items: center; @@ -439,11 +440,13 @@ body { user-select: none; } +#bottomButtons #videoMenu .device-menu-header i, #bottomButtons #audioMenu .device-menu-header i { width: 18px; text-align: center; } +#bottomButtons #videoMenu .device-menu-divider, #bottomButtons #audioMenu .device-menu-divider { height: 1px; background: var(--btns-bg-color); @@ -451,6 +454,30 @@ body { margin: 8px 0; } +/* Action buttons in device menu */ +#bottomButtons #audioMenu .device-menu-action-btn, +#bottomButtons #videoMenu .device-menu-action-btn { + background: var(--body-bg); + border: 1px solid var(--border-color); + color: #fff; + font-weight: 500; + gap: 8px; + transition: all 0.2s ease; +} + +#bottomButtons #audioMenu .device-menu-action-btn:hover, +#bottomButtons #videoMenu .device-menu-action-btn:hover { + background: var(--btns-bg-color) !important; + border-color: var(--btns-color); + transform: translateY(-1px) !important; +} + +#bottomButtons #audioMenu .device-menu-action-btn i, +#bottomButtons #videoMenu .device-menu-action-btn i { + width: 18px; + text-align: center; +} + #bottomButtons button:hover { background: var(--body-bg); transform: var(--btns-hover-scale); diff --git a/public/js/brand.js b/public/js/brand.js index 06c1eb7f..ee686fe2 100644 --- a/public/js/brand.js +++ b/public/js/brand.js @@ -77,7 +77,7 @@ let brand = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC P2P v1.6.88', + title: 'WebRTC P2P v1.6.89', html: `