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,106 @@
1
+ import { ReorderStreamsType, ReorderStreamsParameters, EventType } from "../types/types";
2
+
3
+ export interface OnScreenChangesParameters extends ReorderStreamsParameters {
4
+ eventType: EventType;
5
+ shareScreenStarted: boolean;
6
+ shared: boolean;
7
+ addForBasic: boolean;
8
+ updateAddForBasic: (value: boolean) => void;
9
+ itemPageLimit: number;
10
+ updateItemPageLimit: (value: number) => void;
11
+ updateMainHeightWidth: (value: number) => void;
12
+
13
+ //mediasfu functions
14
+ reorderStreams: ReorderStreamsType;
15
+ [key: string]: any;
16
+ }
17
+
18
+ export interface OnScreenChangesOptions {
19
+ changed?: boolean;
20
+ parameters: OnScreenChangesParameters;
21
+ }
22
+
23
+ // Export the type definition for the function
24
+ export type OnScreenChangesType = (options: OnScreenChangesOptions) => Promise<void>;
25
+
26
+ /**
27
+ * Handles changes in screen events such as broadcast, chat, and conference.
28
+ *
29
+ * @param {OnScreenChangesOptions} options - The options for handling screen changes.
30
+ * @param {boolean} options.changed - Indicates if the screen has changed.
31
+ * @param {object} options.parameters - The parameters for handling screen changes.
32
+ * @param {string} options.parameters.eventType - The type of event (e.g., "broadcast", "chat", "conference").
33
+ * @param {boolean} options.parameters.shareScreenStarted - Indicates if screen sharing has started.
34
+ * @param {boolean} options.parameters.shared - Indicates if the screen is shared.
35
+ * @param {boolean} options.parameters.addForBasic - Flag to add basic controls.
36
+ * @param {function} options.parameters.updateMainHeightWidth - Function to update the main height and width.
37
+ * @param {function} options.parameters.updateAddForBasic - Function to update the addForBasic flag.
38
+ * @param {number} options.parameters.itemPageLimit - The limit for item pages.
39
+ * @param {function} options.parameters.updateItemPageLimit - Function to update the item page limit.
40
+ * @param {function} options.parameters.reorderStreams - Function to reorder streams.
41
+ *
42
+ * @returns {Promise<void>} A promise that resolves when the screen changes have been handled.
43
+ *
44
+ * @throws {Error} Throws an error if there is an issue handling screen changes.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * await onScreenChanges({
49
+ * changed: true,
50
+ * parameters: {
51
+ * eventType: 'conference',
52
+ * shareScreenStarted: false,
53
+ * shared: false,
54
+ * addForBasic: false,
55
+ * updateMainHeightWidth: (height) => console.log('Updated height:', height),
56
+ * updateAddForBasic: (value) => console.log('Updated addForBasic:', value),
57
+ * itemPageLimit: 2,
58
+ * updateItemPageLimit: (limit) => console.log('Updated item page limit:', limit),
59
+ * reorderStreams: async (options) => console.log('Reordered streams with options:', options),
60
+ * },
61
+ * });
62
+ * ```
63
+ */
64
+
65
+ export async function onScreenChanges({ changed, parameters }: OnScreenChangesOptions): Promise<void> {
66
+ try {
67
+ // Destructure parameters
68
+ let {
69
+ eventType,
70
+ shareScreenStarted,
71
+ shared,
72
+ addForBasic,
73
+ updateMainHeightWidth,
74
+ updateAddForBasic,
75
+ itemPageLimit,
76
+ updateItemPageLimit,
77
+
78
+ //mediasfu functions
79
+ reorderStreams,
80
+ } = parameters;
81
+
82
+ // Remove element with id 'controlButtons'
83
+ addForBasic = false;
84
+ updateAddForBasic(addForBasic);
85
+
86
+ if (eventType === "broadcast" || eventType === "chat") {
87
+ addForBasic = true;
88
+ updateAddForBasic(addForBasic);
89
+
90
+ itemPageLimit = eventType === "broadcast" ? 1 : 2;
91
+ updateItemPageLimit(itemPageLimit);
92
+ updateMainHeightWidth(eventType === "broadcast" ? 100 : 0);
93
+ } else {
94
+ if (eventType === "conference" && !(shareScreenStarted || shared)) {
95
+ updateMainHeightWidth(0);
96
+ }
97
+ }
98
+
99
+ // Update the mini cards grid
100
+ await reorderStreams({ add: false, screenChanged: changed, parameters });
101
+ } catch (error) {
102
+ // Handle errors during the process of handling screen changes
103
+ console.log("Error handling screen changes:", (error as Error).message);
104
+ // throw error;
105
+ }
106
+ }
@@ -0,0 +1,18 @@
1
+ // Stub export for prepopulateUserMedia
2
+ // This is a React component in the original and not needed for the shared package
3
+
4
+ export interface PrepopulateUserMediaParameters {
5
+ [key: string]: any;
6
+ }
7
+
8
+ export interface PrepopulateUserMediaOptions {
9
+ name: string;
10
+ parameters: PrepopulateUserMediaParameters;
11
+ }
12
+
13
+ export type PrepopulateUserMediaType = (options: PrepopulateUserMediaOptions) => Promise<void>;
14
+
15
+ export const prepopulateUserMedia: PrepopulateUserMediaType = async () => {
16
+ // Stub implementation - actual logic handled in framework-specific packages
17
+ console.warn('prepopulateUserMedia called on shared package - should be implemented in framework package');
18
+ };
@@ -0,0 +1,157 @@
1
+ import { Stream, Participant, Transport, SleepType } from "../types/types";
2
+
3
+ export interface ProcessConsumerTransportsParameters {
4
+ remoteScreenStream: Stream[];
5
+ oldAllStreams: (Stream | Participant)[];
6
+ newLimitedStreams: (Stream | Participant)[];
7
+
8
+ // mediasfu functions
9
+ sleep: SleepType;
10
+ getUpdatedAllParams: () => ProcessConsumerTransportsParameters;
11
+ [key: string]: any;
12
+ }
13
+
14
+ export interface ProcessConsumerTransportsOptions {
15
+ consumerTransports: Transport[];
16
+ lStreams_: (Stream | Participant)[];
17
+ parameters: ProcessConsumerTransportsParameters;
18
+ }
19
+
20
+ // Export the type definition for the function
21
+ export type ProcessConsumerTransportsType = (options: ProcessConsumerTransportsOptions) => Promise<void>;
22
+
23
+ /**
24
+ * Processes consumer transports by pausing and resuming them based on certain conditions.
25
+ *
26
+ * @param {Object} options - The options for processing consumer transports.
27
+ * @param {Array} options.consumerTransports - The list of consumer transports to process.
28
+ * @param {Array} options.lStreams_ - The list of local streams.
29
+ * @param {Object} options.parameters - The parameters object containing various stream arrays and utility functions.
30
+ *
31
+ * @returns {Promise<void>} - A promise that resolves when the processing is complete.
32
+ *
33
+ * @throws {Error} - Throws an error if there is an issue processing consumer transports.
34
+ *
35
+ * The function performs the following steps:
36
+ * 1. Destructures and updates the parameters.
37
+ * 2. Defines a helper function to check if a producerId is valid in given stream arrays.
38
+ * 3. Filters consumer transports to resume based on certain conditions.
39
+ * 4. Filters consumer transports to pause based on certain conditions.
40
+ * 5. Pauses consumer transports after a short delay.
41
+ * 6. Emits `consumer-pause` event for each filtered transport (not audio).
42
+ * 7. Emits `consumer-resume` event for each filtered transport (not audio).
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * await processConsumerTransports({
47
+ * consumerTransports: [transport1, transport2],
48
+ * lStreams_: [stream1, stream2],
49
+ * parameters: {
50
+ * remoteScreenStream: [],
51
+ * oldAllStreams: [],
52
+ * newLimitedStreams: [],
53
+ * sleep: sleepFunction,
54
+ * getUpdatedAllParams: () => parameters,
55
+ * },
56
+ * });
57
+ * ```
58
+ */
59
+
60
+ export async function processConsumerTransports({
61
+ consumerTransports,
62
+ lStreams_,
63
+ parameters,
64
+ }: ProcessConsumerTransportsOptions): Promise<void> {
65
+ try {
66
+ // Destructure parameters and get updated values
67
+ parameters = parameters.getUpdatedAllParams();
68
+
69
+ const {
70
+ remoteScreenStream,
71
+ oldAllStreams,
72
+ newLimitedStreams,
73
+ sleep,
74
+ } = parameters;
75
+
76
+ // Function to check if the producerId is valid in the given stream arrays
77
+ function isValidProducerId(producerId: string, ...streamArrays: (Stream | Participant)[][]): boolean {
78
+ return (
79
+ producerId !== null &&
80
+ producerId !== "" &&
81
+ streamArrays.some((streamArray) => {
82
+ return (
83
+ streamArray.length > 0 &&
84
+ streamArray.some((stream) => stream?.producerId === producerId)
85
+ );
86
+ })
87
+ );
88
+ }
89
+
90
+ // Get paused consumer transports that are not audio
91
+ const consumerTransportsToResume = consumerTransports.filter(
92
+ (transport) =>
93
+ isValidProducerId(
94
+ transport.producerId,
95
+ lStreams_,
96
+ remoteScreenStream,
97
+ oldAllStreams,
98
+ newLimitedStreams
99
+ ) &&
100
+ transport.consumer?.paused === true &&
101
+ transport.consumer.kind !== "audio"
102
+ );
103
+
104
+ // Get unpaused consumer transports that are not audio
105
+ const consumerTransportsToPause = consumerTransports.filter(
106
+ (transport) =>
107
+ transport.producerId &&
108
+ transport.producerId !== null &&
109
+ transport.producerId !== "" &&
110
+ !lStreams_.some(
111
+ (stream) => stream.producerId === transport.producerId
112
+ ) &&
113
+ transport.consumer &&
114
+ transport.consumer.kind &&
115
+ transport.consumer.paused !== true &&
116
+ transport.consumer.kind !== "audio" &&
117
+ !remoteScreenStream.some((stream) => stream.producerId === transport.producerId) &&
118
+ !oldAllStreams.some((stream) => stream.producerId === transport.producerId) &&
119
+ !newLimitedStreams.some((stream) => stream.producerId === transport.producerId)
120
+ );
121
+
122
+ // Pause consumer transports after a short delay
123
+ await sleep({ ms: 100 });
124
+
125
+ // Emit consumer.pause() for each filtered transport (not audio)
126
+ for (const transport of consumerTransportsToPause) {
127
+ transport.consumer.pause();
128
+ transport.socket_.emit(
129
+ "consumer-pause",
130
+ { serverConsumerId: transport.serverConsumerTransportId },
131
+ async () => {
132
+ // Handle the response if needed
133
+ }
134
+ );
135
+ }
136
+
137
+ // Emit consumer.resume() for each filtered transport (not audio)
138
+ for (const transport of consumerTransportsToResume) {
139
+ transport.socket_.emit(
140
+ "consumer-resume",
141
+ { serverConsumerId: transport.serverConsumerTransportId },
142
+ async ({ resumed }: { resumed: boolean }) => {
143
+ if (resumed) {
144
+ transport.consumer.resume();
145
+ }
146
+ }
147
+ );
148
+ }
149
+ } catch (error) {
150
+ if (error instanceof Error) {
151
+ console.error(`Error processing consumer transports: ${error.message}`);
152
+ } else {
153
+ console.error('Error processing consumer transports:', error);
154
+ }
155
+ // throw new Error(`Error processing consumer transports: ${error.message}`);
156
+ }
157
+ }
@@ -0,0 +1,121 @@
1
+ import { Stream, Transport, Participant, SleepType } from "../types/types";
2
+
3
+ export interface ProcessConsumerTransportsAudioParameters {
4
+
5
+ // mediasfu functions
6
+ sleep: SleepType;
7
+ [key: string]: any;
8
+ }
9
+
10
+ export interface ProcessConsumerTransportsAudioOptions {
11
+ consumerTransports: Transport[];
12
+ lStreams: (Stream | Participant)[];
13
+ parameters: ProcessConsumerTransportsAudioParameters;
14
+ }
15
+
16
+ // Export the type definition for the function
17
+ export type ProcessConsumerTransportsAudioType = (
18
+ options: ProcessConsumerTransportsAudioOptions
19
+ ) => Promise<void>;
20
+
21
+ /**
22
+ * Processes consumer transports for audio streams by pausing and resuming them based on their current state and the provided streams.
23
+ *
24
+ * @param {Object} options - The options for processing consumer transports.
25
+ * @param {Array} options.consumerTransports - The list of consumer transports to process.
26
+ * @param {Array} options.lStreams - The list of local streams to check against.
27
+ * @param {Object} options.parameters - Additional parameters for processing.
28
+ * @param {Function} options.parameters.sleep - A function to pause execution for a specified duration.
29
+ *
30
+ * @returns {Promise<void>} A promise that resolves when the processing is complete.
31
+ *
32
+ * @throws Will throw an error if there is an issue processing the consumer transports.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * await processConsumerTransportsAudio({
37
+ * consumerTransports: [transport1, transport2],
38
+ * lStreams: [stream1, stream2],
39
+ * parameters: {
40
+ * sleep: sleepFunction,
41
+ * },
42
+ * });
43
+ * ```
44
+ */
45
+
46
+ export const processConsumerTransportsAudio = async ({
47
+ consumerTransports,
48
+ lStreams,
49
+ parameters,
50
+ }: ProcessConsumerTransportsAudioOptions): Promise<void> => {
51
+ try {
52
+ const { sleep } = parameters;
53
+
54
+ // Function to check if the producerId is valid in the given stream arrays
55
+ const isValidProducerId = (producerId: string, ...streamArrays: (Stream | Participant)[][]): boolean => {
56
+ return (
57
+ producerId !== null &&
58
+ producerId !== "" &&
59
+ streamArrays.some((streamArray) => {
60
+ return (
61
+ streamArray.length > 0 &&
62
+ streamArray.some((stream) => stream?.producerId === producerId)
63
+ );
64
+ })
65
+ );
66
+ };
67
+
68
+ // Get paused consumer transports that are audio
69
+ const consumerTransportsToResume = consumerTransports.filter(
70
+ (transport) =>
71
+ isValidProducerId(transport.producerId, lStreams) &&
72
+ transport.consumer?.paused === true &&
73
+ transport.consumer.kind === "audio"
74
+ );
75
+
76
+ // Get unpaused consumer transports that are audio
77
+ const consumerTransportsToPause = consumerTransports.filter(
78
+ (transport) =>
79
+ transport.producerId &&
80
+ transport.producerId !== null &&
81
+ transport.producerId !== "" &&
82
+ !lStreams.some(
83
+ (stream) => stream.producerId === transport.producerId
84
+ ) &&
85
+ transport.consumer &&
86
+ transport.consumer.kind &&
87
+ transport.consumer.paused !== true &&
88
+ transport.consumer.kind === "audio"
89
+ );
90
+
91
+ await sleep({ms:100});
92
+
93
+ // Emit consumer.pause() for each transport to pause
94
+ for (const transport of consumerTransportsToPause) {
95
+ transport.consumer.pause();
96
+ transport.socket_.emit(
97
+ "consumer-pause",
98
+ { serverConsumerId: transport.serverConsumerTransportId },
99
+ async () => {
100
+ // Handle the response if needed
101
+ }
102
+ );
103
+ }
104
+
105
+ // Emit consumer.resume() for each transport to resume
106
+ for (const transport of consumerTransportsToResume) {
107
+ transport.socket_.emit(
108
+ "consumer-resume",
109
+ { serverConsumerId: transport.serverConsumerTransportId },
110
+ async ({ resumed }: { resumed: boolean }) => {
111
+ if (resumed) {
112
+ transport.consumer.resume();
113
+ }
114
+ }
115
+ );
116
+ }
117
+ } catch (error) {
118
+ console.error("Error in processConsumerTransportsAudio:", error);
119
+ }
120
+ };
121
+
@@ -0,0 +1,123 @@
1
+ import { ScreenState, CompareScreenStatesParameters, CompareScreenStatesType, CompareActiveNamesParameters, CompareActiveNamesType } from '../types/types';
2
+
3
+
4
+ export interface RePortParameters extends CompareScreenStatesParameters, CompareActiveNamesParameters {
5
+ islevel: string;
6
+ mainScreenPerson: string;
7
+ adminOnMainScreen: boolean;
8
+ mainScreenFilled: boolean;
9
+ recordStarted: boolean;
10
+ recordStopped: boolean;
11
+ recordPaused: boolean;
12
+ recordResumed: boolean;
13
+ screenStates: ScreenState[];
14
+ prevScreenStates: ScreenState[];
15
+ updateScreenStates: (states: ScreenState[]) => void;
16
+ updatePrevScreenStates: (states: ScreenState[]) => void;
17
+
18
+ // mediasfu functions
19
+ compareActiveNames: CompareActiveNamesType;
20
+ compareScreenStates: CompareScreenStatesType;
21
+
22
+ getUpdatedAllParams: () => RePortParameters;
23
+ [key: string]: any;
24
+ }
25
+
26
+ export interface RePortOptions {
27
+ restart?: boolean;
28
+ parameters: RePortParameters;
29
+ }
30
+
31
+
32
+ // Export the type definition for the function
33
+ export type RePortType = (options: RePortOptions) => Promise<void>;
34
+
35
+ /**
36
+ * RePort function that handles the reporting logic based on the provided parameters.
37
+ *
38
+ * @param {RePortOptions} options - The options for the rePort function.
39
+ * @param {boolean} [options.restart=false] - Flag indicating whether to restart the process.
40
+ * @param {Object} options.parameters - The parameters object containing various states and functions.
41
+ * @param {Function} options.parameters.getUpdatedAllParams - Function to get updated parameters.
42
+ * @param {string} options.parameters.islevel - The current level of the process.
43
+ * @param {string} options.parameters.mainScreenPerson - The person on the main screen.
44
+ * @param {boolean} options.parameters.adminOnMainScreen - Flag indicating if admin is on the main screen.
45
+ * @param {boolean} options.parameters.mainScreenFilled - Flag indicating if the main screen is filled.
46
+ * @param {boolean} options.parameters.recordStarted - Flag indicating if recording has started.
47
+ * @param {boolean} options.parameters.recordStopped - Flag indicating if recording has stopped.
48
+ * @param {boolean} options.parameters.recordPaused - Flag indicating if recording is paused.
49
+ * @param {boolean} options.parameters.recordResumed - Flag indicating if recording has resumed.
50
+ * @param {Array} options.parameters.screenStates - Array of current screen states.
51
+ * @param {Function} options.parameters.updateScreenStates - Function to update the current screen states.
52
+ * @param {Function} options.parameters.updatePrevScreenStates - Function to update the previous screen states.
53
+ * @param {Function} options.parameters.compareActiveNames - Function to compare active names.
54
+ * @param {Function} options.parameters.compareScreenStates - Function to compare screen states.
55
+ *
56
+ * @returns {Promise<void>} A promise that resolves when the reporting process is complete.
57
+ *
58
+ * @throws {Error} Throws an error if there is an issue during the reporting process.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * await rePort({
63
+ * restart: false,
64
+ * parameters: {
65
+ * islevel: "2",
66
+ * mainScreenPerson: "John Doe",
67
+ * // other parameters...
68
+ * },
69
+ * });
70
+ * ```
71
+ */
72
+
73
+ export async function rePort({ restart = false, parameters }: RePortOptions): Promise<void> {
74
+ const { getUpdatedAllParams } = parameters;
75
+ parameters = getUpdatedAllParams();
76
+
77
+ try {
78
+ // Destructure parameters
79
+ const {
80
+ islevel,
81
+ mainScreenPerson,
82
+ adminOnMainScreen,
83
+ mainScreenFilled,
84
+ recordStarted,
85
+ recordStopped,
86
+ recordPaused,
87
+ recordResumed,
88
+ screenStates,
89
+ updateScreenStates,
90
+ updatePrevScreenStates,
91
+ compareActiveNames,
92
+ compareScreenStates,
93
+ } = parameters;
94
+
95
+ if (recordStarted || recordResumed) {
96
+ if (recordStopped || recordPaused) {
97
+ // Recording stopped or paused, do nothing
98
+ } else {
99
+ if (islevel === "2") {
100
+ const previousScreenStates = [...screenStates];
101
+ updatePrevScreenStates(previousScreenStates);
102
+
103
+ const currentScreenStates = [
104
+ { mainScreenPerson, adminOnMainScreen, mainScreenFilled },
105
+ ];
106
+ updateScreenStates(currentScreenStates);
107
+
108
+
109
+ if (restart) {
110
+ await compareActiveNames({ restart, parameters });
111
+ return;
112
+ }
113
+ await compareActiveNames({ restart, parameters });
114
+ await compareScreenStates({ restart, parameters });
115
+ }
116
+ }
117
+ }
118
+ } catch (error) {
119
+ console.log("Error during rePorting: ", error);
120
+ // throw new Error(`Error during rePorting: ${error.message}`);
121
+ }
122
+ }
123
+