mediasfu-shared 1.0.5 → 1.1.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 (496) hide show
  1. package/HEADLESS_GUIDE.md +156 -0
  2. package/README.md +113 -62
  3. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts +23 -0
  4. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts.map +1 -0
  5. package/dist/ProducerClient/producerClientEmits/joinRoomClient.d.ts +22 -0
  6. package/dist/ProducerClient/producerClientEmits/joinRoomClient.d.ts.map +1 -0
  7. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts +85 -0
  8. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts.map +1 -0
  9. package/dist/consumers/addVideosGrid.d.ts +10 -0
  10. package/dist/consumers/addVideosGrid.d.ts.map +1 -0
  11. package/dist/consumers/autoAdjust.d.ts +41 -0
  12. package/dist/consumers/autoAdjust.d.ts.map +1 -0
  13. package/dist/consumers/calculateRowsAndColumns.d.ts +24 -0
  14. package/dist/consumers/calculateRowsAndColumns.d.ts.map +1 -0
  15. package/dist/consumers/changeVids.d.ts +252 -0
  16. package/dist/consumers/changeVids.d.ts.map +1 -0
  17. package/dist/consumers/checkGrid.d.ts +42 -0
  18. package/dist/consumers/checkGrid.d.ts.map +1 -0
  19. package/dist/consumers/checkPermission.d.ts +42 -0
  20. package/dist/consumers/checkPermission.d.ts.map +1 -0
  21. package/dist/consumers/checkScreenShare.d.ts +59 -0
  22. package/dist/consumers/checkScreenShare.d.ts.map +1 -0
  23. package/dist/consumers/closeAndResize.d.ts +157 -0
  24. package/dist/consumers/closeAndResize.d.ts.map +1 -0
  25. package/dist/consumers/compareActiveNames.d.ts +50 -0
  26. package/dist/consumers/compareActiveNames.d.ts.map +1 -0
  27. package/dist/consumers/compareScreenStates.d.ts +55 -0
  28. package/dist/consumers/compareScreenStates.d.ts.map +1 -0
  29. package/dist/consumers/connectIps.d.ts +66 -0
  30. package/dist/consumers/connectIps.d.ts.map +1 -0
  31. package/dist/consumers/connectLocalIps.d.ts +52 -0
  32. package/dist/consumers/connectLocalIps.d.ts.map +1 -0
  33. package/dist/consumers/connectRecvTransport.d.ts +64 -0
  34. package/dist/consumers/connectRecvTransport.d.ts.map +1 -0
  35. package/dist/consumers/connectSendTransport.d.ts +75 -0
  36. package/dist/consumers/connectSendTransport.d.ts.map +1 -0
  37. package/dist/consumers/connectSendTransportAudio.d.ts +62 -0
  38. package/dist/consumers/connectSendTransportAudio.d.ts.map +1 -0
  39. package/dist/consumers/connectSendTransportScreen.d.ts +72 -0
  40. package/dist/consumers/connectSendTransportScreen.d.ts.map +1 -0
  41. package/dist/consumers/connectSendTransportVideo.d.ts +75 -0
  42. package/dist/consumers/connectSendTransportVideo.d.ts.map +1 -0
  43. package/dist/consumers/consumerResume.d.ts +16 -0
  44. package/dist/consumers/consumerResume.d.ts.map +1 -0
  45. package/dist/consumers/controlMedia.d.ts +61 -0
  46. package/dist/consumers/controlMedia.d.ts.map +1 -0
  47. package/dist/consumers/createSendTransport.d.ts +80 -0
  48. package/dist/consumers/createSendTransport.d.ts.map +1 -0
  49. package/dist/consumers/disconnectSendTransportAudio.d.ts +79 -0
  50. package/dist/consumers/disconnectSendTransportAudio.d.ts.map +1 -0
  51. package/dist/consumers/disconnectSendTransportScreen.d.ts +61 -0
  52. package/dist/consumers/disconnectSendTransportScreen.d.ts.map +1 -0
  53. package/dist/consumers/disconnectSendTransportVideo.d.ts +72 -0
  54. package/dist/consumers/disconnectSendTransportVideo.d.ts.map +1 -0
  55. package/dist/consumers/dispStreams.d.ts +189 -0
  56. package/dist/consumers/dispStreams.d.ts.map +1 -0
  57. package/dist/consumers/frameworkConsumerContract.d.ts +2 -0
  58. package/dist/consumers/frameworkConsumerContract.d.ts.map +1 -0
  59. package/dist/consumers/generatePageContent.d.ts +68 -0
  60. package/dist/consumers/generatePageContent.d.ts.map +1 -0
  61. package/dist/consumers/getEstimate.d.ts +62 -0
  62. package/dist/consumers/getEstimate.d.ts.map +1 -0
  63. package/dist/consumers/getPipedProducersAlt.d.ts +62 -0
  64. package/dist/consumers/getPipedProducersAlt.d.ts.map +1 -0
  65. package/dist/consumers/getProducersPiped.d.ts +49 -0
  66. package/dist/consumers/getProducersPiped.d.ts.map +1 -0
  67. package/dist/consumers/getVideos.d.ts +49 -0
  68. package/dist/consumers/getVideos.d.ts.map +1 -0
  69. package/dist/consumers/gridLayout/addVideosGrid.engine.d.ts +19 -0
  70. package/dist/consumers/gridLayout/addVideosGrid.engine.d.ts.map +1 -0
  71. package/dist/consumers/gridLayout/prepopulateUserMedia.engine.d.ts +138 -0
  72. package/dist/consumers/gridLayout/prepopulateUserMedia.engine.d.ts.map +1 -0
  73. package/dist/consumers/mixStreams.d.ts +37 -0
  74. package/dist/consumers/mixStreams.d.ts.map +1 -0
  75. package/dist/consumers/onScreenChanges.d.ts +62 -0
  76. package/dist/consumers/onScreenChanges.d.ts.map +1 -0
  77. package/dist/consumers/prepopulateUserMedia.d.ts +10 -0
  78. package/dist/consumers/prepopulateUserMedia.d.ts.map +1 -0
  79. package/dist/consumers/processConsumerTransports.d.ts +73 -0
  80. package/dist/consumers/processConsumerTransports.d.ts.map +1 -0
  81. package/dist/consumers/processConsumerTransportsAudio.d.ts +57 -0
  82. package/dist/consumers/processConsumerTransportsAudio.d.ts.map +1 -0
  83. package/dist/consumers/rePort.d.ts +63 -0
  84. package/dist/consumers/rePort.d.ts.map +1 -0
  85. package/dist/consumers/reUpdateInter.d.ts +142 -0
  86. package/dist/consumers/reUpdateInter.d.ts.map +1 -0
  87. package/dist/consumers/readjust.d.ts +68 -0
  88. package/dist/consumers/readjust.d.ts.map +1 -0
  89. package/dist/consumers/receiveAllPipedTransports.d.ts +44 -0
  90. package/dist/consumers/receiveAllPipedTransports.d.ts.map +1 -0
  91. package/dist/consumers/receiveRoomMessages.d.ts +31 -0
  92. package/dist/consumers/receiveRoomMessages.d.ts.map +1 -0
  93. package/dist/consumers/reorderStreams.d.ts +98 -0
  94. package/dist/consumers/reorderStreams.d.ts.map +1 -0
  95. package/dist/consumers/requestScreenShare.d.ts +47 -0
  96. package/dist/consumers/requestScreenShare.d.ts.map +1 -0
  97. package/dist/consumers/resumePauseAudioStreams.d.ts +85 -0
  98. package/dist/consumers/resumePauseAudioStreams.d.ts.map +1 -0
  99. package/dist/consumers/resumePauseStreams.d.ts +68 -0
  100. package/dist/consumers/resumePauseStreams.d.ts.map +1 -0
  101. package/dist/consumers/resumeSendTransportAudio.d.ts +65 -0
  102. package/dist/consumers/resumeSendTransportAudio.d.ts.map +1 -0
  103. package/dist/consumers/signalNewConsumerTransport.d.ts +59 -0
  104. package/dist/consumers/signalNewConsumerTransport.d.ts.map +1 -0
  105. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts +76 -0
  106. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts.map +1 -0
  107. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts +119 -0
  108. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts.map +1 -0
  109. package/dist/consumers/socketReceiveMethods/producerClosed.d.ts +53 -0
  110. package/dist/consumers/socketReceiveMethods/producerClosed.d.ts.map +1 -0
  111. package/dist/consumers/startShareScreen.d.ts +58 -0
  112. package/dist/consumers/startShareScreen.d.ts.map +1 -0
  113. package/dist/consumers/stopShareScreen.d.ts +127 -0
  114. package/dist/consumers/stopShareScreen.d.ts.map +1 -0
  115. package/dist/consumers/streamSuccessAudio.d.ts +149 -0
  116. package/dist/consumers/streamSuccessAudio.d.ts.map +1 -0
  117. package/dist/consumers/streamSuccessAudioSwitch.d.ts +131 -0
  118. package/dist/consumers/streamSuccessAudioSwitch.d.ts.map +1 -0
  119. package/dist/consumers/streamSuccessScreen.d.ts +109 -0
  120. package/dist/consumers/streamSuccessScreen.d.ts.map +1 -0
  121. package/dist/consumers/streamSuccessVideo.d.ts +160 -0
  122. package/dist/consumers/streamSuccessVideo.d.ts.map +1 -0
  123. package/dist/consumers/switchUserAudio.d.ts +56 -0
  124. package/dist/consumers/switchUserAudio.d.ts.map +1 -0
  125. package/dist/consumers/switchUserVideo.d.ts +77 -0
  126. package/dist/consumers/switchUserVideo.d.ts.map +1 -0
  127. package/dist/consumers/switchUserVideoAlt.d.ts +69 -0
  128. package/dist/consumers/switchUserVideoAlt.d.ts.map +1 -0
  129. package/dist/consumers/translationConsumerSwitch.d.ts +67 -0
  130. package/dist/consumers/translationConsumerSwitch.d.ts.map +1 -0
  131. package/dist/consumers/trigger.d.ts +71 -0
  132. package/dist/consumers/trigger.d.ts.map +1 -0
  133. package/dist/consumers/updateMiniCardsGrid.d.ts +65 -0
  134. package/dist/consumers/updateMiniCardsGrid.d.ts.map +1 -0
  135. package/dist/consumers/updateParticipantAudioDecibels.d.ts +31 -0
  136. package/dist/consumers/updateParticipantAudioDecibels.d.ts.map +1 -0
  137. package/dist/getParticipantMedia-D9ChmEqq.js +15265 -0
  138. package/dist/getParticipantMedia-D9ChmEqq.js.map +1 -0
  139. package/dist/getParticipantMedia-DWvIhPPY.cjs +15281 -0
  140. package/dist/getParticipantMedia-DWvIhPPY.cjs.map +1 -0
  141. package/dist/index.cjs +2677 -13213
  142. package/dist/index.cjs.map +1 -1
  143. package/dist/index.d.ts +191 -11233
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +2668 -13186
  146. package/dist/index.js.map +1 -1
  147. package/dist/index.native.cjs +346 -0
  148. package/dist/index.native.cjs.map +1 -0
  149. package/dist/index.native.d.ts +204 -0
  150. package/dist/index.native.d.ts.map +1 -0
  151. package/dist/index.native.js +346 -0
  152. package/dist/index.native.js.map +1 -0
  153. package/dist/methods/background/launchBackground.d.ts +10 -0
  154. package/dist/methods/background/launchBackground.d.ts.map +1 -0
  155. package/dist/methods/breakoutRooms/breakoutRoomUpdated.d.ts +67 -0
  156. package/dist/methods/breakoutRooms/breakoutRoomUpdated.d.ts.map +1 -0
  157. package/dist/methods/breakoutRooms/handleStartBreakout.d.ts +42 -0
  158. package/dist/methods/breakoutRooms/handleStartBreakout.d.ts.map +1 -0
  159. package/dist/methods/breakoutRooms/handleStopBreakout.d.ts +33 -0
  160. package/dist/methods/breakoutRooms/handleStopBreakout.d.ts.map +1 -0
  161. package/dist/methods/breakoutRooms/index.d.ts +5 -0
  162. package/dist/methods/breakoutRooms/index.d.ts.map +1 -0
  163. package/dist/methods/breakoutRooms/launchBreakoutRooms.d.ts +25 -0
  164. package/dist/methods/breakoutRooms/launchBreakoutRooms.d.ts.map +1 -0
  165. package/dist/methods/coHost/launchCoHost.d.ts +25 -0
  166. package/dist/methods/coHost/launchCoHost.d.ts.map +1 -0
  167. package/dist/methods/coHostMethods/index.d.ts +3 -0
  168. package/dist/methods/coHostMethods/index.d.ts.map +1 -0
  169. package/dist/methods/coHostMethods/modifyCoHostSettings.d.ts +49 -0
  170. package/dist/methods/coHostMethods/modifyCoHostSettings.d.ts.map +1 -0
  171. package/dist/methods/displaySettings/index.d.ts +2 -0
  172. package/dist/methods/displaySettings/index.d.ts.map +1 -0
  173. package/dist/methods/displaySettings/launchDisplaySettings.d.ts +25 -0
  174. package/dist/methods/displaySettings/launchDisplaySettings.d.ts.map +1 -0
  175. package/dist/methods/displaySettings/modifyDisplaySettings.d.ts +106 -0
  176. package/dist/methods/displaySettings/modifyDisplaySettings.d.ts.map +1 -0
  177. package/dist/methods/exit/confirmExit.d.ts +38 -0
  178. package/dist/methods/exit/confirmExit.d.ts.map +1 -0
  179. package/dist/methods/exit/index.d.ts +3 -0
  180. package/dist/methods/exit/index.d.ts.map +1 -0
  181. package/dist/methods/exit/launchConfirmExit.d.ts +23 -0
  182. package/dist/methods/exit/launchConfirmExit.d.ts.map +1 -0
  183. package/dist/methods/index.d.ts +66 -0
  184. package/dist/methods/index.d.ts.map +1 -0
  185. package/dist/methods/mediaSettings/launchMediaSettings.d.ts +38 -0
  186. package/dist/methods/mediaSettings/launchMediaSettings.d.ts.map +1 -0
  187. package/dist/methods/menu/launchMenuModal.d.ts +22 -0
  188. package/dist/methods/menu/launchMenuModal.d.ts.map +1 -0
  189. package/dist/methods/message/index.d.ts +2 -0
  190. package/dist/methods/message/index.d.ts.map +1 -0
  191. package/dist/methods/message/launchMessages.d.ts +24 -0
  192. package/dist/methods/message/launchMessages.d.ts.map +1 -0
  193. package/dist/methods/message/sendMessage.d.ts +63 -0
  194. package/dist/methods/message/sendMessage.d.ts.map +1 -0
  195. package/dist/methods/panelists/focusPanelists.d.ts +24 -0
  196. package/dist/methods/panelists/focusPanelists.d.ts.map +1 -0
  197. package/dist/methods/panelists/index.d.ts +4 -0
  198. package/dist/methods/panelists/index.d.ts.map +1 -0
  199. package/dist/methods/panelists/launchPanelists.d.ts +7 -0
  200. package/dist/methods/panelists/launchPanelists.d.ts.map +1 -0
  201. package/dist/methods/panelists/updatePanelists.d.ts +35 -0
  202. package/dist/methods/panelists/updatePanelists.d.ts.map +1 -0
  203. package/dist/methods/participants/index.d.ts +4 -0
  204. package/dist/methods/participants/index.d.ts.map +1 -0
  205. package/dist/methods/participants/launchParticipants.d.ts +22 -0
  206. package/dist/methods/participants/launchParticipants.d.ts.map +1 -0
  207. package/dist/methods/participants/messageParticipants.d.ts +43 -0
  208. package/dist/methods/participants/messageParticipants.d.ts.map +1 -0
  209. package/dist/methods/participants/muteParticipants.d.ts +41 -0
  210. package/dist/methods/participants/muteParticipants.d.ts.map +1 -0
  211. package/dist/methods/participants/removeParticipants.d.ts +47 -0
  212. package/dist/methods/participants/removeParticipants.d.ts.map +1 -0
  213. package/dist/methods/permissions/index.d.ts +4 -0
  214. package/dist/methods/permissions/index.d.ts.map +1 -0
  215. package/dist/methods/permissions/launchPermissions.d.ts +7 -0
  216. package/dist/methods/permissions/launchPermissions.d.ts.map +1 -0
  217. package/dist/methods/permissions/updateParticipantPermission.d.ts +25 -0
  218. package/dist/methods/permissions/updateParticipantPermission.d.ts.map +1 -0
  219. package/dist/methods/permissions/updatePermissionConfig.d.ts +22 -0
  220. package/dist/methods/permissions/updatePermissionConfig.d.ts.map +1 -0
  221. package/dist/methods/polls/handleCreatePoll.d.ts +39 -0
  222. package/dist/methods/polls/handleCreatePoll.d.ts.map +1 -0
  223. package/dist/methods/polls/handleEndPoll.d.ts +34 -0
  224. package/dist/methods/polls/handleEndPoll.d.ts.map +1 -0
  225. package/dist/methods/polls/handleVotePoll.d.ts +39 -0
  226. package/dist/methods/polls/handleVotePoll.d.ts.map +1 -0
  227. package/dist/methods/polls/index.d.ts +4 -0
  228. package/dist/methods/polls/index.d.ts.map +1 -0
  229. package/dist/methods/polls/launchPoll.d.ts +22 -0
  230. package/dist/methods/polls/launchPoll.d.ts.map +1 -0
  231. package/dist/methods/polls/pollUpdated.d.ts +38 -0
  232. package/dist/methods/polls/pollUpdated.d.ts.map +1 -0
  233. package/dist/methods/prejoin/handleCreateRoom.d.ts +77 -0
  234. package/dist/methods/prejoin/handleCreateRoom.d.ts.map +1 -0
  235. package/dist/methods/prejoin/handleJoinRoom.d.ts +56 -0
  236. package/dist/methods/prejoin/handleJoinRoom.d.ts.map +1 -0
  237. package/dist/methods/prejoin/index.d.ts +5 -0
  238. package/dist/methods/prejoin/index.d.ts.map +1 -0
  239. package/dist/methods/recording/checkPauseState.d.ts +34 -0
  240. package/dist/methods/recording/checkPauseState.d.ts.map +1 -0
  241. package/dist/methods/recording/checkResumeState.d.ts +30 -0
  242. package/dist/methods/recording/checkResumeState.d.ts.map +1 -0
  243. package/dist/methods/recording/confirmRecording.d.ts +46 -0
  244. package/dist/methods/recording/confirmRecording.d.ts.map +1 -0
  245. package/dist/methods/recording/launchRecording.d.ts +56 -0
  246. package/dist/methods/recording/launchRecording.d.ts.map +1 -0
  247. package/dist/methods/recording/recordPauseTimer.d.ts +31 -0
  248. package/dist/methods/recording/recordPauseTimer.d.ts.map +1 -0
  249. package/dist/methods/recording/recordResumeTimer.d.ts +29 -0
  250. package/dist/methods/recording/recordResumeTimer.d.ts.map +1 -0
  251. package/dist/methods/recording/recordStartTimer.d.ts +45 -0
  252. package/dist/methods/recording/recordStartTimer.d.ts.map +1 -0
  253. package/dist/methods/recording/recordUpdateTimer.d.ts +29 -0
  254. package/dist/methods/recording/recordUpdateTimer.d.ts.map +1 -0
  255. package/dist/methods/recording/startRecording.d.ts +122 -0
  256. package/dist/methods/recording/startRecording.d.ts.map +1 -0
  257. package/dist/methods/recording/stopRecording.d.ts +36 -0
  258. package/dist/methods/recording/stopRecording.d.ts.map +1 -0
  259. package/dist/methods/recording/timeLeftRecording.d.ts +13 -0
  260. package/dist/methods/recording/timeLeftRecording.d.ts.map +1 -0
  261. package/dist/methods/recording/updateRecording.d.ts +49 -0
  262. package/dist/methods/recording/updateRecording.d.ts.map +1 -0
  263. package/dist/methods/requests/hostRequestResponse.d.ts +33 -0
  264. package/dist/methods/requests/hostRequestResponse.d.ts.map +1 -0
  265. package/dist/methods/requests/index.d.ts +2 -0
  266. package/dist/methods/requests/index.d.ts.map +1 -0
  267. package/dist/methods/requests/launchRequests.d.ts +22 -0
  268. package/dist/methods/requests/launchRequests.d.ts.map +1 -0
  269. package/dist/methods/requests/respondToRequests.d.ts +38 -0
  270. package/dist/methods/requests/respondToRequests.d.ts.map +1 -0
  271. package/dist/methods/settings/index.d.ts +3 -0
  272. package/dist/methods/settings/index.d.ts.map +1 -0
  273. package/dist/methods/settings/launchSettings.d.ts +22 -0
  274. package/dist/methods/settings/launchSettings.d.ts.map +1 -0
  275. package/dist/methods/settings/modifySettings.d.ts +45 -0
  276. package/dist/methods/settings/modifySettings.d.ts.map +1 -0
  277. package/dist/methods/socketReceive/allMembers.d.ts +117 -0
  278. package/dist/methods/socketReceive/allMembers.d.ts.map +1 -0
  279. package/dist/methods/socketReceive/allMembersRest.d.ts +122 -0
  280. package/dist/methods/socketReceive/allMembersRest.d.ts.map +1 -0
  281. package/dist/methods/socketReceive/allWaitingRoomMembers.d.ts +24 -0
  282. package/dist/methods/socketReceive/allWaitingRoomMembers.d.ts.map +1 -0
  283. package/dist/methods/socketReceive/banParticipant.d.ts +44 -0
  284. package/dist/methods/socketReceive/banParticipant.d.ts.map +1 -0
  285. package/dist/methods/socketReceive/controlMediaHost.d.ts +62 -0
  286. package/dist/methods/socketReceive/controlMediaHost.d.ts.map +1 -0
  287. package/dist/methods/socketReceive/disconnect.d.ts +24 -0
  288. package/dist/methods/socketReceive/disconnect.d.ts.map +1 -0
  289. package/dist/methods/socketReceive/disconnectUserSelf.d.ts +29 -0
  290. package/dist/methods/socketReceive/disconnectUserSelf.d.ts.map +1 -0
  291. package/dist/methods/socketReceive/getDomains.d.ts +48 -0
  292. package/dist/methods/socketReceive/getDomains.d.ts.map +1 -0
  293. package/dist/methods/socketReceive/meetingEnded.d.ts +27 -0
  294. package/dist/methods/socketReceive/meetingEnded.d.ts.map +1 -0
  295. package/dist/methods/socketReceive/meetingStillThere.d.ts +19 -0
  296. package/dist/methods/socketReceive/meetingStillThere.d.ts.map +1 -0
  297. package/dist/methods/socketReceive/panelistReceiveMethods.d.ts +66 -0
  298. package/dist/methods/socketReceive/panelistReceiveMethods.d.ts.map +1 -0
  299. package/dist/methods/socketReceive/participantRequested.d.ts +28 -0
  300. package/dist/methods/socketReceive/participantRequested.d.ts.map +1 -0
  301. package/dist/methods/socketReceive/permissionReceiveMethods.d.ts +23 -0
  302. package/dist/methods/socketReceive/permissionReceiveMethods.d.ts.map +1 -0
  303. package/dist/methods/socketReceive/personJoined.d.ts +24 -0
  304. package/dist/methods/socketReceive/personJoined.d.ts.map +1 -0
  305. package/dist/methods/socketReceive/producerMediaClosed.d.ts +66 -0
  306. package/dist/methods/socketReceive/producerMediaClosed.d.ts.map +1 -0
  307. package/dist/methods/socketReceive/producerMediaPaused.d.ts +70 -0
  308. package/dist/methods/socketReceive/producerMediaPaused.d.ts.map +1 -0
  309. package/dist/methods/socketReceive/producerMediaResumed.d.ts +53 -0
  310. package/dist/methods/socketReceive/producerMediaResumed.d.ts.map +1 -0
  311. package/dist/methods/socketReceive/reInitiateRecording.d.ts +33 -0
  312. package/dist/methods/socketReceive/reInitiateRecording.d.ts.map +1 -0
  313. package/dist/methods/socketReceive/receiveMessage.d.ts +36 -0
  314. package/dist/methods/socketReceive/receiveMessage.d.ts.map +1 -0
  315. package/dist/methods/socketReceive/recordingNotice.d.ts +98 -0
  316. package/dist/methods/socketReceive/recordingNotice.d.ts.map +1 -0
  317. package/dist/methods/socketReceive/roomRecordParams.d.ts +60 -0
  318. package/dist/methods/socketReceive/roomRecordParams.d.ts.map +1 -0
  319. package/dist/methods/socketReceive/screenProducerId.d.ts +36 -0
  320. package/dist/methods/socketReceive/screenProducerId.d.ts.map +1 -0
  321. package/dist/methods/socketReceive/startRecords.d.ts +31 -0
  322. package/dist/methods/socketReceive/startRecords.d.ts.map +1 -0
  323. package/dist/methods/socketReceive/stoppedRecording.d.ts +24 -0
  324. package/dist/methods/socketReceive/stoppedRecording.d.ts.map +1 -0
  325. package/dist/methods/socketReceive/translationReceiveMethods.d.ts +227 -0
  326. package/dist/methods/socketReceive/translationReceiveMethods.d.ts.map +1 -0
  327. package/dist/methods/socketReceive/updateConsumingDomains.d.ts +60 -0
  328. package/dist/methods/socketReceive/updateConsumingDomains.d.ts.map +1 -0
  329. package/dist/methods/socketReceive/updateMediaSettings.d.ts +28 -0
  330. package/dist/methods/socketReceive/updateMediaSettings.d.ts.map +1 -0
  331. package/dist/methods/socketReceive/updatedCoHost.d.ts +38 -0
  332. package/dist/methods/socketReceive/updatedCoHost.d.ts.map +1 -0
  333. package/dist/methods/socketReceive/userWaiting.d.ts +30 -0
  334. package/dist/methods/socketReceive/userWaiting.d.ts.map +1 -0
  335. package/dist/methods/stream/clickAudio.d.ts +71 -0
  336. package/dist/methods/stream/clickAudio.d.ts.map +1 -0
  337. package/dist/methods/stream/clickChat.d.ts +11 -0
  338. package/dist/methods/stream/clickChat.d.ts.map +1 -0
  339. package/dist/methods/stream/clickScreenShare.d.ts +45 -0
  340. package/dist/methods/stream/clickScreenShare.d.ts.map +1 -0
  341. package/dist/methods/stream/clickVideo.d.ts +101 -0
  342. package/dist/methods/stream/clickVideo.d.ts.map +1 -0
  343. package/dist/methods/stream/index.d.ts +5 -0
  344. package/dist/methods/stream/index.d.ts.map +1 -0
  345. package/dist/methods/stream/switchAudio.d.ts +40 -0
  346. package/dist/methods/stream/switchAudio.d.ts.map +1 -0
  347. package/dist/methods/stream/switchVideo.d.ts +56 -0
  348. package/dist/methods/stream/switchVideo.d.ts.map +1 -0
  349. package/dist/methods/stream/switchVideoAlt.d.ts +55 -0
  350. package/dist/methods/stream/switchVideoAlt.d.ts.map +1 -0
  351. package/dist/methods/utils/SoundPlayer.d.ts +19 -0
  352. package/dist/methods/utils/SoundPlayer.d.ts.map +1 -0
  353. package/dist/methods/utils/checkLimitsAndMakeRequest.d.ts +30 -0
  354. package/dist/methods/utils/checkLimitsAndMakeRequest.d.ts.map +1 -0
  355. package/dist/methods/utils/createResponseJoinRoom.d.ts +24 -0
  356. package/dist/methods/utils/createResponseJoinRoom.d.ts.map +1 -0
  357. package/dist/methods/utils/createRoomOnMediaSFU.d.ts +28 -0
  358. package/dist/methods/utils/createRoomOnMediaSFU.d.ts.map +1 -0
  359. package/dist/methods/utils/formatNumber.d.ts +21 -0
  360. package/dist/methods/utils/formatNumber.d.ts.map +1 -0
  361. package/dist/methods/utils/generateRandomMessages.d.ts +11 -0
  362. package/dist/methods/utils/generateRandomMessages.d.ts.map +1 -0
  363. package/dist/methods/utils/generateRandomParticipants.d.ts +10 -0
  364. package/dist/methods/utils/generateRandomParticipants.d.ts.map +1 -0
  365. package/dist/methods/utils/generateRandomPolls.d.ts +7 -0
  366. package/dist/methods/utils/generateRandomPolls.d.ts.map +1 -0
  367. package/dist/methods/utils/generateRandomRequestList.d.ts +10 -0
  368. package/dist/methods/utils/generateRandomRequestList.d.ts.map +1 -0
  369. package/dist/methods/utils/generateRandomWaitingRoomList.d.ts +4 -0
  370. package/dist/methods/utils/generateRandomWaitingRoomList.d.ts.map +1 -0
  371. package/dist/methods/utils/getModalPosition.d.ts +7 -0
  372. package/dist/methods/utils/getModalPosition.d.ts.map +1 -0
  373. package/dist/methods/utils/getOverlayPosition.d.ts +22 -0
  374. package/dist/methods/utils/getOverlayPosition.d.ts.map +1 -0
  375. package/dist/methods/utils/getParticipantMedia.d.ts +55 -0
  376. package/dist/methods/utils/getParticipantMedia.d.ts.map +1 -0
  377. package/dist/methods/utils/headless/getCurrentParams.d.ts +27 -0
  378. package/dist/methods/utils/headless/getCurrentParams.d.ts.map +1 -0
  379. package/dist/methods/utils/headless/getMediaStreams.d.ts +96 -0
  380. package/dist/methods/utils/headless/getMediaStreams.d.ts.map +1 -0
  381. package/dist/methods/utils/headless/getRoomReadiness.d.ts +25 -0
  382. package/dist/methods/utils/headless/getRoomReadiness.d.ts.map +1 -0
  383. package/dist/methods/utils/headless/headlessTypes.d.ts +89 -0
  384. package/dist/methods/utils/headless/headlessTypes.d.ts.map +1 -0
  385. package/dist/methods/utils/headless/index.d.ts +29 -0
  386. package/dist/methods/utils/headless/index.d.ts.map +1 -0
  387. package/dist/methods/utils/headless/mediaPermissions.d.ts +53 -0
  388. package/dist/methods/utils/headless/mediaPermissions.d.ts.map +1 -0
  389. package/dist/methods/utils/headless/mediaProduction.d.ts +177 -0
  390. package/dist/methods/utils/headless/mediaProduction.d.ts.map +1 -0
  391. package/dist/methods/utils/headless/moderation.d.ts +157 -0
  392. package/dist/methods/utils/headless/moderation.d.ts.map +1 -0
  393. package/dist/methods/utils/headless/participantState.d.ts +128 -0
  394. package/dist/methods/utils/headless/participantState.d.ts.map +1 -0
  395. package/dist/methods/utils/headless/playback.d.ts +106 -0
  396. package/dist/methods/utils/headless/playback.d.ts.map +1 -0
  397. package/dist/methods/utils/headless/roomActions.d.ts +88 -0
  398. package/dist/methods/utils/headless/roomActions.d.ts.map +1 -0
  399. package/dist/methods/utils/headless/sessionControls.d.ts +159 -0
  400. package/dist/methods/utils/headless/sessionControls.d.ts.map +1 -0
  401. package/dist/methods/utils/headless/sessionExtras.d.ts +291 -0
  402. package/dist/methods/utils/headless/sessionExtras.d.ts.map +1 -0
  403. package/dist/methods/utils/headless/sessionFeatures.d.ts +159 -0
  404. package/dist/methods/utils/headless/sessionFeatures.d.ts.map +1 -0
  405. package/dist/methods/utils/headless/viewerSession.d.ts +125 -0
  406. package/dist/methods/utils/headless/viewerSession.d.ts.map +1 -0
  407. package/dist/methods/utils/headless/virtualBackground.d.ts +72 -0
  408. package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -0
  409. package/dist/methods/utils/initialValuesState.d.ts +388 -0
  410. package/dist/methods/utils/initialValuesState.d.ts.map +1 -0
  411. package/dist/methods/utils/joinRoomOnMediaSFU.d.ts +56 -0
  412. package/dist/methods/utils/joinRoomOnMediaSFU.d.ts.map +1 -0
  413. package/dist/methods/utils/liveSubtitle.d.ts +36 -0
  414. package/dist/methods/utils/liveSubtitle.d.ts.map +1 -0
  415. package/dist/methods/utils/meetingTimeRemaining.d.ts +15 -0
  416. package/dist/methods/utils/meetingTimeRemaining.d.ts.map +1 -0
  417. package/dist/methods/utils/meetingTimer/startMeetingProgressTimer.d.ts +35 -0
  418. package/dist/methods/utils/meetingTimer/startMeetingProgressTimer.d.ts.map +1 -0
  419. package/dist/methods/utils/producer/aParams.d.ts +3 -0
  420. package/dist/methods/utils/producer/aParams.d.ts.map +1 -0
  421. package/dist/methods/utils/producer/hParams.d.ts +3 -0
  422. package/dist/methods/utils/producer/hParams.d.ts.map +1 -0
  423. package/dist/methods/utils/producer/screenParams.d.ts +3 -0
  424. package/dist/methods/utils/producer/screenParams.d.ts.map +1 -0
  425. package/dist/methods/utils/producer/vParams.d.ts +3 -0
  426. package/dist/methods/utils/producer/vParams.d.ts.map +1 -0
  427. package/dist/methods/utils/producer/videoCaptureConstraints.d.ts +145 -0
  428. package/dist/methods/utils/producer/videoCaptureConstraints.d.ts.map +1 -0
  429. package/dist/methods/utils/resolveMediaSFURoomApi.d.ts +4 -0
  430. package/dist/methods/utils/resolveMediaSFURoomApi.d.ts.map +1 -0
  431. package/dist/methods/utils/sleep.d.ts +21 -0
  432. package/dist/methods/utils/sleep.d.ts.map +1 -0
  433. package/dist/methods/utils/translationLanguages.d.ts +100 -0
  434. package/dist/methods/utils/translationLanguages.d.ts.map +1 -0
  435. package/dist/methods/utils/validateAlphanumeric.d.ts +21 -0
  436. package/dist/methods/utils/validateAlphanumeric.d.ts.map +1 -0
  437. package/dist/methods/utils/webrtc.d.ts +18 -0
  438. package/dist/methods/utils/webrtc.d.ts.map +1 -0
  439. package/dist/methods/waiting/index.d.ts +2 -0
  440. package/dist/methods/waiting/index.d.ts.map +1 -0
  441. package/dist/methods/waiting/launchWaiting.d.ts +23 -0
  442. package/dist/methods/waiting/launchWaiting.d.ts.map +1 -0
  443. package/dist/methods/waiting/respondToWaiting.d.ts +40 -0
  444. package/dist/methods/waiting/respondToWaiting.d.ts.map +1 -0
  445. package/dist/methods/welcome/handleWelcomeRequest.d.ts +47 -0
  446. package/dist/methods/welcome/handleWelcomeRequest.d.ts.map +1 -0
  447. package/dist/methods/welcome/index.d.ts +3 -0
  448. package/dist/methods/welcome/index.d.ts.map +1 -0
  449. package/dist/methods/whiteboard/captureCanvasStream.d.ts +38 -0
  450. package/dist/methods/whiteboard/captureCanvasStream.d.ts.map +1 -0
  451. package/dist/methods/whiteboard/handleStartWhiteboard.d.ts +31 -0
  452. package/dist/methods/whiteboard/handleStartWhiteboard.d.ts.map +1 -0
  453. package/dist/methods/whiteboard/handleStopWhiteboard.d.ts +25 -0
  454. package/dist/methods/whiteboard/handleStopWhiteboard.d.ts.map +1 -0
  455. package/dist/methods/whiteboard/index.d.ts +5 -0
  456. package/dist/methods/whiteboard/index.d.ts.map +1 -0
  457. package/dist/methods/whiteboard/launchConfigureWhiteboard.d.ts +23 -0
  458. package/dist/methods/whiteboard/launchConfigureWhiteboard.d.ts.map +1 -0
  459. package/dist/producers/producerEmits/joinConRoom.d.ts +54 -0
  460. package/dist/producers/producerEmits/joinConRoom.d.ts.map +1 -0
  461. package/dist/producers/producerEmits/joinLocalRoom.d.ts +30 -0
  462. package/dist/producers/producerEmits/joinLocalRoom.d.ts.map +1 -0
  463. package/dist/producers/producerEmits/joinRoom.d.ts +35 -0
  464. package/dist/producers/producerEmits/joinRoom.d.ts.map +1 -0
  465. package/dist/readme/mediasfu-platform-capabilities.webp +0 -0
  466. package/dist/sockets/SocketManager.d.ts +102 -0
  467. package/dist/sockets/SocketManager.d.ts.map +1 -0
  468. package/dist/types/shared-base-types.d.ts +656 -0
  469. package/dist/types/shared-base-types.d.ts.map +1 -0
  470. package/dist/types/types.d.ts +124 -0
  471. package/dist/types/types.d.ts.map +1 -0
  472. package/package.json +106 -99
  473. package/src/consumers/connectSendTransportScreen.ts +4 -1
  474. package/src/consumers/createSendTransport.ts +74 -20
  475. package/src/consumers/streamSuccessVideo.ts +34 -5
  476. package/src/index.native.ts +24 -1
  477. package/src/index.ts +5 -0
  478. package/src/methods/exit/confirmExit.ts +11 -4
  479. package/src/methods/utils/getParticipantMedia.ts +112 -0
  480. package/src/methods/utils/headless/getCurrentParams.ts +44 -0
  481. package/src/methods/utils/headless/getMediaStreams.ts +256 -0
  482. package/src/methods/utils/headless/getRoomReadiness.ts +49 -0
  483. package/src/methods/utils/headless/headlessTypes.ts +102 -0
  484. package/src/methods/utils/headless/index.ts +28 -0
  485. package/src/methods/utils/headless/mediaPermissions.ts +124 -0
  486. package/src/methods/utils/headless/mediaProduction.ts +505 -0
  487. package/src/methods/utils/headless/moderation.ts +455 -0
  488. package/src/methods/utils/headless/participantState.ts +254 -0
  489. package/src/methods/utils/headless/playback.ts +336 -0
  490. package/src/methods/utils/headless/roomActions.ts +230 -0
  491. package/src/methods/utils/headless/sessionControls.ts +335 -0
  492. package/src/methods/utils/headless/sessionExtras.ts +593 -0
  493. package/src/methods/utils/headless/sessionFeatures.ts +480 -0
  494. package/src/methods/utils/headless/viewerSession.ts +246 -0
  495. package/src/methods/utils/headless/virtualBackground.ts +265 -0
  496. package/src/methods/utils/resolveMediaSFURoomApi.ts +2 -2
