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,246 @@
1
+ /**
2
+ * Viewers who are part of a session without joining the room.
3
+ *
4
+ * **Why this exists.** Joining a MediaSFU room auto-consumes WebRTC: the SDK
5
+ * creates consumers from the server's `newProducer` events, unconditionally —
6
+ * there is no receive-nothing mode. For a large passive audience watching over
7
+ * HLS that is pure waste: transports, consumers and layout churn for media they
8
+ * will never render. Joining and then pausing the consumers is worse than it
9
+ * looks, because the layout pass keeps resuming them.
10
+ *
11
+ * So an HLS viewer does not join at all. They hold a *viewer session* instead —
12
+ * enough to be counted, to raise a hand, and to be told when the host approves —
13
+ * and they only perform a real SDK join at the moment they reach the floor.
14
+ *
15
+ * How that session is stored is deliberately not decided here. The transport,
16
+ * lifecycle and state machine are the SDK's business; issuing playback URLs and
17
+ * tracking presence belong to whatever backend you run. You supply a
18
+ * `ViewerSessionProvider`; this drives it. Same reasoning as `hlsFactory`: the
19
+ * SDK owns the mechanism, the app owns the dependency.
20
+ */
21
+
22
+ export type ViewerSessionPhase =
23
+ | 'idle'
24
+ | 'joining'
25
+ | 'watching'
26
+ | 'requested'
27
+ | 'approved'
28
+ | 'left'
29
+ | 'error';
30
+
31
+ export interface ViewerSessionIdentity {
32
+ /** Opaque id for this viewer, issued by the provider. */
33
+ viewerId: string;
34
+ /** The room being watched. */
35
+ roomName: string;
36
+ /** Where to play from. Absent until the provider issues one. */
37
+ playbackUrl?: string;
38
+ /** 'hls' or 'whep'; inferred from the URL when omitted. */
39
+ protocol?: 'hls' | 'whep';
40
+ /** Anything the provider needs handed back on later calls. */
41
+ token?: string;
42
+ [key: string]: any;
43
+ }
44
+
45
+ export interface ViewerSessionStatus {
46
+ /** True once the host has approved this viewer for the floor. */
47
+ approved: boolean;
48
+ /** True while a request is outstanding. */
49
+ pending?: boolean;
50
+ /** Free-text reason when a request was refused. */
51
+ reason?: string;
52
+ /** Provider may refresh the playback URL (signed URLs expire). */
53
+ playbackUrl?: string;
54
+ }
55
+
56
+ /**
57
+ * What your backend has to do. Only `join` is required — a provider that just
58
+ * hands back a playback URL is a valid provider, it simply cannot support
59
+ * promotion.
60
+ */
61
+ export interface ViewerSessionProvider {
62
+ join(options: {
63
+ roomName: string;
64
+ displayName?: string;
65
+ signal?: AbortSignal;
66
+ }): Promise<ViewerSessionIdentity>;
67
+ /** Keep the viewer counted as present. */
68
+ heartbeat?(options: { session: ViewerSessionIdentity; signal?: AbortSignal }): Promise<void>;
69
+ /** Raise a hand for the floor. */
70
+ requestPromotion?(options: { session: ViewerSessionIdentity; signal?: AbortSignal }): Promise<void>;
71
+ /** Has the host decided yet? */
72
+ poll?(options: { session: ViewerSessionIdentity; signal?: AbortSignal }): Promise<ViewerSessionStatus>;
73
+ /** Release the session. */
74
+ leave?(options: { session: ViewerSessionIdentity }): Promise<void>;
75
+ }
76
+
77
+ export interface ViewerSessionSnapshot {
78
+ phase: ViewerSessionPhase;
79
+ session: ViewerSessionIdentity | null;
80
+ status: ViewerSessionStatus | null;
81
+ error: string;
82
+ /** True when the provider can accept a promotion request at all. */
83
+ canRequestPromotion: boolean;
84
+ }
85
+
86
+ export interface CreateViewerSessionOptions {
87
+ provider: ViewerSessionProvider;
88
+ roomName: string;
89
+ displayName?: string;
90
+ /** Poll interval for approval, ms. Defaults to 5000. */
91
+ pollIntervalMs?: number;
92
+ /** Heartbeat interval, ms. Defaults to 30000. Ignored without a heartbeat. */
93
+ heartbeatIntervalMs?: number;
94
+ /** Called on every state change. */
95
+ onChange?: (snapshot: ViewerSessionSnapshot) => void;
96
+ }
97
+
98
+ export interface ViewerSessionHandle {
99
+ /** Current state, readable at any time. */
100
+ getSnapshot: () => ViewerSessionSnapshot;
101
+ /** Register with the provider and begin watching. */
102
+ start: () => Promise<ViewerSessionSnapshot>;
103
+ /** Raise a hand for the floor. */
104
+ requestPromotion: () => Promise<ViewerSessionSnapshot>;
105
+ /** Stop everything and release the session. */
106
+ stop: () => Promise<void>;
107
+ }
108
+
109
+ const MIN_INTERVAL_MS = 1000;
110
+
111
+ /**
112
+ * Drive a viewer session.
113
+ *
114
+ * Deliberately framework-agnostic — no hooks, no observables — so the same
115
+ * implementation serves React, Vue and Angular. Wrap it in whatever your
116
+ * framework prefers.
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const viewer = createViewerSession({
121
+ * provider: myProvider,
122
+ * roomName,
123
+ * onChange: (snapshot) => setState(snapshot),
124
+ * });
125
+ * await viewer.start(); // watching over HLS, never joined
126
+ * await viewer.requestPromotion(); // hand raised
127
+ * // when snapshot.phase === 'approved', perform a real SDK join.
128
+ * ```
129
+ */
130
+ export function createViewerSession({
131
+ provider,
132
+ roomName,
133
+ displayName,
134
+ pollIntervalMs = 5000,
135
+ heartbeatIntervalMs = 30000,
136
+ onChange,
137
+ }: CreateViewerSessionOptions): ViewerSessionHandle {
138
+ let snapshot: ViewerSessionSnapshot = {
139
+ phase: 'idle',
140
+ session: null,
141
+ status: null,
142
+ error: '',
143
+ canRequestPromotion: typeof provider?.requestPromotion === 'function',
144
+ };
145
+ let pollTimer: any = null;
146
+ let heartbeatTimer: any = null;
147
+ let stopped = false;
148
+
149
+ const emit = (next: Partial<ViewerSessionSnapshot>) => {
150
+ snapshot = { ...snapshot, ...next };
151
+ try {
152
+ onChange?.(snapshot);
153
+ } catch {
154
+ // A consumer's observer must never break the session.
155
+ }
156
+ };
157
+
158
+ const clearTimers = () => {
159
+ if (pollTimer) { clearInterval(pollTimer); pollTimer = null; }
160
+ if (heartbeatTimer) { clearInterval(heartbeatTimer); heartbeatTimer = null; }
161
+ };
162
+
163
+ const startTimers = () => {
164
+ clearTimers();
165
+ if (typeof provider.poll === 'function') {
166
+ pollTimer = setInterval(async () => {
167
+ if (stopped || !snapshot.session) return;
168
+ try {
169
+ const status = await provider.poll!({ session: snapshot.session });
170
+ if (stopped) return;
171
+ // A refreshed URL matters: signed playback URLs expire mid-session,
172
+ // and a silently dead player looks like a broken stream.
173
+ const session = status?.playbackUrl
174
+ ? { ...snapshot.session, playbackUrl: status.playbackUrl }
175
+ : snapshot.session;
176
+ emit({
177
+ status,
178
+ session,
179
+ phase: status?.approved ? 'approved' : snapshot.phase === 'requested' ? 'requested' : 'watching',
180
+ });
181
+ // Once approved there is nothing left to poll for.
182
+ if (status?.approved) clearTimers();
183
+ } catch {
184
+ // Transient poll failures are normal; the session is not lost.
185
+ }
186
+ }, Math.max(MIN_INTERVAL_MS, pollIntervalMs));
187
+ }
188
+ if (typeof provider.heartbeat === 'function') {
189
+ heartbeatTimer = setInterval(() => {
190
+ if (stopped || !snapshot.session) return;
191
+ Promise.resolve(provider.heartbeat!({ session: snapshot.session })).catch(() => {});
192
+ }, Math.max(MIN_INTERVAL_MS, heartbeatIntervalMs));
193
+ }
194
+ };
195
+
196
+ return {
197
+ getSnapshot: () => snapshot,
198
+
199
+ async start() {
200
+ if (snapshot.phase !== 'idle' && snapshot.phase !== 'left' && snapshot.phase !== 'error') {
201
+ return snapshot;
202
+ }
203
+ stopped = false;
204
+ emit({ phase: 'joining', error: '' });
205
+ try {
206
+ const session = await provider.join({ roomName, displayName });
207
+ if (stopped) return snapshot;
208
+ if (!session?.viewerId) throw new Error('The viewer session provider returned no viewerId.');
209
+ emit({ phase: 'watching', session, error: '' });
210
+ startTimers();
211
+ } catch (error: any) {
212
+ emit({ phase: 'error', error: error?.message || 'The viewer session could not start.' });
213
+ }
214
+ return snapshot;
215
+ },
216
+
217
+ async requestPromotion() {
218
+ if (!snapshot.session) {
219
+ emit({ error: 'Start the viewer session before requesting the floor.' });
220
+ return snapshot;
221
+ }
222
+ if (typeof provider.requestPromotion !== 'function') {
223
+ emit({ error: 'This viewer session provider does not support promotion.' });
224
+ return snapshot;
225
+ }
226
+ try {
227
+ await provider.requestPromotion({ session: snapshot.session });
228
+ emit({ phase: 'requested', error: '' });
229
+ } catch (error: any) {
230
+ emit({ error: error?.message || 'The request could not be sent.' });
231
+ }
232
+ return snapshot;
233
+ },
234
+
235
+ async stop() {
236
+ stopped = true;
237
+ clearTimers();
238
+ const session = snapshot.session;
239
+ emit({ phase: 'left' });
240
+ if (session && typeof provider.leave === 'function') {
241
+ // Best-effort: teardown often runs during unload.
242
+ try { await provider.leave({ session }); } catch { /* ignore */ }
243
+ }
244
+ },
245
+ };
246
+ }
@@ -0,0 +1,280 @@
1
+ import { SelfieSegmentation } from '@mediapipe/selfie_segmentation';
2
+ import { HeadlessOptions } from './headlessTypes';
3
+ import { getCurrentParams } from './getCurrentParams';
4
+ import { getLocalVideoStream } from './getMediaStreams';
5
+ import { HeadlessActionResult } from './roomActions';
6
+ import { compositeVirtualBackgroundFrame } from '../virtualBackgroundCompositor';
7
+
8
+ const MEDIAPIPE_CDN = 'https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation';
9
+
10
+ /**
11
+ * One running background session. Kept module-level because the pipeline owns
12
+ * real resources (a MediaPipe instance, a RAF loop, an offscreen canvas) that
13
+ * must be torn down exactly once, and because a second call should replace the
14
+ * first rather than stack another loop on the same camera.
15
+ */
16
+ interface BackgroundSession {
17
+ stop: () => void;
18
+ stream: MediaStream;
19
+ /** A live raw-camera clone that can be returned to the producer on clear. */
20
+ restoreTrack: MediaStreamTrack | null;
21
+ }
22
+ let session: BackgroundSession | null = null;
23
+
24
+ function loadImage(src: string): Promise<HTMLImageElement> {
25
+ return new Promise((resolve, reject) => {
26
+ const image = new Image();
27
+ // Backgrounds are usually served cross-origin; without this the canvas is
28
+ // tainted and captureStream() throws a SecurityError instead of producing
29
+ // frames — a failure that looks like "virtual background silently does nothing".
30
+ image.crossOrigin = 'anonymous';
31
+ image.onload = () => resolve(image);
32
+ image.onerror = () => reject(new Error('The background image could not be loaded.'));
33
+ image.src = src;
34
+ });
35
+ }
36
+
37
+ export interface ApplyVirtualBackgroundOptions extends HeadlessOptions {
38
+ /**
39
+ * Background image URL, or a ready `HTMLImageElement` / `HTMLCanvasElement`.
40
+ * Pass `null` to segment the person onto a transparent background.
41
+ */
42
+ image: string | HTMLImageElement | HTMLCanvasElement | null;
43
+ /** Capture frame rate for the processed stream. Defaults to 30. */
44
+ frameRate?: number;
45
+ /** MediaPipe model: 0 = general, 1 = landscape (faster). Defaults to 1. */
46
+ modelSelection?: 0 | 1;
47
+ /**
48
+ * Replace the live producer's track so remote viewers see the background
49
+ * immediately. Defaults to true; set false to preview locally first.
50
+ */
51
+ publish?: boolean;
52
+ /**
53
+ * Where to load the MediaPipe model and wasm from. Defaults to the jsDelivr
54
+ * CDN. Point this at a self-hosted copy of
55
+ * `node_modules/@mediapipe/selfie_segmentation` for offline or air-gapped
56
+ * deployments, or where a Content-Security-Policy forbids the CDN.
57
+ * A trailing slash is added if missing.
58
+ */
59
+ assetPath?: string;
60
+ }
61
+
62
+ export type ApplyVirtualBackgroundType = (
63
+ options: ApplyVirtualBackgroundOptions
64
+ ) => Promise<HeadlessActionResult & { stream: MediaStream | null }>;
65
+
66
+ /**
67
+ * Apply a virtual background headlessly — no modal, no DOM of your own.
68
+ *
69
+ * The SDK's own background support lives inside `BackgroundModal`, whose apply
70
+ * path is bound to that component's refs (a preview `<video>` and a `<canvas>`)
71
+ * and is driven by `autoClickBackground` / `isBackgroundModalVisible`. A
72
+ * `returnUI={false}` surface therefore had no way to turn a background on
73
+ * without mounting the modal off-screen and simulating a click.
74
+ *
75
+ * This runs the same MediaPipe pipeline the modal uses — identical compositing:
76
+ * draw the segmentation mask, retain the person with `source-in`, then paint
77
+ * the replacement behind them with `destination-over` — against an offscreen video and
78
+ * canvas it creates and owns.
79
+ *
80
+ * It also keeps the SDK's own state honest (`virtualStream`, `processedStream`,
81
+ * `keepBackground`), so `getLocalVideoStream` keeps returning the right
82
+ * self-view without the caller choosing. Callers should not select the
83
+ * processed stream themselves.
84
+ *
85
+ * The camera must already be on: this processes `localStreamVideo`, it does not
86
+ * acquire one.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * await applyVirtualBackground({ parameters, image: '/backgrounds/office.jpg' });
91
+ * await clearVirtualBackground({ parameters });
92
+ * ```
93
+ */
94
+ export async function applyVirtualBackground({
95
+ parameters,
96
+ image,
97
+ frameRate = 30,
98
+ modelSelection = 1,
99
+ publish = true,
100
+ assetPath = MEDIAPIPE_CDN,
101
+ }: ApplyVirtualBackgroundOptions): Promise<HeadlessActionResult & { stream: MediaStream | null }> {
102
+ const live = getCurrentParams({ parameters });
103
+ if (live.audioOnlyRoom) {
104
+ return { ok: false, error: 'You cannot use a background in an audio-only event.', stream: null };
105
+ }
106
+ if (typeof document === 'undefined' || typeof window === 'undefined') {
107
+ return { ok: false, error: 'Virtual backgrounds require a browser environment.', stream: null };
108
+ }
109
+
110
+ // Always process the *raw* camera. Reading through getLocalVideoStream would
111
+ // feed an already-processed stream back through segmentation once a
112
+ // background is running, compounding artefacts on every change.
113
+ const camera = (live.localStreamVideo as MediaStream | null)
114
+ || getLocalVideoStream({ parameters: live });
115
+ const sourceTrack = camera?.getVideoTracks?.()[0] || null;
116
+ if (!sourceTrack || sourceTrack.readyState !== 'live') {
117
+ return { ok: false, error: 'Turn your camera on before applying a background.', stream: null };
118
+ }
119
+
120
+ const previousSession = session;
121
+ let candidateStop: (() => void) | null = null;
122
+ try {
123
+ const settings = sourceTrack.getSettings ? sourceTrack.getSettings() : {};
124
+ const width = Number(settings.width) || 640;
125
+ const height = Number(settings.height) || 360;
126
+
127
+ const backgroundImage = typeof image === 'string' ? await loadImage(image) : image;
128
+ const producer = publish ? (live.videoProducer || live.localVideoProducer) : null;
129
+
130
+ // mediasoup Producers normally own their track (`stopTracks: true`). Their
131
+ // replaceTrack operation therefore stops the old raw track. Keep MediaPipe
132
+ // on an isolated clone and retain a second live clone for a clean clear.
133
+ const processingTrack = sourceTrack.clone?.();
134
+ if (!processingTrack) throw new Error('This camera cannot create the isolated track required for a virtual background.');
135
+ const restoreTrack = producer ? sourceTrack.clone?.() : sourceTrack;
136
+ if (!restoreTrack) {
137
+ processingTrack.stop();
138
+ throw new Error('This camera cannot preserve a track for restoring the original view.');
139
+ }
140
+
141
+ const video = document.createElement('video');
142
+ video.autoplay = true;
143
+ video.muted = true;
144
+ video.playsInline = true;
145
+ video.srcObject = new MediaStream([processingTrack]);
146
+ await video.play().catch(() => {});
147
+
148
+ const canvas = document.createElement('canvas');
149
+ canvas.width = width;
150
+ canvas.height = height;
151
+ const ctx = canvas.getContext('2d');
152
+ if (!ctx) throw new Error('This browser cannot composite a background.');
153
+
154
+ const base = assetPath.endsWith('/') ? assetPath.slice(0, -1) : assetPath;
155
+ const segmentation = new SelfieSegmentation({
156
+ locateFile: (file: string) => `${base}/${file}`,
157
+ });
158
+ segmentation.setOptions({ modelSelection, selfieMode: false });
159
+ await segmentation.initialize();
160
+
161
+ // Same compositing as the SDK's modal, so the result is visually identical.
162
+ segmentation.onResults((results: any) => {
163
+ try {
164
+ if (!canvas.width || !canvas.height) return;
165
+ compositeVirtualBackgroundFrame({
166
+ ctx,
167
+ segmentationMask: results.segmentationMask,
168
+ sourceImage: results.image,
169
+ backgroundImage: backgroundImage as CanvasImageSource | null,
170
+ width: canvas.width,
171
+ height: canvas.height,
172
+ });
173
+ } catch {
174
+ // A dropped frame must never kill the loop.
175
+ }
176
+ });
177
+
178
+ let stopped = false;
179
+ let frameHandle = 0;
180
+ const pump = async () => {
181
+ if (stopped) return;
182
+ try {
183
+ if (video.readyState >= 2) await segmentation.send({ image: video });
184
+ } catch {
185
+ // Ignore a single failed frame; the next one is already queued.
186
+ }
187
+ frameHandle = window.requestAnimationFrame(() => { void pump(); });
188
+ };
189
+ void pump();
190
+
191
+ const processed: MediaStream = (canvas as any).captureStream(frameRate);
192
+ if (!processed?.getVideoTracks?.().length) {
193
+ throw new Error('The processed background stream produced no video track.');
194
+ }
195
+
196
+ const stop = () => {
197
+ if (stopped) return;
198
+ stopped = true;
199
+ window.cancelAnimationFrame(frameHandle);
200
+ try { segmentation.close(); } catch { /* already closed */ }
201
+ processed.getTracks().forEach((track) => track.stop());
202
+ processingTrack.stop();
203
+ video.srcObject = null;
204
+ };
205
+ candidateStop = stop;
206
+
207
+ if (producer) {
208
+ const track = processed.getVideoTracks()[0];
209
+ if (producer && typeof producer.replaceTrack === 'function' && track) {
210
+ // replaceTrack avoids renegotiation, so remote viewers see the
211
+ // background appear without the call visibly reconnecting.
212
+ await producer.replaceTrack({ track });
213
+ }
214
+ if (camera?.removeTrack && camera?.addTrack && restoreTrack !== sourceTrack) {
215
+ camera.removeTrack(sourceTrack);
216
+ camera.addTrack(restoreTrack);
217
+ if (sourceTrack.readyState === 'live') sourceTrack.stop();
218
+ }
219
+ }
220
+
221
+ previousSession?.stop();
222
+ session = { stop, stream: processed, restoreTrack };
223
+ candidateStop = null;
224
+ live.updateVirtualStream?.(processed);
225
+ live.updateProcessedStream?.(processed);
226
+ live.updateKeepBackground?.(true);
227
+
228
+ return { ok: true, error: '', stream: processed };
229
+ } catch (error: any) {
230
+ candidateStop?.();
231
+ return {
232
+ ok: false,
233
+ error: error?.message || 'The virtual background could not be applied.',
234
+ stream: null,
235
+ };
236
+ }
237
+ }
238
+
239
+ export type ClearVirtualBackgroundType = (
240
+ options: HeadlessOptions
241
+ ) => Promise<HeadlessActionResult>;
242
+
243
+ /**
244
+ * Remove the virtual background and go back to the raw camera.
245
+ *
246
+ * Restores the original camera track on the live producer before tearing the
247
+ * pipeline down, so viewers transition straight from processed to raw rather
248
+ * than through a frozen or black frame.
249
+ */
250
+ export async function clearVirtualBackground({
251
+ parameters,
252
+ }: HeadlessOptions): Promise<HeadlessActionResult> {
253
+ const live = getCurrentParams({ parameters });
254
+ const active = session;
255
+ if (!active) {
256
+ live.updateKeepBackground?.(false);
257
+ return { ok: true, error: '' };
258
+ }
259
+ try {
260
+ const producer = live.videoProducer || live.localVideoProducer;
261
+ const original = active.restoreTrack;
262
+ if (producer && typeof producer.replaceTrack === 'function'
263
+ && original && original.readyState === 'live') {
264
+ await producer.replaceTrack({ track: original });
265
+ }
266
+ active.stop();
267
+ session = null;
268
+ live.updateVirtualStream?.(null);
269
+ live.updateProcessedStream?.(null);
270
+ live.updateKeepBackground?.(false);
271
+ return { ok: true, error: '' };
272
+ } catch (error: any) {
273
+ return { ok: false, error: error?.message || 'The virtual background could not be cleared.' };
274
+ }
275
+ }
276
+
277
+ /** True while a headless background pipeline is running in this tab. */
278
+ export function isVirtualBackgroundRunning(): boolean {
279
+ return session !== null;
280
+ }
@@ -1,4 +1,4 @@
1
- const DEFAULT_MEDIA_SFU_ROOM_API_URL = 'https://mediasfu.com/v1/rooms/';
1
+ const DEFAULT_MEDIA_SFU_ROOM_API_URL = 'https://mediasfu.com/v1/rooms/';
2
2
 
