[mirotalk] - improve reconnect logic and logs, update dep
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
# ====================================================
|
||||
# MiroTalk P2P v.1.7.04 - Environment Configuration
|
||||
# MiroTalk P2P v.1.7.05 - Environment Configuration
|
||||
# ====================================================
|
||||
|
||||
# App environment
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/**
|
||||
* ==============================================
|
||||
* MiroTalk P2P v.1.7.04 - Configuration File
|
||||
* MiroTalk P2P v.1.7.05 - Configuration File
|
||||
* ==============================================
|
||||
*
|
||||
* Branding and customizations require a license:
|
||||
|
||||
+1
-1
@@ -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.7.04
|
||||
* @version 1.7.05
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
Generated
+39
-39
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"name": "mirotalk",
|
||||
"version": "1.7.04",
|
||||
"version": "1.7.05",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "mirotalk",
|
||||
"version": "1.7.04",
|
||||
"version": "1.7.05",
|
||||
"license": "AGPL-3.0",
|
||||
"dependencies": {
|
||||
"@mattermost/client": "11.2.0",
|
||||
"@ngrok/ngrok": "1.7.0",
|
||||
"@sentry/node": "^10.33.0",
|
||||
"@sentry/node": "^10.34.0",
|
||||
"axios": "^1.13.2",
|
||||
"chokidar": "^5.0.0",
|
||||
"colors": "^1.4.0",
|
||||
@@ -608,9 +608,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@opentelemetry/context-async-hooks": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.3.0.tgz",
|
||||
"integrity": "sha512-hGcsT0qDP7Il1L+qT3JFpiGl1dCjF794Bb4yCRCYdr7XC0NwHtOF3ngF86Gk6TUnsakbyQsDQ0E/S4CU0F4d4g==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.4.0.tgz",
|
||||
"integrity": "sha512-jn0phJ+hU7ZuvaoZE/8/Euw3gvHJrn2yi+kXrymwObEPVPjtwCmkvXDRQCWli+fCTTF/aSOtXaLr7CLIvv3LQg==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
@@ -1025,13 +1025,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@opentelemetry/resources": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.3.0.tgz",
|
||||
"integrity": "sha512-shlr2l5g+87J8wqYlsLyaUsgKVRO7RtX70Ckd5CtDOWtImZgaUDmf4Z2ozuSKQLM2wPDR0TE/3bPVBNJtRm/cQ==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.4.0.tgz",
|
||||
"integrity": "sha512-RWvGLj2lMDZd7M/5tjkI/2VHMpXebLgPKvBUd9LRasEWR2xAynDwEYZuLvY9P2NGG73HF07jbbgWX2C9oavcQg==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@opentelemetry/core": "2.3.0",
|
||||
"@opentelemetry/core": "2.4.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.29.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1042,9 +1042,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.3.0.tgz",
|
||||
"integrity": "sha512-PcmxJQzs31cfD0R2dE91YGFcLxOSN4Bxz7gez5UwSUjCai8BwH/GI5HchfVshHkWdTkUs0qcaPJgVHKXUp7I3A==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.4.0.tgz",
|
||||
"integrity": "sha512-KtcyFHssTn5ZgDu6SXmUznS80OFs/wN7y6MyFRRcKU6TOw8hNcGxKvt8hsdaLJfhzUszNSjURetq5Qpkad14Gw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@opentelemetry/semantic-conventions": "^1.29.0"
|
||||
@@ -1057,14 +1057,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@opentelemetry/sdk-trace-base": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.3.0.tgz",
|
||||
"integrity": "sha512-B0TQ2e9h0ETjpI+eGmCz8Ojb+lnYms0SE3jFwEKrN/PK4aSVHU28AAmnOoBmfub+I3jfgPwvDJgomBA5a7QehQ==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.4.0.tgz",
|
||||
"integrity": "sha512-WH0xXkz/OHORDLKqaxcUZS0X+t1s7gGlumr2ebiEgNZQl2b0upK2cdoD0tatf7l8iP74woGJ/Kmxe82jdvcWRw==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@opentelemetry/core": "2.3.0",
|
||||
"@opentelemetry/resources": "2.3.0",
|
||||
"@opentelemetry/core": "2.4.0",
|
||||
"@opentelemetry/resources": "2.4.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.29.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1075,9 +1075,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.3.0.tgz",
|
||||
"integrity": "sha512-PcmxJQzs31cfD0R2dE91YGFcLxOSN4Bxz7gez5UwSUjCai8BwH/GI5HchfVshHkWdTkUs0qcaPJgVHKXUp7I3A==",
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.4.0.tgz",
|
||||
"integrity": "sha512-KtcyFHssTn5ZgDu6SXmUznS80OFs/wN7y6MyFRRcKU6TOw8hNcGxKvt8hsdaLJfhzUszNSjURetq5Qpkad14Gw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@opentelemetry/semantic-conventions": "^1.29.0"
|
||||
@@ -1154,18 +1154,18 @@
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@sentry/core": {
|
||||
"version": "10.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.33.0.tgz",
|
||||
"integrity": "sha512-ehH1VSUclIHZKEZVdv+klofsFIh8FFzqA6AAV23RtLepptzA8wqQzUGraEuSN25sYcNmYJ0jti5U0Ys+WZv5Dw==",
|
||||
"version": "10.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.34.0.tgz",
|
||||
"integrity": "sha512-4FFpYBMf0VFdPcsr4grDYDOR87mRu6oCfb51oQjU/Pndmty7UgYo0Bst3LEC/8v0SpytBtzXq+Wx/fkwulBesg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/node": {
|
||||
"version": "10.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.33.0.tgz",
|
||||
"integrity": "sha512-HZ7U0igIXs8nHSeh0YAe9C3eE/fjkHOprctQHwoYpRrZelsKO8NsvZU0K/1+knFr36vFj7jtt1QlF/UjCQZD+Q==",
|
||||
"version": "10.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.34.0.tgz",
|
||||
"integrity": "sha512-bEOyH97HuVtWZYAZ5mp0NhYNc+n6QCfiKuLee2P75n2kt4cIPTGvLOSdUwwjllf795uOdKZJuM1IUN0W+YMcVg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@opentelemetry/api": "^1.9.0",
|
||||
@@ -1198,9 +1198,9 @@
|
||||
"@opentelemetry/sdk-trace-base": "^2.2.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.37.0",
|
||||
"@prisma/instrumentation": "6.19.0",
|
||||
"@sentry/core": "10.33.0",
|
||||
"@sentry/node-core": "10.33.0",
|
||||
"@sentry/opentelemetry": "10.33.0",
|
||||
"@sentry/core": "10.34.0",
|
||||
"@sentry/node-core": "10.34.0",
|
||||
"@sentry/opentelemetry": "10.34.0",
|
||||
"import-in-the-middle": "^2.0.1",
|
||||
"minimatch": "^9.0.0"
|
||||
},
|
||||
@@ -1209,14 +1209,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/node-core": {
|
||||
"version": "10.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.33.0.tgz",
|
||||
"integrity": "sha512-73J1yLMdtjyadtcsrZ5VBYIyWrJ5gHh5dRsJlfm6XMD3ZFHQQ9Fwd6mwnSY+X+VLJaNq7RtoNECij6LLqE4R0g==",
|
||||
"version": "10.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.34.0.tgz",
|
||||
"integrity": "sha512-FrGfC8GzD1cnZDO3zwQ4cjyoY1ZwNHvZbXSvXRYxpjhXidZhvaPurjgLRSB0xGaFgoemmOp1ufsx/w6fQOGA6Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@apm-js-collab/tracing-hooks": "^0.3.1",
|
||||
"@sentry/core": "10.33.0",
|
||||
"@sentry/opentelemetry": "10.33.0",
|
||||
"@sentry/core": "10.34.0",
|
||||
"@sentry/opentelemetry": "10.34.0",
|
||||
"import-in-the-middle": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -1233,12 +1233,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/opentelemetry": {
|
||||
"version": "10.33.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.33.0.tgz",
|
||||
"integrity": "sha512-v/6mAYLxtfcKLCw6Ktk46T6fWEQBVWB9Ah81axr8OvuIomK71jkv1zb0v7D8ot0ESesJ3JF6I/aKhfxpyLInSQ==",
|
||||
"version": "10.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.34.0.tgz",
|
||||
"integrity": "sha512-uKuULBOmdVu3bYdD8doMLqKgN0PP3WWtI7Shu11P9PVrhSNT4U9yM9Z6v1aFlQcbrgyg3LynZuXs8lyjt90UbA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry/core": "10.33.0"
|
||||
"@sentry/core": "10.34.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mirotalk",
|
||||
"version": "1.7.04",
|
||||
"version": "1.7.05",
|
||||
"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.33.0",
|
||||
"@sentry/node": "^10.34.0",
|
||||
"axios": "^1.13.2",
|
||||
"chokidar": "^5.0.0",
|
||||
"colors": "^1.4.0",
|
||||
|
||||
+1
-1
@@ -77,7 +77,7 @@ let brand = {
|
||||
},
|
||||
about: {
|
||||
imageUrl: '../images/mirotalk-logo.gif',
|
||||
title: 'WebRTC P2P v1.7.04',
|
||||
title: 'WebRTC P2P v1.7.05',
|
||||
html: `
|
||||
<button
|
||||
id="support-button"
|
||||
|
||||
+40
-5
@@ -15,7 +15,7 @@
|
||||
* @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.7.04
|
||||
* @version 1.7.05
|
||||
*
|
||||
*/
|
||||
|
||||
@@ -1270,6 +1270,18 @@ function initClientPeer() {
|
||||
|
||||
// on receiving data from signaling server...
|
||||
signalingSocket.on('connect', handleConnect);
|
||||
signalingSocket.on('reconnect', (attemptNumber) => {
|
||||
console.log('Socket reconnected after', attemptNumber, 'attempts');
|
||||
});
|
||||
signalingSocket.on('reconnect_attempt', (attemptNumber) => {
|
||||
console.log('Attempting to reconnect...', attemptNumber);
|
||||
});
|
||||
signalingSocket.on('reconnect_error', (error) => {
|
||||
console.error('Reconnection error:', error);
|
||||
});
|
||||
signalingSocket.on('reconnect_failed', () => {
|
||||
console.error('Reconnection failed');
|
||||
});
|
||||
signalingSocket.on('unauthorized', handleUnauthorized);
|
||||
signalingSocket.on('roomIsLocked', handleUnlockTheRoom);
|
||||
signalingSocket.on('roomAction', handleRoomAction);
|
||||
@@ -1328,7 +1340,12 @@ async function handleConnect() {
|
||||
|
||||
await getButtons();
|
||||
|
||||
if (localVideoMediaStream && localAudioMediaStream) {
|
||||
// If reconnecting, force rejoin to properly sync with other peers
|
||||
if (isPeerReconnected && localVideoMediaStream && localAudioMediaStream) {
|
||||
console.log('Reconnected - rejoining channel');
|
||||
await joinToChannel();
|
||||
isPeerReconnected = false; // Reset flag after successful rejoin
|
||||
} else if (localVideoMediaStream && localAudioMediaStream) {
|
||||
await joinToChannel();
|
||||
} else {
|
||||
await initEnumerateDevices();
|
||||
@@ -1380,7 +1397,14 @@ function handleServerInfo(config) {
|
||||
}
|
||||
|
||||
// Let start with some basic rules
|
||||
isPresenter = isPeerReconnected ? isPresenter : is_presenter;
|
||||
// On reconnection, preserve presenter status if we were presenter before
|
||||
// Otherwise, accept what the server tells us
|
||||
if (isPeerReconnected) {
|
||||
console.log('Reconnected - preserving presenter status:', isPresenter);
|
||||
} else {
|
||||
isPresenter = is_presenter;
|
||||
console.log('New connection - presenter status from server:', isPresenter);
|
||||
}
|
||||
isPeerPresenter.innerText = isPresenter;
|
||||
|
||||
// Peer identified if presenter or not then....
|
||||
@@ -2311,7 +2335,16 @@ async function handleAddPeer(config) {
|
||||
|
||||
if (peer_id in peerConnections) {
|
||||
// This could happen if the user joins multiple channels where the other peer is also in.
|
||||
return console.log('Already connected to peer', peer_id);
|
||||
// Or when a peer reconnects - close the old connection and create a new one
|
||||
console.log('Already connected to peer', peer_id, '- closing old connection and creating new one');
|
||||
try {
|
||||
peerConnections[peer_id].close();
|
||||
delete peerConnections[peer_id];
|
||||
delete chatDataChannels[peer_id];
|
||||
delete fileDataChannels[peer_id];
|
||||
} catch (err) {
|
||||
console.error('Error closing stale peer connection', err);
|
||||
}
|
||||
}
|
||||
|
||||
console.log('iceServers', iceServers[0]);
|
||||
@@ -2822,7 +2855,9 @@ function handleDisconnect(reason) {
|
||||
peerVideoMediaElements = {};
|
||||
peerAudioMediaElements = {};
|
||||
|
||||
// Set reconnection flag to trigger proper rejoin
|
||||
isPeerReconnected = true;
|
||||
console.log('Set isPeerReconnected=true, will attempt to rejoin on reconnect');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -13571,7 +13606,7 @@ function showAbout() {
|
||||
Swal.fire({
|
||||
background: swBg,
|
||||
position: 'center',
|
||||
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.7.04',
|
||||
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.7.05',
|
||||
imageUrl: brand.about?.imageUrl && brand.about.imageUrl.trim() !== '' ? brand.about.imageUrl : images.about,
|
||||
customClass: { image: 'img-about' },
|
||||
html: `
|
||||
|
||||
Reference in New Issue
Block a user