mediasfu-shared 1.0.6 → 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 -13249
  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 -13222
  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 +33 -28
  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
@@ -1,3 +1,4 @@
1
+ export * from './types/types';
1
2
  export * from './consumers/autoAdjust';
2
3
  export * from './consumers/calculateRowsAndColumns';
3
4
  export * from './consumers/changeVids';
@@ -217,4 +218,26 @@ export * from './producers/producerEmits/joinRoom';
217
218
 
218
219
  export * from './sockets/SocketManager';
219
220
 
220
- export * from './methods/stream/clickVideo';
221
+ export * from './methods/stream/clickVideo';
222
+
223
+ // Native headless exports deliberately omit virtualBackground because native
224
+ // runtimes do not provide the browser canvas-backed captureStream() pipeline.
225
+ export * from './methods/utils/headless/headlessTypes';
226
+ export * from './methods/utils/headless/getRoomReadiness';
227
+ export * from './methods/utils/headless/getMediaStreams';
228
+ export * from './methods/utils/headless/getCurrentParams';
229
+ export * from './methods/utils/headless/roomActions';
230
+ export * from './methods/utils/headless/participantState';
231
+ export * from './methods/utils/headless/mediaPermissions';
232
+ export * from './methods/utils/headless/moderation';
233
+ export * from './methods/utils/headless/sessionFeatures';
234
+ export * from './methods/utils/headless/sessionExtras';
235
+ export * from './methods/utils/headless/sessionControls';
236
+ // WHEP works through a compatible native WebRTC implementation. HLS requires a
237
+ // platform player and reports a clear unsupported error when none is supplied.
238
+ export * from './methods/utils/headless/playback';
239
+ export * from './methods/utils/headless/viewerSession';
240
+ export * from './methods/utils/headless/mediaProduction';
241
+ export * from './methods/utils/getParticipantMedia';
242
+
243
+ export * from './ProducerClient/producerClientEmits/createDeviceClient';
package/src/index.ts CHANGED
@@ -223,3 +223,8 @@ export * from './producers/producerEmits/joinRoom';
223
223
  export * from './sockets/SocketManager';
224
224
  // Stream method exports (clickVideo)
225
225
  export * from './methods/stream/clickVideo';
226
+
227
+ // Framework-neutral headless helper suite. The web entry includes
228
+ // virtualBackground, which requires an offscreen canvas and captureStream().
229
+ export * from './methods/utils/headless';
230
+ export * from './methods/utils/getParticipantMedia';
@@ -6,6 +6,8 @@ export interface ConfirmExitOptions {
6
6
  member: string
7
7
  roomName: string
8
8
  ban?: boolean
9
+ /** Whether a host exit should end the room for everyone. Defaults to true. */
10
+ endRoomOnHostExit?: boolean
9
11
  }
10
12
 
11
13
  // Export the type definition for the function
@@ -20,6 +22,7 @@ export type ConfirmExitType = (options: ConfirmExitOptions) => Promise<void>
20
22
  * @param {string} options.member - The member who is exiting.
21
23
  * @param {string} options.roomName - The name of the room the member is exiting from.
22
24
  * @param {boolean} [options.ban=false] - Whether to ban the member from the room.
25
+ * @param {boolean} [options.endRoomOnHostExit=true] - Whether a host exit ends the room for everyone.
23
26
  * @returns {Promise<void>} A promise that resolves when the exit is confirmed.
24
27
  *
25
28
  * @example
@@ -29,7 +32,8 @@ export type ConfirmExitType = (options: ConfirmExitOptions) => Promise<void>
29
32
  * localSocket: localSocketInstance,
30
33
  * member: "JohnDoe",
31
34
  * roomName: "Room123",
32
- * ban: true,
35
+ * ban: false,
36
+ * endRoomOnHostExit: false, // Let the host rejoin without ending the room.
33
37
  * };
34
38
  * await confirmExit(options);
