@webex/plugin-meetings 3.8.1 → 3.9.0-next.10

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 (294) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/constants.js +32 -3
  5. package/dist/constants.js.map +1 -1
  6. package/dist/controls-options-manager/enums.js +1 -0
  7. package/dist/controls-options-manager/enums.js.map +1 -1
  8. package/dist/controls-options-manager/types.js.map +1 -1
  9. package/dist/controls-options-manager/util.js +26 -0
  10. package/dist/controls-options-manager/util.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/controlsUtils.js +11 -3
  14. package/dist/locus-info/controlsUtils.js.map +1 -1
  15. package/dist/locus-info/index.js +84 -91
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/locus-info/parser.js +4 -1
  18. package/dist/locus-info/parser.js.map +1 -1
  19. package/dist/media/index.js +2 -2
  20. package/dist/media/index.js.map +1 -1
  21. package/dist/meeting/brbState.js +17 -14
  22. package/dist/meeting/brbState.js.map +1 -1
  23. package/dist/meeting/in-meeting-actions.js +11 -1
  24. package/dist/meeting/in-meeting-actions.js.map +1 -1
  25. package/dist/meeting/index.js +484 -287
  26. package/dist/meeting/index.js.map +1 -1
  27. package/dist/meeting/request.js +19 -0
  28. package/dist/meeting/request.js.map +1 -1
  29. package/dist/meeting/request.type.js.map +1 -1
  30. package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
  31. package/dist/meeting/type.js.map +1 -0
  32. package/dist/meeting/util.js +68 -2
  33. package/dist/meeting/util.js.map +1 -1
  34. package/dist/meetings/index.js +35 -33
  35. package/dist/meetings/index.js.map +1 -1
  36. package/dist/members/index.js +14 -11
  37. package/dist/members/index.js.map +1 -1
  38. package/dist/members/request.js +3 -3
  39. package/dist/members/request.js.map +1 -1
  40. package/dist/members/util.js +25 -8
  41. package/dist/members/util.js.map +1 -1
  42. package/dist/metrics/constants.js +1 -0
  43. package/dist/metrics/constants.js.map +1 -1
  44. package/dist/multistream/mediaRequestManager.js +1 -1
  45. package/dist/multistream/mediaRequestManager.js.map +1 -1
  46. package/dist/multistream/remoteMedia.js +34 -5
  47. package/dist/multistream/remoteMedia.js.map +1 -1
  48. package/dist/multistream/remoteMediaGroup.js +42 -2
  49. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  50. package/dist/multistream/sendSlotManager.js +32 -2
  51. package/dist/multistream/sendSlotManager.js.map +1 -1
  52. package/dist/reachability/index.js +8 -13
  53. package/dist/reachability/index.js.map +1 -1
  54. package/dist/types/constants.d.ts +28 -0
  55. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  56. package/dist/types/controls-options-manager/types.d.ts +4 -1
  57. package/dist/types/locus-info/index.d.ts +2 -9
  58. package/dist/types/meeting/brbState.d.ts +0 -1
  59. package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
  60. package/dist/types/meeting/index.d.ts +47 -19
  61. package/dist/types/meeting/request.d.ts +9 -1
  62. package/dist/types/meeting/request.type.d.ts +74 -0
  63. package/dist/types/meeting/type.d.ts +9 -0
  64. package/dist/types/meeting/util.d.ts +3 -0
  65. package/dist/types/members/index.d.ts +12 -8
  66. package/dist/types/members/request.d.ts +1 -1
  67. package/dist/types/members/util.d.ts +13 -6
  68. package/dist/types/metrics/constants.d.ts +1 -0
  69. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  70. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  71. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  72. package/dist/types/reachability/index.d.ts +2 -2
  73. package/dist/webinar/index.js +1 -1
  74. package/package.json +24 -25
  75. package/src/constants.ts +32 -2
  76. package/src/controls-options-manager/enums.ts +1 -0
  77. package/src/controls-options-manager/types.ts +6 -1
  78. package/src/controls-options-manager/util.ts +31 -0
  79. package/src/locus-info/controlsUtils.ts +15 -0
  80. package/src/locus-info/index.ts +103 -92
  81. package/src/locus-info/parser.ts +5 -1
  82. package/src/media/index.ts +2 -2
  83. package/src/meeting/brbState.ts +13 -9
  84. package/src/meeting/in-meeting-actions.ts +21 -0
  85. package/src/meeting/index.ts +278 -73
  86. package/src/meeting/request.ts +16 -0
  87. package/src/meeting/request.type.ts +64 -0
  88. package/src/meeting/type.ts +9 -0
  89. package/src/meeting/util.ts +73 -2
  90. package/src/meetings/index.ts +3 -2
  91. package/src/members/index.ts +22 -12
  92. package/src/members/request.ts +2 -2
  93. package/src/members/util.ts +34 -6
  94. package/src/metrics/constants.ts +1 -0
  95. package/src/multistream/mediaRequestManager.ts +7 -7
  96. package/src/multistream/remoteMedia.ts +34 -4
  97. package/src/multistream/remoteMediaGroup.ts +37 -2
  98. package/src/multistream/sendSlotManager.ts +34 -2
  99. package/src/reachability/index.ts +8 -16
  100. package/test/unit/spec/controls-options-manager/util.js +58 -0
  101. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  102. package/test/unit/spec/locus-info/index.js +247 -89
  103. package/test/unit/spec/locus-info/parser.js +3 -2
  104. package/test/unit/spec/media/index.ts +107 -0
  105. package/test/unit/spec/meeting/brbState.ts +23 -4
  106. package/test/unit/spec/meeting/in-meeting-actions.ts +10 -0
  107. package/test/unit/spec/meeting/index.js +976 -91
  108. package/test/unit/spec/meeting/request.js +71 -0
  109. package/test/unit/spec/meeting/utils.js +122 -1
  110. package/test/unit/spec/meetings/index.js +2 -0
  111. package/test/unit/spec/members/index.js +98 -11
  112. package/test/unit/spec/members/request.js +57 -2
  113. package/test/unit/spec/members/utils.js +139 -17
  114. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  115. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  116. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  117. package/test/unit/spec/reachability/index.ts +160 -9
  118. package/dist/annotation/annotation.types.d.ts +0 -42
  119. package/dist/annotation/constants.d.ts +0 -31
  120. package/dist/annotation/index.d.ts +0 -117
  121. package/dist/breakouts/breakout.d.ts +0 -8
  122. package/dist/breakouts/collection.d.ts +0 -5
  123. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  124. package/dist/breakouts/events.d.ts +0 -8
  125. package/dist/breakouts/index.d.ts +0 -5
  126. package/dist/breakouts/request.d.ts +0 -22
  127. package/dist/breakouts/utils.d.ts +0 -15
  128. package/dist/common/browser-detection.d.ts +0 -9
  129. package/dist/common/collection.d.ts +0 -48
  130. package/dist/common/config.d.ts +0 -2
  131. package/dist/common/errors/captcha-error.d.ts +0 -15
  132. package/dist/common/errors/intent-to-join.d.ts +0 -16
  133. package/dist/common/errors/join-meeting.d.ts +0 -17
  134. package/dist/common/errors/media.d.ts +0 -15
  135. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  136. package/dist/common/errors/parameter.d.ts +0 -15
  137. package/dist/common/errors/password-error.d.ts +0 -15
  138. package/dist/common/errors/permission.d.ts +0 -14
  139. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  140. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  141. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  142. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  143. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  144. package/dist/common/errors/reconnection-in-progress.js +0 -35
  145. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  146. package/dist/common/errors/reconnection.d.ts +0 -15
  147. package/dist/common/errors/stats.d.ts +0 -15
  148. package/dist/common/errors/webex-errors.d.ts +0 -81
  149. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  150. package/dist/common/events/events-scope.d.ts +0 -17
  151. package/dist/common/events/events.d.ts +0 -12
  152. package/dist/common/events/trigger-proxy.d.ts +0 -2
  153. package/dist/common/events/util.d.ts +0 -2
  154. package/dist/common/logs/logger-config.d.ts +0 -2
  155. package/dist/common/logs/logger-proxy.d.ts +0 -2
  156. package/dist/common/logs/request.d.ts +0 -34
  157. package/dist/common/queue.d.ts +0 -32
  158. package/dist/config.d.ts +0 -73
  159. package/dist/constants.d.ts +0 -952
  160. package/dist/controls-options-manager/constants.d.ts +0 -4
  161. package/dist/controls-options-manager/enums.d.ts +0 -5
  162. package/dist/controls-options-manager/index.d.ts +0 -120
  163. package/dist/controls-options-manager/types.d.ts +0 -43
  164. package/dist/controls-options-manager/util.d.ts +0 -7
  165. package/dist/index.d.ts +0 -4
  166. package/dist/interceptors/index.d.ts +0 -2
  167. package/dist/interceptors/locusRetry.d.ts +0 -27
  168. package/dist/interpretation/collection.d.ts +0 -5
  169. package/dist/interpretation/index.d.ts +0 -5
  170. package/dist/interpretation/siLanguage.d.ts +0 -5
  171. package/dist/locus-info/controlsUtils.d.ts +0 -2
  172. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  173. package/dist/locus-info/fullState.d.ts +0 -2
  174. package/dist/locus-info/hostUtils.d.ts +0 -2
  175. package/dist/locus-info/index.d.ts +0 -269
  176. package/dist/locus-info/infoUtils.d.ts +0 -2
  177. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  178. package/dist/locus-info/parser.d.ts +0 -212
  179. package/dist/locus-info/selfUtils.d.ts +0 -2
  180. package/dist/media/index.d.ts +0 -32
  181. package/dist/media/properties.d.ts +0 -108
  182. package/dist/media/util.d.ts +0 -2
  183. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  184. package/dist/mediaQualityMetrics/config.js +0 -513
  185. package/dist/mediaQualityMetrics/config.js.map +0 -1
  186. package/dist/meeting/effectsState.d.ts +0 -42
  187. package/dist/meeting/effectsState.js +0 -260
  188. package/dist/meeting/effectsState.js.map +0 -1
  189. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  190. package/dist/meeting/index.d.ts +0 -1622
  191. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  192. package/dist/meeting/muteState.d.ts +0 -116
  193. package/dist/meeting/request.d.ts +0 -257
  194. package/dist/meeting/request.type.d.ts +0 -11
  195. package/dist/meeting/state.d.ts +0 -9
  196. package/dist/meeting/util.d.ts +0 -2
  197. package/dist/meeting/voicea-meeting.d.ts +0 -16
  198. package/dist/meeting-info/collection.d.ts +0 -20
  199. package/dist/meeting-info/index.d.ts +0 -57
  200. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  201. package/dist/meeting-info/request.d.ts +0 -22
  202. package/dist/meeting-info/util.d.ts +0 -2
  203. package/dist/meeting-info/utilv2.d.ts +0 -2
  204. package/dist/meetings/collection.d.ts +0 -23
  205. package/dist/meetings/index.d.ts +0 -296
  206. package/dist/meetings/meetings.types.d.ts +0 -4
  207. package/dist/meetings/request.d.ts +0 -27
  208. package/dist/meetings/util.d.ts +0 -18
  209. package/dist/member/index.d.ts +0 -148
  210. package/dist/member/member.types.d.ts +0 -11
  211. package/dist/member/member.types.js +0 -18
  212. package/dist/member/member.types.js.map +0 -1
  213. package/dist/member/types.d.ts +0 -32
  214. package/dist/member/util.d.ts +0 -2
  215. package/dist/members/collection.d.ts +0 -24
  216. package/dist/members/index.d.ts +0 -308
  217. package/dist/members/request.d.ts +0 -58
  218. package/dist/members/types.d.ts +0 -25
  219. package/dist/members/util.d.ts +0 -2
  220. package/dist/metrics/config.d.ts +0 -169
  221. package/dist/metrics/config.js +0 -289
  222. package/dist/metrics/config.js.map +0 -1
  223. package/dist/metrics/constants.d.ts +0 -59
  224. package/dist/metrics/index.d.ts +0 -152
  225. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  226. package/dist/multistream/receiveSlot.d.ts +0 -68
  227. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  228. package/dist/multistream/remoteMedia.d.ts +0 -72
  229. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  230. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  231. package/dist/multistream/sendSlotManager.d.ts +0 -69
  232. package/dist/networkQualityMonitor/index.d.ts +0 -70
  233. package/dist/networkQualityMonitor/index.js +0 -226
  234. package/dist/networkQualityMonitor/index.js.map +0 -1
  235. package/dist/peer-connection-manager/index.d.ts +0 -6
  236. package/dist/peer-connection-manager/index.js +0 -671
  237. package/dist/peer-connection-manager/index.js.map +0 -1
  238. package/dist/peer-connection-manager/util.d.ts +0 -6
  239. package/dist/peer-connection-manager/util.js +0 -110
  240. package/dist/peer-connection-manager/util.js.map +0 -1
  241. package/dist/personal-meeting-room/index.d.ts +0 -47
  242. package/dist/personal-meeting-room/request.d.ts +0 -14
  243. package/dist/personal-meeting-room/util.d.ts +0 -2
  244. package/dist/reachability/clusterReachability.d.ts +0 -109
  245. package/dist/reachability/index.d.ts +0 -139
  246. package/dist/reachability/request.d.ts +0 -35
  247. package/dist/reachability/util.d.ts +0 -8
  248. package/dist/reactions/constants.d.ts +0 -3
  249. package/dist/reactions/reactions.d.ts +0 -4
  250. package/dist/reactions/reactions.type.d.ts +0 -32
  251. package/dist/reconnection-manager/index.d.ts +0 -112
  252. package/dist/recording-controller/enums.d.ts +0 -7
  253. package/dist/recording-controller/index.d.ts +0 -193
  254. package/dist/recording-controller/util.d.ts +0 -13
  255. package/dist/roap/collection.d.ts +0 -10
  256. package/dist/roap/collection.js +0 -63
  257. package/dist/roap/collection.js.map +0 -1
  258. package/dist/roap/handler.d.ts +0 -47
  259. package/dist/roap/handler.js +0 -279
  260. package/dist/roap/handler.js.map +0 -1
  261. package/dist/roap/index.d.ts +0 -116
  262. package/dist/roap/request.d.ts +0 -35
  263. package/dist/roap/state.d.ts +0 -9
  264. package/dist/roap/state.js +0 -127
  265. package/dist/roap/state.js.map +0 -1
  266. package/dist/roap/turnDiscovery.d.ts +0 -81
  267. package/dist/roap/util.d.ts +0 -2
  268. package/dist/roap/util.js +0 -76
  269. package/dist/roap/util.js.map +0 -1
  270. package/dist/rtcMetrics/constants.d.ts +0 -4
  271. package/dist/rtcMetrics/constants.js.map +0 -1
  272. package/dist/rtcMetrics/index.d.ts +0 -61
  273. package/dist/rtcMetrics/index.js +0 -197
  274. package/dist/rtcMetrics/index.js.map +0 -1
  275. package/dist/statsAnalyzer/global.d.ts +0 -118
  276. package/dist/statsAnalyzer/global.js +0 -127
  277. package/dist/statsAnalyzer/global.js.map +0 -1
  278. package/dist/statsAnalyzer/index.d.ts +0 -193
  279. package/dist/statsAnalyzer/index.js +0 -1019
  280. package/dist/statsAnalyzer/index.js.map +0 -1
  281. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  282. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  283. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  284. package/dist/transcription/index.d.ts +0 -64
  285. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  286. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  287. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  288. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  289. package/dist/types/rtcMetrics/index.d.ts +0 -71
  290. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  291. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  292. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  293. package/dist/webinar/collection.d.ts +0 -16
  294. package/dist/webinar/index.d.ts +0 -5
