@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131
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 +45 -1
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +48 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +355 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +193 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +43 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +994 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +203 -53
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -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.js +294 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +72 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +100 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +406 -216
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +88 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +105 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +55 -165
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +71 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +77 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2603 -2462
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +292 -138
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +315 -336
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +463 -583
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +305 -286
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +24 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +692 -593
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +23 -42
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +89 -88
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +101 -69
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +12 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +166 -205
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +120 -85
- 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 +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +50 -16
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +93 -162
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +167 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +74 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +32 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +190 -199
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +14 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +19 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +326 -465
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +31 -75
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +129 -136
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +143 -103
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +369 -461
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +144 -94
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +35 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +124 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +2 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +78 -0
- package/dist/types/constants.d.ts +993 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +315 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
- package/dist/types/meeting/index.d.ts +1762 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +186 -0
- package/dist/types/meeting/request.d.ts +269 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +76 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +345 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +157 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/config.d.ts +195 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +169 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +28 -21
- package/src/annotation/annotation.types.ts +42 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +163 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +37 -0
- package/src/breakouts/index.ts +860 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +16 -12
- package/src/constants.ts +153 -7
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +281 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +142 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +346 -55
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +52 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +195 -56
- package/src/media/index.ts +139 -196
- package/src/media/properties.ts +43 -36
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +380 -378
- package/src/meeting/in-meeting-actions.ts +159 -3
- package/src/meeting/index.ts +2803 -1584
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +290 -72
- package/src/meeting/request.ts +247 -178
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +445 -395
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +235 -116
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +71 -55
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +772 -437
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +132 -33
- package/src/member/index.ts +95 -49
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +106 -13
- package/src/members/collection.ts +8 -1
- package/src/members/index.ts +288 -130
- package/src/members/request.ts +144 -31
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +316 -235
- package/src/metrics/config.ts +302 -90
- package/src/metrics/constants.ts +2 -6
- package/src/metrics/index.ts +124 -95
- package/src/multistream/mediaRequestManager.ts +203 -45
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +62 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/index.ts +24 -27
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +131 -79
- package/src/reachability/request.ts +43 -34
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +8 -8
- package/src/reactions/reactions.type.ts +31 -5
- package/src/reconnection-manager/index.ts +193 -111
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/index.ts +53 -53
- package/src/roap/request.ts +77 -64
- package/src/roap/turnDiscovery.ts +101 -48
- package/src/statsAnalyzer/global.ts +8 -104
- package/src/statsAnalyzer/index.ts +624 -376
- package/src/statsAnalyzer/mqaUtil.ts +203 -90
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/converged-space-meetings.js +177 -0
- package/test/integration/spec/journey.js +670 -466
- package/test/integration/spec/space-meeting.js +320 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +433 -0
- package/test/unit/spec/breakouts/breakout.ts +203 -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 +77 -0
- package/test/unit/spec/breakouts/index.ts +1609 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +504 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/locus-info/controlsUtils.js +305 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +636 -5
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +110 -103
- package/test/unit/spec/locus-info/selfUtils.js +252 -12
- package/test/unit/spec/media/index.ts +104 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
- package/test/unit/spec/meeting/index.js +3112 -921
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +421 -94
- package/test/unit/spec/meeting/request.js +421 -79
- package/test/unit/spec/meeting/utils.js +326 -189
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1126 -328
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +383 -32
- package/test/unit/spec/members/index.js +424 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +113 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +62 -31
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +19 -49
- package/test/unit/spec/roap/request.ts +187 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +64 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -334
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting/effectsState.ts +0 -211
- package/src/multistream/multistreamMedia.ts +0 -92
- package/test/unit/spec/meeting/effectsState.js +0 -291
package/src/meeting/muteState.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
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
4
|
import PermissionError from '../common/errors/permission';
|
|
4
|
-
import
|
|
5
|
-
import MeetingUtil from '../meeting/util';
|
|
5
|
+
import MeetingUtil from './util';
|
|
6
6
|
import {AUDIO, VIDEO} from '../constants';
|
|
7
|
-
|
|
8
|
-
|
|
9
7
|
/* Certain aspects of server interaction for video muting are not implemented as we currently don't support remote muting of video.
|
|
10
8
|
If we ever need to support it, search for REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION string to find the places that need updating
|
|
11
9
|
*/
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
const createMuteState = (type, meeting, mediaDirection) => {
|
|
11
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
12
|
+
export const createMuteState = (type, meeting, mediaDirection, sdkOwnsLocalTrack: boolean) => {
|
|
13
|
+
// todo: remove mediaDirection argument (SPARK-399695)
|
|
14
|
+
// todo: remove the meeting argument (SPARK-399695)
|
|
15
15
|
if (type === AUDIO && !mediaDirection.sendAudio) {
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
@@ -19,50 +19,139 @@ const createMuteState = (type, meeting, mediaDirection) => {
|
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
LoggerProxy.logger.info(
|
|
22
|
+
LoggerProxy.logger.info(
|
|
23
|
+
`Meeting:muteState#createMuteState --> ${type}: creating MuteState for meeting id ${meeting?.id}`
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const muteState = new MuteState(type, meeting, sdkOwnsLocalTrack);
|
|
27
|
+
|
|
28
|
+
muteState.init(meeting);
|
|
23
29
|
|
|
24
|
-
return
|
|
30
|
+
return muteState;
|
|
25
31
|
};
|
|
26
32
|
|
|
27
33
|
/** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
|
|
28
34
|
the last requested state by the client.
|
|
29
35
|
|
|
30
36
|
More info about Locus muting API: https://sqbu-github.cisco.com/pages/WebExSquared/locus/guides/mute.html#
|
|
37
|
+
|
|
38
|
+
This class is exported only for unit tests. It should never be instantiated directly with new MuteState(), instead createMuteState() should be called
|
|
31
39
|
*/
|
|
32
|
-
class MuteState {
|
|
40
|
+
export class MuteState {
|
|
33
41
|
pendingPromiseReject: any;
|
|
34
42
|
pendingPromiseResolve: any;
|
|
35
43
|
state: any;
|
|
36
44
|
type: any;
|
|
45
|
+
sdkOwnsLocalTrack: boolean; // todo: remove this when doing SPARK-399695
|
|
46
|
+
ignoreMuteStateChange: boolean;
|
|
37
47
|
|
|
38
48
|
/**
|
|
39
49
|
* Constructor
|
|
40
50
|
*
|
|
41
51
|
* @param {String} type - audio or video
|
|
42
52
|
* @param {Object} meeting - the meeting object (used for reading current remote mute status)
|
|
53
|
+
* @param {boolean} sdkOwnsLocalTrack - if false, then client app owns the local track (for now that's the case only for multistream meetings)
|
|
43
54
|
*/
|
|
44
|
-
constructor(type: string, meeting: any) {
|
|
45
|
-
if (
|
|
55
|
+
constructor(type: string, meeting: any, sdkOwnsLocalTrack: boolean) {
|
|
56
|
+
if (type !== AUDIO && type !== VIDEO) {
|
|
46
57
|
throw new ParameterError('Mute state is designed for handling audio or video only');
|
|
47
58
|
}
|
|
48
59
|
this.type = type;
|
|
60
|
+
this.sdkOwnsLocalTrack = sdkOwnsLocalTrack;
|
|
61
|
+
this.ignoreMuteStateChange = false;
|
|
49
62
|
this.state = {
|
|
50
63
|
client: {
|
|
51
|
-
localMute: false
|
|
64
|
+
localMute: false,
|
|
52
65
|
},
|
|
53
66
|
server: {
|
|
54
|
-
localMute:
|
|
55
|
-
//
|
|
56
|
-
remoteMute: type === AUDIO ? meeting.remoteMuted : false,
|
|
57
|
-
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : true
|
|
67
|
+
localMute: true,
|
|
68
|
+
// because remoteVideoMuted and unmuteVideoAllowed are updated seperately, they might be undefined
|
|
69
|
+
remoteMute: type === AUDIO ? meeting.remoteMuted : meeting.remoteVideoMuted ?? false,
|
|
70
|
+
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : meeting.unmuteVideoAllowed ?? true,
|
|
58
71
|
},
|
|
59
|
-
syncToServerInProgress: false
|
|
72
|
+
syncToServerInProgress: false,
|
|
60
73
|
};
|
|
61
74
|
// these 2 hold the resolve, reject methods for the promise we returned to the client in last handleClientRequest() call
|
|
62
75
|
this.pendingPromiseResolve = null;
|
|
63
76
|
this.pendingPromiseReject = null;
|
|
64
77
|
}
|
|
65
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Starts the mute state machine. Needs to be called after a new MuteState instance is created.
|
|
81
|
+
*
|
|
82
|
+
* @param {Object} meeting - the meeting object
|
|
83
|
+
* @returns {void}
|
|
84
|
+
*/
|
|
85
|
+
public init(meeting: any) {
|
|
86
|
+
if (!this.sdkOwnsLocalTrack) {
|
|
87
|
+
this.applyUnmuteAllowedToTrack(meeting);
|
|
88
|
+
|
|
89
|
+
// if we are remotely muted, we need to apply that to the local track now (mute on-entry)
|
|
90
|
+
if (this.state.server.remoteMute) {
|
|
91
|
+
this.muteLocalTrack(meeting, this.state.server.remoteMute, 'remotelyMuted');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const initialMute =
|
|
95
|
+
this.type === AUDIO
|
|
96
|
+
? meeting.mediaProperties.audioTrack?.muted
|
|
97
|
+
: meeting.mediaProperties.videoTrack?.muted;
|
|
98
|
+
|
|
99
|
+
LoggerProxy.logger.info(
|
|
100
|
+
`Meeting:muteState#init --> ${this.type}: local track initial mute state: ${initialMute}`
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
if (initialMute !== undefined) {
|
|
104
|
+
this.state.client.localMute = initialMute;
|
|
105
|
+
|
|
106
|
+
this.applyClientStateToServer(meeting);
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
// in the mode where sdkOwnsLocalTrack is false (transcoded meetings),
|
|
110
|
+
// SDK API currently doesn't allow to start with audio/video muted,
|
|
111
|
+
// so we need to apply the initial local mute state (false) to server
|
|
112
|
+
this.state.syncToServerInProgress = true;
|
|
113
|
+
this.sendLocalMuteRequestToServer(meeting)
|
|
114
|
+
.then(() => {
|
|
115
|
+
this.state.syncToServerInProgress = false;
|
|
116
|
+
})
|
|
117
|
+
.catch(() => {
|
|
118
|
+
this.state.syncToServerInProgress = false;
|
|
119
|
+
// not much we can do here...
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* This method needs to be called whenever the local audio/video track has changed.
|
|
126
|
+
* It reapplies the remote mute state onto the new track and also reads the current
|
|
127
|
+
* local mute state from the track and updates the internal state machine and sends
|
|
128
|
+
* any required requests to the server.
|
|
129
|
+
*
|
|
130
|
+
* @param {Object} meeting - the meeting object
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
public handleLocalTrackChange(meeting: any) {
|
|
134
|
+
return this.init(meeting);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Mutes/unmutes local track
|
|
139
|
+
*
|
|
140
|
+
* @param {Object} meeting - the meeting object
|
|
141
|
+
* @param {Boolean} mute - true to mute the track, false to unmute it
|
|
142
|
+
* @param {ServerMuteReason} reason - reason for muting/unmuting
|
|
143
|
+
* @returns {void}
|
|
144
|
+
*/
|
|
145
|
+
private muteLocalTrack(meeting: any, mute: boolean, reason: ServerMuteReason) {
|
|
146
|
+
this.ignoreMuteStateChange = true;
|
|
147
|
+
if (this.type === AUDIO) {
|
|
148
|
+
meeting.mediaProperties.audioTrack?.setServerMuted(mute, reason);
|
|
149
|
+
} else {
|
|
150
|
+
meeting.mediaProperties.videoTrack?.setServerMuted(mute, reason);
|
|
151
|
+
}
|
|
152
|
+
this.ignoreMuteStateChange = false;
|
|
153
|
+
}
|
|
154
|
+
|
|
66
155
|
/**
|
|
67
156
|
* Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
|
|
68
157
|
* at the point that this request becomese superseded by another client request.
|
|
@@ -77,16 +166,22 @@ class MuteState {
|
|
|
77
166
|
* @param {Boolean} [mute] true for muting, false for unmuting request
|
|
78
167
|
* @returns {Promise}
|
|
79
168
|
*/
|
|
80
|
-
public handleClientRequest(meeting
|
|
81
|
-
|
|
169
|
+
public handleClientRequest(meeting: object, mute?: boolean) {
|
|
170
|
+
// todo: this whole method will be removed in SPARK-399695
|
|
171
|
+
LoggerProxy.logger.info(
|
|
172
|
+
`Meeting:muteState#handleClientRequest --> ${this.type}: user requesting new mute state: ${mute}`
|
|
173
|
+
);
|
|
82
174
|
|
|
83
175
|
if (!mute && !this.state.server.unmuteAllowed) {
|
|
84
|
-
return Promise.reject(
|
|
176
|
+
return Promise.reject(
|
|
177
|
+
new PermissionError('User is not allowed to unmute self (hard mute feature is being used)')
|
|
178
|
+
);
|
|
85
179
|
}
|
|
86
180
|
|
|
87
181
|
// 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,
|
|
88
|
-
// because the client may have changed the audio/
|
|
182
|
+
// because the client may have changed the audio/video tracks
|
|
89
183
|
this.state.client.localMute = mute;
|
|
184
|
+
|
|
90
185
|
this.applyClientStateLocally(meeting);
|
|
91
186
|
|
|
92
187
|
return new Promise((resolve, reject) => {
|
|
@@ -100,19 +195,52 @@ class MuteState {
|
|
|
100
195
|
});
|
|
101
196
|
}
|
|
102
197
|
|
|
198
|
+
/**
|
|
199
|
+
* This method should be called when the local track mute state is changed
|
|
200
|
+
* @public
|
|
201
|
+
* @memberof MuteState
|
|
202
|
+
* @param {Object} [meeting] the meeting object
|
|
203
|
+
* @param {Boolean} [mute] true for muting, false for unmuting request
|
|
204
|
+
* @returns {void}
|
|
205
|
+
*/
|
|
206
|
+
public handleLocalTrackMuteStateChange(meeting?: object, mute?: boolean) {
|
|
207
|
+
if (this.ignoreMuteStateChange) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
LoggerProxy.logger.info(
|
|
211
|
+
`Meeting:muteState#handleLocalTrackMuteStateChange --> ${this.type}: local track new mute state: ${mute}`
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
if (this.pendingPromiseReject) {
|
|
215
|
+
LoggerProxy.logger.error(
|
|
216
|
+
`Meeting:muteState#handleLocalTrackMuteStateChange --> ${this.type}: Local track mute state change handler called while a client request is handled - this should never happen!, mute state: ${mute}`
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
this.state.client.localMute = mute;
|
|
221
|
+
|
|
222
|
+
this.applyClientStateToServer(meeting);
|
|
223
|
+
}
|
|
224
|
+
|
|
103
225
|
/**
|
|
104
226
|
* Applies the current mute state to the local track (by enabling or disabling it accordingly)
|
|
105
227
|
*
|
|
106
228
|
* @public
|
|
107
229
|
* @param {Object} [meeting] the meeting object
|
|
230
|
+
* @param {ServerMuteReason} reason - reason why we're applying our client state to the local track
|
|
108
231
|
* @memberof MuteState
|
|
109
232
|
* @returns {void}
|
|
110
233
|
*/
|
|
111
|
-
public applyClientStateLocally(meeting?: any) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
234
|
+
public applyClientStateLocally(meeting?: any, reason?: ServerMuteReason) {
|
|
235
|
+
if (this.sdkOwnsLocalTrack) {
|
|
236
|
+
if (this.type === AUDIO) {
|
|
237
|
+
meeting.mediaProperties.audioTrack?.setMuted(this.state.client.localMute);
|
|
238
|
+
} else {
|
|
239
|
+
meeting.mediaProperties.videoTrack?.setMuted(this.state.client.localMute);
|
|
240
|
+
}
|
|
241
|
+
} else {
|
|
242
|
+
this.muteLocalTrack(meeting, this.state.client.localMute, reason);
|
|
243
|
+
}
|
|
116
244
|
}
|
|
117
245
|
|
|
118
246
|
/**
|
|
@@ -125,19 +253,27 @@ class MuteState {
|
|
|
125
253
|
*/
|
|
126
254
|
private applyClientStateToServer(meeting?: object) {
|
|
127
255
|
if (this.state.syncToServerInProgress) {
|
|
128
|
-
LoggerProxy.logger.info(
|
|
256
|
+
LoggerProxy.logger.info(
|
|
257
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: request to server in progress, we need to wait for it to complete`
|
|
258
|
+
);
|
|
129
259
|
|
|
130
260
|
return;
|
|
131
261
|
}
|
|
132
262
|
|
|
133
|
-
const localMuteRequiresSync =
|
|
134
|
-
const remoteMuteRequiresSync =
|
|
263
|
+
const localMuteRequiresSync = this.state.client.localMute !== this.state.server.localMute;
|
|
264
|
+
const remoteMuteRequiresSync = !this.state.client.localMute && this.state.server.remoteMute;
|
|
135
265
|
|
|
136
|
-
LoggerProxy.logger.info(
|
|
137
|
-
|
|
266
|
+
LoggerProxy.logger.info(
|
|
267
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${this.state.client.localMute} ?= ${this.state.server.localMute})`
|
|
268
|
+
);
|
|
269
|
+
LoggerProxy.logger.info(
|
|
270
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: remoteMuteRequiresSync: ${remoteMuteRequiresSync}`
|
|
271
|
+
);
|
|
138
272
|
|
|
139
273
|
if (!localMuteRequiresSync && !remoteMuteRequiresSync) {
|
|
140
|
-
LoggerProxy.logger.info(
|
|
274
|
+
LoggerProxy.logger.info(
|
|
275
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: client state already matching server state, nothing to do`
|
|
276
|
+
);
|
|
141
277
|
|
|
142
278
|
if (this.pendingPromiseResolve) {
|
|
143
279
|
this.pendingPromiseResolve();
|
|
@@ -151,15 +287,20 @@ class MuteState {
|
|
|
151
287
|
this.state.syncToServerInProgress = true;
|
|
152
288
|
|
|
153
289
|
// first sync local mute with server
|
|
154
|
-
const localMuteSyncPromise =
|
|
290
|
+
const localMuteSyncPromise = localMuteRequiresSync
|
|
291
|
+
? this.sendLocalMuteRequestToServer(meeting)
|
|
292
|
+
: Promise.resolve();
|
|
155
293
|
|
|
156
294
|
localMuteSyncPromise
|
|
157
295
|
.then(() =>
|
|
158
296
|
// then follow it up with remote mute sync
|
|
159
|
-
|
|
297
|
+
remoteMuteRequiresSync ? this.sendRemoteMuteRequestToServer(meeting) : Promise.resolve()
|
|
298
|
+
)
|
|
160
299
|
.then(() => {
|
|
161
300
|
this.state.syncToServerInProgress = false;
|
|
162
|
-
LoggerProxy.logger.info(
|
|
301
|
+
LoggerProxy.logger.info(
|
|
302
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: sync with server completed`
|
|
303
|
+
);
|
|
163
304
|
|
|
164
305
|
// need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
|
|
165
306
|
this.applyClientStateToServer(meeting);
|
|
@@ -172,6 +313,8 @@ class MuteState {
|
|
|
172
313
|
}
|
|
173
314
|
this.pendingPromiseResolve = null;
|
|
174
315
|
this.pendingPromiseReject = null;
|
|
316
|
+
|
|
317
|
+
this.applyServerMuteToLocalTrack(meeting, 'clientRequestFailed');
|
|
175
318
|
});
|
|
176
319
|
}
|
|
177
320
|
|
|
@@ -184,20 +327,24 @@ class MuteState {
|
|
|
184
327
|
* @returns {Promise}
|
|
185
328
|
*/
|
|
186
329
|
private sendLocalMuteRequestToServer(meeting?: any) {
|
|
187
|
-
const audioMuted =
|
|
188
|
-
const videoMuted =
|
|
330
|
+
const audioMuted = this.type === AUDIO ? this.state.client.localMute : undefined;
|
|
331
|
+
const videoMuted = this.type === VIDEO ? this.state.client.localMute : undefined;
|
|
189
332
|
|
|
190
|
-
LoggerProxy.logger.info(
|
|
333
|
+
LoggerProxy.logger.info(
|
|
334
|
+
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: sending local mute (audio=${audioMuted}, video=${videoMuted}) to server`
|
|
335
|
+
);
|
|
191
336
|
|
|
192
|
-
return MeetingUtil.remoteUpdateAudioVideo(audioMuted, videoMuted
|
|
337
|
+
return MeetingUtil.remoteUpdateAudioVideo(meeting, audioMuted, videoMuted)
|
|
193
338
|
.then((locus) => {
|
|
194
339
|
LoggerProxy.logger.info(
|
|
195
340
|
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: local mute (audio=${audioMuted}, video=${videoMuted}) applied to server`
|
|
196
341
|
);
|
|
197
342
|
|
|
198
|
-
this.state.server.localMute =
|
|
343
|
+
this.state.server.localMute = this.type === AUDIO ? audioMuted : videoMuted;
|
|
199
344
|
|
|
200
|
-
|
|
345
|
+
if (locus) {
|
|
346
|
+
meeting.locusInfo.onDeltaLocus(locus);
|
|
347
|
+
}
|
|
201
348
|
|
|
202
349
|
return locus;
|
|
203
350
|
})
|
|
@@ -210,7 +357,6 @@ class MuteState {
|
|
|
210
357
|
});
|
|
211
358
|
}
|
|
212
359
|
|
|
213
|
-
|
|
214
360
|
/**
|
|
215
361
|
* Sets the remote mute value in the server
|
|
216
362
|
*
|
|
@@ -220,32 +366,57 @@ class MuteState {
|
|
|
220
366
|
* @returns {Promise}
|
|
221
367
|
*/
|
|
222
368
|
private sendRemoteMuteRequestToServer(meeting?: any) {
|
|
223
|
-
|
|
224
|
-
const remoteMute = this.state.client.localMute;
|
|
369
|
+
const remoteMute = this.state.client.localMute;
|
|
225
370
|
|
|
226
|
-
|
|
371
|
+
LoggerProxy.logger.info(
|
|
372
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: sending remote mute:${remoteMute} to server`
|
|
373
|
+
);
|
|
227
374
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
375
|
+
return meeting.members
|
|
376
|
+
.muteMember(meeting.members.selfId, remoteMute, this.type === AUDIO)
|
|
377
|
+
.then(() => {
|
|
378
|
+
LoggerProxy.logger.info(
|
|
379
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: remote mute:${remoteMute} applied to server`
|
|
380
|
+
);
|
|
233
381
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
382
|
+
this.state.server.remoteMute = remoteMute;
|
|
383
|
+
})
|
|
384
|
+
.catch((remoteUpdateError) => {
|
|
385
|
+
LoggerProxy.logger.warn(
|
|
386
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: failed to apply remote mute ${remoteMute} to server: ${remoteUpdateError}`
|
|
387
|
+
);
|
|
240
388
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
389
|
+
return Promise.reject(remoteUpdateError);
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/** Sets the mute state of the local track according to what server thinks is our state
|
|
394
|
+
* @param {Object} meeting - the meeting object
|
|
395
|
+
* @param {ServerMuteReason} serverMuteReason - reason why we're applying server mute to the local track
|
|
396
|
+
* @returns {void}
|
|
397
|
+
*/
|
|
398
|
+
private applyServerMuteToLocalTrack(meeting: any, serverMuteReason: ServerMuteReason) {
|
|
399
|
+
if (!this.sdkOwnsLocalTrack) {
|
|
400
|
+
const muted = this.state.server.localMute || this.state.server.remoteMute;
|
|
244
401
|
|
|
245
|
-
|
|
246
|
-
|
|
402
|
+
// update the local track mute state, but not this.state.client.localMute
|
|
403
|
+
this.muteLocalTrack(meeting, muted, serverMuteReason);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
247
406
|
|
|
248
|
-
|
|
407
|
+
/** Applies the current value for unmute allowed to the underlying track
|
|
408
|
+
*
|
|
409
|
+
* @param {Meeting} meeting
|
|
410
|
+
* @returns {void}
|
|
411
|
+
*/
|
|
412
|
+
private applyUnmuteAllowedToTrack(meeting: any) {
|
|
413
|
+
if (!this.sdkOwnsLocalTrack) {
|
|
414
|
+
if (this.type === AUDIO) {
|
|
415
|
+
meeting.mediaProperties.audioTrack?.setUnmuteAllowed(this.state.server.unmuteAllowed);
|
|
416
|
+
} else {
|
|
417
|
+
meeting.mediaProperties.videoTrack?.setUnmuteAllowed(this.state.server.unmuteAllowed);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
249
420
|
}
|
|
250
421
|
|
|
251
422
|
/**
|
|
@@ -253,14 +424,23 @@ class MuteState {
|
|
|
253
424
|
*
|
|
254
425
|
* @public
|
|
255
426
|
* @memberof MuteState
|
|
427
|
+
* @param {Meeting} meeting
|
|
256
428
|
* @param {Boolean} [muted] true if user is remotely muted, false otherwise
|
|
257
429
|
* @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
|
|
258
430
|
* @returns {undefined}
|
|
259
431
|
*/
|
|
260
|
-
public handleServerRemoteMuteUpdate(muted?: boolean, unmuteAllowed?: boolean) {
|
|
261
|
-
LoggerProxy.logger.info(
|
|
262
|
-
|
|
263
|
-
|
|
432
|
+
public handleServerRemoteMuteUpdate(meeting: any, muted?: boolean, unmuteAllowed?: boolean) {
|
|
433
|
+
LoggerProxy.logger.info(
|
|
434
|
+
`Meeting:muteState#handleServerRemoteMuteUpdate --> ${this.type}: updating server remoteMute to (${muted})`
|
|
435
|
+
);
|
|
436
|
+
if (unmuteAllowed !== undefined) {
|
|
437
|
+
this.state.server.unmuteAllowed = unmuteAllowed;
|
|
438
|
+
this.applyUnmuteAllowedToTrack(meeting);
|
|
439
|
+
}
|
|
440
|
+
if (muted !== undefined) {
|
|
441
|
+
this.state.server.remoteMute = muted;
|
|
442
|
+
this.applyServerMuteToLocalTrack(meeting, 'remotelyMuted');
|
|
443
|
+
}
|
|
264
444
|
}
|
|
265
445
|
|
|
266
446
|
/**
|
|
@@ -272,18 +452,23 @@ class MuteState {
|
|
|
272
452
|
* @returns {undefined}
|
|
273
453
|
*/
|
|
274
454
|
public handleServerLocalUnmuteRequired(meeting?: object) {
|
|
275
|
-
LoggerProxy.logger.info(
|
|
455
|
+
LoggerProxy.logger.info(
|
|
456
|
+
`Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received -> doing local unmute`
|
|
457
|
+
);
|
|
276
458
|
|
|
459
|
+
// 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
|
|
277
460
|
this.state.server.remoteMute = false;
|
|
278
461
|
this.state.client.localMute = false;
|
|
279
462
|
|
|
280
463
|
if (this.pendingPromiseReject) {
|
|
281
|
-
this.pendingPromiseReject(
|
|
464
|
+
this.pendingPromiseReject(
|
|
465
|
+
new Error('Server requested local unmute - this overrides any client request in progress')
|
|
466
|
+
);
|
|
282
467
|
this.pendingPromiseResolve = null;
|
|
283
468
|
this.pendingPromiseReject = null;
|
|
284
469
|
}
|
|
285
470
|
|
|
286
|
-
this.applyClientStateLocally(meeting);
|
|
471
|
+
this.applyClientStateLocally(meeting, 'localUnmuteRequired');
|
|
287
472
|
this.applyClientStateToServer(meeting);
|
|
288
473
|
}
|
|
289
474
|
|
|
@@ -295,7 +480,42 @@ class MuteState {
|
|
|
295
480
|
* @returns {Boolean}
|
|
296
481
|
*/
|
|
297
482
|
public isMuted() {
|
|
298
|
-
return
|
|
483
|
+
return (
|
|
484
|
+
this.state.client.localMute || this.state.server.localMute || this.state.server.remoteMute
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Returns true if the user is remotely muted
|
|
490
|
+
*
|
|
491
|
+
* @public
|
|
492
|
+
* @memberof MuteState
|
|
493
|
+
* @returns {Boolean}
|
|
494
|
+
*/
|
|
495
|
+
public isRemotelyMuted() {
|
|
496
|
+
return this.state.server.remoteMute;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Returns true if unmute is allowed
|
|
501
|
+
*
|
|
502
|
+
* @public
|
|
503
|
+
* @memberof MuteState
|
|
504
|
+
* @returns {Boolean}
|
|
505
|
+
*/
|
|
506
|
+
public isUnmuteAllowed() {
|
|
507
|
+
return this.state.server.unmuteAllowed;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Returns true if the user is locally muted
|
|
512
|
+
*
|
|
513
|
+
* @public
|
|
514
|
+
* @memberof MuteState
|
|
515
|
+
* @returns {Boolean}
|
|
516
|
+
*/
|
|
517
|
+
public isLocallyMuted() {
|
|
518
|
+
return this.state.client.localMute || this.state.server.localMute;
|
|
299
519
|
}
|
|
300
520
|
|
|
301
521
|
/**
|
|
@@ -319,5 +539,3 @@ class MuteState {
|
|
|
319
539
|
return this.isSelf();
|
|
320
540
|
}
|
|
321
541
|
}
|
|
322
|
-
|
|
323
|
-
export default createMuteState;
|