@@ -0,0 +1,480 @@
1
+ import { confirmRecording } from '../../recording/confirmRecording';
2
+ import { startRecording } from '../../recording/startRecording';
3
+ import { stopRecording } from '../../recording/stopRecording';
4
+ import { updateRecording } from '../../recording/updateRecording';
5
+ import { handleCreatePoll } from '../../polls/handleCreatePoll';
6
+ import { handleVotePoll } from '../../polls/handleVotePoll';
7
+ import { handleEndPoll } from '../../polls/handleEndPoll';
8
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
9
+ import { getCurrentParams } from './getCurrentParams';
10
+ import { HeadlessActionResult } from './roomActions';
11
+
12
+ const noop = () => undefined;
13
+
14
+ /* ------------------------------------------------------------------ *
15
+ * Recording
16
+ * ------------------------------------------------------------------ */
17
+
18
+ export type RecordingStatus =
19
+ | 'unavailable'
20
+ | 'idle'
21
+ | 'recording'
22
+ | 'paused'
23
+ | 'stopped';
24
+
25
+ export interface RecordingState {
26
+ status: RecordingStatus;
27
+ /** True while frames are being captured right now. */
28
+ active: boolean;
29
+ /** The local user may start/stop recording. */
30
+ canRecord: boolean;
31
+ /** 'video' | 'audio' — what the room is configured to capture. */
32
+ mediaOptions: string;
33
+ /** Seconds elapsed, as reported by the SDK. */
34
+ elapsedSeconds: number;
35
+ }
36
+
37
+ export type GetRecordingStateType = (options: HeadlessOptions) => RecordingState;
38
+
39
+ /**
40
+ * Collapse MediaSFU's four recording booleans into one status.
41
+ *
42
+ * The SDK tracks `recordStarted`, `recordPaused`, `recordResumed` and
43
+ * `recordStopped` independently, and they overlap — after a pause/resume cycle
44
+ * `recordStarted` and `recordResumed` are both true. Deriving "is it recording?"
45
+ * from any single flag gives the wrong answer at least once per session.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * const recording = getRecordingState({ parameters });
50
+ * if (recording.status === 'paused') showResumeButton();
51
+ * ```
52
+ */
53
+ export function getRecordingState({ parameters }: HeadlessOptions): RecordingState {
54
+ const source: HeadlessParameters = parameters || {};
55
+ const canRecord = source.canRecord === true;
56
+ let status: RecordingStatus = 'idle';
57
+ if (!canRecord && !source.recordStarted) status = 'unavailable';
58
+ else if (source.recordStopped) status = 'stopped';
59
+ else if (source.recordStarted && source.recordPaused) status = 'paused';
60
+ else if (source.recordStarted) status = 'recording';
61
+
62
+ return {
63
+ status,
64
+ active: status === 'recording',
65
+ canRecord,
66
+ mediaOptions: source.recordingMediaOptions || 'video',
67
+ elapsedSeconds: Number(source.recordElapsedTime) || 0,
68
+ };
69
+ }
70
+
71
+ export type RecordingActionType = (
72
+ options: HeadlessOptions
73
+ ) => Promise<HeadlessActionResult>;
74
+
75
+ /**
76
+ * Start recording.
77
+ *
78
+ * MediaSFU requires `confirmRecording` before `startRecording` — it validates
79
+ * the room's recording settings against the current layout and populates the
80
+ * state `startRecording` then reads. Calling `startRecording` alone appears to
81
+ * do nothing. This runs both steps in order.
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * import { startRoomRecording } from 'mediasfu-shared';
86
+ *
87
+ * const result = await startRoomRecording({ parameters });
88
+ * if (!result.ok) setNotice(result.error);
89
+ * ```
90
+ */
91
+ export async function startRoomRecording({
92
+ parameters,
93
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
94
+ try {
95
+ const live = getCurrentParams({ parameters });
96
+ if (live.canRecord !== true) {
97
+ return { ok: false, error: 'Recording is not available in this room.' };
98
+ }
99
+ if (live.recordStarted && !live.recordStopped) {
100
+ return { ok: false, error: 'Recording has already started.' };
101
+ }
102
+ await confirmRecording({ parameters: live as any });
103
+ const refreshed = getCurrentParams({ parameters: live });
104
+ await startRecording({ parameters: refreshed as any });
105
+ return { ok: true, error: '' };
106
+ } catch (error: any) {
107
+ return { ok: false, error: error?.message || 'Recording could not be started.' };
108
+ }
109
+ }
110
+
111
+ /** Pause an active recording. */
112
+ export async function pauseRoomRecording({
113
+ parameters,
114
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
115
+ return toggleRecordingPause(parameters, true);
116
+ }
117
+
118
+ /** Resume a paused recording. */
119
+ export async function resumeRoomRecording({
120
+ parameters,
121
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
122
+ return toggleRecordingPause(parameters, false);
123
+ }
124
+
125
+ async function toggleRecordingPause(
126
+ parameters: HeadlessParameters,
127
+ pause: boolean
128
+ ): Promise<HeadlessActionResult> {
129
+ try {
130
+ const live = getCurrentParams({ parameters });
131
+ const state = getRecordingState({ parameters: live });
132
+ if (state.status !== (pause ? 'recording' : 'paused')) {
133
+ return {
134
+ ok: false,
135
+ error: pause
136
+ ? 'There is no active recording to pause.'
137
+ : 'There is no paused recording to resume.',
138
+ };
139
+ }
140
+ // `updateRecording` is the SDK's pause/resume toggle; it decides direction
141
+ // from the current recordPaused state, which we just validated.
142
+ await updateRecording({ parameters: live as any });
143
+ return { ok: true, error: '' };
144
+ } catch (error: any) {
145
+ return {
146
+ ok: false,
147
+ error: error?.message || 'The recording state could not be changed.',
148
+ };
149
+ }
150
+ }
151
+
152
+ /** Stop recording. The file becomes available through the MediaSFU API. */
153
+ export async function stopRoomRecording({
154
+ parameters,
155
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
156
+ try {
157
+ const live = getCurrentParams({ parameters });
158
+ if (!live.recordStarted || live.recordStopped) {
159
+ return { ok: false, error: 'There is no active recording to stop.' };
160
+ }
161
+ await stopRecording({ parameters: live as any });
162
+ return { ok: true, error: '' };
163
+ } catch (error: any) {
164
+ return { ok: false, error: error?.message || 'Recording could not be stopped.' };
165
+ }
166
+ }
167
+
168
+ /* ------------------------------------------------------------------ *
169
+ * Whiteboard
170
+ * ------------------------------------------------------------------ */
171
+
172
+ export interface WhiteboardState {
173
+ /** True while a whiteboard session is running. */
174
+ active: boolean;
175
+ /** The local user may start one. */
176
+ canStart: boolean;
177
+ /** Participants granted drawing rights. */
178
+ users: any[];
179
+ /** Maximum participants the room's plan allows on a whiteboard. */
180
+ limit: number;
181
+ /** The live canvas element, when the SDK has created one. */
182
+ canvas: HTMLCanvasElement | null;
183
+ }
184
+
185
+ export type GetWhiteboardStateType = (
186
+ options: HeadlessOptions
187
+ ) => WhiteboardState;
188
+
189
+ /**
190
+ * Current whiteboard session state.
191
+ *
192
+ * `whiteboardStarted` alone is not enough — the SDK leaves it true after a
193
+ * session ends and sets `whiteboardEnded` alongside it, so "active" is
194
+ * `started && !ended`.
195
+ */
196
+ export function getWhiteboardState({ parameters }: HeadlessOptions): WhiteboardState {
197
+ const source: HeadlessParameters = parameters || {};
198
+ return {
199
+ active: source.whiteboardStarted === true && source.whiteboardEnded !== true,
200
+ canStart: source.canStartWhiteboard === true,
201
+ users: Array.isArray(source.whiteboardUsers) ? source.whiteboardUsers : [],
202
+ limit: Number(source.whiteboardLimit) || 0,
203
+ canvas: source.canvasWhiteboard || null,
204
+ };
205
+ }
206
+
207
+ export interface StartWhiteboardOptions extends HeadlessOptions {
208
+ /** Participants allowed to draw. Defaults to the room's current selection. */
209
+ users?: any[];
210
+ }
211
+
212
+ export type StartWhiteboardType = (
213
+ options: StartWhiteboardOptions
214
+ ) => Promise<HeadlessActionResult>;
215
+
216
+ /**
217
+ * Start (or reconfigure) the shared whiteboard.
218
+ *
219
+ * Emits `startWhiteboard` for a new session and `updateWhiteboard` when one is
220
+ * already running, matching the SDK's own modal. Breakout rooms and the
221
+ * whiteboard are mutually exclusive, which is checked here.
222
+ *
223
+ * This applies the session state only. Layout follow-up (`onScreenChanges`,
224
+ * `prepopulateUserMedia`, main-pane sizing) is deliberately left to you, since a
225
+ * headless surface owns its own layout.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * await startWhiteboard({ parameters, users: [{ name: 'Paul' }] });
230
+ * ```
231
+ */
232
+ export async function startWhiteboard({
233
+ parameters,
234
+ users,
235
+ }: StartWhiteboardOptions): Promise<HeadlessActionResult> {
236
+ try {
237
+ const live = getCurrentParams({ parameters });
238
+ if (live.breakOutRoomStarted && !live.breakOutRoomEnded) {
239
+ return {
240
+ ok: false,
241
+ error: 'The whiteboard cannot start while breakout rooms are active.',
242
+ };
243
+ }
244
+ const socket = live?.socket;
245
+ if (!socket || typeof socket.emit !== 'function' || !live?.roomName) {
246
+ return { ok: false, error: 'The room connection is not ready.' };
247
+ }
248
+ const state = getWhiteboardState({ parameters: live });
249
+ if (!state.active && !state.canStart) {
250
+ return { ok: false, error: 'You are not allowed to start the whiteboard.' };
251
+ }
252
+ const whiteboardUsers = users ?? state.users;
253
+ if (state.limit > 0 && whiteboardUsers.length > state.limit) {
254
+ return {
255
+ ok: false,
256
+ error: `The whiteboard allows at most ${state.limit} participants.`,
257
+ };
258
+ }
259
+
260
+ const event = state.active ? 'updateWhiteboard' : 'startWhiteboard';
261
+ const response = await new Promise<any>((resolve) => {
262
+ socket.emit(event, { whiteboardUsers, roomName: live.roomName }, resolve);
263
+ });
264
+ if (!response?.success) {
265
+ return {
266
+ ok: false,
267
+ error: response?.reason || 'The whiteboard could not be started.',
268
+ };
269
+ }
270
+ live.updateWhiteboardStarted?.(true);
271
+ live.updateWhiteboardEnded?.(false);
272
+ live.updateWhiteboardUsers?.(whiteboardUsers);
273
+ live.updateCanStartWhiteboard?.(false);
274
+ return { ok: true, error: '' };
275
+ } catch (error: any) {
276
+ return {
277
+ ok: false,
278
+ error: error?.message || 'The whiteboard could not be started.',
279
+ };
280
+ }
281
+ }
282
+
283
+ export type StopWhiteboardType = (
284
+ options: HeadlessOptions
285
+ ) => Promise<HeadlessActionResult>;
286
+
287
+ /** End the shared whiteboard session. */
288
+ export async function stopWhiteboard({
289
+ parameters,
290
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
291
+ try {
292
+ const live = getCurrentParams({ parameters });
293
+ const socket = live?.socket;
294
+ if (!socket || typeof socket.emit !== 'function' || !live?.roomName) {
295
+ return { ok: false, error: 'The room connection is not ready.' };
296
+ }
297
+ if (!getWhiteboardState({ parameters: live }).active) {
298
+ return { ok: false, error: 'The whiteboard is not running.' };
299
+ }
300
+ const response = await new Promise<any>((resolve) => {
301
+ socket.emit('stopWhiteboard', { roomName: live.roomName }, resolve);
302
+ });
303
+ if (!response?.success) {
304
+ return {
305
+ ok: false,
306
+ error: response?.reason || 'The whiteboard could not be stopped.',
307
+ };
308
+ }
309
+ live.updateWhiteboardStarted?.(false);
310
+ live.updateWhiteboardEnded?.(true);
311
+ return { ok: true, error: '' };
312
+ } catch (error: any) {
313
+ return {
314
+ ok: false,
315
+ error: error?.message || 'The whiteboard could not be stopped.',
316
+ };
317
+ }
318
+ }
319
+
320
+ /* ------------------------------------------------------------------ *
321
+ * Polls
322
+ * ------------------------------------------------------------------ */
323
+
324
+ export interface PollState {
325
+ /** Every poll the room has seen. */
326
+ polls: any[];
327
+ /** The poll currently open for voting, if any. */
328
+ active: any | null;
329
+ }
330
+
331
+ export type GetPollStateType = (options: HeadlessOptions) => PollState;
332
+
333
+ /** Polls in the room, plus whichever one is currently open. */
334
+ export function getPollState({ parameters }: HeadlessOptions): PollState {
335
+ const source: HeadlessParameters = parameters || {};
336
+ const polls = Array.isArray(source.polls) ? source.polls : [];
337
+ const active =
338
+ source.poll && source.poll.status === 'active'
339
+ ? source.poll
340
+ : polls.find((entry: any) => entry?.status === 'active') || null;
341
+ return { polls, active };
342
+ }
343
+
344
+ export interface CreatePollOptions extends HeadlessOptions {
345
+ question: string;
346
+ options: string[];
347
+ /** Defaults to 'custom'. */
348
+ type?: string;
349
+ }
350
+
351
+ export type CreateRoomPollType = (
352
+ options: CreatePollOptions
353
+ ) => Promise<HeadlessActionResult>;
354
+
355
+ /**
356
+ * Open a poll.
357
+ *
358
+ * @example
359
+ * ```ts
360
+ * await createRoomPoll({
361
+ * parameters,
362
+ * question: 'Ship on Friday?',
363
+ * options: ['Yes', 'No'],
364
+ * });
365
+ * ```
366
+ */
367
+ export async function createRoomPoll({
368
+ parameters,
369
+ question,
370
+ options,
371
+ type = 'custom',
372
+ }: CreatePollOptions): Promise<HeadlessActionResult> {
373
+ try {
374
+ const live = getCurrentParams({ parameters });
375
+ if (!question?.trim()) return { ok: false, error: 'The poll needs a question.' };
376
+ if (!Array.isArray(options) || options.length < 2) {
377
+ return { ok: false, error: 'The poll needs at least two options.' };
378
+ }
379
+ await handleCreatePoll({
380
+ poll: { question, options, type } as any,
381
+ socket: live.socket,
382
+ roomName: live.roomName || '',
383
+ showAlert: live.showAlert,
384
+ updateIsPollModalVisible: live.updateIsPollModalVisible || noop,
385
+ });
386
+ return { ok: true, error: '' };
387
+ } catch (error: any) {
388
+ return { ok: false, error: error?.message || 'The poll could not be created.' };
389
+ }
390
+ }
391
+
392
+ export interface VotePollOptions extends HeadlessOptions {
393
+ pollId: string;
394
+ optionIndex: number;
395
+ }
396
+
397
+ /** Cast a vote in an open poll. */
398
+ export async function voteInRoomPoll({
399
+ parameters,
400
+ pollId,
401
+ optionIndex,
402
+ }: VotePollOptions): Promise<HeadlessActionResult> {
403
+ try {
404
+ const live = getCurrentParams({ parameters });
405
+ await handleVotePoll({
406
+ pollId,
407
+ optionIndex,
408
+ socket: live.socket,
409
+ showAlert: live.showAlert,
410
+ member: live.member || '',
411
+ roomName: live.roomName || '',
412
+ updateIsPollModalVisible: live.updateIsPollModalVisible || noop,
413
+ });
414
+ return { ok: true, error: '' };
415
+ } catch (error: any) {
416
+ return { ok: false, error: error?.message || 'The vote could not be cast.' };
417
+ }
418
+ }
419
+
420
+ export interface EndPollOptions extends HeadlessOptions {
421
+ pollId: string;
422
+ }
423
+
424
+ /** Close a poll. Host only. */
425
+ export async function endRoomPoll({
426
+ parameters,
427
+ pollId,
428
+ }: EndPollOptions): Promise<HeadlessActionResult> {
429
+ try {
430
+ const live = getCurrentParams({ parameters });
431
+ if (String(live.islevel) !== '2') {
432
+ return { ok: false, error: 'Only the host can end a poll.' };
433
+ }
434
+ await handleEndPoll({
435
+ pollId,
436
+ socket: live.socket,
437
+ showAlert: live.showAlert,
438
+ roomName: live.roomName || '',
439
+ updateIsPollModalVisible: live.updateIsPollModalVisible || noop,
440
+ });
441
+ return { ok: true, error: '' };
442
+ } catch (error: any) {
443
+ return { ok: false, error: error?.message || 'The poll could not be ended.' };
444
+ }
445
+ }
446
+
447
+ /* ------------------------------------------------------------------ *
448
+ * Breakout rooms
449
+ * ------------------------------------------------------------------ */
450
+
451
+ export interface BreakoutState {
452
+ /** True while breakout rooms are running. */
453
+ active: boolean;
454
+ /** The local user may start them. */
455
+ canStart: boolean;
456
+ /** Room composition as the SDK holds it. */
457
+ rooms: any[];
458
+ /** The breakout room the local user is in, or -1. */
459
+ currentRoom: number;
460
+ }
461
+
462
+ export type GetBreakoutStateType = (options: HeadlessOptions) => BreakoutState;
463
+
464
+ /**
465
+ * Breakout-room state.
466
+ *
467
+ * Same `started && !ended` shape as the whiteboard, and the two are mutually
468
+ * exclusive — check this before offering a whiteboard control.
469
+ */
470
+ export function getBreakoutState({ parameters }: HeadlessOptions): BreakoutState {
471
+ const source: HeadlessParameters = parameters || {};
472
+ return {
473
+ active:
474
+ source.breakOutRoomStarted === true && source.breakOutRoomEnded !== true,
475
+ canStart: source.canStartBreakout === true,
476
+ rooms: Array.isArray(source.breakoutRooms) ? source.breakoutRooms : [],
477
+ currentRoom:
478
+ typeof source.hostNewRoom === 'number' ? source.hostNewRoom : -1,
479
+ };
480
+ }