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.
- package/LICENSE +21 -0
- package/README.md +228 -0
- package/dist/index.cjs +7707 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +7285 -0
- package/dist/index.js +7690 -0
- package/dist/index.js.map +1 -0
- package/package.json +78 -0
- package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +68 -0
- package/src/consumers/addVideosGrid.ts +18 -0
- package/src/consumers/autoAdjust.ts +100 -0
- package/src/consumers/calculateRowsAndColumns.ts +51 -0
- package/src/consumers/changeVids.ts +753 -0
- package/src/consumers/checkGrid.ts +100 -0
- package/src/consumers/checkPermission.ts +89 -0
- package/src/consumers/checkScreenShare.ts +114 -0
- package/src/consumers/closeAndResize.ts +401 -0
- package/src/consumers/compareActiveNames.ts +122 -0
- package/src/consumers/compareScreenStates.ts +117 -0
- package/src/consumers/connectIps.ts +175 -0
- package/src/consumers/connectLocalIps.ts +103 -0
- package/src/consumers/connectRecvTransport.ts +158 -0
- package/src/consumers/connectSendTransport.ts +150 -0
- package/src/consumers/connectSendTransportAudio.ts +161 -0
- package/src/consumers/connectSendTransportScreen.ts +169 -0
- package/src/consumers/connectSendTransportVideo.ts +149 -0
- package/src/consumers/consumerResume.ts +25 -0
- package/src/consumers/controlMedia.ts +118 -0
- package/src/consumers/createSendTransport.ts +312 -0
- package/src/consumers/disconnectSendTransportAudio.ts +170 -0
- package/src/consumers/disconnectSendTransportScreen.ts +130 -0
- package/src/consumers/disconnectSendTransportVideo.ts +161 -0
- package/src/consumers/dispStreams.ts +694 -0
- package/src/consumers/generatePageContent.ts +118 -0
- package/src/consumers/getEstimate.ts +124 -0
- package/src/consumers/getPipedProducersAlt.ts +96 -0
- package/src/consumers/getProducersPiped.ts +89 -0
- package/src/consumers/getVideos.ts +107 -0
- package/src/consumers/mixStreams.ts +97 -0
- package/src/consumers/onScreenChanges.ts +106 -0
- package/src/consumers/prepopulateUserMedia.ts +18 -0
- package/src/consumers/processConsumerTransports.ts +157 -0
- package/src/consumers/processConsumerTransportsAudio.ts +121 -0
- package/src/consumers/rePort.ts +123 -0
- package/src/consumers/reUpdateInter.ts +289 -0
- package/src/consumers/readjust.ts +170 -0
- package/src/consumers/receiveAllPipedTransports.ts +77 -0
- package/src/consumers/receiveRoomMessages.ts +55 -0
- package/src/consumers/reorderStreams.ts +246 -0
- package/src/consumers/requestScreenShare.ts +103 -0
- package/src/consumers/resumePauseAudioStreams.ts +174 -0
- package/src/consumers/resumePauseStreams.ts +110 -0
- package/src/consumers/resumeSendTransportAudio.ts +143 -0
- package/src/consumers/signalNewConsumerTransport.ts +179 -0
- package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +130 -0
- package/src/consumers/socketReceiveMethods/newPipeProducer.ts +138 -0
- package/src/consumers/socketReceiveMethods/producerClosed.ts +102 -0
- package/src/consumers/startShareScreen.ts +124 -0
- package/src/consumers/stopShareScreen.ts +241 -0
- package/src/consumers/streamSuccessAudio.ts +297 -0
- package/src/consumers/streamSuccessAudioSwitch.ts +315 -0
- package/src/consumers/streamSuccessScreen.ts +255 -0
- package/src/consumers/streamSuccessVideo.ts +373 -0
- package/src/consumers/switchUserAudio.ts +140 -0
- package/src/consumers/switchUserVideo.ts +201 -0
- package/src/consumers/switchUserVideoAlt.ts +331 -0
- package/src/consumers/trigger.ts +250 -0
- package/src/consumers/updateMiniCardsGrid.ts +150 -0
- package/src/consumers/updateParticipantAudioDecibels.ts +56 -0
- package/src/index.ts +119 -0
- package/src/methods/background/launchBackground.ts +16 -0
- package/src/methods/breakoutRooms/breakoutRoomUpdated.ts +161 -0
- package/src/methods/breakoutRooms/handleStartBreakout.ts +96 -0
- package/src/methods/breakoutRooms/handleStopBreakout.ts +72 -0
- package/src/methods/breakoutRooms/index.ts +4 -0
- package/src/methods/breakoutRooms/launchBreakoutRooms.ts +31 -0
- package/src/methods/coHost/launchCoHost.ts +28 -0
- package/src/methods/coHostMethods/index.ts +2 -0
- package/src/methods/coHostMethods/modifyCoHostSettings.ts +94 -0
- package/src/methods/displaySettings/index.ts +1 -0
- package/src/methods/displaySettings/launchDisplaySettings.ts +31 -0
- package/src/methods/displaySettings/modifyDisplaySettings.ts +242 -0
- package/src/methods/exit/confirmExit.ts +60 -0
- package/src/methods/exit/index.ts +2 -0
- package/src/methods/exit/launchConfirmExit.ts +29 -0
- package/src/methods/index.ts +5 -0
- package/src/methods/mediaSettings/launchMediaSettings.ts +61 -0
- package/src/methods/menu/launchMenuModal.ts +28 -0
- package/src/methods/message/index.ts +1 -0
- package/src/methods/message/launchMessages.ts +27 -0
- package/src/methods/message/sendMessage.ts +175 -0
- package/src/methods/participants/index.ts +3 -0
- package/src/methods/participants/launchParticipants.ts +25 -0
- package/src/methods/participants/messageParticipants.ts +78 -0
- package/src/methods/participants/muteParticipants.ts +79 -0
- package/src/methods/participants/removeParticipants.ts +97 -0
- package/src/methods/polls/handleCreatePoll.ts +66 -0
- package/src/methods/polls/handleEndPoll.ts +64 -0
- package/src/methods/polls/handleVotePoll.ts +76 -0
- package/src/methods/polls/index.ts +3 -0
- package/src/methods/polls/launchPoll.ts +25 -0
- package/src/methods/prejoin/handleCreateRoom.ts +441 -0
- package/src/methods/prejoin/handleJoinRoom.ts +153 -0
- package/src/methods/prejoin/index.ts +14 -0
- package/src/methods/recording/checkPauseState.ts +57 -0
- package/src/methods/recording/checkResumeState.ts +42 -0
- package/src/methods/recording/confirmRecording.ts +241 -0
- package/src/methods/recording/launchRecording.ts +114 -0
- package/src/methods/recording/recordPauseTimer.ts +52 -0
- package/src/methods/recording/recordResumeTimer.ts +92 -0
- package/src/methods/recording/recordStartTimer.ts +106 -0
- package/src/methods/recording/recordUpdateTimer.ts +49 -0
- package/src/methods/recording/startRecording.ts +268 -0
- package/src/methods/recording/stopRecording.ts +124 -0
- package/src/methods/recording/updateRecording.ts +245 -0
- package/src/methods/requests/index.ts +1 -0
- package/src/methods/requests/launchRequests.ts +25 -0
- package/src/methods/requests/respondToRequests.ts +108 -0
- package/src/methods/settings/index.ts +2 -0
- package/src/methods/settings/launchSettings.ts +25 -0
- package/src/methods/settings/modifySettings.ts +99 -0
- package/src/methods/stream/clickVideo.ts +337 -0
- package/src/methods/stream/index.ts +3 -0
- package/src/methods/stream/switchAudio.ts +73 -0
- package/src/methods/stream/switchVideo.ts +148 -0
- package/src/methods/stream/switchVideoAlt.ts +152 -0
- package/src/methods/utils/checkLimitsAndMakeRequest.ts +103 -0
- package/src/methods/utils/validateAlphanumeric.ts +41 -0
- package/src/methods/waiting/index.ts +1 -0
- package/src/methods/waiting/launchWaiting.ts +26 -0
- package/src/methods/waiting/respondToWaiting.ts +82 -0
- package/src/methods/welcome/handleWelcomeRequest.ts +189 -0
- package/src/methods/welcome/index.ts +5 -0
- package/src/methods/whiteboard/handleStartWhiteboard.ts +65 -0
- package/src/methods/whiteboard/handleStopWhiteboard.ts +48 -0
- package/src/methods/whiteboard/index.ts +4 -0
- package/src/methods/whiteboard/launchConfigureWhiteboard.ts +29 -0
- package/src/producers/producerEmits/joinConRoom.ts +153 -0
- package/src/sockets/SocketManager.ts +232 -0
- package/src/types/shared-base-types.ts +752 -0
- package/src/types/types.ts +84 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import type { ShowAlert, OnScreenChangesParameters, OnScreenChangesType } from '../../types/types'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export interface ModifyDisplaySettingsParameters extends OnScreenChangesParameters {
|
|
5
|
+
showAlert?: ShowAlert
|
|
6
|
+
meetingDisplayType: string
|
|
7
|
+
autoWave: boolean
|
|
8
|
+
forceFullDisplay: boolean
|
|
9
|
+
meetingVideoOptimized: boolean
|
|
10
|
+
islevel: string
|
|
11
|
+
recordStarted: boolean
|
|
12
|
+
recordResumed: boolean
|
|
13
|
+
recordStopped: boolean
|
|
14
|
+
recordPaused: boolean
|
|
15
|
+
recordingDisplayType: 'video' | 'media' | 'all'
|
|
16
|
+
recordingVideoOptimized: boolean
|
|
17
|
+
prevForceFullDisplay: boolean
|
|
18
|
+
prevMeetingDisplayType: string
|
|
19
|
+
updateMeetingDisplayType: (displayType: string) => void
|
|
20
|
+
updateAutoWave: (autoWave: boolean) => void
|
|
21
|
+
updateForceFullDisplay: (forceFullDisplay: boolean) => void
|
|
22
|
+
updateMeetingVideoOptimized: (optimized: boolean) => void
|
|
23
|
+
updatePrevForceFullDisplay: (forceFullDisplay: boolean) => void
|
|
24
|
+
updatePrevMeetingDisplayType: (displayType: string) => void
|
|
25
|
+
updateIsDisplaySettingsModalVisible: (isVisible: boolean) => void
|
|
26
|
+
updateFirstAll: (firstAll: boolean) => void
|
|
27
|
+
updateUpdateMainWindow: (update: boolean) => void
|
|
28
|
+
breakOutRoomStarted: boolean
|
|
29
|
+
breakOutRoomEnded: boolean
|
|
30
|
+
|
|
31
|
+
// mediasfu functions
|
|
32
|
+
onScreenChanges: OnScreenChangesType
|
|
33
|
+
|
|
34
|
+
[key: string]: any
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ModifyDisplaySettingsOptions {
|
|
38
|
+
parameters: ModifyDisplaySettingsParameters
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Export the type definition for the function
|
|
42
|
+
export type ModifyDisplaySettingsType = (
|
|
43
|
+
options: ModifyDisplaySettingsOptions
|
|
44
|
+
) => Promise<void>
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Modifies the display settings based on the provided parameters.
|
|
48
|
+
*
|
|
49
|
+
* @param {ModifyDisplaySettingsOptions} options - The options containing the parameters to modify the display settings.
|
|
50
|
+
* @param {Object} options.parameters - The parameters for modifying the display settings.
|
|
51
|
+
* @param {Function} options.parameters.showAlert - Function to show alert messages.
|
|
52
|
+
* @param {string} options.parameters.meetingDisplayType - The current meeting display type.
|
|
53
|
+
* @param {boolean} options.parameters.autoWave - Flag indicating if auto wave is enabled.
|
|
54
|
+
* @param {boolean} options.parameters.forceFullDisplay - Flag indicating if full display is forced.
|
|
55
|
+
* @param {boolean} options.parameters.meetingVideoOptimized - Flag indicating if the meeting video is optimized.
|
|
56
|
+
* @param {string} options.parameters.islevel - The current level of the meeting.
|
|
57
|
+
* @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.
|
|
58
|
+
* @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.
|
|
59
|
+
* @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.
|
|
60
|
+
* @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.
|
|
61
|
+
* @param {string} options.parameters.recordingDisplayType - The current recording display type.
|
|
62
|
+
* @param {boolean} options.parameters.recordingVideoOptimized - Flag indicating if the recording video is optimized.
|
|
63
|
+
* @param {string} options.parameters.prevForceFullDisplay - The previous force full display value.
|
|
64
|
+
* @param {string} options.parameters.prevMeetingDisplayType - The previous meeting display type.
|
|
65
|
+
* @param {Function} options.parameters.updateMeetingDisplayType - Function to update the meeting display type.
|
|
66
|
+
* @param {Function} options.parameters.updateAutoWave - Function to update the auto wave setting.
|
|
67
|
+
* @param {Function} options.parameters.updateForceFullDisplay - Function to update the force full display setting.
|
|
68
|
+
* @param {Function} options.parameters.updateMeetingVideoOptimized - Function to update the meeting video optimization setting.
|
|
69
|
+
* @param {Function} options.parameters.updatePrevForceFullDisplay - Function to update the previous force full display setting.
|
|
70
|
+
* @param {Function} options.parameters.updatePrevMeetingDisplayType - Function to update the previous meeting display type.
|
|
71
|
+
* @param {Function} options.parameters.updateIsDisplaySettingsModalVisible - Function to update the visibility of the display settings modal.
|
|
72
|
+
* @param {Function} options.parameters.updateFirstAll - Function to update the first all setting.
|
|
73
|
+
* @param {Function} options.parameters.updateUpdateMainWindow - Function to update the main window.
|
|
74
|
+
* @param {boolean} options.parameters.breakOutRoomStarted - Flag indicating if a breakout room has started.
|
|
75
|
+
* @param {boolean} options.parameters.breakOutRoomEnded - Flag indicating if a breakout room has ended.
|
|
76
|
+
* @param {Function} options.parameters.onScreenChanges - Function to handle screen changes.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const options: ModifyDisplaySettingsOptions = {
|
|
81
|
+
* parameters: {
|
|
82
|
+
* showAlert: showAlertFunction,
|
|
83
|
+
* meetingDisplayType: "video",
|
|
84
|
+
* autoWave: true,
|
|
85
|
+
* forceFullDisplay: false,
|
|
86
|
+
* meetingVideoOptimized: true,
|
|
87
|
+
* islevel: "2",
|
|
88
|
+
* recordStarted: true,
|
|
89
|
+
* recordResumed: false,
|
|
90
|
+
* recordStopped: false,
|
|
91
|
+
* recordPaused: false,
|
|
92
|
+
* recordingDisplayType: "video",
|
|
93
|
+
* recordingVideoOptimized: true,
|
|
94
|
+
* prevForceFullDisplay: false,
|
|
95
|
+
* prevMeetingDisplayType: "media",
|
|
96
|
+
* updateMeetingDisplayType: updateDisplayTypeFunction,
|
|
97
|
+
* updateAutoWave: updateAutoWaveFunction,
|
|
98
|
+
* updateForceFullDisplay: updateForceFullDisplayFunction,
|
|
99
|
+
* updateMeetingVideoOptimized: updateVideoOptimizedFunction,
|
|
100
|
+
* updatePrevForceFullDisplay: updatePrevForceFullFunction,
|
|
101
|
+
* updatePrevMeetingDisplayType: updatePrevDisplayTypeFunction,
|
|
102
|
+
* updateIsDisplaySettingsModalVisible: setModalVisibilityFunction,
|
|
103
|
+
* updateFirstAll: setFirstAllFunction,
|
|
104
|
+
* updateUpdateMainWindow: setMainWindowUpdateFunction,
|
|
105
|
+
* breakOutRoomStarted: false,
|
|
106
|
+
* breakOutRoomEnded: true,
|
|
107
|
+
* onScreenChanges: onScreenChangesFunction
|
|
108
|
+
* }
|
|
109
|
+
* };
|
|
110
|
+
*
|
|
111
|
+
* await modifyDisplaySettings(options);
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
export const modifyDisplaySettings = async ({
|
|
116
|
+
parameters
|
|
117
|
+
}: ModifyDisplaySettingsOptions): Promise<void> => {
|
|
118
|
+
// Destructure the parameters
|
|
119
|
+
let {
|
|
120
|
+
showAlert,
|
|
121
|
+
meetingDisplayType,
|
|
122
|
+
autoWave,
|
|
123
|
+
forceFullDisplay,
|
|
124
|
+
meetingVideoOptimized,
|
|
125
|
+
islevel,
|
|
126
|
+
recordStarted,
|
|
127
|
+
recordResumed,
|
|
128
|
+
recordStopped,
|
|
129
|
+
recordPaused,
|
|
130
|
+
recordingDisplayType,
|
|
131
|
+
recordingVideoOptimized,
|
|
132
|
+
prevForceFullDisplay,
|
|
133
|
+
prevMeetingDisplayType,
|
|
134
|
+
updateMeetingDisplayType,
|
|
135
|
+
updateAutoWave,
|
|
136
|
+
updateForceFullDisplay,
|
|
137
|
+
updateMeetingVideoOptimized,
|
|
138
|
+
updatePrevForceFullDisplay,
|
|
139
|
+
updatePrevMeetingDisplayType,
|
|
140
|
+
updateIsDisplaySettingsModalVisible,
|
|
141
|
+
updateFirstAll,
|
|
142
|
+
updateUpdateMainWindow,
|
|
143
|
+
breakOutRoomStarted,
|
|
144
|
+
breakOutRoomEnded,
|
|
145
|
+
onScreenChanges
|
|
146
|
+
} = parameters
|
|
147
|
+
|
|
148
|
+
// Update previous states
|
|
149
|
+
updateAutoWave(autoWave)
|
|
150
|
+
updateForceFullDisplay(forceFullDisplay)
|
|
151
|
+
|
|
152
|
+
if (
|
|
153
|
+
islevel === '2' &&
|
|
154
|
+
(recordStarted || recordResumed) &&
|
|
155
|
+
!recordStopped &&
|
|
156
|
+
!recordPaused
|
|
157
|
+
) {
|
|
158
|
+
if (
|
|
159
|
+
recordingDisplayType === 'video' &&
|
|
160
|
+
meetingDisplayType === 'video' &&
|
|
161
|
+
meetingVideoOptimized &&
|
|
162
|
+
!recordingVideoOptimized
|
|
163
|
+
) {
|
|
164
|
+
showAlert?.({
|
|
165
|
+
message:
|
|
166
|
+
'Meeting display type can be either video, media, or all when recording display type is non-optimized video.',
|
|
167
|
+
type: 'danger',
|
|
168
|
+
duration: 3000
|
|
169
|
+
})
|
|
170
|
+
// Reset to previous values or handle as needed
|
|
171
|
+
meetingDisplayType = recordingDisplayType
|
|
172
|
+
updateMeetingDisplayType(meetingDisplayType)
|
|
173
|
+
meetingVideoOptimized = recordingVideoOptimized
|
|
174
|
+
updateMeetingVideoOptimized(meetingVideoOptimized)
|
|
175
|
+
return
|
|
176
|
+
} else if (
|
|
177
|
+
recordingDisplayType === 'media' &&
|
|
178
|
+
meetingDisplayType === 'video'
|
|
179
|
+
) {
|
|
180
|
+
showAlert?.({
|
|
181
|
+
message:
|
|
182
|
+
'Meeting display type can be either media or all when recording display type is media.',
|
|
183
|
+
type: 'danger',
|
|
184
|
+
duration: 3000
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
// Reset to previous values or handle as needed
|
|
188
|
+
meetingDisplayType = recordingDisplayType
|
|
189
|
+
updateMeetingDisplayType(meetingDisplayType)
|
|
190
|
+
return
|
|
191
|
+
} else if (
|
|
192
|
+
recordingDisplayType === 'all' &&
|
|
193
|
+
(meetingDisplayType === 'video' || meetingDisplayType === 'media')
|
|
194
|
+
) {
|
|
195
|
+
showAlert?.({
|
|
196
|
+
message:
|
|
197
|
+
'Meeting display type can be only all when recording display type is all.',
|
|
198
|
+
type: 'danger',
|
|
199
|
+
duration: 3000
|
|
200
|
+
})
|
|
201
|
+
// Reset to previous values or handle as needed
|
|
202
|
+
meetingDisplayType = recordingDisplayType
|
|
203
|
+
updateMeetingDisplayType(meetingDisplayType)
|
|
204
|
+
return
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
updateMeetingDisplayType(meetingDisplayType)
|
|
209
|
+
updateMeetingVideoOptimized(meetingVideoOptimized)
|
|
210
|
+
|
|
211
|
+
// Close the modal or perform additional actions
|
|
212
|
+
updateIsDisplaySettingsModalVisible(false)
|
|
213
|
+
|
|
214
|
+
if (
|
|
215
|
+
prevMeetingDisplayType !== meetingDisplayType ||
|
|
216
|
+
prevForceFullDisplay !== forceFullDisplay
|
|
217
|
+
) {
|
|
218
|
+
if (
|
|
219
|
+
breakOutRoomStarted &&
|
|
220
|
+
!breakOutRoomEnded &&
|
|
221
|
+
meetingDisplayType !== 'all'
|
|
222
|
+
) {
|
|
223
|
+
showAlert?.({
|
|
224
|
+
message:
|
|
225
|
+
'Breakout room is active. Display type can only be all.',
|
|
226
|
+
type: 'danger'
|
|
227
|
+
})
|
|
228
|
+
meetingDisplayType = prevMeetingDisplayType
|
|
229
|
+
updateMeetingDisplayType(prevMeetingDisplayType)
|
|
230
|
+
return
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
updateFirstAll(meetingDisplayType !== 'all' ? true : false)
|
|
234
|
+
updateUpdateMainWindow(true)
|
|
235
|
+
await onScreenChanges({
|
|
236
|
+
changed: true,
|
|
237
|
+
parameters: { ...parameters, meetingDisplayType, forceFullDisplay }
|
|
238
|
+
})
|
|
239
|
+
updatePrevForceFullDisplay(forceFullDisplay)
|
|
240
|
+
updatePrevMeetingDisplayType(meetingDisplayType)
|
|
241
|
+
}
|
|
242
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Socket } from 'socket.io-client'
|
|
2
|
+
|
|
3
|
+
export interface ConfirmExitOptions {
|
|
4
|
+
socket: Socket
|
|
5
|
+
localSocket?: Socket
|
|
6
|
+
member: string
|
|
7
|
+
roomName: string
|
|
8
|
+
ban?: boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Export the type definition for the function
|
|
12
|
+
export type ConfirmExitType = (options: ConfirmExitOptions) => Promise<void>
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Confirms the exit of a member from a room and optionally bans them.
|
|
16
|
+
*
|
|
17
|
+
* @param {ConfirmExitOptions} options - The options for confirming the exit.
|
|
18
|
+
* @param {Socket} options.socket - The socket instance to emit the event.
|
|
19
|
+
* @param {Socket} [options.localSocket] - The local socket instance to emit the event.
|
|
20
|
+
* @param {string} options.member - The member who is exiting.
|
|
21
|
+
* @param {string} options.roomName - The name of the room the member is exiting from.
|
|
22
|
+
* @param {boolean} [options.ban=false] - Whether to ban the member from the room.
|
|
23
|
+
* @returns {Promise<void>} A promise that resolves when the exit is confirmed.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const options = {
|
|
28
|
+
* socket: socketInstance,
|
|
29
|
+
* localSocket: localSocketInstance,
|
|
30
|
+
* member: "JohnDoe",
|
|
31
|
+
* roomName: "Room123",
|
|
32
|
+
* ban: true,
|
|
33
|
+
* };
|
|
34
|
+
* await confirmExit(options);
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export const confirmExit = async ({
|
|
39
|
+
socket,
|
|
40
|
+
localSocket,
|
|
41
|
+
member,
|
|
42
|
+
roomName,
|
|
43
|
+
ban = false
|
|
44
|
+
}: ConfirmExitOptions): Promise<void> => {
|
|
45
|
+
// Emit a socket event to disconnect the user from the room
|
|
46
|
+
socket.emit('disconnectUser', {
|
|
47
|
+
member: member,
|
|
48
|
+
roomName: roomName,
|
|
49
|
+
ban: ban
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
if (localSocket && localSocket.id) {
|
|
53
|
+
// Emit a local socket event to disconnect the user from the room
|
|
54
|
+
localSocket.emit('disconnectUser', {
|
|
55
|
+
member: member,
|
|
56
|
+
roomName: roomName,
|
|
57
|
+
ban: ban
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface LaunchConfirmExitOptions {
|
|
2
|
+
updateIsConfirmExitModalVisible: (isVisible: boolean) => void
|
|
3
|
+
isConfirmExitModalVisible: boolean
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export type LaunchConfirmExitType = (options: LaunchConfirmExitOptions) => void
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Toggles the visibility of the confirmation exit modal.
|
|
10
|
+
*
|
|
11
|
+
* @param {LaunchConfirmExitOptions} options - The options for launching the confirmation exit modal.
|
|
12
|
+
* @param {Function} options.updateIsConfirmExitModalVisible - Function to update the visibility state of the confirmation exit modal.
|
|
13
|
+
* @param {boolean} options.isConfirmExitModalVisible - Current visibility state of the confirmation exit modal.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const options = {
|
|
18
|
+
* updateIsConfirmExitModalVisible: setIsConfirmExitModalVisible,
|
|
19
|
+
* isConfirmExitModalVisible: false,
|
|
20
|
+
* }
|
|
21
|
+
* launchConfirmExit(options)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export const launchConfirmExit: LaunchConfirmExitType = ({
|
|
25
|
+
updateIsConfirmExitModalVisible,
|
|
26
|
+
isConfirmExitModalVisible,
|
|
27
|
+
}) => {
|
|
28
|
+
updateIsConfirmExitModalVisible(!isConfirmExitModalVisible)
|
|
29
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface LaunchMediaSettingsOptions {
|
|
2
|
+
updateIsMediaSettingsModalVisible: (isVisible: boolean) => void
|
|
3
|
+
isMediaSettingsModalVisible: boolean
|
|
4
|
+
mediaDevices: MediaDevices
|
|
5
|
+
audioInputs: MediaDeviceInfo[]
|
|
6
|
+
videoInputs: MediaDeviceInfo[]
|
|
7
|
+
updateAudioInputs: (inputs: MediaDeviceInfo[]) => void
|
|
8
|
+
updateVideoInputs: (inputs: MediaDeviceInfo[]) => void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type LaunchMediaSettingsType = (options: LaunchMediaSettingsOptions) => Promise<void>
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Launches the media settings modal and updates the available audio and video input devices.
|
|
15
|
+
*
|
|
16
|
+
* @param {LaunchMediaSettingsOptions} options - The options for launching media settings.
|
|
17
|
+
* @param {Function} options.updateIsMediaSettingsModalVisible - Function to update the visibility state of the media settings modal.
|
|
18
|
+
* @param {boolean} options.isMediaSettingsModalVisible - Current visibility state of the media settings modal.
|
|
19
|
+
* @param {MediaDevices} options.mediaDevices - MediaDevices interface to enumerate media devices.
|
|
20
|
+
* @param {MediaDeviceInfo[]} options.audioInputs - Array to store available audio input devices.
|
|
21
|
+
* @param {MediaDeviceInfo[]} options.videoInputs - Array to store available video input devices.
|
|
22
|
+
* @param {Function} options.updateAudioInputs - Function to update the available audio input devices.
|
|
23
|
+
* @param {Function} options.updateVideoInputs - Function to update the available video input devices.
|
|
24
|
+
* @returns {Promise<void>} A promise that resolves when the media settings have been updated.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* launchMediaSettings({
|
|
29
|
+
* updateIsMediaSettingsModalVisible: (isVisible) => console.log('Modal visible:', isVisible),
|
|
30
|
+
* isMediaSettingsModalVisible: false,
|
|
31
|
+
* mediaDevices: navigator.mediaDevices,
|
|
32
|
+
* audioInputs: [],
|
|
33
|
+
* videoInputs: [],
|
|
34
|
+
* updateAudioInputs: (inputs) => console.log('Audio Inputs:', inputs),
|
|
35
|
+
* updateVideoInputs: (inputs) => console.log('Video Inputs:', inputs),
|
|
36
|
+
* })
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export const launchMediaSettings: LaunchMediaSettingsType = async ({
|
|
40
|
+
updateIsMediaSettingsModalVisible,
|
|
41
|
+
isMediaSettingsModalVisible,
|
|
42
|
+
mediaDevices,
|
|
43
|
+
audioInputs,
|
|
44
|
+
videoInputs,
|
|
45
|
+
updateAudioInputs,
|
|
46
|
+
updateVideoInputs,
|
|
47
|
+
}) => {
|
|
48
|
+
if (!isMediaSettingsModalVisible) {
|
|
49
|
+
try {
|
|
50
|
+
const devices = await mediaDevices.enumerateDevices()
|
|
51
|
+
videoInputs = devices.filter((device) => device.kind === 'videoinput')
|
|
52
|
+
audioInputs = devices.filter((device) => device.kind === 'audioinput')
|
|
53
|
+
updateVideoInputs(videoInputs)
|
|
54
|
+
updateAudioInputs(audioInputs)
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.log('Error getting media devices', error)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
updateIsMediaSettingsModalVisible(!isMediaSettingsModalVisible)
|
|
61
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface LaunchMenuModalOptions {
|
|
2
|
+
updateIsMenuModalVisible: (isVisible: boolean) => void
|
|
3
|
+
isMenuModalVisible: boolean
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export type LaunchMenuModalType = (options: LaunchMenuModalOptions) => void
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Toggles the visibility of the menu modal.
|
|
10
|
+
*
|
|
11
|
+
* @param {LaunchMenuModalOptions} options - The options for launching the menu modal.
|
|
12
|
+
* @param {Function} options.updateIsMenuModalVisible - Function to update the visibility state of the menu modal.
|
|
13
|
+
* @param {boolean} options.isMenuModalVisible - Current visibility state of the menu modal.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* launchMenuModal({
|
|
18
|
+
* updateIsMenuModalVisible: (isVisible) => console.log("Menu modal visibility:", isVisible),
|
|
19
|
+
* isMenuModalVisible: false,
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const launchMenuModal: LaunchMenuModalType = ({
|
|
24
|
+
updateIsMenuModalVisible,
|
|
25
|
+
isMenuModalVisible,
|
|
26
|
+
}) => {
|
|
27
|
+
updateIsMenuModalVisible(!isMenuModalVisible)
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { sendMessage, type SendMessageType, type SendMessageOptions } from './sendMessage';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface LaunchMessagesOptions {
|
|
2
|
+
updateIsMessagesModalVisible: (visible: boolean) => void
|
|
3
|
+
isMessagesModalVisible: boolean
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export type LaunchMessagesType = (options: LaunchMessagesOptions) => void
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Toggles the visibility state of the messages modal.
|
|
10
|
+
*
|
|
11
|
+
* @param {LaunchMessagesOptions} options - The options object.
|
|
12
|
+
* @param {Function} options.updateIsMessagesModalVisible - Function to update the visibility state of the messages modal.
|
|
13
|
+
* @param {boolean} options.isMessagesModalVisible - Current visibility state of the messages modal.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const options: LaunchMessagesOptions = {
|
|
18
|
+
* updateIsMessagesModalVisible: setModalVisibilityFunction,
|
|
19
|
+
* isMessagesModalVisible: false,
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* launchMessages(options)
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const launchMessages: LaunchMessagesType = ({ updateIsMessagesModalVisible, isMessagesModalVisible }) => {
|
|
26
|
+
updateIsMessagesModalVisible(!isMessagesModalVisible)
|
|
27
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Socket } from "socket.io-client";
|
|
2
|
+
import type {
|
|
3
|
+
CoHostResponsibility,
|
|
4
|
+
EventType,
|
|
5
|
+
Message,
|
|
6
|
+
ShowAlert,
|
|
7
|
+
} from "../../types/types";
|
|
8
|
+
|
|
9
|
+
export interface SendMessageOptions {
|
|
10
|
+
message: string;
|
|
11
|
+
receivers: string[];
|
|
12
|
+
group: boolean;
|
|
13
|
+
messagesLength: number;
|
|
14
|
+
member: string;
|
|
15
|
+
sender: string;
|
|
16
|
+
islevel: string;
|
|
17
|
+
eventType?: EventType;
|
|
18
|
+
showAlert?: ShowAlert;
|
|
19
|
+
coHostResponsibility: CoHostResponsibility[];
|
|
20
|
+
coHost: string;
|
|
21
|
+
roomName: string;
|
|
22
|
+
socket: Socket;
|
|
23
|
+
chatSetting: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Export the type
|
|
27
|
+
export type SendMessageType = (options: SendMessageOptions) => Promise<void>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Sends a message to the server.
|
|
31
|
+
*
|
|
32
|
+
* @param {SendMessageOptions} options - The options for sending a message.
|
|
33
|
+
* @param {string} options.message - The message content to be sent.
|
|
34
|
+
* @param {string[]} options.receivers - The list of receivers for the message.
|
|
35
|
+
* @param {boolean} options.group - Indicates if the message is for a group.
|
|
36
|
+
* @param {number} options.messagesLength - The current number of messages.
|
|
37
|
+
* @param {string} options.member - The member sending the message.
|
|
38
|
+
* @param {string} options.sender - The sender of the message.
|
|
39
|
+
* @param {string} options.islevel - The level of the sender (e.g., "2" for admin).
|
|
40
|
+
* @param {EventType} [options.eventType] - The type of event (e.g., "broadcast", "chat", "conference").
|
|
41
|
+
* @param {ShowAlert} [options.showAlert] - Function to show alerts to the user.
|
|
42
|
+
* @param {CoHostResponsibility[]} options.coHostResponsibility - Array of co-host responsibilities.
|
|
43
|
+
* @param {string} options.coHost - The co-host member name.
|
|
44
|
+
* @param {string} options.roomName - The name of the room.
|
|
45
|
+
* @param {Socket} options.socket - The socket instance for communication.
|
|
46
|
+
* @param {string} options.chatSetting - The chat setting for the event room.
|
|
47
|
+
* @returns {Promise<void>} A promise that resolves when the message is sent.
|
|
48
|
+
*
|
|
49
|
+
* @throws Will show an alert if the message count exceeds the limit, if the message is invalid, or if the user is not allowed to send a message.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* await sendMessage({
|
|
54
|
+
* message: "Hello, World!",
|
|
55
|
+
* receivers: ["user1", "user2"],
|
|
56
|
+
* group: true,
|
|
57
|
+
* messagesLength: 50,
|
|
58
|
+
* member: "user3",
|
|
59
|
+
* sender: "user3",
|
|
60
|
+
* islevel: "2",
|
|
61
|
+
* eventType: "chat",
|
|
62
|
+
* showAlert: ({ message, type }) => console.log(message, type),
|
|
63
|
+
* coHostResponsibility: [{ name: "chat", value: true }],
|
|
64
|
+
* coHost: "coHostUser",
|
|
65
|
+
* roomName: "mainRoom",
|
|
66
|
+
* socket: socketInstance,
|
|
67
|
+
* chatSetting: "allow",
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
export const sendMessage = async ({
|
|
73
|
+
message,
|
|
74
|
+
receivers,
|
|
75
|
+
group,
|
|
76
|
+
messagesLength,
|
|
77
|
+
member,
|
|
78
|
+
sender,
|
|
79
|
+
islevel,
|
|
80
|
+
eventType,
|
|
81
|
+
showAlert,
|
|
82
|
+
coHostResponsibility,
|
|
83
|
+
coHost,
|
|
84
|
+
roomName,
|
|
85
|
+
socket,
|
|
86
|
+
chatSetting,
|
|
87
|
+
}: SendMessageOptions): Promise<void> => {
|
|
88
|
+
let chatValue = false;
|
|
89
|
+
|
|
90
|
+
// Check if messages count exceeds the limit
|
|
91
|
+
if (eventType === "broadcast") {
|
|
92
|
+
if (messagesLength >= 100) {
|
|
93
|
+
showAlert?.({
|
|
94
|
+
message: "You have reached the maximum number of messages",
|
|
95
|
+
type: "danger",
|
|
96
|
+
duration: 3000,
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
} else if (eventType === "chat") {
|
|
101
|
+
if (messagesLength >= 500) {
|
|
102
|
+
showAlert?.({
|
|
103
|
+
message: "You have reached the maximum number of messages",
|
|
104
|
+
type: "danger",
|
|
105
|
+
duration: 3000,
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
if (messagesLength >= 100000) {
|
|
111
|
+
showAlert?.({
|
|
112
|
+
message: "You have reached the maximum number of messages",
|
|
113
|
+
type: "danger",
|
|
114
|
+
duration: 3000,
|
|
115
|
+
});
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Check if message is valid
|
|
121
|
+
if (!message || message === "") {
|
|
122
|
+
showAlert?.({
|
|
123
|
+
message: "Message is not valid.",
|
|
124
|
+
type: "danger",
|
|
125
|
+
duration: 3000,
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Check if receivers is valid
|
|
131
|
+
if (receivers.length < 1 && group === false) {
|
|
132
|
+
showAlert?.({
|
|
133
|
+
message: "Please select a message to reply to",
|
|
134
|
+
type: "danger",
|
|
135
|
+
duration: 3000,
|
|
136
|
+
});
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Create message object
|
|
141
|
+
const messageObject: Message = {
|
|
142
|
+
sender: sender ? sender : member,
|
|
143
|
+
receivers: receivers,
|
|
144
|
+
message: message,
|
|
145
|
+
timestamp: new Date().toLocaleTimeString(),
|
|
146
|
+
group: group !== undefined && group !== null ? group : false,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
// Check co-host responsibility for chat
|
|
151
|
+
chatValue = coHostResponsibility.find((item) => item.name === "chat")?.value ?? false;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
console.error(error);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (islevel === "2" || (coHost === member && chatValue === true)) {
|
|
157
|
+
// Allow sending message
|
|
158
|
+
} else {
|
|
159
|
+
// Check if user is allowed to send a message in the event room
|
|
160
|
+
if (!chatSetting) {
|
|
161
|
+
showAlert?.({
|
|
162
|
+
message: "You are not allowed to send a message in this event room",
|
|
163
|
+
type: "danger",
|
|
164
|
+
duration: 3000,
|
|
165
|
+
});
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Send the message to the server
|
|
171
|
+
socket.emit("sendMessage", {
|
|
172
|
+
messageObject: messageObject,
|
|
173
|
+
roomName: roomName,
|
|
174
|
+
});
|
|
175
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface LaunchParticipantsOptions {
|
|
2
|
+
updateIsParticipantsModalVisible: (isVisible: boolean) => void
|
|
3
|
+
isParticipantsModalVisible: boolean
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export type LaunchParticipantsType = (options: LaunchParticipantsOptions) => void
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Toggles the visibility of the participants modal.
|
|
10
|
+
*
|
|
11
|
+
* @param {LaunchParticipantsOptions} options - The options for toggling the participants modal.
|
|
12
|
+
* @param {Function} options.updateIsParticipantsModalVisible - Function to update the visibility state of the participants modal.
|
|
13
|
+
* @param {boolean} options.isParticipantsModalVisible - Current visibility state of the participants modal.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* launchParticipants({
|
|
18
|
+
* updateIsParticipantsModalVisible: (isVisible) => setParticipantsModalVisible(isVisible),
|
|
19
|
+
* isParticipantsModalVisible: true,
|
|
20
|
+
* })
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const launchParticipants: LaunchParticipantsType = ({ updateIsParticipantsModalVisible, isParticipantsModalVisible }) => {
|
|
24
|
+
updateIsParticipantsModalVisible(!isParticipantsModalVisible)
|
|
25
|
+
}
|