mediasfu-shared 1.1.0 → 1.2.0

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.
Files changed (137) hide show
  1. package/README.md +17 -0
  2. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts +1 -1
  3. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts.map +1 -1
  4. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts +1 -1
  5. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts.map +1 -1
  6. package/dist/consumers/connectIps.d.ts +1 -1
  7. package/dist/consumers/connectIps.d.ts.map +1 -1
  8. package/dist/consumers/connectRecvTransport.d.ts +1 -1
  9. package/dist/consumers/connectRecvTransport.d.ts.map +1 -1
  10. package/dist/consumers/connectSendTransport.d.ts +1 -1
  11. package/dist/consumers/connectSendTransport.d.ts.map +1 -1
  12. package/dist/consumers/connectSendTransportAudio.d.ts +1 -1
  13. package/dist/consumers/connectSendTransportAudio.d.ts.map +1 -1
  14. package/dist/consumers/connectSendTransportScreen.d.ts +1 -1
  15. package/dist/consumers/connectSendTransportScreen.d.ts.map +1 -1
  16. package/dist/consumers/connectSendTransportVideo.d.ts +1 -1
  17. package/dist/consumers/connectSendTransportVideo.d.ts.map +1 -1
  18. package/dist/consumers/createSendTransport.d.ts +1 -1
  19. package/dist/consumers/createSendTransport.d.ts.map +1 -1
  20. package/dist/consumers/disconnectSendTransportAudio.d.ts +1 -1
  21. package/dist/consumers/disconnectSendTransportAudio.d.ts.map +1 -1
  22. package/dist/consumers/disconnectSendTransportScreen.d.ts +1 -1
  23. package/dist/consumers/disconnectSendTransportScreen.d.ts.map +1 -1
  24. package/dist/consumers/disconnectSendTransportVideo.d.ts +1 -1
  25. package/dist/consumers/disconnectSendTransportVideo.d.ts.map +1 -1
  26. package/dist/consumers/index.cjs +80 -0
  27. package/dist/consumers/index.cjs.map +1 -0
  28. package/dist/consumers/index.d.ts +62 -0
  29. package/dist/consumers/index.d.ts.map +1 -0
  30. package/dist/consumers/index.js +80 -0
  31. package/dist/consumers/index.js.map +1 -0
  32. package/dist/consumers/resumeSendTransportAudio.d.ts +1 -1
  33. package/dist/consumers/resumeSendTransportAudio.d.ts.map +1 -1
  34. package/dist/consumers/signalNewConsumerTransport.d.ts +1 -1
  35. package/dist/consumers/signalNewConsumerTransport.d.ts.map +1 -1
  36. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts +1 -1
  37. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts.map +1 -1
  38. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts +1 -1
  39. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts.map +1 -1
  40. package/dist/consumers/streamSuccessAudio.d.ts +1 -1
  41. package/dist/consumers/streamSuccessAudio.d.ts.map +1 -1
  42. package/dist/consumers/streamSuccessAudioSwitch.d.ts +1 -1
  43. package/dist/consumers/streamSuccessAudioSwitch.d.ts.map +1 -1
  44. package/dist/consumers/streamSuccessVideo.d.ts +1 -1
  45. package/dist/consumers/streamSuccessVideo.d.ts.map +1 -1
  46. package/dist/getParticipantMedia-B0JS6d2b.js +3555 -0
  47. package/dist/getParticipantMedia-B0JS6d2b.js.map +1 -0
  48. package/dist/getParticipantMedia-CdcYqcbD.cjs +3554 -0
  49. package/dist/getParticipantMedia-CdcYqcbD.cjs.map +1 -0
  50. package/dist/index.cjs +299 -252
  51. package/dist/index.cjs.map +1 -1
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +1994 -1947
  55. package/dist/index.js.map +1 -1
  56. package/dist/index.native.cjs +230 -224
  57. package/dist/index.native.cjs.map +1 -1
  58. package/dist/index.native.js +349 -343
  59. package/dist/index.native.js.map +1 -1
  60. package/dist/joinLocalRoom-BdM1msQt.cjs +673 -0
  61. package/dist/joinLocalRoom-BdM1msQt.cjs.map +1 -0
  62. package/dist/joinLocalRoom-CvteNe4R.js +657 -0
  63. package/dist/joinLocalRoom-CvteNe4R.js.map +1 -0
  64. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs +1222 -0
  65. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs.map +1 -0
  66. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js +1223 -0
  67. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js.map +1 -0
  68. package/dist/methods/index.cjs +3975 -0
  69. package/dist/methods/index.cjs.map +1 -0
  70. package/dist/methods/index.js +3976 -0
  71. package/dist/methods/index.js.map +1 -0
  72. package/dist/methods/socketReceive/getDomains.d.ts +1 -1
  73. package/dist/methods/socketReceive/getDomains.d.ts.map +1 -1
  74. package/dist/methods/utils/headless/virtualBackground.d.ts +2 -2
  75. package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -1
  76. package/dist/methods/utils/virtualBackgroundCompositor.d.ts +21 -0
  77. package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -0
  78. package/dist/methods/whiteboard/captureCanvasStream.d.ts +1 -1
  79. package/dist/methods/whiteboard/captureCanvasStream.d.ts.map +1 -1
  80. package/dist/producers/producerEmits/joinConRoom.d.ts +1 -1
  81. package/dist/producers/producerEmits/joinConRoom.d.ts.map +1 -1
  82. package/dist/producers/producerEmits/joinRoom.d.ts +1 -1
  83. package/dist/producers/producerEmits/joinRoom.d.ts.map +1 -1
  84. package/dist/translationConsumerSwitch-C20MfNNq.cjs +509 -0
  85. package/dist/translationConsumerSwitch-C20MfNNq.cjs.map +1 -0
  86. package/dist/translationConsumerSwitch-zKuS5wgH.js +510 -0
  87. package/dist/translationConsumerSwitch-zKuS5wgH.js.map +1 -0
  88. package/dist/types/index.cjs +85 -0
  89. package/dist/types/index.cjs.map +1 -0
  90. package/dist/types/index.d.ts +2 -0
  91. package/dist/types/index.d.ts.map +1 -0
  92. package/dist/types/index.js +85 -0
  93. package/dist/types/index.js.map +1 -0
  94. package/dist/types/shared-base-types.d.ts +1 -1
  95. package/dist/types/shared-base-types.d.ts.map +1 -1
  96. package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js +5392 -0
  97. package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js.map +1 -0
  98. package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs +5391 -0
  99. package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs.map +1 -0
  100. package/dist/validateAlphanumeric-DKn5BsUP.cjs +15 -0
  101. package/dist/validateAlphanumeric-DKn5BsUP.cjs.map +1 -0
  102. package/dist/validateAlphanumeric-Dk1JB80W.js +16 -0
  103. package/dist/validateAlphanumeric-Dk1JB80W.js.map +1 -0
  104. package/package.json +1 -1
  105. package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +1 -2
  106. package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +1 -1
  107. package/src/consumers/connectIps.ts +1 -1
  108. package/src/consumers/connectRecvTransport.ts +1 -1
  109. package/src/consumers/connectSendTransport.ts +1 -1
  110. package/src/consumers/connectSendTransportAudio.ts +1 -1
  111. package/src/consumers/connectSendTransportScreen.ts +1 -1
  112. package/src/consumers/connectSendTransportVideo.ts +1 -1
  113. package/src/consumers/createSendTransport.ts +1 -1
  114. package/src/consumers/disconnectSendTransportAudio.ts +1 -1
  115. package/src/consumers/disconnectSendTransportScreen.ts +1 -1
  116. package/src/consumers/disconnectSendTransportVideo.ts +1 -1
  117. package/src/consumers/index.ts +61 -0
  118. package/src/consumers/resumeSendTransportAudio.ts +1 -1
  119. package/src/consumers/signalNewConsumerTransport.ts +1 -2
  120. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +1 -1
  121. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +1 -1
  122. package/src/consumers/streamSuccessAudio.ts +1 -2
  123. package/src/consumers/streamSuccessAudioSwitch.ts +1 -2
  124. package/src/consumers/streamSuccessVideo.ts +1 -1
  125. package/src/index.ts +2 -0
  126. package/src/methods/socketReceive/getDomains.ts +1 -1
  127. package/src/methods/utils/headless/virtualBackground.ts +45 -30
  128. package/src/methods/utils/virtualBackgroundCompositor.ts +53 -0
  129. package/src/methods/whiteboard/captureCanvasStream.ts +2 -2
  130. package/src/producers/producerEmits/joinConRoom.ts +1 -1
  131. package/src/producers/producerEmits/joinRoom.ts +1 -1
  132. package/src/types/index.ts +1 -0
  133. package/src/types/shared-base-types.ts +2 -3
  134. package/dist/getParticipantMedia-D9ChmEqq.js +0 -15265
  135. package/dist/getParticipantMedia-D9ChmEqq.js.map +0 -1
  136. package/dist/getParticipantMedia-DWvIhPPY.cjs +0 -15281
  137. package/dist/getParticipantMedia-DWvIhPPY.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.native.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.native.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,673 @@
