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,505 @@
1
+ import { streamSuccessVideo } from '../../../consumers/streamSuccessVideo';
2
+ import { streamSuccessAudio } from '../../../consumers/streamSuccessAudio';
3
+ import { streamSuccessScreen } from '../../../consumers/streamSuccessScreen';
4
+ import { disconnectSendTransportVideo } from '../../../consumers/disconnectSendTransportVideo';
5
+ import { disconnectSendTransportAudio } from '../../../consumers/disconnectSendTransportAudio';
6
+ import { disconnectSendTransportScreen } from '../../../consumers/disconnectSendTransportScreen';
7
+ import { HeadlessOptions, HeadlessParameters } from './headlessTypes';
8
+ import { getCurrentParams } from './getCurrentParams';
9
+ import { getRoomReadiness } from './getRoomReadiness';
10
+ import { HeadlessActionResult } from './roomActions';
11
+
12
+ export type ProducerKind = 'video' | 'audio' | 'screen';
13
+
14
+ function hasLiveTrack(stream: MediaStream | null | undefined, kind: 'video' | 'audio'): boolean {
15
+ if (!stream || typeof stream.getTracks !== 'function') return false;
16
+ try {
17
+ return stream
18
+ .getTracks()
19
+ .some((track) => track.kind === kind && track.readyState === 'live');
20
+ } catch {
21
+ return false;
22
+ }
23
+ }
24
+
25
+ /** `VidCons` allows a bare number or a {ideal,max,min} shape. */
26
+ function capOf(value: any): number {
27
+ if (typeof value === 'number') return value;
28
+ if (value && typeof value === 'object') {
29
+ const candidate = value.max ?? value.ideal;
30
+ if (typeof candidate === 'number') return candidate;
31
+ }
32
+ return 0;
33
+ }
34
+
35
+ export interface CaptureLimits {
36
+ width: number;
37
+ height: number;
38
+ frameRate: number;
39
+ }
40
+
41
+ export interface GetCaptureLimitsOptions extends HeadlessOptions {
42
+ /** Camera and screen share have separate ceilings. Defaults to camera. */
43
+ kind?: ProducerKind;
44
+ }
45
+
46
+ export type GetCaptureLimitsType = (options: GetCaptureLimitsOptions) => CaptureLimits;
47
+
48
+ /**
49
+ * The room's allowed capture ceiling — the same `vidCons` / `frameRate` that
50
+ * `clickVideo` feeds to `getUserMedia`. Zero means "no ceiling published".
51
+ */
52
+ export function getCaptureLimits({ parameters, kind = 'video' }: GetCaptureLimitsOptions): CaptureLimits {
53
+ const source: HeadlessParameters = parameters || {};
54
+ // Screen share is governed by targetWidth/targetHeight (what startShareScreen
55
+ // passes to getDisplayMedia), not by the camera's vidCons.
56
+ if (kind === 'screen') {
57
+ return {
58
+ width: Number(source.targetWidth) || 0,
59
+ height: Number(source.targetHeight) || 0,
60
+ frameRate: Number(source.frameRate) || 30,
61
+ };
62
+ }
63
+ const vidCons: any = source.vidCons || {};
64
+ return {
65
+ width: capOf(vidCons.width),
66
+ height: capOf(vidCons.height),
67
+ frameRate: Number(source.frameRate) || 0,
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Clamp an incoming track to the room's capture ceiling before it is published.
73
+ *
74
+ * This matters because the publish path here is deliberately *not* `clickVideo`.
75
+ * `clickVideo` applies `vidCons`/`frameRate` when it calls `getUserMedia`;
76
+ * `streamSuccessVideo` — which every produce* helper calls — never re-applies
77
+ * them to a track it is handed. Encoding limits still apply either way
78
+ * (`vParams`/`hParams` carry the `maxBitrate` ladder and are attached at
79
+ * `producerTransport.produce`), so bandwidth stays capped, but *capture
80
+ * dimensions and frame rate* would otherwise be unbounded.
81
+ *
82
+ * Order: try `applyConstraints` first, then verify with `getSettings`. Sources
83
+ * such as `canvas.captureStream()` frequently reject or ignore constraints, so
84
+ * verification is the part that actually enforces — an over-size track that
85
+ * cannot be clamped is refused rather than published.
86
+ */
87
+ async function enforceCaptureLimits(
88
+ stream: MediaStream,
89
+ parameters: HeadlessParameters,
90
+ kind: ProducerKind,
91
+ allowUnconstrained: boolean
92
+ ): Promise<{ ok: boolean; error: string }> {
93
+ if (kind === 'audio') return { ok: true, error: '' };
94
+ const limits = getCaptureLimits({ parameters, kind });
95
+ if (!limits.width && !limits.height && !limits.frameRate) return { ok: true, error: '' };
96
+
97
+ let track: MediaStreamTrack | undefined;
98
+ try {
99
+ track = stream.getVideoTracks()[0];
100
+ } catch {
101
+ return { ok: true, error: '' };
102
+ }
103
+ if (!track) return { ok: true, error: '' };
104
+
105
+ const constraints: MediaTrackConstraints = {};
106
+ if (limits.width) constraints.width = { max: limits.width };
107
+ if (limits.height) constraints.height = { max: limits.height };
108
+ if (limits.frameRate) constraints.frameRate = { max: limits.frameRate };
109
+ try {
110
+ await track.applyConstraints(constraints);
111
+ } catch {
112
+ // Canvas and element captures commonly reject this; verification below decides.
113
+ }
114
+
115
+ let settings: MediaTrackSettings = {};
116
+ try {
117
+ settings = track.getSettings?.() || {};
118
+ } catch {
119
+ return { ok: true, error: '' };
120
+ }
121
+ // A source that reports nothing cannot be verified either way; let it through
122
+ // rather than block a legitimate publish on missing metadata.
123
+ if (!settings.width && !settings.height && !settings.frameRate) {
124
+ return { ok: true, error: '' };
125
+ }
126
+
127
+ const over: string[] = [];
128
+ if (limits.width && settings.width && settings.width > limits.width) {
129
+ over.push(`width ${settings.width} > ${limits.width}`);
130
+ }
131
+ if (limits.height && settings.height && settings.height > limits.height) {
132
+ over.push(`height ${settings.height} > ${limits.height}`);
133
+ }
134
+ if (limits.frameRate && settings.frameRate && settings.frameRate > limits.frameRate + 1) {
135
+ over.push(`frameRate ${Math.round(settings.frameRate)} > ${limits.frameRate}`);
136
+ }
137
+ if (over.length === 0) return { ok: true, error: '' };
138
+ if (allowUnconstrained) return { ok: true, error: '' };
139
+
140
+ return {
141
+ ok: false,
142
+ error: `This source exceeds the room's capture allowance (${over.join(', ')}). `
143
+ + 'Reduce the source size or frame rate before publishing.',
144
+ };
145
+ }
146
+
147
+ export interface ProduceMediaOptions extends HeadlessOptions {
148
+ /** The stream to publish. Must carry at least one live track of the right kind. */
149
+ stream: MediaStream;
150
+ /** What to publish it as. */
151
+ kind: ProducerKind;
152
+ /**
153
+ * Publish even when the source exceeds the room's `vidCons`/`frameRate`
154
+ * ceiling and cannot be clamped. Off by default: the ceiling is a room
155
+ * entitlement, so bypassing it must be a deliberate, visible choice.
156
+ */
157
+ allowUnconstrained?: boolean;
158
+ }
159
+
160
+ export type ProduceMediaType = (
161
+ options: ProduceMediaOptions
162
+ ) => Promise<HeadlessActionResult>;
163
+
164
+ /**
165
+ * Publish **any** MediaStream to the room — not just the camera or microphone.
166
+ *
167
+ * `clickVideo` / `clickAudio` call `getUserMedia` internally, so they can only
168
+ * ever publish a real device. Anything else — a `<canvas>` capture, a `<video>`
169
+ * element playing a file, a Web Audio destination, a processed or synthesised
170
+ * track, a virtual camera — previously required monkey-patching
171
+ * `navigator.mediaDevices.getUserMedia` around the call, which is racy and
172
+ * leaks if the control throws. This publishes your stream directly.
173
+ *
174
+ * The stream stays yours: stop its tracks when you are done, or call
175
+ * {@link stopProducing} to tear the producer down first.
176
+ *
177
+ * @example Publish a canvas as your camera
178
+ * ```ts
179
+ * import { produceMedia } from 'mediasfu-shared';
180
+ *
181
+ * const canvas = document.querySelector('canvas')!;
182
+ * const stream = canvas.captureStream(30);
183
+ * await produceMedia({ parameters, stream, kind: 'video' });
184
+ * ```
185
+ *
186
+ * @example Publish a video file's audio and video
187
+ * ```ts
188
+ * const el = document.querySelector('video')!;
189
+ * const stream = (el as any).captureStream();
190
+ * await produceMedia({ parameters, stream, kind: 'video' });
191
+ * await produceMedia({ parameters, stream, kind: 'audio' });
192
+ * ```
193
+ */
194
+ export async function produceMedia({
195
+ parameters,
196
+ stream,
197
+ kind,
198
+ allowUnconstrained = false,
199
+ }: ProduceMediaOptions): Promise<HeadlessActionResult> {
200
+ try {
201
+ const live = getCurrentParams({ parameters });
202
+ const readiness = getRoomReadiness({ parameters: live });
203
+ if (!readiness.ready) return { ok: false, error: readiness.reason };
204
+
205
+ const trackKind = kind === 'audio' ? 'audio' : 'video';
206
+ if (!hasLiveTrack(stream, trackKind)) {
207
+ return {
208
+ ok: false,
209
+ error: `The stream has no live ${trackKind} track to publish.`,
210
+ };
211
+ }
212
+
213
+ // The room's capture ceiling is an entitlement, and this path bypasses
214
+ // clickVideo, which is where the SDK normally applies it.
215
+ const limited = await enforceCaptureLimits(stream, live, kind, allowUnconstrained);
216
+ if (!limited.ok) return limited;
217
+
218
+ if (kind === 'audio') {
219
+ await streamSuccessAudio({ stream, parameters: live as any });
220
+ } else if (kind === 'screen') {
221
+ await streamSuccessScreen({ stream, parameters: live as any });
222
+ } else {
223
+ await streamSuccessVideo({ stream, parameters: live as any });
224
+ }
225
+ return { ok: true, error: '' };
226
+ } catch (error: any) {
227
+ return { ok: false, error: error?.message || 'The media could not be published.' };
228
+ }
229
+ }
230
+
231
+ export interface StopProducingOptions extends HeadlessOptions {
232
+ kind: ProducerKind;
233
+ }
234
+
235
+ export type StopProducingType = (
236
+ options: StopProducingOptions
237
+ ) => Promise<HeadlessActionResult>;
238
+
239
+ /**
240
+ * Tear down one of your producers without touching the others.
241
+ *
242
+ * `clickVideo`/`clickAudio` toggle capture *and* transport together. When you
243
+ * published a custom stream you usually want to stop only the transport and
244
+ * keep owning the stream (to swap sources without a visible gap, for example).
245
+ *
246
+ * @example Swap the published camera for a canvas without dropping the call
247
+ * ```ts
248
+ * await stopProducing({ parameters, kind: 'video' });
249
+ * await produceMedia({ parameters, stream: canvasStream, kind: 'video' });
250
+ * ```
251
+ */
252
+ export async function stopProducing({
253
+ parameters,
254
+ kind,
255
+ }: StopProducingOptions): Promise<HeadlessActionResult> {
256
+ try {
257
+ const live = getCurrentParams({ parameters });
258
+ if (kind === 'audio') {
259
+ await disconnectSendTransportAudio({ parameters: live as any });
260
+ } else if (kind === 'screen') {
261
+ await disconnectSendTransportScreen({ parameters: live as any });
262
+ } else {
263
+ await disconnectSendTransportVideo({ parameters: live as any });
264
+ }
265
+ return { ok: true, error: '' };
266
+ } catch (error: any) {
267
+ return { ok: false, error: error?.message || 'The producer could not be stopped.' };
268
+ }
269
+ }
270
+
271
+ export interface ProduceCanvasOptions extends HeadlessOptions {
272
+ canvas: HTMLCanvasElement;
273
+ /** Capture frame rate. Defaults to 30. */
274
+ frameRate?: number;
275
+ /** Publish as the camera (default) or as a screen share. */
276
+ as?: 'video' | 'screen';
277
+ }
278
+
279
+ export type ProduceCanvasType = (
280
+ options: ProduceCanvasOptions
281
+ ) => Promise<HeadlessActionResult & { stream: MediaStream | null }>;
282
+
283
+ /**
284
+ * Publish a `<canvas>` as video — slides, a whiteboard, a game, a generated
285
+ * overlay, a test pattern.
286
+ *
287
+ * Returns the captured stream so you can stop its tracks when finished.
288
+ *
289
+ * @example
290
+ * ```ts
291
+ * const { ok, stream } = await produceCanvas({ parameters, canvas, frameRate: 15 });
292
+ * // later
293
+ * stream?.getTracks().forEach((track) => track.stop());
294
+ * ```
295
+ */
296
+ export async function produceCanvas({
297
+ parameters,
298
+ canvas,
299
+ frameRate = 30,
300
+ as = 'video',
301
+ }: ProduceCanvasOptions): Promise<HeadlessActionResult & { stream: MediaStream | null }> {
302
+ try {
303
+ if (!canvas || typeof (canvas as any).captureStream !== 'function') {
304
+ return {
305
+ ok: false,
306
+ error: 'This canvas cannot be captured in the current browser.',
307
+ stream: null,
308
+ };
309
+ }
310
+ const stream: MediaStream = (canvas as any).captureStream(frameRate);
311
+ const result = await produceMedia({ parameters, stream, kind: as });
312
+ if (!result.ok) {
313
+ stream.getTracks().forEach((track) => track.stop());
314
+ return { ...result, stream: null };
315
+ }
316
+ return { ...result, stream };
317
+ } catch (error: any) {
318
+ return {
319
+ ok: false,
320
+ error: error?.message || 'The canvas could not be published.',
321
+ stream: null,
322
+ };
323
+ }
324
+ }
325
+
326
+ export interface ProduceElementOptions extends HeadlessOptions {
327
+ /** A playing `<video>` or `<audio>` element. */
328
+ element: HTMLMediaElement;
329
+ /** Publish the video track. Defaults to true for `<video>`. */
330
+ withVideo?: boolean;
331
+ /** Publish the audio track. Defaults to true. */
332
+ withAudio?: boolean;
333
+ }
334
+
335
+ export type ProduceElementType = (
336
+ options: ProduceElementOptions
337
+ ) => Promise<HeadlessActionResult & { stream: MediaStream | null }>;
338
+
339
+ /**
340
+ * Publish a playing `<video>` or `<audio>` element — media co-watching, a
341
+ * pre-recorded intro, background music, an HLS or MP4 source.
342
+ *
343
+ * The element must actually be playing: a paused element captures no frames, and
344
+ * browsers block autoplay with audio until the user has interacted with the page.
345
+ *
346
+ * @example
347
+ * ```ts
348
+ * const el = document.querySelector('video')!;
349
+ * await el.play();
350
+ * await produceElement({ parameters, element: el });
351
+ * ```
352
+ */
353
+ export async function produceElement({
354
+ parameters,
355
+ element,
356
+ withVideo,
357
+ withAudio = true,
358
+ }: ProduceElementOptions): Promise<HeadlessActionResult & { stream: MediaStream | null }> {
359
+ try {
360
+ const capture =
361
+ (element as any)?.captureStream || (element as any)?.mozCaptureStream;
362
+ if (typeof capture !== 'function') {
363
+ return {
364
+ ok: false,
365
+ error: 'This element cannot be captured in the current browser.',
366
+ stream: null,
367
+ };
368
+ }
369
+ const stream: MediaStream = capture.call(element);
370
+ const wantsVideo = withVideo ?? hasLiveTrack(stream, 'video');
371
+
372
+ const results: HeadlessActionResult[] = [];
373
+ if (wantsVideo && hasLiveTrack(stream, 'video')) {
374
+ results.push(await produceMedia({ parameters, stream, kind: 'video' }));
375
+ }
376
+ if (withAudio && hasLiveTrack(stream, 'audio')) {
377
+ results.push(await produceMedia({ parameters, stream, kind: 'audio' }));
378
+ }
379
+ if (results.length === 0) {
380
+ return { ok: false, error: 'The element has no live tracks yet.', stream: null };
381
+ }
382
+ const failure = results.find((result) => !result.ok);
383
+ if (failure) return { ...failure, stream };
384
+ return { ok: true, error: '', stream };
385
+ } catch (error: any) {
386
+ return {
387
+ ok: false,
388
+ error: error?.message || 'The element could not be published.',
389
+ stream: null,
390
+ };
391
+ }
392
+ }
393
+
394
+ export interface ProduceDisplayOptions extends HeadlessOptions {
395
+ /** Passed to `getDisplayMedia`. Defaults to `{ video: true }`. */
396
+ constraints?: DisplayMediaStreamOptions;
397
+ /** Also publish the captured system/tab audio when the user shares it. */
398
+ withAudio?: boolean;
399
+ }
400
+
401
+ export type ProduceDisplayType = (
402
+ options: ProduceDisplayOptions
403
+ ) => Promise<HeadlessActionResult & { stream: MediaStream | null }>;
404
+
405
+ /**
406
+ * Start a screen share from a headless surface.
407
+ *
408
+ * `getDisplayMedia` must be called from a user gesture, so invoke this directly
409
+ * in a click handler — not after an `await`.
410
+ *
411
+ * @example
412
+ * ```tsx
413
+ * <button onClick={() => produceDisplay({ parameters })}>Share screen</button>
414
+ * ```
415
+ */
416
+ export async function produceDisplay({
417
+ parameters,
418
+ constraints = { video: true },
419
+ withAudio = false,
420
+ }: ProduceDisplayOptions): Promise<HeadlessActionResult & { stream: MediaStream | null }> {
421
+ try {
422
+ const mediaDevices: any =
423
+ (parameters as HeadlessParameters)?.mediaDevices ||
424
+ (typeof navigator !== 'undefined' ? navigator.mediaDevices : null);
425
+ if (!mediaDevices || typeof mediaDevices.getDisplayMedia !== 'function') {
426
+ return {
427
+ ok: false,
428
+ error: 'Screen capture is unavailable in this browser.',
429
+ stream: null,
430
+ };
431
+ }
432
+ const stream: MediaStream = await mediaDevices.getDisplayMedia({
433
+ ...constraints,
434
+ ...(withAudio ? { audio: true } : {}),
435
+ });
436
+ const result = await produceMedia({ parameters, stream, kind: 'screen' });
437
+ if (!result.ok) {
438
+ stream.getTracks().forEach((track) => track.stop());
439
+ return { ...result, stream: null };
440
+ }
441
+ if (withAudio && hasLiveTrack(stream, 'audio')) {
442
+ await produceMedia({ parameters, stream, kind: 'audio' });
443
+ }
444
+ return { ...result, stream };
445
+ } catch (error: any) {
446
+ // A user dismissing the picker rejects here; that is not an error worth shouting about.
447
+ const name = error?.name || '';
448
+ if (name === 'NotAllowedError' || name === 'AbortError') {
449
+ return { ok: false, error: 'Screen sharing was cancelled.', stream: null };
450
+ }
451
+ return {
452
+ ok: false,
453
+ error: error?.message || 'The screen could not be shared.',
454
+ stream: null,
455
+ };
456
+ }
457
+ }
458
+
459
+ export interface ReplaceProducerTrackOptions extends HeadlessOptions {
460
+ /** The replacement track. Its kind decides which producer is swapped. */
461
+ track: MediaStreamTrack;
462
+ }
463
+
464
+ export type ReplaceProducerTrackType = (
465
+ options: ReplaceProducerTrackOptions
466
+ ) => Promise<HeadlessActionResult>;
467
+
468
+ /**
469
+ * Swap the track on a live producer without renegotiating.
470
+ *
471
+ * This is the seamless path for switching camera, applying or removing a
472
+ * background effect, or moving between media sources: remote participants see
473
+ * no interruption, because the producer and its transport stay up.
474
+ *
475
+ * @example
476
+ * ```ts
477
+ * const processed = applyBackgroundBlur(cameraTrack);
478
+ * await replaceProducerTrack({ parameters, track: processed });
479
+ * ```
480
+ */
481
+ export async function replaceProducerTrack({
482
+ parameters,
483
+ track,
484
+ }: ReplaceProducerTrackOptions): Promise<HeadlessActionResult> {
485
+ try {
486
+ if (!track || track.readyState !== 'live') {
487
+ return { ok: false, error: 'The replacement track is not live.' };
488
+ }
489
+ const live = getCurrentParams({ parameters });
490
+ const producer =
491
+ track.kind === 'audio'
492
+ ? live.audioProducer || live.localAudioProducer
493
+ : live.videoProducer || live.localVideoProducer;
494
+ if (!producer || typeof producer.replaceTrack !== 'function') {
495
+ return {
496
+ ok: false,
497
+ error: `There is no live ${track.kind} producer to replace.`,
498
+ };
499
+ }
500
+ await producer.replaceTrack({ track });
501
+ return { ok: true, error: '' };
502
+ } catch (error: any) {
503
+ return { ok: false, error: error?.message || 'The track could not be replaced.' };
504
+ }
505
+ }