mediasfu-shared 1.0.1 → 1.0.2

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 (125) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +103 -222
  3. package/dist/index.cjs +7500 -2163
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.ts +4203 -273
  6. package/dist/index.js +7521 -2184
  7. package/dist/index.js.map +1 -1
  8. package/package.json +85 -78
  9. package/src/ProducerClient/producerClientEmits/joinRoomClient.ts +57 -0
  10. package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +401 -0
  11. package/src/consumers/addVideosGrid.ts +3 -2
  12. package/src/consumers/changeVids.ts +111 -41
  13. package/src/consumers/checkPermission.ts +35 -1
  14. package/src/consumers/connectRecvTransport.ts +42 -1
  15. package/src/consumers/consumerResume.ts +2 -2
  16. package/src/consumers/dispStreams.ts +83 -37
  17. package/src/consumers/frameworkConsumerContract.ts +6 -0
  18. package/src/consumers/generatePageContent.ts +24 -10
  19. package/src/consumers/getPipedProducersAlt.ts +112 -16
  20. package/src/consumers/gridLayout/addVideosGrid.engine.ts +42 -0
  21. package/src/consumers/gridLayout/prepopulateUserMedia.engine.ts +444 -0
  22. package/src/consumers/mixStreams.ts +45 -14
  23. package/src/consumers/onScreenChanges.ts +25 -10
  24. package/src/consumers/prepopulateUserMedia.ts +3 -2
  25. package/src/consumers/processConsumerTransports.ts +68 -23
  26. package/src/consumers/processConsumerTransportsAudio.ts +53 -16
  27. package/src/consumers/reUpdateInter.ts +61 -21
  28. package/src/consumers/readjust.ts +30 -14
  29. package/src/consumers/reorderStreams.ts +76 -42
  30. package/src/consumers/resumePauseAudioStreams.ts +66 -17
  31. package/src/consumers/resumePauseStreams.ts +53 -10
  32. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +8 -0
  33. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +114 -0
  34. package/src/consumers/socketReceiveMethods/producerClosed.ts +13 -0
  35. package/src/consumers/streamSuccessScreen.ts +2 -2
  36. package/src/consumers/streamSuccessVideo.ts +5 -0
  37. package/src/consumers/translationConsumerSwitch.ts +299 -0
  38. package/src/index.ts +85 -1
  39. package/src/methods/coHostMethods/modifyCoHostSettings.ts +9 -9
  40. package/src/methods/displaySettings/modifyDisplaySettings.ts +5 -0
  41. package/src/methods/index.ts +66 -0
  42. package/src/methods/message/sendMessage.ts +12 -29
  43. package/src/methods/panelists/focusPanelists.ts +83 -0
  44. package/src/methods/panelists/index.ts +3 -0
  45. package/src/methods/panelists/launchPanelists.ts +13 -0
  46. package/src/methods/panelists/updatePanelists.ts +135 -0
  47. package/src/methods/permissions/index.ts +3 -0
  48. package/src/methods/permissions/launchPermissions.ts +13 -0
  49. package/src/methods/permissions/updateParticipantPermission.ts +127 -0
  50. package/src/methods/permissions/updatePermissionConfig.ts +52 -0
  51. package/src/methods/polls/pollUpdated.ts +88 -0
  52. package/src/methods/recording/confirmRecording.ts +15 -12
  53. package/src/methods/recording/recordResumeTimer.ts +2 -2
  54. package/src/methods/recording/recordStartTimer.ts +2 -2
  55. package/src/methods/recording/timeLeftRecording.ts +25 -0
  56. package/src/methods/requests/hostRequestResponse.ts +153 -0
  57. package/src/methods/settings/modifySettings.ts +17 -17
  58. package/src/methods/socketReceive/allMembers.ts +450 -0
  59. package/src/methods/socketReceive/allMembersRest.ts +480 -0
  60. package/src/methods/socketReceive/allWaitingRoomMembers.ts +35 -0
  61. package/src/methods/socketReceive/banParticipant.ts +73 -0
  62. package/src/methods/socketReceive/controlMediaHost.ts +280 -0
  63. package/src/methods/socketReceive/disconnect.ts +40 -0
  64. package/src/methods/socketReceive/disconnectUserSelf.ts +56 -0
  65. package/src/methods/socketReceive/getDomains.ts +112 -0
  66. package/src/methods/socketReceive/meetingEnded.ts +49 -0
  67. package/src/methods/socketReceive/meetingStillThere.ts +26 -0
  68. package/src/methods/socketReceive/panelistReceiveMethods.ts +195 -0
  69. package/src/methods/socketReceive/participantRequested.ts +48 -0
  70. package/src/methods/socketReceive/permissionReceiveMethods.ts +59 -0
  71. package/src/methods/socketReceive/personJoined.ts +35 -0
  72. package/src/methods/socketReceive/producerMediaClosed.ts +223 -0
  73. package/src/methods/socketReceive/producerMediaPaused.ts +267 -0
  74. package/src/methods/socketReceive/producerMediaResumed.ts +157 -0
  75. package/src/methods/socketReceive/reInitiateRecording.ts +53 -0
  76. package/src/methods/socketReceive/receiveMessage.ts +117 -0
  77. package/src/methods/socketReceive/recordingNotice.ts +286 -0
  78. package/src/methods/socketReceive/roomRecordParams.ts +122 -0
  79. package/src/methods/socketReceive/screenProducerId.ts +61 -0
  80. package/src/methods/socketReceive/startRecords.ts +46 -0
  81. package/src/methods/socketReceive/stoppedRecording.ts +44 -0
  82. package/src/methods/socketReceive/translationReceiveMethods.ts +581 -0
  83. package/src/methods/socketReceive/updateConsumingDomains.ts +128 -0
  84. package/src/methods/socketReceive/updateMediaSettings.ts +45 -0
  85. package/src/methods/socketReceive/updatedCoHost.ts +75 -0
  86. package/src/methods/socketReceive/userWaiting.ts +45 -0
  87. package/src/methods/stream/clickAudio.ts +380 -0
  88. package/src/methods/stream/clickChat.ts +36 -0
  89. package/src/methods/stream/clickScreenShare.ts +173 -0
  90. package/src/methods/stream/clickVideo.ts +22 -5
  91. package/src/methods/stream/index.ts +1 -0
  92. package/src/methods/utils/SoundPlayer.ts +31 -0
  93. package/src/methods/utils/checkLimitsAndMakeRequest.ts +156 -2
  94. package/src/methods/utils/createResponseJoinRoom.ts +47 -0
  95. package/src/methods/utils/createRoomOnMediaSFU.ts +160 -0
  96. package/src/methods/utils/formatNumber.ts +42 -0
  97. package/src/methods/utils/generateRandomMessages.ts +70 -0
  98. package/src/methods/utils/generateRandomParticipants.ts +100 -0
  99. package/src/methods/utils/generateRandomPolls.ts +43 -0
  100. package/src/methods/utils/generateRandomRequestList.ts +51 -0
  101. package/src/methods/utils/generateRandomWaitingRoomList.ts +17 -0
  102. package/src/methods/utils/getModalPosition.ts +23 -0
  103. package/src/methods/utils/getOverlayPosition.ts +37 -0
  104. package/src/methods/utils/initialValuesState.ts +405 -0
  105. package/src/methods/utils/joinRoomOnMediaSFU.ts +124 -0
  106. package/src/methods/utils/liveSubtitle.ts +107 -0
  107. package/src/methods/utils/meetingTimeRemaining.ts +33 -0
  108. package/src/methods/utils/meetingTimer/startMeetingProgressTimer.ts +72 -0
  109. package/src/methods/utils/producer/aParams.ts +10 -0
  110. package/src/methods/utils/producer/hParams.ts +26 -0
  111. package/src/methods/utils/producer/screenParams.ts +13 -0
  112. package/src/methods/utils/producer/vParams.ts +26 -0
  113. package/src/methods/utils/producer/videoCaptureConstraints.ts +65 -0
  114. package/src/methods/utils/resolveMediaSFURoomApi.ts +16 -0
  115. package/src/methods/utils/sleep.ts +24 -0
  116. package/src/methods/utils/translationLanguages.ts +308 -0
  117. package/src/methods/utils/webrtc.ts +44 -0
  118. package/src/methods/welcome/handleWelcomeRequest.ts +11 -2
  119. package/src/methods/welcome/index.ts +5 -1
  120. package/src/methods/whiteboard/captureCanvasStream.ts +128 -0
  121. package/src/producers/producerEmits/joinConRoom.ts +2 -2
  122. package/src/producers/producerEmits/joinLocalRoom.ts +240 -0
  123. package/src/producers/producerEmits/joinRoom.ts +129 -0
  124. package/src/types/shared-base-types.ts +14 -3
  125. package/src/types/types.ts +255 -0
