mediasfu-shared 1.2.1 → 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -4
- package/README.md +145 -131
- package/dist/consumers/connectIps.d.ts.map +1 -1
- package/dist/consumers/index.cjs +1 -1
- package/dist/consumers/index.js +1 -1
- package/dist/{getParticipantMedia-DC_Nca8S.cjs → getParticipantMedia-AwwtMCTz.cjs} +4 -4
- package/dist/getParticipantMedia-AwwtMCTz.cjs.map +1 -0
- package/dist/{getParticipantMedia-Bu_aZlxe.js → getParticipantMedia-CyaOk2oD.js} +4 -4
- package/dist/getParticipantMedia-CyaOk2oD.js.map +1 -0
- package/dist/index.cjs +36 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +37 -8
- package/dist/index.js.map +1 -1
- package/dist/index.native.cjs +3 -3
- package/dist/index.native.js +3 -3
- package/dist/{joinLocalRoom-7ibqv7zZ.js → joinLocalRoom-Bu3gz27d.js} +2 -2
- package/dist/{joinLocalRoom-7ibqv7zZ.js.map → joinLocalRoom-Bu3gz27d.js.map} +1 -1
- package/dist/{joinLocalRoom-BJBDvTYh.cjs → joinLocalRoom-Cii5D5IG.cjs} +2 -2
- package/dist/{joinLocalRoom-BJBDvTYh.cjs.map → joinLocalRoom-Cii5D5IG.cjs.map} +1 -1
- package/dist/methods/recording/startRecording.d.ts.map +1 -1
- package/dist/methods/utils/headless/virtualBackground.d.ts +13 -1
- package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -1
- package/dist/methods/utils/virtualBackgroundCompositor.d.ts +4 -0
- package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -1
- package/dist/sockets/SocketManager.d.ts +0 -27
- package/dist/sockets/SocketManager.d.ts.map +1 -1
- package/dist/types/index.cjs +2 -2
- package/dist/types/index.js +2 -2
- package/dist/{updateParticipantAudioDecibels-C_MygF6q.js → updateParticipantAudioDecibels-CnEXJBmc.js} +85 -13
- package/dist/updateParticipantAudioDecibels-CnEXJBmc.js.map +1 -0
- package/dist/{updateParticipantAudioDecibels-bZ6R8WHj.cjs → updateParticipantAudioDecibels-QZyahisU.cjs} +85 -13
- package/dist/updateParticipantAudioDecibels-QZyahisU.cjs.map +1 -0
- package/package.json +1 -1
- package/src/consumers/connectIps.ts +46 -7
- package/src/methods/recording/startRecording.ts +7 -1
- package/src/methods/utils/headless/virtualBackground.ts +34 -2
- package/src/methods/utils/virtualBackgroundCompositor.ts +18 -1
- package/src/sockets/SocketManager.ts +54 -7
- package/dist/getParticipantMedia-Bu_aZlxe.js.map +0 -1
- package/dist/getParticipantMedia-DC_Nca8S.cjs.map +0 -1
- package/dist/updateParticipantAudioDecibels-C_MygF6q.js.map +0 -1
- package/dist/updateParticipantAudioDecibels-bZ6R8WHj.cjs.map +0 -1
|
@@ -766,6 +766,7 @@ async function validateApiKeyToken(value) {
|
|
|
766
766
|
}
|
|
767
767
|
return true;
|
|
768
768
|
}
|
|
769
|
+
const CONNECT_TIMEOUT_MS = 12e3;
|
|
769
770
|
async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
|
|
770
771
|
if (!apiUserName) {
|
|
771
772
|
throw new Error("API username required.");
|
|
@@ -809,7 +810,21 @@ async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
|
|
|
809
810
|
}
|
|
810
811
|
});
|
|
811
812
|
}
|
|
812
|
-
|
|
813
|
+
let settled = false;
|
|
814
|
+
let timeoutHandle;
|
|
815
|
+
const cleanupHandshake = () => {
|
|
816
|
+
if (timeoutHandle) clearTimeout(timeoutHandle);
|
|
817
|
+
socket.off("connection-success", handleConnectionSuccess);
|
|
818
|
+
socket.off("connect_error", handleConnectError);
|
|
819
|
+
socket.off("disconnect", handleDisconnectBeforeReady);
|
|
820
|
+
};
|
|
821
|
+
const settle = (action) => {
|
|
822
|
+
if (settled) return;
|
|
823
|
+
settled = true;
|
|
824
|
+
cleanupHandshake();
|
|
825
|
+
action();
|
|
826
|
+
};
|
|
827
|
+
const handleConnectionSuccess = ({ socketId }) => {
|
|
813
828
|
let conn = "media";
|
|
814
829
|
try {
|
|
815
830
|
if (link.includes("mediasfu.com") && (link.match(/c/g)?.length ?? 0) > 1) {
|
|
@@ -818,11 +833,35 @@ async function connectSocket({ apiUserName, apiKey, apiToken, link }) {
|
|
|
818
833
|
} catch {
|
|
819
834
|
}
|
|
820
835
|
console.log(`Connected to ${conn} socket with ID: ${socketId}`);
|
|
821
|
-
resolve(socket);
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
836
|
+
settle(() => resolve(socket));
|
|
837
|
+
};
|
|
838
|
+
const handleConnectError = (error) => {
|
|
839
|
+
settle(() => {
|
|
840
|
+
socket.disconnect();
|
|
841
|
+
reject(new Error("Error connecting to media socket: " + error.message));
|
|
842
|
+
});
|
|
843
|
+
};
|
|
844
|
+
const handleDisconnectBeforeReady = (reason) => {
|
|
845
|
+
settle(
|
|
846
|
+
() => reject(
|
|
847
|
+
new Error(
|
|
848
|
+
"Media socket closed before the room was ready (" + reason + ")."
|
|
849
|
+
)
|
|
850
|
+
)
|
|
851
|
+
);
|
|
852
|
+
};
|
|
853
|
+
socket.on("connection-success", handleConnectionSuccess);
|
|
854
|
+
socket.on("connect_error", handleConnectError);
|
|
855
|
+
socket.on("disconnect", handleDisconnectBeforeReady);
|
|
856
|
+
timeoutHandle = setTimeout(() => {
|
|
857
|
+
settle(() => {
|
|
858
|
+
try {
|
|
859
|
+
socket.disconnect();
|
|
860
|
+
} catch {
|
|
861
|
+
}
|
|
862
|
+
reject(new Error("Timed out connecting to media socket."));
|
|
863
|
+
});
|
|
864
|
+
}, CONNECT_TIMEOUT_MS);
|
|
826
865
|
});
|
|
827
866
|
}
|
|
828
867
|
async function connectLocalSocket({ link }) {
|
|
@@ -1194,10 +1233,19 @@ const joinConsumeRoom = async ({
|
|
|
1194
1233
|
};
|
|
1195
1234
|
const pendingConsumeConnections = /* @__PURE__ */ new WeakMap();
|
|
1196
1235
|
const normalizeConsumeEndpoint = (ip) => ip.trim().toLowerCase().replace(/\.$/, "");
|
|
1197
|
-
const hasConsumeEndpoint = (consumeSockets, endpoint) =>
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1236
|
+
const hasConsumeEndpoint = (consumeSockets, endpoint) => {
|
|
1237
|
+
for (let index = consumeSockets.length - 1; index >= 0; index -= 1) {
|
|
1238
|
+
const socketObj = consumeSockets[index];
|
|
1239
|
+
const ip = Object.keys(socketObj)[0];
|
|
1240
|
+
if (!ip || normalizeConsumeEndpoint(ip) !== endpoint) continue;
|
|
1241
|
+
const socket = socketObj[ip];
|
|
1242
|
+
if (socket?.connected && socket.id) return true;
|
|
1243
|
+
socket?.removeAllListeners?.();
|
|
1244
|
+
socket?.disconnect?.();
|
|
1245
|
+
consumeSockets.splice(index, 1);
|
|
1246
|
+
}
|
|
1247
|
+
return false;
|
|
1248
|
+
};
|
|
1201
1249
|
async function reserveConsumeEndpoint(consumeSockets, ip, reservationOwner = consumeSockets) {
|
|
1202
1250
|
const endpoint = normalizeConsumeEndpoint(ip);
|
|
1203
1251
|
if (!endpoint || endpoint === "none") return null;
|
|
@@ -1221,6 +1269,9 @@ async function reserveConsumeEndpoint(consumeSockets, ip, reservationOwner = con
|
|
|
1221
1269
|
return (didConnect = false) => {
|
|
1222
1270
|
if (pendingForSockets?.get(endpoint) === reservation) {
|
|
1223
1271
|
pendingForSockets.delete(endpoint);
|
|
1272
|
+
if (pendingForSockets.size === 0) {
|
|
1273
|
+
pendingConsumeConnections.delete(reservationOwner);
|
|
1274
|
+
}
|
|
1224
1275
|
}
|
|
1225
1276
|
resolvePending(didConnect === true);
|
|
1226
1277
|
};
|
|
@@ -1257,8 +1308,9 @@ const connectIps = async ({
|
|
|
1257
1308
|
);
|
|
1258
1309
|
if (!releaseReservation) continue;
|
|
1259
1310
|
let connected = false;
|
|
1311
|
+
let remote_sock = null;
|
|
1260
1312
|
try {
|
|
1261
|
-
|
|
1313
|
+
remote_sock = await connectSocket({ apiUserName, apiKey, apiToken, link: `https://${ip}.mediasfu.com` });
|
|
1262
1314
|
if (remote_sock.id) {
|
|
1263
1315
|
if (!roomRecvIPs.includes(ip)) {
|
|
1264
1316
|
roomRecvIPs.push(ip);
|
|
@@ -1289,16 +1341,36 @@ const connectIps = async ({
|
|
|
1289
1341
|
parameters
|
|
1290
1342
|
});
|
|
1291
1343
|
if (!data.rtpCapabilities) {
|
|
1292
|
-
return
|
|
1344
|
+
throw new Error(`Consume room ${ip} did not return RTP capabilities.`);
|
|
1293
1345
|
}
|
|
1294
1346
|
}
|
|
1295
1347
|
consume_sockets.push({ [ip]: remote_sock });
|
|
1296
1348
|
updateConsume_sockets(consume_sockets);
|
|
1297
1349
|
connected = true;
|
|
1350
|
+
remote_sock.on("disconnect", () => {
|
|
1351
|
+
const socketIndex = consume_sockets.findIndex(
|
|
1352
|
+
(socketObj) => socketObj[ip] === remote_sock
|
|
1353
|
+
);
|
|
1354
|
+
if (socketIndex >= 0) {
|
|
1355
|
+
consume_sockets.splice(socketIndex, 1);
|
|
1356
|
+
updateConsume_sockets(consume_sockets);
|
|
1357
|
+
}
|
|
1358
|
+
const recvIndex = roomRecvIPs.indexOf(ip);
|
|
1359
|
+
if (recvIndex >= 0) {
|
|
1360
|
+
roomRecvIPs.splice(recvIndex, 1);
|
|
1361
|
+
updateRoomRecvIPs(roomRecvIPs);
|
|
1362
|
+
}
|
|
1363
|
+
remote_sock?.removeAllListeners?.();
|
|
1364
|
+
remote_sock?.disconnect();
|
|
1365
|
+
});
|
|
1298
1366
|
}
|
|
1299
1367
|
} catch (error) {
|
|
1300
1368
|
console.log("connectIps error", error);
|
|
1301
1369
|
} finally {
|
|
1370
|
+
if (!connected && remote_sock) {
|
|
1371
|
+
remote_sock.removeAllListeners?.();
|
|
1372
|
+
remote_sock.disconnect();
|
|
1373
|
+
}
|
|
1302
1374
|
releaseReservation(connected);
|
|
1303
1375
|
}
|
|
1304
1376
|
}
|
|
@@ -5428,4 +5500,4 @@ exports.trigger = trigger;
|
|
|
5428
5500
|
exports.updateMicLevel = updateMicLevel;
|
|
5429
5501
|
exports.updateMiniCardsGrid = updateMiniCardsGrid;
|
|
5430
5502
|
exports.updateParticipantAudioDecibels = updateParticipantAudioDecibels;
|
|
5431
|
-
//# sourceMappingURL=updateParticipantAudioDecibels-
|
|
5503
|
+
//# sourceMappingURL=updateParticipantAudioDecibels-QZyahisU.cjs.map
|