mediasfu-shared 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/dist/index.cjs +7707 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.ts +7285 -0
  6. package/dist/index.js +7690 -0
  7. package/dist/index.js.map +1 -0
  8. package/package.json +78 -0
  9. package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +68 -0
  10. package/src/consumers/addVideosGrid.ts +18 -0
  11. package/src/consumers/autoAdjust.ts +100 -0
  12. package/src/consumers/calculateRowsAndColumns.ts +51 -0
  13. package/src/consumers/changeVids.ts +753 -0
  14. package/src/consumers/checkGrid.ts +100 -0
  15. package/src/consumers/checkPermission.ts +89 -0
  16. package/src/consumers/checkScreenShare.ts +114 -0
  17. package/src/consumers/closeAndResize.ts +401 -0
  18. package/src/consumers/compareActiveNames.ts +122 -0
  19. package/src/consumers/compareScreenStates.ts +117 -0
  20. package/src/consumers/connectIps.ts +175 -0
  21. package/src/consumers/connectLocalIps.ts +103 -0
  22. package/src/consumers/connectRecvTransport.ts +158 -0
  23. package/src/consumers/connectSendTransport.ts +150 -0
  24. package/src/consumers/connectSendTransportAudio.ts +161 -0
  25. package/src/consumers/connectSendTransportScreen.ts +169 -0
  26. package/src/consumers/connectSendTransportVideo.ts +149 -0
  27. package/src/consumers/consumerResume.ts +25 -0
  28. package/src/consumers/controlMedia.ts +118 -0
  29. package/src/consumers/createSendTransport.ts +312 -0
  30. package/src/consumers/disconnectSendTransportAudio.ts +170 -0
  31. package/src/consumers/disconnectSendTransportScreen.ts +130 -0
  32. package/src/consumers/disconnectSendTransportVideo.ts +161 -0
  33. package/src/consumers/dispStreams.ts +694 -0
  34. package/src/consumers/generatePageContent.ts +118 -0
  35. package/src/consumers/getEstimate.ts +124 -0
  36. package/src/consumers/getPipedProducersAlt.ts +96 -0
  37. package/src/consumers/getProducersPiped.ts +89 -0
  38. package/src/consumers/getVideos.ts +107 -0
  39. package/src/consumers/mixStreams.ts +97 -0
  40. package/src/consumers/onScreenChanges.ts +106 -0
  41. package/src/consumers/prepopulateUserMedia.ts +18 -0
  42. package/src/consumers/processConsumerTransports.ts +157 -0
  43. package/src/consumers/processConsumerTransportsAudio.ts +121 -0
  44. package/src/consumers/rePort.ts +123 -0
  45. package/src/consumers/reUpdateInter.ts +289 -0
  46. package/src/consumers/readjust.ts +170 -0
  47. package/src/consumers/receiveAllPipedTransports.ts +77 -0
  48. package/src/consumers/receiveRoomMessages.ts +55 -0
  49. package/src/consumers/reorderStreams.ts +246 -0
  50. package/src/consumers/requestScreenShare.ts +103 -0
  51. package/src/consumers/resumePauseAudioStreams.ts +174 -0
  52. package/src/consumers/resumePauseStreams.ts +110 -0
  53. package/src/consumers/resumeSendTransportAudio.ts +143 -0
  54. package/src/consumers/signalNewConsumerTransport.ts +179 -0
  55. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +130 -0
  56. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +138 -0
  57. package/src/consumers/socketReceiveMethods/producerClosed.ts +102 -0
  58. package/src/consumers/startShareScreen.ts +124 -0
  59. package/src/consumers/stopShareScreen.ts +241 -0
  60. package/src/consumers/streamSuccessAudio.ts +297 -0
  61. package/src/consumers/streamSuccessAudioSwitch.ts +315 -0
  62. package/src/consumers/streamSuccessScreen.ts +255 -0
  63. package/src/consumers/streamSuccessVideo.ts +373 -0
  64. package/src/consumers/switchUserAudio.ts +140 -0
  65. package/src/consumers/switchUserVideo.ts +201 -0
  66. package/src/consumers/switchUserVideoAlt.ts +331 -0
  67. package/src/consumers/trigger.ts +250 -0
  68. package/src/consumers/updateMiniCardsGrid.ts +150 -0
  69. package/src/consumers/updateParticipantAudioDecibels.ts +56 -0
  70. package/src/index.ts +119 -0
  71. package/src/methods/background/launchBackground.ts +16 -0
  72. package/src/methods/breakoutRooms/breakoutRoomUpdated.ts +161 -0
  73. package/src/methods/breakoutRooms/handleStartBreakout.ts +96 -0
  74. package/src/methods/breakoutRooms/handleStopBreakout.ts +72 -0
  75. package/src/methods/breakoutRooms/index.ts +4 -0
  76. package/src/methods/breakoutRooms/launchBreakoutRooms.ts +31 -0
  77. package/src/methods/coHost/launchCoHost.ts +28 -0
  78. package/src/methods/coHostMethods/index.ts +2 -0
  79. package/src/methods/coHostMethods/modifyCoHostSettings.ts +94 -0
  80. package/src/methods/displaySettings/index.ts +1 -0
  81. package/src/methods/displaySettings/launchDisplaySettings.ts +31 -0
  82. package/src/methods/displaySettings/modifyDisplaySettings.ts +242 -0
  83. package/src/methods/exit/confirmExit.ts +60 -0
  84. package/src/methods/exit/index.ts +2 -0
  85. package/src/methods/exit/launchConfirmExit.ts +29 -0
  86. package/src/methods/index.ts +5 -0
  87. package/src/methods/mediaSettings/launchMediaSettings.ts +61 -0
  88. package/src/methods/menu/launchMenuModal.ts +28 -0
  89. package/src/methods/message/index.ts +1 -0
  90. package/src/methods/message/launchMessages.ts +27 -0
  91. package/src/methods/message/sendMessage.ts +175 -0
  92. package/src/methods/participants/index.ts +3 -0
  93. package/src/methods/participants/launchParticipants.ts +25 -0
  94. package/src/methods/participants/messageParticipants.ts +78 -0
  95. package/src/methods/participants/muteParticipants.ts +79 -0
  96. package/src/methods/participants/removeParticipants.ts +97 -0
  97. package/src/methods/polls/handleCreatePoll.ts +66 -0
  98. package/src/methods/polls/handleEndPoll.ts +64 -0
  99. package/src/methods/polls/handleVotePoll.ts +76 -0
  100. package/src/methods/polls/index.ts +3 -0
  101. package/src/methods/polls/launchPoll.ts +25 -0
  102. package/src/methods/prejoin/handleCreateRoom.ts +441 -0
  103. package/src/methods/prejoin/handleJoinRoom.ts +153 -0
  104. package/src/methods/prejoin/index.ts +14 -0
  105. package/src/methods/recording/checkPauseState.ts +57 -0
  106. package/src/methods/recording/checkResumeState.ts +42 -0
  107. package/src/methods/recording/confirmRecording.ts +241 -0
  108. package/src/methods/recording/launchRecording.ts +114 -0
  109. package/src/methods/recording/recordPauseTimer.ts +52 -0
  110. package/src/methods/recording/recordResumeTimer.ts +92 -0
  111. package/src/methods/recording/recordStartTimer.ts +106 -0
  112. package/src/methods/recording/recordUpdateTimer.ts +49 -0
  113. package/src/methods/recording/startRecording.ts +268 -0
  114. package/src/methods/recording/stopRecording.ts +124 -0
  115. package/src/methods/recording/updateRecording.ts +245 -0
  116. package/src/methods/requests/index.ts +1 -0
  117. package/src/methods/requests/launchRequests.ts +25 -0
  118. package/src/methods/requests/respondToRequests.ts +108 -0
  119. package/src/methods/settings/index.ts +2 -0
  120. package/src/methods/settings/launchSettings.ts +25 -0
  121. package/src/methods/settings/modifySettings.ts +99 -0
  122. package/src/methods/stream/clickVideo.ts +337 -0
  123. package/src/methods/stream/index.ts +3 -0
  124. package/src/methods/stream/switchAudio.ts +73 -0
  125. package/src/methods/stream/switchVideo.ts +148 -0
  126. package/src/methods/stream/switchVideoAlt.ts +152 -0
  127. package/src/methods/utils/checkLimitsAndMakeRequest.ts +103 -0
  128. package/src/methods/utils/validateAlphanumeric.ts +41 -0
  129. package/src/methods/waiting/index.ts +1 -0
  130. package/src/methods/waiting/launchWaiting.ts +26 -0
  131. package/src/methods/waiting/respondToWaiting.ts +82 -0
  132. package/src/methods/welcome/handleWelcomeRequest.ts +189 -0
  133. package/src/methods/welcome/index.ts +5 -0
  134. package/src/methods/whiteboard/handleStartWhiteboard.ts +65 -0
  135. package/src/methods/whiteboard/handleStopWhiteboard.ts +48 -0
  136. package/src/methods/whiteboard/index.ts +4 -0
  137. package/src/methods/whiteboard/launchConfigureWhiteboard.ts +29 -0
  138. package/src/producers/producerEmits/joinConRoom.ts +153 -0
  139. package/src/sockets/SocketManager.ts +232 -0
  140. package/src/types/shared-base-types.ts +752 -0
  141. package/src/types/types.ts +84 -0