3
3
  type MediaSFURoomApiAction = 'createRoom' | 'joinRoom';
4
4
 
@@ -28,4 +28,4 @@ export const resolveMediaSFURoomApi = (
28
28
  }
29
29
 
30
30
  return `${normalizedLink.replace(/\/$/, '')}/${action}`;
31
- };
31
+ };
@@ -0,0 +1,53 @@
1
+ /** Options for composing one segmented camera frame. */
2
+ export interface CompositeVirtualBackgroundFrameOptions {
3
+ ctx: CanvasRenderingContext2D;
4
+ segmentationMask: CanvasImageSource;
5
+ sourceImage: CanvasImageSource;
6
+ backgroundImage?: CanvasImageSource | null;
7
+ width: number;
8
+ height: number;
9
+ repeatPattern?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
10
+ blurFallbackPixels?: number;
11
+ }
12
+
13
+ /**
14
+ * Paint the segmented person over a replacement background.
15
+ *
16
+ * Keeping this operation in the shared runtime makes headless web adapters and
17
+ * the React SDK use the same compositing contract. It is deliberately not
18
+ * exported from the native entry point; native platforms use their camera
19
+ * processor instead of a browser canvas.
20
+ */
21
+ export function compositeVirtualBackgroundFrame({
22
+ ctx,
23
+ segmentationMask,
24
+ sourceImage,
25
+ backgroundImage = null,
26
+ width,
27
+ height,
28
+ repeatPattern = 'repeat',
29
+ blurFallbackPixels = 0,
30
+ }: CompositeVirtualBackgroundFrameOptions): void {
31
+ const previousFilter = ctx.filter;
32
+ ctx.save();
33
+ try {
34
+ ctx.clearRect(0, 0, width, height);
35
+ ctx.globalCompositeOperation = 'source-over';
36
+ ctx.drawImage(segmentationMask, 0, 0, width, height);
37
+ ctx.globalCompositeOperation = 'source-in';
38
+ ctx.drawImage(sourceImage, 0, 0, width, height);
39
+ ctx.globalCompositeOperation = 'destination-over';
40
+ if (backgroundImage) {
41
+ const pattern = ctx.createPattern(backgroundImage, repeatPattern);
42
+ ctx.fillStyle = pattern || 'transparent';
43
+ ctx.fillRect(0, 0, width, height);
44
+ } else if (blurFallbackPixels > 0) {
45
+ ctx.filter = `blur(${blurFallbackPixels}px)`;
46
+ ctx.drawImage(sourceImage, 0, 0, width, height);
47
+ }
48
+ } finally {
49
+ ctx.filter = previousFilter || 'none';
50
+ ctx.globalCompositeOperation = 'source-over';
51
+ ctx.restore();
52
+ }
53
+ }
@@ -1,4 +1,4 @@
1
- import type { Producer } from 'mediasoup-client/lib/types';
1
+ import type { Producer } from 'mediasoup-client/types';
2
2
  import type {
3
3
  ConnectSendTransportScreenParameters,
4
4
  ConnectSendTransportScreenType,
@@ -125,4 +125,4 @@ export const captureCanvasStream = async ({
125
125
  } catch (error) {
126
126
  console.error(error, 'error in captureCanvasStream');
127
127
  }
128
- };
128
+ };
@@ -1,6 +1,6 @@
1
1
  import { Socket } from "socket.io-client";
