@webex/plugin-meetings 2.60.0 → 2.60.1-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.
- package/README.md +58 -8
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +20 -8
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +3 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +9 -7
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +6 -7
- package/dist/config.js +8 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +234 -100
- package/dist/constants.js +433 -444
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +11 -1
- package/dist/controls-options-manager/enums.js +15 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +17 -1
- package/dist/controls-options-manager/index.js +127 -38
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.d.ts +1 -7
- package/dist/controls-options-manager/util.js +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +121 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +100 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +57 -4
- package/dist/locus-info/index.js +425 -84
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +66 -6
- package/dist/locus-info/parser.js +253 -80
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +2 -0
- package/dist/media/index.js +107 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +38 -53
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +234 -230
- package/dist/mediaQualityMetrics/config.js +302 -498
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +88 -0
- package/dist/meeting/in-meeting-actions.js +94 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +705 -520
- package/dist/meeting/index.js +5047 -3089
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.d.ts +93 -25
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +82 -47
- package/dist/meeting/request.js +304 -199
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +118 -1
- package/dist/meeting/util.js +676 -435
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +20 -0
- package/dist/meeting/voicea-meeting.js +201 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +13 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/meeting-info/meeting-info-v2.js +200 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +39 -41
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +17 -0
- package/dist/meetings/collection.js +42 -4
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +114 -20
- package/dist/meetings/index.js +540 -126
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +13 -1
- package/dist/member/index.js +45 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.d.ts +32 -0
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +120 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +5 -0
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +56 -11
- package/dist/members/index.js +174 -47
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +67 -11
- package/dist/members/request.js +102 -54
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +214 -1
- package/dist/members/util.js +327 -284
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.d.ts +15 -6
- package/dist/metrics/constants.js +17 -9
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +4 -111
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.d.ts +285 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.d.ts +61 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +61 -95
- package/dist/reachability/index.js +304 -392
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +7 -3
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +23 -3
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +32 -8
- package/dist/reconnection-manager/index.js +285 -232
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +15 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +5 -4
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.d.ts +9 -47
- package/dist/roap/index.js +100 -238
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +18 -12
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +27 -16
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +54 -0
- package/dist/rtcMetrics/index.js +140 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +1 -83
- package/dist/statsAnalyzer/global.js +2 -85
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +50 -30
- package/dist/statsAnalyzer/index.js +436 -511
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
- package/dist/statsAnalyzer/mqaUtil.js +130 -90
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +39 -26
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +6 -7
- package/src/constants.ts +265 -100
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +110 -0
- package/src/locus-info/index.ts +450 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +244 -377
- package/src/meeting/in-meeting-actions.ts +176 -0
- package/src/meeting/index.ts +4306 -2581
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +214 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +687 -423
- package/src/meeting/voicea-meeting.ts +161 -0
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +163 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +529 -127
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +43 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +125 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +187 -52
- package/src/members/request.ts +87 -27
- package/src/members/util.ts +332 -291
- package/src/metrics/constants.ts +15 -6
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +246 -347
- package/src/reachability/request.ts +17 -8
- package/src/reachability/util.ts +24 -0
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +168 -156
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +96 -241
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +124 -0
- package/src/statsAnalyzer/global.ts +1 -84
- package/src/statsAnalyzer/index.ts +479 -645
- package/src/statsAnalyzer/mqaUtil.ts +128 -126
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +323 -30
- package/test/unit/spec/locus-info/index.js +1438 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +290 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
- package/test/unit/spec/meeting/index.js +8886 -2815
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +409 -213
- package/test/unit/spec/meeting/request.js +523 -43
- package/test/unit/spec/meeting/utils.js +834 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1446 -217
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +32 -9
- package/test/unit/spec/member/util.js +499 -61
- package/test/unit/spec/members/index.js +394 -5
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +173 -38
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +532 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +163 -24
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +187 -77
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +644 -165
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
- /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
package/src/meeting/muteState.ts
CHANGED
|
@@ -1,122 +1,188 @@
|
|
|
1
|
+
import {ServerMuteReason} from '@webex/media-helpers';
|
|
1
2
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
2
3
|
import ParameterError from '../common/errors/parameter';
|
|
3
|
-
import PermissionError from '../common/errors/permission';
|
|
4
|
-
import Media from '../media';
|
|
5
4
|
import MeetingUtil from './util';
|
|
6
5
|
import {AUDIO, VIDEO} from '../constants';
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const createMuteState = (type, meeting, mediaDirection) => {
|
|
13
|
-
if (type === AUDIO && !mediaDirection.sendAudio) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
if (type === VIDEO && !mediaDirection.sendVideo) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
7
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
8
|
+
export const createMuteState = (type, meeting, enabled: boolean) => {
|
|
9
|
+
// todo: remove the meeting argument (SPARK-399695)
|
|
19
10
|
|
|
20
11
|
LoggerProxy.logger.info(
|
|
21
12
|
`Meeting:muteState#createMuteState --> ${type}: creating MuteState for meeting id ${meeting?.id}`
|
|
22
13
|
);
|
|
23
14
|
|
|
24
|
-
|
|
15
|
+
const muteState = new MuteState(type, meeting, enabled);
|
|
16
|
+
|
|
17
|
+
return muteState;
|
|
25
18
|
};
|
|
26
19
|
|
|
27
20
|
/** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
|
|
28
21
|
the last requested state by the client.
|
|
29
22
|
|
|
30
23
|
More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
|
|
24
|
+
|
|
25
|
+
This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called
|
|
31
26
|
*/
|
|
32
|
-
class MuteState {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
export class MuteState {
|
|
28
|
+
state: {
|
|
29
|
+
client: {
|
|
30
|
+
enabled: boolean; // indicates if audio/video is enabled at all or not
|
|
31
|
+
localMute: boolean;
|
|
32
|
+
};
|
|
33
|
+
server: {localMute: boolean; remoteMute: boolean; unmuteAllowed: boolean};
|
|
34
|
+
syncToServerInProgress: boolean;
|
|
35
|
+
};
|
|
36
|
+
|
|
36
37
|
type: any;
|
|
38
|
+
ignoreMuteStateChange: boolean;
|
|
37
39
|
|
|
38
40
|
/**
|
|
39
41
|
* Constructor
|
|
40
42
|
*
|
|
41
43
|
* @param {String} type - audio or video
|
|
42
44
|
* @param {Object} meeting - the meeting object (used for reading current remote mute status)
|
|
45
|
+
* @param {boolean} enabled - whether the client audio/video is enabled at all
|
|
43
46
|
*/
|
|
44
|
-
constructor(type: string, meeting: any) {
|
|
47
|
+
constructor(type: string, meeting: any, enabled: boolean) {
|
|
45
48
|
if (type !== AUDIO && type !== VIDEO) {
|
|
46
49
|
throw new ParameterError('Mute state is designed for handling audio or video only');
|
|
47
50
|
}
|
|
48
51
|
this.type = type;
|
|
52
|
+
this.ignoreMuteStateChange = false;
|
|
49
53
|
this.state = {
|
|
50
54
|
client: {
|
|
51
|
-
|
|
55
|
+
enabled,
|
|
56
|
+
localMute: true,
|
|
52
57
|
},
|
|
53
58
|
server: {
|
|
54
|
-
localMute:
|
|
55
|
-
//
|
|
56
|
-
remoteMute: type === AUDIO ? meeting.remoteMuted : false,
|
|
57
|
-
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : true,
|
|
59
|
+
localMute: true,
|
|
60
|
+
// because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined
|
|
61
|
+
remoteMute: type === AUDIO ? meeting.remoteMuted : meeting.remoteVideoMuted ?? false,
|
|
62
|
+
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : meeting.unmuteVideoAllowed ?? true,
|
|
58
63
|
},
|
|
59
64
|
syncToServerInProgress: false,
|
|
60
65
|
};
|
|
61
|
-
// these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
|
|
62
|
-
this.pendingPromiseResolve = null;
|
|
63
|
-
this.pendingPromiseReject = null;
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
+
* Starts the mute state machine. Needs to be called after a new MuteState instance is created.
|
|
70
|
+
*
|
|
71
|
+
* @param {Object} meeting - the meeting object
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
public init(meeting: any) {
|
|
75
|
+
this.applyUnmuteAllowedToStream(meeting);
|
|
76
|
+
|
|
77
|
+
// if we are remotely muted, we need to apply that to the local stream now (mute on-entry)
|
|
78
|
+
if (this.state.server.remoteMute) {
|
|
79
|
+
this.muteLocalStream(meeting, this.state.server.remoteMute, 'remotelyMuted');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const initialMute =
|
|
83
|
+
this.type === AUDIO
|
|
84
|
+
? meeting.mediaProperties.audioStream?.muted
|
|
85
|
+
: meeting.mediaProperties.videoStream?.muted;
|
|
86
|
+
|
|
87
|
+
LoggerProxy.logger.info(
|
|
88
|
+
`Meeting:muteState#init --> ${this.type}: local stream initial mute state: ${initialMute}`
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
if (initialMute !== undefined) {
|
|
92
|
+
this.state.client.localMute = initialMute;
|
|
93
|
+
} else {
|
|
94
|
+
// there is no stream, so it's like we are locally muted
|
|
95
|
+
// (this is important especially for transcoded meetings, in which the SDP m-line direction always stays "sendrecv")
|
|
96
|
+
this.state.client.localMute = true;
|
|
97
|
+
}
|
|
98
|
+
this.applyClientStateToServer(meeting);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* This method needs to be called whenever the local audio/video stream has changed.
|
|
103
|
+
* It reapplies the remote mute state onto the new stream and also reads the current
|
|
104
|
+
* local mute state from the stream and updates the internal state machine and sends
|
|
105
|
+
* any required requests to the server.
|
|
106
|
+
*
|
|
107
|
+
* @param {Object} meeting - the meeting object
|
|
108
|
+
* @returns {void}
|
|
109
|
+
*/
|
|
110
|
+
public handleLocalStreamChange(meeting: any) {
|
|
111
|
+
return this.init(meeting);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Enables/disables audio/video
|
|
69
116
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
117
|
+
* @param {Object} meeting - the meeting object
|
|
118
|
+
* @param {boolean} enable
|
|
119
|
+
* @returns {void}
|
|
120
|
+
*/
|
|
121
|
+
public enable(meeting: any, enable: boolean) {
|
|
122
|
+
this.state.client.enabled = enable;
|
|
123
|
+
|
|
124
|
+
this.applyClientStateToServer(meeting);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Mutes/unmutes local stream
|
|
73
129
|
*
|
|
130
|
+
* @param {Object} meeting - the meeting object
|
|
131
|
+
* @param {Boolean} mute - true to mute the stream, false to unmute it
|
|
132
|
+
* @param {ServerMuteReason} reason - reason for muting/unmuting
|
|
133
|
+
* @returns {void}
|
|
134
|
+
*/
|
|
135
|
+
private muteLocalStream(meeting: any, mute: boolean, reason: ServerMuteReason) {
|
|
136
|
+
this.ignoreMuteStateChange = true;
|
|
137
|
+
if (this.type === AUDIO) {
|
|
138
|
+
meeting.mediaProperties.audioStream?.setServerMuted(mute, reason);
|
|
139
|
+
} else {
|
|
140
|
+
meeting.mediaProperties.videoStream?.setServerMuted(mute, reason);
|
|
141
|
+
}
|
|
142
|
+
this.ignoreMuteStateChange = false;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* This method should be called when the local stream mute state is changed
|
|
74
147
|
* @public
|
|
75
148
|
* @memberof MuteState
|
|
76
149
|
* @param {Object} [meeting] the meeting object
|
|
77
150
|
* @param {Boolean} [mute] true for muting, false for unmuting request
|
|
78
|
-
* @returns {
|
|
151
|
+
* @returns {void}
|
|
79
152
|
*/
|
|
80
|
-
public
|
|
153
|
+
public handleLocalStreamMuteStateChange(meeting?: object, mute?: boolean) {
|
|
154
|
+
if (this.ignoreMuteStateChange) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
81
157
|
LoggerProxy.logger.info(
|
|
82
|
-
`Meeting:muteState#
|
|
158
|
+
`Meeting:muteState#handleLocalStreamMuteStateChange --> ${this.type}: local stream new mute state: ${mute}`
|
|
83
159
|
);
|
|
84
160
|
|
|
85
|
-
if (!mute && !this.state.server.unmuteAllowed) {
|
|
86
|
-
return Promise.reject(
|
|
87
|
-
new PermissionError('User is not allowed to unmute self (hard mute feature is being used)')
|
|
88
|
-
);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// we don't check if we're already in the same state, because even if we were, we would still have to apply the mute state locally,
|
|
92
|
-
// because the client may have changed the audio/vidoe tracks
|
|
93
161
|
this.state.client.localMute = mute;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return new Promise((resolve, reject) => {
|
|
97
|
-
if (this.pendingPromiseResolve) {
|
|
98
|
-
// resolve the last promise we returned to the client as the client has issued a new request that has superseded the previous one
|
|
99
|
-
this.pendingPromiseResolve();
|
|
100
|
-
}
|
|
101
|
-
this.pendingPromiseResolve = resolve;
|
|
102
|
-
this.pendingPromiseReject = reject;
|
|
103
|
-
this.applyClientStateToServer(meeting);
|
|
104
|
-
});
|
|
162
|
+
|
|
163
|
+
this.applyClientStateToServer(meeting);
|
|
105
164
|
}
|
|
106
165
|
|
|
107
166
|
/**
|
|
108
|
-
* Applies the current mute state to the local
|
|
167
|
+
* Applies the current mute state to the local stream (by enabling or disabling it accordingly)
|
|
109
168
|
*
|
|
110
169
|
* @public
|
|
111
170
|
* @param {Object} [meeting] the meeting object
|
|
171
|
+
* @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream
|
|
112
172
|
* @memberof MuteState
|
|
113
173
|
* @returns {void}
|
|
114
174
|
*/
|
|
115
|
-
public applyClientStateLocally(meeting?: any) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
175
|
+
public applyClientStateLocally(meeting?: any, reason?: ServerMuteReason) {
|
|
176
|
+
this.muteLocalStream(meeting, this.state.client.localMute, reason);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Returns true if client is locally muted - it takes into account not just the client local mute state,
|
|
180
|
+
* but also whether audio/video is enabled at all
|
|
181
|
+
*
|
|
182
|
+
* @returns {boolean}
|
|
183
|
+
*/
|
|
184
|
+
private getClientLocalMuteState() {
|
|
185
|
+
return this.state.client.enabled ? this.state.client.localMute : true;
|
|
120
186
|
}
|
|
121
187
|
|
|
122
188
|
/**
|
|
@@ -127,7 +193,7 @@ class MuteState {
|
|
|
127
193
|
* @memberof MuteState
|
|
128
194
|
* @returns {void}
|
|
129
195
|
*/
|
|
130
|
-
private applyClientStateToServer(meeting?:
|
|
196
|
+
private applyClientStateToServer(meeting?: any) {
|
|
131
197
|
if (this.state.syncToServerInProgress) {
|
|
132
198
|
LoggerProxy.logger.info(
|
|
133
199
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: request to server in progress, we need to wait for it to complete`
|
|
@@ -136,11 +202,12 @@ class MuteState {
|
|
|
136
202
|
return;
|
|
137
203
|
}
|
|
138
204
|
|
|
139
|
-
const
|
|
140
|
-
const
|
|
205
|
+
const localMuteState = this.getClientLocalMuteState();
|
|
206
|
+
const localMuteRequiresSync = localMuteState !== this.state.server.localMute;
|
|
207
|
+
const remoteMuteRequiresSync = !localMuteState && this.state.server.remoteMute;
|
|
141
208
|
|
|
142
209
|
LoggerProxy.logger.info(
|
|
143
|
-
`Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${
|
|
210
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${localMuteState} ?= ${this.state.server.localMute})`
|
|
144
211
|
);
|
|
145
212
|
LoggerProxy.logger.info(
|
|
146
213
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: remoteMuteRequiresSync: ${remoteMuteRequiresSync}`
|
|
@@ -151,12 +218,6 @@ class MuteState {
|
|
|
151
218
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: client state already matching server state, nothing to do`
|
|
152
219
|
);
|
|
153
220
|
|
|
154
|
-
if (this.pendingPromiseResolve) {
|
|
155
|
-
this.pendingPromiseResolve();
|
|
156
|
-
}
|
|
157
|
-
this.pendingPromiseResolve = null;
|
|
158
|
-
this.pendingPromiseReject = null;
|
|
159
|
-
|
|
160
221
|
return;
|
|
161
222
|
}
|
|
162
223
|
|
|
@@ -184,11 +245,11 @@ class MuteState {
|
|
|
184
245
|
.catch((e) => {
|
|
185
246
|
this.state.syncToServerInProgress = false;
|
|
186
247
|
|
|
187
|
-
|
|
188
|
-
this.
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
this.
|
|
248
|
+
LoggerProxy.logger.warn(
|
|
249
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: error: ${e}`
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
this.applyServerMuteToLocalStream(meeting, 'clientRequestFailed');
|
|
192
253
|
});
|
|
193
254
|
}
|
|
194
255
|
|
|
@@ -201,16 +262,14 @@ class MuteState {
|
|
|
201
262
|
* @returns {Promise}
|
|
202
263
|
*/
|
|
203
264
|
private sendLocalMuteRequestToServer(meeting?: any) {
|
|
204
|
-
const audioMuted =
|
|
205
|
-
|
|
206
|
-
const videoMuted =
|
|
207
|
-
this.type === VIDEO ? this.state.client.localMute : meeting.video?.state.client.localMute;
|
|
265
|
+
const audioMuted = this.type === AUDIO ? this.getClientLocalMuteState() : undefined;
|
|
266
|
+
const videoMuted = this.type === VIDEO ? this.getClientLocalMuteState() : undefined;
|
|
208
267
|
|
|
209
268
|
LoggerProxy.logger.info(
|
|
210
269
|
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: sending local mute (audio=${audioMuted}, video=${videoMuted}) to server`
|
|
211
270
|
);
|
|
212
271
|
|
|
213
|
-
return MeetingUtil.remoteUpdateAudioVideo(audioMuted, videoMuted
|
|
272
|
+
return MeetingUtil.remoteUpdateAudioVideo(meeting, audioMuted, videoMuted)
|
|
214
273
|
.then((locus) => {
|
|
215
274
|
LoggerProxy.logger.info(
|
|
216
275
|
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: local mute (audio=${audioMuted}, video=${videoMuted}) applied to server`
|
|
@@ -218,7 +277,9 @@ class MuteState {
|
|
|
218
277
|
|
|
219
278
|
this.state.server.localMute = this.type === AUDIO ? audioMuted : videoMuted;
|
|
220
279
|
|
|
221
|
-
|
|
280
|
+
if (locus) {
|
|
281
|
+
meeting.locusInfo.handleLocusDelta(locus, meeting);
|
|
282
|
+
}
|
|
222
283
|
|
|
223
284
|
return locus;
|
|
224
285
|
})
|
|
@@ -240,35 +301,54 @@ class MuteState {
|
|
|
240
301
|
* @returns {Promise}
|
|
241
302
|
*/
|
|
242
303
|
private sendRemoteMuteRequestToServer(meeting?: any) {
|
|
243
|
-
|
|
244
|
-
const remoteMute = this.state.client.localMute;
|
|
304
|
+
const remoteMute = this.getClientLocalMuteState();
|
|
245
305
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
306
|
+
LoggerProxy.logger.info(
|
|
307
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: sending remote mute:${remoteMute} to server`
|
|
308
|
+
);
|
|
249
309
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
310
|
+
return meeting.members
|
|
311
|
+
.muteMember(meeting.members.selfId, remoteMute, this.type === AUDIO)
|
|
312
|
+
.then(() => {
|
|
313
|
+
LoggerProxy.logger.info(
|
|
314
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: remote mute:${remoteMute} applied to server`
|
|
315
|
+
);
|
|
316
|
+
|
|
317
|
+
this.state.server.remoteMute = remoteMute;
|
|
318
|
+
})
|
|
319
|
+
.catch((remoteUpdateError) => {
|
|
320
|
+
LoggerProxy.logger.warn(
|
|
321
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: failed to apply remote mute ${remoteMute} to server: ${remoteUpdateError}`
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
return Promise.reject(remoteUpdateError);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** Sets the mute state of the local stream according to what server thinks is our state
|
|
329
|
+
* @param {Object} meeting - the meeting object
|
|
330
|
+
* @param {ServerMuteReason} serverMuteReason - reason why we're applying server mute to the local stream
|
|
331
|
+
* @returns {void}
|
|
332
|
+
*/
|
|
333
|
+
private applyServerMuteToLocalStream(meeting: any, serverMuteReason: ServerMuteReason) {
|
|
334
|
+
const muted = this.state.server.localMute || this.state.server.remoteMute;
|
|
267
335
|
|
|
268
|
-
//
|
|
269
|
-
this.
|
|
336
|
+
// update the local stream mute state, but not this.state.client.localMute
|
|
337
|
+
this.muteLocalStream(meeting, muted, serverMuteReason);
|
|
338
|
+
}
|
|
270
339
|
|
|
271
|
-
|
|
340
|
+
/** Applies the current value for unmute allowed to the underlying stream
|
|
341
|
+
*
|
|
342
|
+
* @param {Meeting} meeting
|
|
343
|
+
* @returns {void}
|
|
344
|
+
*/
|
|
345
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
346
|
+
private applyUnmuteAllowedToStream(meeting: any) {
|
|
347
|
+
if (this.type === AUDIO) {
|
|
348
|
+
meeting.mediaProperties.audioStream?.setUnmuteAllowed(this.state.server.unmuteAllowed);
|
|
349
|
+
} else {
|
|
350
|
+
meeting.mediaProperties.videoStream?.setUnmuteAllowed(this.state.server.unmuteAllowed);
|
|
351
|
+
}
|
|
272
352
|
}
|
|
273
353
|
|
|
274
354
|
/**
|
|
@@ -276,16 +356,23 @@ class MuteState {
|
|
|
276
356
|
*
|
|
277
357
|
* @public
|
|
278
358
|
* @memberof MuteState
|
|
359
|
+
* @param {Meeting} meeting
|
|
279
360
|
* @param {Boolean} [muted] true if user is remotely muted, false otherwise
|
|
280
361
|
* @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
|
|
281
362
|
* @returns {undefined}
|
|
282
363
|
*/
|
|
283
|
-
public handleServerRemoteMuteUpdate(muted?: boolean, unmuteAllowed?: boolean) {
|
|
364
|
+
public handleServerRemoteMuteUpdate(meeting: any, muted?: boolean, unmuteAllowed?: boolean) {
|
|
284
365
|
LoggerProxy.logger.info(
|
|
285
366
|
`Meeting:muteState#handleServerRemoteMuteUpdate --> ${this.type}: updating server remoteMute to (${muted})`
|
|
286
367
|
);
|
|
287
|
-
|
|
288
|
-
|
|
368
|
+
if (unmuteAllowed !== undefined) {
|
|
369
|
+
this.state.server.unmuteAllowed = unmuteAllowed;
|
|
370
|
+
this.applyUnmuteAllowedToStream(meeting);
|
|
371
|
+
}
|
|
372
|
+
if (muted !== undefined) {
|
|
373
|
+
this.state.server.remoteMute = muted;
|
|
374
|
+
this.applyServerMuteToLocalStream(meeting, 'remotelyMuted');
|
|
375
|
+
}
|
|
289
376
|
}
|
|
290
377
|
|
|
291
378
|
/**
|
|
@@ -297,27 +384,27 @@ class MuteState {
|
|
|
297
384
|
* @returns {undefined}
|
|
298
385
|
*/
|
|
299
386
|
public handleServerLocalUnmuteRequired(meeting?: object) {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
387
|
+
if (!this.state.client.enabled) {
|
|
388
|
+
LoggerProxy.logger.warn(
|
|
389
|
+
`Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received while ${this.type} is disabled -> local unmute will not result in ${this.type} being sent`
|
|
390
|
+
);
|
|
391
|
+
} else {
|
|
392
|
+
LoggerProxy.logger.info(
|
|
393
|
+
`Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received -> doing local unmute`
|
|
394
|
+
);
|
|
395
|
+
}
|
|
303
396
|
|
|
397
|
+
// todo: I'm seeing "you can now unmute yourself " popup when this happens - but same thing happens on web.w.c so we can ignore for now
|
|
304
398
|
this.state.server.remoteMute = false;
|
|
305
399
|
this.state.client.localMute = false;
|
|
306
400
|
|
|
307
|
-
|
|
308
|
-
this.pendingPromiseReject(
|
|
309
|
-
new Error('Server requested local unmute - this overrides any client request in progress')
|
|
310
|
-
);
|
|
311
|
-
this.pendingPromiseResolve = null;
|
|
312
|
-
this.pendingPromiseReject = null;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
this.applyClientStateLocally(meeting);
|
|
401
|
+
this.applyClientStateLocally(meeting, 'localUnmuteRequired');
|
|
316
402
|
this.applyClientStateToServer(meeting);
|
|
317
403
|
}
|
|
318
404
|
|
|
319
405
|
/**
|
|
320
|
-
* Returns true if the user is locally or remotely muted
|
|
406
|
+
* Returns true if the user is locally or remotely muted.
|
|
407
|
+
* It only checks the mute status, ignoring the fact whether audio/video is enabled.
|
|
321
408
|
*
|
|
322
409
|
* @public
|
|
323
410
|
* @memberof MuteState
|
|
@@ -330,36 +417,35 @@ class MuteState {
|
|
|
330
417
|
}
|
|
331
418
|
|
|
332
419
|
/**
|
|
333
|
-
* Returns true if the user is
|
|
420
|
+
* Returns true if the user is remotely muted
|
|
334
421
|
*
|
|
335
422
|
* @public
|
|
336
423
|
* @memberof MuteState
|
|
337
424
|
* @returns {Boolean}
|
|
338
425
|
*/
|
|
339
|
-
public
|
|
340
|
-
return this.state.
|
|
426
|
+
public isRemotelyMuted() {
|
|
427
|
+
return this.state.server.remoteMute;
|
|
341
428
|
}
|
|
342
429
|
|
|
343
430
|
/**
|
|
344
|
-
* Returns true if
|
|
431
|
+
* Returns true if unmute is allowed
|
|
345
432
|
*
|
|
346
433
|
* @public
|
|
347
434
|
* @memberof MuteState
|
|
348
435
|
* @returns {Boolean}
|
|
349
436
|
*/
|
|
350
|
-
public
|
|
351
|
-
return this.state.
|
|
437
|
+
public isUnmuteAllowed() {
|
|
438
|
+
return this.state.server.unmuteAllowed;
|
|
352
439
|
}
|
|
353
440
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
441
|
+
/**
|
|
442
|
+
* Returns true if the user is locally muted or audio/video is disabled
|
|
443
|
+
*
|
|
444
|
+
* @public
|
|
445
|
+
* @memberof MuteState
|
|
446
|
+
* @returns {Boolean}
|
|
447
|
+
*/
|
|
448
|
+
public isLocallyMuted() {
|
|
449
|
+
return this.getClientLocalMuteState();
|
|
362
450
|
}
|
|
363
451
|
}
|
|
364
|
-
|
|
365
|
-
export default createMuteState;
|