@@ -0,0 +1,130 @@
1
+ import type { Producer } from 'mediasoup-client/lib/types';
2
+ import { Socket } from "socket.io-client";
3
+
4
+ export interface DisconnectSendTransportScreenParameters {
5
+ screenProducer: Producer | null;
6
+ socket: Socket;
7
+ localSocket?: Socket;
8
+ roomName: string;
9
+ updateScreenProducer: (screenProducer: Producer | null) => void;
10
+ updateLocalScreenProducer?: (localScreenProducer: Producer | null) => void;
11
+
12
+ getUpdatedAllParams: () => DisconnectSendTransportScreenParameters;
13
+ [key: string]: any;
14
+ }
15
+ export interface DisconnectSendTransportScreenOptions {
16
+ parameters: DisconnectSendTransportScreenParameters;
17
+ }
18
+
19
+ // Export the type definition for the function
20
+ export type DisconnectSendTransportScreenType = (options: DisconnectSendTransportScreenOptions) => Promise<void>;
21
+
22
+ const disconnectLocalSendTransportScreen = async ({ parameters }: DisconnectSendTransportScreenOptions) : Promise<void> => {
23
+
24
+ try {
25
+ // Destructure parameters
26
+ let {
27
+ localScreenProducer,
28
+ localSocket,
29
+ roomName,
30
+ updateLocalScreenProducer,
31
+ } = parameters;
32
+
33
+ if (localSocket && localSocket.id) {
34
+ localScreenProducer!.close();
35
+ updateLocalScreenProducer!(localScreenProducer);
36
+
37
+ // Notify the server about closing the screen producer and pausing screen sharing
38
+ localSocket.emit('closeScreenProducer');
39
+ localSocket.emit('pauseProducerMedia', { mediaTag: 'screen', roomName: roomName });
40
+ }
41
+ } catch {
42
+ console.log('Error disconnecting local send transport for screen');
43
+ }
44
+
45
+ }
46
+
47
+
48
+ /**
49
+ * Disconnects the send transport for screen sharing.
50
+ *
51
+ * This function closes the screen producer, updates the state, and notifies the server
52
+ * about the closure and pausing of screen sharing.
53
+ *
54
+ * @param {DisconnectSendTransportScreenOptions} options - The options for disconnecting the send transport.
55
+ * @param {Object} options.parameters - The parameters required for disconnection.
56
+ * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
57
+ * @param {Producer | null} options.parameters.screenProducer - The screen producer to be closed.
58
+ * @param {Socket} options.parameters.socket - The socket connection to notify the server.
59
+ * @param {Socket} [options.parameters.localSocket] - The local socket connection for communication.
60
+ * @param {string} options.parameters.roomName - The name of the room.
61
+ * @param {Function} options.parameters.updateScreenProducer - Function to update the screen producer state.
62
+ * @param {Function} [options.parameters.updateLocalScreenProducer] - Function to update the local screen producer state.
63
+ * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.
64
+ * @throws {Error} If an error occurs during the disconnection process.
65
+ *
66
+ * @example
67
+ * const options = {
68
+ * parameters: {
69
+ * screenProducer: screenProducerInstance,
70
+ * socket: socketInstance,
71
+ * localSocket: localSocketInstance,
72
+ * roomName: 'Room 1',
73
+ * updateScreenProducer: (producer) => console.log('Updated screen producer:', producer),
74
+ * updateLocalScreenProducer: (localProducer) => console.log('Updated local screen producer:', localProducer),
75
+ * getUpdatedAllParams: () => ({
76
+ * screenProducer: screenProducerInstance,
77
+ * socket: socketInstance,
78
+ * roomName: 'Room 1',
79
+ * }),
80
+ * },
81
+ * };
82
+ *
83
+ * disconnectSendTransportScreen(options)
84
+ * .then(() => {
85
+ * console.log('Screen send transport disconnected successfully');
86
+ * })
87
+ * .catch((error) => {
88
+ * console.error('Error disconnecting screen send transport:', error);
89
+ * });
90
+ */
91
+
92
+ export const disconnectSendTransportScreen = async ({ parameters }: DisconnectSendTransportScreenOptions) : Promise<void> => {
93
+
94
+ let { getUpdatedAllParams } = parameters;
95
+ parameters = getUpdatedAllParams()
96
+
97
+ try {
98
+ // Destructure parameters
99
+ let {
100
+ screenProducer,
101
+ socket,
102
+ roomName,
103
+ updateScreenProducer,
104
+ } = parameters;
105
+
106
+ // Close the screen producer and update the state
107
+ screenProducer!.close();
108
+ updateScreenProducer(screenProducer);
109
+
110
+ // Notify the server about closing the screen producer and pausing screen sharing
111
+ socket.emit('closeScreenProducer');
112
+ socket.emit('pauseProducerMedia', { mediaTag: 'screen', roomName: roomName });
113
+
114
+ } catch (error) {
115
+
116
+ // Handle errors during the disconnection process
117
+ if (error instanceof Error) {
118
+ console.log('Error disconnecting send transport for screen:', error.message);
119
+ } else {
120
+ console.log('Error disconnecting send transport for screen:', error);
121
+ }
122
+ }
123
+
124
+ try {
125
+ // Disconnect the local screen producer
126
+ await disconnectLocalSendTransportScreen({ parameters });
127
+ } catch {
128
+ // Handle errors during the disconnection process
129
+ }
130
+ };
@@ -0,0 +1,161 @@
1
+ import type { Producer } from 'mediasoup-client/lib/types';
2
+ import { Socket } from 'socket.io-client';
3
+ import { ReorderStreamsType, ReorderStreamsParameters } from '../types/types';
4
+
5
+ export interface DisconnectSendTransportVideoParameters extends ReorderStreamsParameters {
6
+ videoProducer: Producer | null;
7
+ localVideoProducer?: Producer | null;
8
+ socket: Socket;
9
+ localSocket?: Socket;
10
+ islevel: string;
11
+ roomName: string;
12
+ lock_screen: boolean;
13
+ updateMainWindow: boolean;
14
+ updateUpdateMainWindow: (state: boolean) => void;
15
+ updateVideoProducer: (producer: Producer | null) => void;
16
+ updateLocalVideoProducer?: (producer: Producer | null) => void;
17
+
18
+ // mediasfu functions
19
+ reorderStreams: ReorderStreamsType;
20
+ [key: string]: any;
21
+ }
22
+
23
+ export interface DisconnectSendTransportVideoOptions {
24
+ parameters: DisconnectSendTransportVideoParameters;
25
+ }
26
+
27
+ // Export the type definition for the function
28
+ export type DisconnectSendTransportVideoType = (options: DisconnectSendTransportVideoOptions) => Promise<void>;
29
+
30
+ const disconnectLocalSendTransportVideo = async ({
31
+ parameters,
32
+ }: DisconnectSendTransportVideoOptions): Promise<void> => {
33
+ try {
34
+ const {
35
+ localVideoProducer,
36
+ localSocket,
37
+ roomName,
38
+ updateLocalVideoProducer,
39
+ } = parameters;
40
+
41
+ if (localSocket && localSocket.id) {
42
+ // continue
43
+ }else {
44
+ return
45
+ }
46
+
47
+ // Close the local video producer and notify the server
48
+ if (localVideoProducer) {
49
+ localVideoProducer.close();
50
+ updateLocalVideoProducer?.(null);
51
+ }
52
+
53
+
54
+ localSocket.emit('pauseProducerMedia', { mediaTag: 'video', roomName: roomName });
55
+
56
+ } catch (error) {
57
+ console.error('Error disconnecting local video send transport:', error);
58
+ throw error; // Re-throw to propagate the error
59
+ }
60
+ };
61
+
62
+ /**
63
+ * Disconnects the send transport for video, closes the video producer, and updates the state.
64
+ *
65
+ * This function supports both a primary and a local video producer, delegating local handling to a separate function.
66
+ *
67
+ * @param {DisconnectSendTransportVideoOptions} options - The options for disconnecting the send transport.
68
+ * @param {DisconnectSendTransportVideoParameters} options.parameters - The parameters required for disconnecting the send transport.
69
+ * @param {Producer | null} options.parameters.videoProducer - The primary video producer object.
70
+ * @param {Producer | null} [options.parameters.localVideoProducer] - The local video producer object (optional).
71
+ * @param {Socket} options.parameters.socket - The primary socket object.
72
+ * @param {Socket} [options.parameters.localSocket] - The local socket object (optional).
73
+ * @param {string} options.parameters.islevel - The participant's level.
74
+ * @param {string} options.parameters.roomName - The name of the room.
75
+ * @param {boolean} options.parameters.updateMainWindow - The flag to update the main window.
76
+ * @param {boolean} options.parameters.lock_screen - The flag to lock the screen.
77
+ * @param {Function} options.parameters.updateUpdateMainWindow - The function to update the main window state.
78
+ * @param {Function} options.parameters.updateVideoProducer - The function to update the video producer state.
79
+ * @param {Function} [options.parameters.updateLocalVideoProducer] - The function to update the local video producer state (optional).
80
+ * @param {ReorderStreamsType} options.parameters.reorderStreams - The function to reorder streams.
81
+ * @param {Function} [options.parameters.updateLocalProducerTransport] - The function to update the local producer transport state (optional).
82
+ * @param {Function} [options.parameters.updateProducerTransport] - The function to update the producer transport state (optional).
83
+ *
84
+ * @returns {Promise<void>} A promise that resolves when the disconnection process is complete.
85
+ *
86
+ * @throws {Error} Throws an error if the disconnection process fails.
87
+ *
88
+ * @example
89
+ * const options = {
90
+ * parameters: {
91
+ * videoProducer: videoProducerInstance,
92
+ * localVideoProducer: localVideoProducerInstance,
93
+ * socket: socketInstance,
94
+ * localSocket: localSocketInstance,
95
+ * islevel: '2',
96
+ * roomName: 'Room A',
97
+ * updateMainWindow: false,
98
+ * lock_screen: false,
99
+ * updateUpdateMainWindow: (state) => console.log('Main window updated:', state),
100
+ * updateVideoProducer: (producer) => console.log('Video producer updated:', producer),
101
+ * updateLocalVideoProducer: (producer) => console.log('Local video producer updated:', producer),
102
+ * reorderStreams: reorderStreamsFunction,
103
+ * },
104
+ * };
105
+ *
106
+ * disconnectSendTransportVideo(options)
107
+ * .then(() => console.log('Video send transport disconnected successfully'))
108
+ * .catch((error) => console.error('Error disconnecting video send transport:', error));
109
+ */
110
+
111
+ export const disconnectSendTransportVideo: DisconnectSendTransportVideoType = async ({
112
+ parameters,
113
+ }: DisconnectSendTransportVideoOptions): Promise<void> => {
114
+ try {
115
+ let {
116
+ videoProducer,
117
+ socket,
118
+ islevel,
119
+ roomName,
120
+ updateMainWindow,
121
+ lock_screen,
122
+ updateUpdateMainWindow,
123
+ updateVideoProducer,
124
+ reorderStreams,
125
+ } = parameters;
126
+
127
+ // Close the primary video producer and notify the server
128
+ if (videoProducer) {
129
+ videoProducer.close();
130
+ updateVideoProducer(null);
131
+ }
132
+
133
+ socket.emit('pauseProducerMedia', { mediaTag: 'video', roomName: roomName });
134
+
135
+ // Update the UI based on the participant's level and screen lock status
136
+ if (islevel === '2') {
137
+ updateMainWindow = true;
138
+ updateUpdateMainWindow(updateMainWindow);
139
+ }
140
+
141
+ if (lock_screen) {
142
+ await reorderStreams({ add: true, screenChanged: true, parameters });
143
+ } else {
144
+ await reorderStreams({ add: false, screenChanged: true, parameters });
145
+ }
146
+
147
+ // Handle local video transport regardless of primary success or failure
148
+ try {
149
+ await disconnectLocalSendTransportVideo({ parameters });
150
+ } catch (localError) {
151
+ console.error('Error disconnecting local video send transport:', localError);
152
+ }
153
+ } catch (error) {
154
+ // Handle errors during the disconnection process
155
+ if (error instanceof Error) {
156
+ console.log('Error disconnecting send transport for video:', error.message);
157
+ } else {
158
+ console.log('Error disconnecting send transport for video:', error);
159
+ }
160
+ }
161
+ };