mediasfu-shared 1.0.6 → 1.2.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 (558) hide show
  1. package/HEADLESS_GUIDE.md +156 -0
  2. package/README.md +130 -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/index.cjs +80 -0
  74. package/dist/consumers/index.cjs.map +1 -0
  75. package/dist/consumers/index.d.ts +62 -0
  76. package/dist/consumers/index.d.ts.map +1 -0
  77. package/dist/consumers/index.js +80 -0
  78. package/dist/consumers/index.js.map +1 -0
  79. package/dist/consumers/mixStreams.d.ts +37 -0
  80. package/dist/consumers/mixStreams.d.ts.map +1 -0
  81. package/dist/consumers/onScreenChanges.d.ts +62 -0
  82. package/dist/consumers/onScreenChanges.d.ts.map +1 -0
  83. package/dist/consumers/prepopulateUserMedia.d.ts +10 -0
  84. package/dist/consumers/prepopulateUserMedia.d.ts.map +1 -0
  85. package/dist/consumers/processConsumerTransports.d.ts +73 -0
  86. package/dist/consumers/processConsumerTransports.d.ts.map +1 -0
  87. package/dist/consumers/processConsumerTransportsAudio.d.ts +57 -0
  88. package/dist/consumers/processConsumerTransportsAudio.d.ts.map +1 -0
  89. package/dist/consumers/rePort.d.ts +63 -0
  90. package/dist/consumers/rePort.d.ts.map +1 -0
  91. package/dist/consumers/reUpdateInter.d.ts +142 -0
  92. package/dist/consumers/reUpdateInter.d.ts.map +1 -0
  93. package/dist/consumers/readjust.d.ts +68 -0
  94. package/dist/consumers/readjust.d.ts.map +1 -0
  95. package/dist/consumers/receiveAllPipedTransports.d.ts +44 -0
  96. package/dist/consumers/receiveAllPipedTransports.d.ts.map +1 -0
  97. package/dist/consumers/receiveRoomMessages.d.ts +31 -0
  98. package/dist/consumers/receiveRoomMessages.d.ts.map +1 -0
  99. package/dist/consumers/reorderStreams.d.ts +98 -0
  100. package/dist/consumers/reorderStreams.d.ts.map +1 -0
  101. package/dist/consumers/requestScreenShare.d.ts +47 -0
  102. package/dist/consumers/requestScreenShare.d.ts.map +1 -0
  103. package/dist/consumers/resumePauseAudioStreams.d.ts +85 -0
  104. package/dist/consumers/resumePauseAudioStreams.d.ts.map +1 -0
  105. package/dist/consumers/resumePauseStreams.d.ts +68 -0
  106. package/dist/consumers/resumePauseStreams.d.ts.map +1 -0
  107. package/dist/consumers/resumeSendTransportAudio.d.ts +65 -0
  108. package/dist/consumers/resumeSendTransportAudio.d.ts.map +1 -0
  109. package/dist/consumers/signalNewConsumerTransport.d.ts +59 -0
  110. package/dist/consumers/signalNewConsumerTransport.d.ts.map +1 -0
  111. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts +76 -0
  112. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts.map +1 -0
  113. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts +119 -0
  114. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts.map +1 -0
  115. package/dist/consumers/socketReceiveMethods/producerClosed.d.ts +53 -0
  116. package/dist/consumers/socketReceiveMethods/producerClosed.d.ts.map +1 -0
  117. package/dist/consumers/startShareScreen.d.ts +58 -0
  118. package/dist/consumers/startShareScreen.d.ts.map +1 -0
  119. package/dist/consumers/stopShareScreen.d.ts +127 -0
  120. package/dist/consumers/stopShareScreen.d.ts.map +1 -0
  121. package/dist/consumers/streamSuccessAudio.d.ts +149 -0
  122. package/dist/consumers/streamSuccessAudio.d.ts.map +1 -0
  123. package/dist/consumers/streamSuccessAudioSwitch.d.ts +131 -0
  124. package/dist/consumers/streamSuccessAudioSwitch.d.ts.map +1 -0
  125. package/dist/consumers/streamSuccessScreen.d.ts +109 -0
  126. package/dist/consumers/streamSuccessScreen.d.ts.map +1 -0
  127. package/dist/consumers/streamSuccessVideo.d.ts +160 -0
  128. package/dist/consumers/streamSuccessVideo.d.ts.map +1 -0
  129. package/dist/consumers/switchUserAudio.d.ts +56 -0
  130. package/dist/consumers/switchUserAudio.d.ts.map +1 -0
  131. package/dist/consumers/switchUserVideo.d.ts +77 -0
  132. package/dist/consumers/switchUserVideo.d.ts.map +1 -0
  133. package/dist/consumers/switchUserVideoAlt.d.ts +69 -0
  134. package/dist/consumers/switchUserVideoAlt.d.ts.map +1 -0
  135. package/dist/consumers/translationConsumerSwitch.d.ts +67 -0
  136. package/dist/consumers/translationConsumerSwitch.d.ts.map +1 -0
  137. package/dist/consumers/trigger.d.ts +71 -0
  138. package/dist/consumers/trigger.d.ts.map +1 -0
  139. package/dist/consumers/updateMiniCardsGrid.d.ts +65 -0
  140. package/dist/consumers/updateMiniCardsGrid.d.ts.map +1 -0
  141. package/dist/consumers/updateParticipantAudioDecibels.d.ts +31 -0
  142. package/dist/consumers/updateParticipantAudioDecibels.d.ts.map +1 -0
  143. package/dist/getParticipantMedia-B0JS6d2b.js +3555 -0
  144. package/dist/getParticipantMedia-B0JS6d2b.js.map +1 -0
  145. package/dist/getParticipantMedia-CdcYqcbD.cjs +3554 -0
  146. package/dist/getParticipantMedia-CdcYqcbD.cjs.map +1 -0
  147. package/dist/index.cjs +2727 -13252
  148. package/dist/index.cjs.map +1 -1
  149. package/dist/index.d.ts +192 -11233
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +2636 -13143
  152. package/dist/index.js.map +1 -1
  153. package/dist/index.native.cjs +352 -0
  154. package/dist/index.native.cjs.map +1 -0
  155. package/dist/index.native.d.ts +204 -0
  156. package/dist/index.native.d.ts.map +1 -0
  157. package/dist/index.native.js +352 -0
  158. package/dist/index.native.js.map +1 -0
  159. package/dist/joinLocalRoom-BdM1msQt.cjs +673 -0
  160. package/dist/joinLocalRoom-BdM1msQt.cjs.map +1 -0
  161. package/dist/joinLocalRoom-CvteNe4R.js +657 -0
  162. package/dist/joinLocalRoom-CvteNe4R.js.map +1 -0
  163. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs +1222 -0
  164. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs.map +1 -0
  165. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js +1223 -0
  166. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js.map +1 -0
  167. package/dist/methods/background/launchBackground.d.ts +10 -0
  168. package/dist/methods/background/launchBackground.d.ts.map +1 -0
  169. package/dist/methods/breakoutRooms/breakoutRoomUpdated.d.ts +67 -0
  170. package/dist/methods/breakoutRooms/breakoutRoomUpdated.d.ts.map +1 -0
  171. package/dist/methods/breakoutRooms/handleStartBreakout.d.ts +42 -0
  172. package/dist/methods/breakoutRooms/handleStartBreakout.d.ts.map +1 -0
  173. package/dist/methods/breakoutRooms/handleStopBreakout.d.ts +33 -0
  174. package/dist/methods/breakoutRooms/handleStopBreakout.d.ts.map +1 -0
  175. package/dist/methods/breakoutRooms/index.d.ts +5 -0
  176. package/dist/methods/breakoutRooms/index.d.ts.map +1 -0
  177. package/dist/methods/breakoutRooms/launchBreakoutRooms.d.ts +25 -0
  178. package/dist/methods/breakoutRooms/launchBreakoutRooms.d.ts.map +1 -0
  179. package/dist/methods/coHost/launchCoHost.d.ts +25 -0
  180. package/dist/methods/coHost/launchCoHost.d.ts.map +1 -0
  181. package/dist/methods/coHostMethods/index.d.ts +3 -0
  182. package/dist/methods/coHostMethods/index.d.ts.map +1 -0
  183. package/dist/methods/coHostMethods/modifyCoHostSettings.d.ts +49 -0
  184. package/dist/methods/coHostMethods/modifyCoHostSettings.d.ts.map +1 -0
  185. package/dist/methods/displaySettings/index.d.ts +2 -0
  186. package/dist/methods/displaySettings/index.d.ts.map +1 -0
  187. package/dist/methods/displaySettings/launchDisplaySettings.d.ts +25 -0
  188. package/dist/methods/displaySettings/launchDisplaySettings.d.ts.map +1 -0
  189. package/dist/methods/displaySettings/modifyDisplaySettings.d.ts +106 -0
  190. package/dist/methods/displaySettings/modifyDisplaySettings.d.ts.map +1 -0
  191. package/dist/methods/exit/confirmExit.d.ts +38 -0
  192. package/dist/methods/exit/confirmExit.d.ts.map +1 -0
  193. package/dist/methods/exit/index.d.ts +3 -0
  194. package/dist/methods/exit/index.d.ts.map +1 -0
  195. package/dist/methods/exit/launchConfirmExit.d.ts +23 -0
  196. package/dist/methods/exit/launchConfirmExit.d.ts.map +1 -0
  197. package/dist/methods/index.cjs +3975 -0
  198. package/dist/methods/index.cjs.map +1 -0
  199. package/dist/methods/index.d.ts +66 -0
  200. package/dist/methods/index.d.ts.map +1 -0
  201. package/dist/methods/index.js +3976 -0
  202. package/dist/methods/index.js.map +1 -0
  203. package/dist/methods/mediaSettings/launchMediaSettings.d.ts +38 -0
  204. package/dist/methods/mediaSettings/launchMediaSettings.d.ts.map +1 -0
  205. package/dist/methods/menu/launchMenuModal.d.ts +22 -0
  206. package/dist/methods/menu/launchMenuModal.d.ts.map +1 -0
  207. package/dist/methods/message/index.d.ts +2 -0
  208. package/dist/methods/message/index.d.ts.map +1 -0
  209. package/dist/methods/message/launchMessages.d.ts +24 -0
  210. package/dist/methods/message/launchMessages.d.ts.map +1 -0
  211. package/dist/methods/message/sendMessage.d.ts +63 -0
  212. package/dist/methods/message/sendMessage.d.ts.map +1 -0
  213. package/dist/methods/panelists/focusPanelists.d.ts +24 -0
  214. package/dist/methods/panelists/focusPanelists.d.ts.map +1 -0
  215. package/dist/methods/panelists/index.d.ts +4 -0
  216. package/dist/methods/panelists/index.d.ts.map +1 -0
  217. package/dist/methods/panelists/launchPanelists.d.ts +7 -0
  218. package/dist/methods/panelists/launchPanelists.d.ts.map +1 -0
  219. package/dist/methods/panelists/updatePanelists.d.ts +35 -0
  220. package/dist/methods/panelists/updatePanelists.d.ts.map +1 -0
  221. package/dist/methods/participants/index.d.ts +4 -0
  222. package/dist/methods/participants/index.d.ts.map +1 -0
  223. package/dist/methods/participants/launchParticipants.d.ts +22 -0
  224. package/dist/methods/participants/launchParticipants.d.ts.map +1 -0
  225. package/dist/methods/participants/messageParticipants.d.ts +43 -0
  226. package/dist/methods/participants/messageParticipants.d.ts.map +1 -0
  227. package/dist/methods/participants/muteParticipants.d.ts +41 -0
  228. package/dist/methods/participants/muteParticipants.d.ts.map +1 -0
  229. package/dist/methods/participants/removeParticipants.d.ts +47 -0
  230. package/dist/methods/participants/removeParticipants.d.ts.map +1 -0
  231. package/dist/methods/permissions/index.d.ts +4 -0
  232. package/dist/methods/permissions/index.d.ts.map +1 -0
  233. package/dist/methods/permissions/launchPermissions.d.ts +7 -0
  234. package/dist/methods/permissions/launchPermissions.d.ts.map +1 -0
  235. package/dist/methods/permissions/updateParticipantPermission.d.ts +25 -0
  236. package/dist/methods/permissions/updateParticipantPermission.d.ts.map +1 -0
  237. package/dist/methods/permissions/updatePermissionConfig.d.ts +22 -0
  238. package/dist/methods/permissions/updatePermissionConfig.d.ts.map +1 -0
  239. package/dist/methods/polls/handleCreatePoll.d.ts +39 -0
  240. package/dist/methods/polls/handleCreatePoll.d.ts.map +1 -0
  241. package/dist/methods/polls/handleEndPoll.d.ts +34 -0
  242. package/dist/methods/polls/handleEndPoll.d.ts.map +1 -0
  243. package/dist/methods/polls/handleVotePoll.d.ts +39 -0
  244. package/dist/methods/polls/handleVotePoll.d.ts.map +1 -0
  245. package/dist/methods/polls/index.d.ts +4 -0
  246. package/dist/methods/polls/index.d.ts.map +1 -0
  247. package/dist/methods/polls/launchPoll.d.ts +22 -0
  248. package/dist/methods/polls/launchPoll.d.ts.map +1 -0
  249. package/dist/methods/polls/pollUpdated.d.ts +38 -0
  250. package/dist/methods/polls/pollUpdated.d.ts.map +1 -0
  251. package/dist/methods/prejoin/handleCreateRoom.d.ts +77 -0
  252. package/dist/methods/prejoin/handleCreateRoom.d.ts.map +1 -0
  253. package/dist/methods/prejoin/handleJoinRoom.d.ts +56 -0
  254. package/dist/methods/prejoin/handleJoinRoom.d.ts.map +1 -0
  255. package/dist/methods/prejoin/index.d.ts +5 -0
  256. package/dist/methods/prejoin/index.d.ts.map +1 -0
  257. package/dist/methods/recording/checkPauseState.d.ts +34 -0
  258. package/dist/methods/recording/checkPauseState.d.ts.map +1 -0
  259. package/dist/methods/recording/checkResumeState.d.ts +30 -0
  260. package/dist/methods/recording/checkResumeState.d.ts.map +1 -0
  261. package/dist/methods/recording/confirmRecording.d.ts +46 -0
  262. package/dist/methods/recording/confirmRecording.d.ts.map +1 -0
  263. package/dist/methods/recording/launchRecording.d.ts +56 -0
  264. package/dist/methods/recording/launchRecording.d.ts.map +1 -0
  265. package/dist/methods/recording/recordPauseTimer.d.ts +31 -0
  266. package/dist/methods/recording/recordPauseTimer.d.ts.map +1 -0
  267. package/dist/methods/recording/recordResumeTimer.d.ts +29 -0
  268. package/dist/methods/recording/recordResumeTimer.d.ts.map +1 -0
  269. package/dist/methods/recording/recordStartTimer.d.ts +45 -0
  270. package/dist/methods/recording/recordStartTimer.d.ts.map +1 -0
  271. package/dist/methods/recording/recordUpdateTimer.d.ts +29 -0
  272. package/dist/methods/recording/recordUpdateTimer.d.ts.map +1 -0
  273. package/dist/methods/recording/startRecording.d.ts +122 -0
  274. package/dist/methods/recording/startRecording.d.ts.map +1 -0
  275. package/dist/methods/recording/stopRecording.d.ts +36 -0
  276. package/dist/methods/recording/stopRecording.d.ts.map +1 -0
  277. package/dist/methods/recording/timeLeftRecording.d.ts +13 -0
  278. package/dist/methods/recording/timeLeftRecording.d.ts.map +1 -0
  279. package/dist/methods/recording/updateRecording.d.ts +49 -0
  280. package/dist/methods/recording/updateRecording.d.ts.map +1 -0
  281. package/dist/methods/requests/hostRequestResponse.d.ts +33 -0
  282. package/dist/methods/requests/hostRequestResponse.d.ts.map +1 -0
  283. package/dist/methods/requests/index.d.ts +2 -0
  284. package/dist/methods/requests/index.d.ts.map +1 -0
  285. package/dist/methods/requests/launchRequests.d.ts +22 -0
  286. package/dist/methods/requests/launchRequests.d.ts.map +1 -0
  287. package/dist/methods/requests/respondToRequests.d.ts +38 -0
  288. package/dist/methods/requests/respondToRequests.d.ts.map +1 -0
  289. package/dist/methods/settings/index.d.ts +3 -0
  290. package/dist/methods/settings/index.d.ts.map +1 -0
  291. package/dist/methods/settings/launchSettings.d.ts +22 -0
  292. package/dist/methods/settings/launchSettings.d.ts.map +1 -0
  293. package/dist/methods/settings/modifySettings.d.ts +45 -0
  294. package/dist/methods/settings/modifySettings.d.ts.map +1 -0
  295. package/dist/methods/socketReceive/allMembers.d.ts +117 -0
  296. package/dist/methods/socketReceive/allMembers.d.ts.map +1 -0
  297. package/dist/methods/socketReceive/allMembersRest.d.ts +122 -0
  298. package/dist/methods/socketReceive/allMembersRest.d.ts.map +1 -0
  299. package/dist/methods/socketReceive/allWaitingRoomMembers.d.ts +24 -0
  300. package/dist/methods/socketReceive/allWaitingRoomMembers.d.ts.map +1 -0
  301. package/dist/methods/socketReceive/banParticipant.d.ts +44 -0
  302. package/dist/methods/socketReceive/banParticipant.d.ts.map +1 -0
  303. package/dist/methods/socketReceive/controlMediaHost.d.ts +62 -0
  304. package/dist/methods/socketReceive/controlMediaHost.d.ts.map +1 -0
  305. package/dist/methods/socketReceive/disconnect.d.ts +24 -0
  306. package/dist/methods/socketReceive/disconnect.d.ts.map +1 -0
  307. package/dist/methods/socketReceive/disconnectUserSelf.d.ts +29 -0
  308. package/dist/methods/socketReceive/disconnectUserSelf.d.ts.map +1 -0
  309. package/dist/methods/socketReceive/getDomains.d.ts +48 -0
  310. package/dist/methods/socketReceive/getDomains.d.ts.map +1 -0
  311. package/dist/methods/socketReceive/meetingEnded.d.ts +27 -0
  312. package/dist/methods/socketReceive/meetingEnded.d.ts.map +1 -0
  313. package/dist/methods/socketReceive/meetingStillThere.d.ts +19 -0
  314. package/dist/methods/socketReceive/meetingStillThere.d.ts.map +1 -0
  315. package/dist/methods/socketReceive/panelistReceiveMethods.d.ts +66 -0
  316. package/dist/methods/socketReceive/panelistReceiveMethods.d.ts.map +1 -0
  317. package/dist/methods/socketReceive/participantRequested.d.ts +28 -0
  318. package/dist/methods/socketReceive/participantRequested.d.ts.map +1 -0
  319. package/dist/methods/socketReceive/permissionReceiveMethods.d.ts +23 -0
  320. package/dist/methods/socketReceive/permissionReceiveMethods.d.ts.map +1 -0
  321. package/dist/methods/socketReceive/personJoined.d.ts +24 -0
  322. package/dist/methods/socketReceive/personJoined.d.ts.map +1 -0
  323. package/dist/methods/socketReceive/producerMediaClosed.d.ts +66 -0
  324. package/dist/methods/socketReceive/producerMediaClosed.d.ts.map +1 -0
  325. package/dist/methods/socketReceive/producerMediaPaused.d.ts +70 -0
  326. package/dist/methods/socketReceive/producerMediaPaused.d.ts.map +1 -0
  327. package/dist/methods/socketReceive/producerMediaResumed.d.ts +53 -0
  328. package/dist/methods/socketReceive/producerMediaResumed.d.ts.map +1 -0
  329. package/dist/methods/socketReceive/reInitiateRecording.d.ts +33 -0
  330. package/dist/methods/socketReceive/reInitiateRecording.d.ts.map +1 -0
  331. package/dist/methods/socketReceive/receiveMessage.d.ts +36 -0
  332. package/dist/methods/socketReceive/receiveMessage.d.ts.map +1 -0
  333. package/dist/methods/socketReceive/recordingNotice.d.ts +98 -0
  334. package/dist/methods/socketReceive/recordingNotice.d.ts.map +1 -0
  335. package/dist/methods/socketReceive/roomRecordParams.d.ts +60 -0
  336. package/dist/methods/socketReceive/roomRecordParams.d.ts.map +1 -0
  337. package/dist/methods/socketReceive/screenProducerId.d.ts +36 -0
  338. package/dist/methods/socketReceive/screenProducerId.d.ts.map +1 -0
  339. package/dist/methods/socketReceive/startRecords.d.ts +31 -0
  340. package/dist/methods/socketReceive/startRecords.d.ts.map +1 -0
  341. package/dist/methods/socketReceive/stoppedRecording.d.ts +24 -0
  342. package/dist/methods/socketReceive/stoppedRecording.d.ts.map +1 -0
  343. package/dist/methods/socketReceive/translationReceiveMethods.d.ts +227 -0
  344. package/dist/methods/socketReceive/translationReceiveMethods.d.ts.map +1 -0
  345. package/dist/methods/socketReceive/updateConsumingDomains.d.ts +60 -0
  346. package/dist/methods/socketReceive/updateConsumingDomains.d.ts.map +1 -0
  347. package/dist/methods/socketReceive/updateMediaSettings.d.ts +28 -0
  348. package/dist/methods/socketReceive/updateMediaSettings.d.ts.map +1 -0
  349. package/dist/methods/socketReceive/updatedCoHost.d.ts +38 -0
  350. package/dist/methods/socketReceive/updatedCoHost.d.ts.map +1 -0
  351. package/dist/methods/socketReceive/userWaiting.d.ts +30 -0
  352. package/dist/methods/socketReceive/userWaiting.d.ts.map +1 -0
  353. package/dist/methods/stream/clickAudio.d.ts +71 -0
  354. package/dist/methods/stream/clickAudio.d.ts.map +1 -0
  355. package/dist/methods/stream/clickChat.d.ts +11 -0
  356. package/dist/methods/stream/clickChat.d.ts.map +1 -0
  357. package/dist/methods/stream/clickScreenShare.d.ts +45 -0
  358. package/dist/methods/stream/clickScreenShare.d.ts.map +1 -0
  359. package/dist/methods/stream/clickVideo.d.ts +101 -0
  360. package/dist/methods/stream/clickVideo.d.ts.map +1 -0
  361. package/dist/methods/stream/index.d.ts +5 -0
  362. package/dist/methods/stream/index.d.ts.map +1 -0
  363. package/dist/methods/stream/switchAudio.d.ts +40 -0
  364. package/dist/methods/stream/switchAudio.d.ts.map +1 -0
  365. package/dist/methods/stream/switchVideo.d.ts +56 -0
  366. package/dist/methods/stream/switchVideo.d.ts.map +1 -0
  367. package/dist/methods/stream/switchVideoAlt.d.ts +55 -0
  368. package/dist/methods/stream/switchVideoAlt.d.ts.map +1 -0
  369. package/dist/methods/utils/SoundPlayer.d.ts +19 -0
  370. package/dist/methods/utils/SoundPlayer.d.ts.map +1 -0
  371. package/dist/methods/utils/checkLimitsAndMakeRequest.d.ts +30 -0
  372. package/dist/methods/utils/checkLimitsAndMakeRequest.d.ts.map +1 -0
  373. package/dist/methods/utils/createResponseJoinRoom.d.ts +24 -0
  374. package/dist/methods/utils/createResponseJoinRoom.d.ts.map +1 -0
  375. package/dist/methods/utils/createRoomOnMediaSFU.d.ts +28 -0
  376. package/dist/methods/utils/createRoomOnMediaSFU.d.ts.map +1 -0
  377. package/dist/methods/utils/formatNumber.d.ts +21 -0
  378. package/dist/methods/utils/formatNumber.d.ts.map +1 -0
  379. package/dist/methods/utils/generateRandomMessages.d.ts +11 -0
  380. package/dist/methods/utils/generateRandomMessages.d.ts.map +1 -0
  381. package/dist/methods/utils/generateRandomParticipants.d.ts +10 -0
  382. package/dist/methods/utils/generateRandomParticipants.d.ts.map +1 -0
  383. package/dist/methods/utils/generateRandomPolls.d.ts +7 -0
  384. package/dist/methods/utils/generateRandomPolls.d.ts.map +1 -0
  385. package/dist/methods/utils/generateRandomRequestList.d.ts +10 -0
  386. package/dist/methods/utils/generateRandomRequestList.d.ts.map +1 -0
  387. package/dist/methods/utils/generateRandomWaitingRoomList.d.ts +4 -0
  388. package/dist/methods/utils/generateRandomWaitingRoomList.d.ts.map +1 -0
  389. package/dist/methods/utils/getModalPosition.d.ts +7 -0
  390. package/dist/methods/utils/getModalPosition.d.ts.map +1 -0
  391. package/dist/methods/utils/getOverlayPosition.d.ts +22 -0
  392. package/dist/methods/utils/getOverlayPosition.d.ts.map +1 -0
  393. package/dist/methods/utils/getParticipantMedia.d.ts +55 -0
  394. package/dist/methods/utils/getParticipantMedia.d.ts.map +1 -0
  395. package/dist/methods/utils/headless/getCurrentParams.d.ts +27 -0
  396. package/dist/methods/utils/headless/getCurrentParams.d.ts.map +1 -0
  397. package/dist/methods/utils/headless/getMediaStreams.d.ts +96 -0
  398. package/dist/methods/utils/headless/getMediaStreams.d.ts.map +1 -0
  399. package/dist/methods/utils/headless/getRoomReadiness.d.ts +25 -0
  400. package/dist/methods/utils/headless/getRoomReadiness.d.ts.map +1 -0
  401. package/dist/methods/utils/headless/headlessTypes.d.ts +89 -0
  402. package/dist/methods/utils/headless/headlessTypes.d.ts.map +1 -0
  403. package/dist/methods/utils/headless/index.d.ts +29 -0
  404. package/dist/methods/utils/headless/index.d.ts.map +1 -0
  405. package/dist/methods/utils/headless/mediaPermissions.d.ts +53 -0
  406. package/dist/methods/utils/headless/mediaPermissions.d.ts.map +1 -0
  407. package/dist/methods/utils/headless/mediaProduction.d.ts +177 -0
  408. package/dist/methods/utils/headless/mediaProduction.d.ts.map +1 -0
  409. package/dist/methods/utils/headless/moderation.d.ts +157 -0
  410. package/dist/methods/utils/headless/moderation.d.ts.map +1 -0
  411. package/dist/methods/utils/headless/participantState.d.ts +128 -0
  412. package/dist/methods/utils/headless/participantState.d.ts.map +1 -0
  413. package/dist/methods/utils/headless/playback.d.ts +106 -0
  414. package/dist/methods/utils/headless/playback.d.ts.map +1 -0
  415. package/dist/methods/utils/headless/roomActions.d.ts +88 -0
  416. package/dist/methods/utils/headless/roomActions.d.ts.map +1 -0
  417. package/dist/methods/utils/headless/sessionControls.d.ts +159 -0
  418. package/dist/methods/utils/headless/sessionControls.d.ts.map +1 -0
  419. package/dist/methods/utils/headless/sessionExtras.d.ts +291 -0
  420. package/dist/methods/utils/headless/sessionExtras.d.ts.map +1 -0
  421. package/dist/methods/utils/headless/sessionFeatures.d.ts +159 -0
  422. package/dist/methods/utils/headless/sessionFeatures.d.ts.map +1 -0
  423. package/dist/methods/utils/headless/viewerSession.d.ts +125 -0
  424. package/dist/methods/utils/headless/viewerSession.d.ts.map +1 -0
  425. package/dist/methods/utils/headless/virtualBackground.d.ts +72 -0
  426. package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -0
  427. package/dist/methods/utils/initialValuesState.d.ts +388 -0
  428. package/dist/methods/utils/initialValuesState.d.ts.map +1 -0
  429. package/dist/methods/utils/joinRoomOnMediaSFU.d.ts +56 -0
  430. package/dist/methods/utils/joinRoomOnMediaSFU.d.ts.map +1 -0
  431. package/dist/methods/utils/liveSubtitle.d.ts +36 -0
  432. package/dist/methods/utils/liveSubtitle.d.ts.map +1 -0
  433. package/dist/methods/utils/meetingTimeRemaining.d.ts +15 -0
  434. package/dist/methods/utils/meetingTimeRemaining.d.ts.map +1 -0
  435. package/dist/methods/utils/meetingTimer/startMeetingProgressTimer.d.ts +35 -0
  436. package/dist/methods/utils/meetingTimer/startMeetingProgressTimer.d.ts.map +1 -0
  437. package/dist/methods/utils/producer/aParams.d.ts +3 -0
  438. package/dist/methods/utils/producer/aParams.d.ts.map +1 -0
  439. package/dist/methods/utils/producer/hParams.d.ts +3 -0
  440. package/dist/methods/utils/producer/hParams.d.ts.map +1 -0
  441. package/dist/methods/utils/producer/screenParams.d.ts +3 -0
  442. package/dist/methods/utils/producer/screenParams.d.ts.map +1 -0
  443. package/dist/methods/utils/producer/vParams.d.ts +3 -0
  444. package/dist/methods/utils/producer/vParams.d.ts.map +1 -0
  445. package/dist/methods/utils/producer/videoCaptureConstraints.d.ts +145 -0
  446. package/dist/methods/utils/producer/videoCaptureConstraints.d.ts.map +1 -0
  447. package/dist/methods/utils/resolveMediaSFURoomApi.d.ts +4 -0
  448. package/dist/methods/utils/resolveMediaSFURoomApi.d.ts.map +1 -0
  449. package/dist/methods/utils/sleep.d.ts +21 -0
  450. package/dist/methods/utils/sleep.d.ts.map +1 -0
  451. package/dist/methods/utils/translationLanguages.d.ts +100 -0
  452. package/dist/methods/utils/translationLanguages.d.ts.map +1 -0
  453. package/dist/methods/utils/validateAlphanumeric.d.ts +21 -0
  454. package/dist/methods/utils/validateAlphanumeric.d.ts.map +1 -0
  455. package/dist/methods/utils/virtualBackgroundCompositor.d.ts +21 -0
  456. package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -0
  457. package/dist/methods/utils/webrtc.d.ts +18 -0
  458. package/dist/methods/utils/webrtc.d.ts.map +1 -0
  459. package/dist/methods/waiting/index.d.ts +2 -0
  460. package/dist/methods/waiting/index.d.ts.map +1 -0
  461. package/dist/methods/waiting/launchWaiting.d.ts +23 -0
  462. package/dist/methods/waiting/launchWaiting.d.ts.map +1 -0
  463. package/dist/methods/waiting/respondToWaiting.d.ts +40 -0
  464. package/dist/methods/waiting/respondToWaiting.d.ts.map +1 -0
  465. package/dist/methods/welcome/handleWelcomeRequest.d.ts +47 -0
  466. package/dist/methods/welcome/handleWelcomeRequest.d.ts.map +1 -0
  467. package/dist/methods/welcome/index.d.ts +3 -0
  468. package/dist/methods/welcome/index.d.ts.map +1 -0
  469. package/dist/methods/whiteboard/captureCanvasStream.d.ts +38 -0
  470. package/dist/methods/whiteboard/captureCanvasStream.d.ts.map +1 -0
  471. package/dist/methods/whiteboard/handleStartWhiteboard.d.ts +31 -0
  472. package/dist/methods/whiteboard/handleStartWhiteboard.d.ts.map +1 -0
  473. package/dist/methods/whiteboard/handleStopWhiteboard.d.ts +25 -0
  474. package/dist/methods/whiteboard/handleStopWhiteboard.d.ts.map +1 -0
  475. package/dist/methods/whiteboard/index.d.ts +5 -0
  476. package/dist/methods/whiteboard/index.d.ts.map +1 -0
  477. package/dist/methods/whiteboard/launchConfigureWhiteboard.d.ts +23 -0
  478. package/dist/methods/whiteboard/launchConfigureWhiteboard.d.ts.map +1 -0
  479. package/dist/producers/producerEmits/joinConRoom.d.ts +54 -0
  480. package/dist/producers/producerEmits/joinConRoom.d.ts.map +1 -0
  481. package/dist/producers/producerEmits/joinLocalRoom.d.ts +30 -0
  482. package/dist/producers/producerEmits/joinLocalRoom.d.ts.map +1 -0
  483. package/dist/producers/producerEmits/joinRoom.d.ts +35 -0
  484. package/dist/producers/producerEmits/joinRoom.d.ts.map +1 -0
  485. package/dist/readme/mediasfu-platform-capabilities.webp +0 -0
  486. package/dist/sockets/SocketManager.d.ts +102 -0
  487. package/dist/sockets/SocketManager.d.ts.map +1 -0
  488. package/dist/translationConsumerSwitch-C20MfNNq.cjs +509 -0
  489. package/dist/translationConsumerSwitch-C20MfNNq.cjs.map +1 -0
  490. package/dist/translationConsumerSwitch-zKuS5wgH.js +510 -0
  491. package/dist/translationConsumerSwitch-zKuS5wgH.js.map +1 -0
  492. package/dist/types/index.cjs +85 -0
  493. package/dist/types/index.cjs.map +1 -0
  494. package/dist/types/index.d.ts +2 -0
  495. package/dist/types/index.d.ts.map +1 -0
  496. package/dist/types/index.js +85 -0
  497. package/dist/types/index.js.map +1 -0
  498. package/dist/types/shared-base-types.d.ts +656 -0
  499. package/dist/types/shared-base-types.d.ts.map +1 -0
  500. package/dist/types/types.d.ts +124 -0
  501. package/dist/types/types.d.ts.map +1 -0
  502. package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js +5392 -0
  503. package/dist/updateParticipantAudioDecibels-DLd8Y-Fh.js.map +1 -0
  504. package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs +5391 -0
  505. package/dist/updateParticipantAudioDecibels-DPmHiy3K.cjs.map +1 -0
  506. package/dist/validateAlphanumeric-DKn5BsUP.cjs +15 -0
  507. package/dist/validateAlphanumeric-DKn5BsUP.cjs.map +1 -0
  508. package/dist/validateAlphanumeric-Dk1JB80W.js +16 -0
  509. package/dist/validateAlphanumeric-Dk1JB80W.js.map +1 -0
  510. package/package.json +106 -99
  511. package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +1 -2
  512. package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +1 -1
  513. package/src/consumers/connectIps.ts +1 -1
  514. package/src/consumers/connectRecvTransport.ts +1 -1
  515. package/src/consumers/connectSendTransport.ts +1 -1
  516. package/src/consumers/connectSendTransportAudio.ts +1 -1
  517. package/src/consumers/connectSendTransportScreen.ts +5 -2
  518. package/src/consumers/connectSendTransportVideo.ts +1 -1
  519. package/src/consumers/createSendTransport.ts +34 -29
  520. package/src/consumers/disconnectSendTransportAudio.ts +1 -1
  521. package/src/consumers/disconnectSendTransportScreen.ts +1 -1
  522. package/src/consumers/disconnectSendTransportVideo.ts +1 -1
  523. package/src/consumers/index.ts +61 -0
  524. package/src/consumers/resumeSendTransportAudio.ts +1 -1
  525. package/src/consumers/signalNewConsumerTransport.ts +1 -2
  526. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +1 -1
  527. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +1 -1
  528. package/src/consumers/streamSuccessAudio.ts +1 -2
  529. package/src/consumers/streamSuccessAudioSwitch.ts +1 -2
  530. package/src/consumers/streamSuccessVideo.ts +35 -6
  531. package/src/index.native.ts +24 -1
  532. package/src/index.ts +7 -0
  533. package/src/methods/exit/confirmExit.ts +11 -4
  534. package/src/methods/socketReceive/getDomains.ts +1 -1
  535. package/src/methods/utils/getParticipantMedia.ts +112 -0
  536. package/src/methods/utils/headless/getCurrentParams.ts +44 -0
  537. package/src/methods/utils/headless/getMediaStreams.ts +256 -0
  538. package/src/methods/utils/headless/getRoomReadiness.ts +49 -0
  539. package/src/methods/utils/headless/headlessTypes.ts +102 -0
  540. package/src/methods/utils/headless/index.ts +28 -0
  541. package/src/methods/utils/headless/mediaPermissions.ts +124 -0
  542. package/src/methods/utils/headless/mediaProduction.ts +505 -0
  543. package/src/methods/utils/headless/moderation.ts +455 -0
  544. package/src/methods/utils/headless/participantState.ts +254 -0
  545. package/src/methods/utils/headless/playback.ts +336 -0
  546. package/src/methods/utils/headless/roomActions.ts +230 -0
  547. package/src/methods/utils/headless/sessionControls.ts +335 -0
  548. package/src/methods/utils/headless/sessionExtras.ts +593 -0
  549. package/src/methods/utils/headless/sessionFeatures.ts +480 -0
  550. package/src/methods/utils/headless/viewerSession.ts +246 -0
  551. package/src/methods/utils/headless/virtualBackground.ts +280 -0
  552. package/src/methods/utils/resolveMediaSFURoomApi.ts +2 -2
  553. package/src/methods/utils/virtualBackgroundCompositor.ts +53 -0
  554. package/src/methods/whiteboard/captureCanvasStream.ts +2 -2
  555. package/src/producers/producerEmits/joinConRoom.ts +1 -1
  556. package/src/producers/producerEmits/joinRoom.ts +1 -1
  557. package/src/types/index.ts +1 -0
  558. package/src/types/shared-base-types.ts +2 -3