1
+ "use strict";
2
+ const updateParticipantAudioDecibels = require("./updateParticipantAudioDecibels-DPmHiy3K.cjs");
3
+ const mediasoupClient = require("mediasoup-client");
4
+ const validateAlphanumeric = require("./validateAlphanumeric-DKn5BsUP.cjs");
5
+ const joinRoomOnMediaSFU = require("./joinRoomOnMediaSFU-CC8RVJgr.cjs");
6
+ function _interopNamespaceDefault(e) {
7
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
8
+ if (e) {
9
+ for (const k in e) {
10
+ if (k !== "default") {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: () => e[k]
15
+ });
16
+ }
17
+ }
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+ const mediasoupClient__namespace = /* @__PURE__ */ _interopNamespaceDefault(mediasoupClient);
23
+ const addVideosGrid = async () => {
24
+ throw updateParticipantAudioDecibels.createFrameworkConsumerContractError("addVideosGrid");
25
+ };
26
+ const prepopulateUserMedia = async () => {
27
+ throw updateParticipantAudioDecibels.createFrameworkConsumerContractError("prepopulateUserMedia");
28
+ };
29
+ const breakoutRoomUpdated = async ({ data, parameters }) => {
30
+ try {
31
+ let {
32
+ breakOutRoomStarted,
33
+ breakOutRoomEnded,
34
+ breakoutRooms,
35
+ hostNewRoom,
36
+ islevel,
37
+ participantsAll,
38
+ participants,
39
+ meetingDisplayType,
40
+ prevMeetingDisplayType,
41
+ updateBreakoutRooms,
42
+ updateBreakOutRoomStarted,
43
+ updateBreakOutRoomEnded,
44
+ updateHostNewRoom,
45
+ updateMeetingDisplayType,
46
+ updateParticipantsAll,
47
+ updateParticipants,
48
+ onScreenChanges,
49
+ rePort
50
+ } = parameters;
51
+ if (data.forHost) {
52
+ hostNewRoom = data.newRoom;
53
+ updateHostNewRoom(hostNewRoom);
54
+ await onScreenChanges({ changed: true, parameters });
55
+ return;
56
+ }
57
+ if (islevel === "2" && data.members) {
58
+ participantsAll = data.members.map((participant) => ({
59
+ isBanned: participant.isBanned,
60
+ name: participant.name,
61
+ audioID: participant.audioID,
62
+ videoID: participant.videoID
63
+ }));
64
+ updateParticipantsAll(participantsAll);
65
+ participants = data.members.filter((participant) => !participant.isBanned);
66
+ updateParticipants(participants);
67
+ }
68
+ breakoutRooms = data.breakoutRooms || [];
69
+ updateBreakoutRooms(breakoutRooms);
70
+ if (data.status === "started" && (!breakOutRoomStarted || breakOutRoomEnded)) {
71
+ breakOutRoomStarted = true;
72
+ breakOutRoomEnded = false;
73
+ updateBreakOutRoomStarted(true);
74
+ updateBreakOutRoomEnded(false);
75
+ prevMeetingDisplayType = meetingDisplayType;
76
+ if (meetingDisplayType !== "all") {
77
+ meetingDisplayType = "all";
78
+ updateMeetingDisplayType("all");
79
+ }
80
+ await onScreenChanges({ changed: true, parameters });
81
+ if (islevel === "2") {
82
+ await rePort({ restart: true, parameters });
83
+ }
84
+ } else if (data.status === "ended") {
85
+ breakOutRoomEnded = true;
86
+ updateBreakOutRoomEnded(true);
87
+ if (meetingDisplayType !== prevMeetingDisplayType) {
88
+ updateMeetingDisplayType(prevMeetingDisplayType);
89
+ }
90
+ await onScreenChanges({ changed: true, parameters });
91
+ if (islevel === "2") {
92
+ await rePort({ restart: true, parameters });
93
+ }
94
+ } else if (data.status === "started" && breakOutRoomStarted) {
95
+ breakOutRoomStarted = true;
96
+ breakOutRoomEnded = false;
97
+ updateBreakOutRoomStarted(true);
98
+ updateBreakOutRoomEnded(false);
99
+ await onScreenChanges({ changed: true, parameters });
100
+ if (islevel === "2") {
101
+ await rePort({ restart: true, parameters });
102
+ }
103
+ }
104
+ } catch {
105
+ }
106
+ };
107
+ async function modifySettings({
108
+ // showAlert,
109
+ roomName,
110
+ audioSet,
111
+ videoSet,
112
+ screenshareSet,
113
+ chatSet,
114
+ socket,
115
+ updateAudioSetting,
116
+ updateVideoSetting,
117
+ updateScreenshareSetting,
118
+ updateChatSetting,
119
+ updateIsSettingsModalVisible
120
+ }) {
121
+ if (audioSet) {
122
+ updateAudioSetting(audioSet);
123
+ }
124
+ if (videoSet) {
125
+ updateVideoSetting(videoSet);
126
+ }
127
+ if (screenshareSet) {
128
+ updateScreenshareSetting(screenshareSet);
129
+ }
130
+ if (chatSet) {
131
+ updateChatSetting(chatSet);
132
+ }
133
+ const settings = [audioSet, videoSet, screenshareSet, chatSet];
134
+ socket.emit("updateSettingsForRequests", { settings, roomName });
135
+ updateIsSettingsModalVisible(false);
136
+ }
137
+ const createDeviceClient = async ({
138
+ rtpCapabilities
139
+ }) => {
140
+ try {
141
+ if (!rtpCapabilities) {
142
+ throw new Error(
143
+ "Both rtpCapabilities and mediasoupClient must be provided."
144
+ );
145
+ }
146
+ const device = new mediasoupClient__namespace.Device();
147
+ rtpCapabilities.headerExtensions = rtpCapabilities.headerExtensions.filter(
148
+ (ext) => ext.uri !== "urn:3gpp:video-orientation"
149
+ );
150
+ await device.load({
151
+ routerRtpCapabilities: rtpCapabilities
152
+ });
153
+ return device;
154
+ } catch (error) {
155
+ if (error && error.name === "UnsupportedError") {
156
+ console.error("Device creation is not supported by this browser.");
157
+ }
158
+ throw error;
159
+ }
160
+ };
161
+ async function joinRoom({
162
+ socket,
163
+ roomName,
164
+ islevel,
165
+ member,
166
+ sec,
167
+ apiUserName
168
+ }) {
169
+ return new Promise((resolve, reject) => {
170
+ if (!(sec && roomName && islevel && apiUserName && member)) {
171
+ const validationError = {
172
+ success: false,
173
+ rtpCapabilities: null,
174
+ reason: "Missing required parameters"
175
+ };
176
+ reject(validationError);
177
+ return;
178
+ }
179
+ try {
180
+ validateAlphanumeric.validateAlphanumeric({ str: roomName });
181
+ validateAlphanumeric.validateAlphanumeric({ str: apiUserName });
182
+ validateAlphanumeric.validateAlphanumeric({ str: member });
183
+ } catch {
184
+ const validationError = {
185
+ success: false,
186
+ rtpCapabilities: null,
187
+ reason: "Invalid roomName or apiUserName or member"
188
+ };
189
+ reject(validationError);
190
+ return;
191
+ }
192
+ if (!(roomName.startsWith("s") || roomName.startsWith("p") || roomName.startsWith("d"))) {
193
+ const validationError = {
194
+ success: false,
195
+ rtpCapabilities: null,
196
+ reason: "Invalid roomName, must start with s or p or d"
197
+ };
198
+ reject(validationError);
199
+ return;
200
+ }
201
+ if (!(sec.length === 64 && roomName.length >= 8 && islevel.length === 1 && apiUserName.length >= 6 && (islevel === "0" || islevel === "1" || islevel === "2"))) {
202
+ const validationError = {
203
+ success: false,
204
+ rtpCapabilities: null,
205
+ reason: "Invalid roomName or islevel or apiUserName or secret"
206
+ };
207
+ reject(validationError);
208
+ return;
209
+ }
210
+ socket.emit(
211
+ "joinRoom",
212
+ {
213
+ roomName,
214
+ islevel,
215
+ member,
216
+ sec,
217
+ apiUserName
218
+ },
219
+ async (data) => {
220
+ try {
221
+ if (data.rtpCapabilities == null) {
222
+ if (data.banned) {
223
+ throw new Error("User is banned.");
224
+ }
225
+ if (data.suspended) {
226
+ throw new Error("User is suspended.");
227
+ }
228
+ if (data.noAdmin) {
229
+ throw new Error("Host has not joined the room yet.");
230
+ }
231
+ resolve(data);
232
+ } else {
233
+ resolve(data);
234
+ }
235
+ } catch (error) {
236
+ console.log("Error joining room:", error);
237
+ reject(error);
238
+ }
239
+ }
240
+ );
241
+ });
242
+ }
243
+ const joinRoomClient = async ({
244
+ socket,
245
+ roomName,
246
+ islevel,
247
+ member,
248
+ sec,
249
+ apiUserName,
250
+ consume = false
251
+ }) => {
252
+ try {
253
+ if (consume) {
254
+ return await updateParticipantAudioDecibels.joinConRoom({
255
+ socket,
256
+ roomName,
257
+ islevel,
258
+ member,
259
+ sec,
260
+ apiUserName
261
+ });
262
+ }
263
+ return await joinRoom({
264
+ socket,
265
+ roomName,
266
+ islevel,
267
+ member,
268
+ sec,
269
+ apiUserName
270
+ });
271
+ } catch (error) {
272
+ console.log(error);
273
+ throw new Error("Failed to join the room. Please check your connection and try again.");
274
+ }
275
+ };
276
+ const updateRoomParametersClient = ({ parameters }) => {
277
+ try {
278
+ const {
279
+ screenPageLimit,
280
+ shareScreenStarted,
281
+ shared,
282
+ hParams = joinRoomOnMediaSFU.hParams,
283
+ vParams = joinRoomOnMediaSFU.vParams,
284
+ frameRate,
285
+ islevel,
286
+ showAlert,
287
+ data,
288
+ updateRtpCapabilities,
289
+ updateRoomRecvIPs,
290
+ updateMeetingRoomParams,
291
+ updateItemPageLimit,
292
+ updateAudioOnlyRoom,
293
+ updateScreenPageLimit,
294
+ updateVidCons,
295
+ updateFrameRate,
296
+ updateAdminPasscode,
297
+ updateEventType,
298
+ updateYouAreCoHost,
299
+ updateAutoWave,
300
+ updateForceFullDisplay,
301
+ updateChatSetting,
302
+ updateMeetingDisplayType,
303
+ updateAudioSetting,
304
+ updateVideoSetting,
305
+ updateScreenshareSetting,
306
+ updateHParams,
307
+ updateVParams,
308
+ updateScreenParams,
309
+ updateAParams,
310
+ updateTargetResolution,
311
+ updateTargetResolutionHost,
312
+ updateRecordingAudioPausesLimit,
313
+ updateRecordingAudioPausesCount,
314
+ updateRecordingAudioSupport,
315
+ updateRecordingAudioPeopleLimit,
316
+ updateRecordingAudioParticipantsTimeLimit,
317
+ updateRecordingVideoPausesCount,
318
+ updateRecordingVideoPausesLimit,
319
+ updateRecordingVideoSupport,
320
+ updateRecordingVideoPeopleLimit,
321
+ updateRecordingVideoParticipantsTimeLimit,
322
+ updateRecordingAllParticipantsSupport,
323
+ updateRecordingVideoParticipantsSupport,
324
+ updateRecordingAllParticipantsFullRoomSupport,
325
+ updateRecordingVideoParticipantsFullRoomSupport,
326
+ updateRecordingPreferredOrientation,
327
+ updateRecordingSupportForOtherOrientation,
328
+ updateRecordingMultiFormatsSupport,
329
+ updateRecordingVideoOptions,
330
+ updateRecordingAudioOptions,
331
+ updateMainHeightWidth
332
+ } = parameters;
333
+ if (data.rtpCapabilities == null) {
334
+ const reason = data.reason || "";
335
+ showAlert?.({
336
+ message: `Sorry, you are not allowed to join this room. ${reason}`,
337
+ type: "danger",
338
+ duration: 3e3
339
+ });
340
+ return;
341
+ }
342
+ updateRtpCapabilities(data.rtpCapabilities);
343
+ updateAdminPasscode(data.secureCode);
344
+ updateRoomRecvIPs(data.roomRecvIPs);
345
+ updateMeetingRoomParams(data.meetingRoomParams);
346
+ updateRecordingAudioPausesLimit(data.recordingParams.recordingAudioPausesLimit);
347
+ updateRecordingAudioPausesCount(data.recordingParams.recordingAudioPausesCount);
348
+ updateRecordingAudioSupport(data.recordingParams.recordingAudioSupport);
349
+ updateRecordingAudioPeopleLimit(data.recordingParams.recordingAudioPeopleLimit);
350
+ updateRecordingAudioParticipantsTimeLimit(data.recordingParams.recordingAudioParticipantsTimeLimit);
351
+ updateRecordingVideoPausesCount(data.recordingParams.recordingVideoPausesCount);
352
+ updateRecordingVideoPausesLimit(data.recordingParams.recordingVideoPausesLimit);
353
+ updateRecordingVideoSupport(data.recordingParams.recordingVideoSupport);
354
+ updateRecordingVideoPeopleLimit(data.recordingParams.recordingVideoPeopleLimit);
355
+ updateRecordingVideoParticipantsTimeLimit(data.recordingParams.recordingVideoParticipantsTimeLimit);
356
+ updateRecordingAllParticipantsSupport(data.recordingParams.recordingAllParticipantsSupport);
357
+ updateRecordingVideoParticipantsSupport(data.recordingParams.recordingVideoParticipantsSupport);
358
+ updateRecordingAllParticipantsFullRoomSupport(data.recordingParams.recordingAllParticipantsFullRoomSupport);
359
+ updateRecordingVideoParticipantsFullRoomSupport(data.recordingParams.recordingVideoParticipantsFullRoomSupport);
360
+ updateRecordingPreferredOrientation(data.recordingParams.recordingPreferredOrientation);
361
+ updateRecordingSupportForOtherOrientation(data.recordingParams.recordingSupportForOtherOrientation);
362
+ updateRecordingMultiFormatsSupport(data.recordingParams.recordingMultiFormatsSupport);
363
+ updateItemPageLimit(data.meetingRoomParams.itemPageLimit);
364
+ updateEventType(data.meetingRoomParams.type);
365
+ if (data.meetingRoomParams.type == "chat" && islevel != "2") {
366
+ updateYouAreCoHost(true);
367
+ }
368
+ if (["chat", "broadcast"].includes(data.meetingRoomParams.type)) {
369
+ updateAutoWave(false);
370
+ updateMeetingDisplayType("all");
371
+ updateForceFullDisplay(true);
372
+ updateChatSetting("allow");
373
+ updateItemPageLimit(2);
374
+ if (["broadcast"].includes(data.meetingRoomParams.type)) {
375
+ updateRecordingVideoOptions("mainScreen");
376
+ updateRecordingAudioOptions("host");
377
+ updateItemPageLimit(1);
378
+ }
379
+ }
380
+ updateAudioSetting(data.meetingRoomParams.audioSetting);
381
+ updateVideoSetting(data.meetingRoomParams.videoSetting);
382
+ updateScreenshareSetting(data.meetingRoomParams.screenshareSetting);
383
+ updateChatSetting(data.meetingRoomParams.chatSetting);
384
+ updateAudioOnlyRoom(data.meetingRoomParams.mediaType != "video");
385
+ if (data.meetingRoomParams.type == "conference" && (shared || shareScreenStarted)) {
386
+ updateMainHeightWidth(100);
387
+ } else {
388
+ updateMainHeightWidth(0);
389
+ }
390
+ updateScreenPageLimit(Math.min(data.meetingRoomParams.itemPageLimit, screenPageLimit));
391
+ const targetOrientation = islevel == "2" ? data.meetingRoomParams.targetOrientationHost : data.meetingRoomParams.targetOrientation;
392
+ const targetResolution = islevel == "2" ? data.meetingRoomParams.targetResolutionHost : data.meetingRoomParams.targetResolution;
393
+ let vidCons;
394
+ if (targetOrientation == "landscape") {
395
+ vidCons = targetResolution == "hd" ? joinRoomOnMediaSFU.hdCons : targetResolution == "fhd" ? joinRoomOnMediaSFU.fhdCons : targetResolution == "qhd" ? joinRoomOnMediaSFU.qhdCons : targetResolution == "sd" ? joinRoomOnMediaSFU.sdCons : joinRoomOnMediaSFU.QnHDCons;
396
+ } else if (targetOrientation == "neutral") {
397
+ vidCons = targetResolution == "hd" ? joinRoomOnMediaSFU.hdConsNeu : targetResolution == "fhd" ? joinRoomOnMediaSFU.fhdConsNeu : targetResolution == "qhd" ? joinRoomOnMediaSFU.qhdConsNeu : targetResolution == "sd" ? joinRoomOnMediaSFU.sdConsNeu : joinRoomOnMediaSFU.QnHDConsNeu;
398
+ } else {
399
+ vidCons = targetResolution == "hd" ? joinRoomOnMediaSFU.hdConsPort : targetResolution == "fhd" ? joinRoomOnMediaSFU.fhdConsPort : targetResolution == "qhd" ? joinRoomOnMediaSFU.qhdConsPort : targetResolution == "sd" ? joinRoomOnMediaSFU.sdConsPort : joinRoomOnMediaSFU.QnHDConsPort;
400
+ }
401
+ 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
+ }
410
+ if (targetResolution == "hd") {
411
+ frameRateValue = joinRoomOnMediaSFU.hdFrameRate;
412
+ vParamsValue.encodings.forEach((encoding) => {
413
+ if (encoding.maxBitrate) {
414
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);
415
+ }
416
+ });
417
+ hParamsValue.encodings.forEach((encoding) => {
418
+ if (encoding.maxBitrate) {
419
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 4);
420
+ }
421
+ });
422
+ } else if (targetResolution == "QnHD") {
423
+ frameRateValue = joinRoomOnMediaSFU.QnHDFrameRate;
424
+ vParamsValue.encodings.forEach((encoding) => {
425
+ if (encoding.maxBitrate) {
426
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);
427
+ }
428
+ });
429
+ hParamsValue.encodings.forEach((encoding) => {
430
+ if (encoding.maxBitrate) {
431
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 0.25);
432
+ }
433
+ });
434
+ if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {
435
+ hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);
436
+ }
437
+ if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {
438
+ vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 0.25);
439
+ }
440
+ } else if (targetResolution == "fhd") {
441
+ frameRateValue = joinRoomOnMediaSFU.fhdFrameRate;
442
+ vParamsValue.encodings.forEach((encoding) => {
443
+ if (encoding.maxBitrate) {
444
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);
445
+ }
446
+ });
447
+ hParamsValue.encodings.forEach((encoding) => {
448
+ if (encoding.maxBitrate) {
449
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 8);
450
+ }
451
+ });
452
+ } else if (targetResolution == "qhd") {
453
+ frameRateValue = joinRoomOnMediaSFU.qhdFrameRate;
454
+ vParamsValue.encodings.forEach((encoding) => {
455
+ if (encoding.maxBitrate) {
456
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);
457
+ }
458
+ });
459
+ hParamsValue.encodings.forEach((encoding) => {
460
+ if (encoding.maxBitrate) {
461
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 16);
462
+ }
463
+ });
464
+ }
465
+ if (data.recordingParams.recordingVideoSupport) {
466
+ vParamsValue.encodings.forEach((encoding) => {
467
+ if (encoding.maxBitrate) {
468
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);
469
+ }
470
+ });
471
+ hParamsValue.encodings.forEach((encoding) => {
472
+ if (encoding.maxBitrate) {
473
+ encoding.maxBitrate = Math.floor(encoding.maxBitrate * 1.2);
474
+ }
475
+ });
476
+ if (hParamsValue.codecOptions && hParamsValue.codecOptions.videoGoogleStartBitrate) {
477
+ hParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(hParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);
478
+ }
479
+ if (vParamsValue.codecOptions && vParamsValue.codecOptions.videoGoogleStartBitrate) {
480
+ vParamsValue.codecOptions.videoGoogleStartBitrate = Math.floor(vParamsValue.codecOptions.videoGoogleStartBitrate * 1.2);
481
+ }
482
+ }
483
+ updateVidCons(vidCons);
484
+ updateFrameRate(frameRateValue);
485
+ updateHParams(hParamsValue);
486
+ updateVParams(vParamsValue);
487
+ updateScreenParams(joinRoomOnMediaSFU.screenParams);
488
+ updateAParams(joinRoomOnMediaSFU.aParams);
489
+ updateTargetResolution(data.meetingRoomParams.targetResolution);
490
+ updateTargetResolutionHost(data.meetingRoomParams.targetResolutionHost);
491
+ } catch (error) {
492
+ console.log("updateRoomParametersClient error", error);
493
+ parameters.showAlert?.({
494
+ message: error.message,
495
+ type: "danger",
496
+ duration: 3e3
497
+ });
498
+ }
499
+ };
500
+ async function checkMediasfuURL({
501
+ data,
502
+ member,
503
+ roomName,
504
+ islevel,
505
+ socket,
506
+ parameters,
507
+ joinMediaSFURoom = joinRoomOnMediaSFU.joinRoomOnMediaSFU,
508
+ localLink = ""
509
+ }) {
510
+ if (data.mediasfuURL && data.mediasfuURL !== "" && data.mediasfuURL.length > 10) {
511
+ let link;
512
+ let secretCode;
513
+ try {
514
+ const splitTexts = ["/meet/", "/chat/", "/broadcast/"];
515
+ const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || "/meet/";
516
+ const urlParts = data.mediasfuURL.split(splitText);
517
+ link = urlParts[0];
518
+ secretCode = urlParts[1].split("/")[1];
519
+ } catch {
520
+ link = data.mediasfuURL;
521
+ return;
522
+ }
523
+ await joinRoomOnMediaSFU.checkLimitsAndMakeRequest({
524
+ apiUserName: roomName,
525
+ apiToken: secretCode,
526
+ link,
527
+ apiKey: "",
528
+ userName: member,
529
+ parameters,
530
+ validate: false
531
+ });
532
+ return;
533
+ }
534
+ if ((!data.mediasfuURL || data.mediasfuURL.length < 10) && islevel !== "2" && data.allowRecord && (data.allowRecord === true || data.allowRecord === "true") && data.apiKey && data.apiKey.length === 64 && data.apiUserName && data.apiUserName.length > 5 && (roomName.startsWith("s") || roomName.startsWith("p"))) {
535
+ const payload = {
536
+ action: "join",
537
+ meetingID: roomName,
538
+ userName: member
539
+ };
540
+ const response = await joinMediaSFURoom({
541
+ payload,
542
+ apiKey: data.apiKey,
543
+ apiUserName: data.apiUserName,
544
+ localLink
545
+ });
546
+ if (response.success && response.data && "roomName" in response.data) {
547
+ try {
548
+ socket.emit(
549
+ "updateMediasfuURL",
550
+ { eventID: roomName, mediasfuURL: response.data.publicURL },
551
+ async () => {
552
+ }
553
+ );
554
+ } catch {
555
+ }
556
+ await joinRoomOnMediaSFU.checkLimitsAndMakeRequest({
557
+ apiUserName: response.data.roomName,
558
+ apiToken: response.data.secret,
559
+ link: response.data.link,
560
+ userName: member,
561
+ parameters,
562
+ validate: false
563
+ });
564
+ parameters.updateApiToken(response.data.secret);
565
+ }
566
+ }
567
+ }
568
+ async function joinLocalRoom({
569
+ socket,
570
+ roomName,
571
+ islevel,
572
+ member,
573
+ sec,
574
+ apiUserName,
575
+ parameters,
576
+ checkConnect = false,
577
+ joinMediaSFURoom = joinRoomOnMediaSFU.joinRoomOnMediaSFU,
578
+ localLink = ""
579
+ }) {
580
+ return new Promise((resolve, reject) => {
581
+ if (!(sec && roomName && islevel && apiUserName && member)) {
582
+ const validationError = {
583
+ success: false,
584
+ rtpCapabilities: null,
585
+ reason: "Missing required parameters"
586
+ };
587
+ reject(validationError);
588
+ return;
589
+ }
590
+ try {
591
+ validateAlphanumeric.validateAlphanumeric({ str: roomName });
592
+ validateAlphanumeric.validateAlphanumeric({ str: apiUserName });
593
+ validateAlphanumeric.validateAlphanumeric({ str: member });
594
+ } catch {
595
+ const validationError = {
596
+ success: false,
597
+ rtpCapabilities: null,
598
+ reason: "Invalid roomName or apiUserName or member"
599
+ };
600
+ reject(validationError);
601
+ return;
602
+ }
603
+ if (!(roomName.startsWith("s") || roomName.startsWith("p") || roomName.startsWith("m") || roomName.startsWith("d"))) {
604
+ const validationError = {
605
+ success: false,
606
+ rtpCapabilities: null,
607
+ reason: "Invalid roomName, must start with s or p or m or d"
608
+ };
609
+ reject(validationError);
610
+ return;
611
+ }
612
+ if (!(sec.length === 32 && roomName.length >= 8 && islevel.length === 1 && apiUserName.length >= 6 && (islevel === "0" || islevel === "1" || islevel === "2"))) {
613
+ const validationError = {
614
+ success: false,
615
+ rtpCapabilities: null,
616
+ reason: "Invalid roomName or islevel or apiUserName or secret"
617
+ };
618
+ reject(validationError);
619
+ return;
620
+ }
621
+ socket.emit(
622
+ "joinRoom",
623
+ { roomName, islevel, member, sec, apiUserName },
624
+ async (data) => {
625
+ try {
626
+ if (data.rtpCapabilities === null) {
627
+ if (data.isBanned) {
628
+ throw new Error("User is banned.");
629
+ }
630
+ if (data.hostNotJoined) {
631
+ throw new Error("Host has not joined the room yet.");
632
+ }
633
+ resolve(data);
634
+ } else {
635
+ if (checkConnect) {
636
+ await checkMediasfuURL({
637
+ data,
638
+ member,
639
+ roomName,
640
+ islevel,
641
+ socket,
642
+ parameters,
643
+ joinMediaSFURoom,
644
+ localLink
645
+ });
646
+ } else if (data.mediasfuURL && data.mediasfuURL !== "" && data.mediasfuURL.length > 10) {
647
+ const splitTexts = ["/meet/", "/chat/", "/broadcast/"];
648
+ const splitText = splitTexts.find((text) => data.mediasfuURL.includes(text)) || "/meet/";
649
+ const urlParts = data.mediasfuURL.split(splitText);
650
+ const secretCode = urlParts[1].split("/")[1];
651
+ parameters.updateApiToken(secretCode);
652
+ }
653
+ resolve(data);
654
+ }
655
+ } catch (error) {
656
+ console.log("Error joining room:", error);
657
+ reject(error);
658
+ }
659
+ }
660
+ );
661
+ });
662
+ }
663
+ exports.addVideosGrid = addVideosGrid;
664
+ exports.breakoutRoomUpdated = breakoutRoomUpdated;
665
+ exports.checkMediasfuURL = checkMediasfuURL;
666
+ exports.createDeviceClient = createDeviceClient;
667
+ exports.joinLocalRoom = joinLocalRoom;
668
+ exports.joinRoom = joinRoom;
669
+ exports.joinRoomClient = joinRoomClient;
670
+ exports.modifySettings = modifySettings;
671
+ exports.prepopulateUserMedia = prepopulateUserMedia;
672
+ exports.updateRoomParametersClient = updateRoomParametersClient;
673
+ //# sourceMappingURL=joinLocalRoom-BdM1msQt.cjs.map