2
2
  import { validateAlphanumeric } from "../../methods/utils/validateAlphanumeric"; // Import the validateAlphanumeric function from the validateAlphanumeric file
3
- import type { RtpCapabilities } from "mediasoup-client/lib/types";
3
+ import type { RtpCapabilities } from "mediasoup-client/types";
4
4
 
5
5
  export interface JoinConRoomOptions {
6
6
  socket: Socket;
@@ -1,5 +1,5 @@
1
1
  import { Socket } from 'socket.io-client';
2
- import type { RtpCapabilities } from 'mediasoup-client/lib/types';
2
+ import type { RtpCapabilities } from 'mediasoup-client/types';
3
3
  import { validateAlphanumeric } from '../../methods/utils/validateAlphanumeric';
4
4
 
5
5
  export interface JoinRoomOptions {
@@ -0,0 +1 @@
1
+ export * from './types';
@@ -1,6 +1,6 @@
1
1
  import { Socket } from 'socket.io-client';
2
- import type { Consumer, DtlsParameters, IceCandidate, IceParameters, ProducerCodecOptions, RtpCapabilities } from 'mediasoup-client/lib/types';
3
- import type { RtpEncodingParameters } from 'mediasoup-client/lib/types';
2
+ import type { Consumer, DtlsParameters, IceCandidate, IceParameters, ProducerCodecOptions, RtpCapabilities } from 'mediasoup-client/types';
3
+ import type { RtpEncodingParameters } from 'mediasoup-client/types';
4
4
 
5
5
  export interface Participant {
6
6
  id?: string;
@@ -760,4 +760,3 @@ export type MessageParticipantsType = (options: any) => void;
760
760
  export type RemoveParticipantsType = (options: any) => Promise<void>;
761
761
 
762
762
  // Consumer types - import from consumer-types file
763
-