diff --git a/app/src/Server.js b/app/src/Server.js index fbf247fa..3069c4e3 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.25 + * @version 1.9.26 * */ diff --git a/package-lock.json b/package-lock.json index d217afc3..192821bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "mirotalksfu", - "version": "1.9.25", + "version": "1.9.26", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mirotalksfu", - "version": "1.9.25", + "version": "1.9.26", "license": "AGPL-3.0", "dependencies": { - "@aws-sdk/client-s3": "^3.863.0", - "@aws-sdk/lib-storage": "^3.863.0", + "@aws-sdk/client-s3": "^3.864.0", + "@aws-sdk/lib-storage": "^3.864.0", "@mattermost/client": "10.9.0", "@ngrok/ngrok": "1.5.2", - "@sentry/node": "^10.2.0", + "@sentry/node": "^10.3.0", "async-mutex": "^0.5.0", "axios": "^1.11.0", "chokidar": "^4.0.3", @@ -36,7 +36,7 @@ "mediasoup": "3.18.0", "mediasoup-client": "3.14.0", "nodemailer": "^7.0.5", - "openai": "^5.12.1", + "openai": "^5.12.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.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.863.0.tgz", - "integrity": "sha512-12iPziQtTolNiWFlN7Bg4jDfh1eOVB0hW6bsP1cI3JVr/IF0pVvPjQ1WEUhjTlOujC/U+JaYjw3iQ7nWKHX6vQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.864.0.tgz", + "integrity": "sha512-QGYi9bWliewxumsvbJLLyx9WC0a4DP4F+utygBcq0zwPxaM0xDfBspQvP1dsepi7mW5aAjZmJ2+Xb7X0EhzJ/g==", "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.863.0", - "@aws-sdk/credential-provider-node": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", "@aws-sdk/middleware-bucket-endpoint": "3.862.0", "@aws-sdk/middleware-expect-continue": "3.862.0", - "@aws-sdk/middleware-flexible-checksums": "3.863.0", + "@aws-sdk/middleware-flexible-checksums": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-location-constraint": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/middleware-ssec": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", - "@aws-sdk/signature-v4-multi-region": "3.863.0", + "@aws-sdk/signature-v4-multi-region": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@aws-sdk/xml-builder": "3.862.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", @@ -379,23 +379,23 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.863.0.tgz", - "integrity": "sha512-3DZE5lx5A+MgTVS8yRBz/Ne8pWvwc7tDy4KBx5sDd93wvnDYjZW28g7W73d1dD7jfN8ZIC0REtiuNj00Ty0PBg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.864.0.tgz", + "integrity": "sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -428,9 +428,9 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.863.0.tgz", - "integrity": "sha512-6KUD82jb8Z+PWRoAwqpjFcrhcCvUlKNfUKKdkhj2yEdugem36d29avTpTPa6RiOEsfUi7CM4Yh60Qrj0pNI4xQ==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.864.0.tgz", + "integrity": "sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==", "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.862.0", @@ -454,12 +454,12 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.863.0.tgz", - "integrity": "sha512-KmA5cjJU5ihR+oFJtraraeQ7aDSp3GtogSoBUKaHBsiSP7awgxuVcAWSr8wCxi0kPUjCE7kHSLTv4i9UC4soYw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.864.0.tgz", + "integrity": "sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -470,12 +470,12 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.863.0.tgz", - "integrity": "sha512-AsMgQgYG5YwBFHAuB5y/ngwT9K2axBqJm1ZM+wBMTqPvyQ7cjnfsliCAGEY2QPIxE2prX85Bc50s1OPQVPROHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.864.0.tgz", + "integrity": "sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/fetch-http-handler": "^5.1.1", "@smithy/node-http-handler": "^4.1.1", @@ -491,18 +491,18 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.863.0.tgz", - "integrity": "sha512-RyyUZ7onXQdcjTnnmX3LvO3/tKsmYR9PJrLCnQQUVYlUzwref4E0ytBgk/mycxx6KHCJNVUzY4QV7s9VaUxcZA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.864.0.tgz", + "integrity": "sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -515,17 +515,17 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.863.0.tgz", - "integrity": "sha512-ApRpvgB+DN4BHVmiLvXIdpFN21wBdL5p81G5cXmipJHStThAkk2N9SSG0XxhMaCpzdRWt+4JPRwR5pHiPvnxug==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.864.0.tgz", + "integrity": "sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.863.0", - "@aws-sdk/credential-provider-http": "3.863.0", - "@aws-sdk/credential-provider-ini": "3.863.0", - "@aws-sdk/credential-provider-process": "3.863.0", - "@aws-sdk/credential-provider-sso": "3.863.0", - "@aws-sdk/credential-provider-web-identity": "3.863.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-ini": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/credential-provider-imds": "^4.0.7", "@smithy/property-provider": "^4.0.5", @@ -538,12 +538,12 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.863.0.tgz", - "integrity": "sha512-UN8AfjFvLGIHg2lMr4SNiOhCsDUv6uaD/XbAiRpt/u0z/xMsICxwkOawnKtHj24xGRAh+GgefMirl6QiTkbJ4Q==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.864.0.tgz", + "integrity": "sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -555,14 +555,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.863.0.tgz", - "integrity": "sha512-oV4F1zY0o/txR9ruTCH+UlRf7LAKBiwkthsHplNJT0kVq98RtBIMrzk9DgibvjfBsJH1572wozDIc4yOpcB4YA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.864.0.tgz", + "integrity": "sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.863.0", - "@aws-sdk/core": "3.863.0", - "@aws-sdk/token-providers": "3.863.0", + "@aws-sdk/client-sso": "3.864.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/token-providers": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -574,13 +574,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.863.0.tgz", - "integrity": "sha512-INN5BNFalw68BxBFT+9sj2Yxia1XvS0+ZG0dkfFAmo8iXb2mw0o52PgqOiKlQfxnjbyOH7LgTB2hfbuuEwpKjw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.864.0.tgz", + "integrity": "sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/types": "^4.3.2", @@ -591,9 +591,9 @@ } }, "node_modules/@aws-sdk/lib-storage": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.863.0.tgz", - "integrity": "sha512-Klnlb0TVHGqG2I9N7S8ySyZq8xBLz0e97EnedE6xE0ShEOJNUCR4SOFwGJMqpxoZdq/S278NpxOX5+ZQcmvHVg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.864.0.tgz", + "integrity": "sha512-Me/HlMXXPv3tStPQufdwnYGholY14JmmzCdOjhnG7gnaClBEnroZKcHuQhrgMm+KyfbzCQ2+9YHsULOfFrg7Mw==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.5", @@ -608,7 +608,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@aws-sdk/client-s3": "^3.863.0" + "@aws-sdk/client-s3": "^3.864.0" } }, "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { @@ -655,15 +655,15 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.863.0.tgz", - "integrity": "sha512-nZW9Rf4floAuxmPeik1FJ7/LwEnmWjdgoa0ls/x/KpAVM+LCbEBOV1Tcw2+jRpx3UQH4wAnJz18OFsXC+X/FAw==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.864.0.tgz", + "integrity": "sha512-MvakvzPZi9uyP3YADuIqtk/FAcPFkyYFWVVMf5iFs/rCdk0CUzn02Qf4CSuyhbkS6Y0KrAsMgKR4MgklPU79Wg==", "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.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/is-array-buffer": "^4.0.0", "@smithy/node-config-provider": "^4.1.4", @@ -737,12 +737,12 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.863.0.tgz", - "integrity": "sha512-3Ppx5J31DUuaASyzAMYzSUf8y8emCLt1iaU+6yuSV/PwiCzJL5Sspos5xF2F+JErw8p8lNN+7rvHVSNqtgi2Fg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.864.0.tgz", + "integrity": "sha512-GjYPZ6Xnqo17NnC8NIQyvvdzzO7dm+Ks7gpxD/HsbXPmV2aEfuFveJXneGW9e1BheSKFff6FPDWu8Gaj2Iu1yg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-arn-parser": "3.804.0", "@smithy/core": "^3.8.0", @@ -776,12 +776,12 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.863.0.tgz", - "integrity": "sha512-AqXzUUpHM51E/cmq/h3yja+GFff7zxQFj6Fq1bVkkc4vzXBCGpyTmaMcUv4rrR/OmmWfidyzbxdy7PuhMNAspg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.864.0.tgz", + "integrity": "sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@smithy/core": "^3.8.0", @@ -794,23 +794,23 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.863.0.tgz", - "integrity": "sha512-TgVr6d1MmJz7H6RehaFevZlJ+d1KSmyftp8oi2V5FCQ4OR22ITsTxmm5cIODYk8VInaie2ZABlPCN5fs+glJuA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.864.0.tgz", + "integrity": "sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.863.0", + "@aws-sdk/core": "3.864.0", "@aws-sdk/middleware-host-header": "3.862.0", "@aws-sdk/middleware-logger": "3.862.0", "@aws-sdk/middleware-recursion-detection": "3.862.0", - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/region-config-resolver": "3.862.0", "@aws-sdk/types": "3.862.0", "@aws-sdk/util-endpoints": "3.862.0", "@aws-sdk/util-user-agent-browser": "3.862.0", - "@aws-sdk/util-user-agent-node": "3.863.0", + "@aws-sdk/util-user-agent-node": "3.864.0", "@smithy/config-resolver": "^4.1.5", "@smithy/core": "^3.8.0", "@smithy/fetch-http-handler": "^5.1.1", @@ -860,12 +860,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.863.0.tgz", - "integrity": "sha512-YEi1hER4OtVpeVBO9Ts8nYekF8Q9pcr4kzPxrzXHv83i2/jraPgacHlWvNSjdg8kvY+GsevBsirZXZmThkmKBA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.864.0.tgz", + "integrity": "sha512-w2HIn/WIcUyv1bmyCpRUKHXB5KdFGzyxPkp/YK5g+/FuGdnFFYWGfcO8O+How4jwrZTarBYsAHW9ggoKvwr37w==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.863.0", + "@aws-sdk/middleware-sdk-s3": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/protocol-http": "^5.1.3", "@smithy/signature-v4": "^5.1.3", @@ -877,13 +877,13 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.863.0.tgz", - "integrity": "sha512-rGZ8QsnLWa725etzdPW2rH6+LN9eCcGsTIcxcCyh59cSgZLxT913q84WaUj6fOA7ElCOEU+WrV4Jiz4qwZI2DA==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.864.0.tgz", + "integrity": "sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.863.0", - "@aws-sdk/nested-clients": "3.863.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/property-provider": "^4.0.5", "@smithy/shared-ini-file-loader": "^4.0.5", @@ -960,12 +960,12 @@ } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.863.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.863.0.tgz", - "integrity": "sha512-qoYXCe07xs0z+MjcDGuNBbP8P47i6h13BiHsXxiMKKiCihB3w2slvRbJYwUwc2fzZWSk0isKbdDmsdNZBKyBHg==", + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.864.0.tgz", + "integrity": "sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.863.0", + "@aws-sdk/middleware-user-agent": "3.864.0", "@aws-sdk/types": "3.862.0", "@smithy/node-config-provider": "^4.1.4", "@smithy/types": "^4.3.2", @@ -3725,18 +3725,18 @@ "license": "Apache-2.0" }, "node_modules/@sentry/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.2.0.tgz", - "integrity": "sha512-2QOuo2B26oReum9CxizK+c96FlV5oI6nsNjKgIYfrT+BTAAR3OlD/pzfJtxo3ydYzfU33Zdtu9XTWvhEAlHeZQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.3.0.tgz", + "integrity": "sha512-FEFCqiGkzJrm6TNJvhyjhc4rpC1Kmo/abYOACRd6MLvm8GBz41eFFKxsNxGZAUA3Fk1tR2mPfXIHOJzS0ulVww==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.2.0.tgz", - "integrity": "sha512-nUMlQv3Qx4j8pgKKW/vzYUBfb/yB1ZRkxq/4V0X2fM0oN1X8e+2O3II4wdbydlagnmmebi1fZ9a5Y4TehDm7Tw==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.3.0.tgz", + "integrity": "sha512-q7jO5V6B3mGZBy7cZBa/meecMBH8GqurcHDxsNa9S99pM7wEoDteRmRCJXKWSJqCr3PD9QrJI4e1X8YBJu7XSw==", "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.13.0", - "@sentry/core": "10.2.0", - "@sentry/node-core": "10.2.0", - "@sentry/opentelemetry": "10.2.0", + "@sentry/core": "10.3.0", + "@sentry/node-core": "10.3.0", + "@sentry/opentelemetry": "10.3.0", "import-in-the-middle": "^1.14.2", "minimatch": "^9.0.0" }, @@ -3780,13 +3780,13 @@ } }, "node_modules/@sentry/node-core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.2.0.tgz", - "integrity": "sha512-LVgTLgFFAJmt16JbFe3AQQofsKHkWaZ0PgrJZoRkxy2rW0DgJ0FnW8vZGexj8YPxjTefPGgycc59TVGOLQ7kIg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.3.0.tgz", + "integrity": "sha512-JLkm9GpZbSwT2j+tIlcXA/iCWydIOy4EDjXqE7OCqXRnGlWbqA0jtQtwGJV/ma4ktfgOIRVAc9nXE3dNPMoBPw==", "license": "MIT", "dependencies": { - "@sentry/core": "10.2.0", - "@sentry/opentelemetry": "10.2.0", + "@sentry/core": "10.3.0", + "@sentry/opentelemetry": "10.3.0", "import-in-the-middle": "^1.14.2" }, "engines": { @@ -3803,12 +3803,12 @@ } }, "node_modules/@sentry/opentelemetry": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.2.0.tgz", - "integrity": "sha512-KArr044E8X5iml00EtoqLcaTG9Gp/GSJB5zJjV9GIWr1mho/x2TT5yREeSnVSfAmh7WldDRgJfPrwCkAXZ4fEA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.3.0.tgz", + "integrity": "sha512-tjXcKLnGycfcSgN4juVyOUGL1t21io3sDROnnAPCCLSHXu+/yqS4Ff1zNYxhxSfUYpoM8Cf2O1kwl4H0+DKvNQ==", "license": "MIT", "dependencies": { - "@sentry/core": "10.2.0" + "@sentry/core": "10.3.0" }, "engines": { "node": ">=18" @@ -8560,9 +8560,9 @@ } }, "node_modules/openai": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.1.tgz", - "integrity": "sha512-26s536j4Fi7P3iUma1S9H33WRrw0Qu8pJ2nYJHffrlKHPU0JK4d0r3NcMgqEcAeTdNLGYNyoFsqN4g4YE9vutg==", + "version": "5.12.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-5.12.2.tgz", + "integrity": "sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==", "license": "Apache-2.0", "bin": { "openai": "bin/cli" diff --git a/package.json b/package.json index d9fcbae6..c65e7b1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mirotalksfu", - "version": "1.9.25", + "version": "1.9.26", "description": "WebRTC SFU browser-based video calls", "main": "Server.js", "scripts": { @@ -57,11 +57,11 @@ "node": ">=18" }, "dependencies": { - "@aws-sdk/client-s3": "^3.863.0", - "@aws-sdk/lib-storage": "^3.863.0", + "@aws-sdk/client-s3": "^3.864.0", + "@aws-sdk/lib-storage": "^3.864.0", "@mattermost/client": "10.9.0", "@ngrok/ngrok": "1.5.2", - "@sentry/node": "^10.2.0", + "@sentry/node": "^10.3.0", "async-mutex": "^0.5.0", "axios": "^1.11.0", "chokidar": "^4.0.3", @@ -84,7 +84,7 @@ "mediasoup": "3.18.0", "mediasoup-client": "3.14.0", "nodemailer": "^7.0.5", - "openai": "^5.12.1", + "openai": "^5.12.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 dfd7a01e..8d5d0c6e 100644 --- a/public/js/Brand.js +++ b/public/js/Brand.js @@ -99,7 +99,7 @@ let BRAND = { }, about: { imageUrl: '../images/mirotalk-logo.gif', - title: 'WebRTC SFU v1.9.25', + title: 'WebRTC SFU v1.9.26', html: ` handleVirtualBackground(null, null) ); + // Create High Blur Image createImage('initHighBlurImg', image.blurHigh, 'High Blur', 'high', () => handleVirtualBackground(20)); + // Create Low Blur Image createImage('initLowBlurImg', image.blurLow, 'Low Blur', 'low', () => handleVirtualBackground(10)); @@ -5528,7 +5530,7 @@ function showAbout() { position: 'center', imageUrl: BRAND.about?.imageUrl && BRAND.about.imageUrl.trim() !== '' ? BRAND.about.imageUrl : image.about, customClass: { image: 'img-about' }, - title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.9.25', + title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.9.26', html: ` diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 65b40ee6..a672a7b9 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -9,7 +9,7 @@ * @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.25 + * @version 1.9.26 * */ @@ -1956,6 +1956,7 @@ class RoomClient { ); // Create High Blur Image createImage('highBlurImg', image.blurHigh, 'High Blur', 'high', () => handleVirtualBackground(20)); + // Create Low Blur Image createImage('lowBlurImg', image.blurLow, 'Low Blur', 'low', () => handleVirtualBackground(10)); @@ -2112,16 +2113,16 @@ class RoomClient { virtualBackgroundSelectedImage = null; virtualBackgroundTransparent = null; } else if (backgroundImage) { - virtualBackgroundSelectedImage = backgroundImage; virtualBackgroundBlurLevel = null; + virtualBackgroundSelectedImage = backgroundImage; virtualBackgroundTransparent = null; } else if (backgroundTransparent) { + virtualBackgroundBlurLevel = null; + virtualBackgroundSelectedImage = null; virtualBackgroundTransparent = true; - virtualBackgroundBlurLevel = null; - virtualBackgroundSelectedImage = null; } else { - virtualBackgroundSelectedImage = null; virtualBackgroundBlurLevel = null; + virtualBackgroundSelectedImage = null; virtualBackgroundTransparent = null; } diff --git a/public/js/VirtualBackground.js b/public/js/VirtualBackground.js index 69bd3bee..f7af401c 100644 --- a/public/js/VirtualBackground.js +++ b/public/js/VirtualBackground.js @@ -43,7 +43,11 @@ class VirtualBackground { async initializeSegmentation() { // Initialize the segmentation model if not already done - if (this.initialized) return; + if (this.initialized) { + console.log('✅ Segmentation already initialized'); + return; + } + try { this.segmentation = new SelfieSegmentation({ locateFile: (file) => `https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation/${file}`, @@ -85,6 +89,12 @@ class VirtualBackground { } processFrame(videoFrame, controller, imageBitmap, maskHandler, segmentationMask) { + if (!controller) { + console.warn('Controller invalid, closing frames'); + this.closeFrames(videoFrame, imageBitmap); + return; + } + try { const canvas = new OffscreenCanvas(videoFrame.displayWidth, videoFrame.displayHeight); const ctx = canvas.getContext('2d'); @@ -101,8 +111,16 @@ class VirtualBackground { alpha: 'keep', // Ensure transparency is preserved }); - // Enqueue the processed frame to continue the stream - controller.enqueue(processedFrame); + try { + // Enqueue the processed frame to continue the stream + controller.enqueue(processedFrame); + } catch (enqueueError) { + console.warn('Failed to enqueue frame', enqueueError); + // Close the processed frame if enqueue fails + if (!processedFrame.closed) { + processedFrame.close(); + } + } } catch (error) { console.error('❌ Frame processing error:', error); } finally { @@ -128,6 +146,9 @@ class VirtualBackground { ); } + // Stop current processing before starting new one + await this.stopCurrentProcessor(); + // Initialize segmentation if not already done await this.initializeSegmentation(); @@ -177,12 +198,14 @@ class VirtualBackground { this.frameCounter++; // Increment frame counter } catch (error) { console.error('❌ Frame transformation error:', error); - } finally { - // Close the video frame after processing this.closeFrames(videoFrame, imageBitmap); } }, - flush: () => this.cleanPendingFrames(), // Clean up any pending frames when the stream ends + flush: () => { + // Clean up any pending frames when the stream ends + console.log('Transform stream flushing...'); + this.cleanPendingFrames(); + }, }); // Store active streams @@ -190,13 +213,28 @@ class VirtualBackground { this.activeGenerator = generator; this.isProcessing = true; - // Start the processing pipeline - processor.readable - .pipeThrough(transformer) - .pipeTo(generator.writable) - .catch(async () => await this.stopCurrentProcessor()); + try { + // Pipeline error handling without recursive calls + const pipelinePromise = processor.readable.pipeThrough(transformer).pipeTo(generator.writable); - return new MediaStream([generator]); + // Handle errors without awaiting (prevents blocking and recursion) + pipelinePromise.catch(() => { + // Only stop if we're still processing (avoid recursive calls) + if (this.isProcessing && this.activeProcessor) { + console.log('Stopping processor due to pipeline error...'); + // Don't await this - let it run async to avoid recursion + this.stopCurrentProcessor().catch((stopError) => { + console.warn('Error during processor cleanup:', stopError); + }); + } + }); + + return new MediaStream([generator]); + } catch (error) { + console.error('Error setting up processing pipeline', error); + await this.stopCurrentProcessor(); + throw error; + } } cleanPendingFrames() { @@ -205,11 +243,15 @@ class VirtualBackground { const { videoFrame, imageBitmap } = this.pendingFrames.pop(); this.closeFrames(videoFrame, imageBitmap); } + this.pendingFrames = []; + console.log('✅ Cleaned pending frames'); } async stopCurrentProcessor() { - // Stop any ongoing processor and clean up resources - if (!this.activeProcessor) return; + if (!this.activeProcessor) { + console.warn('⚠️ No active processing to stop'); + return; + } this.isProcessing = false; this.cleanPendingFrames(); @@ -227,7 +269,7 @@ class VirtualBackground { console.log('✅ Processor successfully stopped'); } catch (error) { - console.error('❌ Processor shutdown error:', error); + console.error('❌ Processor shutdown error', error); } finally { // Reset active processor and generator this.activeProcessor = null;