mediasfu-shared 1.2.5 → 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/dist/index.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const joinLocalRoom = require("./joinLocalRoom-DNJ2zb8W.cjs");
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-CP4hE5Rg.cjs");
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
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { a, b, d, c, e, f, j, m, p, u } from "./joinLocalRoom-Cx1y3Ojj.js";
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 { _ as getCurrentParams, W as getLocalVideoStream } from "./getParticipantMedia-CvXdDj03.js";
6
- 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, az, X as X2, 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-CvXdDj03.js";
5
+ import { _ as getCurrentParams, W as getLocalVideoStream } from "./getParticipantMedia-B8MFkrT1.js";
6
+ 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, az, X as X2, 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";
7
7
  import { COMMON_LANGUAGE_CODES, MediaStream as MediaStream2, 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";
8
8
  import { v as v4 } from "./audioProcessing-0z5KlcmO.js";
9
9
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const joinLocalRoom = require("./joinLocalRoom-DNJ2zb8W.cjs");
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-CP4hE5Rg.cjs");
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;
@@ -1,8 +1,8 @@
1
- import { a, b, d, c, e, f, j, m, p, u } from "./joinLocalRoom-Cx1y3Ojj.js";
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-CvXdDj03.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-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 = { ...vParams$1 };
385
- let hParamsValue = { ...hParams$1 };
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-Cx1y3Ojj.js.map
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 = { ...vParams };
403
- let hParamsValue = { ...hParams };
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-DNJ2zb8W.cjs.map
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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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const joinLocalRoom = require("../joinLocalRoom-DNJ2zb8W.cjs");
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;
@@ -1,4 +1,4 @@
1
- import { a, b, d, c, e, f, j, m, p, u } from "../joinLocalRoom-Cx1y3Ojj.js";
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.5",
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 = { ...vParams };
293
- let hParamsValue = { ...hParams };
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;