mediasfu-shared 1.2.4 → 1.2.6
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 +8 -0
- package/dist/ProducerClient/producerClientEmits/roomVideoParams.d.ts +3 -0
- package/dist/ProducerClient/producerClientEmits/roomVideoParams.d.ts.map +1 -0
- package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts.map +1 -1
- package/dist/{getParticipantMedia-CP4hE5Rg.cjs → getParticipantMedia-B6LsMxmS.cjs} +2 -2
- package/dist/{getParticipantMedia-CP4hE5Rg.cjs.map → getParticipantMedia-B6LsMxmS.cjs.map} +1 -1
- package/dist/{getParticipantMedia-CvXdDj03.js → getParticipantMedia-B8MFkrT1.js} +2 -2
- package/dist/{getParticipantMedia-CvXdDj03.js.map → getParticipantMedia-B8MFkrT1.js.map} +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.native.cjs +2 -2
- package/dist/index.native.js +2 -2
- package/dist/{joinLocalRoom-Cx1y3Ojj.js → joinLocalRoom-X3NXzGmE.js} +15 -9
- package/dist/joinLocalRoom-X3NXzGmE.js.map +1 -0
- package/dist/{joinLocalRoom-DNJ2zb8W.cjs → joinLocalRoom-XjGmL1_k.cjs} +15 -9
- package/dist/joinLocalRoom-XjGmL1_k.cjs.map +1 -0
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.js +1 -1
- package/package.json +1 -1
- package/src/ProducerClient/producerClientEmits/roomVideoParams.ts +21 -0
- package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +3 -10
- package/src/methods/utils/virtualBackgroundFrameLoop.ts +1 -1
- package/dist/joinLocalRoom-Cx1y3Ojj.js.map +0 -1
- package/dist/joinLocalRoom-DNJ2zb8W.cjs.map +0 -1
package/dist/index.native.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const joinLocalRoom = require("./joinLocalRoom-
|
|
3
|
+
const joinLocalRoom = require("./joinLocalRoom-XjGmL1_k.cjs");
|
|
4
4
|
const updateParticipantAudioDecibels = require("./updateParticipantAudioDecibels-BJ2PxJJD.cjs");
|
|
5
5
|
const joinRoomOnMediaSFU = require("./joinRoomOnMediaSFU-D2C7q1GK.cjs");
|
|
6
6
|
const translationConsumerSwitch = require("./translationConsumerSwitch-BAsQUpH6.cjs");
|
|
7
|
-
const getParticipantMedia = require("./getParticipantMedia-
|
|
7
|
+
const getParticipantMedia = require("./getParticipantMedia-B6LsMxmS.cjs");
|
|
8
8
|
const methods_index = require("./methods/index.cjs");
|
|
9
9
|
const audioProcessing = require("./audioProcessing-BpbrdCk-.cjs");
|
|
10
10
|
exports.addVideosGrid = joinLocalRoom.addVideosGrid;
|
package/dist/index.native.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { a, b, d, c, e, f, j, m, p, u } from "./joinLocalRoom-
|
|
1
|
+
import { a, b, d, c, e, f, j, m, p, u } from "./joinLocalRoom-X3NXzGmE.js";
|
|
2
2
|
import { Y, Z, a as a2, _, $, b as b2, W, d as d2, e as e2, f as f2, g, h, aa, i, j as j2, k, l, m as m2, a8, c as c2, a0, n, o, p as p2, q, a9, r, s, a1, a2 as a22, a3, t, X, T, v, U, w, x, y, V, C, G, z, A, a4, B, D, E, F, a5, N, H, I, J, K, L, M, O, P, Q, R, S, u as u2, a6, a7 } from "./updateParticipantAudioDecibels-DiJ_LFfH.js";
|
|
3
3
|
import { Q as Q2, u as u3, m as m3, A as A2, f as f3, e as e3, a as a10, c as c3, b as b3, d as d3, l as l2, y as y2, p as p3, D as D2, g as g2, k as k2, x as x2, o as o2, C as C2, h as h2, j as j3, q as q2, z as z2, r as r2, E as E2, F as F2, s as s2, i as i2, w as w2, n as n2, B as B2, t as t2, v as v2 } from "./joinRoomOnMediaSFU-BnAWLciF.js";
|
|
4
4
|
import { b as b4, e as e4, d as d4, g as g3, f as f4, l as l3, k as k3, j as j4, i as i3, p as p4, c as c4, a as a11, r as r3, h as h3, s as s3, m as m4 } from "./translationConsumerSwitch-BUODiT6o.js";
|
|
5
|
-
import { aD, aR, w as w3, x as x3, f as f5, y as y3, aP, ar, aU, aS, ab, at, aI, a4 as a42, Z as Z2, au, aV, aL, _ as _2, az, X as X2, W as W2, aG, a7 as a72, N as N2, a8 as a82, b0, a2 as a23, aM, aQ, aq, aO, aw, av, ai, V as V2, U as U2, T as T2, Y as Y2, a6 as a62, aN, ax, aA, an, q as q3, t as t3, h as h4, Q as Q3, a as a12, R as R2, u as u4, l as l4, b as b5, c as c5, S as S2, g as g4, d as d5, i as i4, j as j5, k as k4, n as n3, v as v3, z as z3, H as H2, J as J2, O as O2, $ as $2, a5 as a52, a3 as a32, o as o3, m as m5, e as e5, ad, aa as aa2, p as p5, ak, aY, a_, aZ, aW, aT, aF, A as A3, B as B3, C as C3, D as D3, ae, r as r4, a$, ag, I as I2, P as P2, af, al, a1 as a13, a0 as a02, s as s4, aC, ah, a9 as a92, aB, aK, ay, E as E3, aj, ao, aE, ac, aX, F as F3, am, ap, K as K2, aH, aJ, L as L2, M as M2, G as G2, as } from "./getParticipantMedia-
|
|
5
|
+
import { aD, aR, w as w3, x as x3, f as f5, y as y3, aP, ar, aU, aS, ab, at, aI, a4 as a42, Z as Z2, au, aV, aL, _ as _2, az, X as X2, W as W2, aG, a7 as a72, N as N2, a8 as a82, b0, a2 as a23, aM, aQ, aq, aO, aw, av, ai, V as V2, U as U2, T as T2, Y as Y2, a6 as a62, aN, ax, aA, an, q as q3, t as t3, h as h4, Q as Q3, a as a12, R as R2, u as u4, l as l4, b as b5, c as c5, S as S2, g as g4, d as d5, i as i4, j as j5, k as k4, n as n3, v as v3, z as z3, H as H2, J as J2, O as O2, $ as $2, a5 as a52, a3 as a32, o as o3, m as m5, e as e5, ad, aa as aa2, p as p5, ak, aY, a_, aZ, aW, aT, aF, A as A3, B as B3, C as C3, D as D3, ae, r as r4, a$, ag, I as I2, P as P2, af, al, a1 as a13, a0 as a02, s as s4, aC, ah, a9 as a92, aB, aK, ay, E as E3, aj, ao, aE, ac, aX, F as F3, am, ap, K as K2, aH, aJ, L as L2, M as M2, G as G2, as } from "./getParticipantMedia-B8MFkrT1.js";
|
|
6
6
|
import { COMMON_LANGUAGE_CODES, MediaStream, MediaStreamTrack, RTCView, SUPPORTED_LANGUAGE_CODES, SoundPlayer, TTS_PROVIDERS, addPanelist, addedAsPanelist, allMembers, allMembersRest, allWaitingRoomMembers, banParticipant, bulkUpdateParticipantPermissions, clickChat, controlMediaHost, createLiveSubtitle, createResponseJoinRoom, createRoomOnMediaSFU, disconnect, disconnectUserSelf, fetchLanguagesViaSocket, fetchVoicesViaSocket, focusPanelists, formatNumber, generateRandomMessages, generateRandomParticipants, generateRandomPolls, generateRandomRequestList, generateRandomWaitingRoomList, getAvailableVoices, getCommonLanguages, getDomains, getLanguageMetadata, getLanguageName, getLanguageNativeName, getOverlayPosition, getSubtitleForSpeaker, getSupportedLanguages, handleCreateRoom, handleJoinRoom, handleWelcomeRequest, initialValuesState, isLanguageSupported, isSubtitleExpired, launchPanelists, launchPermissions, mediaDevices, meetingEnded, meetingStillThere, meetingTimeRemaining, normalizeLanguageCode, panelistControlMedia, panelistFocusChanged, panelistsUpdated, participantRequested, permissionConfigUpdated, permissionUpdated, personJoined, pollUpdated, producerMediaClosed, producerMediaPaused, producerMediaResumed, pruneExpiredSubtitles, reInitiateRecording, receiveMessage, recordingNotice, registerGlobals, removePanelist, removedFromPanelists, roomRecordParams, screenProducerId, sleep, startMeetingProgressTimer, startRecords, stoppedRecording, translationChannelsAvailable, translationConfigUpdated, translationError, translationLanguageSet, translationMemberState, translationProducerClosed, translationProducerReady, translationRoomConfig, translationSpeakerOutputChanged, translationSubscribed, translationTranscript, translationUnsubscribed, unfocusPanelists, updateConsumingDomains, updateLiveSubtitlesFromTranscript, updateMediaSettings, updatePanelists, updateParticipantPermission, updatePermissionConfig, updatedCoHost, userWaiting, validateWelcomeAlphanumeric, validateWelcomeInputs } from "./methods/index.js";
|
|
7
7
|
import { v as v4 } from "./audioProcessing-0z5KlcmO.js";
|
|
8
8
|
export {
|
|
@@ -255,6 +255,18 @@ const joinRoomClient = async ({
|
|
|
255
255
|
throw new Error("Failed to join the room. Please check your connection and try again.");
|
|
256
256
|
}
|
|
257
257
|
};
|
|
258
|
+
const baseParams = /* @__PURE__ */ new WeakMap();
|
|
259
|
+
function freshRoomVideoParams(current, fallback) {
|
|
260
|
+
const source = current?.encodings?.length ? current : fallback;
|
|
261
|
+
const base = baseParams.get(source) ?? source;
|
|
262
|
+
const fresh = {
|
|
263
|
+
...base,
|
|
264
|
+
encodings: base.encodings.map((encoding) => ({ ...encoding })),
|
|
265
|
+
codecOptions: base.codecOptions ? { ...base.codecOptions } : void 0
|
|
266
|
+
};
|
|
267
|
+
baseParams.set(fresh, base);
|
|
268
|
+
return fresh;
|
|
269
|
+
}
|
|
258
270
|
const updateRoomParametersClient = ({ parameters }) => {
|
|
259
271
|
try {
|
|
260
272
|
const {
|
|
@@ -381,14 +393,8 @@ const updateRoomParametersClient = ({ parameters }) => {
|
|
|
381
393
|
vidCons = targetResolution == "hd" ? hdConsPort : targetResolution == "fhd" ? fhdConsPort : targetResolution == "qhd" ? qhdConsPort : targetResolution == "sd" ? sdConsPort : QnHDConsPort;
|
|
382
394
|
}
|
|
383
395
|
let frameRateValue = frameRate || 10;
|
|
384
|
-
let vParamsValue =
|
|
385
|
-
let hParamsValue =
|
|
386
|
-
if (Object.keys(vParamsValue).length == 0) {
|
|
387
|
-
vParamsValue = { ...vParams };
|
|
388
|
-
}
|
|
389
|
-
if (Object.keys(hParamsValue).length == 0) {
|
|
390
|
-
hParamsValue = { ...hParams };
|
|
391
|
-
}
|
|
396
|
+
let vParamsValue = freshRoomVideoParams(vParams$1, vParams);
|
|
397
|
+
let hParamsValue = freshRoomVideoParams(hParams$1, hParams);
|
|
392
398
|
if (targetResolution == "hd") {
|
|
393
399
|
frameRateValue = hdFrameRate;
|
|
394
400
|
vParamsValue.encodings.forEach((encoding) => {
|
|
@@ -654,4 +660,4 @@ export {
|
|
|
654
660
|
prepopulateUserMedia as p,
|
|
655
661
|
updateRoomParametersClient as u
|
|
656
662
|
};
|
|
657
|
-
//# sourceMappingURL=joinLocalRoom-
|
|
663
|
+
//# sourceMappingURL=joinLocalRoom-X3NXzGmE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joinLocalRoom-X3NXzGmE.js","sources":["../src/consumers/addVideosGrid.ts","../src/consumers/prepopulateUserMedia.ts","../src/methods/breakoutRooms/breakoutRoomUpdated.ts","../src/methods/settings/modifySettings.ts","../src/ProducerClient/producerClientEmits/createDeviceClient.ts","../src/producers/producerEmits/joinRoom.ts","../src/ProducerClient/producerClientEmits/joinRoomClient.ts","../src/ProducerClient/producerClientEmits/roomVideoParams.ts","../src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts","../src/producers/producerEmits/joinLocalRoom.ts"],"sourcesContent":["// Stub export for addVideosGrid\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface AddVideosGridParameters {\n [key: string]: any;\n}\n\nexport interface AddVideosGridOptions {\n parameters: AddVideosGridParameters;\n [key: string]: any; // Accept any additional properties\n}\n\nexport type AddVideosGridType = (options: AddVideosGridOptions) => Promise<void>;\n\nexport const addVideosGrid: AddVideosGridType = async () => {\n throw createFrameworkConsumerContractError('addVideosGrid');\n};\n","// Stub export for prepopulateUserMedia\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface PrepopulateUserMediaParameters {\n [key: string]: any;\n}\n\nexport interface PrepopulateUserMediaOptions {\n name: string;\n parameters: PrepopulateUserMediaParameters;\n}\n\nexport type PrepopulateUserMediaType = (options: PrepopulateUserMediaOptions) => Promise<void>;\n\nexport const prepopulateUserMedia: PrepopulateUserMediaType = async () => {\n throw createFrameworkConsumerContractError('prepopulateUserMedia');\n};\n","import type {\n BreakoutParticipant,\n BreakoutRoomUpdatedData,\n OnScreenChangesParameters,\n OnScreenChangesType,\n Participant,\n RePortParameters,\n RePortType,\n} from '../../types/types'\n\nexport interface BreakoutRoomUpdatedParameters extends OnScreenChangesParameters, RePortParameters {\n breakOutRoomStarted: boolean\n breakOutRoomEnded: boolean\n breakoutRooms: BreakoutParticipant[][]\n hostNewRoom: number\n islevel: string\n participantsAll: Participant[]\n participants: Participant[]\n meetingDisplayType: string\n prevMeetingDisplayType: string\n updateBreakoutRooms: (rooms: BreakoutParticipant[][]) => void\n updateBreakOutRoomStarted: (started: boolean) => void\n updateBreakOutRoomEnded: (ended: boolean) => void\n updateHostNewRoom: (room: number) => void\n updateMeetingDisplayType: (type: string) => void\n updateParticipantsAll: (participants: Participant[]) => void\n updateParticipants: (participants: Participant[]) => void\n onScreenChanges: OnScreenChangesType\n rePort: RePortType\n getUpdatedAllParams: () => BreakoutRoomUpdatedParameters\n [key: string]: any\n}\n\nexport interface BreakoutRoomUpdatedOptions {\n data: BreakoutRoomUpdatedData\n parameters: BreakoutRoomUpdatedParameters\n}\n\nexport type BreakoutRoomUpdatedType = (options: BreakoutRoomUpdatedOptions) => Promise<void>\n\n/**\n * Updates the state of breakout rooms based on the provided data and parameters.\n *\n * @param {BreakoutRoomUpdatedOptions} options - The options object.\n * @param {BreakoutRoomUpdatedData} options.data - The data object containing information about the breakout rooms.\n * @param {BreakoutRoomUpdatedParameters} options.parameters - The parameters object containing various state update functions and other parameters.\n *\n * @example\n * ```typescript\n * const breakoutOptions: BreakoutRoomUpdatedOptions = {\n * data: breakoutData,\n * parameters: {\n * breakOutRoomStarted: false,\n * breakOutRoomEnded: false,\n * breakoutRooms: [[]],\n * hostNewRoom: 1,\n * islevel: '2',\n * participantsAll: allParticipants,\n * participants: activeParticipants,\n * meetingDisplayType: 'all',\n * prevMeetingDisplayType: 'video',\n * updateBreakoutRooms: setBreakoutRooms,\n * updateBreakOutRoomStarted: setBreakOutRoomStarted,\n * updateBreakOutRoomEnded: setBreakOutRoomEnded,\n * updateHostNewRoom: setHostNewRoom,\n * updateMeetingDisplayType: setMeetingDisplayType,\n * updateParticipantsAll: setAllParticipants,\n * updateParticipants: setActiveParticipants,\n * onScreenChanges: handleScreenChanges,\n * rePort: reportFunction,\n * getUpdatedAllParams: () => breakoutOptions.parameters,\n * },\n * }\n *\n * await breakoutRoomUpdated(breakoutOptions)\n * ```\n */\nexport const breakoutRoomUpdated: BreakoutRoomUpdatedType = async ({ data, parameters }) => {\n try {\n let {\n breakOutRoomStarted,\n breakOutRoomEnded,\n breakoutRooms,\n hostNewRoom,\n islevel,\n participantsAll,\n participants,\n meetingDisplayType,\n prevMeetingDisplayType,\n updateBreakoutRooms,\n updateBreakOutRoomStarted,\n updateBreakOutRoomEnded,\n updateHostNewRoom,\n updateMeetingDisplayType,\n updateParticipantsAll,\n updateParticipants,\n onScreenChanges,\n rePort,\n } = parameters\n\n if (data.forHost) {\n hostNewRoom = data.newRoom!\n updateHostNewRoom(hostNewRoom!)\n await onScreenChanges({ changed: true, parameters })\n return\n }\n\n if (islevel === '2' && data.members) {\n participantsAll = data.members.map((participant) => ({\n isBanned: participant.isBanned,\n name: participant.name,\n audioID: participant.audioID,\n videoID: participant.videoID,\n }))\n updateParticipantsAll(participantsAll)\n\n participants = data.members.filter((participant) => !participant.isBanned)\n updateParticipants(participants)\n }\n\n breakoutRooms = data.breakoutRooms || []\n updateBreakoutRooms(breakoutRooms)\n\n if (data.status === 'started' && (!breakOutRoomStarted || breakOutRoomEnded)) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n prevMeetingDisplayType = meetingDisplayType\n if (meetingDisplayType !== 'all') {\n meetingDisplayType = 'all'\n updateMeetingDisplayType('all')\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'ended') {\n breakOutRoomEnded = true\n updateBreakOutRoomEnded(true)\n if (meetingDisplayType !== prevMeetingDisplayType) {\n updateMeetingDisplayType(prevMeetingDisplayType)\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'started' && breakOutRoomStarted) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n }\n } catch {\n // Handle error\n }\n}\n","import { Socket } from 'socket.io-client';\nimport type { ShowAlert } from '../../types/types';\n\nexport interface ModifySettingsOptions {\n showAlert?: ShowAlert;\n roomName: string;\n audioSet: string;\n videoSet: string;\n screenshareSet: string;\n chatSet: string;\n socket: Socket;\n updateAudioSetting: (audioSet: string) => void;\n updateVideoSetting: (videoSet: string) => void;\n updateScreenshareSetting: (screenshareSet: string) => void;\n updateChatSetting: (chatSet: string) => void;\n updateIsSettingsModalVisible: (isVisible: boolean) => void;\n}\n\n// Export the type definition for the function\nexport type ModifySettingsType = (options: ModifySettingsOptions) => Promise<void>;\n\n/**\n * Modifies the settings for a given room and updates the state accordingly.\n *\n * @param {ModifySettingsOptions} options - The options for modifying settings.\n * @returns {Promise<void>} A promise that resolves when the settings have been modified.\n *\n * @throws Will show an alert if any setting is set to \"approval\" in demo mode (room name starts with \"d\").\n *\n * @example\n * ```typescript\n * modifySettings({\n * roomName: \"d123\",\n * audioSet: \"allow\",\n * videoSet: \"allow\",\n * screenshareSet: \"deny\",\n * chatSet: \"allow\",\n * socket: mySocketInstance,\n * updateAudioSetting: setAudioSetting,\n * updateVideoSetting: setVideoSetting,\n * updateScreenshareSetting: setScreenshareSetting,\n * updateChatSetting: setChatSetting,\n * updateIsSettingsModalVisible: setIsSettingsModalVisible,\n * showAlert: (options) => alertUser(options),\n * });\n * ```\n */\nexport async function modifySettings({\n // showAlert,\n roomName,\n audioSet,\n videoSet,\n screenshareSet,\n chatSet,\n socket,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateChatSetting,\n updateIsSettingsModalVisible,\n}: ModifySettingsOptions): Promise<void> {\n // if (roomName.toLowerCase().startsWith('d')) {\n // // none should be approval\n // if (\n // audioSet === 'approval' ||\n // videoSet === 'approval' ||\n // screenshareSet === 'approval' ||\n // chatSet === 'approval'\n // ) {\n // showAlert?.({\n // message: 'You cannot set approval for demo mode.',\n // type: 'danger',\n // duration: 3000,\n // });\n\n // return;\n // }\n // }\n\n // Check and update state variables based on the provided logic\n if (audioSet) {\n updateAudioSetting(audioSet);\n }\n if (videoSet) {\n updateVideoSetting(videoSet);\n }\n if (screenshareSet) {\n updateScreenshareSetting(screenshareSet);\n }\n if (chatSet) {\n updateChatSetting(chatSet);\n }\n\n const settings = [audioSet, videoSet, screenshareSet, chatSet];\n socket.emit('updateSettingsForRequests', { settings, roomName });\n\n // Close modal\n updateIsSettingsModalVisible(false);\n}\n","import * as mediasoupClient from \"mediasoup-client\";\nimport type { RtpCapabilities, Device } from 'mediasoup-client/types';\n\nexport interface CreateDeviceClientOptions {\n rtpCapabilities: RtpCapabilities | null;\n}\n\n\n// Export the type definition for the function\nexport type CreateDeviceClientType = (options: CreateDeviceClientOptions) => Promise<Device | null>;\n\n\n/**\n * Creates a mediasoup client device with the provided RTP capabilities.\n *\n * @param {CreateDeviceClientOptions} options - The options for creating the device client.\n * @param {RTPCapabilities} options.rtpCapabilities - The RTP capabilities required for the device.\n * @returns {Promise<Device | null>} A promise that resolves to the created Device or null if creation fails.\n * @throws {Error} Throws an error if the required parameters are not provided or if device creation is not supported.\n *\n * @example\n * const device = await createDeviceClient({ rtpCapabilities });\n * if (device) {\n * console.log(\"Device created successfully\");\n * } else {\n * console.log(\"Failed to create device\");\n * }\n */\n\nexport const createDeviceClient = async ({\n rtpCapabilities\n}: CreateDeviceClientOptions): Promise<Device | null> => {\n try {\n // Validate input parameters\n if (!rtpCapabilities) {\n throw new Error(\n \"Both rtpCapabilities and mediasoupClient must be provided.\"\n );\n }\n\n // Create a mediasoup client device\n const device: (Device | null) = new mediasoupClient.Device();\n\n // Remove orientation capabilities\n rtpCapabilities.headerExtensions = rtpCapabilities!.headerExtensions!.filter(\n (ext) => ext.uri !== \"urn:3gpp:video-orientation\"\n );\n\n // Load the provided RTP capabilities into the device\n await device!.load({\n routerRtpCapabilities: rtpCapabilities,\n });\n\n return device;\n } catch ( error ) {\n // Handle specific errors, e.g., UnsupportedError\n if ( error as Error && (error as Error).name === \"UnsupportedError\" ) {\n // Handle unsupported device creation\n console.error(\"Device creation is not supported by this browser.\");\n }\n\n throw error; // Propagate other errors\n }\n\n};\n\n\n","import { Socket } from 'socket.io-client';\nimport type { RtpCapabilities } from 'mediasoup-client/types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\n\nexport interface JoinRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n}\n\nexport interface JoinRoomResponse {\n success: boolean;\n rtpCapabilities: RtpCapabilities | null;\n reason?: string;\n banned?: boolean;\n suspended?: boolean;\n noAdmin?: boolean;\n [key: string]: any;\n}\n\nexport type JoinRoomType = (options: JoinRoomOptions) => Promise<JoinRoomResponse>;\n\n/**\n * Joins a user to a specified room via a socket connection.\n *\n * @param {JoinRoomOptions} options - The options for joining the room.\n * @param {Socket} options.socket - The socket instance to use for communication.\n * @param {string} options.roomName - The name of the room to join.\n * @param {string} options.islevel - The level of the user.\n * @param {string} options.member - The member identifier.\n * @param {string} options.sec - The security token.\n * @param {string} options.apiUserName - The API username of the user.\n *\n * @returns {Promise<JoinRoomResponse>} A promise that resolves with the data received from the 'joinRoom' event or rejects with a validation error.\n */\nexport async function joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n}: JoinRoomOptions): Promise<JoinRoomResponse> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('d'))) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 64\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n {\n roomName, islevel, member, sec, apiUserName,\n },\n async (data: JoinRoomResponse) => {\n try {\n if (data.rtpCapabilities == null) {\n if (data.banned) {\n throw new Error('User is banned.');\n }\n if (data.suspended) {\n throw new Error('User is suspended.');\n }\n if (data.noAdmin) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}\n","import { Socket } from 'socket.io-client';\nimport { joinRoom, JoinRoomResponse } from '../../producers/producerEmits/joinRoom';\nimport { joinConRoom, JoinConRoomResponse } from '../../producers/producerEmits/joinConRoom';\n\nexport interface JoinRoomClientOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n consume?: boolean;\n}\n\nexport type JoinRoomClientResponse = JoinRoomResponse | JoinConRoomResponse;\nexport type JoinRoomClientType = (options: JoinRoomClientOptions) => Promise<JoinRoomClientResponse>;\n\n/**\n * Joins a room by delegating to the producer or consumer join emit based on the consume flag.\n *\n * @param {JoinRoomClientOptions} options - The options for joining the room.\n * @returns {Promise<JoinRoomClientResponse>} The response returned from the server.\n */\nexport const joinRoomClient = async ({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n consume = false,\n}: JoinRoomClientOptions): Promise<JoinRoomClientResponse> => {\n try {\n if (consume) {\n return await joinConRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n }\n\n return await joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n } catch (error) {\n console.log(error);\n throw new Error('Failed to join the room. Please check your connection and try again.');\n }\n};\n","import type { HParamsType, VParamsType } from '../../types/shared-base-types';\n\n// Room updates feed their previous result back into this function. Keep the\n// original preset as the source so resolution changes never compound bitrates.\nconst baseParams = new WeakMap<object, object>();\n\nexport function freshRoomVideoParams<T extends HParamsType | VParamsType>(\n current: T,\n fallback: T,\n): T {\n const source = current?.encodings?.length ? current : fallback;\n const base = (baseParams.get(source) as T | undefined) ?? source;\n const fresh = {\n ...base,\n encodings: base.encodings.map((encoding) => ({ ...encoding })),\n codecOptions: base.codecOptions ? { ...base.codecOptions } : undefined,\n } as T;\n\n baseParams.set(fresh, base);\n return fresh;\n}\n","/* eslint-disable eqeqeq */\nimport { RtpCapabilities } from 'mediasoup-client/types';\nimport {\n QnHDCons,\n sdCons,\n hdCons,\n fhdCons,\n qhdCons,\n QnHDConsPort,\n sdConsPort,\n hdConsPort,\n fhdConsPort,\n qhdConsPort,\n QnHDConsNeu,\n sdConsNeu,\n hdConsNeu,\n fhdConsNeu,\n qhdConsNeu,\n QnHDFrameRate,\n hdFrameRate,\n fhdFrameRate,\n qhdFrameRate,\n} from '../../methods/utils/producer/videoCaptureConstraints';\nimport { hParams as host_Params } from '../../methods/utils/producer/hParams';\nimport { vParams as video_Params } from '../../methods/utils/producer/vParams';\nimport { screenParams as screen_Params } from '../../methods/utils/producer/screenParams';\nimport { aParams as audio_Params } from '../../methods/utils/producer/aParams';\nimport { freshRoomVideoParams } from './roomVideoParams';\nimport {\n HParamsType,\n VParamsType,\n ScreenParamsType,\n AParamsType,\n MeetingRoomParams,\n VidCons,\n ShowAlert,\n ResponseJoinRoom,\n EventType,\n} from '../../types/shared-base-types';\n\nexport interface UpdateRoomParametersClientParameters {\n rtpCapabilities: RtpCapabilities | null;\n roomRecvIPs: string[];\n meetingRoomParams: MeetingRoomParams | null;\n itemPageLimit: number;\n audioOnlyRoom: boolean;\n addForBasic: boolean;\n screenPageLimit: number;\n shareScreenStarted: boolean;\n shared: boolean;\n targetOrientation: string;\n vidCons: VidCons;\n recordingVideoSupport: boolean;\n frameRate: number;\n adminPasscode: string;\n eventType: EventType;\n youAreCoHost: boolean;\n autoWave: boolean;\n forceFullDisplay: boolean;\n chatSetting: string;\n meetingDisplayType: string;\n audioSetting: string;\n videoSetting: string;\n screenshareSetting: string;\n hParams: HParamsType;\n vParams: VParamsType;\n screenParams: ScreenParamsType;\n aParams: AParamsType;\n islevel: string;\n showAlert?: ShowAlert;\n data: ResponseJoinRoom;\n updateRtpCapabilities: (rtpCapabilities: RtpCapabilities | null) => void;\n updateRoomRecvIPs: (roomRecvIPs: string[]) => void;\n updateMeetingRoomParams: (meetingRoomParams: MeetingRoomParams | null) => void;\n updateItemPageLimit: (limit: number) => void;\n updateAudioOnlyRoom: (isAudioOnly: boolean) => void;\n updateAddForBasic: (addForBasic: boolean) => void;\n updateScreenPageLimit: (limit: number) => void;\n updateVidCons: (cons: VidCons) => void;\n updateFrameRate: (frameRate: number) => void;\n updateAdminPasscode: (passcode: string) => void;\n updateEventType: (eventType: EventType) => void;\n updateYouAreCoHost: (coHost: boolean) => void;\n updateAutoWave: (autoWave: boolean) => void;\n updateForceFullDisplay: (forceFull: boolean) => void;\n updateChatSetting: (setting: string) => void;\n updateMeetingDisplayType: (type: string) => void;\n updateAudioSetting: (setting: string) => void;\n updateVideoSetting: (setting: string) => void;\n updateScreenshareSetting: (setting: string) => void;\n updateHParams: (params: HParamsType) => void;\n updateVParams: (params: VParamsType) => void;\n updateScreenParams: (params: ScreenParamsType) => void;\n updateAParams: (params: AParamsType) => void;\n updateMainHeightWidth: (heightWidth: number) => void;\n updateTargetResolution: (resolution: string) => void;\n updateTargetResolutionHost: (resolution: string) => void;\n updateRecordingAudioPausesLimit: (limit: number) => void;\n updateRecordingAudioPausesCount: (count: number) => void;\n updateRecordingAudioSupport: (support: boolean) => void;\n updateRecordingAudioPeopleLimit: (limit: number) => void;\n updateRecordingAudioParticipantsTimeLimit: (limit: number) => void;\n updateRecordingVideoPausesCount: (count: number) => void;\n updateRecordingVideoPausesLimit: (limit: number) => void;\n updateRecordingVideoSupport: (support: boolean) => void;\n updateRecordingVideoPeopleLimit: (limit: number) => void;\n updateRecordingVideoParticipantsTimeLimit: (limit: number) => void;\n updateRecordingAllParticipantsSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsSupport: (support: boolean) => void;\n updateRecordingAllParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingPreferredOrientation: (orientation: string) => void;\n updateRecordingSupportForOtherOrientation: (support: boolean) => void;\n updateRecordingMultiFormatsSupport: (support: boolean) => void;\n updateRecordingVideoOptions: (options: string) => void;\n updateRecordingAudioOptions: (options: string) => void;\n}\n\nexport type UpdateRoomParametersClientOptions = {\n parameters: UpdateRoomParametersClientParameters;\n};\n\nexport type UpdateRoomParametersClientType = (options: UpdateRoomParametersClientOptions) => void;\n\nexport const updateRoomParametersClient = ({ parameters }: UpdateRoomParametersClientOptions): void => {\n try {\n const {\n screenPageLimit,\n shareScreenStarted,\n shared,\n hParams = host_Params,\n vParams = video_Params,\n frameRate,\n islevel,\n showAlert,\n data,\n updateRtpCapabilities,\n updateRoomRecvIPs,\n updateMeetingRoomParams,\n updateItemPageLimit,\n updateAudioOnlyRoom,\n updateScreenPageLimit,\n updateVidCons,\n updateFrameRate,\n updateAdminPasscode,\n updateEventType,\n updateYouAreCoHost,\n updateAutoWave,\n updateForceFullDisplay,\n updateChatSetting,\n updateMeetingDisplayType,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateHParams,\n updateVParams,\n updateScreenParams,\n updateAParams,\n updateTargetResolution,\n updateTargetResolutionHost,\n updateRecordingAudioPausesLimit,\n updateRecordingAudioPausesCount,\n updateRecordingAudioSupport,\n updateRecordingAudioPeopleLimit,\n updateRecordingAudioParticipantsTimeLimit,\n updateRecordingVideoPausesCount,\n updateRecordingVideoPausesLimit,\n updateRecordingVideoSupport,\n updateRecordingVideoPeopleLimit,\n updateRecordingVideoParticipantsTimeLimit,\n updateRecordingAllParticipantsSupport,\n updateRecordingVideoParticipantsSupport,\n updateRecordingAllParticipantsFullRoomSupport,\n updateRecordingVideoParticipantsFullRoomSupport,\n updateRecordingPreferredOrientation,\n updateRecordingSupportForOtherOrientation,\n updateRecordingMultiFormatsSupport,\n updateRecordingVideoOptions,\n updateRecordingAudioOptions,\n updateMainHeightWidth,\n } = parameters;\n\n if (data.rtpCapabilities == null) {\n const reason = data.reason || '';\n showAlert?.({\n message: `Sorry, you are not allowed to join this room. ${reason}`,\n type: 'danger',\n duration: 3000,\n });\n return;\n }\n\n updateRtpCapabilities(data.rtpCapabilities);\n updateAdminPasscode(data.secureCode);\n updateRoomRecvIPs(data.roomRecvIPs);\n updateMeetingRoomParams(data.meetingRoomParams);\n\n updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);\n updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount!);\n updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);\n updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);\n updateRecordingAudioParticipantsTimeLimit(data.recordingParams.recordingAudioParticipantsTimeLimit);\n updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount!);\n updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);\n updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);\n updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);\n updateRecordingVideoParticipantsTimeLimit(data.recordingParams.recordingVideoParticipantsTimeLimit);\n updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);\n updateRecordingVideoParticipantsSupport(data.recordingParams.recordingVideoParticipantsSupport);\n updateRecordingAllParticipantsFullRoomSupport(data.recordingParams.recordingAllParticipantsFullRoomSupport);\n updateRecordingVideoParticipantsFullRoomSupport(data.recordingParams.recordingVideoParticipantsFullRoomSupport);\n updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);\n updateRecordingSupportForOtherOrientation(data.recordingParams.recordingSupportForOtherOrientation);\n updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);\n\n updateItemPageLimit(data.meetingRoomParams.itemPageLimit);\n updateEventType(data.meetingRoomParams.type);\n\n if (data.meetingRoomParams.type == 'chat' && islevel != '2') {\n updateYouAreCoHost(true);\n }\n\n if (['chat', 'broadcast'].includes(data.meetingRoomParams.type)) {\n updateAutoWave(false);\n updateMeetingDisplayType('all');\n updateForceFullDisplay(true);\n updateChatSetting('allow');\n updateItemPageLimit(2);\n\n if (['broadcast'].includes(data.meetingRoomParams.type)) {\n updateRecordingVideoOptions('mainScreen');\n updateRecordingAudioOptions('host');\n updateItemPageLimit(1);\n }\n }\n\n updateAudioSetting(data.meetingRoomParams.audioSetting);\n updateVideoSetting(data.meetingRoomParams.videoSetting);\n updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);\n updateChatSetting(data.meetingRoomParams.chatSetting);\n\n updateAudioOnlyRoom(data.meetingRoomParams.mediaType != 'video');\n\n if (data.meetingRoomParams.type == 'conference' && (shared || shareScreenStarted)) {\n updateMainHeightWidth(100);\n } else {\n updateMainHeightWidth(0);\n }\n\n updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));\n\n const targetOrientation = islevel == '2'\n ? data.meetingRoomParams.targetOrientationHost\n : data.meetingRoomParams.targetOrientation;\n const targetResolution = islevel == '2'\n ? data.meetingRoomParams.targetResolutionHost\n : data.meetingRoomParams.targetResolution;\n\n let vidCons: VidCons;\n if (targetOrientation == 'landscape') {\n vidCons = targetResolution == 'hd'\n ? hdCons\n : targetResolution == 'fhd'\n ? fhdCons\n : targetResolution == 'qhd'\n ? qhdCons\n : targetResolution == 'sd'\n ? sdCons\n : QnHDCons;\n } else if (targetOrientation == 'neutral') {\n vidCons = targetResolution == 'hd'\n ? hdConsNeu\n : targetResolution == 'fhd'\n ? fhdConsNeu\n : targetResolution == 'qhd'\n ? qhdConsNeu\n : targetResolution == 'sd'\n ? sdConsNeu\n : QnHDConsNeu;\n } else {\n vidCons = targetResolution == 'hd'\n ? hdConsPort\n : targetResolution == 'fhd'\n ? fhdConsPort\n : targetResolution == 'qhd'\n ? qhdConsPort\n : targetResolution == 'sd'\n ? sdConsPort\n : QnHDConsPort;\n }\n\n let frameRateValue = frameRate || 10;\n let vParamsValue = freshRoomVideoParams(vParams, video_Params);\n let hParamsValue = freshRoomVideoParams(hParams, host_Params);\n\n if (targetResolution == 'hd') {\n frameRateValue = hdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n } else if (targetResolution == 'QnHD') {\n frameRateValue = QnHDFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n } else if (targetResolution == 'fhd') {\n frameRateValue = fhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n } else if (targetResolution == 'qhd') {\n frameRateValue = qhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n }\n\n if (data.recordingParams.recordingVideoSupport) {\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n }\n\n updateVidCons(vidCons);\n updateFrameRate(frameRateValue);\n updateHParams(hParamsValue);\n updateVParams(vParamsValue);\n updateScreenParams(screen_Params);\n updateAParams(audio_Params);\n updateTargetResolution(data.meetingRoomParams.targetResolution);\n updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);\n } catch (error) {\n console.log('updateRoomParametersClient error', error);\n parameters.showAlert?.({\n message: (error as Error).message,\n type: 'danger',\n duration: 3000,\n });\n }\n};\n","import { Socket } from 'socket.io-client';\nimport {\n JoinMediaSFURoomOptions,\n PreJoinPageParameters,\n ResponseJoinLocalRoom,\n} from '../../types/shared-base-types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\nimport { joinRoomOnMediaSFU, JoinRoomOnMediaSFUType } from '../../methods/utils/joinRoomOnMediaSFU';\nimport { checkLimitsAndMakeRequest } from '../../methods/utils/checkLimitsAndMakeRequest';\n\nexport interface JoinLocalRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n parameters: PreJoinPageParameters;\n checkConnect?: boolean;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type JoinLocalRoomType = (\n options: JoinLocalRoomOptions,\n) => Promise<ResponseJoinLocalRoom>;\n\nexport interface CheckMediasfuURLOptions {\n data: ResponseJoinLocalRoom;\n member: string;\n roomName: string;\n islevel: string;\n socket: Socket;\n parameters: PreJoinPageParameters;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type CheckMediasfuURLType = (options: CheckMediasfuURLOptions) => Promise<void>;\n\nexport async function checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: CheckMediasfuURLOptions): Promise<void> {\n if (\n data.mediasfuURL\n && data.mediasfuURL !== ''\n && data.mediasfuURL.length > 10\n ) {\n let link;\n let secretCode;\n\n try {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n\n const urlParts = data.mediasfuURL.split(splitText);\n link = urlParts[0];\n secretCode = urlParts[1].split('/')[1];\n } catch {\n link = data.mediasfuURL;\n return;\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: roomName,\n apiToken: secretCode,\n link,\n apiKey: '',\n userName: member,\n parameters,\n validate: false,\n });\n\n return;\n }\n\n if (\n (!data.mediasfuURL || data.mediasfuURL.length < 10)\n && islevel !== '2'\n && data.allowRecord\n && (data.allowRecord === true || data.allowRecord === 'true')\n && data.apiKey\n && data.apiKey.length === 64\n && data.apiUserName\n && data.apiUserName.length > 5\n && (roomName.startsWith('s') || roomName.startsWith('p'))\n ) {\n const payload: JoinMediaSFURoomOptions = {\n action: 'join',\n meetingID: roomName,\n userName: member,\n };\n\n const response = await joinMediaSFURoom({\n payload,\n apiKey: data.apiKey,\n apiUserName: data.apiUserName,\n localLink,\n });\n\n if (response.success && response.data && 'roomName' in response.data) {\n try {\n socket.emit(\n 'updateMediasfuURL',\n { eventID: roomName, mediasfuURL: response.data.publicURL },\n async () => {},\n );\n } catch {\n // Do nothing\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: response.data.roomName,\n apiToken: response.data.secret,\n link: response.data.link,\n userName: member,\n parameters,\n validate: false,\n });\n parameters.updateApiToken(response.data.secret);\n }\n }\n}\n\nexport async function joinLocalRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n parameters,\n checkConnect = false,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: JoinLocalRoomOptions): Promise<ResponseJoinLocalRoom> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('m') || roomName.startsWith('d'))) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or m or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 32\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n { roomName, islevel, member, sec, apiUserName },\n async (data: ResponseJoinLocalRoom) => {\n try {\n if (data.rtpCapabilities === null) {\n if (data.isBanned) {\n throw new Error('User is banned.');\n }\n if (data.hostNotJoined) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n if (checkConnect) {\n await checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom,\n localLink,\n });\n } else if (data.mediasfuURL && data.mediasfuURL !== '' && data.mediasfuURL.length > 10) {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n const urlParts = data.mediasfuURL.split(splitText);\n const secretCode = urlParts[1].split('/')[1];\n parameters.updateApiToken(secretCode);\n }\n\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}"],"names":["hParams","host_Params","vParams","video_Params","screen_Params","audio_Params"],"mappings":"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"}
|
|
@@ -273,6 +273,18 @@ const joinRoomClient = async ({
|
|
|
273
273
|
throw new Error("Failed to join the room. Please check your connection and try again.");
|
|
274
274
|
}
|
|
275
275
|
};
|
|
276
|
+
const baseParams = /* @__PURE__ */ new WeakMap();
|
|
277
|
+
function freshRoomVideoParams(current, fallback) {
|
|
278
|
+
const source = current?.encodings?.length ? current : fallback;
|
|
279
|
+
const base = baseParams.get(source) ?? source;
|
|
280
|
+
const fresh = {
|
|
281
|
+
...base,
|
|
282
|
+
encodings: base.encodings.map((encoding) => ({ ...encoding })),
|
|
283
|
+
codecOptions: base.codecOptions ? { ...base.codecOptions } : void 0
|
|
284
|
+
};
|
|
285
|
+
baseParams.set(fresh, base);
|
|
286
|
+
return fresh;
|
|
287
|
+
}
|
|
276
288
|
const updateRoomParametersClient = ({ parameters }) => {
|
|
277
289
|
try {
|
|
278
290
|
const {
|
|
@@ -399,14 +411,8 @@ const updateRoomParametersClient = ({ parameters }) => {
|
|
|
399
411
|
vidCons = targetResolution == "hd" ? joinRoomOnMediaSFU.hdConsPort : targetResolution == "fhd" ? joinRoomOnMediaSFU.fhdConsPort : targetResolution == "qhd" ? joinRoomOnMediaSFU.qhdConsPort : targetResolution == "sd" ? joinRoomOnMediaSFU.sdConsPort : joinRoomOnMediaSFU.QnHDConsPort;
|
|
400
412
|
}
|
|
401
413
|
let frameRateValue = frameRate || 10;
|
|
402
|
-
let vParamsValue =
|
|
403
|
-
let hParamsValue =
|
|
404
|
-
if (Object.keys(vParamsValue).length == 0) {
|
|
405
|
-
vParamsValue = { ...joinRoomOnMediaSFU.vParams };
|
|
406
|
-
}
|
|
407
|
-
if (Object.keys(hParamsValue).length == 0) {
|
|
408
|
-
hParamsValue = { ...joinRoomOnMediaSFU.hParams };
|
|
409
|
-
}
|
|
414
|
+
let vParamsValue = freshRoomVideoParams(vParams, joinRoomOnMediaSFU.vParams);
|
|
415
|
+
let hParamsValue = freshRoomVideoParams(hParams, joinRoomOnMediaSFU.hParams);
|
|
410
416
|
if (targetResolution == "hd") {
|
|
411
417
|
frameRateValue = joinRoomOnMediaSFU.hdFrameRate;
|
|
412
418
|
vParamsValue.encodings.forEach((encoding) => {
|
|
@@ -670,4 +676,4 @@ exports.joinRoomClient = joinRoomClient;
|
|
|
670
676
|
exports.modifySettings = modifySettings;
|
|
671
677
|
exports.prepopulateUserMedia = prepopulateUserMedia;
|
|
672
678
|
exports.updateRoomParametersClient = updateRoomParametersClient;
|
|
673
|
-
//# sourceMappingURL=joinLocalRoom-
|
|
679
|
+
//# sourceMappingURL=joinLocalRoom-XjGmL1_k.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"joinLocalRoom-XjGmL1_k.cjs","sources":["../src/consumers/addVideosGrid.ts","../src/consumers/prepopulateUserMedia.ts","../src/methods/breakoutRooms/breakoutRoomUpdated.ts","../src/methods/settings/modifySettings.ts","../src/ProducerClient/producerClientEmits/createDeviceClient.ts","../src/producers/producerEmits/joinRoom.ts","../src/ProducerClient/producerClientEmits/joinRoomClient.ts","../src/ProducerClient/producerClientEmits/roomVideoParams.ts","../src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts","../src/producers/producerEmits/joinLocalRoom.ts"],"sourcesContent":["// Stub export for addVideosGrid\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface AddVideosGridParameters {\n [key: string]: any;\n}\n\nexport interface AddVideosGridOptions {\n parameters: AddVideosGridParameters;\n [key: string]: any; // Accept any additional properties\n}\n\nexport type AddVideosGridType = (options: AddVideosGridOptions) => Promise<void>;\n\nexport const addVideosGrid: AddVideosGridType = async () => {\n throw createFrameworkConsumerContractError('addVideosGrid');\n};\n","// Stub export for prepopulateUserMedia\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface PrepopulateUserMediaParameters {\n [key: string]: any;\n}\n\nexport interface PrepopulateUserMediaOptions {\n name: string;\n parameters: PrepopulateUserMediaParameters;\n}\n\nexport type PrepopulateUserMediaType = (options: PrepopulateUserMediaOptions) => Promise<void>;\n\nexport const prepopulateUserMedia: PrepopulateUserMediaType = async () => {\n throw createFrameworkConsumerContractError('prepopulateUserMedia');\n};\n","import type {\n BreakoutParticipant,\n BreakoutRoomUpdatedData,\n OnScreenChangesParameters,\n OnScreenChangesType,\n Participant,\n RePortParameters,\n RePortType,\n} from '../../types/types'\n\nexport interface BreakoutRoomUpdatedParameters extends OnScreenChangesParameters, RePortParameters {\n breakOutRoomStarted: boolean\n breakOutRoomEnded: boolean\n breakoutRooms: BreakoutParticipant[][]\n hostNewRoom: number\n islevel: string\n participantsAll: Participant[]\n participants: Participant[]\n meetingDisplayType: string\n prevMeetingDisplayType: string\n updateBreakoutRooms: (rooms: BreakoutParticipant[][]) => void\n updateBreakOutRoomStarted: (started: boolean) => void\n updateBreakOutRoomEnded: (ended: boolean) => void\n updateHostNewRoom: (room: number) => void\n updateMeetingDisplayType: (type: string) => void\n updateParticipantsAll: (participants: Participant[]) => void\n updateParticipants: (participants: Participant[]) => void\n onScreenChanges: OnScreenChangesType\n rePort: RePortType\n getUpdatedAllParams: () => BreakoutRoomUpdatedParameters\n [key: string]: any\n}\n\nexport interface BreakoutRoomUpdatedOptions {\n data: BreakoutRoomUpdatedData\n parameters: BreakoutRoomUpdatedParameters\n}\n\nexport type BreakoutRoomUpdatedType = (options: BreakoutRoomUpdatedOptions) => Promise<void>\n\n/**\n * Updates the state of breakout rooms based on the provided data and parameters.\n *\n * @param {BreakoutRoomUpdatedOptions} options - The options object.\n * @param {BreakoutRoomUpdatedData} options.data - The data object containing information about the breakout rooms.\n * @param {BreakoutRoomUpdatedParameters} options.parameters - The parameters object containing various state update functions and other parameters.\n *\n * @example\n * ```typescript\n * const breakoutOptions: BreakoutRoomUpdatedOptions = {\n * data: breakoutData,\n * parameters: {\n * breakOutRoomStarted: false,\n * breakOutRoomEnded: false,\n * breakoutRooms: [[]],\n * hostNewRoom: 1,\n * islevel: '2',\n * participantsAll: allParticipants,\n * participants: activeParticipants,\n * meetingDisplayType: 'all',\n * prevMeetingDisplayType: 'video',\n * updateBreakoutRooms: setBreakoutRooms,\n * updateBreakOutRoomStarted: setBreakOutRoomStarted,\n * updateBreakOutRoomEnded: setBreakOutRoomEnded,\n * updateHostNewRoom: setHostNewRoom,\n * updateMeetingDisplayType: setMeetingDisplayType,\n * updateParticipantsAll: setAllParticipants,\n * updateParticipants: setActiveParticipants,\n * onScreenChanges: handleScreenChanges,\n * rePort: reportFunction,\n * getUpdatedAllParams: () => breakoutOptions.parameters,\n * },\n * }\n *\n * await breakoutRoomUpdated(breakoutOptions)\n * ```\n */\nexport const breakoutRoomUpdated: BreakoutRoomUpdatedType = async ({ data, parameters }) => {\n try {\n let {\n breakOutRoomStarted,\n breakOutRoomEnded,\n breakoutRooms,\n hostNewRoom,\n islevel,\n participantsAll,\n participants,\n meetingDisplayType,\n prevMeetingDisplayType,\n updateBreakoutRooms,\n updateBreakOutRoomStarted,\n updateBreakOutRoomEnded,\n updateHostNewRoom,\n updateMeetingDisplayType,\n updateParticipantsAll,\n updateParticipants,\n onScreenChanges,\n rePort,\n } = parameters\n\n if (data.forHost) {\n hostNewRoom = data.newRoom!\n updateHostNewRoom(hostNewRoom!)\n await onScreenChanges({ changed: true, parameters })\n return\n }\n\n if (islevel === '2' && data.members) {\n participantsAll = data.members.map((participant) => ({\n isBanned: participant.isBanned,\n name: participant.name,\n audioID: participant.audioID,\n videoID: participant.videoID,\n }))\n updateParticipantsAll(participantsAll)\n\n participants = data.members.filter((participant) => !participant.isBanned)\n updateParticipants(participants)\n }\n\n breakoutRooms = data.breakoutRooms || []\n updateBreakoutRooms(breakoutRooms)\n\n if (data.status === 'started' && (!breakOutRoomStarted || breakOutRoomEnded)) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n prevMeetingDisplayType = meetingDisplayType\n if (meetingDisplayType !== 'all') {\n meetingDisplayType = 'all'\n updateMeetingDisplayType('all')\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'ended') {\n breakOutRoomEnded = true\n updateBreakOutRoomEnded(true)\n if (meetingDisplayType !== prevMeetingDisplayType) {\n updateMeetingDisplayType(prevMeetingDisplayType)\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'started' && breakOutRoomStarted) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n }\n } catch {\n // Handle error\n }\n}\n","import { Socket } from 'socket.io-client';\nimport type { ShowAlert } from '../../types/types';\n\nexport interface ModifySettingsOptions {\n showAlert?: ShowAlert;\n roomName: string;\n audioSet: string;\n videoSet: string;\n screenshareSet: string;\n chatSet: string;\n socket: Socket;\n updateAudioSetting: (audioSet: string) => void;\n updateVideoSetting: (videoSet: string) => void;\n updateScreenshareSetting: (screenshareSet: string) => void;\n updateChatSetting: (chatSet: string) => void;\n updateIsSettingsModalVisible: (isVisible: boolean) => void;\n}\n\n// Export the type definition for the function\nexport type ModifySettingsType = (options: ModifySettingsOptions) => Promise<void>;\n\n/**\n * Modifies the settings for a given room and updates the state accordingly.\n *\n * @param {ModifySettingsOptions} options - The options for modifying settings.\n * @returns {Promise<void>} A promise that resolves when the settings have been modified.\n *\n * @throws Will show an alert if any setting is set to \"approval\" in demo mode (room name starts with \"d\").\n *\n * @example\n * ```typescript\n * modifySettings({\n * roomName: \"d123\",\n * audioSet: \"allow\",\n * videoSet: \"allow\",\n * screenshareSet: \"deny\",\n * chatSet: \"allow\",\n * socket: mySocketInstance,\n * updateAudioSetting: setAudioSetting,\n * updateVideoSetting: setVideoSetting,\n * updateScreenshareSetting: setScreenshareSetting,\n * updateChatSetting: setChatSetting,\n * updateIsSettingsModalVisible: setIsSettingsModalVisible,\n * showAlert: (options) => alertUser(options),\n * });\n * ```\n */\nexport async function modifySettings({\n // showAlert,\n roomName,\n audioSet,\n videoSet,\n screenshareSet,\n chatSet,\n socket,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateChatSetting,\n updateIsSettingsModalVisible,\n}: ModifySettingsOptions): Promise<void> {\n // if (roomName.toLowerCase().startsWith('d')) {\n // // none should be approval\n // if (\n // audioSet === 'approval' ||\n // videoSet === 'approval' ||\n // screenshareSet === 'approval' ||\n // chatSet === 'approval'\n // ) {\n // showAlert?.({\n // message: 'You cannot set approval for demo mode.',\n // type: 'danger',\n // duration: 3000,\n // });\n\n // return;\n // }\n // }\n\n // Check and update state variables based on the provided logic\n if (audioSet) {\n updateAudioSetting(audioSet);\n }\n if (videoSet) {\n updateVideoSetting(videoSet);\n }\n if (screenshareSet) {\n updateScreenshareSetting(screenshareSet);\n }\n if (chatSet) {\n updateChatSetting(chatSet);\n }\n\n const settings = [audioSet, videoSet, screenshareSet, chatSet];\n socket.emit('updateSettingsForRequests', { settings, roomName });\n\n // Close modal\n updateIsSettingsModalVisible(false);\n}\n","import * as mediasoupClient from \"mediasoup-client\";\nimport type { RtpCapabilities, Device } from 'mediasoup-client/types';\n\nexport interface CreateDeviceClientOptions {\n rtpCapabilities: RtpCapabilities | null;\n}\n\n\n// Export the type definition for the function\nexport type CreateDeviceClientType = (options: CreateDeviceClientOptions) => Promise<Device | null>;\n\n\n/**\n * Creates a mediasoup client device with the provided RTP capabilities.\n *\n * @param {CreateDeviceClientOptions} options - The options for creating the device client.\n * @param {RTPCapabilities} options.rtpCapabilities - The RTP capabilities required for the device.\n * @returns {Promise<Device | null>} A promise that resolves to the created Device or null if creation fails.\n * @throws {Error} Throws an error if the required parameters are not provided or if device creation is not supported.\n *\n * @example\n * const device = await createDeviceClient({ rtpCapabilities });\n * if (device) {\n * console.log(\"Device created successfully\");\n * } else {\n * console.log(\"Failed to create device\");\n * }\n */\n\nexport const createDeviceClient = async ({\n rtpCapabilities\n}: CreateDeviceClientOptions): Promise<Device | null> => {\n try {\n // Validate input parameters\n if (!rtpCapabilities) {\n throw new Error(\n \"Both rtpCapabilities and mediasoupClient must be provided.\"\n );\n }\n\n // Create a mediasoup client device\n const device: (Device | null) = new mediasoupClient.Device();\n\n // Remove orientation capabilities\n rtpCapabilities.headerExtensions = rtpCapabilities!.headerExtensions!.filter(\n (ext) => ext.uri !== \"urn:3gpp:video-orientation\"\n );\n\n // Load the provided RTP capabilities into the device\n await device!.load({\n routerRtpCapabilities: rtpCapabilities,\n });\n\n return device;\n } catch ( error ) {\n // Handle specific errors, e.g., UnsupportedError\n if ( error as Error && (error as Error).name === \"UnsupportedError\" ) {\n // Handle unsupported device creation\n console.error(\"Device creation is not supported by this browser.\");\n }\n\n throw error; // Propagate other errors\n }\n\n};\n\n\n","import { Socket } from 'socket.io-client';\nimport type { RtpCapabilities } from 'mediasoup-client/types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\n\nexport interface JoinRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n}\n\nexport interface JoinRoomResponse {\n success: boolean;\n rtpCapabilities: RtpCapabilities | null;\n reason?: string;\n banned?: boolean;\n suspended?: boolean;\n noAdmin?: boolean;\n [key: string]: any;\n}\n\nexport type JoinRoomType = (options: JoinRoomOptions) => Promise<JoinRoomResponse>;\n\n/**\n * Joins a user to a specified room via a socket connection.\n *\n * @param {JoinRoomOptions} options - The options for joining the room.\n * @param {Socket} options.socket - The socket instance to use for communication.\n * @param {string} options.roomName - The name of the room to join.\n * @param {string} options.islevel - The level of the user.\n * @param {string} options.member - The member identifier.\n * @param {string} options.sec - The security token.\n * @param {string} options.apiUserName - The API username of the user.\n *\n * @returns {Promise<JoinRoomResponse>} A promise that resolves with the data received from the 'joinRoom' event or rejects with a validation error.\n */\nexport async function joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n}: JoinRoomOptions): Promise<JoinRoomResponse> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('d'))) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 64\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n {\n roomName, islevel, member, sec, apiUserName,\n },\n async (data: JoinRoomResponse) => {\n try {\n if (data.rtpCapabilities == null) {\n if (data.banned) {\n throw new Error('User is banned.');\n }\n if (data.suspended) {\n throw new Error('User is suspended.');\n }\n if (data.noAdmin) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}\n","import { Socket } from 'socket.io-client';\nimport { joinRoom, JoinRoomResponse } from '../../producers/producerEmits/joinRoom';\nimport { joinConRoom, JoinConRoomResponse } from '../../producers/producerEmits/joinConRoom';\n\nexport interface JoinRoomClientOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n consume?: boolean;\n}\n\nexport type JoinRoomClientResponse = JoinRoomResponse | JoinConRoomResponse;\nexport type JoinRoomClientType = (options: JoinRoomClientOptions) => Promise<JoinRoomClientResponse>;\n\n/**\n * Joins a room by delegating to the producer or consumer join emit based on the consume flag.\n *\n * @param {JoinRoomClientOptions} options - The options for joining the room.\n * @returns {Promise<JoinRoomClientResponse>} The response returned from the server.\n */\nexport const joinRoomClient = async ({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n consume = false,\n}: JoinRoomClientOptions): Promise<JoinRoomClientResponse> => {\n try {\n if (consume) {\n return await joinConRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n }\n\n return await joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n } catch (error) {\n console.log(error);\n throw new Error('Failed to join the room. Please check your connection and try again.');\n }\n};\n","import type { HParamsType, VParamsType } from '../../types/shared-base-types';\n\n// Room updates feed their previous result back into this function. Keep the\n// original preset as the source so resolution changes never compound bitrates.\nconst baseParams = new WeakMap<object, object>();\n\nexport function freshRoomVideoParams<T extends HParamsType | VParamsType>(\n current: T,\n fallback: T,\n): T {\n const source = current?.encodings?.length ? current : fallback;\n const base = (baseParams.get(source) as T | undefined) ?? source;\n const fresh = {\n ...base,\n encodings: base.encodings.map((encoding) => ({ ...encoding })),\n codecOptions: base.codecOptions ? { ...base.codecOptions } : undefined,\n } as T;\n\n baseParams.set(fresh, base);\n return fresh;\n}\n","/* eslint-disable eqeqeq */\nimport { RtpCapabilities } from 'mediasoup-client/types';\nimport {\n QnHDCons,\n sdCons,\n hdCons,\n fhdCons,\n qhdCons,\n QnHDConsPort,\n sdConsPort,\n hdConsPort,\n fhdConsPort,\n qhdConsPort,\n QnHDConsNeu,\n sdConsNeu,\n hdConsNeu,\n fhdConsNeu,\n qhdConsNeu,\n QnHDFrameRate,\n hdFrameRate,\n fhdFrameRate,\n qhdFrameRate,\n} from '../../methods/utils/producer/videoCaptureConstraints';\nimport { hParams as host_Params } from '../../methods/utils/producer/hParams';\nimport { vParams as video_Params } from '../../methods/utils/producer/vParams';\nimport { screenParams as screen_Params } from '../../methods/utils/producer/screenParams';\nimport { aParams as audio_Params } from '../../methods/utils/producer/aParams';\nimport { freshRoomVideoParams } from './roomVideoParams';\nimport {\n HParamsType,\n VParamsType,\n ScreenParamsType,\n AParamsType,\n MeetingRoomParams,\n VidCons,\n ShowAlert,\n ResponseJoinRoom,\n EventType,\n} from '../../types/shared-base-types';\n\nexport interface UpdateRoomParametersClientParameters {\n rtpCapabilities: RtpCapabilities | null;\n roomRecvIPs: string[];\n meetingRoomParams: MeetingRoomParams | null;\n itemPageLimit: number;\n audioOnlyRoom: boolean;\n addForBasic: boolean;\n screenPageLimit: number;\n shareScreenStarted: boolean;\n shared: boolean;\n targetOrientation: string;\n vidCons: VidCons;\n recordingVideoSupport: boolean;\n frameRate: number;\n adminPasscode: string;\n eventType: EventType;\n youAreCoHost: boolean;\n autoWave: boolean;\n forceFullDisplay: boolean;\n chatSetting: string;\n meetingDisplayType: string;\n audioSetting: string;\n videoSetting: string;\n screenshareSetting: string;\n hParams: HParamsType;\n vParams: VParamsType;\n screenParams: ScreenParamsType;\n aParams: AParamsType;\n islevel: string;\n showAlert?: ShowAlert;\n data: ResponseJoinRoom;\n updateRtpCapabilities: (rtpCapabilities: RtpCapabilities | null) => void;\n updateRoomRecvIPs: (roomRecvIPs: string[]) => void;\n updateMeetingRoomParams: (meetingRoomParams: MeetingRoomParams | null) => void;\n updateItemPageLimit: (limit: number) => void;\n updateAudioOnlyRoom: (isAudioOnly: boolean) => void;\n updateAddForBasic: (addForBasic: boolean) => void;\n updateScreenPageLimit: (limit: number) => void;\n updateVidCons: (cons: VidCons) => void;\n updateFrameRate: (frameRate: number) => void;\n updateAdminPasscode: (passcode: string) => void;\n updateEventType: (eventType: EventType) => void;\n updateYouAreCoHost: (coHost: boolean) => void;\n updateAutoWave: (autoWave: boolean) => void;\n updateForceFullDisplay: (forceFull: boolean) => void;\n updateChatSetting: (setting: string) => void;\n updateMeetingDisplayType: (type: string) => void;\n updateAudioSetting: (setting: string) => void;\n updateVideoSetting: (setting: string) => void;\n updateScreenshareSetting: (setting: string) => void;\n updateHParams: (params: HParamsType) => void;\n updateVParams: (params: VParamsType) => void;\n updateScreenParams: (params: ScreenParamsType) => void;\n updateAParams: (params: AParamsType) => void;\n updateMainHeightWidth: (heightWidth: number) => void;\n updateTargetResolution: (resolution: string) => void;\n updateTargetResolutionHost: (resolution: string) => void;\n updateRecordingAudioPausesLimit: (limit: number) => void;\n updateRecordingAudioPausesCount: (count: number) => void;\n updateRecordingAudioSupport: (support: boolean) => void;\n updateRecordingAudioPeopleLimit: (limit: number) => void;\n updateRecordingAudioParticipantsTimeLimit: (limit: number) => void;\n updateRecordingVideoPausesCount: (count: number) => void;\n updateRecordingVideoPausesLimit: (limit: number) => void;\n updateRecordingVideoSupport: (support: boolean) => void;\n updateRecordingVideoPeopleLimit: (limit: number) => void;\n updateRecordingVideoParticipantsTimeLimit: (limit: number) => void;\n updateRecordingAllParticipantsSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsSupport: (support: boolean) => void;\n updateRecordingAllParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingPreferredOrientation: (orientation: string) => void;\n updateRecordingSupportForOtherOrientation: (support: boolean) => void;\n updateRecordingMultiFormatsSupport: (support: boolean) => void;\n updateRecordingVideoOptions: (options: string) => void;\n updateRecordingAudioOptions: (options: string) => void;\n}\n\nexport type UpdateRoomParametersClientOptions = {\n parameters: UpdateRoomParametersClientParameters;\n};\n\nexport type UpdateRoomParametersClientType = (options: UpdateRoomParametersClientOptions) => void;\n\nexport const updateRoomParametersClient = ({ parameters }: UpdateRoomParametersClientOptions): void => {\n try {\n const {\n screenPageLimit,\n shareScreenStarted,\n shared,\n hParams = host_Params,\n vParams = video_Params,\n frameRate,\n islevel,\n showAlert,\n data,\n updateRtpCapabilities,\n updateRoomRecvIPs,\n updateMeetingRoomParams,\n updateItemPageLimit,\n updateAudioOnlyRoom,\n updateScreenPageLimit,\n updateVidCons,\n updateFrameRate,\n updateAdminPasscode,\n updateEventType,\n updateYouAreCoHost,\n updateAutoWave,\n updateForceFullDisplay,\n updateChatSetting,\n updateMeetingDisplayType,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateHParams,\n updateVParams,\n updateScreenParams,\n updateAParams,\n updateTargetResolution,\n updateTargetResolutionHost,\n updateRecordingAudioPausesLimit,\n updateRecordingAudioPausesCount,\n updateRecordingAudioSupport,\n updateRecordingAudioPeopleLimit,\n updateRecordingAudioParticipantsTimeLimit,\n updateRecordingVideoPausesCount,\n updateRecordingVideoPausesLimit,\n updateRecordingVideoSupport,\n updateRecordingVideoPeopleLimit,\n updateRecordingVideoParticipantsTimeLimit,\n updateRecordingAllParticipantsSupport,\n updateRecordingVideoParticipantsSupport,\n updateRecordingAllParticipantsFullRoomSupport,\n updateRecordingVideoParticipantsFullRoomSupport,\n updateRecordingPreferredOrientation,\n updateRecordingSupportForOtherOrientation,\n updateRecordingMultiFormatsSupport,\n updateRecordingVideoOptions,\n updateRecordingAudioOptions,\n updateMainHeightWidth,\n } = parameters;\n\n if (data.rtpCapabilities == null) {\n const reason = data.reason || '';\n showAlert?.({\n message: `Sorry, you are not allowed to join this room. ${reason}`,\n type: 'danger',\n duration: 3000,\n });\n return;\n }\n\n updateRtpCapabilities(data.rtpCapabilities);\n updateAdminPasscode(data.secureCode);\n updateRoomRecvIPs(data.roomRecvIPs);\n updateMeetingRoomParams(data.meetingRoomParams);\n\n updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);\n updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount!);\n updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);\n updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);\n updateRecordingAudioParticipantsTimeLimit(data.recordingParams.recordingAudioParticipantsTimeLimit);\n updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount!);\n updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);\n updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);\n updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);\n updateRecordingVideoParticipantsTimeLimit(data.recordingParams.recordingVideoParticipantsTimeLimit);\n updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);\n updateRecordingVideoParticipantsSupport(data.recordingParams.recordingVideoParticipantsSupport);\n updateRecordingAllParticipantsFullRoomSupport(data.recordingParams.recordingAllParticipantsFullRoomSupport);\n updateRecordingVideoParticipantsFullRoomSupport(data.recordingParams.recordingVideoParticipantsFullRoomSupport);\n updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);\n updateRecordingSupportForOtherOrientation(data.recordingParams.recordingSupportForOtherOrientation);\n updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);\n\n updateItemPageLimit(data.meetingRoomParams.itemPageLimit);\n updateEventType(data.meetingRoomParams.type);\n\n if (data.meetingRoomParams.type == 'chat' && islevel != '2') {\n updateYouAreCoHost(true);\n }\n\n if (['chat', 'broadcast'].includes(data.meetingRoomParams.type)) {\n updateAutoWave(false);\n updateMeetingDisplayType('all');\n updateForceFullDisplay(true);\n updateChatSetting('allow');\n updateItemPageLimit(2);\n\n if (['broadcast'].includes(data.meetingRoomParams.type)) {\n updateRecordingVideoOptions('mainScreen');\n updateRecordingAudioOptions('host');\n updateItemPageLimit(1);\n }\n }\n\n updateAudioSetting(data.meetingRoomParams.audioSetting);\n updateVideoSetting(data.meetingRoomParams.videoSetting);\n updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);\n updateChatSetting(data.meetingRoomParams.chatSetting);\n\n updateAudioOnlyRoom(data.meetingRoomParams.mediaType != 'video');\n\n if (data.meetingRoomParams.type == 'conference' && (shared || shareScreenStarted)) {\n updateMainHeightWidth(100);\n } else {\n updateMainHeightWidth(0);\n }\n\n updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));\n\n const targetOrientation = islevel == '2'\n ? data.meetingRoomParams.targetOrientationHost\n : data.meetingRoomParams.targetOrientation;\n const targetResolution = islevel == '2'\n ? data.meetingRoomParams.targetResolutionHost\n : data.meetingRoomParams.targetResolution;\n\n let vidCons: VidCons;\n if (targetOrientation == 'landscape') {\n vidCons = targetResolution == 'hd'\n ? hdCons\n : targetResolution == 'fhd'\n ? fhdCons\n : targetResolution == 'qhd'\n ? qhdCons\n : targetResolution == 'sd'\n ? sdCons\n : QnHDCons;\n } else if (targetOrientation == 'neutral') {\n vidCons = targetResolution == 'hd'\n ? hdConsNeu\n : targetResolution == 'fhd'\n ? fhdConsNeu\n : targetResolution == 'qhd'\n ? qhdConsNeu\n : targetResolution == 'sd'\n ? sdConsNeu\n : QnHDConsNeu;\n } else {\n vidCons = targetResolution == 'hd'\n ? hdConsPort\n : targetResolution == 'fhd'\n ? fhdConsPort\n : targetResolution == 'qhd'\n ? qhdConsPort\n : targetResolution == 'sd'\n ? sdConsPort\n : QnHDConsPort;\n }\n\n let frameRateValue = frameRate || 10;\n let vParamsValue = freshRoomVideoParams(vParams, video_Params);\n let hParamsValue = freshRoomVideoParams(hParams, host_Params);\n\n if (targetResolution == 'hd') {\n frameRateValue = hdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n } else if (targetResolution == 'QnHD') {\n frameRateValue = QnHDFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n } else if (targetResolution == 'fhd') {\n frameRateValue = fhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n } else if (targetResolution == 'qhd') {\n frameRateValue = qhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n }\n\n if (data.recordingParams.recordingVideoSupport) {\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n }\n\n updateVidCons(vidCons);\n updateFrameRate(frameRateValue);\n updateHParams(hParamsValue);\n updateVParams(vParamsValue);\n updateScreenParams(screen_Params);\n updateAParams(audio_Params);\n updateTargetResolution(data.meetingRoomParams.targetResolution);\n updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);\n } catch (error) {\n console.log('updateRoomParametersClient error', error);\n parameters.showAlert?.({\n message: (error as Error).message,\n type: 'danger',\n duration: 3000,\n });\n }\n};\n","import { Socket } from 'socket.io-client';\nimport {\n JoinMediaSFURoomOptions,\n PreJoinPageParameters,\n ResponseJoinLocalRoom,\n} from '../../types/shared-base-types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\nimport { joinRoomOnMediaSFU, JoinRoomOnMediaSFUType } from '../../methods/utils/joinRoomOnMediaSFU';\nimport { checkLimitsAndMakeRequest } from '../../methods/utils/checkLimitsAndMakeRequest';\n\nexport interface JoinLocalRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n parameters: PreJoinPageParameters;\n checkConnect?: boolean;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type JoinLocalRoomType = (\n options: JoinLocalRoomOptions,\n) => Promise<ResponseJoinLocalRoom>;\n\nexport interface CheckMediasfuURLOptions {\n data: ResponseJoinLocalRoom;\n member: string;\n roomName: string;\n islevel: string;\n socket: Socket;\n parameters: PreJoinPageParameters;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type CheckMediasfuURLType = (options: CheckMediasfuURLOptions) => Promise<void>;\n\nexport async function checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: CheckMediasfuURLOptions): Promise<void> {\n if (\n data.mediasfuURL\n && data.mediasfuURL !== ''\n && data.mediasfuURL.length > 10\n ) {\n let link;\n let secretCode;\n\n try {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n\n const urlParts = data.mediasfuURL.split(splitText);\n link = urlParts[0];\n secretCode = urlParts[1].split('/')[1];\n } catch {\n link = data.mediasfuURL;\n return;\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: roomName,\n apiToken: secretCode,\n link,\n apiKey: '',\n userName: member,\n parameters,\n validate: false,\n });\n\n return;\n }\n\n if (\n (!data.mediasfuURL || data.mediasfuURL.length < 10)\n && islevel !== '2'\n && data.allowRecord\n && (data.allowRecord === true || data.allowRecord === 'true')\n && data.apiKey\n && data.apiKey.length === 64\n && data.apiUserName\n && data.apiUserName.length > 5\n && (roomName.startsWith('s') || roomName.startsWith('p'))\n ) {\n const payload: JoinMediaSFURoomOptions = {\n action: 'join',\n meetingID: roomName,\n userName: member,\n };\n\n const response = await joinMediaSFURoom({\n payload,\n apiKey: data.apiKey,\n apiUserName: data.apiUserName,\n localLink,\n });\n\n if (response.success && response.data && 'roomName' in response.data) {\n try {\n socket.emit(\n 'updateMediasfuURL',\n { eventID: roomName, mediasfuURL: response.data.publicURL },\n async () => {},\n );\n } catch {\n // Do nothing\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: response.data.roomName,\n apiToken: response.data.secret,\n link: response.data.link,\n userName: member,\n parameters,\n validate: false,\n });\n parameters.updateApiToken(response.data.secret);\n }\n }\n}\n\nexport async function joinLocalRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n parameters,\n checkConnect = false,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: JoinLocalRoomOptions): Promise<ResponseJoinLocalRoom> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('m') || roomName.startsWith('d'))) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or m or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 32\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n { roomName, islevel, member, sec, apiUserName },\n async (data: ResponseJoinLocalRoom) => {\n try {\n if (data.rtpCapabilities === null) {\n if (data.isBanned) {\n throw new Error('User is banned.');\n }\n if (data.hostNotJoined) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n if (checkConnect) {\n await checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom,\n localLink,\n });\n } else if (data.mediasfuURL && data.mediasfuURL !== '' && data.mediasfuURL.length > 10) {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n const urlParts = data.mediasfuURL.split(splitText);\n const secretCode = urlParts[1].split('/')[1];\n parameters.updateApiToken(secretCode);\n }\n\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}"],"names":["createFrameworkConsumerContractError","mediasoupClient","validateAlphanumeric","joinConRoom","host_Params","video_Params","hdCons","fhdCons","qhdCons","sdCons","QnHDCons","hdConsNeu","fhdConsNeu","qhdConsNeu","sdConsNeu","QnHDConsNeu","hdConsPort","fhdConsPort","qhdConsPort","sdConsPort","QnHDConsPort","hdFrameRate","QnHDFrameRate","fhdFrameRate","qhdFrameRate","screen_Params","audio_Params","joinRoomOnMediaSFU","checkLimitsAndMakeRequest"],"mappings":"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"}
|
package/dist/types/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const joinLocalRoom = require("../joinLocalRoom-
|
|
3
|
+
const joinLocalRoom = require("../joinLocalRoom-XjGmL1_k.cjs");
|
|
4
4
|
const updateParticipantAudioDecibels = require("../updateParticipantAudioDecibels-BJ2PxJJD.cjs");
|
|
5
5
|
const joinRoomOnMediaSFU = require("../joinRoomOnMediaSFU-D2C7q1GK.cjs");
|
|
6
6
|
exports.addVideosGrid = joinLocalRoom.addVideosGrid;
|
package/dist/types/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a, b, d, c, e, f, j, m, p, u } from "../joinLocalRoom-
|
|
1
|
+
import { a, b, d, c, e, f, j, m, p, u } from "../joinLocalRoom-X3NXzGmE.js";
|
|
2
2
|
import { Y, Z, a as a2, _, $, b as b2, W, d as d2, e as e2, f as f2, g, h, i, j as j2, k, l, m as m2, c as c2, a0, n, o, p as p2, q, r, s, a1, a2 as a22, a3, t, X, T, v, U, w, x, y, V, C, G, z, A, a4, B, D, E, F, a5, N, H, I, J, K, L, M, O, P, Q, R, S, u as u2, a6, a7 } from "../updateParticipantAudioDecibels-DiJ_LFfH.js";
|
|
3
3
|
import { e as e3, a as a8, c as c3, b as b3, d as d3, h as h2, t as t2 } from "../joinRoomOnMediaSFU-BnAWLciF.js";
|
|
4
4
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediasfu-shared",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "mediasfu-shared – framework-agnostic WebRTC runtime for MediaSFU. Room helpers, mediasoup signaling, socket management, media state, and TypeScript types for React, Vue, Angular, Svelte, and plain TS.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HParamsType, VParamsType } from '../../types/shared-base-types';
|
|
2
|
+
|
|
3
|
+
// Room updates feed their previous result back into this function. Keep the
|
|
4
|
+
// original preset as the source so resolution changes never compound bitrates.
|
|
5
|
+
const baseParams = new WeakMap<object, object>();
|
|
6
|
+
|
|
7
|
+
export function freshRoomVideoParams<T extends HParamsType | VParamsType>(
|
|
8
|
+
current: T,
|
|
9
|
+
fallback: T,
|
|
10
|
+
): T {
|
|
11
|
+
const source = current?.encodings?.length ? current : fallback;
|
|
12
|
+
const base = (baseParams.get(source) as T | undefined) ?? source;
|
|
13
|
+
const fresh = {
|
|
14
|
+
...base,
|
|
15
|
+
encodings: base.encodings.map((encoding) => ({ ...encoding })),
|
|
16
|
+
codecOptions: base.codecOptions ? { ...base.codecOptions } : undefined,
|
|
17
|
+
} as T;
|
|
18
|
+
|
|
19
|
+
baseParams.set(fresh, base);
|
|
20
|
+
return fresh;
|
|
21
|
+
}
|
|
@@ -25,6 +25,7 @@ import { hParams as host_Params } from '../../methods/utils/producer/hParams';
|
|
|
25
25
|
import { vParams as video_Params } from '../../methods/utils/producer/vParams';
|
|
26
26
|
import { screenParams as screen_Params } from '../../methods/utils/producer/screenParams';
|
|
27
27
|
import { aParams as audio_Params } from '../../methods/utils/producer/aParams';
|
|
28
|
+
import { freshRoomVideoParams } from './roomVideoParams';
|
|
28
29
|
import {
|
|
29
30
|
HParamsType,
|
|
30
31
|
VParamsType,
|
|
@@ -289,16 +290,8 @@ export const updateRoomParametersClient = ({ parameters }: UpdateRoomParametersC
|
|
|
289
290
|
}
|
|
290
291
|
|
|
291
292
|
let frameRateValue = frameRate || 10;
|
|
292
|
-
let vParamsValue =
|
|
293
|
-
let hParamsValue =
|
|
294
|
-
|
|
295
|
-
if (Object.keys(vParamsValue).length == 0) {
|
|
296
|
-
vParamsValue = { ...video_Params };
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
if (Object.keys(hParamsValue).length == 0) {
|
|
300
|
-
hParamsValue = { ...host_Params };
|
|
301
|
-
}
|
|
293
|
+
let vParamsValue = freshRoomVideoParams(vParams, video_Params);
|
|
294
|
+
let hParamsValue = freshRoomVideoParams(hParams, host_Params);
|
|
302
295
|
|
|
303
296
|
if (targetResolution == 'hd') {
|
|
304
297
|
frameRateValue = hdFrameRate;
|
|
@@ -39,7 +39,7 @@ export function startVirtualBackgroundFrameLoop({
|
|
|
39
39
|
if (stopped || inFlight) return;
|
|
40
40
|
if (!shouldContinue()) { stop(); return; }
|
|
41
41
|
if (document.hidden && keepProcessingWhenHidden) {
|
|
42
|
-
timeoutId = setTimeout(() => { void runFrame(); },
|
|
42
|
+
timeoutId = setTimeout(() => { void runFrame(); }, 200);
|
|
43
43
|
} else {
|
|
44
44
|
animationFrameId = requestAnimationFrame(() => { void runFrame(); });
|
|
45
45
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"joinLocalRoom-Cx1y3Ojj.js","sources":["../src/consumers/addVideosGrid.ts","../src/consumers/prepopulateUserMedia.ts","../src/methods/breakoutRooms/breakoutRoomUpdated.ts","../src/methods/settings/modifySettings.ts","../src/ProducerClient/producerClientEmits/createDeviceClient.ts","../src/producers/producerEmits/joinRoom.ts","../src/ProducerClient/producerClientEmits/joinRoomClient.ts","../src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts","../src/producers/producerEmits/joinLocalRoom.ts"],"sourcesContent":["// Stub export for addVideosGrid\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface AddVideosGridParameters {\n [key: string]: any;\n}\n\nexport interface AddVideosGridOptions {\n parameters: AddVideosGridParameters;\n [key: string]: any; // Accept any additional properties\n}\n\nexport type AddVideosGridType = (options: AddVideosGridOptions) => Promise<void>;\n\nexport const addVideosGrid: AddVideosGridType = async () => {\n throw createFrameworkConsumerContractError('addVideosGrid');\n};\n","// Stub export for prepopulateUserMedia\n// This is a React component in the original and not needed for the shared package\n\nimport { createFrameworkConsumerContractError } from './frameworkConsumerContract';\n\nexport interface PrepopulateUserMediaParameters {\n [key: string]: any;\n}\n\nexport interface PrepopulateUserMediaOptions {\n name: string;\n parameters: PrepopulateUserMediaParameters;\n}\n\nexport type PrepopulateUserMediaType = (options: PrepopulateUserMediaOptions) => Promise<void>;\n\nexport const prepopulateUserMedia: PrepopulateUserMediaType = async () => {\n throw createFrameworkConsumerContractError('prepopulateUserMedia');\n};\n","import type {\n BreakoutParticipant,\n BreakoutRoomUpdatedData,\n OnScreenChangesParameters,\n OnScreenChangesType,\n Participant,\n RePortParameters,\n RePortType,\n} from '../../types/types'\n\nexport interface BreakoutRoomUpdatedParameters extends OnScreenChangesParameters, RePortParameters {\n breakOutRoomStarted: boolean\n breakOutRoomEnded: boolean\n breakoutRooms: BreakoutParticipant[][]\n hostNewRoom: number\n islevel: string\n participantsAll: Participant[]\n participants: Participant[]\n meetingDisplayType: string\n prevMeetingDisplayType: string\n updateBreakoutRooms: (rooms: BreakoutParticipant[][]) => void\n updateBreakOutRoomStarted: (started: boolean) => void\n updateBreakOutRoomEnded: (ended: boolean) => void\n updateHostNewRoom: (room: number) => void\n updateMeetingDisplayType: (type: string) => void\n updateParticipantsAll: (participants: Participant[]) => void\n updateParticipants: (participants: Participant[]) => void\n onScreenChanges: OnScreenChangesType\n rePort: RePortType\n getUpdatedAllParams: () => BreakoutRoomUpdatedParameters\n [key: string]: any\n}\n\nexport interface BreakoutRoomUpdatedOptions {\n data: BreakoutRoomUpdatedData\n parameters: BreakoutRoomUpdatedParameters\n}\n\nexport type BreakoutRoomUpdatedType = (options: BreakoutRoomUpdatedOptions) => Promise<void>\n\n/**\n * Updates the state of breakout rooms based on the provided data and parameters.\n *\n * @param {BreakoutRoomUpdatedOptions} options - The options object.\n * @param {BreakoutRoomUpdatedData} options.data - The data object containing information about the breakout rooms.\n * @param {BreakoutRoomUpdatedParameters} options.parameters - The parameters object containing various state update functions and other parameters.\n *\n * @example\n * ```typescript\n * const breakoutOptions: BreakoutRoomUpdatedOptions = {\n * data: breakoutData,\n * parameters: {\n * breakOutRoomStarted: false,\n * breakOutRoomEnded: false,\n * breakoutRooms: [[]],\n * hostNewRoom: 1,\n * islevel: '2',\n * participantsAll: allParticipants,\n * participants: activeParticipants,\n * meetingDisplayType: 'all',\n * prevMeetingDisplayType: 'video',\n * updateBreakoutRooms: setBreakoutRooms,\n * updateBreakOutRoomStarted: setBreakOutRoomStarted,\n * updateBreakOutRoomEnded: setBreakOutRoomEnded,\n * updateHostNewRoom: setHostNewRoom,\n * updateMeetingDisplayType: setMeetingDisplayType,\n * updateParticipantsAll: setAllParticipants,\n * updateParticipants: setActiveParticipants,\n * onScreenChanges: handleScreenChanges,\n * rePort: reportFunction,\n * getUpdatedAllParams: () => breakoutOptions.parameters,\n * },\n * }\n *\n * await breakoutRoomUpdated(breakoutOptions)\n * ```\n */\nexport const breakoutRoomUpdated: BreakoutRoomUpdatedType = async ({ data, parameters }) => {\n try {\n let {\n breakOutRoomStarted,\n breakOutRoomEnded,\n breakoutRooms,\n hostNewRoom,\n islevel,\n participantsAll,\n participants,\n meetingDisplayType,\n prevMeetingDisplayType,\n updateBreakoutRooms,\n updateBreakOutRoomStarted,\n updateBreakOutRoomEnded,\n updateHostNewRoom,\n updateMeetingDisplayType,\n updateParticipantsAll,\n updateParticipants,\n onScreenChanges,\n rePort,\n } = parameters\n\n if (data.forHost) {\n hostNewRoom = data.newRoom!\n updateHostNewRoom(hostNewRoom!)\n await onScreenChanges({ changed: true, parameters })\n return\n }\n\n if (islevel === '2' && data.members) {\n participantsAll = data.members.map((participant) => ({\n isBanned: participant.isBanned,\n name: participant.name,\n audioID: participant.audioID,\n videoID: participant.videoID,\n }))\n updateParticipantsAll(participantsAll)\n\n participants = data.members.filter((participant) => !participant.isBanned)\n updateParticipants(participants)\n }\n\n breakoutRooms = data.breakoutRooms || []\n updateBreakoutRooms(breakoutRooms)\n\n if (data.status === 'started' && (!breakOutRoomStarted || breakOutRoomEnded)) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n prevMeetingDisplayType = meetingDisplayType\n if (meetingDisplayType !== 'all') {\n meetingDisplayType = 'all'\n updateMeetingDisplayType('all')\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'ended') {\n breakOutRoomEnded = true\n updateBreakOutRoomEnded(true)\n if (meetingDisplayType !== prevMeetingDisplayType) {\n updateMeetingDisplayType(prevMeetingDisplayType)\n }\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n } else if (data.status === 'started' && breakOutRoomStarted) {\n breakOutRoomStarted = true\n breakOutRoomEnded = false\n updateBreakOutRoomStarted(true)\n updateBreakOutRoomEnded(false)\n await onScreenChanges({ changed: true, parameters })\n if (islevel === '2') {\n await rePort({ restart: true, parameters })\n }\n }\n } catch {\n // Handle error\n }\n}\n","import { Socket } from 'socket.io-client';\nimport type { ShowAlert } from '../../types/types';\n\nexport interface ModifySettingsOptions {\n showAlert?: ShowAlert;\n roomName: string;\n audioSet: string;\n videoSet: string;\n screenshareSet: string;\n chatSet: string;\n socket: Socket;\n updateAudioSetting: (audioSet: string) => void;\n updateVideoSetting: (videoSet: string) => void;\n updateScreenshareSetting: (screenshareSet: string) => void;\n updateChatSetting: (chatSet: string) => void;\n updateIsSettingsModalVisible: (isVisible: boolean) => void;\n}\n\n// Export the type definition for the function\nexport type ModifySettingsType = (options: ModifySettingsOptions) => Promise<void>;\n\n/**\n * Modifies the settings for a given room and updates the state accordingly.\n *\n * @param {ModifySettingsOptions} options - The options for modifying settings.\n * @returns {Promise<void>} A promise that resolves when the settings have been modified.\n *\n * @throws Will show an alert if any setting is set to \"approval\" in demo mode (room name starts with \"d\").\n *\n * @example\n * ```typescript\n * modifySettings({\n * roomName: \"d123\",\n * audioSet: \"allow\",\n * videoSet: \"allow\",\n * screenshareSet: \"deny\",\n * chatSet: \"allow\",\n * socket: mySocketInstance,\n * updateAudioSetting: setAudioSetting,\n * updateVideoSetting: setVideoSetting,\n * updateScreenshareSetting: setScreenshareSetting,\n * updateChatSetting: setChatSetting,\n * updateIsSettingsModalVisible: setIsSettingsModalVisible,\n * showAlert: (options) => alertUser(options),\n * });\n * ```\n */\nexport async function modifySettings({\n // showAlert,\n roomName,\n audioSet,\n videoSet,\n screenshareSet,\n chatSet,\n socket,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateChatSetting,\n updateIsSettingsModalVisible,\n}: ModifySettingsOptions): Promise<void> {\n // if (roomName.toLowerCase().startsWith('d')) {\n // // none should be approval\n // if (\n // audioSet === 'approval' ||\n // videoSet === 'approval' ||\n // screenshareSet === 'approval' ||\n // chatSet === 'approval'\n // ) {\n // showAlert?.({\n // message: 'You cannot set approval for demo mode.',\n // type: 'danger',\n // duration: 3000,\n // });\n\n // return;\n // }\n // }\n\n // Check and update state variables based on the provided logic\n if (audioSet) {\n updateAudioSetting(audioSet);\n }\n if (videoSet) {\n updateVideoSetting(videoSet);\n }\n if (screenshareSet) {\n updateScreenshareSetting(screenshareSet);\n }\n if (chatSet) {\n updateChatSetting(chatSet);\n }\n\n const settings = [audioSet, videoSet, screenshareSet, chatSet];\n socket.emit('updateSettingsForRequests', { settings, roomName });\n\n // Close modal\n updateIsSettingsModalVisible(false);\n}\n","import * as mediasoupClient from \"mediasoup-client\";\nimport type { RtpCapabilities, Device } from 'mediasoup-client/types';\n\nexport interface CreateDeviceClientOptions {\n rtpCapabilities: RtpCapabilities | null;\n}\n\n\n// Export the type definition for the function\nexport type CreateDeviceClientType = (options: CreateDeviceClientOptions) => Promise<Device | null>;\n\n\n/**\n * Creates a mediasoup client device with the provided RTP capabilities.\n *\n * @param {CreateDeviceClientOptions} options - The options for creating the device client.\n * @param {RTPCapabilities} options.rtpCapabilities - The RTP capabilities required for the device.\n * @returns {Promise<Device | null>} A promise that resolves to the created Device or null if creation fails.\n * @throws {Error} Throws an error if the required parameters are not provided or if device creation is not supported.\n *\n * @example\n * const device = await createDeviceClient({ rtpCapabilities });\n * if (device) {\n * console.log(\"Device created successfully\");\n * } else {\n * console.log(\"Failed to create device\");\n * }\n */\n\nexport const createDeviceClient = async ({\n rtpCapabilities\n}: CreateDeviceClientOptions): Promise<Device | null> => {\n try {\n // Validate input parameters\n if (!rtpCapabilities) {\n throw new Error(\n \"Both rtpCapabilities and mediasoupClient must be provided.\"\n );\n }\n\n // Create a mediasoup client device\n const device: (Device | null) = new mediasoupClient.Device();\n\n // Remove orientation capabilities\n rtpCapabilities.headerExtensions = rtpCapabilities!.headerExtensions!.filter(\n (ext) => ext.uri !== \"urn:3gpp:video-orientation\"\n );\n\n // Load the provided RTP capabilities into the device\n await device!.load({\n routerRtpCapabilities: rtpCapabilities,\n });\n\n return device;\n } catch ( error ) {\n // Handle specific errors, e.g., UnsupportedError\n if ( error as Error && (error as Error).name === \"UnsupportedError\" ) {\n // Handle unsupported device creation\n console.error(\"Device creation is not supported by this browser.\");\n }\n\n throw error; // Propagate other errors\n }\n\n};\n\n\n","import { Socket } from 'socket.io-client';\nimport type { RtpCapabilities } from 'mediasoup-client/types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\n\nexport interface JoinRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n}\n\nexport interface JoinRoomResponse {\n success: boolean;\n rtpCapabilities: RtpCapabilities | null;\n reason?: string;\n banned?: boolean;\n suspended?: boolean;\n noAdmin?: boolean;\n [key: string]: any;\n}\n\nexport type JoinRoomType = (options: JoinRoomOptions) => Promise<JoinRoomResponse>;\n\n/**\n * Joins a user to a specified room via a socket connection.\n *\n * @param {JoinRoomOptions} options - The options for joining the room.\n * @param {Socket} options.socket - The socket instance to use for communication.\n * @param {string} options.roomName - The name of the room to join.\n * @param {string} options.islevel - The level of the user.\n * @param {string} options.member - The member identifier.\n * @param {string} options.sec - The security token.\n * @param {string} options.apiUserName - The API username of the user.\n *\n * @returns {Promise<JoinRoomResponse>} A promise that resolves with the data received from the 'joinRoom' event or rejects with a validation error.\n */\nexport async function joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n}: JoinRoomOptions): Promise<JoinRoomResponse> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('d'))) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 64\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError: JoinRoomResponse = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n {\n roomName, islevel, member, sec, apiUserName,\n },\n async (data: JoinRoomResponse) => {\n try {\n if (data.rtpCapabilities == null) {\n if (data.banned) {\n throw new Error('User is banned.');\n }\n if (data.suspended) {\n throw new Error('User is suspended.');\n }\n if (data.noAdmin) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}\n","import { Socket } from 'socket.io-client';\nimport { joinRoom, JoinRoomResponse } from '../../producers/producerEmits/joinRoom';\nimport { joinConRoom, JoinConRoomResponse } from '../../producers/producerEmits/joinConRoom';\n\nexport interface JoinRoomClientOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n consume?: boolean;\n}\n\nexport type JoinRoomClientResponse = JoinRoomResponse | JoinConRoomResponse;\nexport type JoinRoomClientType = (options: JoinRoomClientOptions) => Promise<JoinRoomClientResponse>;\n\n/**\n * Joins a room by delegating to the producer or consumer join emit based on the consume flag.\n *\n * @param {JoinRoomClientOptions} options - The options for joining the room.\n * @returns {Promise<JoinRoomClientResponse>} The response returned from the server.\n */\nexport const joinRoomClient = async ({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n consume = false,\n}: JoinRoomClientOptions): Promise<JoinRoomClientResponse> => {\n try {\n if (consume) {\n return await joinConRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n }\n\n return await joinRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n });\n } catch (error) {\n console.log(error);\n throw new Error('Failed to join the room. Please check your connection and try again.');\n }\n};\n","/* eslint-disable eqeqeq */\nimport { RtpCapabilities } from 'mediasoup-client/types';\nimport {\n QnHDCons,\n sdCons,\n hdCons,\n fhdCons,\n qhdCons,\n QnHDConsPort,\n sdConsPort,\n hdConsPort,\n fhdConsPort,\n qhdConsPort,\n QnHDConsNeu,\n sdConsNeu,\n hdConsNeu,\n fhdConsNeu,\n qhdConsNeu,\n QnHDFrameRate,\n hdFrameRate,\n fhdFrameRate,\n qhdFrameRate,\n} from '../../methods/utils/producer/videoCaptureConstraints';\nimport { hParams as host_Params } from '../../methods/utils/producer/hParams';\nimport { vParams as video_Params } from '../../methods/utils/producer/vParams';\nimport { screenParams as screen_Params } from '../../methods/utils/producer/screenParams';\nimport { aParams as audio_Params } from '../../methods/utils/producer/aParams';\nimport {\n HParamsType,\n VParamsType,\n ScreenParamsType,\n AParamsType,\n MeetingRoomParams,\n VidCons,\n ShowAlert,\n ResponseJoinRoom,\n EventType,\n} from '../../types/shared-base-types';\n\nexport interface UpdateRoomParametersClientParameters {\n rtpCapabilities: RtpCapabilities | null;\n roomRecvIPs: string[];\n meetingRoomParams: MeetingRoomParams | null;\n itemPageLimit: number;\n audioOnlyRoom: boolean;\n addForBasic: boolean;\n screenPageLimit: number;\n shareScreenStarted: boolean;\n shared: boolean;\n targetOrientation: string;\n vidCons: VidCons;\n recordingVideoSupport: boolean;\n frameRate: number;\n adminPasscode: string;\n eventType: EventType;\n youAreCoHost: boolean;\n autoWave: boolean;\n forceFullDisplay: boolean;\n chatSetting: string;\n meetingDisplayType: string;\n audioSetting: string;\n videoSetting: string;\n screenshareSetting: string;\n hParams: HParamsType;\n vParams: VParamsType;\n screenParams: ScreenParamsType;\n aParams: AParamsType;\n islevel: string;\n showAlert?: ShowAlert;\n data: ResponseJoinRoom;\n updateRtpCapabilities: (rtpCapabilities: RtpCapabilities | null) => void;\n updateRoomRecvIPs: (roomRecvIPs: string[]) => void;\n updateMeetingRoomParams: (meetingRoomParams: MeetingRoomParams | null) => void;\n updateItemPageLimit: (limit: number) => void;\n updateAudioOnlyRoom: (isAudioOnly: boolean) => void;\n updateAddForBasic: (addForBasic: boolean) => void;\n updateScreenPageLimit: (limit: number) => void;\n updateVidCons: (cons: VidCons) => void;\n updateFrameRate: (frameRate: number) => void;\n updateAdminPasscode: (passcode: string) => void;\n updateEventType: (eventType: EventType) => void;\n updateYouAreCoHost: (coHost: boolean) => void;\n updateAutoWave: (autoWave: boolean) => void;\n updateForceFullDisplay: (forceFull: boolean) => void;\n updateChatSetting: (setting: string) => void;\n updateMeetingDisplayType: (type: string) => void;\n updateAudioSetting: (setting: string) => void;\n updateVideoSetting: (setting: string) => void;\n updateScreenshareSetting: (setting: string) => void;\n updateHParams: (params: HParamsType) => void;\n updateVParams: (params: VParamsType) => void;\n updateScreenParams: (params: ScreenParamsType) => void;\n updateAParams: (params: AParamsType) => void;\n updateMainHeightWidth: (heightWidth: number) => void;\n updateTargetResolution: (resolution: string) => void;\n updateTargetResolutionHost: (resolution: string) => void;\n updateRecordingAudioPausesLimit: (limit: number) => void;\n updateRecordingAudioPausesCount: (count: number) => void;\n updateRecordingAudioSupport: (support: boolean) => void;\n updateRecordingAudioPeopleLimit: (limit: number) => void;\n updateRecordingAudioParticipantsTimeLimit: (limit: number) => void;\n updateRecordingVideoPausesCount: (count: number) => void;\n updateRecordingVideoPausesLimit: (limit: number) => void;\n updateRecordingVideoSupport: (support: boolean) => void;\n updateRecordingVideoPeopleLimit: (limit: number) => void;\n updateRecordingVideoParticipantsTimeLimit: (limit: number) => void;\n updateRecordingAllParticipantsSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsSupport: (support: boolean) => void;\n updateRecordingAllParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingVideoParticipantsFullRoomSupport: (support: boolean) => void;\n updateRecordingPreferredOrientation: (orientation: string) => void;\n updateRecordingSupportForOtherOrientation: (support: boolean) => void;\n updateRecordingMultiFormatsSupport: (support: boolean) => void;\n updateRecordingVideoOptions: (options: string) => void;\n updateRecordingAudioOptions: (options: string) => void;\n}\n\nexport type UpdateRoomParametersClientOptions = {\n parameters: UpdateRoomParametersClientParameters;\n};\n\nexport type UpdateRoomParametersClientType = (options: UpdateRoomParametersClientOptions) => void;\n\nexport const updateRoomParametersClient = ({ parameters }: UpdateRoomParametersClientOptions): void => {\n try {\n const {\n screenPageLimit,\n shareScreenStarted,\n shared,\n hParams = host_Params,\n vParams = video_Params,\n frameRate,\n islevel,\n showAlert,\n data,\n updateRtpCapabilities,\n updateRoomRecvIPs,\n updateMeetingRoomParams,\n updateItemPageLimit,\n updateAudioOnlyRoom,\n updateScreenPageLimit,\n updateVidCons,\n updateFrameRate,\n updateAdminPasscode,\n updateEventType,\n updateYouAreCoHost,\n updateAutoWave,\n updateForceFullDisplay,\n updateChatSetting,\n updateMeetingDisplayType,\n updateAudioSetting,\n updateVideoSetting,\n updateScreenshareSetting,\n updateHParams,\n updateVParams,\n updateScreenParams,\n updateAParams,\n updateTargetResolution,\n updateTargetResolutionHost,\n updateRecordingAudioPausesLimit,\n updateRecordingAudioPausesCount,\n updateRecordingAudioSupport,\n updateRecordingAudioPeopleLimit,\n updateRecordingAudioParticipantsTimeLimit,\n updateRecordingVideoPausesCount,\n updateRecordingVideoPausesLimit,\n updateRecordingVideoSupport,\n updateRecordingVideoPeopleLimit,\n updateRecordingVideoParticipantsTimeLimit,\n updateRecordingAllParticipantsSupport,\n updateRecordingVideoParticipantsSupport,\n updateRecordingAllParticipantsFullRoomSupport,\n updateRecordingVideoParticipantsFullRoomSupport,\n updateRecordingPreferredOrientation,\n updateRecordingSupportForOtherOrientation,\n updateRecordingMultiFormatsSupport,\n updateRecordingVideoOptions,\n updateRecordingAudioOptions,\n updateMainHeightWidth,\n } = parameters;\n\n if (data.rtpCapabilities == null) {\n const reason = data.reason || '';\n showAlert?.({\n message: `Sorry, you are not allowed to join this room. ${reason}`,\n type: 'danger',\n duration: 3000,\n });\n return;\n }\n\n updateRtpCapabilities(data.rtpCapabilities);\n updateAdminPasscode(data.secureCode);\n updateRoomRecvIPs(data.roomRecvIPs);\n updateMeetingRoomParams(data.meetingRoomParams);\n\n updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);\n updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount!);\n updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);\n updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);\n updateRecordingAudioParticipantsTimeLimit(data.recordingParams.recordingAudioParticipantsTimeLimit);\n updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount!);\n updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);\n updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);\n updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);\n updateRecordingVideoParticipantsTimeLimit(data.recordingParams.recordingVideoParticipantsTimeLimit);\n updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);\n updateRecordingVideoParticipantsSupport(data.recordingParams.recordingVideoParticipantsSupport);\n updateRecordingAllParticipantsFullRoomSupport(data.recordingParams.recordingAllParticipantsFullRoomSupport);\n updateRecordingVideoParticipantsFullRoomSupport(data.recordingParams.recordingVideoParticipantsFullRoomSupport);\n updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);\n updateRecordingSupportForOtherOrientation(data.recordingParams.recordingSupportForOtherOrientation);\n updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);\n\n updateItemPageLimit(data.meetingRoomParams.itemPageLimit);\n updateEventType(data.meetingRoomParams.type);\n\n if (data.meetingRoomParams.type == 'chat' && islevel != '2') {\n updateYouAreCoHost(true);\n }\n\n if (['chat', 'broadcast'].includes(data.meetingRoomParams.type)) {\n updateAutoWave(false);\n updateMeetingDisplayType('all');\n updateForceFullDisplay(true);\n updateChatSetting('allow');\n updateItemPageLimit(2);\n\n if (['broadcast'].includes(data.meetingRoomParams.type)) {\n updateRecordingVideoOptions('mainScreen');\n updateRecordingAudioOptions('host');\n updateItemPageLimit(1);\n }\n }\n\n updateAudioSetting(data.meetingRoomParams.audioSetting);\n updateVideoSetting(data.meetingRoomParams.videoSetting);\n updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);\n updateChatSetting(data.meetingRoomParams.chatSetting);\n\n updateAudioOnlyRoom(data.meetingRoomParams.mediaType != 'video');\n\n if (data.meetingRoomParams.type == 'conference' && (shared || shareScreenStarted)) {\n updateMainHeightWidth(100);\n } else {\n updateMainHeightWidth(0);\n }\n\n updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));\n\n const targetOrientation = islevel == '2'\n ? data.meetingRoomParams.targetOrientationHost\n : data.meetingRoomParams.targetOrientation;\n const targetResolution = islevel == '2'\n ? data.meetingRoomParams.targetResolutionHost\n : data.meetingRoomParams.targetResolution;\n\n let vidCons: VidCons;\n if (targetOrientation == 'landscape') {\n vidCons = targetResolution == 'hd'\n ? hdCons\n : targetResolution == 'fhd'\n ? fhdCons\n : targetResolution == 'qhd'\n ? qhdCons\n : targetResolution == 'sd'\n ? sdCons\n : QnHDCons;\n } else if (targetOrientation == 'neutral') {\n vidCons = targetResolution == 'hd'\n ? hdConsNeu\n : targetResolution == 'fhd'\n ? fhdConsNeu\n : targetResolution == 'qhd'\n ? qhdConsNeu\n : targetResolution == 'sd'\n ? sdConsNeu\n : QnHDConsNeu;\n } else {\n vidCons = targetResolution == 'hd'\n ? hdConsPort\n : targetResolution == 'fhd'\n ? fhdConsPort\n : targetResolution == 'qhd'\n ? qhdConsPort\n : targetResolution == 'sd'\n ? sdConsPort\n : QnHDConsPort;\n }\n\n let frameRateValue = frameRate || 10;\n let vParamsValue = { ...vParams };\n let hParamsValue = { ...hParams };\n\n if (Object.keys(vParamsValue).length == 0) {\n vParamsValue = { ...video_Params };\n }\n\n if (Object.keys(hParamsValue).length == 0) {\n hParamsValue = { ...host_Params };\n }\n\n if (targetResolution == 'hd') {\n frameRateValue = hdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);\n }\n });\n } else if (targetResolution == 'QnHD') {\n frameRateValue = QnHDFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);\n }\n } else if (targetResolution == 'fhd') {\n frameRateValue = fhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);\n }\n });\n } else if (targetResolution == 'qhd') {\n frameRateValue = qhdFrameRate;\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);\n }\n });\n }\n\n if (data.recordingParams.recordingVideoSupport) {\n vParamsValue.encodings.forEach((encoding: Partial<VParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n hParamsValue.encodings.forEach((encoding: Partial<HParamsType['encodings'][0]>) => {\n if (encoding.maxBitrate) {\n encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);\n }\n });\n\n if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {\n hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {\n vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);\n }\n }\n\n updateVidCons(vidCons);\n updateFrameRate(frameRateValue);\n updateHParams(hParamsValue);\n updateVParams(vParamsValue);\n updateScreenParams(screen_Params);\n updateAParams(audio_Params);\n updateTargetResolution(data.meetingRoomParams.targetResolution);\n updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);\n } catch (error) {\n console.log('updateRoomParametersClient error', error);\n parameters.showAlert?.({\n message: (error as Error).message,\n type: 'danger',\n duration: 3000,\n });\n }\n};\n","import { Socket } from 'socket.io-client';\nimport {\n JoinMediaSFURoomOptions,\n PreJoinPageParameters,\n ResponseJoinLocalRoom,\n} from '../../types/shared-base-types';\nimport { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';\nimport { joinRoomOnMediaSFU, JoinRoomOnMediaSFUType } from '../../methods/utils/joinRoomOnMediaSFU';\nimport { checkLimitsAndMakeRequest } from '../../methods/utils/checkLimitsAndMakeRequest';\n\nexport interface JoinLocalRoomOptions {\n socket: Socket;\n roomName: string;\n islevel: string;\n member: string;\n sec: string;\n apiUserName: string;\n parameters: PreJoinPageParameters;\n checkConnect?: boolean;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type JoinLocalRoomType = (\n options: JoinLocalRoomOptions,\n) => Promise<ResponseJoinLocalRoom>;\n\nexport interface CheckMediasfuURLOptions {\n data: ResponseJoinLocalRoom;\n member: string;\n roomName: string;\n islevel: string;\n socket: Socket;\n parameters: PreJoinPageParameters;\n joinMediaSFURoom?: JoinRoomOnMediaSFUType;\n localLink?: string;\n}\n\nexport type CheckMediasfuURLType = (options: CheckMediasfuURLOptions) => Promise<void>;\n\nexport async function checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: CheckMediasfuURLOptions): Promise<void> {\n if (\n data.mediasfuURL\n && data.mediasfuURL !== ''\n && data.mediasfuURL.length > 10\n ) {\n let link;\n let secretCode;\n\n try {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n\n const urlParts = data.mediasfuURL.split(splitText);\n link = urlParts[0];\n secretCode = urlParts[1].split('/')[1];\n } catch {\n link = data.mediasfuURL;\n return;\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: roomName,\n apiToken: secretCode,\n link,\n apiKey: '',\n userName: member,\n parameters,\n validate: false,\n });\n\n return;\n }\n\n if (\n (!data.mediasfuURL || data.mediasfuURL.length < 10)\n && islevel !== '2'\n && data.allowRecord\n && (data.allowRecord === true || data.allowRecord === 'true')\n && data.apiKey\n && data.apiKey.length === 64\n && data.apiUserName\n && data.apiUserName.length > 5\n && (roomName.startsWith('s') || roomName.startsWith('p'))\n ) {\n const payload: JoinMediaSFURoomOptions = {\n action: 'join',\n meetingID: roomName,\n userName: member,\n };\n\n const response = await joinMediaSFURoom({\n payload,\n apiKey: data.apiKey,\n apiUserName: data.apiUserName,\n localLink,\n });\n\n if (response.success && response.data && 'roomName' in response.data) {\n try {\n socket.emit(\n 'updateMediasfuURL',\n { eventID: roomName, mediasfuURL: response.data.publicURL },\n async () => {},\n );\n } catch {\n // Do nothing\n }\n\n await checkLimitsAndMakeRequest({\n apiUserName: response.data.roomName,\n apiToken: response.data.secret,\n link: response.data.link,\n userName: member,\n parameters,\n validate: false,\n });\n parameters.updateApiToken(response.data.secret);\n }\n }\n}\n\nexport async function joinLocalRoom({\n socket,\n roomName,\n islevel,\n member,\n sec,\n apiUserName,\n parameters,\n checkConnect = false,\n joinMediaSFURoom = joinRoomOnMediaSFU,\n localLink = '',\n}: JoinLocalRoomOptions): Promise<ResponseJoinLocalRoom> {\n return new Promise((resolve, reject) => {\n if (!(sec && roomName && islevel && apiUserName && member)) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Missing required parameters',\n };\n reject(validationError);\n return;\n }\n\n try {\n validateAlphanumeric({ str: roomName });\n validateAlphanumeric({ str: apiUserName });\n validateAlphanumeric({ str: member });\n } catch {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or apiUserName or member',\n };\n reject(validationError);\n return;\n }\n\n if (!(roomName.startsWith('s') || roomName.startsWith('p') || roomName.startsWith('m') || roomName.startsWith('d'))) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName, must start with s or p or m or d',\n };\n reject(validationError);\n return;\n }\n\n if (\n !(\n sec.length === 32\n && roomName.length >= 8\n && islevel.length === 1\n && apiUserName.length >= 6\n && (islevel === '0' || islevel === '1' || islevel === '2')\n )\n ) {\n const validationError = {\n success: false,\n rtpCapabilities: null,\n reason: 'Invalid roomName or islevel or apiUserName or secret',\n };\n reject(validationError);\n return;\n }\n\n socket.emit(\n 'joinRoom',\n { roomName, islevel, member, sec, apiUserName },\n async (data: ResponseJoinLocalRoom) => {\n try {\n if (data.rtpCapabilities === null) {\n if (data.isBanned) {\n throw new Error('User is banned.');\n }\n if (data.hostNotJoined) {\n throw new Error('Host has not joined the room yet.');\n }\n\n resolve(data);\n } else {\n if (checkConnect) {\n await checkMediasfuURL({\n data,\n member,\n roomName,\n islevel,\n socket,\n parameters,\n joinMediaSFURoom,\n localLink,\n });\n } else if (data.mediasfuURL && data.mediasfuURL !== '' && data.mediasfuURL.length > 10) {\n const splitTexts = ['/meet/', '/chat/', '/broadcast/'];\n const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || '/meet/';\n const urlParts = data.mediasfuURL.split(splitText);\n const secretCode = urlParts[1].split('/')[1];\n parameters.updateApiToken(secretCode);\n }\n\n resolve(data);\n }\n } catch (error) {\n console.log('Error joining room:', error);\n reject(error);\n }\n },\n );\n });\n}"],"names":["hParams","host_Params","vParams","video_Params","screen_Params","audio_Params"],"mappings":"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"}
|