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,336 @@
1
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
2
+
3
+ /**
4
+ * Explicit playback: HLS and WHEP.
5
+ *
6
+ * **This is deliberately not part of the media-card surface.** WebRTC media is
7
+ * *auto-consumed* — the SDK subscribes for you, and `getRemoteVideoStreams` /
8
+ * `getAudioGridComponents` hand you what already arrived. HLS and WHEP are the
9
+ * opposite: nothing is consumed until you ask, because each one opens a
10
+ * connection the room did not ask for and would otherwise pay for.
11
+ *
12
+ * So the API here is imperative — `attachPlayback` / `detachPlayback` — rather
13
+ * than a reactive getter. Mixing these into the media cards would mean every
14
+ * room silently opened an HLS or WHEP connection whether or not anything
15
+ * rendered it.
16
+ *
17
+ * When to reach for which:
18
+ *
19
+ * | | latency | cost per viewer | use it for |
20
+ * | --- | --- | --- | --- |
21
+ * | WebRTC (auto) | sub-second | an SFU consumer | anyone who takes part |
22
+ * | WHEP | sub-second | an SFU consumer | standards-based egress to non-SDK players |
23
+ * | HLS | seconds | a CDN request | audiences too large to fan out over the SFU |
24
+ *
25
+ * A large passive audience on HLS is the reason this exists: it moves the
26
+ * expensive part — media fan-out — off the SFU.
27
+ */
28
+
29
+ export type PlaybackProtocol = 'hls' | 'whep';
30
+
31
+ export interface PlaybackSource {
32
+ protocol: PlaybackProtocol;
33
+ url: string;
34
+ }
35
+
36
+ /**
37
+ * Playback URLs the server has published for this room.
38
+ *
39
+ * Returns nothing when the room has none — HLS and WHEP are provisioned
40
+ * server-side, so absence means "not enabled for this room", not an error.
41
+ */
42
+ export function getPlaybackSources({ parameters }: HeadlessOptions): PlaybackSource[] {
43
+ const source: HeadlessParameters = parameters || {};
44
+ const sources: PlaybackSource[] = [];
45
+ const push = (protocol: PlaybackProtocol, url: unknown) => {
46
+ if (typeof url === 'string' && /^https:\/\//i.test(url)) sources.push({ protocol, url });
47
+ };
48
+ push('hls', source.hlsUrl || source.hlsPlaybackUrl || source.playbackUrl);
49
+ push('whep', source.whepUrl || source.whepPlaybackUrl);
50
+ return sources;
51
+ }
52
+
53
+ /** A running playback. Always `detachPlayback` it — none of this is garbage-collected. */
54
+ export interface PlaybackHandle {
55
+ protocol: PlaybackProtocol;
56
+ url: string;
57
+ /** The media, when the protocol produces one directly (WHEP). */
58
+ stream: MediaStream | null;
59
+ /** Release the connection, the player, and the element's source. */
60
+ detach: () => void;
61
+ }
62
+
63
+ export interface AttachPlaybackOptions {
64
+ /** Playback URL, or a `PlaybackSource` from `getPlaybackSources`. */
65
+ source: string | PlaybackSource;
66
+ /** The element to play into. Required for HLS; optional for WHEP. */
67
+ video?: HTMLVideoElement | null;
68
+ /** Force a protocol. Inferred from the URL when omitted. */
69
+ protocol?: PlaybackProtocol;
70
+ /**
71
+ * Factory returning an hls.js instance, e.g. `() => new Hls({ lowLatencyMode: true })`.
72
+ *
73
+ * Required for HLS anywhere except Safari, and injected rather than imported
74
+ * so hls.js never becomes a dependency of this SDK — most rooms never play
75
+ * HLS, and React Native cannot use it at all.
76
+ */
77
+ hlsFactory?: () => any;
78
+ /** Extra headers for the WHEP POST, e.g. an auth token. */
79
+ headers?: Record<string, string>;
80
+ /** ICE servers for WHEP. Defaults to the room's own when available. */
81
+ iceServers?: RTCIceServer[];
82
+ }
83
+
84
+ function inferProtocol(url: string, explicit?: PlaybackProtocol): PlaybackProtocol {
85
+ if (explicit) return explicit;
86
+ return /\.m3u8(\?|$)/i.test(url) ? 'hls' : 'whep';
87
+ }
88
+
89
+ /**
90
+ * Whether this element can genuinely play HLS from a plain `src`.
91
+ *
92
+ * **`canPlayType` alone is a trap.** Chrome answers `"maybe"` for
93
+ * `application/vnd.apple.mpegurl` and then plays nothing — setting `src` there
94
+ * produces a permanently black video with no error at all.
95
+ *
96
+ * The reliable signal is Media Source Extensions: where MSE exists, hls.js is
97
+ * the right player (this is hls.js's own documented rule). Native playback is
98
+ * only trusted where MSE is absent, which is iOS Safari — the one place hls.js
99
+ * cannot run and native HLS genuinely works.
100
+ */
101
+ function canPlayHlsNatively(video: HTMLVideoElement): boolean {
102
+ const claimsSupport = typeof video.canPlayType === 'function'
103
+ && video.canPlayType('application/vnd.apple.mpegurl') !== '';
104
+ const hasMse = typeof MediaSource !== 'undefined'
105
+ || typeof (globalThis as any).ManagedMediaSource !== 'undefined';
106
+ return claimsSupport && !hasMse;
107
+ }
108
+
109
+ async function attachHls(
110
+ url: string,
111
+ video: HTMLVideoElement | null | undefined,
112
+ hlsFactory?: () => any
113
+ ): Promise<PlaybackHandle> {
114
+ if (!video) throw new Error('HLS playback needs a <video> element.');
115
+
116
+ // Prefer the injected player wherever one is available: hls.js works on every
117
+ // browser that supports MSE, including desktop Safari, and gives one code path
118
+ // for live-edge handling rather than two.
119
+ if (typeof hlsFactory !== 'function' && canPlayHlsNatively(video)) {
120
+ video.src = url;
121
+ const play = video.play?.();
122
+ play?.catch?.(() => {});
123
+ return {
124
+ protocol: 'hls',
125
+ url,
126
+ stream: null,
127
+ detach: () => { video.removeAttribute('src'); video.load?.(); },
128
+ };
129
+ }
130
+
131
+ if (typeof hlsFactory !== 'function') {
132
+ throw new Error(
133
+ 'HLS needs an hlsFactory on this browser. Pass () => new Hls(...) from hls.js; '
134
+ + 'it is not bundled with the SDK. Only iOS Safari, which has no Media Source '
135
+ + 'Extensions, plays HLS without one — Chrome reports that it can and then '
136
+ + 'plays nothing.'
137
+ );
138
+ }
139
+ const hls = hlsFactory();
140
+ hls.loadSource(url);
141
+ hls.attachMedia(video);
142
+ return {
143
+ protocol: 'hls',
144
+ url,
145
+ stream: null,
146
+ detach: () => {
147
+ try { hls.destroy(); } catch { /* already destroyed */ }
148
+ video.removeAttribute('src');
149
+ },
150
+ };
151
+ }
152
+
153
+ /**
154
+ * WHEP: POST an SDP offer, receive an answer, play the tracks.
155
+ *
156
+ * Implemented directly against RTCPeerConnection rather than via a library —
157
+ * WHEP is a small, standard exchange and a dependency here would be larger than
158
+ * the protocol.
159
+ */
160
+ async function attachWhep(
161
+ url: string,
162
+ video: HTMLVideoElement | null | undefined,
163
+ headers: Record<string, string> = {},
164
+ iceServers?: RTCIceServer[]
165
+ ): Promise<PlaybackHandle> {
166
+ if (typeof RTCPeerConnection === 'undefined') {
167
+ throw new Error('WHEP playback needs WebRTC support.');
168
+ }
169
+ const pc = new RTCPeerConnection(iceServers?.length ? { iceServers } : undefined);
170
+ const stream = new MediaStream();
171
+
172
+ // recvonly: this is egress. Adding transceivers up front means the offer
173
+ // advertises both kinds even before any track arrives.
174
+ pc.addTransceiver('video', { direction: 'recvonly' });
175
+ pc.addTransceiver('audio', { direction: 'recvonly' });
176
+ pc.ontrack = (event: RTCTrackEvent) => {
177
+ if (event.track) stream.addTrack(event.track);
178
+ if (video && video.srcObject !== stream) {
179
+ video.srcObject = stream;
180
+ const play = video.play?.();
181
+ play?.catch?.(() => {});
182
+ }
183
+ };
184
+
185
+ let resourceUrl = '';
186
+ try {
187
+ const offer = await pc.createOffer();
188
+ await pc.setLocalDescription(offer);
189
+
190
+ const response = await fetch(url, {
191
+ method: 'POST',
192
+ headers: { 'Content-Type': 'application/sdp', ...headers },
193
+ body: offer.sdp || '',
194
+ });
195
+ if (!response.ok) {
196
+ throw new Error(`The WHEP endpoint refused the request (${response.status}).`);
197
+ }
198
+ // The Location header names the session, and DELETEing it is the only way
199
+ // to tell the server to stop sending. Without it a closed page keeps a
200
+ // session alive server-side.
201
+ const location = response.headers.get('Location') || '';
202
+ resourceUrl = location ? new URL(location, url).toString() : '';
203
+
204
+ const answer = await response.text();
205
+ await pc.setRemoteDescription({ type: 'answer', sdp: answer });
206
+ } catch (error) {
207
+ pc.close();
208
+ throw error;
209
+ }
210
+
211
+ return {
212
+ protocol: 'whep',
213
+ url,
214
+ stream,
215
+ detach: () => {
216
+ if (resourceUrl) {
217
+ // Best-effort and deliberately unawaited: teardown often runs during
218
+ // page unload, where waiting is not an option.
219
+ try { void fetch(resourceUrl, { method: 'DELETE', headers }); } catch { /* ignore */ }
220
+ }
221
+ try { pc.close(); } catch { /* already closed */ }
222
+ stream.getTracks().forEach((track) => track.stop());
223
+ if (video && video.srcObject === stream) video.srcObject = null;
224
+ },
225
+ };
226
+ }
227
+
228
+ export type AttachPlaybackType = (options: AttachPlaybackOptions) => Promise<PlaybackHandle>;
229
+
230
+ /**
231
+ * Start an explicit playback.
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * import Hls from 'hls.js';
236
+ *
237
+ * const [source] = getPlaybackSources({ parameters });
238
+ * const handle = await attachPlayback({
239
+ * source,
240
+ * video: videoRef.current,
241
+ * hlsFactory: () => new Hls({ lowLatencyMode: true }),
242
+ * });
243
+ * // later, always:
244
+ * detachPlayback(handle);
245
+ * ```
246
+ */
247
+ export async function attachPlayback({
248
+ source,
249
+ video,
250
+ protocol,
251
+ hlsFactory,
252
+ headers,
253
+ iceServers,
254
+ }: AttachPlaybackOptions): Promise<PlaybackHandle> {
255
+ const url = typeof source === 'string' ? source : source?.url || '';
256
+ if (!url) throw new Error('A playback URL is required.');
257
+ const resolved = typeof source === 'string'
258
+ ? inferProtocol(url, protocol)
259
+ : (protocol || source.protocol || inferProtocol(url));
260
+
261
+ return resolved === 'hls'
262
+ ? attachHls(url, video, hlsFactory)
263
+ : attachWhep(url, video, headers, iceServers);
264
+ }
265
+
266
+ /** Stop a playback and release everything it holds. Safe to call twice. */
267
+ export function detachPlayback(handle: PlaybackHandle | null | undefined): void {
268
+ if (!handle || typeof handle.detach !== 'function') return;
269
+ try { handle.detach(); } catch { /* teardown must not throw */ }
270
+ }
271
+
272
+ /* ------------------------------------------------------------------ *
273
+ * WHIP — the ingest counterpart
274
+ * ------------------------------------------------------------------ */
275
+
276
+ export interface PublishWhipOptions {
277
+ /** The WHIP endpoint. */
278
+ url: string;
279
+ /** The stream to publish. */
280
+ stream: MediaStream;
281
+ headers?: Record<string, string>;
282
+ iceServers?: RTCIceServer[];
283
+ }
284
+
285
+ /**
286
+ * Publish a stream to a WHIP endpoint.
287
+ *
288
+ * The symmetric counterpart of WHEP, and equally explicit. This is *not* how
289
+ * you publish into a MediaSFU room — use `produceMedia` for that, which goes
290
+ * through the room's own transport and respects its capture entitlements. WHIP
291
+ * is for pushing to a standards-based ingest that is not this room.
292
+ */
293
+ export async function publishWhip({
294
+ url,
295
+ stream,
296
+ headers = {},
297
+ iceServers,
298
+ }: PublishWhipOptions): Promise<PlaybackHandle> {
299
+ if (typeof RTCPeerConnection === 'undefined') {
300
+ throw new Error('WHIP publishing needs WebRTC support.');
301
+ }
302
+ if (!stream?.getTracks?.().length) throw new Error('A stream with at least one track is required.');
303
+
304
+ const pc = new RTCPeerConnection(iceServers?.length ? { iceServers } : undefined);
305
+ stream.getTracks().forEach((track) => pc.addTrack(track, stream));
306
+
307
+ let resourceUrl = '';
308
+ try {
309
+ const offer = await pc.createOffer();
310
+ await pc.setLocalDescription(offer);
311
+ const response = await fetch(url, {
312
+ method: 'POST',
313
+ headers: { 'Content-Type': 'application/sdp', ...headers },
314
+ body: offer.sdp || '',
315
+ });
316
+ if (!response.ok) throw new Error(`The WHIP endpoint refused the request (${response.status}).`);
317
+ const location = response.headers.get('Location') || '';
318
+ resourceUrl = location ? new URL(location, url).toString() : '';
319
+ await pc.setRemoteDescription({ type: 'answer', sdp: await response.text() });
320
+ } catch (error) {
321
+ pc.close();
322
+ throw error;
323
+ }
324
+
325
+ return {
326
+ protocol: 'whep',
327
+ url,
328
+ stream,
329
+ detach: () => {
330
+ if (resourceUrl) {
331
+ try { void fetch(resourceUrl, { method: 'DELETE', headers }); } catch { /* ignore */ }
332
+ }
333
+ try { pc.close(); } catch { /* already closed */ }
334
+ },
335
+ };
336
+ }
@@ -0,0 +1,230 @@
1
+ import { confirmExit } from '../../exit/confirmExit';
2
+ import { sendMessage } from '../../message/sendMessage';
3
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
4
+ import { getCurrentParams } from './getCurrentParams';
5
+ import { getRoomReadiness } from './getRoomReadiness';
6
+
7
+ export interface HeadlessActionResult {
8
+ ok: boolean;
9
+ /** Empty when `ok`; otherwise a short, user-safe explanation. */
10
+ error: string;
11
+ }
12
+
13
+ /**
14
+ * Prefer `localSocket` when it is usable, matching how the SDK routes chat.
15
+ * Falls back to the primary room socket.
16
+ */
17
+ function usableSocket(parameters: HeadlessParameters): any {
18
+ return (
19
+ [parameters?.localSocket, parameters?.socket].find(
20
+ (socket) => socket?.connected === true && typeof socket.emit === 'function'
21
+ ) || null
22
+ );
23
+ }
24
+
25
+ export interface LeaveRoomOptions extends HeadlessOptions {
26
+ /** Ban the member on the way out. Requires host privileges. */
27
+ ban?: boolean;
28
+ /** Whether a host exit should end the room for everyone. Defaults to true. */
29
+ endRoomOnHostExit?: boolean;
30
+ }
31
+
32
+ export type LeaveRoomType = (
33
+ options: LeaveRoomOptions
34
+ ) => Promise<HeadlessActionResult>;
35
+
36
+ /**
37
+ * Leave the room from a headless surface.
38
+ *
39
+ * Without this you have to pull `socket`, `localSocket`, `member` and `roomName`
40
+ * off the bag yourself and hand them to `confirmExit` — four chances to pass a
41
+ * stale value, and a silent no-op when you do.
42
+ *
43
+ * Never throws: a failed exit comes back as `{ ok: false, error }` so a Leave
44
+ * button can report why rather than appearing to work.
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * import { leaveRoom } from 'mediasfu-shared';
49
+ *
50
+ * const result = await leaveRoom({
51
+ * parameters: parameterStore.getCurrent(),
52
+ * endRoomOnHostExit: false,
53
+ * });
54
+ * if (!result.ok) setNotice(result.error);
55
+ * ```
56
+ */
57
+ export async function leaveRoom({
58
+ parameters,
59
+ ban = false,
60
+ endRoomOnHostExit = true,
61
+ }: LeaveRoomOptions): Promise<HeadlessActionResult> {
62
+ try {
63
+ const live = getCurrentParams({ parameters });
64
+ const socket = live?.socket;
65
+ if (!socket || typeof socket.emit !== 'function') {
66
+ return {
67
+ ok: false,
68
+ error: 'Room exit is unavailable until the signaling connection is ready.',
69
+ };
70
+ }
71
+ if (!live?.member || !live?.roomName) {
72
+ return { ok: false, error: 'Room exit is unavailable until the room is joined.' };
73
+ }
74
+ await confirmExit({
75
+ socket,
76
+ localSocket: live.localSocket,
77
+ member: live.member,
78
+ roomName: live.roomName,
79
+ ban,
80
+ endRoomOnHostExit,
81
+ });
82
+ return { ok: true, error: '' };
83
+ } catch (error: any) {
84
+ return { ok: false, error: error?.message || 'The room exit request failed.' };
85
+ }
86
+ }
87
+
88
+ export interface SendChatMessageOptions extends HeadlessOptions {
89
+ message: string;
90
+ /** Specific recipients. Empty (default) sends to the group. */
91
+ receivers?: string[];
92
+ /** Send to everyone. Defaults to true when `receivers` is empty. */
93
+ group?: boolean;
94
+ }
95
+
96
+ export type SendChatMessageType = (
97
+ options: SendChatMessageOptions
98
+ ) => Promise<HeadlessActionResult>;
99
+
100
+ /**
101
+ * Send a chat message from a headless surface.
102
+ *
103
+ * `sendMessage` takes eleven fields that all have to be lifted off the bag in
104
+ * the right combination; this resolves them for you, including the
105
+ * `localSocket`-before-`socket` preference the SDK uses for chat.
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * import { sendChatMessage } from 'mediasfu-shared';
110
+ *
111
+ * await sendChatMessage({ parameters, message: 'Hello everyone' });
112
+ * await sendChatMessage({ parameters, message: 'Just you', receivers: ['Paul'] });
113
+ * ```
114
+ */
115
+ export async function sendChatMessage({
116
+ parameters,
117
+ message,
118
+ receivers = [],
119
+ group,
120
+ }: SendChatMessageOptions): Promise<HeadlessActionResult> {
121
+ try {
122
+ const trimmed = String(message ?? '').trim();
123
+ if (!trimmed) return { ok: false, error: 'The message is empty.' };
124
+
125
+ const live = getCurrentParams({ parameters });
126
+ const socket = usableSocket(live);
127
+ if (!socket) {
128
+ return { ok: false, error: 'Chat is unavailable until the room connection is ready.' };
129
+ }
130
+ if (!live?.roomName) {
131
+ return { ok: false, error: 'Chat is unavailable until the room is joined.' };
132
+ }
133
+
134
+ await sendMessage({
135
+ member: live.member || '',
136
+ islevel: live.islevel || '1',
137
+ showAlert: live.showAlert,
138
+ coHostResponsibility: live.coHostResponsibility || [],
139
+ coHost: live.coHost || '',
140
+ chatSetting: live.chatSetting || '',
141
+ message: trimmed,
142
+ roomName: live.roomName,
143
+ messagesLength: Array.isArray(live.messages) ? live.messages.length : 0,
144
+ receivers,
145
+ group: group ?? receivers.length === 0,
146
+ sender: live.member || '',
147
+ socket,
148
+ });
149
+ return { ok: true, error: '' };
150
+ } catch (error: any) {
151
+ return { ok: false, error: error?.message || 'The message could not be sent.' };
152
+ }
153
+ }
154
+
155
+ export interface RunMediaControlOptions extends HeadlessOptions {
156
+ /** Which control to run. */
157
+ control:
158
+ | 'clickAudio'
159
+ | 'clickVideo'
160
+ | 'clickScreenShare'
161
+ | 'switchAudio'
162
+ | 'switchVideo'
163
+ | 'switchVideoAlt';
164
+ /** Extra arguments, e.g. `{ audioPreference: deviceId }` for `switchAudio`. */
165
+ extra?: Record<string, any>;
166
+ }
167
+
168
+ export type RunMediaControlType = (
169
+ options: RunMediaControlOptions
170
+ ) => Promise<HeadlessActionResult>;
171
+
172
+ /**
173
+ * Invoke a media control safely from a headless surface.
174
+ *
175
+ * Gates on {@link getRoomReadiness} first — firing `clickVideo` before the
176
+ * transport exists fails silently and looks like a dead button — then resolves
177
+ * the control off the current bag rather than a snapshot the caller captured
178
+ * earlier.
179
+ *
180
+ * @example
181
+ * ```ts
182
+ * import { runMediaControl } from 'mediasfu-shared';
183
+ *
184
+ * await runMediaControl({ parameters, control: 'clickVideo' });
185
+ * await runMediaControl({
186
+ * parameters,
187
+ * control: 'switchVideo',
188
+ * extra: { videoPreference: deviceId },
189
+ * });
190
+ * ```
191
+ */
192
+ export async function runMediaControl({
193
+ parameters,
194
+ control,
195
+ extra,
196
+ }: RunMediaControlOptions): Promise<HeadlessActionResult> {
197
+ const live = getCurrentParams({ parameters });
198
+ const readiness = getRoomReadiness({ parameters: live });
199
+ if (!readiness.ready) return { ok: false, error: readiness.reason };
200
+
201
+ const method = live?.[control];
202
+ if (typeof method !== 'function') {
203
+ return { ok: false, error: `The SDK ${control} control is unavailable.` };
204
+ }
205
+
206
+ // MediaSFU's media controls return void and report refusals — "Access denied
207
+ // by host", "A request is pending", recording locks, audio-only events —
208
+ // exclusively through showAlert. Without this, a control the host has blocked
209
+ // resolves normally and we would report success for something that did not
210
+ // happen. Compare the alert before and after and treat a new danger/warning
211
+ // as the failure reason.
212
+ const alertBefore = live?.alertMessage || '';
213
+ try {
214
+ await method({ ...(extra || {}), parameters: live });
215
+ } catch (error: any) {
216
+ return { ok: false, error: error?.message || 'The media control failed.' };
217
+ }
218
+
219
+ const settled = getCurrentParams({ parameters: live });
220
+ const alertAfter = settled?.alertMessage || '';
221
+ const alertType = settled?.alertType;
222
+ if (
223
+ alertAfter
224
+ && alertAfter !== alertBefore
225
+ && (alertType === 'danger' || alertType === 'warning')
226
+ ) {
227
+ return { ok: false, error: alertAfter };
228
+ }
229
+ return { ok: true, error: '' };
230
+ }