mediasfu-shared 1.0.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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/dist/index.cjs +7707 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.ts +7285 -0
  6. package/dist/index.js +7690 -0
  7. package/dist/index.js.map +1 -0
  8. package/package.json +78 -0
  9. package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +68 -0
  10. package/src/consumers/addVideosGrid.ts +18 -0
  11. package/src/consumers/autoAdjust.ts +100 -0
  12. package/src/consumers/calculateRowsAndColumns.ts +51 -0
  13. package/src/consumers/changeVids.ts +753 -0
  14. package/src/consumers/checkGrid.ts +100 -0
  15. package/src/consumers/checkPermission.ts +89 -0
  16. package/src/consumers/checkScreenShare.ts +114 -0
  17. package/src/consumers/closeAndResize.ts +401 -0
  18. package/src/consumers/compareActiveNames.ts +122 -0
  19. package/src/consumers/compareScreenStates.ts +117 -0
  20. package/src/consumers/connectIps.ts +175 -0
  21. package/src/consumers/connectLocalIps.ts +103 -0
  22. package/src/consumers/connectRecvTransport.ts +158 -0
  23. package/src/consumers/connectSendTransport.ts +150 -0
  24. package/src/consumers/connectSendTransportAudio.ts +161 -0
  25. package/src/consumers/connectSendTransportScreen.ts +169 -0
  26. package/src/consumers/connectSendTransportVideo.ts +149 -0
  27. package/src/consumers/consumerResume.ts +25 -0
  28. package/src/consumers/controlMedia.ts +118 -0
  29. package/src/consumers/createSendTransport.ts +312 -0
  30. package/src/consumers/disconnectSendTransportAudio.ts +170 -0
  31. package/src/consumers/disconnectSendTransportScreen.ts +130 -0
  32. package/src/consumers/disconnectSendTransportVideo.ts +161 -0
  33. package/src/consumers/dispStreams.ts +694 -0
  34. package/src/consumers/generatePageContent.ts +118 -0
  35. package/src/consumers/getEstimate.ts +124 -0
  36. package/src/consumers/getPipedProducersAlt.ts +96 -0
  37. package/src/consumers/getProducersPiped.ts +89 -0
  38. package/src/consumers/getVideos.ts +107 -0
  39. package/src/consumers/mixStreams.ts +97 -0
  40. package/src/consumers/onScreenChanges.ts +106 -0
  41. package/src/consumers/prepopulateUserMedia.ts +18 -0
  42. package/src/consumers/processConsumerTransports.ts +157 -0
  43. package/src/consumers/processConsumerTransportsAudio.ts +121 -0
  44. package/src/consumers/rePort.ts +123 -0
  45. package/src/consumers/reUpdateInter.ts +289 -0
  46. package/src/consumers/readjust.ts +170 -0
  47. package/src/consumers/receiveAllPipedTransports.ts +77 -0
  48. package/src/consumers/receiveRoomMessages.ts +55 -0
  49. package/src/consumers/reorderStreams.ts +246 -0
  50. package/src/consumers/requestScreenShare.ts +103 -0
  51. package/src/consumers/resumePauseAudioStreams.ts +174 -0
  52. package/src/consumers/resumePauseStreams.ts +110 -0
  53. package/src/consumers/resumeSendTransportAudio.ts +143 -0
  54. package/src/consumers/signalNewConsumerTransport.ts +179 -0
  55. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +130 -0
  56. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +138 -0
  57. package/src/consumers/socketReceiveMethods/producerClosed.ts +102 -0
  58. package/src/consumers/startShareScreen.ts +124 -0
  59. package/src/consumers/stopShareScreen.ts +241 -0
  60. package/src/consumers/streamSuccessAudio.ts +297 -0
  61. package/src/consumers/streamSuccessAudioSwitch.ts +315 -0
  62. package/src/consumers/streamSuccessScreen.ts +255 -0
  63. package/src/consumers/streamSuccessVideo.ts +373 -0
  64. package/src/consumers/switchUserAudio.ts +140 -0
  65. package/src/consumers/switchUserVideo.ts +201 -0
  66. package/src/consumers/switchUserVideoAlt.ts +331 -0
  67. package/src/consumers/trigger.ts +250 -0
  68. package/src/consumers/updateMiniCardsGrid.ts +150 -0
  69. package/src/consumers/updateParticipantAudioDecibels.ts +56 -0
  70. package/src/index.ts +119 -0
  71. package/src/methods/background/launchBackground.ts +16 -0
  72. package/src/methods/breakoutRooms/breakoutRoomUpdated.ts +161 -0
  73. package/src/methods/breakoutRooms/handleStartBreakout.ts +96 -0
  74. package/src/methods/breakoutRooms/handleStopBreakout.ts +72 -0
  75. package/src/methods/breakoutRooms/index.ts +4 -0
  76. package/src/methods/breakoutRooms/launchBreakoutRooms.ts +31 -0
  77. package/src/methods/coHost/launchCoHost.ts +28 -0
  78. package/src/methods/coHostMethods/index.ts +2 -0
  79. package/src/methods/coHostMethods/modifyCoHostSettings.ts +94 -0
  80. package/src/methods/displaySettings/index.ts +1 -0
  81. package/src/methods/displaySettings/launchDisplaySettings.ts +31 -0
  82. package/src/methods/displaySettings/modifyDisplaySettings.ts +242 -0
  83. package/src/methods/exit/confirmExit.ts +60 -0
  84. package/src/methods/exit/index.ts +2 -0
  85. package/src/methods/exit/launchConfirmExit.ts +29 -0
  86. package/src/methods/index.ts +5 -0
  87. package/src/methods/mediaSettings/launchMediaSettings.ts +61 -0
  88. package/src/methods/menu/launchMenuModal.ts +28 -0
  89. package/src/methods/message/index.ts +1 -0
  90. package/src/methods/message/launchMessages.ts +27 -0
  91. package/src/methods/message/sendMessage.ts +175 -0
  92. package/src/methods/participants/index.ts +3 -0
  93. package/src/methods/participants/launchParticipants.ts +25 -0
  94. package/src/methods/participants/messageParticipants.ts +78 -0
  95. package/src/methods/participants/muteParticipants.ts +79 -0
  96. package/src/methods/participants/removeParticipants.ts +97 -0
  97. package/src/methods/polls/handleCreatePoll.ts +66 -0
  98. package/src/methods/polls/handleEndPoll.ts +64 -0
  99. package/src/methods/polls/handleVotePoll.ts +76 -0
  100. package/src/methods/polls/index.ts +3 -0
  101. package/src/methods/polls/launchPoll.ts +25 -0
  102. package/src/methods/prejoin/handleCreateRoom.ts +441 -0
  103. package/src/methods/prejoin/handleJoinRoom.ts +153 -0
  104. package/src/methods/prejoin/index.ts +14 -0
  105. package/src/methods/recording/checkPauseState.ts +57 -0
  106. package/src/methods/recording/checkResumeState.ts +42 -0
  107. package/src/methods/recording/confirmRecording.ts +241 -0
  108. package/src/methods/recording/launchRecording.ts +114 -0
  109. package/src/methods/recording/recordPauseTimer.ts +52 -0
  110. package/src/methods/recording/recordResumeTimer.ts +92 -0
  111. package/src/methods/recording/recordStartTimer.ts +106 -0
  112. package/src/methods/recording/recordUpdateTimer.ts +49 -0
  113. package/src/methods/recording/startRecording.ts +268 -0
  114. package/src/methods/recording/stopRecording.ts +124 -0
  115. package/src/methods/recording/updateRecording.ts +245 -0
  116. package/src/methods/requests/index.ts +1 -0
  117. package/src/methods/requests/launchRequests.ts +25 -0
  118. package/src/methods/requests/respondToRequests.ts +108 -0
  119. package/src/methods/settings/index.ts +2 -0
  120. package/src/methods/settings/launchSettings.ts +25 -0
  121. package/src/methods/settings/modifySettings.ts +99 -0
  122. package/src/methods/stream/clickVideo.ts +337 -0
  123. package/src/methods/stream/index.ts +3 -0
  124. package/src/methods/stream/switchAudio.ts +73 -0
  125. package/src/methods/stream/switchVideo.ts +148 -0
  126. package/src/methods/stream/switchVideoAlt.ts +152 -0
  127. package/src/methods/utils/checkLimitsAndMakeRequest.ts +103 -0
  128. package/src/methods/utils/validateAlphanumeric.ts +41 -0
  129. package/src/methods/waiting/index.ts +1 -0
  130. package/src/methods/waiting/launchWaiting.ts +26 -0
  131. package/src/methods/waiting/respondToWaiting.ts +82 -0
  132. package/src/methods/welcome/handleWelcomeRequest.ts +189 -0
  133. package/src/methods/welcome/index.ts +5 -0
  134. package/src/methods/whiteboard/handleStartWhiteboard.ts +65 -0
  135. package/src/methods/whiteboard/handleStopWhiteboard.ts +48 -0
  136. package/src/methods/whiteboard/index.ts +4 -0
  137. package/src/methods/whiteboard/launchConfigureWhiteboard.ts +29 -0
  138. package/src/producers/producerEmits/joinConRoom.ts +153 -0
  139. package/src/sockets/SocketManager.ts +232 -0
  140. package/src/types/shared-base-types.ts +752 -0
  141. package/src/types/types.ts +84 -0
