@webex/plugin-meetings 3.0.0-beta.41 → 3.0.0-beta.410
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.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +625 -123
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +27 -8
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +247 -34
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- 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.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +116 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.js +93 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +380 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +386 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +71 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +65 -102
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +135 -330
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +86 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4531 -2994
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +236 -136
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +189 -155
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +676 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +172 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +201 -57
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +8 -7
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +44 -40
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +484 -119
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +73 -7
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +57 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +100 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +18 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -446
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +223 -32
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +10 -0
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +3 -1
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +76 -5
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +366 -104
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +255 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +263 -390
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +6 -4
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reconnection-manager/index.js +266 -202
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +66 -28
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +48 -64
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +407 -79
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +179 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +389 -304
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +296 -156
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +9 -2
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +2 -7
- package/dist/types/constants.d.ts +204 -32
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -5
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +66 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -49
- package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
- package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
- package/dist/types/meeting/index.d.ts +630 -505
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +88 -26
- package/dist/types/meeting/request.d.ts +67 -43
- package/dist/types/meeting/util.d.ts +117 -1
- package/dist/types/meeting/voicea-meeting.d.ts +16 -0
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +113 -21
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +17 -0
- package/dist/types/metrics/index.d.ts +4 -111
- package/dist/types/multistream/mediaRequestManager.d.ts +71 -3
- package/dist/types/multistream/receiveSlot.d.ts +7 -3
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +3 -31
- package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +61 -2
- package/dist/types/multistream/sendSlotManager.d.ts +69 -0
- package/dist/types/reachability/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +60 -95
- package/dist/types/reachability/request.d.ts +3 -1
- package/dist/types/reachability/util.d.ts +8 -0
- package/dist/types/reconnection-manager/index.d.ts +19 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +11 -2
- package/dist/types/roap/request.d.ts +9 -8
- package/dist/types/roap/turnDiscovery.d.ts +90 -9
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -0
- package/dist/types/statsAnalyzer/index.d.ts +34 -12
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +22 -19
- 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 +27 -6
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +494 -73
- package/src/breakouts/utils.ts +26 -8
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +44 -2
- 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 -13
- package/src/constants.ts +234 -22
- 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 +45 -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 +349 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +417 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +80 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +100 -108
- package/src/media/properties.ts +88 -117
- package/src/mediaQualityMetrics/config.ts +103 -238
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +3929 -2622
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +237 -136
- package/src/meeting/request.ts +173 -122
- package/src/meeting/util.ts +690 -395
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +166 -16
- package/src/meeting-info/util.ts +13 -10
- package/src/meeting-info/utilv2.ts +47 -37
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +507 -127
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +81 -12
- package/src/member/index.ts +57 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +133 -7
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +17 -0
- package/src/metrics/index.ts +1 -469
- package/src/multistream/mediaRequestManager.ts +271 -56
- package/src/multistream/receiveSlot.ts +11 -4
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +5 -3
- package/src/multistream/remoteMediaGroup.ts +78 -0
- package/src/multistream/remoteMediaManager.ts +248 -45
- package/src/multistream/sendSlotManager.ts +198 -0
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +229 -346
- package/src/reachability/request.ts +8 -4
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +128 -97
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +76 -25
- package/src/roap/request.ts +48 -67
- package/src/roap/turnDiscovery.ts +331 -67
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +166 -0
- package/src/statsAnalyzer/index.ts +496 -419
- package/src/statsAnalyzer/mqaUtil.ts +317 -170
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +321 -262
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +119 -28
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1204 -118
- package/test/unit/spec/breakouts/utils.js +27 -2
- 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 +625 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1372 -37
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +203 -17
- package/test/unit/spec/media/index.ts +178 -81
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
- package/test/unit/spec/meeting/index.js +7835 -2501
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +549 -207
- package/test/unit/spec/meeting/request.js +494 -54
- package/test/unit/spec/meeting/utils.js +827 -74
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +535 -9
- 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 +1489 -219
- package/test/unit/spec/meetings/utils.js +229 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +2 -52
- package/test/unit/spec/multistream/mediaRequestManager.ts +782 -114
- package/test/unit/spec/multistream/receiveSlot.ts +9 -1
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +2 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +344 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +524 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +551 -14
- package/test/unit/spec/reachability/request.js +3 -1
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +171 -11
- 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 +233 -81
- package/test/unit/spec/roap/request.ts +100 -62
- package/test/unit/spec/roap/turnDiscovery.ts +682 -108
- package/test/unit/spec/rtcMetrics/index.ts +122 -0
- package/test/unit/spec/stats-analyzer/index.js +1431 -12
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -57
- package/test/utils/webex-test-users.js +12 -4
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/metrics/config.d.ts +0 -169
- package/src/index.js +0 -18
- package/src/metrics/config.ts +0 -485
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NoiseReductionEffectOptions,
|
|
3
|
+
VirtualBackgroundEffectOptions,
|
|
4
|
+
} from '@webex/media-helpers';
|
|
5
|
+
|
|
6
|
+
type INoiseReductionEffect = Omit<
|
|
7
|
+
NoiseReductionEffectOptions,
|
|
8
|
+
'authToken' | 'workletProcessorUrl' | 'legacyProcessorUrl'
|
|
9
|
+
>;
|
|
10
|
+
type IVirtualBackgroundEffect = Omit<VirtualBackgroundEffectOptions, 'authToken'>;
|
|
11
|
+
|
|
12
|
+
export type {INoiseReductionEffect, IVirtualBackgroundEffect};
|
package/src/meetings/request.ts
CHANGED
|
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
23
23
|
LoggerProxy.logger.error(
|
|
24
24
|
`Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
|
|
25
25
|
);
|
|
26
|
+
throw new Error(error);
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
71
72
|
LoggerProxy.logger.error(
|
|
72
73
|
`Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
|
|
73
74
|
);
|
|
75
|
+
throw new Error(error);
|
|
74
76
|
})
|
|
75
77
|
)
|
|
76
78
|
).then(() => Promise.resolve(responseBody));
|
package/src/meetings/util.ts
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
/* globals window */
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
_LOCUS_ID_,
|
|
5
|
-
_INCOMING_,
|
|
6
4
|
_CREATED_,
|
|
7
|
-
|
|
5
|
+
_INCOMING_,
|
|
6
|
+
_JOINED_,
|
|
7
|
+
_LEFT_,
|
|
8
|
+
_LOCUS_ID_,
|
|
9
|
+
_MOVED_,
|
|
10
|
+
BREAKOUTS,
|
|
8
11
|
CORRELATION_ID,
|
|
9
12
|
EVENT_TRIGGERS,
|
|
13
|
+
LOCUS,
|
|
14
|
+
LOCUSEVENT,
|
|
10
15
|
ROAP,
|
|
11
16
|
} from '../constants';
|
|
12
17
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
13
18
|
import Trigger from '../common/events/trigger-proxy';
|
|
19
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
20
|
+
import Metrics from '../metrics';
|
|
14
21
|
|
|
15
22
|
/**
|
|
16
23
|
* Meetings Media Codec Missing Event
|
|
@@ -44,10 +51,18 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
|
|
|
44
51
|
if (meeting) {
|
|
45
52
|
const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
|
|
46
53
|
|
|
54
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
|
|
55
|
+
correlation_id: data.correlationId,
|
|
56
|
+
seq,
|
|
57
|
+
message_type: messageType,
|
|
58
|
+
error_type: errorType,
|
|
59
|
+
error_cause: errorCause,
|
|
60
|
+
});
|
|
61
|
+
|
|
47
62
|
if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
|
|
48
63
|
// turn discovery is not part of normal roap protocol and so we are not handling it
|
|
49
64
|
// through the usual roap state machine
|
|
50
|
-
meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message);
|
|
65
|
+
meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message, 'from mercury');
|
|
51
66
|
} else {
|
|
52
67
|
const roapMessage = {
|
|
53
68
|
seq,
|
|
@@ -58,13 +73,7 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
|
|
|
58
73
|
errorCause,
|
|
59
74
|
};
|
|
60
75
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
meeting.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
|
|
64
|
-
|
|
65
|
-
if (mediaServer) {
|
|
66
|
-
meeting.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
|
|
67
|
-
}
|
|
76
|
+
meeting.roapMessageReceived(roapMessage);
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
79
|
}
|
|
@@ -109,11 +118,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
|
|
|
109
118
|
MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
|
|
110
119
|
let result = '';
|
|
111
120
|
|
|
112
|
-
if (userPreferences
|
|
121
|
+
if (userPreferences?.sites?.length) {
|
|
113
122
|
const defaultSite = userPreferences.sites.find((site) => site.default);
|
|
114
123
|
|
|
115
124
|
if (defaultSite) {
|
|
116
125
|
result = defaultSite.siteUrl;
|
|
126
|
+
} else {
|
|
127
|
+
result = userPreferences.sites[0].siteUrl;
|
|
117
128
|
}
|
|
118
129
|
}
|
|
119
130
|
|
|
@@ -220,4 +231,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
|
|
|
220
231
|
}, delay);
|
|
221
232
|
};
|
|
222
233
|
|
|
234
|
+
/**
|
|
235
|
+
* get device from locus data
|
|
236
|
+
* @param {Object} newLocus new locus data
|
|
237
|
+
* @param {String} deviceUrl current device url
|
|
238
|
+
* @returns {Object}
|
|
239
|
+
*/
|
|
240
|
+
MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
|
|
241
|
+
if (newLocus?.self?.devices?.length > 0) {
|
|
242
|
+
return newLocus.self.devices.find((device) => device.url === deviceUrl);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return null;
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* get self device joined status from locus data
|
|
250
|
+
* @param {Object} meeting current meeting data
|
|
251
|
+
* @param {Object} newLocus new locus data
|
|
252
|
+
* @param {String} deviceUrl current device url
|
|
253
|
+
* @returns {Object}
|
|
254
|
+
*/
|
|
255
|
+
MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
|
|
256
|
+
const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
|
|
257
|
+
if (thisDevice) {
|
|
258
|
+
if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
|
|
259
|
+
return (
|
|
260
|
+
thisDevice.state === _JOINED_ ||
|
|
261
|
+
(thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return false;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* check the new locus is breakout session's one or not
|
|
271
|
+
* @param {Object} newLocus new locus data
|
|
272
|
+
* @returns {boolean}
|
|
273
|
+
* @private
|
|
274
|
+
*/
|
|
275
|
+
MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
|
|
276
|
+
return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* check the locus is valid breakout locus or not
|
|
281
|
+
* @param {Object} locus
|
|
282
|
+
* @returns {boolean}
|
|
283
|
+
* @private
|
|
284
|
+
*/
|
|
285
|
+
MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
|
|
286
|
+
const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
|
|
287
|
+
const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
|
|
288
|
+
const selfJoined = locus.self?.state === _JOINED_;
|
|
289
|
+
|
|
290
|
+
return isLocusAsBreakout && !inActiveStatus && selfJoined;
|
|
291
|
+
};
|
|
223
292
|
export default MeetingsUtil;
|
package/src/member/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
|
|
5
|
+
import {IExternalRoles, IMediaStatus, ParticipantWithRoles} from './types';
|
|
5
6
|
|
|
6
7
|
import MemberUtil from './util';
|
|
7
8
|
|
|
@@ -10,6 +11,7 @@ import MemberUtil from './util';
|
|
|
10
11
|
*/
|
|
11
12
|
export default class Member {
|
|
12
13
|
associatedUser: any;
|
|
14
|
+
canReclaimHost: boolean;
|
|
13
15
|
id: any;
|
|
14
16
|
isAudioMuted: any;
|
|
15
17
|
isContentSharing: any;
|
|
@@ -28,10 +30,14 @@ export default class Member {
|
|
|
28
30
|
isSelf: any;
|
|
29
31
|
isUser: any;
|
|
30
32
|
isVideoMuted: any;
|
|
33
|
+
roles: IExternalRoles;
|
|
34
|
+
mediaStatus: IMediaStatus;
|
|
31
35
|
name: any;
|
|
32
36
|
participant: any;
|
|
33
37
|
status: any;
|
|
34
38
|
supportsBreakouts: boolean;
|
|
39
|
+
supportsInterpretation: boolean;
|
|
40
|
+
supportLiveAnnotation: boolean;
|
|
35
41
|
type: any;
|
|
36
42
|
namespace = MEETINGS;
|
|
37
43
|
|
|
@@ -56,6 +62,13 @@ export default class Member {
|
|
|
56
62
|
}
|
|
57
63
|
| any = {}
|
|
58
64
|
) {
|
|
65
|
+
/**
|
|
66
|
+
* @instance
|
|
67
|
+
* @type {Boolean}
|
|
68
|
+
* @public
|
|
69
|
+
* @memberof Member
|
|
70
|
+
*/
|
|
71
|
+
this.canReclaimHost = false;
|
|
59
72
|
/**
|
|
60
73
|
* The server participant object
|
|
61
74
|
* @instance
|
|
@@ -108,6 +121,13 @@ export default class Member {
|
|
|
108
121
|
* @memberof Member
|
|
109
122
|
*/
|
|
110
123
|
this.supportsBreakouts = null;
|
|
124
|
+
/**
|
|
125
|
+
* @instance
|
|
126
|
+
* @type {Boolean}
|
|
127
|
+
* @public
|
|
128
|
+
* @memberof Member
|
|
129
|
+
*/
|
|
130
|
+
this.supportLiveAnnotation = null;
|
|
111
131
|
/**
|
|
112
132
|
* @instance
|
|
113
133
|
* @type {Boolean}
|
|
@@ -228,6 +248,26 @@ export default class Member {
|
|
|
228
248
|
* @memberof Member
|
|
229
249
|
*/
|
|
230
250
|
this.isModeratorAssignmentProhibited = null;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* @instance
|
|
254
|
+
* @type {IExternalRoles}
|
|
255
|
+
* @public
|
|
256
|
+
* @memberof Member
|
|
257
|
+
*/
|
|
258
|
+
this.roles = null;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @instance
|
|
262
|
+
* @type {IMediaStatus}
|
|
263
|
+
* @public
|
|
264
|
+
* @memberof Member
|
|
265
|
+
* @example {audio: MediaStatus.RECVONLY, video: MediaStatus.SENDRECV}
|
|
266
|
+
*/
|
|
267
|
+
this.mediaStatus = {
|
|
268
|
+
audio: null,
|
|
269
|
+
video: null,
|
|
270
|
+
};
|
|
231
271
|
// TODO: more participant types
|
|
232
272
|
// such as native client, web client, is a device, what type of phone, etc
|
|
233
273
|
this.processParticipant(participant);
|
|
@@ -245,12 +285,15 @@ export default class Member {
|
|
|
245
285
|
private processParticipant(participant: object) {
|
|
246
286
|
this.participant = participant;
|
|
247
287
|
if (participant) {
|
|
288
|
+
this.canReclaimHost = MemberUtil.canReclaimHost(participant);
|
|
248
289
|
this.id = MemberUtil.extractId(participant);
|
|
249
290
|
this.name = MemberUtil.extractName(participant);
|
|
250
291
|
this.isAudioMuted = MemberUtil.isAudioMuted(participant);
|
|
251
292
|
this.isVideoMuted = MemberUtil.isVideoMuted(participant);
|
|
252
293
|
this.isHandRaised = MemberUtil.isHandRaised(participant);
|
|
253
294
|
this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
|
|
295
|
+
this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
|
|
296
|
+
this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
|
|
254
297
|
this.isGuest = MemberUtil.isGuest(participant);
|
|
255
298
|
this.isUser = MemberUtil.isUser(participant);
|
|
256
299
|
this.isDevice = MemberUtil.isDevice(participant);
|
|
@@ -258,6 +301,7 @@ export default class Member {
|
|
|
258
301
|
this.isModeratorAssignmentProhibited =
|
|
259
302
|
MemberUtil.isModeratorAssignmentProhibited(participant);
|
|
260
303
|
this.processStatus(participant);
|
|
304
|
+
this.processRoles(participant as ParticipantWithRoles);
|
|
261
305
|
// must be done last
|
|
262
306
|
this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
|
|
263
307
|
}
|
|
@@ -303,6 +347,8 @@ export default class Member {
|
|
|
303
347
|
this.isAudioMuted,
|
|
304
348
|
this.type
|
|
305
349
|
);
|
|
350
|
+
|
|
351
|
+
this.mediaStatus = MemberUtil.extractMediaStatus(this.participant);
|
|
306
352
|
}
|
|
307
353
|
|
|
308
354
|
/**
|
|
@@ -427,6 +473,17 @@ export default class Member {
|
|
|
427
473
|
}
|
|
428
474
|
}
|
|
429
475
|
|
|
476
|
+
/**
|
|
477
|
+
* process the roles that have been applied to this member
|
|
478
|
+
* @param {Object} participant
|
|
479
|
+
* @returns {undefined}
|
|
480
|
+
* @private
|
|
481
|
+
* @memberof Member
|
|
482
|
+
*/
|
|
483
|
+
private processRoles(participant: ParticipantWithRoles) {
|
|
484
|
+
this.roles = MemberUtil.extractControlRoles(participant);
|
|
485
|
+
}
|
|
486
|
+
|
|
430
487
|
/**
|
|
431
488
|
* set the type for the member, could be MEETING or CALL
|
|
432
489
|
* @param {String} type
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface IExternalRoles {
|
|
2
|
+
cohost: boolean;
|
|
3
|
+
moderator: boolean;
|
|
4
|
+
presenter: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export enum ServerRoles {
|
|
8
|
+
Cohost = 'COHOST',
|
|
9
|
+
Moderator = 'MODERATOR',
|
|
10
|
+
Presenter = 'PRESENTER',
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type ServerRoleShape = {
|
|
14
|
+
type: ServerRoles;
|
|
15
|
+
hasRole: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ParticipantWithRoles = {
|
|
19
|
+
controls: {
|
|
20
|
+
role: {
|
|
21
|
+
roles: Array<ServerRoleShape>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// values are inherited from locus so don't update these
|
|
27
|
+
export enum MediaStatus {
|
|
28
|
+
RECVONLY = 'RECVONLY', // participant only receiving and not sending
|
|
29
|
+
SENDONLY = 'SENDONLY', // participant only sending and not receiving
|
|
30
|
+
SENDRECV = 'SENDRECV', // participant both sending and receiving
|
|
31
|
+
INACTIVE = 'INACTIVE', // participant is not connected to media source
|
|
32
|
+
UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface IMediaStatus {
|
|
36
|
+
audio: MediaStatus;
|
|
37
|
+
video: MediaStatus;
|
|
38
|
+
}
|
package/src/member/util.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IExternalRoles,
|
|
3
|
+
ParticipantWithRoles,
|
|
4
|
+
ServerRoles,
|
|
5
|
+
ServerRoleShape,
|
|
6
|
+
IMediaStatus,
|
|
7
|
+
} from './types';
|
|
1
8
|
import {
|
|
2
9
|
_USER_,
|
|
3
10
|
_RESOURCE_ROOM_,
|
|
@@ -14,11 +21,79 @@ import {
|
|
|
14
21
|
_SEND_RECEIVE_,
|
|
15
22
|
_RECEIVE_ONLY_,
|
|
16
23
|
_CALL_,
|
|
24
|
+
VIDEO,
|
|
25
|
+
AUDIO,
|
|
17
26
|
} from '../constants';
|
|
18
27
|
import ParameterError from '../common/errors/parameter';
|
|
19
28
|
|
|
20
29
|
const MemberUtil: any = {};
|
|
21
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @param {Object} participant the locus participant
|
|
33
|
+
* @returns {Boolean}
|
|
34
|
+
*/
|
|
35
|
+
MemberUtil.canReclaimHost = (participant) => {
|
|
36
|
+
if (!participant) {
|
|
37
|
+
throw new ParameterError(
|
|
38
|
+
'canReclaimHostRole could not be processed, participant is undefined.'
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return participant.canReclaimHostRole || false;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {Object} participant the locus participant
|
|
47
|
+
* @returns {[ServerRoleShape]}
|
|
48
|
+
*/
|
|
49
|
+
MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
|
|
50
|
+
participant?.controls?.role?.roles;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @param {Object} participant the locus participant
|
|
54
|
+
* @param {ServerRoles} controlRole the search role
|
|
55
|
+
* @returns {Boolean}
|
|
56
|
+
*/
|
|
57
|
+
MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
|
|
58
|
+
MemberUtil.getControlsRoles(participant)?.some(
|
|
59
|
+
(role) => role.type === controlRole && role.hasRole
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {Object} participant the locus participant
|
|
64
|
+
* @returns {Boolean}
|
|
65
|
+
*/
|
|
66
|
+
MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
|
|
67
|
+
MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* @param {Object} participant the locus participant
|
|
71
|
+
* @returns {Boolean}
|
|
72
|
+
*/
|
|
73
|
+
MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
|
|
74
|
+
MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {Object} participant the locus participant
|
|
78
|
+
* @returns {Boolean}
|
|
79
|
+
*/
|
|
80
|
+
MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
|
|
81
|
+
MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @param {Object} participant the locus participant
|
|
85
|
+
* @returns {IExternalRoles}
|
|
86
|
+
*/
|
|
87
|
+
MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
|
|
88
|
+
const roles = {
|
|
89
|
+
cohost: MemberUtil.hasCohost(participant),
|
|
90
|
+
moderator: MemberUtil.hasModerator(participant),
|
|
91
|
+
presenter: MemberUtil.hasPresenter(participant),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
return roles;
|
|
95
|
+
};
|
|
96
|
+
|
|
22
97
|
/**
|
|
23
98
|
* @param {Object} participant the locus participant
|
|
24
99
|
* @returns {Boolean}
|
|
@@ -93,30 +168,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
|
|
|
93
168
|
if (!participant) {
|
|
94
169
|
throw new ParameterError('Audio could not be processed, participant is undefined.');
|
|
95
170
|
}
|
|
96
|
-
const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
|
|
97
|
-
|
|
98
|
-
if (participant.controls && participant.controls.audio) {
|
|
99
|
-
if (participant.controls.audio.muted) {
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
if (mutedStatus) {
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
171
|
|
|
107
|
-
return
|
|
172
|
+
return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
|
|
108
173
|
};
|
|
109
174
|
|
|
110
175
|
/**
|
|
111
176
|
* @param {Object} participant the locus participant
|
|
112
177
|
* @returns {Boolean}
|
|
113
178
|
*/
|
|
114
|
-
MemberUtil.isVideoMuted = (participant: any) => {
|
|
179
|
+
MemberUtil.isVideoMuted = (participant: any): boolean => {
|
|
115
180
|
if (!participant) {
|
|
116
181
|
throw new ParameterError('Video could not be processed, participant is undefined.');
|
|
117
182
|
}
|
|
118
183
|
|
|
119
|
-
return MemberUtil.isMuted(participant
|
|
184
|
+
return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
|
|
120
185
|
};
|
|
121
186
|
|
|
122
187
|
/**
|
|
@@ -144,22 +209,57 @@ MemberUtil.isBreakoutsSupported = (participant) => {
|
|
|
144
209
|
};
|
|
145
210
|
|
|
146
211
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @param {String} status
|
|
149
|
-
* @param {String} accessor
|
|
212
|
+
* @param {Object} participant the locus participant
|
|
150
213
|
* @returns {Boolean}
|
|
151
214
|
*/
|
|
152
|
-
MemberUtil.
|
|
153
|
-
if (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
if (status[accessor] === _SEND_RECEIVE_) {
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
215
|
+
MemberUtil.isInterpretationSupported = (participant) => {
|
|
216
|
+
if (!participant) {
|
|
217
|
+
throw new ParameterError(
|
|
218
|
+
'Interpretation support could not be processed, participant is undefined.'
|
|
219
|
+
);
|
|
160
220
|
}
|
|
161
221
|
|
|
162
|
-
return
|
|
222
|
+
return !participant.doesNotSupportSiInterpreter;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @param {Object} participant the locus participant
|
|
227
|
+
* @returns {Boolean}
|
|
228
|
+
*/
|
|
229
|
+
MemberUtil.isLiveAnnotationSupported = (participant) => {
|
|
230
|
+
if (!participant) {
|
|
231
|
+
throw new ParameterError(
|
|
232
|
+
'LiveAnnotation support could not be processed, participant is undefined.'
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return !participant.annotatorAssignmentNotAllowed;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* utility method for audio/video muted status
|
|
241
|
+
* @param {any} participant
|
|
242
|
+
* @param {String} statusAccessor
|
|
243
|
+
* @param {String} controlsAccessor
|
|
244
|
+
* @returns {Boolean | undefined}
|
|
245
|
+
*/
|
|
246
|
+
MemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {
|
|
247
|
+
// check remote mute
|
|
248
|
+
const remoteMute = participant?.controls?.[controlsAccessor]?.muted;
|
|
249
|
+
if (remoteMute === true) {
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// check local mute
|
|
254
|
+
const localStatus = participant?.status?.[statusAccessor];
|
|
255
|
+
if (localStatus === _RECEIVE_ONLY_) {
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
if (localStatus === _SEND_RECEIVE_) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return remoteMute;
|
|
163
263
|
};
|
|
164
264
|
|
|
165
265
|
/**
|
|
@@ -266,6 +366,22 @@ MemberUtil.extractId = (participant: any) => {
|
|
|
266
366
|
return null;
|
|
267
367
|
};
|
|
268
368
|
|
|
369
|
+
/**
|
|
370
|
+
* extracts the media status from nested participant object
|
|
371
|
+
* @param {Object} participant the locus participant
|
|
372
|
+
* @returns {Object}
|
|
373
|
+
*/
|
|
374
|
+
MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
|
|
375
|
+
if (!participant) {
|
|
376
|
+
throw new ParameterError('Media status could not be extracted, participant is undefined.');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return {
|
|
380
|
+
audio: participant.status?.audioStatus,
|
|
381
|
+
video: participant.status?.videoStatus,
|
|
382
|
+
};
|
|
383
|
+
};
|
|
384
|
+
|
|
269
385
|
/**
|
|
270
386
|
* @param {Object} participant the locus participant
|
|
271
387
|
* @returns {String}
|