@webex/plugin-meetings 2.60.1-next.9 → 2.60.2
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 +8 -58
- package/dist/common/browser-detection.js +3 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +4 -3
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +2 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +2 -1
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +2 -1
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +2 -1
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +2 -1
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +4 -3
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +2 -1
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +2 -1
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +2 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +2 -1
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +2 -1
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +8 -20
- package/dist/common/errors/webex-errors.js +28 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +2 -1
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +2 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +2 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +2 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +2 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +2 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +3 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +1 -3
- package/dist/common/logs/request.js +5 -8
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +7 -9
- package/dist/common/queue.js +9 -22
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +7 -6
- package/dist/config.js +10 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +100 -234
- package/dist/constants.js +444 -433
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +6 -3
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +1 -11
- package/dist/controls-options-manager/enums.js +6 -15
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +1 -17
- package/dist/controls-options-manager/index.js +38 -127
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -1
- package/dist/controls-options-manager/util.js +19 -309
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +5 -121
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +11 -100
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +4 -3
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +2 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +4 -57
- package/dist/locus-info/index.js +84 -425
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +5 -13
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +3 -58
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +6 -66
- package/dist/locus-info/parser.js +80 -253
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +13 -97
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +0 -2
- package/dist/media/index.js +319 -107
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +53 -38
- package/dist/media/properties.js +153 -96
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +22 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +230 -234
- package/dist/mediaQualityMetrics/config.js +498 -302
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +0 -88
- package/dist/meeting/in-meeting-actions.js +3 -94
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +520 -705
- package/dist/meeting/index.js +3083 -5041
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +25 -93
- package/dist/meeting/muteState.js +133 -224
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +47 -82
- package/dist/meeting/request.js +199 -304
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +2 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +1 -118
- package/dist/meeting/util.js +435 -676
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -3
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +1 -13
- package/dist/meeting-info/index.js +7 -74
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
- package/dist/meeting-info/meeting-info-v2.js +63 -200
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +2 -1
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +3 -2
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +41 -39
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +0 -17
- package/dist/meetings/collection.js +4 -42
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +20 -114
- package/dist/meetings/index.js +133 -540
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +3 -4
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +6 -107
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +1 -13
- package/dist/member/index.js +2 -45
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +4 -3
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/util.js +29 -120
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +0 -5
- package/dist/members/collection.js +2 -11
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +11 -56
- package/dist/members/index.js +47 -174
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +11 -67
- package/dist/members/request.js +54 -102
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +4 -3
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +1 -214
- package/dist/members/util.js +284 -327
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +6 -15
- package/dist/metrics/constants.js +9 -17
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +111 -4
- package/dist/metrics/index.js +452 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -5
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.js +3 -2
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +3 -2
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +2 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.d.ts +95 -61
- package/dist/reachability/index.js +392 -304
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +3 -7
- package/dist/reachability/request.js +10 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +6 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +3 -23
- package/dist/reactions/reactions.type.js +23 -21
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +8 -32
- package/dist/reconnection-manager/index.js +232 -285
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +5 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +1 -15
- package/dist/recording-controller/index.js +46 -57
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +4 -5
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +47 -9
- package/dist/roap/index.js +238 -100
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +12 -18
- package/dist/roap/request.js +180 -126
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +16 -27
- package/dist/roap/turnDiscovery.js +105 -115
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +83 -1
- package/dist/statsAnalyzer/global.js +85 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +30 -50
- package/dist/statsAnalyzer/index.js +511 -436
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
- package/dist/statsAnalyzer/mqaUtil.js +90 -130
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +2 -1
- package/dist/transcription/index.js.map +1 -1
- package/package.json +26 -39
- package/src/common/errors/webex-errors.ts +12 -36
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +1 -5
- package/src/common/queue.ts +8 -22
- package/src/config.ts +7 -6
- package/src/constants.ts +100 -265
- package/src/controls-options-manager/enums.ts +0 -12
- package/src/controls-options-manager/index.ts +21 -116
- package/src/controls-options-manager/util.ts +14 -294
- package/src/index.js +15 -0
- package/src/locus-info/controlsUtils.ts +0 -110
- package/src/locus-info/index.ts +61 -450
- package/src/locus-info/infoUtils.ts +2 -14
- package/src/locus-info/mediaSharesUtils.ts +0 -64
- package/src/locus-info/parser.ts +47 -258
- package/src/locus-info/selfUtils.ts +2 -85
- package/src/media/index.ts +370 -153
- package/src/media/properties.ts +136 -106
- package/src/media/util.ts +21 -0
- package/src/mediaQualityMetrics/config.ts +377 -244
- package/src/meeting/effectsState.ts +209 -0
- package/src/meeting/in-meeting-actions.ts +0 -176
- package/src/meeting/index.ts +2581 -4306
- package/src/meeting/muteState.ts +138 -224
- package/src/meeting/request.ts +127 -214
- package/src/meeting/util.ts +423 -687
- package/src/meeting-info/index.ts +8 -81
- package/src/meeting-info/meeting-info-v2.ts +13 -163
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +0 -33
- package/src/meetings/index.ts +136 -531
- package/src/meetings/request.ts +0 -2
- package/src/meetings/util.ts +5 -116
- package/src/member/index.ts +1 -43
- package/src/member/util.ts +28 -125
- package/src/members/collection.ts +0 -8
- package/src/members/index.ts +52 -187
- package/src/members/request.ts +27 -87
- package/src/members/util.ts +291 -332
- package/src/metrics/config.ts +485 -0
- package/src/metrics/constants.ts +6 -15
- package/src/metrics/index.ts +471 -1
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/peer-connection-manager/index.ts +847 -0
- package/src/peer-connection-manager/util.ts +119 -0
- package/src/reachability/index.ts +347 -246
- package/src/reachability/request.ts +8 -17
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -30
- package/src/reconnection-manager/index.ts +156 -168
- package/src/recording-controller/index.ts +3 -20
- package/src/recording-controller/util.ts +9 -26
- package/src/roap/collection.ts +62 -0
- package/src/roap/handler.ts +294 -0
- package/src/roap/index.ts +241 -96
- package/src/roap/request.ts +148 -74
- package/src/roap/state.ts +156 -0
- package/src/roap/turnDiscovery.ts +56 -62
- package/src/roap/util.ts +100 -0
- package/src/statsAnalyzer/global.ts +84 -1
- package/src/statsAnalyzer/index.ts +645 -479
- package/src/statsAnalyzer/mqaUtil.ts +126 -128
- package/test/integration/spec/journey.js +264 -320
- package/test/integration/spec/space-meeting.js +4 -77
- package/test/unit/spec/common/queue.js +2 -31
- package/test/unit/spec/controls-options-manager/index.js +0 -163
- package/test/unit/spec/controls-options-manager/util.js +60 -576
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/controlsUtils.js +30 -323
- package/test/unit/spec/locus-info/index.js +15 -1437
- package/test/unit/spec/locus-info/infoUtils.js +16 -54
- package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
- package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
- package/test/unit/spec/locus-info/parser.js +35 -116
- package/test/unit/spec/locus-info/selfUtils.js +0 -275
- package/test/unit/spec/media/properties.ts +84 -75
- package/test/unit/spec/meeting/effectsState.js +281 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
- package/test/unit/spec/meeting/index.js +2313 -8384
- package/test/unit/spec/meeting/muteState.js +213 -409
- package/test/unit/spec/meeting/request.js +43 -523
- package/test/unit/spec/meeting/utils.js +24 -834
- package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
- package/test/unit/spec/meeting-info/utilv2.js +0 -21
- package/test/unit/spec/meetings/collection.js +0 -26
- package/test/unit/spec/meetings/index.js +232 -1445
- package/test/unit/spec/meetings/utils.js +2 -202
- package/test/unit/spec/member/index.js +9 -32
- package/test/unit/spec/member/util.js +61 -499
- package/test/unit/spec/members/index.js +5 -394
- package/test/unit/spec/members/request.js +27 -206
- package/test/unit/spec/members/utils.js +38 -173
- package/test/unit/spec/metrics/index.js +50 -1
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/peerconnection-manager/index.js +218 -0
- package/test/unit/spec/peerconnection-manager/utils.js +49 -0
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
- package/test/unit/spec/reachability/index.ts +24 -532
- package/test/unit/spec/reconnection-manager/index.js +24 -163
- package/test/unit/spec/recording-controller/index.js +218 -293
- package/test/unit/spec/recording-controller/util.js +96 -223
- package/test/unit/spec/roap/index.ts +77 -187
- package/test/unit/spec/roap/turnDiscovery.ts +48 -86
- package/test/unit/spec/roap/util.js +30 -0
- package/test/unit/spec/stats-analyzer/index.js +165 -644
- package/test/utils/testUtils.js +45 -0
- package/test/utils/webex-config.js +0 -4
- package/test/utils/webex-test-users.js +3 -7
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/annotation.types.js +0 -7
- package/dist/annotation/annotation.types.js.map +0 -1
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/constants.js +0 -41
- package/dist/annotation/constants.js.map +0 -1
- package/dist/annotation/index.d.ts +0 -117
- package/dist/annotation/index.js +0 -357
- package/dist/annotation/index.js.map +0 -1
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/breakout.js +0 -215
- package/dist/breakouts/breakout.js.map +0 -1
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/collection.js +0 -22
- package/dist/breakouts/collection.js.map +0 -1
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/edit-lock-error.js +0 -51
- package/dist/breakouts/edit-lock-error.js.map +0 -1
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/events.js +0 -44
- package/dist/breakouts/events.js.map +0 -1
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/index.js +0 -1047
- package/dist/breakouts/index.js.map +0 -1
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/request.js +0 -77
- package/dist/breakouts/request.js.map +0 -1
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/breakouts/utils.js +0 -64
- package/dist/breakouts/utils.js.map +0 -1
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/no-meeting-info.js +0 -50
- package/dist/common/errors/no-meeting-info.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/types.js +0 -7
- package/dist/controls-options-manager/types.js.map +0 -1
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/index.js +0 -15
- package/dist/interceptors/index.js.map +0 -1
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interceptors/locusRetry.js +0 -94
- package/dist/interceptors/locusRetry.js.map +0 -1
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/collection.js +0 -22
- package/dist/interpretation/collection.js.map +0 -1
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/index.js +0 -365
- package/dist/interpretation/index.js.map +0 -1
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/interpretation/siLanguage.js +0 -24
- package/dist/interpretation/siLanguage.js.map +0 -1
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/locusMediaRequest.js +0 -291
- package/dist/meeting/locusMediaRequest.js.map +0 -1
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/request.type.js +0 -7
- package/dist/meeting/request.type.js.map +0 -1
- package/dist/meeting/voicea-meeting.d.ts +0 -20
- package/dist/meeting/voicea-meeting.js +0 -201
- package/dist/meeting/voicea-meeting.js.map +0 -1
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/meetings.types.js +0 -7
- package/dist/meetings/meetings.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/types.js +0 -23
- package/dist/member/types.js.map +0 -1
- package/dist/multistream/mediaRequestManager.d.ts +0 -118
- package/dist/multistream/mediaRequestManager.js +0 -344
- package/dist/multistream/mediaRequestManager.js.map +0 -1
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlot.js +0 -200
- package/dist/multistream/receiveSlot.js.map +0 -1
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/receiveSlotManager.js +0 -174
- package/dist/multistream/receiveSlotManager.js.map +0 -1
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMedia.js +0 -268
- package/dist/multistream/remoteMedia.js.map +0 -1
- package/dist/multistream/remoteMediaGroup.d.ts +0 -47
- package/dist/multistream/remoteMediaGroup.js +0 -267
- package/dist/multistream/remoteMediaGroup.js.map +0 -1
- package/dist/multistream/remoteMediaManager.d.ts +0 -285
- package/dist/multistream/remoteMediaManager.js +0 -1211
- package/dist/multistream/remoteMediaManager.js.map +0 -1
- package/dist/multistream/sendSlotManager.d.ts +0 -61
- package/dist/multistream/sendSlotManager.js +0 -236
- package/dist/multistream/sendSlotManager.js.map +0 -1
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/clusterReachability.js +0 -357
- package/dist/reachability/clusterReachability.js.map +0 -1
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reachability/util.js +0 -29
- package/dist/reachability/util.js.map +0 -1
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/constants.js +0 -12
- package/dist/reactions/constants.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -54
- package/dist/rtcMetrics/index.js +0 -140
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/collection.js +0 -43
- package/dist/webinar/collection.js.map +0 -1
- package/dist/webinar/index.d.ts +0 -5
- package/dist/webinar/index.js +0 -68
- package/dist/webinar/index.js.map +0 -1
- package/src/annotation/annotation.types.ts +0 -50
- package/src/annotation/constants.ts +0 -36
- package/src/annotation/index.ts +0 -328
- package/src/breakouts/README.md +0 -220
- package/src/breakouts/breakout.ts +0 -188
- package/src/breakouts/collection.ts +0 -19
- package/src/breakouts/edit-lock-error.ts +0 -25
- package/src/breakouts/events.ts +0 -56
- package/src/breakouts/index.ts +0 -925
- package/src/breakouts/request.ts +0 -55
- package/src/breakouts/utils.ts +0 -57
- package/src/common/errors/no-meeting-info.ts +0 -24
- package/src/controls-options-manager/types.ts +0 -59
- package/src/index.ts +0 -44
- package/src/interceptors/index.ts +0 -3
- package/src/interceptors/locusRetry.ts +0 -67
- package/src/interpretation/README.md +0 -60
- package/src/interpretation/collection.ts +0 -19
- package/src/interpretation/index.ts +0 -332
- package/src/interpretation/siLanguage.ts +0 -18
- package/src/meeting/locusMediaRequest.ts +0 -313
- package/src/meeting/request.type.ts +0 -13
- package/src/meeting/voicea-meeting.ts +0 -161
- package/src/meetings/meetings.types.ts +0 -12
- package/src/member/types.ts +0 -38
- package/src/multistream/mediaRequestManager.ts +0 -440
- package/src/multistream/receiveSlot.ts +0 -184
- package/src/multistream/receiveSlotManager.ts +0 -166
- package/src/multistream/remoteMedia.ts +0 -254
- package/src/multistream/remoteMediaGroup.ts +0 -284
- package/src/multistream/remoteMediaManager.ts +0 -1145
- package/src/multistream/sendSlotManager.ts +0 -170
- package/src/reachability/clusterReachability.ts +0 -320
- package/src/reachability/util.ts +0 -24
- package/src/reactions/constants.ts +0 -4
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -124
- package/src/webinar/collection.ts +0 -31
- package/src/webinar/index.ts +0 -62
- package/test/integration/spec/converged-space-meetings.js +0 -233
- package/test/unit/spec/annotation/index.ts +0 -418
- package/test/unit/spec/breakouts/breakout.ts +0 -237
- package/test/unit/spec/breakouts/collection.ts +0 -15
- package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
- package/test/unit/spec/breakouts/events.ts +0 -89
- package/test/unit/spec/breakouts/index.ts +0 -1790
- package/test/unit/spec/breakouts/request.ts +0 -104
- package/test/unit/spec/breakouts/utils.js +0 -72
- package/test/unit/spec/interceptors/locusRetry.ts +0 -131
- package/test/unit/spec/interpretation/collection.ts +0 -15
- package/test/unit/spec/interpretation/index.ts +0 -589
- package/test/unit/spec/interpretation/siLanguage.ts +0 -28
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
- package/test/unit/spec/media/index.ts +0 -290
- package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
- package/test/unit/spec/meeting-info/index.js +0 -300
- package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
- package/test/unit/spec/multistream/receiveSlot.ts +0 -163
- package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
- package/test/unit/spec/multistream/remoteMedia.ts +0 -255
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
- package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
- package/test/unit/spec/reachability/clusterReachability.ts +0 -279
- package/test/unit/spec/reachability/request.js +0 -68
- package/test/unit/spec/reachability/util.ts +0 -40
- package/test/unit/spec/roap/request.ts +0 -255
- package/test/unit/spec/rtcMetrics/index.ts +0 -93
- package/test/unit/spec/webinar/collection.ts +0 -13
- package/test/unit/spec/webinar/index.ts +0 -60
- package/test/utils/constants.js +0 -9
- package/test/utils/integrationTestUtils.js +0 -46
- /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
package/src/meeting/muteState.ts
CHANGED
|
@@ -1,188 +1,122 @@
|
|
|
1
|
-
import {ServerMuteReason} from '@webex/media-helpers';
|
|
2
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
3
2
|
import ParameterError from '../common/errors/parameter';
|
|
3
|
+
import PermissionError from '../common/errors/permission';
|
|
4
|
+
import Media from '../media';
|
|
4
5
|
import MeetingUtil from './util';
|
|
5
6
|
import {AUDIO, VIDEO} from '../constants';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/* Certain aspects of server interaction for video muting are not implemented as we currently don't support remote muting of video.
|
|
9
|
+
If we ever need to support it, search for REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION string to find the places that need updating
|
|
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
|
+
}
|
|
10
19
|
|
|
11
20
|
LoggerProxy.logger.info(
|
|
12
21
|
`Meeting:muteState#createMuteState --> ${type}: creating MuteState for meeting id ${meeting?.id}`
|
|
13
22
|
);
|
|
14
23
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return muteState;
|
|
24
|
+
return new MuteState(type, meeting);
|
|
18
25
|
};
|
|
19
26
|
|
|
20
27
|
/** The purpose of this class is to manage the local and remote mute state and make sure that the server state always matches
|
|
21
28
|
the last requested state by the client.
|
|
22
29
|
|
|
23
30
|
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
|
|
26
31
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
localMute: boolean;
|
|
32
|
-
};
|
|
33
|
-
server: {localMute: boolean; remoteMute: boolean; unmuteAllowed: boolean};
|
|
34
|
-
syncToServerInProgress: boolean;
|
|
35
|
-
};
|
|
36
|
-
|
|
32
|
+
class MuteState {
|
|
33
|
+
pendingPromiseReject: any;
|
|
34
|
+
pendingPromiseResolve: any;
|
|
35
|
+
state: any;
|
|
37
36
|
type: any;
|
|
38
|
-
ignoreMuteStateChange: boolean;
|
|
39
37
|
|
|
40
38
|
/**
|
|
41
39
|
* Constructor
|
|
42
40
|
*
|
|
43
41
|
* @param {String} type - audio or video
|
|
44
42
|
* @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
|
|
46
43
|
*/
|
|
47
|
-
constructor(type: string, meeting: any
|
|
44
|
+
constructor(type: string, meeting: any) {
|
|
48
45
|
if (type !== AUDIO && type !== VIDEO) {
|
|
49
46
|
throw new ParameterError('Mute state is designed for handling audio or video only');
|
|
50
47
|
}
|
|
51
48
|
this.type = type;
|
|
52
|
-
this.ignoreMuteStateChange = false;
|
|
53
49
|
this.state = {
|
|
54
50
|
client: {
|
|
55
|
-
|
|
56
|
-
localMute: true,
|
|
51
|
+
localMute: false,
|
|
57
52
|
},
|
|
58
53
|
server: {
|
|
59
|
-
localMute:
|
|
60
|
-
//
|
|
61
|
-
remoteMute: type === AUDIO ? meeting.remoteMuted :
|
|
62
|
-
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed :
|
|
54
|
+
localMute: false,
|
|
55
|
+
// initial values available only for audio (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
|
|
56
|
+
remoteMute: type === AUDIO ? meeting.remoteMuted : false,
|
|
57
|
+
unmuteAllowed: type === AUDIO ? meeting.unmuteAllowed : true,
|
|
63
58
|
},
|
|
64
59
|
syncToServerInProgress: false,
|
|
65
60
|
};
|
|
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;
|
|
66
64
|
}
|
|
67
65
|
|
|
68
66
|
/**
|
|
69
|
-
*
|
|
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
|
|
67
|
+
* Handles mute/unmute request from the client/user. Returns a promise that's resolved once the server update is completed or
|
|
68
|
+
* at the point that this request becomese superseded by another client request.
|
|
116
69
|
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
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
|
|
70
|
+
* The client doesn't have to wait for the returned promise to resolve before calling handleClientRequest() again. If
|
|
71
|
+
* handleClientRequest() is called again before the previous one resolved, the MuteState class will make sure that eventually
|
|
72
|
+
* the server state will match the last requested state from the client.
|
|
129
73
|
*
|
|
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
|
|
147
74
|
* @public
|
|
148
75
|
* @memberof MuteState
|
|
149
76
|
* @param {Object} [meeting] the meeting object
|
|
150
77
|
* @param {Boolean} [mute] true for muting, false for unmuting request
|
|
151
|
-
* @returns {
|
|
78
|
+
* @returns {Promise}
|
|
152
79
|
*/
|
|
153
|
-
public
|
|
154
|
-
if (this.ignoreMuteStateChange) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
80
|
+
public handleClientRequest(meeting?: object, mute?: boolean) {
|
|
157
81
|
LoggerProxy.logger.info(
|
|
158
|
-
`Meeting:muteState#
|
|
82
|
+
`Meeting:muteState#handleClientRequest --> ${this.type}: user requesting new mute state: ${mute}`
|
|
159
83
|
);
|
|
160
84
|
|
|
161
|
-
this.state.
|
|
85
|
+
if (!mute && this.state.server.unmuteAllowed !== null && !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
|
+
}
|
|
162
90
|
|
|
163
|
-
|
|
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
|
+
this.state.client.localMute = mute;
|
|
94
|
+
this.applyClientStateLocally(meeting);
|
|
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
|
+
});
|
|
164
105
|
}
|
|
165
106
|
|
|
166
107
|
/**
|
|
167
|
-
* Applies the current mute state to the local
|
|
108
|
+
* Applies the current mute state to the local track (by enabling or disabling it accordingly)
|
|
168
109
|
*
|
|
169
110
|
* @public
|
|
170
111
|
* @param {Object} [meeting] the meeting object
|
|
171
|
-
* @param {ServerMuteReason} reason - reason why we're applying our client state to the local stream
|
|
172
112
|
* @memberof MuteState
|
|
173
113
|
* @returns {void}
|
|
174
114
|
*/
|
|
175
|
-
public applyClientStateLocally(meeting?: any
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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;
|
|
115
|
+
public applyClientStateLocally(meeting?: any) {
|
|
116
|
+
Media.setLocalTrack(
|
|
117
|
+
!this.state.client.localMute,
|
|
118
|
+
this.type === AUDIO ? meeting.mediaProperties.audioTrack : meeting.mediaProperties.videoTrack
|
|
119
|
+
);
|
|
186
120
|
}
|
|
187
121
|
|
|
188
122
|
/**
|
|
@@ -193,7 +127,7 @@ export class MuteState {
|
|
|
193
127
|
* @memberof MuteState
|
|
194
128
|
* @returns {void}
|
|
195
129
|
*/
|
|
196
|
-
private applyClientStateToServer(meeting?:
|
|
130
|
+
private applyClientStateToServer(meeting?: object) {
|
|
197
131
|
if (this.state.syncToServerInProgress) {
|
|
198
132
|
LoggerProxy.logger.info(
|
|
199
133
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: request to server in progress, we need to wait for it to complete`
|
|
@@ -202,12 +136,11 @@ export class MuteState {
|
|
|
202
136
|
return;
|
|
203
137
|
}
|
|
204
138
|
|
|
205
|
-
const
|
|
206
|
-
const
|
|
207
|
-
const remoteMuteRequiresSync = !localMuteState && this.state.server.remoteMute;
|
|
139
|
+
const localMuteRequiresSync = this.state.client.localMute !== this.state.server.localMute;
|
|
140
|
+
const remoteMuteRequiresSync = !this.state.client.localMute && this.state.server.remoteMute;
|
|
208
141
|
|
|
209
142
|
LoggerProxy.logger.info(
|
|
210
|
-
`Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${
|
|
143
|
+
`Meeting:muteState#applyClientStateToServer --> ${this.type}: localMuteRequiresSync: ${localMuteRequiresSync} (${this.state.client.localMute} ?= ${this.state.server.localMute})`
|
|
211
144
|
);
|
|
212
145
|
LoggerProxy.logger.info(
|
|
213
146
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: remoteMuteRequiresSync: ${remoteMuteRequiresSync}`
|
|
@@ -218,6 +151,12 @@ export class MuteState {
|
|
|
218
151
|
`Meeting:muteState#applyClientStateToServer --> ${this.type}: client state already matching server state, nothing to do`
|
|
219
152
|
);
|
|
220
153
|
|
|
154
|
+
if (this.pendingPromiseResolve) {
|
|
155
|
+
this.pendingPromiseResolve();
|
|
156
|
+
}
|
|
157
|
+
this.pendingPromiseResolve = null;
|
|
158
|
+
this.pendingPromiseReject = null;
|
|
159
|
+
|
|
221
160
|
return;
|
|
222
161
|
}
|
|
223
162
|
|
|
@@ -245,11 +184,11 @@ export class MuteState {
|
|
|
245
184
|
.catch((e) => {
|
|
246
185
|
this.state.syncToServerInProgress = false;
|
|
247
186
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
this.
|
|
187
|
+
if (this.pendingPromiseReject) {
|
|
188
|
+
this.pendingPromiseReject(e);
|
|
189
|
+
}
|
|
190
|
+
this.pendingPromiseResolve = null;
|
|
191
|
+
this.pendingPromiseReject = null;
|
|
253
192
|
});
|
|
254
193
|
}
|
|
255
194
|
|
|
@@ -262,14 +201,16 @@ export class MuteState {
|
|
|
262
201
|
* @returns {Promise}
|
|
263
202
|
*/
|
|
264
203
|
private sendLocalMuteRequestToServer(meeting?: any) {
|
|
265
|
-
const audioMuted =
|
|
266
|
-
|
|
204
|
+
const audioMuted =
|
|
205
|
+
this.type === AUDIO ? this.state.client.localMute : meeting.audio?.state.client.localMute;
|
|
206
|
+
const videoMuted =
|
|
207
|
+
this.type === VIDEO ? this.state.client.localMute : meeting.video?.state.client.localMute;
|
|
267
208
|
|
|
268
209
|
LoggerProxy.logger.info(
|
|
269
210
|
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: sending local mute (audio=${audioMuted}, video=${videoMuted}) to server`
|
|
270
211
|
);
|
|
271
212
|
|
|
272
|
-
return MeetingUtil.remoteUpdateAudioVideo(
|
|
213
|
+
return MeetingUtil.remoteUpdateAudioVideo(audioMuted, videoMuted, meeting)
|
|
273
214
|
.then((locus) => {
|
|
274
215
|
LoggerProxy.logger.info(
|
|
275
216
|
`Meeting:muteState#sendLocalMuteRequestToServer --> ${this.type}: local mute (audio=${audioMuted}, video=${videoMuted}) applied to server`
|
|
@@ -277,9 +218,7 @@ export class MuteState {
|
|
|
277
218
|
|
|
278
219
|
this.state.server.localMute = this.type === AUDIO ? audioMuted : videoMuted;
|
|
279
220
|
|
|
280
|
-
|
|
281
|
-
meeting.locusInfo.handleLocusDelta(locus, meeting);
|
|
282
|
-
}
|
|
221
|
+
meeting.locusInfo.onFullLocus(locus);
|
|
283
222
|
|
|
284
223
|
return locus;
|
|
285
224
|
})
|
|
@@ -301,54 +240,35 @@ export class MuteState {
|
|
|
301
240
|
* @returns {Promise}
|
|
302
241
|
*/
|
|
303
242
|
private sendRemoteMuteRequestToServer(meeting?: any) {
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
LoggerProxy.logger.info(
|
|
307
|
-
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: sending remote mute:${remoteMute} to server`
|
|
308
|
-
);
|
|
309
|
-
|
|
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
|
-
);
|
|
243
|
+
if (this.type === AUDIO) {
|
|
244
|
+
const remoteMute = this.state.client.localMute;
|
|
323
245
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
246
|
+
LoggerProxy.logger.info(
|
|
247
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: sending remote mute:${remoteMute} to server`
|
|
248
|
+
);
|
|
327
249
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
250
|
+
return meeting.members
|
|
251
|
+
.muteMember(meeting.members.selfId, remoteMute)
|
|
252
|
+
.then(() => {
|
|
253
|
+
LoggerProxy.logger.info(
|
|
254
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: remote mute:${remoteMute} applied to server`
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
this.state.server.remoteMute = remoteMute;
|
|
258
|
+
})
|
|
259
|
+
.catch((remoteUpdateError) => {
|
|
260
|
+
LoggerProxy.logger.warn(
|
|
261
|
+
`Meeting:muteState#sendRemoteMuteRequestToServer --> ${this.type}: failed to apply remote mute ${remoteMute} to server: ${remoteUpdateError}`
|
|
262
|
+
);
|
|
263
|
+
|
|
264
|
+
return Promise.reject(remoteUpdateError);
|
|
265
|
+
});
|
|
266
|
+
}
|
|
335
267
|
|
|
336
|
-
//
|
|
337
|
-
this.
|
|
338
|
-
}
|
|
268
|
+
// for now we don't need to support remote muting of video (REMOTE_MUTE_VIDEO_MISSING_IMPLEMENTATION)
|
|
269
|
+
this.state.server.remoteMute = this.state.client.localMute;
|
|
339
270
|
|
|
340
|
-
|
|
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
|
-
}
|
|
271
|
+
return Promise.resolve();
|
|
352
272
|
}
|
|
353
273
|
|
|
354
274
|
/**
|
|
@@ -356,23 +276,16 @@ export class MuteState {
|
|
|
356
276
|
*
|
|
357
277
|
* @public
|
|
358
278
|
* @memberof MuteState
|
|
359
|
-
* @param {Meeting} meeting
|
|
360
279
|
* @param {Boolean} [muted] true if user is remotely muted, false otherwise
|
|
361
280
|
* @param {Boolean} [unmuteAllowed] indicates if user is allowed to unmute self (false when "hard mute" feature is used)
|
|
362
281
|
* @returns {undefined}
|
|
363
282
|
*/
|
|
364
|
-
public handleServerRemoteMuteUpdate(
|
|
283
|
+
public handleServerRemoteMuteUpdate(muted?: boolean, unmuteAllowed?: boolean) {
|
|
365
284
|
LoggerProxy.logger.info(
|
|
366
285
|
`Meeting:muteState#handleServerRemoteMuteUpdate --> ${this.type}: updating server remoteMute to (${muted})`
|
|
367
286
|
);
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
this.applyUnmuteAllowedToStream(meeting);
|
|
371
|
-
}
|
|
372
|
-
if (muted !== undefined) {
|
|
373
|
-
this.state.server.remoteMute = muted;
|
|
374
|
-
this.applyServerMuteToLocalStream(meeting, 'remotelyMuted');
|
|
375
|
-
}
|
|
287
|
+
this.state.server.remoteMute = muted;
|
|
288
|
+
this.state.server.unmuteAllowed = unmuteAllowed;
|
|
376
289
|
}
|
|
377
290
|
|
|
378
291
|
/**
|
|
@@ -384,27 +297,27 @@ export class MuteState {
|
|
|
384
297
|
* @returns {undefined}
|
|
385
298
|
*/
|
|
386
299
|
public handleServerLocalUnmuteRequired(meeting?: object) {
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
);
|
|
391
|
-
} else {
|
|
392
|
-
LoggerProxy.logger.info(
|
|
393
|
-
`Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received -> doing local unmute`
|
|
394
|
-
);
|
|
395
|
-
}
|
|
300
|
+
LoggerProxy.logger.info(
|
|
301
|
+
`Meeting:muteState#handleServerLocalUnmuteRequired --> ${this.type}: localAudioUnmuteRequired received -> doing local unmute`
|
|
302
|
+
);
|
|
396
303
|
|
|
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
|
|
398
304
|
this.state.server.remoteMute = false;
|
|
399
305
|
this.state.client.localMute = false;
|
|
400
306
|
|
|
401
|
-
this.
|
|
307
|
+
if (this.pendingPromiseReject) {
|
|
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);
|
|
402
316
|
this.applyClientStateToServer(meeting);
|
|
403
317
|
}
|
|
404
318
|
|
|
405
319
|
/**
|
|
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.
|
|
320
|
+
* Returns true if the user is locally or remotely muted
|
|
408
321
|
*
|
|
409
322
|
* @public
|
|
410
323
|
* @memberof MuteState
|
|
@@ -417,35 +330,36 @@ export class MuteState {
|
|
|
417
330
|
}
|
|
418
331
|
|
|
419
332
|
/**
|
|
420
|
-
* Returns true if the user is
|
|
333
|
+
* Returns true if the user is locally muted
|
|
421
334
|
*
|
|
422
335
|
* @public
|
|
423
336
|
* @memberof MuteState
|
|
424
337
|
* @returns {Boolean}
|
|
425
338
|
*/
|
|
426
|
-
public
|
|
427
|
-
return this.state.server.
|
|
339
|
+
public isLocallyMuted() {
|
|
340
|
+
return this.state.client.localMute || this.state.server.localMute;
|
|
428
341
|
}
|
|
429
342
|
|
|
430
343
|
/**
|
|
431
|
-
* Returns true if
|
|
344
|
+
* Returns true if the user is muted as a result of the client request (and not remotely muted)
|
|
432
345
|
*
|
|
433
346
|
* @public
|
|
434
347
|
* @memberof MuteState
|
|
435
348
|
* @returns {Boolean}
|
|
436
349
|
*/
|
|
437
|
-
public
|
|
438
|
-
return this.state.server.
|
|
350
|
+
public isSelf() {
|
|
351
|
+
return this.state.client.localMute && !this.state.server.remoteMute;
|
|
439
352
|
}
|
|
440
353
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
return this.getClientLocalMuteState();
|
|
354
|
+
// defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
|
|
355
|
+
get muted() {
|
|
356
|
+
return this.isMuted();
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
// defined for backwards compatibility with the old AudioStateMachine/VideoStateMachine classes
|
|
360
|
+
get self() {
|
|
361
|
+
return this.isSelf();
|
|
450
362
|
}
|
|
451
363
|
}
|
|
364
|
+
|
|
365
|
+
export default createMuteState;
|