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.
- package/LICENSE +21 -21
- package/README.md +103 -222
- package/dist/index.cjs +7500 -2163
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4203 -273
- package/dist/index.js +7521 -2184
- package/dist/index.js.map +1 -1
- package/package.json +85 -78
- package/src/ProducerClient/producerClientEmits/joinRoomClient.ts +57 -0
- package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +401 -0
- package/src/consumers/addVideosGrid.ts +3 -2
- package/src/consumers/changeVids.ts +111 -41
- package/src/consumers/checkPermission.ts +35 -1
- package/src/consumers/connectRecvTransport.ts +42 -1
- package/src/consumers/consumerResume.ts +2 -2
- package/src/consumers/dispStreams.ts +83 -37
- package/src/consumers/frameworkConsumerContract.ts +6 -0
- package/src/consumers/generatePageContent.ts +24 -10
- package/src/consumers/getPipedProducersAlt.ts +112 -16
- package/src/consumers/gridLayout/addVideosGrid.engine.ts +42 -0
- package/src/consumers/gridLayout/prepopulateUserMedia.engine.ts +444 -0
- package/src/consumers/mixStreams.ts +45 -14
- package/src/consumers/onScreenChanges.ts +25 -10
- package/src/consumers/prepopulateUserMedia.ts +3 -2
- package/src/consumers/processConsumerTransports.ts +68 -23
- package/src/consumers/processConsumerTransportsAudio.ts +53 -16
- package/src/consumers/reUpdateInter.ts +61 -21
- package/src/consumers/readjust.ts +30 -14
- package/src/consumers/reorderStreams.ts +76 -42
- package/src/consumers/resumePauseAudioStreams.ts +66 -17
- package/src/consumers/resumePauseStreams.ts +53 -10
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +8 -0
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +114 -0
- package/src/consumers/socketReceiveMethods/producerClosed.ts +13 -0
- package/src/consumers/streamSuccessScreen.ts +2 -2
- package/src/consumers/streamSuccessVideo.ts +5 -0
- package/src/consumers/translationConsumerSwitch.ts +299 -0
- package/src/index.ts +85 -1
- package/src/methods/coHostMethods/modifyCoHostSettings.ts +9 -9
- package/src/methods/displaySettings/modifyDisplaySettings.ts +5 -0
- package/src/methods/index.ts +66 -0
- package/src/methods/message/sendMessage.ts +12 -29
- package/src/methods/panelists/focusPanelists.ts +83 -0
- package/src/methods/panelists/index.ts +3 -0
- package/src/methods/panelists/launchPanelists.ts +13 -0
- package/src/methods/panelists/updatePanelists.ts +135 -0
- package/src/methods/permissions/index.ts +3 -0
- package/src/methods/permissions/launchPermissions.ts +13 -0
- package/src/methods/permissions/updateParticipantPermission.ts +127 -0
- package/src/methods/permissions/updatePermissionConfig.ts +52 -0
- package/src/methods/polls/pollUpdated.ts +88 -0
- package/src/methods/recording/confirmRecording.ts +15 -12
- package/src/methods/recording/recordResumeTimer.ts +2 -2
- package/src/methods/recording/recordStartTimer.ts +2 -2
- package/src/methods/recording/timeLeftRecording.ts +25 -0
- package/src/methods/requests/hostRequestResponse.ts +153 -0
- package/src/methods/settings/modifySettings.ts +17 -17
- package/src/methods/socketReceive/allMembers.ts +450 -0
- package/src/methods/socketReceive/allMembersRest.ts +480 -0
- package/src/methods/socketReceive/allWaitingRoomMembers.ts +35 -0
- package/src/methods/socketReceive/banParticipant.ts +73 -0
- package/src/methods/socketReceive/controlMediaHost.ts +280 -0
- package/src/methods/socketReceive/disconnect.ts +40 -0
- package/src/methods/socketReceive/disconnectUserSelf.ts +56 -0
- package/src/methods/socketReceive/getDomains.ts +112 -0
- package/src/methods/socketReceive/meetingEnded.ts +49 -0
- package/src/methods/socketReceive/meetingStillThere.ts +26 -0
- package/src/methods/socketReceive/panelistReceiveMethods.ts +195 -0
- package/src/methods/socketReceive/participantRequested.ts +48 -0
- package/src/methods/socketReceive/permissionReceiveMethods.ts +59 -0
- package/src/methods/socketReceive/personJoined.ts +35 -0
- package/src/methods/socketReceive/producerMediaClosed.ts +223 -0
- package/src/methods/socketReceive/producerMediaPaused.ts +267 -0
- package/src/methods/socketReceive/producerMediaResumed.ts +157 -0
- package/src/methods/socketReceive/reInitiateRecording.ts +53 -0
- package/src/methods/socketReceive/receiveMessage.ts +117 -0
- package/src/methods/socketReceive/recordingNotice.ts +286 -0
- package/src/methods/socketReceive/roomRecordParams.ts +122 -0
- package/src/methods/socketReceive/screenProducerId.ts +61 -0
- package/src/methods/socketReceive/startRecords.ts +46 -0
- package/src/methods/socketReceive/stoppedRecording.ts +44 -0
- package/src/methods/socketReceive/translationReceiveMethods.ts +581 -0
- package/src/methods/socketReceive/updateConsumingDomains.ts +128 -0
- package/src/methods/socketReceive/updateMediaSettings.ts +45 -0
- package/src/methods/socketReceive/updatedCoHost.ts +75 -0
- package/src/methods/socketReceive/userWaiting.ts +45 -0
- package/src/methods/stream/clickAudio.ts +380 -0
- package/src/methods/stream/clickChat.ts +36 -0
- package/src/methods/stream/clickScreenShare.ts +173 -0
- package/src/methods/stream/clickVideo.ts +22 -5
- package/src/methods/stream/index.ts +1 -0
- package/src/methods/utils/SoundPlayer.ts +31 -0
- package/src/methods/utils/checkLimitsAndMakeRequest.ts +156 -2
- package/src/methods/utils/createResponseJoinRoom.ts +47 -0
- package/src/methods/utils/createRoomOnMediaSFU.ts +160 -0
- package/src/methods/utils/formatNumber.ts +42 -0
- package/src/methods/utils/generateRandomMessages.ts +70 -0
- package/src/methods/utils/generateRandomParticipants.ts +100 -0
- package/src/methods/utils/generateRandomPolls.ts +43 -0
- package/src/methods/utils/generateRandomRequestList.ts +51 -0
- package/src/methods/utils/generateRandomWaitingRoomList.ts +17 -0
- package/src/methods/utils/getModalPosition.ts +23 -0
- package/src/methods/utils/getOverlayPosition.ts +37 -0
- package/src/methods/utils/initialValuesState.ts +405 -0
- package/src/methods/utils/joinRoomOnMediaSFU.ts +124 -0
- package/src/methods/utils/liveSubtitle.ts +107 -0
- package/src/methods/utils/meetingTimeRemaining.ts +33 -0
- package/src/methods/utils/meetingTimer/startMeetingProgressTimer.ts +72 -0
- package/src/methods/utils/producer/aParams.ts +10 -0
- package/src/methods/utils/producer/hParams.ts +26 -0
- package/src/methods/utils/producer/screenParams.ts +13 -0
- package/src/methods/utils/producer/vParams.ts +26 -0
- package/src/methods/utils/producer/videoCaptureConstraints.ts +65 -0
- package/src/methods/utils/resolveMediaSFURoomApi.ts +16 -0
- package/src/methods/utils/sleep.ts +24 -0
- package/src/methods/utils/translationLanguages.ts +308 -0
- package/src/methods/utils/webrtc.ts +44 -0
- package/src/methods/welcome/handleWelcomeRequest.ts +11 -2
- package/src/methods/welcome/index.ts +5 -1
- package/src/methods/whiteboard/captureCanvasStream.ts +128 -0
- package/src/producers/producerEmits/joinConRoom.ts +2 -2
- package/src/producers/producerEmits/joinLocalRoom.ts +240 -0
- package/src/producers/producerEmits/joinRoom.ts +129 -0
- package/src/types/shared-base-types.ts +14 -3
- 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
|
+
};
|