35
39
  * ```
@@ -40,13 +44,15 @@ export const confirmExit = async ({
40
44
  localSocket,
41
45
  member,
42
46
  roomName,
43
- ban = false
47
+ ban = false,
48
+ endRoomOnHostExit = true
44
49
  }: ConfirmExitOptions): Promise<void> => {
45
50
  // Emit a socket event to disconnect the user from the room
46
51
  socket.emit('disconnectUser', {
47
52
  member: member,
48
53
  roomName: roomName,
49
- ban: ban
54
+ ban: ban,
55
+ endRoomOnHostExit
50
56
  })
51
57
 
52
58
  if (localSocket && localSocket.id) {
@@ -54,7 +60,8 @@ export const confirmExit = async ({
54
60
  localSocket.emit('disconnectUser', {
55
61
  member: member,
56
62
  roomName: roomName,
57
- ban: ban
63
+ ban: ban,
64
+ endRoomOnHostExit
58
65
  })
59
66
  }
60
67
  }
@@ -0,0 +1,112 @@
1
+ import { Participant, Stream } from '../../types/types';
2
+
3
+ export interface GetParticipantMediaOptions {
4
+ /**
5
+ * A participant id, or a producer id when the caller already holds one.
6
+ */
7
+ id?: string;
8
+ /** A participant display name. Used when `id` resolves nothing. */
9
+ name?: string;
10
+ /** Which media to resolve. Defaults to `video`. */
11
+ kind?: 'video' | 'audio';
12
+ /**
13
+ * The MediaSFU parameter bag — the object handed to `updateSourceParameters`,
14
+ * or anything exposing `participants`, `allVideoStreams` and `allAudioStreams`.
15
+ */
16
+ parameters: {
17
+ participants?: Participant[];
18
+ allVideoStreams?: (Participant | Stream)[];
19
+ allAudioStreams?: (Participant | Stream)[];
20
+ getCurrentParams?: () => any;
21
+ getUpdatedAllParams?: () => any;
22
+ [key: string]: any;
23
+ };
24
+ }
25
+
26
+ export type GetParticipantMediaType = (
27
+ options: GetParticipantMediaOptions
28
+ ) => Promise<MediaStream | null>;
29
+
30
+ /**
31
+ * Resolve a participant's live MediaStream from a MediaSFU parameter bag.
32
+ *
33
+ * This is the SDK-level counterpart of the `getParticipantMedia` helper that
34
+ * MediaSFU components publish through `sourceParameters`. That helper remains
35
+ * available for backwards compatibility; prefer this export when you drive the
36
+ * SDK headlessly (`returnUI={false}`) and only hold the parameter bag.
37
+ *
38
+ * Resolution order:
39
+ * 1. `parameters.participants` matched by `id`, then by `name`.
40
+ * 2. The matched participant's `videoID` / `audioID`, looked up against
41
+ * `allVideoStreams` / `allAudioStreams` by `producerId`. These collections
42
+ * are keyed by producer id only — a participant's `id` is its membership id
43
+ * and never matches, which is why an id-keyed lookup silently returns null.
44
+ * 3. `id` treated directly as a producer id, for callers that already hold one.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * import { getParticipantMedia } from 'mediasfu-reactjs';
49
+ *
50
+ * const stream = await getParticipantMedia({
51
+ * name: 'Paul',
52
+ * kind: 'video',
53
+ * parameters: sourceParameters.current,
54
+ * });
55
+ * if (stream) videoElement.srcObject = stream;
56
+ * ```
57
+ */
58
+ export async function getParticipantMedia({
59
+ id = '',
60
+ name = '',
61
+ kind = 'video',
62
+ parameters,
63
+ }: GetParticipantMediaOptions): Promise<MediaStream | null> {
64
+ try {
65
+ if (!parameters) return null;
66
+ // Prefer the freshest bag when the caller holds an older snapshot.
67
+ const live =
68
+ typeof parameters.getCurrentParams === 'function'
69
+ ? parameters.getCurrentParams() || parameters
70
+ : parameters;
71
+
72
+ const participants: Participant[] = Array.isArray(live.participants)
73
+ ? live.participants
74
+ : [];
75
+ const streams: (Participant | Stream)[] = Array.isArray(
76
+ kind === 'video' ? live.allVideoStreams : live.allAudioStreams
77
+ )
78
+ ? kind === 'video'
79
+ ? live.allVideoStreams
80
+ : live.allAudioStreams
81
+ : [];
82
+ if (streams.length === 0) return null;
83
+
84
+ let participant = id
85
+ ? participants.find((part) => part.id === id)
86
+ : undefined;
87
+ if (!participant && name) {
88
+ participant = participants.find((part) => part.name === name);
89
+ }
90
+
91
+ const producerId = participant
92
+ ? kind === 'video'
93
+ ? participant.videoID
94
+ : participant.audioID
95
+ : '';
96
+ if (producerId) {
97
+ const match = streams.find((stream) => stream.producerId === producerId);
98
+ if (match && match.stream) return match.stream;
99
+ }
100
+
101
+ if (id) {
102
+ const direct = streams.find((stream) => stream.producerId === id);
103
+ if (direct && direct.stream) return direct.stream;
104
+ }
105
+
106
+ return null;
107
+ } catch {
108
+ return null;
109
+ }
110
+ }
111
+
112
+ export default getParticipantMedia;
@@ -0,0 +1,44 @@
1
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
2
+
3
+ export type GetCurrentParamsType = (
4
+ options: HeadlessOptions
5
+ ) => HeadlessParameters;
6
+
7
+ /**
8
+ * Read the freshest parameter bag **without** triggering a republish.
9
+ *
10
+ * `parameters.getUpdatedAllParams()` looks like a getter but is not one: it
11
+ * reassigns `sourceParameters` and calls `updateSourceParameters` as a side
12
+ * effect. Calling it from a React event handler or a polling loop therefore
13
+ * re-enters your own update path, which at best causes a render storm and at
14
+ * worst locks the tab before `getUserMedia` resolves.
15
+ *
16
+ * MediaSFU components now publish a pure `getCurrentParams()` on the bag; this
17
+ * helper uses it when present and otherwise returns the bag you already hold.
18
+ * It never calls `getUpdatedAllParams()` and never throws.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { getCurrentParams } from 'mediasfu-shared';
23
+ *
24
+ * // Safe inside a click handler — no re-entrant publish.
25
+ * const live = getCurrentParams({ parameters: parameterStore.getCurrent() });
26
+ * await live.clickVideo({ parameters: live });
27
+ * ```
28
+ */
29
+ export function getCurrentParams({
30
+ parameters,
31
+ }: HeadlessOptions): HeadlessParameters {
32
+ const source = parameters || {};
33
+ if (typeof source.getCurrentParams === 'function') {
34
+ try {
35
+ const refreshed = source.getCurrentParams();
36
+ if (refreshed && typeof refreshed === 'object') return refreshed;
37
+ } catch {
38
+ // Fall through to the bag the caller already holds.
39
+ }
40
+ }
41
+ return source;
42
+ }
43
+
44
+ export default getCurrentParams;
@@ -0,0 +1,256 @@
1
+ import { Participant, Stream } from '../../../types/types';
2
+ import { HeadlessOptions, HeadlessParameters, ResolvedMedia } from './headlessTypes';
3
+
4
+ /**
5
+ * MediaSFU seeds its own grid collections with a self marker rather than a real
6
+ * producer. Rendering it as a remote peer shows the local user twice.
7
+ */
8
+ const SELF_PRODUCER_IDS = new Set(['youyou', 'youyouyou']);
9
+
10
+ function toMediaStream(value: any): MediaStream | null {
11
+ if (value && typeof value.getTracks === 'function') return value as MediaStream;
12
+ const nested = value?.stream;
13
+ return nested && typeof nested.getTracks === 'function'
14
+ ? (nested as MediaStream)
15
+ : null;
16
+ }
17
+
18
+
19
+ /**
20
+ * A stream is only renderable if it still carries a live track of that kind.
21
+ *
22
+ * MediaSFU keeps `localStreamVideo` assigned after the camera is switched off —
23
+ * the track goes `enabled: false` or `readyState: 'ended'` rather than the
24
+ * field being cleared. Returning it regardless paints a black <video> instead
25
+ * of falling back to an audio or identity card.
26
+ *
27
+ * `enabled` is only meaningful for local media: the app clears it when the user
28
+ * turns their own camera off. It is never applied to remote tracks, where
29
+ * `muted: true` is a normal transient state before the first frame decodes.
30
+ */
31
+ function hasRenderableTrack(
32
+ stream: MediaStream | null,
33
+ kind: 'video' | 'audio',
34
+ requireEnabled: boolean
35
+ ): stream is MediaStream {
36
+ if (!stream || typeof stream.getTracks !== 'function') return false;
37
+ try {
38
+ return stream.getTracks().some(
39
+ (track) =>
40
+ track.kind === kind &&
41
+ track.readyState === 'live' &&
42
+ (!requireEnabled || track.enabled !== false)
43
+ );
44
+ } catch {
45
+ return false;
46
+ }
47
+ }
48
+
49
+ function collect(
50
+ entries: (Participant | Stream)[] | undefined
51
+ ): (Participant | Stream)[] {
52
+ return Array.isArray(entries) ? entries : [];
53
+ }
54
+
55
+ function dedupe(entries: (Participant | Stream)[]): ResolvedMedia[] {
56
+ const seen = new Set<string>();
57
+ const resolved: ResolvedMedia[] = [];
58
+ for (const entry of entries) {
59
+ const producerId = (entry as any)?.producerId || '';
60
+ if (SELF_PRODUCER_IDS.has(producerId)) continue;
61
+ const stream = toMediaStream(entry);
62
+ if (!hasRenderableTrack(stream, 'video', false)) continue;
63
+ const key = producerId || stream.id || '';
64
+ if (key && seen.has(key)) continue;
65
+ if (key) seen.add(key);
66
+ resolved.push({
67
+ stream,
68
+ producerId,
69
+ name: (entry as any)?.name || '',
70
+ });
71
+ }
72
+ return resolved;
73
+ }
74
+
75
+ export type GetRemoteVideoStreamsType = (
76
+ options: HeadlessOptions
77
+ ) => ResolvedMedia[];
78
+
79
+ /**
80
+ * Every remote camera in the room, in render order.
81
+ *
82
+ * Two details make this hard to get right by hand, and both are why headless
83
+ * integrations lose the host's video:
84
+ *
85
+ * - **`oldAllStreams` matters.** During normal conference layout processing the
86
+ * SDK moves a stream out of `allVideoStreams` into `oldAllStreams`. Reading
87
+ * only `allVideoStreams` makes the host disappear mid-call.
88
+ * - **The self marker must go.** `allVideoStreams` is seeded with a
89
+ * `producerId: 'youyou'` placeholder for the local user.
90
+ *
91
+ * Entries are de-duplicated by `producerId`, falling back to the stream id, so a
92
+ * stream present in both collections is returned once.
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * import { getRemoteVideoStreams } from 'mediasfu-shared';
97
+ *
98
+ * const remotes = getRemoteVideoStreams({ parameters });
99
+ * const primary = remotes[0]?.stream ?? null;
100
+ * ```
101
+ */
102
+ export function getRemoteVideoStreams({
103
+ parameters,
104
+ }: HeadlessOptions): ResolvedMedia[] {
105
+ const source: HeadlessParameters = parameters || {};
106
+ return dedupe([
107
+ ...collect(source.oldAllStreams),
108
+ ...collect(source.allVideoStreams),
109
+ ]);
110
+ }
111
+
112
+ export type GetRemoteAudioStreamsType = (
113
+ options: HeadlessOptions
114
+ ) => ResolvedMedia[];
115
+
116
+ /**
117
+ * Every remote audio producer in the room.
118
+ *
119
+ * Note that for *hearing* participants you normally want
120
+ * {@link getAudioGridComponents} instead — MediaSFU prepares its own audio
121
+ * elements and mounting those is what actually plays sound. This helper is for
122
+ * cases where you need the raw `MediaStream` (recording, analysis, metering).
123
+ */
124
+ export function getRemoteAudioStreams({
125
+ parameters,
126
+ }: HeadlessOptions): ResolvedMedia[] {
127
+ const source: HeadlessParameters = parameters || {};
128
+ return dedupe(collect(source.allAudioStreams));
129
+ }
130
+
131
+ export type GetLocalVideoStreamType = (
132
+ options: HeadlessOptions
133
+ ) => MediaStream | null;
134
+
135
+ /**
136
+ * The local camera stream to render as the self-view.
137
+ *
138
+ * The virtual-background case is the one everyone misses: when `keepBackground`
139
+ * is on, the stream that carries the processed frames is `virtualStream`, and
140
+ * `localStreamVideo` still holds the raw camera. Rendering the wrong one shows
141
+ * the user their unprocessed background. This mirrors the SDK's own grid rule.
142
+ *
143
+ * Returns `null` when the camera is off, so a falsy result is a truthful
144
+ * "no self-view" rather than something to paint black.
145
+ *
146
+ * Note: transport state such as `videoParams` or `videoProducer` is **not**
147
+ * renderable media and is deliberately never consulted here.
148
+ */
149
+ export function getLocalVideoStream({
150
+ parameters,
151
+ }: HeadlessOptions): MediaStream | null {
152
+ const source: HeadlessParameters = parameters || {};
153
+ if (source.keepBackground && source.virtualStream) {
154
+ const virtual = toMediaStream(source.virtualStream);
155
+ if (hasRenderableTrack(virtual, 'video', true)) return virtual;
156
+ }
157
+ const camera = toMediaStream(source.localStreamVideo);
158
+ if (hasRenderableTrack(camera, 'video', true)) return camera;
159
+ const combined = toMediaStream(source.localStream);
160
+ return hasRenderableTrack(combined, 'video', true) ? combined : null;
161
+ }
162
+
163
+ export type GetLocalAudioStreamType = (
164
+ options: HeadlessOptions
165
+ ) => MediaStream | null;
166
+
167
+ /** The local microphone stream, or `null` when the mic is off. */
168
+ export function getLocalAudioStream({
169
+ parameters,
170
+ }: HeadlessOptions): MediaStream | null {
171
+ const source: HeadlessParameters = parameters || {};
172
+ const mic = toMediaStream(source.localStreamAudio);
173
+ if (hasRenderableTrack(mic, 'audio', true)) return mic;
174
+ const combined = toMediaStream(source.localStream);
175
+ return hasRenderableTrack(combined, 'audio', true) ? combined : null;
176
+ }
177
+
178
+ export interface ScreenShareState {
179
+ /** The stream to render, local or remote, or `null` when nobody is sharing. */
180
+ stream: MediaStream | null;
181
+ /** True when the stream is this user's own screen. */
182
+ isLocal: boolean;
183
+ /** True when any screen share is active in the room. */
184
+ active: boolean;
185
+ }
186
+
187
+ export type GetScreenShareStreamType = (
188
+ options: HeadlessOptions
189
+ ) => ScreenShareState;
190
+
191
+ /**
192
+ * The active screen share, remote first.
193
+ *
194
+ * `remoteScreenStream` is an array in some SDK paths and a bare object in
195
+ * others; both shapes are handled here so callers do not have to guess.
196
+ *
197
+ * @example
198
+ * ```ts
199
+ * const share = getScreenShareStream({ parameters });
200
+ * const primary = share.stream ?? remotes[0]?.stream ?? localVideo;
201
+ * ```
202
+ */
203
+ export function getScreenShareStream({
204
+ parameters,
205
+ }: HeadlessOptions): ScreenShareState {
206
+ const source: HeadlessParameters = parameters || {};
207
+ const remoteRaw: any = source.remoteScreenStream;
208
+ const remote = Array.isArray(remoteRaw)
209
+ ? toMediaStream(remoteRaw[0])
210
+ : toMediaStream(remoteRaw);
211
+ // Liveness matters most here. When a sharer stops, the SDK ends the track but
212
+ // `remoteScreenStream` keeps referencing it, so a viewer that trusts the field
213
+ // renders a dead track — a screen share that "ends" into a black stage.
214
+ // `enabled` is not required: it is a local-only flag and never set on a
215
+ // received screen track.
216
+ if (hasRenderableTrack(remote, 'video', false)) {
217
+ return { stream: remote, isLocal: false, active: true };
218
+ }
219
+
220
+ const local = toMediaStream(source.localStreamScreen);
221
+ if (hasRenderableTrack(local, 'video', true)) {
222
+ return { stream: local, isLocal: true, active: true };
223
+ }
224
+
225
+ return {
226
+ stream: null,
227
+ isLocal: false,
228
+ active: Boolean(source.shareScreenStarted || source.shared),
229
+ };
230
+ }
231
+
232
+ export type GetAudioGridComponentsType = (options: HeadlessOptions) => any[];
233
+
234
+ /**
235
+ * The prepared audio elements to mount so participants are actually audible.
236
+ *
237
+ * Mount **all** of them. Truncating this list to the participants you happen to
238
+ * draw on screen silently mutes everyone else — audio playback is decoupled from
239
+ * your video layout. The usual pattern is a visually hidden container:
240
+ *
241
+ * @example
242
+ * ```tsx
243
+ * import { getAudioGridComponents } from 'mediasfu-shared';
244
+ *
245
+ * <div style={{ position: 'absolute', width: 1, height: 1, opacity: 0 }}>
246
+ * <AudioGrid componentsToRender={getAudioGridComponents({ parameters })} />
247
+ * </div>
248
+ * ```
249
+ */
250
+ export function getAudioGridComponents({ parameters }: HeadlessOptions): any[] {
251
+ const source: HeadlessParameters = parameters || {};
252
+ return [
253
+ ...(Array.isArray(source.audioOnlyStreams) ? source.audioOnlyStreams : []),
254
+ ...(Array.isArray(source.translationStreams) ? source.translationStreams : []),
255
+ ].filter(Boolean);
256
+ }
@@ -0,0 +1,49 @@
1
+ import { HeadlessOptions, RoomReadiness } from './headlessTypes';
2
+
3
+ export type GetRoomReadinessType = (options: HeadlessOptions) => RoomReadiness;
4
+
5
+ /**
6
+ * Is the room actually usable yet?
7
+ *
8
+ * Headless consumers repeatedly re-derive this same predicate and each one picks
9
+ * a slightly different subset, so a control fires before the transport exists
10
+ * and fails silently. The five conditions below are the real gate: a room name,
11
+ * a member identity, server-side validation, a connected emittable socket, and a
12
+ * loaded mediasoup device.
13
+ *
14
+ * `reason` is safe to show a user — it names what is still pending, never an
15
+ * endpoint, credential, or internal identifier.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { getRoomReadiness } from 'mediasfu-shared';
20
+ *
21
+ * const { ready, reason } = getRoomReadiness({ parameters });
22
+ * if (!ready) return <p>{reason}</p>;
23
+ * ```
24
+ */
25
+ export function getRoomReadiness({ parameters }: HeadlessOptions): RoomReadiness {
26
+ const source = parameters || {};
27
+ if (!source.roomName) {
28
+ return { ready: false, reason: 'Waiting for the room name.' };
29
+ }
30
+ if (!source.member) {
31
+ return { ready: false, reason: 'Waiting for the participant identity.' };
32
+ }
33
+ if (source.validated !== true) {
34
+ return { ready: false, reason: 'Waiting for MediaSFU to validate the room.' };
35
+ }
36
+ const socket = source.socket;
37
+ if (!socket || socket.connected !== true) {
38
+ return { ready: false, reason: 'Connecting to the MediaSFU room.' };
39
+ }
40
+ if (typeof socket.emit !== 'function') {
41
+ return { ready: false, reason: 'The room signal is not ready yet.' };
42
+ }
43
+ if (source.device?.loaded !== true) {
44
+ return { ready: false, reason: 'Waiting for the MediaSFU media device.' };
45
+ }
46
+ return { ready: true, reason: '' };
47
+ }
48
+
49
+ export default getRoomReadiness;
@@ -0,0 +1,102 @@
1
+ import { Participant, Stream } from '../../../types/types';
2
+
3
+ /**
4
+ * The MediaSFU parameter bag.
5
+ *
6
+ * This is the object handed to `updateSourceParameters`. Every field on it is a
7
+ * snapshot of an internal ref (`allVideoStreams.current`, `localStreamVideo.current`,
8
+ * …) taken at publish time, and the SDK **reassigns** those refs rather than
9
+ * mutating them — so a bag you hold onto goes stale as soon as a producer or
10
+ * consumer changes. Always read from the most recent publication.
11
+ */
12
+ export interface HeadlessParameters {
13
+ // Room identity / readiness
14
+ roomName?: string;
15
+ member?: string;
16
+ islevel?: string;
17
+ validated?: boolean;
18
+ socket?: any;
19
+ localSocket?: any;
20
+ device?: { loaded?: boolean; [key: string]: any };
21
+
22
+ // Participants
23
+ participants?: Participant[];
24
+ participantsAll?: Participant[];
25
+
26
+ // Media collections
27
+ allVideoStreams?: (Participant | Stream)[];
28
+ allAudioStreams?: (Participant | Stream)[];
29
+ oldAllStreams?: (Participant | Stream)[];
30
+ audioOnlyStreams?: any[];
31
+ translationStreams?: any[];
32
+
33
+ // Local media
34
+ localStream?: MediaStream | null;
35
+ localStreamVideo?: MediaStream | null;
36
+ localStreamAudio?: MediaStream | null;
37
+ localStreamScreen?: MediaStream | null;
38
+ virtualStream?: MediaStream | null;
39
+ keepBackground?: boolean;
40
+ audioAlreadyOn?: boolean;
41
+ videoAlreadyOn?: boolean;
42
+
43
+ // Screen share
44
+ remoteScreenStream?: (Participant | Stream)[] | { stream?: MediaStream } | null;
45
+ shareScreenStarted?: boolean;
46
+ shared?: boolean;
47
+
48
+ // Chat
49
+ messages?: any[];
50
+ coHost?: string;
51
+ coHostResponsibility?: any[];
52
+ chatSetting?: string;
53
+ showAlert?: (options: any) => void;
54
+
55
+ // Audio activity
56
+ audioLevel?: number;
57
+ audioDecibels?: { name: string; averageLoudness: number }[];
58
+
59
+ // SDK function map
60
+ /** Republishes as a side effect — prefer `getCurrentParams`. */
61
+ getUpdatedAllParams?: () => any;
62
+ /** Pure read of the current bag. No republish. */
63
+ getCurrentParams?: () => any;
64
+ getParticipantMedia?: (...args: any[]) => Promise<MediaStream | null>;
65
+ getMediaDevicesList?: (
66
+ kind: 'videoinput' | 'audioinput'
67
+ ) => Promise<MediaDeviceInfo[]>;
68
+ updateAutoWave?: (value: boolean) => void;
69
+
70
+ /**
71
+ * Server-provided playback URLs, when the room has them provisioned.
72
+ *
73
+ * Unlike WebRTC media these are never consumed automatically — see
74
+ * getPlaybackSources/attachPlayback. Absence means the room has no HLS or
75
+ * WHEP egress, not an error.
76
+ */
77
+ hlsUrl?: string;
78
+ hlsPlaybackUrl?: string;
79
+ playbackUrl?: string;
80
+ whepUrl?: string;
81
+ whepPlaybackUrl?: string;
82
+ [key: string]: any;
83
+ }
84
+
85
+ export interface HeadlessOptions {
86
+ /** The most recent parameter bag from `updateSourceParameters`. */
87
+ parameters: HeadlessParameters;
88
+ }
89
+
90
+ /** A resolved media entry with the producer reference that identifies it. */
91
+ export interface ResolvedMedia {
92
+ stream: MediaStream;
93
+ producerId: string;
94
+ /** Participant display name when the SDK exposes one for this producer. */
95
+ name: string;
96
+ }
97
+
98
+ export interface RoomReadiness {
99
+ ready: boolean;
100
+ /** Empty when ready; otherwise a short, user-safe explanation. */
101
+ reason: string;
102
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Headless helpers for `returnUI={false}` integrations.
3
+ *
4
+ * These exist because every headless consumer was re-deriving the same handful
5
+ * of rules from the raw parameter bag, and getting them subtly wrong in ways
6
+ * that only show up on a live call: a host whose video vanishes when the SDK
7
+ * moves their stream to `oldAllStreams`, participants who are silently
8
+ * inaudible because the audio element list was truncated, a self-view showing
9
+ * the unprocessed camera when a virtual background is on, or a tab that locks
10
+ * because `getUpdatedAllParams()` was called from a click handler.
11
+ *
12
+ * Import the individual helpers when your adapter needs finer control.
13
+ */
14
+ export * from './headlessTypes';
15
+ export * from './getRoomReadiness';
16
+ export * from './getMediaStreams';
17
+ export * from './getCurrentParams';
18
+ export * from './roomActions';
19
+ export * from './participantState';
20
+ export * from './mediaPermissions';
21
+ export * from './moderation';
22
+ export * from './sessionFeatures';
23
+ export * from './sessionExtras';
24
+ export * from './virtualBackground';
25
+ export * from './sessionControls';
26
+ export * from './playback';
27
+ export * from './viewerSession';
28
+ export * from './mediaProduction';