@@ -0,0 +1,593 @@
1
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
2
+
3
+ /* ------------------------------------------------------------------ *
4
+ * Recording notices and limits
5
+ * ------------------------------------------------------------------ */
6
+
7
+ export interface RecordingNotice {
8
+ /** The SDK's current recording notice, or '' when there is none. */
9
+ message: string;
10
+ /** Formatted elapsed time as the SDK reports it (e.g. "00:12:04"). */
11
+ elapsed: string;
12
+ /** Elapsed seconds. */
13
+ elapsedSeconds: number;
14
+ /** True while pause/resume is permitted (the SDK enforces a cooldown). */
15
+ canPauseResume: boolean;
16
+ /** Pauses used so far. */
17
+ pausesUsed: number;
18
+ /** Pauses allowed for the active media type; 0 when unpublished. */
19
+ pauseLimit: number;
20
+ /** True when the pause allowance is exhausted. */
21
+ pauseLimitReached: boolean;
22
+ }
23
+
24
+ export type GetRecordingNoticeType = (options: HeadlessOptions) => RecordingNotice;
25
+
26
+ /**
27
+ * The user-facing side of recording: the notice, the timer, and the pause
28
+ * allowance.
29
+ *
30
+ * Pause limits are per media type — `recordingAudioPausesLimit` vs
31
+ * `recordingVideoPausesLimit` — and the SDK picks by `recordingMediaOptions`.
32
+ * Reading the wrong one reports the wrong allowance, which is why this is a
33
+ * helper rather than a field read. Complements `getRecordingState`, which
34
+ * covers only the start/pause/resume/stop status.
35
+ */
36
+ export function getRecordingNotice({ parameters }: HeadlessOptions): RecordingNotice {
37
+ const source: HeadlessParameters = parameters || {};
38
+ const isAudio = source.recordingMediaOptions === 'audio';
39
+ const pauseLimit = Number(
40
+ isAudio ? source.recordingAudioPausesLimit : source.recordingVideoPausesLimit
41
+ ) || 0;
42
+ const pausesUsed = Number(source.pauseRecordCount) || 0;
43
+ return {
44
+ message: source.recordingNotice || '',
45
+ elapsed: source.recordingProgressTime || '00:00:00',
46
+ elapsedSeconds: Number(source.recordElapsedTime) || 0,
47
+ canPauseResume: source.canPauseResume === true,
48
+ pausesUsed,
49
+ pauseLimit,
50
+ pauseLimitReached: pauseLimit > 0 && pausesUsed >= pauseLimit,
51
+ };
52
+ }
53
+
54
+ export interface RecordingCapabilities {
55
+ /** Recording audio at all. */
56
+ audio: boolean;
57
+ /** Recording video at all. */
58
+ video: boolean;
59
+ /** Recording every participant, not just the active speaker. */
60
+ allParticipants: boolean;
61
+ /** Recording every participant's video. */
62
+ videoParticipants: boolean;
63
+ /** Adding an HLS output. */
64
+ hls: boolean;
65
+ /** Max people included in an audio recording; 0 when unpublished. */
66
+ audioPeopleLimit: number;
67
+ /** Max people included in a video recording; 0 when unpublished. */
68
+ videoPeopleLimit: number;
69
+ }
70
+
71
+ export type GetRecordingCapabilitiesType = (
72
+ options: HeadlessOptions
73
+ ) => RecordingCapabilities;
74
+
75
+ /**
76
+ * What this room's plan actually permits recording.
77
+ *
78
+ * These are entitlement flags the server publishes per room, so a UI should
79
+ * gate on them rather than offering options the room will refuse.
80
+ */
81
+ export function getRecordingCapabilities({
82
+ parameters,
83
+ }: HeadlessOptions): RecordingCapabilities {
84
+ const source: HeadlessParameters = parameters || {};
85
+ return {
86
+ audio: source.recordingAudioSupport === true,
87
+ video: source.recordingVideoSupport === true,
88
+ allParticipants: source.recordingAllParticipantsSupport === true,
89
+ videoParticipants: source.recordingVideoParticipantsSupport === true,
90
+ hls: source.recordingAddHLS === true,
91
+ audioPeopleLimit: Number(source.recordingAudioPeopleLimit) || 0,
92
+ videoPeopleLimit: Number(source.recordingVideoPeopleLimit) || 0,
93
+ };
94
+ }
95
+
96
+ /* ------------------------------------------------------------------ *
97
+ * Translation
98
+ * ------------------------------------------------------------------ */
99
+
100
+ export interface TranslationPreference {
101
+ /** Language applied to every speaker, or null when unset. */
102
+ globalLanguage: string | null;
103
+ /** Per-speaker overrides, keyed by speaker id. */
104
+ perSpeaker: { speakerId: string; language: string | null; wantOriginal: boolean }[];
105
+ }
106
+
107
+ export interface TranslationState extends TranslationPreference {
108
+ /** True when any translation is currently being consumed. */
109
+ active: boolean;
110
+ /** Languages the room currently has translation producers for. */
111
+ availableLanguages: string[];
112
+ }
113
+
114
+ export type GetTranslationStateType = (options: HeadlessOptions) => TranslationState;
115
+
116
+ /**
117
+ * What the listener is currently hearing, and what is on offer.
118
+ *
119
+ * `listenerTranslationPreferences.perSpeaker` is a `Map` on the bag, which does
120
+ * not survive serialisation or spread; this returns a plain array so it can be
121
+ * rendered and compared normally. Translation audio itself already reaches the
122
+ * user through `getAudioGridComponents`, which folds in `translationStreams`.
123
+ */
124
+ export function getTranslationState({ parameters }: HeadlessOptions): TranslationState {
125
+ const source: HeadlessParameters = parameters || {};
126
+ const preferences: any = source.listenerTranslationPreferences || {};
127
+ const perSpeakerMap = preferences.perSpeaker;
128
+ const perSpeaker = perSpeakerMap instanceof Map
129
+ ? Array.from(perSpeakerMap.values())
130
+ : Array.isArray(perSpeakerMap) ? perSpeakerMap : [];
131
+
132
+ const speakerStates: any = source.speakerTranslationStates;
133
+ const languages = new Set<string>();
134
+ const collect = (value: any) => {
135
+ if (value?.language) languages.add(value.language);
136
+ };
137
+ if (speakerStates instanceof Map) speakerStates.forEach(collect);
138
+ else if (Array.isArray(speakerStates)) speakerStates.forEach(collect);
139
+ perSpeaker.forEach(collect);
140
+ if (preferences.globalLanguage) languages.add(preferences.globalLanguage);
141
+
142
+ return {
143
+ globalLanguage: preferences.globalLanguage ?? null,
144
+ perSpeaker,
145
+ active: Boolean(
146
+ preferences.globalLanguage
147
+ || perSpeaker.some((entry) => entry?.language && !entry.wantOriginal)
148
+ ),
149
+ availableLanguages: Array.from(languages),
150
+ };
151
+ }
152
+
153
+ export interface SetTranslationPreferenceOptions extends HeadlessOptions {
154
+ /** Language for every speaker. `null` restores the original audio. */
155
+ language?: string | null;
156
+ /** Limit the change to one speaker. */
157
+ speakerId?: string;
158
+ /** Explicitly prefer the untranslated audio for this speaker. */
159
+ wantOriginal?: boolean;
160
+ }
161
+
162
+ export type SetTranslationPreferenceType = (
163
+ options: SetTranslationPreferenceOptions
164
+ ) => { ok: boolean; error: string };
165
+
166
+ /**
167
+ * Choose a translation language, globally or for one speaker.
168
+ *
169
+ * Delegates to the SDK's `updateListenerTranslationPreferences`, which is what
170
+ * syncs the choice to the server for routing and billing — setting the bag's
171
+ * fields directly would change local state without telling the server.
172
+ */
173
+ export function setTranslationPreference({
174
+ parameters,
175
+ language = null,
176
+ speakerId,
177
+ wantOriginal = false,
178
+ }: SetTranslationPreferenceOptions): { ok: boolean; error: string } {
179
+ const source: HeadlessParameters = parameters || {};
180
+ const update = source.updateListenerTranslationPreferences;
181
+ if (typeof update !== 'function') {
182
+ return { ok: false, error: 'Translation is not available in this room.' };
183
+ }
184
+ try {
185
+ const current: any = source.listenerTranslationPreferences || {};
186
+ const perSpeaker = current.perSpeaker instanceof Map
187
+ ? new Map(current.perSpeaker)
188
+ : new Map();
189
+ if (speakerId) {
190
+ perSpeaker.set(speakerId, { speakerId, language, wantOriginal });
191
+ update({ perSpeaker, globalLanguage: current.globalLanguage ?? null });
192
+ } else {
193
+ update({ perSpeaker, globalLanguage: language });
194
+ }
195
+ return { ok: true, error: '' };
196
+ } catch (error: any) {
197
+ return { ok: false, error: error?.message || 'The translation preference could not be set.' };
198
+ }
199
+ }
200
+
201
+ /* ------------------------------------------------------------------ *
202
+ * Panelists and focus mode
203
+ * ------------------------------------------------------------------ */
204
+
205
+ export interface FocusModeState {
206
+ /** True while focus mode is active. */
207
+ active: boolean;
208
+ /** Participants permitted to speak/appear while focus mode is on. */
209
+ panelists: { name: string; [key: string]: any }[];
210
+ /** True when the local user is one of them. */
211
+ selfIsPanelist: boolean;
212
+ /** True when focus mode silences non-panelist microphones. */
213
+ mutesMicrophones: boolean;
214
+ /** True when focus mode blocks non-panelist cameras. */
215
+ mutesCameras: boolean;
216
+ }
217
+
218
+ export type GetFocusModeStateType = (options: HeadlessOptions) => FocusModeState;
219
+
220
+ /**
221
+ * Focus-mode ("only panelists") state.
222
+ *
223
+ * The field is `muteOthersCamera`, not `muteOthersVideo` — worth stating,
224
+ * because the neighbouring flag is `muteOthersMic` and the asymmetry invites a
225
+ * wrong guess. {@link getMediaPermissions} already applies these rules to the
226
+ * local user; this exposes the room-level picture for a roster UI.
227
+ */
228
+ export function getFocusModeState({ parameters }: HeadlessOptions): FocusModeState {
229
+ const source: HeadlessParameters = parameters || {};
230
+ const panelists = Array.isArray(source.panelists) ? source.panelists : [];
231
+ return {
232
+ active: source.panelistsFocused === true,
233
+ panelists,
234
+ selfIsPanelist: panelists.some((entry: any) => entry?.name === source.member),
235
+ mutesMicrophones: source.muteOthersMic === true,
236
+ mutesCameras: source.muteOthersCamera === true,
237
+ };
238
+ }
239
+
240
+ /* ------------------------------------------------------------------ *
241
+ * Virtual background
242
+ * ------------------------------------------------------------------ */
243
+
244
+ export interface VirtualBackgroundState {
245
+ /** True when a processed (background-applied) stream is being published. */
246
+ active: boolean;
247
+ /** The processed stream, when one exists. */
248
+ stream: MediaStream | null;
249
+ /** The background currently applied, if the SDK reports one. */
250
+ appliedBackground: any;
251
+ /** The image the user selected, if any. */
252
+ selectedImage: string | null;
253
+ }
254
+
255
+ export type GetVirtualBackgroundStateType = (
256
+ options: HeadlessOptions
257
+ ) => VirtualBackgroundState;
258
+
259
+ /**
260
+ * Read-only virtual-background state.
261
+ *
262
+ * **You do not need this to render the right self-view.**
263
+ * `getLocalVideoStream` already returns the processed `virtualStream` whenever
264
+ * `keepBackground` is on, and the raw camera otherwise — the same rule the SDK's
265
+ * own grid uses. Rendering `localStreamVideo` directly is what shows a user
266
+ * their *unprocessed* background, so prefer the helper and ignore this.
267
+ *
268
+ * This exists for UI that needs to *describe* the state ("Background on"), not
269
+ * to choose a stream.
270
+ *
271
+ * Known gap: applying or clearing a background is still modal-driven in the SDK
272
+ * (`isBackgroundModalVisible` / `autoClickBackground`), so a `returnUI={false}`
273
+ * surface cannot currently turn a background on by itself. Reading works
274
+ * headlessly; controlling does not.
275
+ */
276
+ export function getVirtualBackgroundState({
277
+ parameters,
278
+ }: HeadlessOptions): VirtualBackgroundState {
279
+ const source: HeadlessParameters = parameters || {};
280
+ const stream = (source.virtualStream || source.processedStream) as MediaStream | null;
281
+ return {
282
+ active: source.keepBackground === true && Boolean(stream),
283
+ stream: stream || null,
284
+ appliedBackground: source.appliedBackground ?? null,
285
+ selectedImage: source.selectedImage ?? null,
286
+ };
287
+ }
288
+
289
+ /* ------------------------------------------------------------------ *
290
+ * Local playback control (per-participant)
291
+ * ------------------------------------------------------------------ */
292
+
293
+ export interface SetParticipantPlaybackOptions extends HeadlessOptions {
294
+ /** Participant display name. */
295
+ name?: string;
296
+ /** Producer id, when you already hold one. */
297
+ producerId?: string;
298
+ /** Which of their tracks to affect. Defaults to both. */
299
+ kind?: 'audio' | 'video' | 'all';
300
+ /** True to stop receiving, false to resume. */
301
+ paused: boolean;
302
+ }
303
+
304
+ export type SetParticipantPlaybackType = (
305
+ options: SetParticipantPlaybackOptions
306
+ ) => Promise<{ ok: boolean; error: string; affected: number }>;
307
+
308
+ /**
309
+ * Producer ids this viewer has locally paused.
310
+ *
311
+ * Module-level rather than on the parameter bag: the SDK owns that bag and
312
+ * rebuilds it, and this is a purely local preference that must survive those
313
+ * rebuilds so `reapplyLocalPlayback` can re-assert it after a layout pass.
314
+ */
315
+ const LOCALLY_PAUSED = new Set<string>();
316
+
317
+ /**
318
+ * Stop or resume playing one participant's media **for you only**.
319
+ *
320
+ * This is a local, per-viewer control — "don't play this person to me right
321
+ * now". It pauses the mediasoup consumer, so the server stops sending that
322
+ * track to you: it saves bandwidth as well as silencing them, and it is
323
+ * invisible to everyone else. It is NOT moderation — the participant keeps
324
+ * publishing and other people keep receiving. Use `setParticipantMedia` from
325
+ * the moderation module to actually stop someone's media for the room.
326
+ *
327
+ * Note this is deliberately not `resumePauseStreams`, which the SDK drives from
328
+ * the active-speaker layout (`dispActiveNames`) and will happily undo a manual
329
+ * choice on its next pass. This targets the consumer directly.
330
+ *
331
+ * @example
332
+ * ```ts
333
+ * // Stop hearing and seeing Paul locally
334
+ * await setParticipantPlayback({ parameters, name: 'Paul', paused: true });
335
+ * // Just their audio
336
+ * await setParticipantPlayback({ parameters, name: 'Paul', kind: 'audio', paused: true });
337
+ * ```
338
+ */
339
+ export async function setParticipantPlayback({
340
+ parameters,
341
+ name = '',
342
+ producerId = '',
343
+ kind = 'all',
344
+ paused,
345
+ }: SetParticipantPlaybackOptions): Promise<{ ok: boolean; error: string; affected: number }> {
346
+ try {
347
+ const source: HeadlessParameters = parameters || {};
348
+ const participants = Array.isArray(source.participants) ? source.participants : [];
349
+ const participant = name
350
+ ? participants.find((part: any) => part?.name === name)
351
+ : undefined;
352
+
353
+ const targets = new Set<string>();
354
+ if (producerId) targets.add(producerId);
355
+ const usable = (value: unknown) =>
356
+ typeof value === 'string' && value.length > 3 && value.toLowerCase() !== 'none';
357
+ if (participant) {
358
+ if (kind !== 'video' && usable(participant.audioID)) targets.add(participant.audioID as string);
359
+ if (kind !== 'audio' && usable(participant.videoID)) targets.add(participant.videoID as string);
360
+ }
361
+ if (targets.size === 0) {
362
+ return { ok: false, error: 'That participant is not publishing anything to pause.', affected: 0 };
363
+ }
364
+
365
+ const transports = Array.isArray(source.consumerTransports) ? source.consumerTransports : [];
366
+ let affected = 0;
367
+ for (const entry of transports as any[]) {
368
+ const consumer = entry?.consumer;
369
+ const id = entry?.producerId || consumer?.producerId;
370
+ if (!consumer || !targets.has(id)) continue;
371
+ if (kind !== 'all' && consumer.track?.kind !== kind) continue;
372
+ try {
373
+ if (paused && typeof consumer.pause === 'function') {
374
+ await consumer.pause();
375
+ LOCALLY_PAUSED.add(id);
376
+ affected += 1;
377
+ } else if (!paused && typeof consumer.resume === 'function') {
378
+ await consumer.resume();
379
+ LOCALLY_PAUSED.delete(id);
380
+ affected += 1;
381
+ }
382
+ } catch {
383
+ // One failed consumer must not abort the rest.
384
+ }
385
+ }
386
+ return affected > 0
387
+ ? { ok: true, error: '', affected }
388
+ : { ok: false, error: 'No matching incoming stream was found.', affected: 0 };
389
+ } catch (error: any) {
390
+ return { ok: false, error: error?.message || 'The playback change failed.', affected: 0 };
391
+ }
392
+ }
393
+
394
+ /* ------------------------------------------------------------------ *
395
+ * Breakout room composition
396
+ * ------------------------------------------------------------------ */
397
+
398
+ export type BreakoutParticipantRef = { name: string; breakRoom: number };
399
+
400
+ export interface SetBreakoutRoomsOptions extends HeadlessOptions {
401
+ /** Room composition: index in the outer array is the room number. */
402
+ rooms: BreakoutParticipantRef[][];
403
+ /** What happens to people who join later. Defaults to the room's setting. */
404
+ newParticipantAction?: string;
405
+ }
406
+
407
+ export type SetBreakoutRoomsType = (
408
+ options: SetBreakoutRoomsOptions
409
+ ) => Promise<{ ok: boolean; error: string }>;
410
+
411
+ /**
412
+ * Publish a full breakout-room composition.
413
+ *
414
+ * The SDK models breakout rooms as an array of arrays — outer index is the room
415
+ * number, inner entries are `{ name, breakRoom }`. Adding, removing, or moving
416
+ * someone is therefore just editing that array and re-emitting it; there is no
417
+ * per-participant verb. `startBreakout` opens them, `updateBreakout` amends a
418
+ * running set, and the SDK picks by whether they are already started.
419
+ *
420
+ * Prefer {@link assignParticipantToBreakoutRoom} for single-person changes.
421
+ */
422
+ export async function setBreakoutRooms({
423
+ parameters,
424
+ rooms,
425
+ newParticipantAction,
426
+ }: SetBreakoutRoomsOptions): Promise<{ ok: boolean; error: string }> {
427
+ try {
428
+ const source: HeadlessParameters = parameters || {};
429
+ const socket = source.socket;
430
+ if (!socket || typeof socket.emit !== 'function' || !source.roomName) {
431
+ return { ok: false, error: 'The room connection is not ready.' };
432
+ }
433
+ if (String(source.islevel) !== '2') {
434
+ return { ok: false, error: 'Only the host can change breakout rooms.' };
435
+ }
436
+ const running = source.breakOutRoomStarted === true && source.breakOutRoomEnded !== true;
437
+ const event = running ? 'updateBreakout' : 'startBreakout';
438
+ // Strip anything beyond the two fields the server accepts.
439
+ const payload = (Array.isArray(rooms) ? rooms : []).map((room) =>
440
+ (Array.isArray(room) ? room : []).map(({ name, breakRoom }) => ({ name, breakRoom }))
441
+ );
442
+
443
+ const response = await new Promise<any>((resolve) => {
444
+ socket.emit(
445
+ event,
446
+ {
447
+ breakoutRooms: payload,
448
+ newParticipantAction: newParticipantAction || source.newParticipantAction || 'autoAssignNewRoom',
449
+ roomName: source.roomName,
450
+ },
451
+ resolve
452
+ );
453
+ });
454
+ if (!response?.success) {
455
+ return { ok: false, error: response?.reason || 'The breakout rooms could not be updated.' };
456
+ }
457
+ source.updateBreakoutRooms?.(payload);
458
+ source.updateBreakOutRoomStarted?.(true);
459
+ source.updateBreakOutRoomEnded?.(false);
460
+ return { ok: true, error: '' };
461
+ } catch (error: any) {
462
+ return { ok: false, error: error?.message || 'The breakout rooms could not be updated.' };
463
+ }
464
+ }
465
+
466
+ export interface AssignParticipantToBreakoutRoomOptions extends HeadlessOptions {
467
+ /** Participant display name. */
468
+ name: string;
469
+ /** Destination room index, or `null` to remove them from breakout rooms. */
470
+ room: number | null;
471
+ newParticipantAction?: string;
472
+ }
473
+
474
+ export type AssignParticipantToBreakoutRoomType = (
475
+ options: AssignParticipantToBreakoutRoomOptions
476
+ ) => Promise<{ ok: boolean; error: string }>;
477
+
478
+ /**
479
+ * Add, move, or remove one participant, without rebuilding the whole array.
480
+ *
481
+ * Covers all three cases the composition array makes awkward by hand:
482
+ * `room: 1` adds them to room 1 (or moves them there from wherever they are),
483
+ * `room: null` removes them from breakout rooms entirely. Empty trailing rooms
484
+ * are preserved, because room numbers are positional and collapsing them would
485
+ * silently renumber everyone else.
486
+ *
487
+ * @example
488
+ * ```ts
489
+ * await assignParticipantToBreakoutRoom({ parameters, name: 'Ada', room: 0 }); // add
490
+ * await assignParticipantToBreakoutRoom({ parameters, name: 'Ada', room: 1 }); // move 0 -> 1
491
+ * await assignParticipantToBreakoutRoom({ parameters, name: 'Ada', room: null }); // remove
492
+ * ```
493
+ */
494
+ export async function assignParticipantToBreakoutRoom({
495
+ parameters,
496
+ name,
497
+ room,
498
+ newParticipantAction,
499
+ }: AssignParticipantToBreakoutRoomOptions): Promise<{ ok: boolean; error: string }> {
500
+ const source: HeadlessParameters = parameters || {};
501
+ if (!name) return { ok: false, error: 'A participant name is required.' };
502
+
503
+ const current: BreakoutParticipantRef[][] = Array.isArray(source.breakoutRooms)
504
+ ? source.breakoutRooms.map((entry: any) => (Array.isArray(entry) ? [...entry] : []))
505
+ : [];
506
+ // Remove them from wherever they are, keeping room indices stable.
507
+ const next = current.map((entry) => entry.filter((person: any) => person?.name !== name));
508
+
509
+ if (room !== null && room !== undefined) {
510
+ if (!Number.isInteger(room) || room < 0) {
511
+ return { ok: false, error: 'The destination room must be a room index.' };
512
+ }
513
+ while (next.length <= room) next.push([]);
514
+ next[room].push({ name, breakRoom: room });
515
+ }
516
+ return setBreakoutRooms({ parameters: source, rooms: next, newParticipantAction });
517
+ }
518
+
519
+ export type StopBreakoutRoomsType = (
520
+ options: HeadlessOptions
521
+ ) => Promise<{ ok: boolean; error: string }>;
522
+
523
+ /** Close every breakout room and return everyone to the main room. */
524
+ export async function stopBreakoutRooms({
525
+ parameters,
526
+ }: HeadlessOptions): Promise<{ ok: boolean; error: string }> {
527
+ try {
528
+ const source: HeadlessParameters = parameters || {};
529
+ const socket = source.socket;
530
+ if (!socket || typeof socket.emit !== 'function' || !source.roomName) {
531
+ return { ok: false, error: 'The room connection is not ready.' };
532
+ }
533
+ if (String(source.islevel) !== '2') {
534
+ return { ok: false, error: 'Only the host can stop breakout rooms.' };
535
+ }
536
+ const response = await new Promise<any>((resolve) => {
537
+ socket.emit('stopBreakout', { roomName: source.roomName }, resolve);
538
+ });
539
+ if (!response?.success) {
540
+ return { ok: false, error: response?.reason || 'The breakout rooms could not be stopped.' };
541
+ }
542
+ source.updateBreakOutRoomStarted?.(false);
543
+ source.updateBreakOutRoomEnded?.(true);
544
+ return { ok: true, error: '' };
545
+ } catch (error: any) {
546
+ return { ok: false, error: error?.message || 'The breakout rooms could not be stopped.' };
547
+ }
548
+ }
549
+
550
+ export type ReapplyLocalPlaybackType = (
551
+ options: HeadlessOptions
552
+ ) => Promise<{ ok: boolean; error: string; affected: number }>;
553
+
554
+ /**
555
+ * Re-assert every local playback choice.
556
+ *
557
+ * Call this whenever media changes — `onMediaChanged` is the natural place. The
558
+ * SDK layout pass resumes consumers it believes should be visible, which would
559
+ * otherwise silently undo "do not play this person to me" the moment the active
560
+ * speaker changes. Without this the feature appears to work and then quietly
561
+ * stops working, which is worse than not having it.
562
+ *
563
+ * A no-op when nothing is locally paused.
564
+ */
565
+ export async function reapplyLocalPlayback({
566
+ parameters,
567
+ }: HeadlessOptions): Promise<{ ok: boolean; error: string; affected: number }> {
568
+ if (LOCALLY_PAUSED.size === 0) return { ok: true, error: '', affected: 0 };
569
+ try {
570
+ const source: HeadlessParameters = parameters || {};
571
+ const transports = Array.isArray(source.consumerTransports) ? source.consumerTransports : [];
572
+ let affected = 0;
573
+ for (const entry of transports as any[]) {
574
+ const consumer = entry?.consumer;
575
+ const id = entry?.producerId || consumer?.producerId;
576
+ if (!consumer || !LOCALLY_PAUSED.has(id)) continue;
577
+ if (consumer.paused === true) continue;
578
+ try {
579
+ if (typeof consumer.pause === 'function') { await consumer.pause(); affected += 1; }
580
+ } catch {
581
+ // Re-assertion is best-effort; a closed consumer is not an error.
582
+ }
583
+ }
584
+ return { ok: true, error: '', affected };
585
+ } catch (error: any) {
586
+ return { ok: false, error: error?.message || 'Playback could not be re-applied.', affected: 0 };
587
+ }
588
+ }
589
+
590
+ /** Producer ids currently muted for this viewer only. */
591
+ export function getLocallyPausedProducerIds(): string[] {
592
+ return Array.from(LOCALLY_PAUSED);
593
+ }