@@ -0,0 +1,280 @@
1
+ export interface ControlMediaHostNestedOptions<TParameters = unknown> {
2
+ parameters: TParameters;
3
+ }
4
+
5
+ export interface ControlMediaHostTrackLike {
6
+ enabled: boolean;
7
+ kind?: string;
8
+ }
9
+
10
+ export interface ControlMediaHostMediaStreamLike {
11
+ getAudioTracks?: () => ControlMediaHostTrackLike[];
12
+ getVideoTracks?: () => ControlMediaHostTrackLike[];
13
+ tracks?: ControlMediaHostTrackLike[];
14
+ [key: string]: any;
15
+ }
16
+
17
+ export interface ControlMediaHostOnScreenChangesOptions<TParameters = unknown>
18
+ extends ControlMediaHostNestedOptions<TParameters> {
19
+ changed?: boolean;
20
+ }
21
+
22
+ export type ControlMediaHostOnScreenChangesType<TParameters = unknown> = (
23
+ options: ControlMediaHostOnScreenChangesOptions<TParameters>,
24
+ ) => Promise<void>;
25
+
26
+ export type ControlMediaHostStopShareScreenType<TParameters = unknown> = (
27
+ options: ControlMediaHostNestedOptions<TParameters>,
28
+ ) => Promise<void>;
29
+
30
+ export type ControlMediaHostDisconnectSendTransportVideoType<
31
+ TParameters = unknown,
32
+ > = (options: ControlMediaHostNestedOptions<TParameters>) => Promise<void>;
33
+
34
+ export type ControlMediaHostDisconnectSendTransportAudioType<
35
+ TParameters = unknown,
36
+ > = (options: ControlMediaHostNestedOptions<TParameters>) => Promise<void>;
37
+
38
+ export type ControlMediaHostDisconnectSendTransportScreenType<
39
+ TParameters = unknown,
40
+ > = (options: ControlMediaHostNestedOptions<TParameters>) => Promise<void>;
41
+
42
+ export interface ControlMediaHostParameters<
43
+ TOnScreenChangesParameters = unknown,
44
+ TStopShareScreenParameters = unknown,
45
+ TDisconnectSendTransportVideoParameters = unknown,
46
+ TDisconnectSendTransportAudioParameters = unknown,
47
+ TDisconnectSendTransportScreenParameters = unknown,
48
+ TAllParameters extends TOnScreenChangesParameters &
49
+ TStopShareScreenParameters &
50
+ TDisconnectSendTransportVideoParameters &
51
+ TDisconnectSendTransportAudioParameters &
52
+ TDisconnectSendTransportScreenParameters = TOnScreenChangesParameters &
53
+ TStopShareScreenParameters &
54
+ TDisconnectSendTransportVideoParameters &
55
+ TDisconnectSendTransportAudioParameters &
56
+ TDisconnectSendTransportScreenParameters,
57
+ TMediaStream extends ControlMediaHostMediaStreamLike = MediaStream,
58
+ > {
59
+ updateAdminRestrictSetting: (value: boolean) => void;
60
+ localStream: TMediaStream | null;
61
+ updateLocalStream: (stream: TMediaStream | null) => void;
62
+ updateAudioAlreadyOn: (value: boolean) => void;
63
+ localStreamScreen: TMediaStream | null;
64
+ updateLocalStreamScreen: (stream: TMediaStream | null) => void;
65
+ localStreamVideo: TMediaStream | null;
66
+ updateLocalStreamVideo: (stream: TMediaStream | null) => void;
67
+ updateScreenAlreadyOn: (value: boolean) => void;
68
+ updateVideoAlreadyOn: (value: boolean) => void;
69
+ updateChatAlreadyOn: (value: boolean) => void;
70
+ onScreenChanges: ControlMediaHostOnScreenChangesType<TOnScreenChangesParameters>;
71
+ stopShareScreen: ControlMediaHostStopShareScreenType<TStopShareScreenParameters>;
72
+ disconnectSendTransportVideo: ControlMediaHostDisconnectSendTransportVideoType<TDisconnectSendTransportVideoParameters>;
73
+ disconnectSendTransportAudio: ControlMediaHostDisconnectSendTransportAudioType<TDisconnectSendTransportAudioParameters>;
74
+ disconnectSendTransportScreen: ControlMediaHostDisconnectSendTransportScreenType<TDisconnectSendTransportScreenParameters>;
75
+ getUpdatedAllParams: () =>
76
+ ControlMediaHostParameters<
77
+ TOnScreenChangesParameters,
78
+ TStopShareScreenParameters,
79
+ TDisconnectSendTransportVideoParameters,
80
+ TDisconnectSendTransportAudioParameters,
81
+ TDisconnectSendTransportScreenParameters,
82
+ TAllParameters,
83
+ TMediaStream
84
+ > & TAllParameters;
85
+ [key: string]: any;
86
+ }
87
+
88
+ export interface ControlMediaHostOptions<
89
+ TOnScreenChangesParameters = unknown,
90
+ TStopShareScreenParameters = unknown,
91
+ TDisconnectSendTransportVideoParameters = unknown,
92
+ TDisconnectSendTransportAudioParameters = unknown,
93
+ TDisconnectSendTransportScreenParameters = unknown,
94
+ TAllParameters extends TOnScreenChangesParameters &
95
+ TStopShareScreenParameters &
96
+ TDisconnectSendTransportVideoParameters &
97
+ TDisconnectSendTransportAudioParameters &
98
+ TDisconnectSendTransportScreenParameters = TOnScreenChangesParameters &
99
+ TStopShareScreenParameters &
100
+ TDisconnectSendTransportVideoParameters &
101
+ TDisconnectSendTransportAudioParameters &
102
+ TDisconnectSendTransportScreenParameters,
103
+ TMediaStream extends ControlMediaHostMediaStreamLike = MediaStream,
104
+ > {
105
+ type: 'audio' | 'video' | 'screenshare' | 'chat' | 'all';
106
+ parameters:
107
+ ControlMediaHostParameters<
108
+ TOnScreenChangesParameters,
109
+ TStopShareScreenParameters,
110
+ TDisconnectSendTransportVideoParameters,
111
+ TDisconnectSendTransportAudioParameters,
112
+ TDisconnectSendTransportScreenParameters,
113
+ TAllParameters,
114
+ TMediaStream
115
+ > & TAllParameters;
116
+ }
117
+
118
+ export type ControlMediaHostType<
119
+ TOnScreenChangesParameters = unknown,
120
+ TStopShareScreenParameters = unknown,
121
+ TDisconnectSendTransportVideoParameters = unknown,
122
+ TDisconnectSendTransportAudioParameters = unknown,
123
+ TDisconnectSendTransportScreenParameters = unknown,
124
+ TAllParameters extends TOnScreenChangesParameters &
125
+ TStopShareScreenParameters &
126
+ TDisconnectSendTransportVideoParameters &
127
+ TDisconnectSendTransportAudioParameters &
128
+ TDisconnectSendTransportScreenParameters = TOnScreenChangesParameters &
129
+ TStopShareScreenParameters &
130
+ TDisconnectSendTransportVideoParameters &
131
+ TDisconnectSendTransportAudioParameters &
132
+ TDisconnectSendTransportScreenParameters,
133
+ TMediaStream extends ControlMediaHostMediaStreamLike = MediaStream,
134
+ > = (
135
+ options: ControlMediaHostOptions<
136
+ TOnScreenChangesParameters,
137
+ TStopShareScreenParameters,
138
+ TDisconnectSendTransportVideoParameters,
139
+ TDisconnectSendTransportAudioParameters,
140
+ TDisconnectSendTransportScreenParameters,
141
+ TAllParameters,
142
+ TMediaStream
143
+ >,
144
+ ) => Promise<void>;
145
+
146
+ /**
147
+ * Applies host-enforced media restrictions across local audio, video, screenshare, and chat state.
148
+ *
149
+ * @param {ControlMediaHostOptions} options - Restriction type and shared transport/screen callbacks.
150
+ * @returns {Promise<void>} Resolves once the requested host restriction is applied.
151
+ *
152
+ * @example
153
+ * ```typescript
154
+ * await controlMediaHost({
155
+ * type: 'video',
156
+ * parameters,
157
+ * });
158
+ * ```
159
+ */
160
+ export const controlMediaHost = async <
161
+ TOnScreenChangesParameters = unknown,
162
+ TStopShareScreenParameters = unknown,
163
+ TDisconnectSendTransportVideoParameters = unknown,
164
+ TDisconnectSendTransportAudioParameters = unknown,
165
+ TDisconnectSendTransportScreenParameters = unknown,
166
+ TAllParameters extends TOnScreenChangesParameters &
167
+ TStopShareScreenParameters &
168
+ TDisconnectSendTransportVideoParameters &
169
+ TDisconnectSendTransportAudioParameters &
170
+ TDisconnectSendTransportScreenParameters = TOnScreenChangesParameters &
171
+ TStopShareScreenParameters &
172
+ TDisconnectSendTransportVideoParameters &
173
+ TDisconnectSendTransportAudioParameters &
174
+ TDisconnectSendTransportScreenParameters,
175
+ TMediaStream extends ControlMediaHostMediaStreamLike = MediaStream,
176
+ >({
177
+ type,
178
+ parameters,
179
+ }: ControlMediaHostOptions<
180
+ TOnScreenChangesParameters,
181
+ TStopShareScreenParameters,
182
+ TDisconnectSendTransportVideoParameters,
183
+ TDisconnectSendTransportAudioParameters,
184
+ TDisconnectSendTransportScreenParameters,
185
+ TAllParameters,
186
+ TMediaStream
187
+ >): Promise<void> => {
188
+ const {
189
+ updateAdminRestrictSetting,
190
+ updateLocalStream,
191
+ updateAudioAlreadyOn,
192
+ updateLocalStreamScreen,
193
+ updateLocalStreamVideo,
194
+ updateScreenAlreadyOn,
195
+ updateVideoAlreadyOn,
196
+ updateChatAlreadyOn,
197
+ onScreenChanges,
198
+ stopShareScreen,
199
+ disconnectSendTransportVideo,
200
+ disconnectSendTransportAudio,
201
+ disconnectSendTransportScreen,
202
+ } = parameters;
203
+
204
+ const { localStream, localStreamScreen, localStreamVideo } =
205
+ parameters.getUpdatedAllParams();
206
+
207
+ const disableTrack = (
208
+ stream: TMediaStream | null,
209
+ kind: 'audio' | 'video',
210
+ ): boolean => {
211
+ const getTracks =
212
+ kind === 'audio' ? stream?.getAudioTracks : stream?.getVideoTracks;
213
+ const tracks =
214
+ typeof getTracks === 'function'
215
+ ? getTracks.call(stream)
216
+ : stream?.tracks?.filter((track) => track.kind === kind) ?? [];
217
+ const track = tracks && tracks[0];
218
+ if (track) {
219
+ track.enabled = false;
220
+ return true;
221
+ }
222
+ return false;
223
+ };
224
+
225
+ try {
226
+ updateAdminRestrictSetting(true);
227
+
228
+ if (type === 'audio') {
229
+ disableTrack(localStream, 'audio');
230
+ updateLocalStream(localStream ?? null);
231
+ await disconnectSendTransportAudio({ parameters });
232
+ updateAudioAlreadyOn(false);
233
+ } else if (type === 'video') {
234
+ disableTrack(localStream, 'video');
235
+ updateLocalStream(localStream ?? null);
236
+ await disconnectSendTransportVideo({ parameters });
237
+ await onScreenChanges({ changed: true, parameters });
238
+
239
+ disableTrack(localStreamVideo, 'video');
240
+ updateLocalStreamVideo(localStreamVideo ?? null);
241
+ await disconnectSendTransportVideo({ parameters });
242
+ await onScreenChanges({ changed: true, parameters });
243
+
244
+ updateVideoAlreadyOn(false);
245
+ } else if (type === 'screenshare') {
246
+ disableTrack(localStreamScreen, 'video');
247
+ updateLocalStreamScreen(localStreamScreen ?? null);
248
+ await disconnectSendTransportScreen({ parameters });
249
+ await stopShareScreen({ parameters });
250
+ updateScreenAlreadyOn(false);
251
+ } else if (type === 'chat') {
252
+ updateChatAlreadyOn(false);
253
+ } else if (type === 'all') {
254
+ disableTrack(localStream, 'audio');
255
+ updateLocalStream(localStream ?? null);
256
+ await disconnectSendTransportAudio({ parameters });
257
+ updateAudioAlreadyOn(false);
258
+
259
+ disableTrack(localStreamScreen, 'video');
260
+ updateLocalStreamScreen(localStreamScreen ?? null);
261
+ await disconnectSendTransportScreen({ parameters });
262
+ await stopShareScreen({ parameters });
263
+ updateScreenAlreadyOn(false);
264
+
265
+ disableTrack(localStream, 'video');
266
+ updateLocalStream(localStream ?? null);
267
+ await disconnectSendTransportVideo({ parameters });
268
+ await onScreenChanges({ changed: true, parameters });
269
+
270
+ disableTrack(localStreamVideo, 'video');
271
+ updateLocalStreamVideo(localStreamVideo ?? null);
272
+ await disconnectSendTransportVideo({ parameters });
273
+ await onScreenChanges({ changed: true, parameters });
274
+
275
+ updateVideoAlreadyOn(false);
276
+ }
277
+ } catch (error) {
278
+ console.error('Error in controlMediaHost:', error);
279
+ }
280
+ };
@@ -0,0 +1,40 @@
1
+ import type { ShowAlert } from '../../types/types';
2
+
3
+ export interface DisconnectOptions {
4
+ showAlert?: ShowAlert;
5
+ redirectURL?: string;
6
+ onWeb: boolean;
7
+ updateValidated?: (isValidated: boolean) => void;
8
+ }
9
+
10
+ export type DisconnectType = (options: DisconnectOptions) => Promise<void>;
11
+
12
+ /**
13
+ * Handles a forced session disconnect by redirecting web users or showing a local alert fallback.
14
+ *
15
+ * @param {DisconnectOptions} options - Redirect and alert handlers for the disconnect flow.
16
+ * @returns {Promise<void>} Resolves after the redirect or alert side effect is applied.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * await disconnect({
21
+ * onWeb: true,
22
+ * redirectURL: 'https://example.com/exit',
23
+ * });
24
+ * ```
25
+ */
26
+ export const disconnect = async ({
27
+ showAlert,
28
+ redirectURL,
29
+ onWeb,
30
+ }: DisconnectOptions): Promise<void> => {
31
+ if (onWeb && redirectURL && typeof window !== 'undefined') {
32
+ window.location.href = redirectURL;
33
+ } else {
34
+ showAlert?.({
35
+ message: 'You have been disconnected from the session.',
36
+ type: 'danger',
37
+ duration: 2000,
38
+ });
39
+ }
40
+ };
@@ -0,0 +1,56 @@
1
+ export interface DisconnectUserSelfSocketLike {
2
+ id?: string;
3
+ emit: (event: string, ...args: any[]) => void;
4
+ }
5
+
6
+ export interface DisconnectUserSelfOptions {
7
+ member: string;
8
+ roomName: string;
9
+ socket: DisconnectUserSelfSocketLike;
10
+ localSocket?: DisconnectUserSelfSocketLike;
11
+ }
12
+
13
+ export type DisconnectUserSelfType = (
14
+ options: DisconnectUserSelfOptions,
15
+ ) => Promise<void>;
16
+
17
+ /**
18
+ * Emits a self-disconnect request, including the optional mirrored local socket.
19
+ *
20
+ * @param {DisconnectUserSelfOptions} options - Socket targets and participant identity.
21
+ * @returns {Promise<void>} Resolves after the disconnect events are emitted.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * await disconnectUserSelf({
26
+ * member: 'user123',
27
+ * roomName: 'main-room',
28
+ * socket,
29
+ * localSocket,
30
+ * });
31
+ * ```
32
+ */
33
+ export async function disconnectUserSelf({
34
+ member,
35
+ roomName,
36
+ socket,
37
+ localSocket,
38
+ }: DisconnectUserSelfOptions): Promise<void> {
39
+ socket.emit('disconnectUser', {
40
+ member,
41
+ roomName,
42
+ ban: true,
43
+ });
44
+
45
+ try {
46
+ if (localSocket?.id) {
47
+ localSocket.emit('disconnectUser', {
48
+ member,
49
+ roomName,
50
+ ban: true,
51
+ });
52
+ }
53
+ } catch {
54
+ // no-op
55
+ }
56
+ }
@@ -0,0 +1,112 @@
1
+ import type { RtpCapabilities } from 'mediasoup-client/lib/types';
2
+ import type {
3
+ AltDomains,
4
+ ConsumeSocket,
5
+ } from '../../types/types';
6
+
7
+ export interface ConnectIpsLikeOptions<
8
+ TParameters = unknown,
9
+ TConsumeSocket = ConsumeSocket,
10
+ > {
11
+ consume_sockets: TConsumeSocket[];
12
+ remIP: string[];
13
+ apiUserName: string;
14
+ apiKey?: string;
15
+ apiToken: string;
16
+ parameters: TParameters;
17
+ }
18
+
19
+ export type ConnectIpsLikeType<
20
+ TParameters = unknown,
21
+ TConsumeSocket = ConsumeSocket,
22
+ > = (
23
+ options: ConnectIpsLikeOptions<TParameters, TConsumeSocket>,
24
+ ) => Promise<[unknown[], string[]]>;
25
+
26
+ export interface GetDomainsParameters<
27
+ TParameters = unknown,
28
+ TConsumeSocket = ConsumeSocket,
29
+ TRtpCapabilities = RtpCapabilities,
30
+ > {
31
+ roomRecvIPs: string[];
32
+ rtpCapabilities: TRtpCapabilities | null;
33
+ consume_sockets: TConsumeSocket[];
34
+ connectIps: ConnectIpsLikeType<TParameters, TConsumeSocket>;
35
+ getUpdatedAllParams: () => GetDomainsParameters<TParameters, TConsumeSocket, TRtpCapabilities> & TParameters;
36
+ [key: string]: any;
37
+ }
38
+
39
+ export interface GetDomainsOptions<
40
+ TParameters = unknown,
41
+ TConsumeSocket = ConsumeSocket,
42
+ TRtpCapabilities = RtpCapabilities,
43
+ > {
44
+ domains: string[];
45
+ alt_domains: AltDomains;
46
+ apiUserName: string;
47
+ apiKey: string;
48
+ apiToken: string;
49
+ parameters: GetDomainsParameters<TParameters, TConsumeSocket, TRtpCapabilities> & TParameters;
50
+ }
51
+
52
+ export type GetDomainsType<
53
+ TParameters = unknown,
54
+ TConsumeSocket = ConsumeSocket,
55
+ TRtpCapabilities = RtpCapabilities,
56
+ > = (options: GetDomainsOptions<TParameters, TConsumeSocket, TRtpCapabilities>) => Promise<void>;
57
+
58
+ /**
59
+ * Resolves newly announced consuming domains to connection targets and connects missing ones.
60
+ *
61
+ * @param {GetDomainsOptions} options - Domain payload and shared consume-socket connection helpers.
62
+ * @returns {Promise<void>} Resolves after any missing consume domains are connected.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * await getDomains({
67
+ * domains: ['recv-1', 'recv-2'],
68
+ * alt_domains,
69
+ * apiUserName: 'api-user',
70
+ * apiKey: 'api-key',
71
+ * apiToken: 'api-token',
72
+ * parameters,
73
+ * });
74
+ * ```
75
+ */
76
+ export const getDomains = async <
77
+ TParameters = unknown,
78
+ TConsumeSocket = ConsumeSocket,
79
+ TRtpCapabilities = RtpCapabilities,
80
+ >({
81
+ domains,
82
+ alt_domains,
83
+ apiUserName,
84
+ apiKey,
85
+ apiToken,
86
+ parameters,
87
+ }: GetDomainsOptions<TParameters, TConsumeSocket, TRtpCapabilities>): Promise<void> => {
88
+ let { roomRecvIPs, consume_sockets, connectIps } = parameters;
89
+ const ipsToConnect: string[] = [];
90
+
91
+ try {
92
+ consume_sockets = parameters.getUpdatedAllParams().consume_sockets;
93
+
94
+ for (const domain of domains) {
95
+ const ipToCheck = alt_domains[domain] || domain;
96
+ if (!roomRecvIPs.includes(ipToCheck)) {
97
+ ipsToConnect.push(ipToCheck);
98
+ }
99
+ }
100
+
101
+ await connectIps({
102
+ consume_sockets,
103
+ remIP: ipsToConnect,
104
+ parameters,
105
+ apiUserName,
106
+ apiKey,
107
+ apiToken,
108
+ });
109
+ } catch (error) {
110
+ console.error('Error in getDomains: ', error);
111
+ }
112
+ };
@@ -0,0 +1,49 @@
1
+ import type { EventType, ShowAlert } from '../../types/types';
2
+
3
+ export interface MeetingEndedOptions {
4
+ showAlert?: ShowAlert;
5
+ redirectURL?: string;
6
+ onWeb: boolean;
7
+ eventType: EventType;
8
+ updateValidated?: (isValid: boolean) => void;
9
+ }
10
+
11
+ export type MeetingEndedType = (options: MeetingEndedOptions) => Promise<void>;
12
+
13
+ /**
14
+ * Announces that the current event has ended and optionally redirects on web.
15
+ *
16
+ * @param {MeetingEndedOptions} options - Event-end behavior settings.
17
+ * @returns {Promise<void>} Resolves after alerts and redirect scheduling are configured.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * await meetingEnded({
22
+ * onWeb: true,
23
+ * eventType: 'conference',
24
+ * redirectURL: 'https://example.com',
25
+ * showAlert,
26
+ * });
27
+ * ```
28
+ */
29
+ export const meetingEnded = async ({
30
+ showAlert,
31
+ redirectURL,
32
+ onWeb,
33
+ eventType,
34
+ }: MeetingEndedOptions): Promise<void> => {
35
+ if (eventType !== 'chat') {
36
+ showAlert?.({
37
+ message:
38
+ 'The event has ended. You will be redirected to the home page in 2 seconds.',
39
+ type: 'danger',
40
+ duration: 2000,
41
+ });
42
+ }
43
+
44
+ if (onWeb && redirectURL) {
45
+ setTimeout(() => {
46
+ window.location.href = redirectURL;
47
+ }, 2000);
48
+ }
49
+ };
@@ -0,0 +1,26 @@
1
+ export interface MeetingStillThereOptions {
2
+ updateIsConfirmHereModalVisible: (isVisible: boolean) => void;
3
+ }
4
+
5
+ export type MeetingStillThereType = (
6
+ options: MeetingStillThereOptions,
7
+ ) => Promise<void>;
8
+
9
+ /**
10
+ * Shows the "still there" confirmation modal.
11
+ *
12
+ * @param {MeetingStillThereOptions} options - Visibility setter for the confirmation modal.
13
+ * @returns {Promise<void>} Resolves after the modal is shown.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * await meetingStillThere({
18
+ * updateIsConfirmHereModalVisible: setIsConfirmHereModalVisible,
19
+ * });
20
+ * ```
21
+ */
22
+ export const meetingStillThere = async ({
23
+ updateIsConfirmHereModalVisible,
24
+ }: MeetingStillThereOptions): Promise<void> => {
25
+ updateIsConfirmHereModalVisible(true);
26
+ };