[mirotalksfu] - improve error logs, update dep

هذا الالتزام موجود في:
Miroslav Pejic
2025-03-12 11:45:54 +01:00
الأصل 77c7292f78
التزام 19a3d6f4b2
5 ملفات معدلة مع 94 إضافات و42 حذوفات

عرض الملف

@@ -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 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 * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com * @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.7.77 * @version 1.7.78
* *
*/ */
@@ -1653,9 +1653,9 @@ function startServer() {
const { room, peer } = getRoomAndPeer(socket); const { room, peer } = getRoomAndPeer(socket);
const { peer_name } = peer || 'undefined'; const peerInfo = getPeerInfo(peer);
log.debug('Get RouterRtpCapabilities', peer_name); log.debug('Get RouterRtpCapabilities', peerInfo);
try { try {
const getRouterRtpCapabilities = room.getRtpCapabilities(); const getRouterRtpCapabilities = room.getRtpCapabilities();
@@ -1664,7 +1664,10 @@ function startServer() {
callback(getRouterRtpCapabilities); callback(getRouterRtpCapabilities);
} catch (err) { } catch (err) {
log.error('Get RouterRtpCapabilities error', err); log.error('Get RouterRtpCapabilities error', {
error: err,
peerInfo,
});
callback({ callback({
error: err.message, error: err.message,
}); });
@@ -1678,9 +1681,9 @@ function startServer() {
const { room, peer } = getRoomAndPeer(socket); const { room, peer } = getRoomAndPeer(socket);
const { peer_name, peer_info } = peer; const peerInfo = getPeerInfo(peer);
log.debug('Create WebRtc transport', peer_name); log.debug('Create WebRtc transport', peerInfo);
try { try {
const createWebRtcTransport = await room.createWebRtcTransport(socket.id); const createWebRtcTransport = await room.createWebRtcTransport(socket.id);
@@ -1691,7 +1694,7 @@ function startServer() {
} catch (err) { } catch (err) {
log.error('Create WebRtc Transport error', { log.error('Create WebRtc Transport error', {
error: err, error: err,
peer_info, peerInfo,
}); });
callback({ error: err.message }); callback({ error: err.message });
} }
@@ -1704,9 +1707,9 @@ function startServer() {
const { room, peer } = getRoomAndPeer(socket); const { room, peer } = getRoomAndPeer(socket);
const { peer_name } = peer || 'undefined'; const peerInfo = getPeerInfo(peer);
log.debug('Connect transport', { peer_name: peer_name, transport_id: transport_id }); log.debug('Connect transport', { transport_id: transport_id, peerInfo });
try { try {
const connectTransport = await room.connectPeerTransport(socket.id, transport_id, dtlsParameters); const connectTransport = await room.connectPeerTransport(socket.id, transport_id, dtlsParameters);
@@ -1715,7 +1718,10 @@ function startServer() {
callback(connectTransport); callback(connectTransport);
} catch (err) { } catch (err) {
log.error('Connect transport error', err); log.error('Connect transport error', {
error: err,
peerInfo,
});
callback({ error: err.message }); callback({ error: err.message });
} }
}); });
@@ -1731,9 +1737,9 @@ function startServer() {
return callback({ error: 'Peer not found' }); return callback({ error: 'Peer not found' });
} }
const { peer_name } = peer || 'undefined'; const peerInfo = getPeerInfo(peer);
log.debug('Restart ICE', { peer_name: peer_name, transport_id: transport_id }); log.debug('Restart ICE', { transport_id: transport_id, peerInfo });
try { try {
const transport = peer.getTransport(transport_id); const transport = peer.getTransport(transport_id);
@@ -1748,7 +1754,10 @@ function startServer() {
callback(iceParameters); callback(iceParameters);
} catch (err) { } catch (err) {
log.error('Restart ICE error', err); log.error('Restart ICE error', {
error: err,
peerInfo,
});
callback({ error: err.message }); callback({ error: err.message });
} }
}); });
@@ -1764,11 +1773,11 @@ function startServer() {
return callback({ error: 'Peer not found' }); return callback({ error: 'Peer not found' });
} }
const { peer_name } = peer || 'undefined'; const peerInfo = getPeerInfo(peer);
const data = { const data = {
room_id: room.id, room_id: room.id,
peer_name: peer_name, peer_name: peerInfo.peer_name,
peer_id: socket.id, peer_id: socket.id,
kind: kind, kind: kind,
type: appData.mediaType, type: appData.mediaType,
@@ -1789,9 +1798,9 @@ function startServer() {
log.debug('Produce', { log.debug('Produce', {
kind: kind, kind: kind,
type: appData.mediaType, type: appData.mediaType,
peer_name: peer_name,
peer_id: socket.id,
producer_id: producer_id, producer_id: producer_id,
peer_id: socket.id,
peerInfo: peerInfo,
}); });
// add & monitor producer audio level and active speaker // add & monitor producer audio level and active speaker
@@ -1802,7 +1811,10 @@ function startServer() {
callback({ producer_id }); callback({ producer_id });
} catch (err) { } catch (err) {
log.error('Producer transport error', err); log.error('Producer transport error', {
error: err,
peerInfo,
});
callback({ error: err.message }); callback({ error: err.message });
} }
}); });
@@ -1818,16 +1830,16 @@ function startServer() {
return callback({ error: 'Peer not found' }); return callback({ error: 'Peer not found' });
} }
const { peer_name, peer_info } = peer; const peerInfo = getPeerInfo(peer);
try { try {
const params = await room.consume(socket.id, consumerTransportId, producerId, rtpCapabilities, type); const params = await room.consume(socket.id, consumerTransportId, producerId, rtpCapabilities, type);
log.debug('Consuming', { log.debug('Consuming', {
peer_name: peer_name,
producer_type: type, producer_type: type,
producer_id: producerId, producer_id: producerId,
consumer_id: params ? params.id : undefined, consumer_id: params ? params.id : undefined,
peerInfo: peerInfo,
}); });
callback(params); callback(params);
@@ -1835,9 +1847,10 @@ function startServer() {
log.error('Consumer transport error', { log.error('Consumer transport error', {
error: err, error: err,
type, type,
consumerTransportId,
producerId, producerId,
rtpCapabilities, rtpCapabilities,
peer_info, peerInfo,
}); });
callback({ error: err.message }); callback({ error: err.message });
} }
@@ -1846,14 +1859,19 @@ function startServer() {
socket.on('producerClosed', (data) => { socket.on('producerClosed', (data) => {
if (!roomExists(socket)) return; if (!roomExists(socket)) return;
const { room, peer } = getRoomAndPeer(socket);
const peerInfo = getPeerInfo(peer);
if (peer) peer.updatePeerInfo(data); // peer_info.audio OR video OFF
try { try {
const { room, peer } = getRoomAndPeer(socket);
room.closeProducer(socket.id, data.producer_id); room.closeProducer(socket.id, data.producer_id);
if (peer) peer.updatePeerInfo(data); // peer_info.audio OR video OFF
} catch (err) { } catch (err) {
log.error('Producer Close error', err.message); log.error('Producer Close error', {
error: err.message,
peerInfo,
});
} }
}); });
@@ -1874,15 +1892,19 @@ function startServer() {
return callback({ error: `Producer with id "${producer_id}" type "${type}" not found` }); return callback({ error: `Producer with id "${producer_id}" type "${type}" not found` });
} }
const peerInfo = getPeerInfo(peer);
try { try {
await producer.pause(); await producer.pause();
const { peer_name } = peer || 'undefined'; log.debug('Producer paused', { producer_id, type, peerInfo });
log.debug('Producer paused', { peer_name, producer_id, type });
callback('successfully'); callback('successfully');
} catch (error) { } catch (error) {
log.error('Pause producer', {
error: error,
peerInfo,
});
callback({ error: error.message }); callback({ error: error.message });
} }
}); });
@@ -1904,15 +1926,19 @@ function startServer() {
return callback({ error: `producer with id "${producer_id}" type "${type}" not found` }); return callback({ error: `producer with id "${producer_id}" type "${type}" not found` });
} }
const peerInfo = getPeerInfo(peer);
try { try {
await producer.resume(); await producer.resume();
const { peer_name } = peer || 'undefined'; log.debug('Producer resumed', { producer_id, type, peerInfo });
log.debug('Producer resumed', { peer_name, producer_id, type });
callback('successfully'); callback('successfully');
} catch (error) { } catch (error) {
log.error('Resume producer', {
error: error,
peerInfo,
});
callback({ error: error.message }); callback({ error: error.message });
} }
}); });
@@ -1934,15 +1960,19 @@ function startServer() {
return callback({ error: `consumer with id "${consumer_id}" type "${type}" not found` }); return callback({ error: `consumer with id "${consumer_id}" type "${type}" not found` });
} }
const peerInfo = getPeerInfo(peer);
try { try {
await consumer.resume(); await consumer.resume();
const { peer_name } = peer || 'undefined'; log.debug('Consumer resumed', { consumer_id, type, peerInfo });
log.debug('Consumer resumed', { peer_name, consumer_id, type });
callback('successfully'); callback('successfully');
} catch (error) { } catch (error) {
log.error('Resume consumer', {
error: error,
peerInfo,
});
callback({ error: error.message }); callback({ error: error.message });
} }
}); });
@@ -3060,6 +3090,28 @@ function startServer() {
return roomList.has(socket.room_id); return roomList.has(socket.room_id);
} }
function getPeerInfo(peer) {
if (!peer || !peer.peer_info) {
return {
peer_name: peer?.peer_name || 'Unknown',
isDesktop: false,
os: 'Unknown',
browser: 'Unknown',
};
}
const { peer_name, peer_info } = peer;
const { is_desktop_device, os_name, os_version, browser_name, browser_version } = peer_info;
return {
peer_name: peer_name || 'Unknown',
isDesktop: Boolean(is_desktop_device),
os: os_name && os_version ? `${os_name} ${os_version}` : os_name || 'Unknown',
browser:
browser_name && browser_version ? `${browser_name} ${browser_version}` : browser_name || 'Unknown',
};
}
function isValidFileName(fileName) { function isValidFileName(fileName) {
const invalidChars = /[\\\/\?\*\|:"<>]/; const invalidChars = /[\\\/\?\*\|:"<>]/;
return !invalidChars.test(fileName); return !invalidChars.test(fileName);

عرض الملف

@@ -1,6 +1,6 @@
{ {
"name": "mirotalksfu", "name": "mirotalksfu",
"version": "1.7.77", "version": "1.7.78",
"description": "WebRTC SFU browser-based video calls", "description": "WebRTC SFU browser-based video calls",
"main": "Server.js", "main": "Server.js",
"scripts": { "scripts": {
@@ -59,7 +59,7 @@
"dependencies": { "dependencies": {
"@mattermost/client": "10.2.0", "@mattermost/client": "10.2.0",
"@sentry/node": "^9.5.0", "@sentry/node": "^9.5.0",
"axios": "^1.8.2", "axios": "^1.8.3",
"colors": "1.4.0", "colors": "1.4.0",
"compression": "1.8.0", "compression": "1.8.0",
"cors": "2.8.5", "cors": "2.8.5",
@@ -79,7 +79,7 @@
"mediasoup-client": "3.9.2", "mediasoup-client": "3.9.2",
"ngrok": "^5.0.0-beta.2", "ngrok": "^5.0.0-beta.2",
"nodemailer": "^6.10.0", "nodemailer": "^6.10.0",
"openai": "^4.87.2", "openai": "^4.87.3",
"qs": "6.14.0", "qs": "6.14.0",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"socket.io": "4.8.1", "socket.io": "4.8.1",

عرض الملف

@@ -64,7 +64,7 @@ let BRAND = {
}, },
about: { about: {
imageUrl: '../images/mirotalk-logo.gif', imageUrl: '../images/mirotalk-logo.gif',
title: '<strong>WebRTC SFU v1.7.77</strong>', title: '<strong>WebRTC SFU v1.7.78</strong>',
html: ` html: `
<button <button
id="support-button" id="support-button"

عرض الملف

@@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @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 * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com * @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.7.77 * @version 1.7.78
* *
*/ */
@@ -5272,7 +5272,7 @@ function showAbout() {
position: 'center', position: 'center',
imageUrl: BRAND.about?.imageUrl && BRAND.about.imageUrl.trim() !== '' ? BRAND.about.imageUrl : image.about, imageUrl: BRAND.about?.imageUrl && BRAND.about.imageUrl.trim() !== '' ? BRAND.about.imageUrl : image.about,
customClass: { image: 'img-about' }, customClass: { image: 'img-about' },
title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.7.77', title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.7.78',
html: ` html: `
<br /> <br />
<div id="about"> <div id="about">

عرض الملف

@@ -9,7 +9,7 @@
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon * @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 * @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com * @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.7.77 * @version 1.7.78
* *
*/ */