mediasfu-shared 1.1.0 → 1.2.1

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 (138) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +17 -0
  3. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts +1 -1
  4. package/dist/ProducerClient/producerClientEmits/createDeviceClient.d.ts.map +1 -1
  5. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts +1 -1
  6. package/dist/ProducerClient/producerClientEmits/updateRoomParametersClient.d.ts.map +1 -1
  7. package/dist/consumers/connectIps.d.ts +1 -1
  8. package/dist/consumers/connectIps.d.ts.map +1 -1
  9. package/dist/consumers/connectRecvTransport.d.ts +1 -1
  10. package/dist/consumers/connectRecvTransport.d.ts.map +1 -1
  11. package/dist/consumers/connectSendTransport.d.ts +1 -1
  12. package/dist/consumers/connectSendTransport.d.ts.map +1 -1
  13. package/dist/consumers/connectSendTransportAudio.d.ts +1 -1
  14. package/dist/consumers/connectSendTransportAudio.d.ts.map +1 -1
  15. package/dist/consumers/connectSendTransportScreen.d.ts +1 -1
  16. package/dist/consumers/connectSendTransportScreen.d.ts.map +1 -1
  17. package/dist/consumers/connectSendTransportVideo.d.ts +1 -1
  18. package/dist/consumers/connectSendTransportVideo.d.ts.map +1 -1
  19. package/dist/consumers/createSendTransport.d.ts +1 -1
  20. package/dist/consumers/createSendTransport.d.ts.map +1 -1
  21. package/dist/consumers/disconnectSendTransportAudio.d.ts +1 -1
  22. package/dist/consumers/disconnectSendTransportAudio.d.ts.map +1 -1
  23. package/dist/consumers/disconnectSendTransportScreen.d.ts +1 -1
  24. package/dist/consumers/disconnectSendTransportScreen.d.ts.map +1 -1
  25. package/dist/consumers/disconnectSendTransportVideo.d.ts +1 -1
  26. package/dist/consumers/disconnectSendTransportVideo.d.ts.map +1 -1
  27. package/dist/consumers/index.cjs +80 -0
  28. package/dist/consumers/index.cjs.map +1 -0
  29. package/dist/consumers/index.d.ts +62 -0
  30. package/dist/consumers/index.d.ts.map +1 -0
  31. package/dist/consumers/index.js +80 -0
  32. package/dist/consumers/index.js.map +1 -0
  33. package/dist/consumers/resumeSendTransportAudio.d.ts +1 -1
  34. package/dist/consumers/resumeSendTransportAudio.d.ts.map +1 -1
  35. package/dist/consumers/signalNewConsumerTransport.d.ts +1 -1
  36. package/dist/consumers/signalNewConsumerTransport.d.ts.map +1 -1
  37. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts +1 -1
  38. package/dist/consumers/socketReceiveMethods/joinConsumeRoom.d.ts.map +1 -1
  39. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts +1 -1
  40. package/dist/consumers/socketReceiveMethods/newPipeProducer.d.ts.map +1 -1
  41. package/dist/consumers/streamSuccessAudio.d.ts +1 -1
  42. package/dist/consumers/streamSuccessAudio.d.ts.map +1 -1
  43. package/dist/consumers/streamSuccessAudioSwitch.d.ts +1 -1
  44. package/dist/consumers/streamSuccessAudioSwitch.d.ts.map +1 -1
  45. package/dist/consumers/streamSuccessVideo.d.ts +1 -1
  46. package/dist/consumers/streamSuccessVideo.d.ts.map +1 -1
  47. package/dist/getParticipantMedia-Bu_aZlxe.js +3555 -0
  48. package/dist/getParticipantMedia-Bu_aZlxe.js.map +1 -0
  49. package/dist/getParticipantMedia-DC_Nca8S.cjs +3554 -0
  50. package/dist/getParticipantMedia-DC_Nca8S.cjs.map +1 -0
  51. package/dist/index.cjs +299 -252
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +1994 -1947
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.native.cjs +230 -224
  58. package/dist/index.native.cjs.map +1 -1
  59. package/dist/index.native.js +349 -343
  60. package/dist/index.native.js.map +1 -1
  61. package/dist/joinLocalRoom-7ibqv7zZ.js +657 -0
  62. package/dist/joinLocalRoom-7ibqv7zZ.js.map +1 -0
  63. package/dist/joinLocalRoom-BJBDvTYh.cjs +673 -0
  64. package/dist/joinLocalRoom-BJBDvTYh.cjs.map +1 -0
  65. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs +1222 -0
  66. package/dist/joinRoomOnMediaSFU-CC8RVJgr.cjs.map +1 -0
  67. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js +1223 -0
  68. package/dist/joinRoomOnMediaSFU-y6vJ1OBo.js.map +1 -0
  69. package/dist/methods/index.cjs +3975 -0
  70. package/dist/methods/index.cjs.map +1 -0
  71. package/dist/methods/index.js +3976 -0
  72. package/dist/methods/index.js.map +1 -0
  73. package/dist/methods/socketReceive/getDomains.d.ts +1 -1
  74. package/dist/methods/socketReceive/getDomains.d.ts.map +1 -1
  75. package/dist/methods/utils/headless/virtualBackground.d.ts +2 -2
  76. package/dist/methods/utils/headless/virtualBackground.d.ts.map +1 -1
  77. package/dist/methods/utils/virtualBackgroundCompositor.d.ts +21 -0
  78. package/dist/methods/utils/virtualBackgroundCompositor.d.ts.map +1 -0
  79. package/dist/methods/whiteboard/captureCanvasStream.d.ts +1 -1
  80. package/dist/methods/whiteboard/captureCanvasStream.d.ts.map +1 -1
  81. package/dist/producers/producerEmits/joinConRoom.d.ts +1 -1
  82. package/dist/producers/producerEmits/joinConRoom.d.ts.map +1 -1
  83. package/dist/producers/producerEmits/joinRoom.d.ts +1 -1
  84. package/dist/producers/producerEmits/joinRoom.d.ts.map +1 -1
  85. package/dist/translationConsumerSwitch-C20MfNNq.cjs +509 -0
  86. package/dist/translationConsumerSwitch-C20MfNNq.cjs.map +1 -0
  87. package/dist/translationConsumerSwitch-zKuS5wgH.js +510 -0
  88. package/dist/translationConsumerSwitch-zKuS5wgH.js.map +1 -0
  89. package/dist/types/index.cjs +85 -0
  90. package/dist/types/index.cjs.map +1 -0
  91. package/dist/types/index.d.ts +2 -0
  92. package/dist/types/index.d.ts.map +1 -0
  93. package/dist/types/index.js +85 -0
  94. package/dist/types/index.js.map +1 -0
  95. package/dist/types/shared-base-types.d.ts +1 -1
  96. package/dist/types/shared-base-types.d.ts.map +1 -1
  97. package/dist/updateParticipantAudioDecibels-C_MygF6q.js +5432 -0
  98. package/dist/updateParticipantAudioDecibels-C_MygF6q.js.map +1 -0
  99. package/dist/updateParticipantAudioDecibels-bZ6R8WHj.cjs +5431 -0
  100. package/dist/updateParticipantAudioDecibels-bZ6R8WHj.cjs.map +1 -0
  101. package/dist/validateAlphanumeric-DKn5BsUP.cjs +15 -0
  102. package/dist/validateAlphanumeric-DKn5BsUP.cjs.map +1 -0
  103. package/dist/validateAlphanumeric-Dk1JB80W.js +16 -0
  104. package/dist/validateAlphanumeric-Dk1JB80W.js.map +1 -0
  105. package/package.json +2 -1
  106. package/src/ProducerClient/producerClientEmits/createDeviceClient.ts +1 -2
  107. package/src/ProducerClient/producerClientEmits/updateRoomParametersClient.ts +1 -1
  108. package/src/consumers/connectIps.ts +69 -9
  109. package/src/consumers/connectRecvTransport.ts +1 -1
  110. package/src/consumers/connectSendTransport.ts +1 -1
  111. package/src/consumers/connectSendTransportAudio.ts +1 -1
  112. package/src/consumers/connectSendTransportScreen.ts +1 -1
  113. package/src/consumers/connectSendTransportVideo.ts +1 -1
  114. package/src/consumers/createSendTransport.ts +1 -1
  115. package/src/consumers/disconnectSendTransportAudio.ts +1 -1
  116. package/src/consumers/disconnectSendTransportScreen.ts +1 -1
  117. package/src/consumers/disconnectSendTransportVideo.ts +1 -1
  118. package/src/consumers/index.ts +61 -0
  119. package/src/consumers/resumeSendTransportAudio.ts +1 -1
  120. package/src/consumers/signalNewConsumerTransport.ts +1 -2
  121. package/src/consumers/socketReceiveMethods/joinConsumeRoom.ts +1 -1
  122. package/src/consumers/socketReceiveMethods/newPipeProducer.ts +1 -1
  123. package/src/consumers/streamSuccessAudio.ts +1 -2
  124. package/src/consumers/streamSuccessAudioSwitch.ts +1 -2
  125. package/src/consumers/streamSuccessVideo.ts +1 -1
  126. package/src/index.ts +2 -0
  127. package/src/methods/socketReceive/getDomains.ts +1 -1
  128. package/src/methods/utils/headless/virtualBackground.ts +45 -30
  129. package/src/methods/utils/virtualBackgroundCompositor.ts +53 -0
  130. package/src/methods/whiteboard/captureCanvasStream.ts +2 -2
  131. package/src/producers/producerEmits/joinConRoom.ts +1 -1
  132. package/src/producers/producerEmits/joinRoom.ts +1 -1
  133. package/src/types/index.ts +1 -0
  134. package/src/types/shared-base-types.ts +2 -3
  135. package/dist/getParticipantMedia-D9ChmEqq.js +0 -15265
  136. package/dist/getParticipantMedia-D9ChmEqq.js.map +0 -1
  137. package/dist/getParticipantMedia-DWvIhPPY.cjs +0 -15281
  138. package/dist/getParticipantMedia-DWvIhPPY.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { RtpCapabilities } from 'mediasoup-client/lib/types';