@@ -0,0 +1,289 @@
1
+
2
+ import { Participant, Stream, OnScreenChangesType, ReorderStreamsType, ChangeVidsType, OnScreenChangesParameters, ReorderStreamsParameters, ChangeVidsParameters, EventType } from "../types/types";
3
+ export interface ReUpdateInterParameters extends OnScreenChangesParameters, ReorderStreamsParameters, ChangeVidsParameters {
4
+ screenPageLimit: number;
5
+ itemPageLimit: number;
6
+ reorderInterval: number;
7
+ fastReorderInterval: number;
8
+ eventType: EventType;
9
+ participants: Participant[];
10
+ allVideoStreams: (Participant | Stream)[];
11
+ shared: boolean;
12
+ shareScreenStarted: boolean;
13
+ adminNameStream?: string;
14
+ screenShareNameStream?: string;
15
+ updateMainWindow: boolean;
16
+ sortAudioLoudness: boolean;
17
+ lastReorderTime: number;
18
+ newLimitedStreams: (Participant | Stream)[];
19
+ newLimitedStreamsIDs: string[];
20
+ oldSoundIds: string[];
21
+ updateUpdateMainWindow: (value: boolean) => void;
22
+ updateSortAudioLoudness: (value: boolean) => void;
23
+ updateLastReorderTime: (value: number) => void;
24
+ updateNewLimitedStreams: (streams: (Participant | Stream)[]) => void;
25
+ updateNewLimitedStreamsIDs: (ids: string[]) => void;
26
+ updateOldSoundIds: (ids: string[]) => void;
27
+
28
+ // mediasfu functions
29
+ onScreenChanges: OnScreenChangesType;
30
+ reorderStreams: ReorderStreamsType;
31
+ changeVids: ChangeVidsType;
32
+
33
+ getUpdatedAllParams: () => ReUpdateInterParameters;
34
+ [key: string]: any;
35
+ }
36
+
37
+ export interface ReUpdateInterOptions {
38
+ name: string;
39
+ add?: boolean;
40
+ force?: boolean;
41
+ average?: number;
42
+ parameters: ReUpdateInterParameters;
43
+ }
44
+
45
+ // Export the type definition for the function
46
+ export type ReUpdateInterType = (options: ReUpdateInterOptions) => Promise<void>;
47
+
48
+ /**
49
+ * Updates the interaction state based on the provided options and parameters.
50
+ *
51
+ * @param {ReUpdateInterOptions} options - The options for updating the interaction.
52
+ * @param {string} options.name - The name of the participant.
53
+ * @param {boolean} [options.add=false] - Whether to add the participant to the interaction.
54
+ * @param {boolean} [options.force=false] - Whether to force the update.
55
+ * @param {number} [options.average=127] - The average value used for determining reorder intervals.
56
+ * @param {Object} options.parameters - The parameters for updating the interaction.
57
+ * @param {number} options.parameters.screenPageLimit - The screen page limit.
58
+ * @param {number} options.parameters.itemPageLimit - The item page limit.
59
+ * @param {number} options.parameters.reorderInterval - The reorder interval.
60
+ * @param {number} options.parameters.fastReorderInterval - The fast reorder interval.
61
+ * @param {string} options.parameters.eventType - The type of event.
62
+ * @param {Array} options.parameters.participants - The list of participants.
63
+ * @param {Array} options.parameters.allVideoStreams - The list of all video streams.
64
+ * @param {boolean} options.parameters.shared - Whether the screen is shared.
65
+ * @param {boolean} options.parameters.shareScreenStarted - Whether screen sharing has started.
66
+ * @param {string} options.parameters.adminNameStream - The admin name stream.
67
+ * @param {string} options.parameters.screenShareNameStream - The screen share name stream.
68
+ * @param {boolean} options.parameters.updateMainWindow - Whether to update the main window.
69
+ * @param {boolean} options.parameters.sortAudioLoudness - Whether to sort audio by loudness.
70
+ * @param {number} options.parameters.lastReorderTime - The last reorder time.
71
+ * @param {Array} options.parameters.newLimitedStreams - The list of new limited streams.
72
+ * @param {Array} options.parameters.newLimitedStreamsIDs - The list of new limited stream IDs.
73
+ * @param {Array} options.parameters.oldSoundIds - The list of old sound IDs.
74
+ * @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.
75
+ * @param {Function} options.parameters.updateSortAudioLoudness - Function to update the audio loudness sorting.
76
+ * @param {Function} options.parameters.updateLastReorderTime - Function to update the last reorder time.
77
+ * @param {Function} options.parameters.updateNewLimitedStreams - Function to update the new limited streams.
78
+ * @param {Function} options.parameters.updateNewLimitedStreamsIDs - Function to update the new limited stream IDs.
79
+ * @param {Function} options.parameters.updateOldSoundIds - Function to update the old sound IDs.
80
+ * @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.
81
+ * @param {Function} options.parameters.reorderStreams - Function to reorder streams.
82
+ * @param {Function} options.parameters.changeVids - Function to change videos.
83
+ *
84
+ * @returns {Promise<void>} A promise that resolves when the interaction update is complete.
85
+ *
86
+ * @throws {Error} Throws an error if there is an issue during the updating process.
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * await reUpdateInter({
91
+ * name: 'participant1',
92
+ * add: true,
93
+ * parameters: {
94
+ * screenPageLimit: 4,
95
+ * itemPageLimit: 2,
96
+ * reorderInterval: 500,
97
+ * fastReorderInterval: 200,
98
+ * eventType: 'conference',
99
+ * participants: [...],
100
+ * allVideoStreams: [...],
101
+ * shared: false,
102
+ * shareScreenStarted: false,
103
+ * adminNameStream: 'Admin',
104
+ * screenShareNameStream: 'Screen Share',
105
+ * updateMainWindow: true,
106
+ * sortAudioLoudness: false,
107
+ * lastReorderTime: Date.now(),
108
+ * newLimitedStreams: [],
109
+ * newLimitedStreamsIDs: [],
110
+ * oldSoundIds: [],
111
+ * updateUpdateMainWindow: (value) => { console.log('your logic') },
112
+ * updateSortAudioLoudness: (value) => { console.log('your logic') },
113
+ * updateLastReorderTime: (value) => { console.log('your logic') },
114
+ * updateNewLimitedStreams: (streams) => { console.log('your logic') },
115
+ * updateNewLimitedStreamsIDs: (ids) => { console.log('your logic') },
116
+ * updateOldSoundIds: (ids) => { console.log('your logic') },
117
+ * onScreenChanges: async (options) => { console.log('your logic') },
118
+ * reorderStreams: async (options) => { console.log('your logic') },
119
+ * changeVids: async (options) => { console.log('your logic') },
120
+ * },
121
+ * });
122
+ * ```
123
+ */
124
+
125
+
126
+ export async function reUpdateInter({
127
+ name,
128
+ add = false,
129
+ force = false,
130
+ average = 127,
131
+ parameters,
132
+ }: ReUpdateInterOptions): Promise<void> {
133
+ let {
134
+ screenPageLimit,
135
+ itemPageLimit,
136
+ reorderInterval,
137
+ fastReorderInterval,
138
+ eventType,
139
+ participants,
140
+ allVideoStreams,
141
+ shared,
142
+ shareScreenStarted,
143
+ adminNameStream,
144
+ screenShareNameStream,
145
+ updateMainWindow,
146
+ sortAudioLoudness,
147
+ lastReorderTime,
148
+ newLimitedStreams,
149
+ newLimitedStreamsIDs,
150
+ oldSoundIds,
151
+ updateUpdateMainWindow,
152
+ updateSortAudioLoudness,
153
+ updateLastReorderTime,
154
+ updateNewLimitedStreams,
155
+ updateNewLimitedStreamsIDs,
156
+ updateOldSoundIds,
157
+
158
+ //mediasfu functions
159
+ onScreenChanges,
160
+ reorderStreams,
161
+ changeVids,
162
+ } = parameters;
163
+
164
+ if (eventType === "broadcast" || eventType === "chat") {
165
+ return;
166
+ }
167
+
168
+ let refLimit = screenPageLimit - 1;
169
+
170
+ if (!(shareScreenStarted || shared)) {
171
+ refLimit = itemPageLimit - 1;
172
+
173
+ if (add) {
174
+ const currentTime = Date.now();
175
+ if (
176
+ (currentTime - lastReorderTime >= reorderInterval && average > 128.5) ||
177
+ (average > 130 && currentTime - lastReorderTime >= fastReorderInterval)
178
+ ) {
179
+ lastReorderTime = currentTime;
180
+ sortAudioLoudness = true;
181
+ if (eventType === "conference") {
182
+ await onScreenChanges({ changed: true, parameters });
183
+ } else {
184
+ await reorderStreams({ add: false, screenChanged: true, parameters });
185
+ }
186
+ sortAudioLoudness = false;
187
+
188
+ updateSortAudioLoudness(sortAudioLoudness);
189
+ updateUpdateMainWindow(updateMainWindow);
190
+ updateLastReorderTime(lastReorderTime);
191
+
192
+ return;
193
+ }
194
+ }
195
+ }
196
+
197
+ let videoID: string | null = null;
198
+ if (shareScreenStarted || shared) {
199
+ if (add) {
200
+ const participant = participants.find((p) => p.name === name);
201
+ videoID = participant?.videoID ?? null;
202
+
203
+ if (!videoID) {
204
+ return;
205
+ }
206
+
207
+ if (!newLimitedStreamsIDs.includes(videoID)) {
208
+ //first check length of newLimitedStreams to not exceed refLimit, if so remove oldSoundID from newLimitedStreams
209
+ if (newLimitedStreams.length > refLimit) {
210
+ let oldoldSounds = [...oldSoundIds];
211
+ for (let i = 0; i < oldSoundIds.length; i++) {
212
+ if (newLimitedStreams.length > refLimit) {
213
+ // remove stream from newLimitedStreams
214
+ if (newLimitedStreams.length < screenPageLimit) {
215
+ return;
216
+ }
217
+ const currentId = oldSoundIds[i];
218
+ if (
219
+ currentId !== screenShareNameStream &&
220
+ currentId !== adminNameStream
221
+ ) {
222
+ newLimitedStreams = newLimitedStreams.filter(
223
+ (stream) => stream.producerId !== currentId
224
+ );
225
+ newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
226
+ (id) => id !== currentId
227
+ );
228
+ oldoldSounds = oldoldSounds.filter((id) => id !== currentId);
229
+ }
230
+ }
231
+ }
232
+ oldSoundIds = [...oldoldSounds];
233
+ }
234
+
235
+ const stream = allVideoStreams.find(
236
+ (s) => s.producerId === videoID
237
+ );
238
+ if (stream && newLimitedStreams.length < screenPageLimit) {
239
+ newLimitedStreams.push(stream);
240
+ newLimitedStreamsIDs.push(videoID);
241
+ if (!oldSoundIds.includes(name)) {
242
+ oldSoundIds.push(name);
243
+ }
244
+ await changeVids({ screenChanged: true, parameters });
245
+ }
246
+ }
247
+ } else {
248
+ if (!force) {
249
+ try {
250
+ // remove stream from newLimitedStreams
251
+ if (newLimitedStreams.length < screenPageLimit) {
252
+ return;
253
+ }
254
+ newLimitedStreams = newLimitedStreams.filter(
255
+ (stream) => stream.producerId != videoID
256
+ );
257
+ newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
258
+ (id) => id !== videoID
259
+ );
260
+ oldSoundIds = oldSoundIds.filter((id) => id !== name);
261
+ await changeVids({ parameters });
262
+ } catch {
263
+ // do nothing
264
+ }
265
+ } else {
266
+ const participant = participants.find((p) => p.name === name);
267
+ if (participant?.muted) {
268
+ try {
269
+ newLimitedStreams = newLimitedStreams.filter(
270
+ (stream) => stream.producerId !== videoID
271
+ );
272
+ newLimitedStreamsIDs = newLimitedStreamsIDs.filter(
273
+ (id) => id !== videoID
274
+ );
275
+ oldSoundIds = oldSoundIds.filter((id) => id !== name);
276
+ await changeVids({ parameters });
277
+ } catch {
278
+ // do nothing
279
+ }
280
+ }
281
+ }
282
+ }
283
+
284
+ updateNewLimitedStreams(newLimitedStreams);
285
+ updateNewLimitedStreamsIDs(newLimitedStreamsIDs);
286
+ updateOldSoundIds(oldSoundIds);
287
+ }
288
+ }
289
+
@@ -0,0 +1,170 @@
1
+
2
+
3
+ import { PrepopulateUserMediaType, PrepopulateUserMediaParameters, EventType } from '../types/types';
4
+ export interface ReadjustParameters extends PrepopulateUserMediaParameters {
5
+ eventType: EventType;
6
+ shareScreenStarted: boolean;
7
+ shared: boolean;
8
+ mainHeightWidth: number;
9
+ prevMainHeightWidth: number;
10
+ hostLabel: string;
11
+ first_round: boolean;
12
+ lock_screen: boolean;
13
+ updateMainHeightWidth: (value: number) => void;
14
+
15
+ // mediasfu functions
16
+ prepopulateUserMedia: PrepopulateUserMediaType;
17
+ getUpdatedAllParams: () => ReadjustParameters;
18
+ [key: string]: any;
19
+ }
20
+
21
+ export interface ReadjustOptions {
22
+ n: number;
23
+ state: number;
24
+ parameters: ReadjustParameters;
25
+ }
26
+
27
+ // Export the type definition for the function
28
+ export type ReadjustType = (options: ReadjustOptions) => Promise<void>;
29
+
30
+ /**
31
+ * Adjusts the layout parameters based on the provided options.
32
+ *
33
+ * @param {ReadjustOptions} options - The options for readjusting the layout.
34
+ * @param {number} options.n - The number of participants or elements.
35
+ * @param {number} options.state - The current state of the layout.
36
+ * @param {object} options.parameters - The parameters for the layout adjustment.
37
+ * @param {function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
38
+ * @param {string} options.parameters.eventType - The type of event (e.g., "broadcast", "chat", "conference").
39
+ * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.
40
+ * @param {boolean} options.parameters.shared - Indicates if content is being shared.
41
+ * @param {number} options.parameters.mainHeightWidth - The main height and width value.
42
+ * @param {number} options.parameters.prevMainHeightWidth - The previous main height and width value.
43
+ * @param {string} options.parameters.hostLabel - The label for the host.
44
+ * @param {boolean} options.parameters.first_round - Indicates if it is the first round.
45
+ * @param {boolean} options.parameters.lock_screen - Indicates if the screen is locked.
46
+ * @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.
47
+ * @param {function} options.parameters.prepopulateUserMedia - Function to prepopulate user media.
48
+ * @returns {Promise<void>} A promise that resolves when the layout adjustment is complete.
49
+ * @throws {Error} Throws an error if there is an issue updating the grid sizes.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * await readjust({
54
+ * n: 5,
55
+ * state: 1,
56
+ * parameters: {
57
+ * eventType: 'conference',
58
+ * shareScreenStarted: false,
59
+ * shared: false,
60
+ * mainHeightWidth: 100,
61
+ * prevMainHeightWidth: 80,
62
+ * hostLabel: 'Host Name',
63
+ * first_round: false,
64
+ * lock_screen: false,
65
+ * updateMainHeightWidth: updateMainHeightWidthFunction,
66
+ * getUpdatedAllParams: getUpdatedAllParamsFunction,
67
+ * },
68
+ * });
69
+ * ```
70
+ */
71
+
72
+ export async function readjust({ n, state, parameters }: ReadjustOptions): Promise<void> {
73
+ let { getUpdatedAllParams } = parameters;
74
+ parameters = getUpdatedAllParams();
75
+
76
+ try {
77
+ // Destructure parameters
78
+ let {
79
+ eventType,
80
+ shareScreenStarted,
81
+ shared,
82
+ mainHeightWidth,
83
+ prevMainHeightWidth,
84
+ hostLabel,
85
+ first_round,
86
+ lock_screen,
87
+ updateMainHeightWidth,
88
+ prepopulateUserMedia,
89
+ } = parameters;
90
+
91
+ if (state === 0) {
92
+ prevMainHeightWidth = mainHeightWidth;
93
+ }
94
+
95
+ let val1 = 6;
96
+ let val2 = 12 - val1;
97
+ let cal1 = Math.floor((val1 / 12) * 100);
98
+ let cal2 = 100 - cal1;
99
+
100
+ if (eventType === "broadcast") {
101
+ val1 = 0;
102
+ val2 = 12 - val1;
103
+
104
+ if (n === 0) {
105
+ val1 = 0;
106
+ val2 = 12 - val1;
107
+ }
108
+ } else if (
109
+ eventType === "chat" ||
110
+ (eventType === "conference" && !(shareScreenStarted || shared))
111
+ ) {
112
+ val1 = 12;
113
+ val2 = 12 - val1;
114
+ } else {
115
+ if (shareScreenStarted || shared) {
116
+ val2 = 10;
117
+ val1 = 12 - val2;
118
+ } else {
119
+ if (n === 0) {
120
+ val1 = 1;
121
+ val2 = 12 - val1;
122
+ } else if (n >= 1 && n < 4) {
123
+ val1 = 4;
124
+ val2 = 12 - val1;
125
+ } else if (n >= 4 && n < 6) {
126
+ val1 = 6;
127
+ val2 = 12 - val1;
128
+ } else if (n >= 6 && n < 9) {
129
+ val1 = 6;
130
+ val2 = 12 - val1;
131
+ } else if (n >= 9 && n < 12) {
132
+ val1 = 6;
133
+ val2 = 12 - val1;
134
+ } else if (n >= 12 && n < 20) {
135
+ val1 = 8;
136
+ val2 = 12 - val1;
137
+ } else if (n >= 20 && n < 50) {
138
+ val1 = 8;
139
+ val2 = 12 - val1;
140
+ } else {
141
+ val1 = 10;
142
+ val2 = 12 - val1;
143
+ }
144
+ }
145
+ }
146
+
147
+ if (state === 0) {
148
+ mainHeightWidth = val2;
149
+ }
150
+
151
+ cal1 = Math.floor((val1 / 12) * 100);
152
+ cal2 = 100 - cal1;
153
+
154
+ updateMainHeightWidth(cal2);
155
+
156
+ if (prevMainHeightWidth !== mainHeightWidth) {
157
+ if (!lock_screen && !shared) {
158
+ await prepopulateUserMedia({ name: hostLabel, parameters });
159
+ } else if (!first_round) {
160
+ await prepopulateUserMedia({ name: hostLabel, parameters });
161
+ }
162
+ }
163
+ } catch (error) {
164
+ if (error instanceof Error) {
165
+ console.log("Error updating grid sizes:", error.message);
166
+ } else {
167
+ console.log("Error updating grid sizes:", error);
168
+ }
169
+ }
170
+ }
@@ -0,0 +1,77 @@
1
+
2
+ import { Socket } from "socket.io-client";
3
+ import { GetPipedProducersAltType, GetPipedProducersAltParameters } from "../types/types";
4
+
5
+ export interface ReceiveAllPipedTransportsParameters extends GetPipedProducersAltParameters {
6
+ roomName: string;
7
+ member: string;
8
+
9
+ // mediasfu functions
10
+ getPipedProducersAlt: GetPipedProducersAltType;
11
+ [key: string]: any;
12
+ }
13
+
14
+ export interface ReceiveAllPipedTransportsOptions {
15
+ nsock: Socket;
16
+ community?: boolean;
17
+ parameters: ReceiveAllPipedTransportsParameters;
18
+ }
19
+
20
+ // Export the type definition for the function
21
+ export type ReceiveAllPipedTransportsType = (options: ReceiveAllPipedTransportsOptions) => Promise<void>;
22
+
23
+ /**
24
+ * Receives all piped transports by emitting an event to the server and processing the response.
25
+ *
26
+ * @param {ReceiveAllPipedTransportsOptions} options - The options for receiving all piped transports.
27
+ * @param {Socket} options.nsock - The socket instance used for communication.
28
+ * @param {boolean} options.community - Whether the room is a community edition room.
29
+ * @param {ReceiveAllPipedTransportsParameters} options.parameters - The parameters for the operation.
30
+ * @param {string} options.parameters.roomName - The name of the room.
31
+ * @param {string} options.parameters.member - The member identifier.
32
+ * @param {Function} options.parameters.getPipedProducersAlt - The function to get piped producers for a given level.
33
+ *
34
+ * @returns {Promise<void>} A promise that resolves when the operation is complete.
35
+ *
36
+ * @throws Will log an error message if the operation fails.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * await receiveAllPipedTransports({
41
+ * nsock: socketInstance,
42
+ * community: false,
43
+ * parameters: {
44
+ * roomName: 'Room1',
45
+ * member: 'Member1',
46
+ * getPipedProducersAlt: getPipedProducersAltFunction,
47
+ * },
48
+ * });
49
+ * ```
50
+ */
51
+
52
+ export const receiveAllPipedTransports = async ({ nsock, community=false, parameters }: ReceiveAllPipedTransportsOptions): Promise<void> => {
53
+ try {
54
+ // Destructure parameters
55
+ const { roomName, member, getPipedProducersAlt } = parameters;
56
+ const emitName = community ? "createReceiveAllTransports" : "createReceiveAllTransportsPiped";
57
+ const emitData = community ? { islevel:'0' } : { roomName, member };
58
+ // Emit createReceiveAllTransportsPiped event to the server
59
+ await nsock.emit(
60
+ emitName,
61
+ emitData,
62
+ async ({ producersExist }: { producersExist: boolean }) => {
63
+ // Array of options representing different levels
64
+ const options = ["0", "1", "2"];
65
+
66
+ // If producers exist, loop through each level and get producers
67
+ if (producersExist) {
68
+ for (const islevel of options) {
69
+ await getPipedProducersAlt({ nsock, community, islevel, parameters });
70
+ }
71
+ }
72
+ }
73
+ );
74
+ } catch (error) {
75
+ console.log("receiveAllPipedTransports error", error);
76
+ }
77
+ };
@@ -0,0 +1,55 @@
1
+ import { Socket } from "socket.io-client";
2
+ import { Message } from "../types/types";
3
+ export interface ReceiveRoomMessagesOptions {
4
+ socket: Socket;
5
+ roomName: string;
6
+ updateMessages: (messages: Message[]) => void;
7
+ }
8
+
9
+ // Export the type definition for the function
10
+ export type ReceiveRoomMessagesType = (options: ReceiveRoomMessagesOptions) => Promise<void>;
11
+
12
+ /**
13
+ * Retrieves messages from a specified room and updates the message state.
14
+ *
15
+ * @param {ReceiveRoomMessagesOptions} options - The options for receiving room messages.
16
+ * @param {Socket} options.socket - The socket instance used for communication.
17
+ * @param {string} options.roomName - The name of the room from which to retrieve messages.
18
+ * @param {Function} options.updateMessages - Function to update the state with retrieved messages.
19
+ *
20
+ * @returns {Promise<void>} A promise that resolves when the messages have been retrieved and updated.
21
+ *
22
+ * @throws Will log an error message if there is an issue retrieving the messages.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * await receiveRoomMessages({
27
+ * socket: socketInstance,
28
+ * roomName: 'Room1',
29
+ * updateMessages: (messages) => console.log(messages),
30
+ * });
31
+ * ```
32
+ */
33
+
34
+
35
+ export async function receiveRoomMessages({
36
+ socket,
37
+ roomName,
38
+ updateMessages,
39
+ }: ReceiveRoomMessagesOptions): Promise<void> {
40
+
41
+ try {
42
+ // Retrieve messages from the server
43
+ socket.emit("getMessage", { roomName }, async ({ messages_ }: { messages_: Message[]; }) => {
44
+ updateMessages(messages_);
45
+ });
46
+ } catch (error) {
47
+ // Handle errors if any
48
+ if (error instanceof Error) {
49
+ console.log("Error tuning messages:", error.message);
50
+ } else {
51
+ console.log("Error tuning messages:", error);
52
+ }
53
+ }
54
+ }
55
+