package/src/constants.ts CHANGED
@@ -217,6 +217,7 @@ export const DIALER_REGEX = {
217
217
  PHONE_NUMBER:
218
218
  /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/,
219
219
  E164_FORMAT: /^\+[1-9]\d{1,14}$/,
220
+ INTERNAL_NUMBER: /^\d{1,14}$/,
220
221
  };
221
222
 
222
223
  // eslint-disable-next-line max-len
@@ -262,7 +263,6 @@ export const RECORDING_STATE = {
262
263
  PAUSED: 'paused',
263
264
  RESUMED: 'resumed',
264
265
  };
265
-
266
266
  export const SHARE_STATUS = {
267
267
  NO_SHARE: 'no_share',
268
268
  REMOTE_SHARE_ACTIVE: 'remote_share_active',
@@ -372,6 +372,7 @@ export const EVENT_TRIGGERS = {
372
372
  MEETING_CONTROLS_ANNOTATION_UPDATED: 'meeting:controls:annotation:updated',
373
373
  MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED:
374
374
  'meeting:controls:remote-desktop-control:updated',
375
+ MEETING_CONTROLS_POLLING_QA_UPDATED: 'meeting:controls:polling-qa:updated',
375
376
  // Locus URL changed
376
377
  MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
377
378
  MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
@@ -379,6 +380,7 @@ export const EVENT_TRIGGERS = {
379
380
  MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',
380
381
  MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
381
382
  MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
383
+ MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED: 'meeting:transcription:spokenLanguageUpdate',
382
384
  MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',
383
385
  MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
384
386
  MEETING_PARTICIPANT_REASON_CHANGED: 'meeting:participant-reason-changed',
@@ -699,6 +701,8 @@ export const LOCUSINFO = {
699
701
  CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
700
702
  CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
701
703
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
704
+ CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED:
705
+ 'CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED',
702
706
  CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: 'CONTROLS_MEETING_MANUAL_CAPTION_UPDATED',
703
707
  CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
704
708
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
@@ -717,6 +721,7 @@ export const LOCUSINFO = {
717
721
  CONTROLS_STAGE_VIEW_UPDATED: 'CONTROLS_STAGE_VIEW_UPDATED',
718
722
  CONTROLS_ANNOTATION_CHANGED: 'CONTROLS_ANNOTATION_CHANGED',
719
723
  CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED: 'CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED',
724
+ CONTROLS_POLLING_QA_CHANGED: 'CONTROLS_POLLING_QA_CHANGED',
720
725
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
721
726
  SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
722
727
  SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
@@ -943,6 +948,9 @@ export const DISPLAY_HINTS = {
943
948
  PREMISE_RECORDING_CONTROL_PAUSE: 'PREMISE_RECORDING_CONTROL_PAUSE',
944
949
  PREMISE_RECORDING_CONTROL_STOP: 'PREMISE_RECORDING_CONTROL_STOP',
945
950
  PREMISE_RECORDING_CONTROL_RESUME: 'PREMISE_RECORDING_CONTROL_RESUME',
951
+ LOCAL_RECORDING_STATUS_STARTED: 'LOCAL_RECORDING_STATUS_STARTED',
952
+ LOCAL_RECORDING_STATUS_STOPPED: 'LOCAL_RECORDING_STATUS_STOPPED',
953
+ LOCAL_RECORDING_STATUS_PAUSED: 'LOCAL_RECORDING_STATUS_PAUSED',
946
954
  LOCK_CONTROL_UNLOCK: 'LOCK_CONTROL_UNLOCK',
947
955
  LOCK_CONTROL_LOCK: 'LOCK_CONTROL_LOCK',
948
956
  LOCK_STATUS_LOCKED: 'LOCK_STATUS_LOCKED',
@@ -982,7 +990,6 @@ export const DISPLAY_HINTS = {
982
990
  CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',
983
991
  CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',
984
992
  MOVE_TO_LOBBY: 'MOVE_TO_LOBBY',
985
-
986
993
  // breakout session
987
994
  BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
988
995
  BROADCAST_MESSAGE_TO_BREAKOUT: 'BROADCAST_MESSAGE_TO_BREAKOUT',
@@ -1046,6 +1053,10 @@ export const DISPLAY_HINTS = {
1046
1053
  // Remote Desktop Control
1047
1054
  ENABLE_RDC_MEETING_OPTION: 'ENABLE_RDC_MEETING_OPTION',
1048
1055
  DISABLE_RDC_MEETING_OPTION: 'DISABLE_RDC_MEETING_OPTION',
1056
+
1057
+ // Polling QA
1058
+ ENABLE_ATTENDEE_START_POLLING_QA: 'ENABLE_ATTENDEE_START_POLLING_QA',
1059
+ DISABLE_ATTENDEE_START_POLLING_QA: 'DISABLE_ATTENDEE_START_POLLING_QA',
1049
1060
  };
1050
1061
 
1051
1062
  export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
@@ -1179,6 +1190,7 @@ export const QUALITY_LEVELS = {
1179
1190
  HIGH: 'HIGH',
1180
1191
  '360p': '360p',
1181
1192
  '480p': '480p',
1193
+ '540p': '540p',
1182
1194
  '720p': '720p',
1183
1195
  '1080p': '1080p',
1184
1196
  };
@@ -1208,6 +1220,18 @@ export const AVAILABLE_RESOLUTIONS = {
1208
1220
  },
1209
1221
  },
1210
1222
  },
1223
+ '540p': {
1224
+ video: {
1225
+ width: {
1226
+ max: 960,
1227
+ ideal: 960,
1228
+ },
1229
+ height: {
1230
+ max: 540,
1231
+ ideal: 540,
1232
+ },
1233
+ },
1234
+ },
1211
1235
  '720p': {
1212
1236
  video: {
1213
1237
  width: {
@@ -1348,3 +1372,9 @@ export const INITIAL_REGISTRATION_STATUS = {
1348
1372
  mercuryConnect: false,
1349
1373
  checkH264Support: false,
1350
1374
  };
1375
+
1376
+ export const STAGE_MANAGER_TYPE = {
1377
+ LOGO: 0b001,
1378
+ BACKGROUND: 0b010,
1379
+ NAME_LABEL: 0b100,
1380
+ };
@@ -14,6 +14,7 @@ enum Control {
14
14
  viewTheParticipantList = 'viewTheParticipantList',
15
15
  annotation = 'annotation',
16
16
  rdc = 'rdc',
17
+ pollingQA = 'pollingQA',
17
18
  }
18
19
 
19
20
  export {Control, Setting};
@@ -48,6 +48,10 @@ export interface RemoteDesktopControlProperties {
48
48
  enabled?: boolean;
49
49
  }
50
50
 
51
+ export interface PollingQAProperties {
52
+ enabled?: boolean;
53
+ }
54
+
51
55
  export type Properties =
52
56
  | AudioProperties
53
57
  | RaiseHandProperties
@@ -56,7 +60,8 @@ export type Properties =
56
60
  | VideoProperties
57
61
  | ViewTheParticipantListProperties
58
62
  | AnnotationProperties
59
- | RemoteDesktopControlProperties;
63
+ | RemoteDesktopControlProperties
64
+ | PollingQAProperties;
60
65
 
61
66
  export interface ControlConfig<Props = Properties> {
62
67
  /**
@@ -9,6 +9,7 @@ import {
9
9
  VideoProperties,
10
10
  type RemoteDesktopControlProperties,
11
11
  type AnnotationProperties,
12
+ type PollingQAProperties,
12
13
  } from './types';
13
14
 
14
15
  /**
@@ -304,6 +305,29 @@ class Utils {
304
305
  return Utils.hasHints({requiredHints, displayHints});
305
306
  }
306
307
 
308
+ /**
309
+ * Validate if a pollingQA-scoped control is allowed to be sent to the service.
310
+ *
311
+ * @param {ControlConfig<PollingQAProperties>} control - Polling QA config to validate
312
+ * @param {Array<string>} displayHints - All available hints
313
+ * @returns {boolean} - True if all of the actions are allowed.
314
+ */
315
+ public static canUpdatePollingQA(
316
+ control: ControlConfig<PollingQAProperties>,
317
+ displayHints: Array<string>
318
+ ): boolean {
319
+ const requiredHints = [];
320
+
321
+ if (control.properties.enabled === true) {
322
+ requiredHints.push(DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA);
323
+ }
324
+ if (control.properties.enabled === false) {
325
+ requiredHints.push(DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA);
326
+ }
327
+
328
+ return Utils.hasHints({requiredHints, displayHints});
329
+ }
330
+
307
331
  /**
308
332
  * Validate that a control can be sent to the service based on the provided
309
333
  * display hints.
@@ -363,6 +387,13 @@ class Utils {
363
387
  );
364
388
  break;
365
389
 
390
+ case Control.pollingQA:
391
+ determinant = Utils.canUpdatePollingQA(
392
+ control as ControlConfig<PollingQAProperties>,
393
+ displayHints
394
+ );
395
+ break;
396
+
366
397
  default:
367
398
  determinant = false;
368
399
  }
@@ -40,6 +40,7 @@ ControlsUtils.parse = (controls: any) => {
40
40
  parsedControls.transcribe = {
41
41
  transcribing: controls.transcribe.transcribing,
42
42
  caption: controls.transcribe.caption,
43
+ spokenLanguage: controls.transcribe.spokenLanguage,
43
44
  };
44
45
  }
45
46
 
@@ -123,6 +124,12 @@ ControlsUtils.parse = (controls: any) => {
123
124
  };
124
125
  }
125
126
 
127
+ if (controls?.pollingQAControl) {
128
+ parsedControls.pollingQAControl = {
129
+ enabled: controls.pollingQAControl.enabled,
130
+ };
131
+ }
132
+
126
133
  return parsedControls;
127
134
  };
128
135
 
@@ -186,6 +193,11 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
186
193
  !isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
187
194
  (previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
188
195
 
196
+ hasTranscribeSpokenLanguageChanged:
197
+ current?.transcribe &&
198
+ !isEqual(previous?.transcribe?.spokenLanguage, current?.transcribe?.spokenLanguage) &&
199
+ !!(previous?.transcribe?.spokenLanguage || current?.transcribe?.spokenLanguage),
200
+
189
201
  hasManualCaptionChanged:
190
202
  current?.manualCaptionControl &&
191
203
  !isEqual(previous?.manualCaptionControl?.enabled, current?.manualCaptionControl?.enabled) &&
@@ -229,6 +241,9 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
229
241
 
230
242
  hasRemoteDesktopControlChanged:
231
243
  current?.rdcControl?.enabled !== previous?.rdcControl?.enabled,
244
+
245
+ hasPollingQAControlChanged:
246
+ current?.pollingQAControl?.enabled !== previous?.pollingQAControl?.enabled,
232
247
  },
233
248
  };
234
249
  };
@@ -48,7 +48,6 @@ export default class LocusInfo extends EventsScope {
48
48
  aclUrl: any;
49
49
  baseSequence: any;
50
50
  created: any;
51
- deltaParticipants: any;
52
51
  identities: any;
53
52
  membership: any;
54
53
  participants: any;
@@ -94,18 +93,26 @@ export default class LocusInfo extends EventsScope {
94
93
  * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
95
94
  *
96
95
  * @param {Meeting} meeting
96
+ * @param {boolean} isLocusUrlChanged
97
+ * @param {Locus} locus
97
98
  * @returns {undefined}
98
99
  */
99
- private doLocusSync(meeting: any) {
100
- let isDelta;
100
+ private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {
101
101
  let url;
102
-
103
- if (this.locusParser.workingCopy.syncUrl) {
102
+ let isDelta = false;
103
+ let meetingDestroyed = false;
104
+
105
+ if (isLocusUrlChanged) {
106
+ // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,
107
+ // so use the main session locus url to get the full locus(full participants list in the response).
108
+ // for the locus url changed case from main session to breakout, we don't need to care about it here,
109
+ // because it is a USE_INCOMING case, it will not be executed here.
110
+ url = locus.url;
111
+ } else if (this.locusParser.workingCopy?.syncUrl) {
104
112
  url = this.locusParser.workingCopy.syncUrl;
105
113
  isDelta = true;
106
114
  } else {
107
115
  url = meeting.locusUrl;
108
- isDelta = false;
109
116
  }
110
117
 
111
118
  LoggerProxy.logger.info(
@@ -134,35 +141,77 @@ export default class LocusInfo extends EventsScope {
134
141
 
135
142
  isDelta = false;
136
143
 
137
- return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {
138
- LoggerProxy.logger.info(
139
- 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
140
- );
141
- this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
142
- throw err;
143
- });
144
+ // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case
145
+ if (e.statusCode !== 403) {
146
+ return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {
147
+ LoggerProxy.logger.info(
148
+ 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
149
+ );
150
+ this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
151
+ meetingDestroyed = true;
152
+ throw err;
153
+ });
154
+ }
155
+ LoggerProxy.logger.info(
156
+ 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'
157
+ );
158
+ } else {
159
+ LoggerProxy.logger.info(
160
+ 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
161
+ );
144
162
  }
145
- LoggerProxy.logger.info(
146
- 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
147
- );
148
163
  this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
164
+ meetingDestroyed = true;
149
165
  throw e;
150
166
  })
151
167
  .then((res) => {
152
- if (isDelta) {
153
- if (!isEmpty(res.body)) {
154
- meeting.locusInfo.handleLocusDelta(res.body, meeting);
155
- } else {
168
+ if (isEmpty(res.body)) {
169
+ if (isDelta) {
156
170
  LoggerProxy.logger.info(
157
171
  'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'
158
172
  );
173
+ } else {
174
+ LoggerProxy.logger.info(
175
+ 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'
176
+ );
159
177
  }
160
- } else {
161
- meeting.locusInfo.onFullLocus(res.body);
178
+
179
+ return;
180
+ }
181
+
182
+ if (isDelta) {
183
+ if (res.body.baseSequence) {
184
+ meeting.locusInfo.handleLocusDelta(res.body, meeting);
185
+
186
+ return;
187
+ }
188
+ // in some cases Locus might return us full DTO even when we asked for a delta
189
+ LoggerProxy.logger.info(
190
+ 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'
191
+ );
192
+ }
193
+ meeting.locusInfo.onFullLocus(res.body);
194
+ })
195
+ .catch((e) => {
196
+ LoggerProxy.logger.info(
197
+ `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`
198
+ );
199
+
200
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {
201
+ correlationId: meeting.correlationId,
202
+ url,
203
+ reason: e.message,
204
+ errorName: e.name,
205
+ stack: e.stack,
206
+ code: e.code,
207
+ });
208
+ })
209
+ .finally(() => {
210
+ if (!meetingDestroyed) {
211
+ // Notify parser to resume processing delta events.
212
+ // Any deltas in the queue that have now been superseded by this sync will simply be ignored
213
+ this.locusParser.resume();
162
214
  }
163
- // Notify parser to resume processing delta events.
164
- // Any deltas in the queue that have now been superseded by this sync will simply be ignored
165
- this.locusParser.resume();
166
215
  });
167
216
  }
168
217
 
@@ -175,6 +224,7 @@ export default class LocusInfo extends EventsScope {
175
224
  */
176
225
  applyLocusDeltaData(action: string, locus: any, meeting: any) {
177
226
  const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;
227
+ const isLocusUrlChanged = action === LOCUS_URL_CHANGED;
178
228
 
179
229
  switch (action) {
180
230
  case USE_INCOMING:
@@ -186,7 +236,7 @@ export default class LocusInfo extends EventsScope {
186
236
  break;
187
237
  case DESYNC:
188
238
  case LOCUS_URL_CHANGED:
189
- this.doLocusSync(meeting);
239
+ this.doLocusSync(meeting, isLocusUrlChanged, locus);
190
240
  break;
191
241
  default:
192
242
  LoggerProxy.logger.info(
@@ -241,17 +291,6 @@ export default class LocusInfo extends EventsScope {
241
291
  * @property {Object} person - Contains person data.
242
292
  */
243
293
 
244
- /**
245
- * Stored participant changes between the last event and the current event.
246
- * All previously stored events are overwritten between events.
247
- *
248
- * @instance
249
- * @type {Array<DeltaParticipant>}
250
- * @private
251
- * @member LocusInfo
252
- */
253
- this.deltaParticipants = [];
254
-
255
294
  this.updateLocusCache(locus);
256
295
  // above section only updates the locusInfo object
257
296
  // The below section makes sure it updates the locusInfo as well as updates the meeting object
@@ -357,7 +396,6 @@ export default class LocusInfo extends EventsScope {
357
396
  return;
358
397
  }
359
398
 
360
- this.updateParticipantDeltas(locus.participants);
361
399
  this.scheduledMeeting = locus.meeting || null;
362
400
  this.participants = locus.participants;
363
401
  const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
@@ -446,12 +484,12 @@ export default class LocusInfo extends EventsScope {
446
484
  this.updateCreated(locus.created);
447
485
  this.updateFullState(locus.fullState);
448
486
  this.updateHostInfo(locus.host);
487
+ this.updateLocusUrl(locus.url);
449
488
  this.updateMeetingInfo(locus.info, locus.self);
450
489
  this.updateMediaShares(locus.mediaShares);
451
490
  this.updateParticipantsUrl(locus.participantsUrl);
452
491
  this.updateReplace(locus.replace);
453
492
  this.updateSelf(locus.self);
454
- this.updateLocusUrl(locus.url);
455
493
  this.updateAclUrl(locus.aclUrl);
456
494
  this.updateBasequence(locus.baseSequence);
457
495
  this.updateSequence(locus.sequence);
@@ -712,55 +750,6 @@ export default class LocusInfo extends EventsScope {
712
750
  }
713
751
  }
714
752
 
715
- /**
716
- * Update the deltaParticipants property of this object based on a list of
717
- * provided participants.
718
- *
719
- * @param {Array} [participants] - The participants to update against.
720
- * @returns {void}
721
- */
722
- updateParticipantDeltas(participants: Array<any> = []) {
723
- // Used to find a participant within a participants collection.
724
- const findParticipant = (participant, collection) =>
725
- collection.find((item) => item.person.id === participant.person.id);
726
-
727
- // Generates an object that indicates which state properties have changed.
728
- const generateDelta = (prevState: any = {}, newState: any = {}) => {
729
- // Setup deltas.
730
- const deltas = {
731
- audioStatus: prevState.audioStatus !== newState.audioStatus,
732
- videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,
733
- videoStatus: prevState.videoStatus !== newState.videoStatus,
734
- };
735
-
736
- // Clean the object
737
- Object.keys(deltas).forEach((key) => {
738
- if (deltas[key] !== true) {
739
- delete deltas[key];
740
- }
741
- });
742
-
743
- return deltas;
744
- };
745
-
746
- this.deltaParticipants = participants.reduce((collection, participant) => {
747
- const existingParticipant = findParticipant(participant, this.participants || []) || {};
748
-
749
- const delta = generateDelta(existingParticipant.status, participant.status);
750
-
751
- const changed = Object.keys(delta).length > 0;
752
-
753
- if (changed) {
754
- collection.push({
755
- person: participant.person,
756
- delta,
757
- });
758
- }
759
-
760
- return collection;
761
- }, []);
762
- }
763
-
764
753
  /**
765
754
  * update meeting's members
766
755
  * @param {Object} participants new participants object
@@ -818,6 +807,7 @@ export default class LocusInfo extends EventsScope {
818
807
  hasRecordingPausedChanged,
819
808
  hasMeetingContainerChanged,
820
809
  hasTranscribeChanged,
810
+ hasTranscribeSpokenLanguageChanged,
821
811
  hasManualCaptionChanged,
822
812
  hasEntryExitToneChanged,
823
813
  hasBreakoutChanged,
@@ -837,6 +827,7 @@ export default class LocusInfo extends EventsScope {
837
827
  hasStageViewChanged,
838
828
  hasAnnotationControlChanged,
839
829
  hasRemoteDesktopControlChanged,
830
+ hasPollingQAControlChanged,
840
831
  },
841
832
  current,
842
833
  } = ControlsUtils.getControls(this.controls, controls);
@@ -956,6 +947,21 @@ export default class LocusInfo extends EventsScope {
956
947
  );
957
948
  }
958
949
 
950
+ if (hasTranscribeSpokenLanguageChanged) {
951
+ const {spokenLanguage} = current.transcribe;
952
+
953
+ this.emitScoped(
954
+ {
955
+ file: 'locus-info',
956
+ function: 'updateControls',
957
+ },
958
+ LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,
959
+ {
960
+ spokenLanguage,
961
+ }
962
+ );
963
+ }
964
+
959
965
  if (hasManualCaptionChanged) {
960
966
  const {enabled} = current.manualCaptionControl;
961
967
 
@@ -1088,6 +1094,14 @@ export default class LocusInfo extends EventsScope {
1088
1094
  );
1089
1095
  }
1090
1096
 
1097
+ if (hasPollingQAControlChanged) {
1098
+ this.emitScoped(
1099
+ {file: 'locus-info', function: 'updateControls'},
1100
+ LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,
1101
+ {state: current.pollingQAControl}
1102
+ );
1103
+ }
1104
+
1091
1105
  this.controls = controls;
1092
1106
  }
1093
1107
  }
@@ -1248,10 +1262,7 @@ export default class LocusInfo extends EventsScope {
1248
1262
  */
1249
1263
  updateMeetingInfo(info: object, self?: object) {
1250
1264
  const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
1251
- if (
1252
- (info && !isEqual(this.info, info)) ||
1253
- (roles.length && !isEqual(this.roles, roles) && info)
1254
- ) {
1265
+ if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {
1255
1266
  const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
1256
1267
  const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
1257
1268
 
@@ -728,13 +728,17 @@ export default class Parser {
728
728
  break;
729
729
 
730
730
  case USE_INCOMING:
731
- case LOCUS_URL_CHANGED:
732
731
  // update working copy for future comparisons.
733
732
  // Note: The working copy of parser gets updated in .onFullLocus()
734
733
  // and here when USE_INCOMING or LOCUS_URL_CHANGED locus.
735
734
  this.workingCopy = newLoci;
736
735
  break;
737
736
 
737
+ case LOCUS_URL_CHANGED:
738
+ // clear the working copy completely, do a full locus sync
739
+ this.workingCopy = null;
740
+ break;
741
+
738
742
  case WAIT:
739
743
  // we've taken newLoci from the front of the queue, so put it back there as we have to wait
740
744
  // for the one that should be in front of it, before we can process it
@@ -239,8 +239,8 @@ Media.createMediaConnection = (
239
239
  screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
240
240
  } as unknown,
241
241
  direction: {
242
- audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
243
- video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
242
+ audio: Media.getDirection(false, mediaDirection.receiveAudio, mediaDirection.sendAudio),
243
+ video: Media.getDirection(false, mediaDirection.receiveVideo, mediaDirection.sendVideo),
244
244
  screenShareVideo: Media.getDirection(
245
245
  false,
246
246
  mediaDirection.receiveShare,
@@ -58,7 +58,13 @@ export class BrbState {
58
58
  public enable(enabled: boolean, sendSlotManager: SendSlotManager) {
59
59
  this.state.client.enabled = enabled;
60
60
 
61
- return this.applyClientStateToServer(sendSlotManager);
61
+ // Don't set the source state override if enabling brb fails
62
+ return this.applyClientStateToServer(sendSlotManager).then(() => {
63
+ sendSlotManager.setSourceStateOverride(
64
+ MediaType.VideoMain,
65
+ this.state.client.enabled ? 'away' : null
66
+ );
67
+ });
62
68
  }
63
69
 
64
70
  /**
@@ -92,7 +98,7 @@ export class BrbState {
92
98
 
93
99
  this.state.syncToServerInProgress = true;
94
100
 
95
- return this.sendLocalBrbStateToServer(sendSlotManager)
101
+ return this.sendLocalBrbStateToServer()
96
102
  .then(() => {
97
103
  this.state.syncToServerInProgress = false;
98
104
 
@@ -109,19 +115,20 @@ export class BrbState {
109
115
  // need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
110
116
  this.applyClientStateToServer(sendSlotManager);
111
117
  })
112
- .catch((e) => {
118
+ .catch((error) => {
113
119
  this.state.syncToServerInProgress = false;
114
- LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: error: ${e}`);
120
+ LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: Error: ${error}`);
121
+
122
+ return Promise.reject(error);
115
123
  });
116
124
  }
117
125
 
118
126
  /**
119
127
  * Send the local brb state to the server
120
128
  *
121
- * @param {SendSlotManager} sendSlotManager
122
129
  * @returns {Promise}
123
130
  */
124
- private async sendLocalBrbStateToServer(sendSlotManager: SendSlotManager) {
131
+ private async sendLocalBrbStateToServer() {
125
132
  const {enabled} = this.state.client;
126
133
 
127
134
  if (!this.meeting.isMultistream) {
@@ -151,9 +158,6 @@ export class BrbState {
151
158
  deviceUrl: this.meeting.deviceUrl,
152
159
  selfId: this.meeting.selfId,
153
160
  })
154
- .then(() => {
155
- sendSlotManager.setSourceStateOverride(MediaType.VideoMain, enabled ? 'away' : null);
156
- })
157
161
  .catch((error) => {
158
162
  LoggerProxy.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);
159
163