1
+ import { RtpCapabilities } from 'mediasoup-client/types';
2
2
  import { AltDomains, ConsumeSocket } from '../../types/types';
3
3
  export interface ConnectIpsLikeOptions<TParameters = unknown, TConsumeSocket = ConsumeSocket> {
4
4
  consume_sockets: TConsumeSocket[];
@@ -1 +1 @@
1
- {"version":3,"file":"getDomains.d.ts","sourceRoot":"","sources":["../../../src/methods/socketReceive/getDomains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB,CACpC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa;IAE9B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,CAC5B,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,IAC5B,CACF,OAAO,EAAE,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,KACxD,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAEpC,MAAM,WAAW,oBAAoB,CACnC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;IAC7G,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAChC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;CAC/F;AAED,MAAM,MAAM,cAAc,CACxB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,IAChC,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACrB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,EAClC,sEAOC,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAG,OAAO,CAAC,IAAI,CAyBjF,CAAC"}
1
+ {"version":3,"file":"getDomains.d.ts","sourceRoot":"","sources":["../../../src/methods/socketReceive/getDomains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,qBAAqB,CACpC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa;IAE9B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,CAC5B,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,IAC5B,CACF,OAAO,EAAE,qBAAqB,CAAC,WAAW,EAAE,cAAc,CAAC,KACxD,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAEpC,MAAM,WAAW,oBAAoB,CACnC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,UAAU,EAAE,kBAAkB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;IAC7G,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAChC,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe;IAElC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,GAAG,WAAW,CAAC;CAC/F;AAED,MAAM,MAAM,cAAc,CACxB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,IAChC,CAAC,OAAO,EAAE,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjG;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,GACrB,WAAW,GAAG,OAAO,EACrB,cAAc,GAAG,aAAa,EAC9B,gBAAgB,GAAG,eAAe,EAClC,sEAOC,iBAAiB,CAAC,WAAW,EAAE,cAAc,EAAE,gBAAgB,CAAC,KAAG,OAAO,CAAC,IAAI,CAyBjF,CAAC"}
@@ -37,8 +37,8 @@ export type ApplyVirtualBackgroundType = (options: ApplyVirtualBackgroundOptions
37
37
  * without mounting the modal off-screen and simulating a click.
38
38
  *
39
39
  * This runs the same MediaPipe pipeline the modal uses — identical compositing:
40
- * draw the segmentation mask, `source-out` fill with the background pattern,
41
- * then `destination-atop` the camera frame — against an offscreen video and
40
+ * draw the segmentation mask, retain the person with `source-in`, then paint
41
+ * the replacement behind them with `destination-over` — against an offscreen video and
42
42
  * canvas it creates and owns.
43
43
  *
44
44
  * It also keeps the SDK's own state honest (`virtualStream`, `processedStream`,
@@ -1 +1 @@
1
- {"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA8BrD,MAAM,WAAW,6BAA8B,SAAQ,eAAe;IACpE;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC5D,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,6BAA6B,KACnC,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,SAAc,EACd,cAAkB,EAClB,OAAc,EACd,SAAyB,GAC1B,EAAE,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CA2HhG;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBjD;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
1
+ {"version":3,"file":"virtualBackground.d.ts","sourceRoot":"","sources":["../../../../src/methods/utils/headless/virtualBackground.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAgCrD,MAAM,WAAW,6BAA8B,SAAQ,eAAe;IACpE;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,IAAI,CAAC;IAC5D,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,6BAA6B,KACnC,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,EACV,KAAK,EACL,SAAc,EACd,cAAkB,EAClB,OAAc,EACd,SAAyB,GAC1B,EAAE,6BAA6B,GAAG,OAAO,CAAC,oBAAoB,GAAG;IAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC,CAwIhG;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,EAC3C,UAAU,GACX,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBjD;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD"}
@@ -0,0 +1,21 @@
1
+ /** Options for composing one segmented camera frame. */
2
+ export interface CompositeVirtualBackgroundFrameOptions {
3
+ ctx: CanvasRenderingContext2D;
4
+ segmentationMask: CanvasImageSource;
5
+ sourceImage: CanvasImageSource;
6
+ backgroundImage?: CanvasImageSource | null;
7
+ width: number;
8
+ height: number;
9
+ repeatPattern?: 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat';
10
+ blurFallbackPixels?: number;
11
+ }
12
+ /**
13
+ * Paint the segmented person over a replacement background.
14
+ *
15
+ * Keeping this operation in the shared runtime makes headless web adapters and
16
+ * the React SDK use the same compositing contract. It is deliberately not
17
+ * exported from the native entry point; native platforms use their camera
18
+ * processor instead of a browser canvas.
19
+ */
20
+ export declare function compositeVirtualBackgroundFrame({ ctx, segmentationMask, sourceImage, backgroundImage, width, height, repeatPattern, blurFallbackPixels, }: CompositeVirtualBackgroundFrameOptions): void;
21
+ //# sourceMappingURL=virtualBackgroundCompositor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtualBackgroundCompositor.d.ts","sourceRoot":"","sources":["../../../src/methods/utils/virtualBackgroundCompositor.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,WAAW,sCAAsC;IACrD,GAAG,EAAE,wBAAwB,CAAC;IAC9B,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC;IAC/B,eAAe,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,GAAG,EACH,gBAAgB,EAChB,WAAW,EACX,eAAsB,EACtB,KAAK,EACL,MAAM,EACN,aAAwB,EACxB,kBAAsB,GACvB,EAAE,sCAAsC,GAAG,IAAI,CAuB/C"}
@@ -1,4 +1,4 @@
1
- import { Producer } from 'mediasoup-client/lib/types';
1
+ import { Producer } from 'mediasoup-client/types';
2
2
  import { ConnectSendTransportScreenParameters, ConnectSendTransportScreenType, CreateSendTransportParameters, CreateSendTransportType, DisconnectSendTransportScreenParameters, DisconnectSendTransportScreenType, SleepType } from '../../types/types';
3
3
  import { Socket } from 'socket.io-client';
4
4
  export interface CaptureCanvasStreamParameters extends CreateSendTransportParameters, DisconnectSendTransportScreenParameters, ConnectSendTransportScreenParameters {
@@ -1 +1 @@
1
- {"version":3,"file":"captureCanvasStream.d.ts","sourceRoot":"","sources":["../../../src/methods/whiteboard/captureCanvasStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EACV,oCAAoC,EACpC,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,uCAAuC,EACvC,iCAAiC,EACjC,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,6BACf,SAAQ,6BAA6B,EACnC,uCAAuC,EACvC,oCAAoC;IACtC,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,mBAAmB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,yBAAyB,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAErE,KAAK,EAAE,SAAS,CAAC;IACjB,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,0BAA0B,EAAE,8BAA8B,CAAC;IAC3D,6BAA6B,EAAE,iCAAiC,CAAC;IAEjE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,6BAA6B,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAU,wBAGvC,0BAA0B,KAAG,OAAO,CAAC,IAAI,CAuE3C,CAAC"}
1
+ {"version":3,"file":"captureCanvasStream.d.ts","sourceRoot":"","sources":["../../../src/methods/whiteboard/captureCanvasStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EACV,oCAAoC,EACpC,8BAA8B,EAC9B,6BAA6B,EAC7B,uBAAuB,EACvB,uCAAuC,EACvC,iCAAiC,EACjC,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,6BACf,SAAQ,6BAA6B,EACnC,uCAAuC,EACvC,oCAAoC;IACtC,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC3C,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;IAChC,mBAAmB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,yBAAyB,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IAErE,KAAK,EAAE,SAAS,CAAC;IACjB,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,0BAA0B,EAAE,8BAA8B,CAAC;IAC3D,6BAA6B,EAAE,iCAAiC,CAAC;IAEjE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,6BAA6B,CAAC;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7F;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAU,wBAGvC,0BAA0B,KAAG,OAAO,CAAC,IAAI,CAuE3C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Socket } from 'socket.io-client';
2
- import { RtpCapabilities } from 'mediasoup-client/lib/types';
2
+ import { RtpCapabilities } from 'mediasoup-client/types';
3
3
  export interface JoinConRoomOptions {
4
4
  socket: Socket;
5
5
  roomName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"joinConRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinConRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAID,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,wBAAsB,WAAW,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,kBAAkB,GAC1E,OAAO,CAAC,mBAAmB,CAAC,CA0F9B"}
1
+ {"version":3,"file":"joinConRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinConRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAID,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,wBAAsB,WAAW,CAC/B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,kBAAkB,GAC1E,OAAO,CAAC,mBAAmB,CAAC,CA0F9B"}
@@ -1,5 +1,5 @@
1
1
  import { Socket } from 'socket.io-client';
2
- import { RtpCapabilities } from 'mediasoup-client/lib/types';
2
+ import { RtpCapabilities } from 'mediasoup-client/types';
3
3
  export interface JoinRoomOptions {
4
4
  socket: Socket;
5
5
  roomName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"joinRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEnF;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,WAAW,GACZ,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmF7C"}
1
+ {"version":3,"file":"joinRoom.d.ts","sourceRoot":"","sources":["../../../src/producers/producerEmits/joinRoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEnF;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,WAAW,GACZ,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmF7C"}
@@ -0,0 +1,509 @@
1
+ "use strict";
2
+ function buildAddVideosGridPlan({
3
+ mainGridStreams,
4
+ altGridStreams,
5
+ numToAdd
6
+ }) {
7
+ const safeMain = Array.isArray(mainGridStreams) ? mainGridStreams : [];
8
+ const safeAlt = Array.isArray(altGridStreams) ? altGridStreams : [];
9
+ const bounded = Math.max(0, Math.min(numToAdd ?? safeMain.length, safeMain.length));
10
+ const mainEntries = safeMain.slice(0, bounded).map((stream, index) => ({
11
+ stream,
12
+ index
13
+ }));
14
+ const altEntries = safeAlt.map((stream, index) => ({
15
+ stream,
16
+ index
17
+ }));
18
+ return { mainEntries, altEntries };
19
+ }
20
+ function resolveMainHostRenderMode({
21
+ islevel,
22
+ localUIMode,
23
+ videoAlreadyOn,
24
+ audioAlreadyOn,
25
+ hostVideoOn,
26
+ hostMuted
27
+ }) {
28
+ const hostVideoOffPath = islevel !== "2" && !hostVideoOn || islevel === "2" && (!hostVideoOn || !videoAlreadyOn) || localUIMode === true;
29
+ if (!hostVideoOffPath) {
30
+ return "video";
31
+ }
32
+ if (islevel === "2" && videoAlreadyOn) {
33
+ return "adminVideo";
34
+ }
35
+ const audOn = islevel === "2" && audioAlreadyOn || islevel !== "2" && hostMuted === false;
36
+ return audOn ? "audio" : "mini";
37
+ }
38
+ function resolveHostVideoStream({
39
+ islevel,
40
+ keepBackground,
41
+ virtualStream,
42
+ localStreamVideo,
43
+ oldAllStreams,
44
+ hostVideoID
45
+ }) {
46
+ if (islevel === "2") {
47
+ return keepBackground && virtualStream ? virtualStream : localStreamVideo;
48
+ }
49
+ const safeOldStreams = Array.isArray(oldAllStreams) ? oldAllStreams : [];
50
+ const matched = safeOldStreams.find((stream) => stream.producerId === hostVideoID);
51
+ return matched?.stream ?? null;
52
+ }
53
+ function buildMainScreenState({
54
+ filled,
55
+ adminOnMainScreen,
56
+ mainScreenPerson
57
+ }) {
58
+ return {
59
+ filled,
60
+ adminOnMainScreen,
61
+ mainScreenPerson
62
+ };
63
+ }
64
+ function buildMainHostCardPlan({
65
+ islevel,
66
+ localUIMode,
67
+ videoAlreadyOn,
68
+ audioAlreadyOn,
69
+ hostVideoOn,
70
+ hostMuted,
71
+ hostIsAdmin,
72
+ hostName,
73
+ hostVideoID,
74
+ fallbackName,
75
+ member,
76
+ keepBackground,
77
+ virtualStream,
78
+ localStreamVideo,
79
+ oldAllStreams
80
+ }) {
81
+ const mode = resolveMainHostRenderMode({
82
+ islevel,
83
+ localUIMode,
84
+ videoAlreadyOn,
85
+ audioAlreadyOn,
86
+ hostVideoOn,
87
+ hostMuted
88
+ });
89
+ if (mode === "adminVideo") {
90
+ return {
91
+ kind: "video",
92
+ key: hostVideoID || hostName || "host-video",
93
+ name: hostName,
94
+ remoteProducerId: hostVideoID || "",
95
+ videoStream: keepBackground && virtualStream ? virtualStream : localStreamVideo,
96
+ doMirror: true,
97
+ state: buildMainScreenState({
98
+ filled: true,
99
+ adminOnMainScreen: true,
100
+ mainScreenPerson: hostName
101
+ })
102
+ };
103
+ }
104
+ if (mode === "audio") {
105
+ return {
106
+ kind: "audio",
107
+ key: hostName || fallbackName,
108
+ name: hostName,
109
+ state: buildMainScreenState({
110
+ filled: true,
111
+ adminOnMainScreen: islevel === "2",
112
+ mainScreenPerson: hostName
113
+ })
114
+ };
115
+ }
116
+ if (mode === "mini") {
117
+ return {
118
+ kind: "mini",
119
+ key: fallbackName,
120
+ name: hostName,
121
+ initials: fallbackName,
122
+ state: buildMainScreenState({
123
+ filled: false,
124
+ adminOnMainScreen: islevel === "2",
125
+ mainScreenPerson: hostName
126
+ })
127
+ };
128
+ }
129
+ const hostStream = resolveHostVideoStream({
130
+ islevel,
131
+ keepBackground,
132
+ virtualStream,
133
+ localStreamVideo,
134
+ oldAllStreams,
135
+ hostVideoID
136
+ });
137
+ if (!hostStream) {
138
+ return {
139
+ kind: "mini",
140
+ key: fallbackName,
141
+ name: hostName,
142
+ initials: fallbackName,
143
+ state: buildMainScreenState({
144
+ filled: false,
145
+ adminOnMainScreen: islevel === "2",
146
+ mainScreenPerson: hostName
147
+ })
148
+ };
149
+ }
150
+ return {
151
+ kind: "video",
152
+ key: hostVideoID || hostName || "host-video",
153
+ name: hostName,
154
+ remoteProducerId: hostVideoID || "",
155
+ videoStream: hostStream,
156
+ doMirror: member === hostName,
157
+ state: buildMainScreenState({
158
+ filled: true,
159
+ adminOnMainScreen: hostIsAdmin,
160
+ mainScreenPerson: hostName
161
+ })
162
+ };
163
+ }
164
+ function buildScreenShareHostCardPlan({
165
+ hostName,
166
+ hostScreenID,
167
+ hostIsAdmin,
168
+ shared,
169
+ hostStream,
170
+ screenForceFullDisplay,
171
+ annotateScreenStream
172
+ }) {
173
+ return {
174
+ key: hostScreenID || hostName || "host-screen",
175
+ name: hostName,
176
+ remoteProducerId: hostScreenID || "",
177
+ videoStream: shared ? hostStream : hostStream?.stream ?? null,
178
+ forceFullDisplay: annotateScreenStream && shared ? false : screenForceFullDisplay,
179
+ doMirror: false,
180
+ state: buildMainScreenState({
181
+ filled: true,
182
+ adminOnMainScreen: hostIsAdmin,
183
+ mainScreenPerson: hostName
184
+ })
185
+ };
186
+ }
187
+ function buildPrepopulateUserMediaPlan({
188
+ participants,
189
+ allVideoStreams,
190
+ member,
191
+ shared,
192
+ shareScreenStarted,
193
+ eventType,
194
+ screenId,
195
+ whiteboardStarted,
196
+ whiteboardEnded,
197
+ remoteScreenStream,
198
+ localStreamScreen,
199
+ checkOrientation,
200
+ isWideScreen,
201
+ forceFullDisplay,
202
+ includeWhiteboardAsScreenFlow = false
203
+ }) {
204
+ const safeParticipants = Array.isArray(participants) ? participants : [];
205
+ const safeVideoStreams = Array.isArray(allVideoStreams) ? allVideoStreams : [];
206
+ const safeRemoteScreenStreams = Array.isArray(remoteScreenStream) ? remoteScreenStream : [];
207
+ const whiteboardActive = whiteboardStarted && !whiteboardEnded;
208
+ const screenFlowActive = shareScreenStarted || shared || includeWhiteboardAsScreenFlow && whiteboardActive;
209
+ let screenForceFullDisplay = forceFullDisplay;
210
+ const orientation = checkOrientation();
211
+ if ((orientation === "portrait" || !isWideScreen) && (shareScreenStarted || shared)) {
212
+ screenForceFullDisplay = false;
213
+ }
214
+ if (!screenFlowActive) {
215
+ if (eventType === "conference") {
216
+ return {
217
+ screenFlowActive,
218
+ shouldReturnEarly: true,
219
+ shouldUpdateAdminOnMainScreen: false,
220
+ screenForceFullDisplay,
221
+ host: null,
222
+ hostStream: null,
223
+ adminOnMainScreen: false,
224
+ mainScreenPerson: ""
225
+ };
226
+ }
227
+ const host2 = safeParticipants.find((participant) => participant.islevel === "2") ?? null;
228
+ return {
229
+ screenFlowActive,
230
+ shouldReturnEarly: false,
231
+ shouldUpdateAdminOnMainScreen: false,
232
+ screenForceFullDisplay,
233
+ host: host2,
234
+ hostStream: null,
235
+ adminOnMainScreen: false,
236
+ mainScreenPerson: host2?.name ?? ""
237
+ };
238
+ }
239
+ let host = null;
240
+ let hostStream = null;
241
+ if (shared) {
242
+ host = { name: member, audioID: "", videoID: "" };
243
+ hostStream = localStreamScreen;
244
+ } else {
245
+ host = safeParticipants.find(
246
+ (participant) => participant.ScreenID === screenId && participant.ScreenOn === true
247
+ ) ?? null;
248
+ if (whiteboardActive) {
249
+ host = {
250
+ name: "WhiteboardActive",
251
+ islevel: "2",
252
+ audioID: "",
253
+ videoID: ""
254
+ };
255
+ hostStream = { producerId: "WhiteboardActive" };
256
+ }
257
+ if (host === null) {
258
+ host = safeParticipants.find((participant) => participant.ScreenOn === true) ?? null;
259
+ }
260
+ if (host && !String(host.name ?? "").includes("WhiteboardActive")) {
261
+ if (safeRemoteScreenStreams.length === 0) {
262
+ hostStream = safeVideoStreams.find((stream) => stream.producerId === host?.ScreenID) ?? null;
263
+ } else {
264
+ hostStream = safeRemoteScreenStreams[0];
265
+ }
266
+ }
267
+ }
268
+ return {
269
+ screenFlowActive,
270
+ shouldReturnEarly: false,
271
+ shouldUpdateAdminOnMainScreen: true,
272
+ screenForceFullDisplay,
273
+ host,
274
+ hostStream,
275
+ adminOnMainScreen: (host && host.islevel === "2") ?? false,
276
+ mainScreenPerson: host?.name ?? ""
277
+ };
278
+ }
279
+ const isSpeakerInMyBreakoutRoom = (speakerName, parameters) => {
280
+ const {
281
+ breakOutRoomStarted = false,
282
+ breakOutRoomEnded = false,
283
+ limitedBreakRoom = [],
284
+ participants = [],
285
+ islevel = "1",
286
+ eventType = "conference",
287
+ hostNewRoom = -1,
288
+ breakoutRooms = [],
289
+ member = ""
290
+ } = parameters;
291
+ if (!breakOutRoomStarted || breakOutRoomEnded) {
292
+ return true;
293
+ }
294
+ const host = participants.find((p) => p.islevel === "2");
295
+ const speakerIsHost = host?.name === speakerName;
296
+ if (islevel !== "2") {
297
+ if (eventType === "webinar" && speakerIsHost) {
298
+ return true;
299
+ }
300
+ if (eventType === "conference" && speakerIsHost) {
301
+ const roomMember = breakoutRooms.find(
302
+ (r) => r.find((p) => p.name === member)
303
+ );
304
+ const memberBreakRoom = roomMember ? breakoutRooms.indexOf(roomMember) : -1;
305
+ const inBreakRoom = memberBreakRoom !== -1;
306
+ if (inBreakRoom) {
307
+ return memberBreakRoom === hostNewRoom;
308
+ }
309
+ if (hostNewRoom === -1) {
310
+ return true;
311
+ }
312
+ return hostNewRoom === memberBreakRoom && memberBreakRoom !== -1;
313
+ }
314
+ }
315
+ return limitedBreakRoom.some((p) => p.name === speakerName);
316
+ };
317
+ const pauseOriginalProducer = async ({
318
+ originalProducerId,
319
+ speakerId,
320
+ parameters
321
+ }) => {
322
+ try {
323
+ const { consumerTransports } = parameters;
324
+ if (speakerId && !isSpeakerInMyBreakoutRoom(speakerId, parameters)) {
325
+ return;
326
+ }
327
+ const transport = consumerTransports.find(
328
+ (t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
329
+ );
330
+ if (!transport?.consumer) {
331
+ return;
332
+ }
333
+ if (transport.consumer.track) {
334
+ transport.consumer.track.enabled = false;
335
+ }
336
+ if (transport.consumer.paused) {
337
+ return;
338
+ }
339
+ transport.consumer.pause();
340
+ transport.socket_?.emit(
341
+ "consumer-pause",
342
+ { serverConsumerId: transport.serverConsumerTransportId },
343
+ async () => {
344
+ }
345
+ );
346
+ } catch (error) {
347
+ console.error("[TranslationSwitch] Error pausing original producer:", error);
348
+ }
349
+ };
350
+ const resumeOriginalProducer = async ({
351
+ originalProducerId,
352
+ speakerId,
353
+ parameters
354
+ }) => {
355
+ try {
356
+ const { consumerTransports } = parameters;
357
+ if (speakerId && !isSpeakerInMyBreakoutRoom(speakerId, parameters)) {
358
+ return;
359
+ }
360
+ const transport = consumerTransports.find(
361
+ (t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
362
+ );
363
+ if (!transport?.consumer) {
364
+ return;
365
+ }
366
+ if (!transport.consumer.paused) {
367
+ if (transport.consumer.track) {
368
+ transport.consumer.track.enabled = true;
369
+ }
370
+ return;
371
+ }
372
+ transport.socket_?.emit(
373
+ "consumer-resume",
374
+ { serverConsumerId: transport.serverConsumerTransportId },
375
+ async ({ resumed }) => {
376
+ if (resumed) {
377
+ if (transport.consumer.track) {
378
+ transport.consumer.track.enabled = true;
379
+ }
380
+ transport.consumer.resume();
381
+ }
382
+ }
383
+ );
384
+ } catch (error) {
385
+ console.error("[TranslationSwitch] Error resuming original producer:", error);
386
+ }
387
+ };
388
+ const isConsumingTranslationForSpeaker = (speakerId, consumerTransports, translationProducerMap) => {
389
+ const translationInfo = translationProducerMap.get(speakerId);
390
+ if (translationInfo) {
391
+ const hasConsumer = consumerTransports.some(
392
+ (t) => t.producerId === translationInfo.translationProducerId
393
+ );
394
+ if (hasConsumer) {
395
+ return {
396
+ consuming: true,
397
+ language: translationInfo.language,
398
+ translationProducerId: translationInfo.translationProducerId,
399
+ originalProducerId: translationInfo.originalProducerId
400
+ };
401
+ }
402
+ }
403
+ return { consuming: false };
404
+ };
405
+ const getActiveTranslationConsumers = (translationProducerMap, consumerTransports) => {
406
+ const results = [];
407
+ translationProducerMap.forEach((info, speakerId) => {
408
+ const hasConsumer = consumerTransports.some(
409
+ (t) => t.producerId === info.translationProducerId
410
+ );
411
+ if (hasConsumer) {
412
+ results.push({
413
+ speakerId,
414
+ ...info
415
+ });
416
+ }
417
+ });
418
+ return results;
419
+ };
420
+ const findOriginalProducerForSpeaker = (speakerId, allAudioStreams) => {
421
+ const stream = allAudioStreams.find(
422
+ (s) => s.name === speakerId || s.producerId?.includes(speakerId)
423
+ );
424
+ return stream?.producerId || null;
425
+ };
426
+ const stopConsumingTranslation = async (options) => {
427
+ const { language, translationProducerMap, parameters } = options;
428
+ try {
429
+ const { consumerTransports, updateConsumerTransports } = parameters;
430
+ let originalProducerId = null;
431
+ let translationProducerId = null;
432
+ for (const [origId, langMap] of Object.entries(translationProducerMap)) {
433
+ if (langMap && langMap[language]) {
434
+ translationProducerId = langMap[language];
435
+ originalProducerId = origId;
436
+ break;
437
+ }
438
+ }
439
+ if (!translationProducerId) {
440
+ return originalProducerId;
441
+ }
442
+ const transportIndex = consumerTransports.findIndex(
443
+ (t) => t.producerId === translationProducerId
444
+ );
445
+ if (transportIndex === -1) {
446
+ return originalProducerId;
447
+ }
448
+ const transport = consumerTransports[transportIndex];
449
+ if (transport.socket_ && transport.consumer) {
450
+ transport.socket_.emit(
451
+ "consumer-close",
452
+ { serverConsumerId: transport.serverConsumerTransportId },
453
+ () => {
454
+ }
455
+ );
456
+ }
457
+ if (transport.consumer) {
458
+ transport.consumer.close();
459
+ }
460
+ const updatedTransports = consumerTransports.filter((_, i) => i !== transportIndex);
461
+ updateConsumerTransports(updatedTransports);
462
+ return originalProducerId;
463
+ } catch (error) {
464
+ console.error("[TranslationSwitch] Error stopping translation consumer:", error);
465
+ return null;
466
+ }
467
+ };
468
+ const syncTranslationStateAfterBreakoutChange = async (translationProducerMap, speakerIdByProducerId, parameters) => {
469
+ try {
470
+ const { consumerTransports } = parameters;
471
+ for (const [originalProducerId, langMap] of Object.entries(translationProducerMap)) {
472
+ const speakerId = speakerIdByProducerId[originalProducerId];
473
+ if (!speakerId) continue;
474
+ const inMyRoom = isSpeakerInMyBreakoutRoom(speakerId, parameters);
475
+ const hasTranslation = Object.keys(langMap).length > 0;
476
+ const originalConsumer = consumerTransports.find(
477
+ (t) => t.producerId === originalProducerId && t.consumer?.kind === "audio"
478
+ );
479
+ if (!originalConsumer) continue;
480
+ if (inMyRoom && hasTranslation) {
481
+ if (!originalConsumer.consumer.paused) {
482
+ await pauseOriginalProducer({
483
+ originalProducerId,
484
+ speakerId,
485
+ parameters
486
+ });
487
+ }
488
+ }
489
+ }
490
+ } catch (error) {
491
+ console.error("[TranslationSwitch] Error syncing translation state:", error);
492
+ }
493
+ };
494
+ exports.buildAddVideosGridPlan = buildAddVideosGridPlan;
495
+ exports.buildMainHostCardPlan = buildMainHostCardPlan;
496
+ exports.buildMainScreenState = buildMainScreenState;
497
+ exports.buildPrepopulateUserMediaPlan = buildPrepopulateUserMediaPlan;
498
+ exports.buildScreenShareHostCardPlan = buildScreenShareHostCardPlan;
499
+ exports.findOriginalProducerForSpeaker = findOriginalProducerForSpeaker;
500
+ exports.getActiveTranslationConsumers = getActiveTranslationConsumers;
501
+ exports.isConsumingTranslationForSpeaker = isConsumingTranslationForSpeaker;
502
+ exports.isSpeakerInMyBreakoutRoom = isSpeakerInMyBreakoutRoom;
503
+ exports.pauseOriginalProducer = pauseOriginalProducer;
504
+ exports.resolveHostVideoStream = resolveHostVideoStream;
505
+ exports.resolveMainHostRenderMode = resolveMainHostRenderMode;
506
+ exports.resumeOriginalProducer = resumeOriginalProducer;
507
+ exports.stopConsumingTranslation = stopConsumingTranslation;
508
+ exports.syncTranslationStateAfterBreakoutChange = syncTranslationStateAfterBreakoutChange;
509
+ //# sourceMappingURL=translationConsumerSwitch-C20MfNNq.cjs.map