@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211
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 -7
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +841 -19
- package/dist/breakouts/index.js.map +1 -1
- 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/errors/webex-errors.js +3 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +179 -30
- 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 +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +106 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +359 -64
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +219 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +48 -135
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2770 -2547
- 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 +229 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +199 -193
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +532 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +20 -5
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +357 -66
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +72 -27
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -5
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +21 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +110 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +93 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +326 -311
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +90 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/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 +8 -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 +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1020 -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/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/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 +322 -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 +271 -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 +93 -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 +163 -0
- package/dist/types/meeting/index.d.ts +1482 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -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 +79 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -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 +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -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 +159 -0
- package/dist/types/member/types.d.ts +32 -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/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -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 +277 -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 +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -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/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -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/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +2 -7
- package/src/constants.ts +165 -21
- 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 +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +383 -61
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +87 -140
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2099 -2083
- package/src/meeting/locusMediaRequest.ts +311 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +105 -115
- package/src/meeting/util.ts +511 -397
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -14
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +392 -84
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +113 -32
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +62 -15
- package/src/reachability/request.ts +10 -5
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +21 -30
- package/src/roap/request.ts +101 -95
- package/src/roap/turnDiscovery.ts +47 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +376 -386
- package/src/statsAnalyzer/mqaUtil.ts +100 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +336 -259
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1545 -48
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3573 -1663
- package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +339 -44
- package/test/unit/spec/meeting/utils.js +456 -53
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +867 -125
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +125 -8
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +26 -51
- package/test/unit/spec/roap/request.ts +196 -85
- package/test/unit/spec/roap/turnDiscovery.ts +30 -7
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +92 -41
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -110
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/src/multistream/multistreamMedia.ts +0 -97
- package/test/unit/spec/meeting/effectsState.js +0 -285
package/src/locus-info/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -17,8 +17,6 @@ import {
|
|
|
17
17
|
CALL_REMOVED_REASON,
|
|
18
18
|
RECORDING_STATE,
|
|
19
19
|
} from '../constants';
|
|
20
|
-
import Metrics from '../metrics';
|
|
21
|
-
import {eventType} from '../metrics/config';
|
|
22
20
|
import InfoUtils from './infoUtils';
|
|
23
21
|
import FullState from './fullState';
|
|
24
22
|
import SelfUtils from './selfUtils';
|
|
@@ -59,11 +57,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
59
57
|
fullState: any;
|
|
60
58
|
host: any;
|
|
61
59
|
info: any;
|
|
60
|
+
roles: any;
|
|
62
61
|
mediaShares: any;
|
|
63
62
|
replace: any;
|
|
64
63
|
url: any;
|
|
65
64
|
services: any;
|
|
66
|
-
|
|
65
|
+
mainSessionLocusCache: any;
|
|
66
|
+
/**
|
|
67
|
+
* Constructor
|
|
68
|
+
* @param {function} updateMeeting callback to update the meeting object from an object
|
|
69
|
+
* @param {object} webex
|
|
70
|
+
* @param {string} meetingId
|
|
71
|
+
* @returns {undefined}
|
|
72
|
+
*/
|
|
67
73
|
constructor(updateMeeting, webex, meetingId) {
|
|
68
74
|
super();
|
|
69
75
|
this.parsedLocus = {
|
|
@@ -77,6 +83,53 @@ export default class LocusInfo extends EventsScope {
|
|
|
77
83
|
this.locusParser = new LocusDeltaParser();
|
|
78
84
|
}
|
|
79
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
|
|
88
|
+
*
|
|
89
|
+
* @param {Meeting} meeting
|
|
90
|
+
* @returns {undefined}
|
|
91
|
+
*/
|
|
92
|
+
private doLocusSync(meeting: any) {
|
|
93
|
+
let isDelta;
|
|
94
|
+
let url;
|
|
95
|
+
|
|
96
|
+
if (this.locusParser.workingCopy.syncUrl) {
|
|
97
|
+
url = this.locusParser.workingCopy.syncUrl;
|
|
98
|
+
isDelta = true;
|
|
99
|
+
} else {
|
|
100
|
+
url = meeting.locusUrl;
|
|
101
|
+
isDelta = false;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
LoggerProxy.logger.info(
|
|
105
|
+
`Locus-info:index#doLocusSync --> doing Locus sync (getting ${
|
|
106
|
+
isDelta ? 'delta' : 'full'
|
|
107
|
+
} DTO)`
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// return value ignored on purpose
|
|
111
|
+
meeting.meetingRequest
|
|
112
|
+
.getLocusDTO({url})
|
|
113
|
+
.then((res) => {
|
|
114
|
+
if (isDelta) {
|
|
115
|
+
if (!isEmpty(res.body)) {
|
|
116
|
+
meeting.locusInfo.handleLocusDelta(res.body, meeting);
|
|
117
|
+
} else {
|
|
118
|
+
LoggerProxy.logger.info(
|
|
119
|
+
'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
} else {
|
|
123
|
+
meeting.locusInfo.onFullLocus(res.body);
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
.finally(() => {
|
|
127
|
+
// Notify parser to resume processing delta events.
|
|
128
|
+
// Any deltas in the queue that have now been superseded by this sync will simply be ignored
|
|
129
|
+
this.locusParser.resume();
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
80
133
|
/**
|
|
81
134
|
* Apply locus delta data to meeting
|
|
82
135
|
* @param {string} action Locus delta action
|
|
@@ -85,28 +138,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
85
138
|
* @returns {undefined}
|
|
86
139
|
*/
|
|
87
140
|
applyLocusDeltaData(action: string, locus: any, meeting: any) {
|
|
88
|
-
const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;
|
|
141
|
+
const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT} = LocusDeltaParser.loci;
|
|
89
142
|
|
|
90
143
|
switch (action) {
|
|
91
144
|
case USE_INCOMING:
|
|
92
145
|
meeting.locusInfo.onDeltaLocus(locus);
|
|
93
146
|
break;
|
|
94
147
|
case USE_CURRENT:
|
|
95
|
-
|
|
96
|
-
|
|
148
|
+
case WAIT:
|
|
149
|
+
// do nothing
|
|
97
150
|
break;
|
|
98
151
|
case DESYNC:
|
|
99
|
-
meeting
|
|
100
|
-
.getFullLocus({
|
|
101
|
-
desync: true,
|
|
102
|
-
locusUrl: meeting.locusUrl,
|
|
103
|
-
})
|
|
104
|
-
.then((res) => {
|
|
105
|
-
meeting.locusInfo.onFullLocus(res.body);
|
|
106
|
-
// Notify parser to resume processing delta events
|
|
107
|
-
// now that we have full locus from DESYNC.
|
|
108
|
-
this.locusParser.resume();
|
|
109
|
-
});
|
|
152
|
+
this.doLocusSync(meeting);
|
|
110
153
|
break;
|
|
111
154
|
default:
|
|
112
155
|
LoggerProxy.logger.info(
|
|
@@ -172,12 +215,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
172
215
|
*/
|
|
173
216
|
this.deltaParticipants = [];
|
|
174
217
|
|
|
218
|
+
this.updateLocusCache(locus);
|
|
175
219
|
// above section only updates the locusInfo object
|
|
176
220
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
177
221
|
this.updateParticipants(locus.participants);
|
|
178
222
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
179
223
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
180
|
-
this.updateControls(locus.controls);
|
|
224
|
+
this.updateControls(locus.controls, locus.self);
|
|
181
225
|
this.updateLocusUrl(locus.url);
|
|
182
226
|
this.updateFullState(locus.fullState);
|
|
183
227
|
this.updateMeetingInfo(locus.info);
|
|
@@ -195,6 +239,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
195
239
|
* @memberof LocusInfo
|
|
196
240
|
*/
|
|
197
241
|
initialSetup(locus: object) {
|
|
242
|
+
this.updateLocusCache(locus);
|
|
198
243
|
this.onFullLocus(locus);
|
|
199
244
|
|
|
200
245
|
// Change it to true after it receives it first locus object
|
|
@@ -210,7 +255,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
210
255
|
parse(meeting: any, data: any) {
|
|
211
256
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
212
257
|
const {eventType} = data;
|
|
213
|
-
|
|
258
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
214
259
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
215
260
|
|
|
216
261
|
switch (eventType) {
|
|
@@ -228,16 +273,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
228
273
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
229
274
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
230
275
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
231
|
-
this.onFullLocus(
|
|
276
|
+
this.onFullLocus(locus, eventType);
|
|
232
277
|
break;
|
|
233
278
|
case LOCUSEVENT.DIFFERENCE:
|
|
234
|
-
this.handleLocusDelta(
|
|
279
|
+
this.handleLocusDelta(locus, meeting);
|
|
235
280
|
break;
|
|
236
281
|
|
|
237
282
|
default:
|
|
238
283
|
// Why will there be a event with no eventType ????
|
|
239
284
|
// we may not need this, we can get full locus
|
|
240
|
-
this.handleLocusDelta(
|
|
285
|
+
this.handleLocusDelta(locus, meeting);
|
|
241
286
|
}
|
|
242
287
|
}
|
|
243
288
|
|
|
@@ -259,18 +304,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
259
304
|
* @returns {object} null
|
|
260
305
|
* @memberof LocusInfo
|
|
261
306
|
*/
|
|
262
|
-
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
263
307
|
onFullLocus(locus: any, eventType?: string) {
|
|
264
308
|
if (!locus) {
|
|
265
309
|
LoggerProxy.logger.error(
|
|
266
310
|
'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'
|
|
267
311
|
);
|
|
268
312
|
}
|
|
313
|
+
|
|
314
|
+
if (!this.locusParser.isNewFullLocus(locus)) {
|
|
315
|
+
LoggerProxy.logger.info(
|
|
316
|
+
`Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
269
322
|
this.updateParticipantDeltas(locus.participants);
|
|
270
323
|
this.scheduledMeeting = locus.meeting || null;
|
|
271
324
|
this.participants = locus.participants;
|
|
325
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
272
326
|
this.updateLocusInfo(locus);
|
|
273
|
-
this.updateParticipants(locus.participants);
|
|
327
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
274
328
|
this.isMeetingActive();
|
|
275
329
|
this.handleOneOnOneEvent(eventType);
|
|
276
330
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -329,8 +383,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
329
383
|
* @memberof LocusInfo
|
|
330
384
|
*/
|
|
331
385
|
onDeltaLocus(locus: any) {
|
|
386
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
332
387
|
this.updateLocusInfo(locus);
|
|
333
|
-
this.updateParticipants(locus.participants);
|
|
388
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
334
389
|
this.isMeetingActive();
|
|
335
390
|
}
|
|
336
391
|
|
|
@@ -347,7 +402,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
347
402
|
return;
|
|
348
403
|
}
|
|
349
404
|
|
|
350
|
-
this.updateControls(locus.controls);
|
|
405
|
+
this.updateControls(locus.controls, locus.self);
|
|
351
406
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
352
407
|
this.updateCreated(locus.created);
|
|
353
408
|
this.updateFullState(locus.fullState);
|
|
@@ -418,10 +473,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
418
473
|
LoggerProxy.logger.warn(
|
|
419
474
|
'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'
|
|
420
475
|
);
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
476
|
+
|
|
477
|
+
// @ts-ignore
|
|
478
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
479
|
+
name: 'client.call.remote-ended',
|
|
480
|
+
options: {
|
|
481
|
+
meetingId: this.meetingId,
|
|
482
|
+
},
|
|
424
483
|
});
|
|
484
|
+
|
|
425
485
|
this.emitScoped(
|
|
426
486
|
{
|
|
427
487
|
file: 'locus-info',
|
|
@@ -440,9 +500,12 @@ export default class LocusInfo extends EventsScope {
|
|
|
440
500
|
this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
441
501
|
this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)
|
|
442
502
|
) {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
503
|
+
// @ts-ignore
|
|
504
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
505
|
+
name: 'client.call.remote-ended',
|
|
506
|
+
options: {
|
|
507
|
+
meetingId: this.meetingId,
|
|
508
|
+
},
|
|
446
509
|
});
|
|
447
510
|
this.emitScoped(
|
|
448
511
|
{
|
|
@@ -464,10 +527,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
464
527
|
partner.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
465
528
|
partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
|
|
466
529
|
) {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
530
|
+
// @ts-ignore
|
|
531
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
532
|
+
name: 'client.call.remote-ended',
|
|
533
|
+
options: {
|
|
534
|
+
meetingId: this.meetingId,
|
|
535
|
+
},
|
|
470
536
|
});
|
|
537
|
+
|
|
471
538
|
this.emitScoped(
|
|
472
539
|
{
|
|
473
540
|
file: 'locus-info',
|
|
@@ -490,9 +557,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
490
557
|
LoggerProxy.logger.warn(
|
|
491
558
|
'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'
|
|
492
559
|
);
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
560
|
+
|
|
561
|
+
// @ts-ignore
|
|
562
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
563
|
+
name: 'client.call.remote-ended',
|
|
564
|
+
options: {
|
|
565
|
+
meetingId: this.meetingId,
|
|
566
|
+
},
|
|
496
567
|
});
|
|
497
568
|
this.emitScoped(
|
|
498
569
|
{
|
|
@@ -507,9 +578,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
507
578
|
);
|
|
508
579
|
} else if (this.fullState && this.fullState.removed) {
|
|
509
580
|
// user has been dropped from a meeting
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
581
|
+
|
|
582
|
+
// @ts-ignore
|
|
583
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
584
|
+
name: 'client.call.remote-ended',
|
|
585
|
+
options: {
|
|
586
|
+
meetingId: this.meetingId,
|
|
587
|
+
},
|
|
513
588
|
});
|
|
514
589
|
this.emitScoped(
|
|
515
590
|
{
|
|
@@ -646,13 +721,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
646
721
|
}
|
|
647
722
|
|
|
648
723
|
/**
|
|
649
|
-
*
|
|
724
|
+
* update meeting's members
|
|
650
725
|
* @param {Object} participants new participants object
|
|
651
|
-
* @param {
|
|
726
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
652
727
|
* @returns {Array} updatedParticipants
|
|
653
728
|
* @memberof LocusInfo
|
|
654
729
|
*/
|
|
655
|
-
updateParticipants(participants: object) {
|
|
730
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
656
731
|
this.emitScoped(
|
|
657
732
|
{
|
|
658
733
|
file: 'locus-info',
|
|
@@ -665,16 +740,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
665
740
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
666
741
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
667
742
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
743
|
+
isReplace,
|
|
668
744
|
}
|
|
669
745
|
);
|
|
670
746
|
}
|
|
671
747
|
|
|
672
748
|
/**
|
|
673
749
|
* @param {Object} controls
|
|
750
|
+
* @param {Object} self
|
|
674
751
|
* @returns {undefined}
|
|
675
752
|
* @memberof LocusInfo
|
|
676
753
|
*/
|
|
677
|
-
updateControls(controls: object) {
|
|
754
|
+
updateControls(controls: object, self: object) {
|
|
678
755
|
if (controls && !isEqual(this.controls, controls)) {
|
|
679
756
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
680
757
|
const {
|
|
@@ -685,10 +762,76 @@ export default class LocusInfo extends EventsScope {
|
|
|
685
762
|
hasTranscribeChanged,
|
|
686
763
|
hasEntryExitToneChanged,
|
|
687
764
|
hasBreakoutChanged,
|
|
765
|
+
hasVideoEnabledChanged,
|
|
766
|
+
hasMuteOnEntryChanged,
|
|
767
|
+
hasShareControlChanged,
|
|
768
|
+
hasDisallowUnmuteChanged,
|
|
769
|
+
hasReactionsChanged,
|
|
770
|
+
hasReactionDisplayNamesChanged,
|
|
771
|
+
hasViewTheParticipantListChanged,
|
|
772
|
+
hasRaiseHandChanged,
|
|
773
|
+
hasVideoChanged,
|
|
774
|
+
hasInterpretationChanged,
|
|
688
775
|
},
|
|
689
776
|
current,
|
|
690
777
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
691
778
|
|
|
779
|
+
if (hasMuteOnEntryChanged) {
|
|
780
|
+
this.emitScoped(
|
|
781
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
782
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
783
|
+
{state: current.muteOnEntry}
|
|
784
|
+
);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
if (hasShareControlChanged) {
|
|
788
|
+
this.emitScoped(
|
|
789
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
790
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
791
|
+
{state: current.shareControl}
|
|
792
|
+
);
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
if (hasDisallowUnmuteChanged) {
|
|
796
|
+
this.emitScoped(
|
|
797
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
798
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
799
|
+
{state: current.disallowUnmute}
|
|
800
|
+
);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
804
|
+
this.emitScoped(
|
|
805
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
806
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
807
|
+
{state: current.reactions}
|
|
808
|
+
);
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
if (hasViewTheParticipantListChanged) {
|
|
812
|
+
this.emitScoped(
|
|
813
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
814
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
815
|
+
{state: current.viewTheParticipantList}
|
|
816
|
+
);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
if (hasRaiseHandChanged) {
|
|
820
|
+
this.emitScoped(
|
|
821
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
822
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
823
|
+
{state: current.raiseHand}
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
if (hasVideoChanged) {
|
|
828
|
+
this.emitScoped(
|
|
829
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
830
|
+
LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,
|
|
831
|
+
{state: current.video}
|
|
832
|
+
);
|
|
833
|
+
}
|
|
834
|
+
|
|
692
835
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
693
836
|
let state = null;
|
|
694
837
|
|
|
@@ -750,7 +893,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
750
893
|
|
|
751
894
|
if (hasBreakoutChanged) {
|
|
752
895
|
const {breakout} = current;
|
|
753
|
-
|
|
896
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
897
|
+
self,
|
|
898
|
+
this.webex.internal.device.url
|
|
899
|
+
);
|
|
754
900
|
this.emitScoped(
|
|
755
901
|
{
|
|
756
902
|
file: 'locus-info',
|
|
@@ -763,9 +909,25 @@ export default class LocusInfo extends EventsScope {
|
|
|
763
909
|
);
|
|
764
910
|
}
|
|
765
911
|
|
|
912
|
+
if (hasInterpretationChanged) {
|
|
913
|
+
const {interpretation} = current;
|
|
914
|
+
this.emitScoped(
|
|
915
|
+
{
|
|
916
|
+
file: 'locus-info',
|
|
917
|
+
function: 'updateControls',
|
|
918
|
+
},
|
|
919
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,
|
|
920
|
+
{
|
|
921
|
+
interpretation,
|
|
922
|
+
}
|
|
923
|
+
);
|
|
924
|
+
}
|
|
925
|
+
|
|
766
926
|
if (hasEntryExitToneChanged) {
|
|
767
927
|
const {entryExitTone} = current;
|
|
768
928
|
|
|
929
|
+
this.updateMeeting({entryExitTone});
|
|
930
|
+
|
|
769
931
|
this.emitScoped(
|
|
770
932
|
{
|
|
771
933
|
file: 'locus-info',
|
|
@@ -776,8 +938,26 @@ export default class LocusInfo extends EventsScope {
|
|
|
776
938
|
entryExitTone,
|
|
777
939
|
}
|
|
778
940
|
);
|
|
941
|
+
}
|
|
779
942
|
|
|
780
|
-
|
|
943
|
+
// videoEnabled is handled differently than other controls,
|
|
944
|
+
// to fit with audio mute status logic
|
|
945
|
+
if (hasVideoEnabledChanged) {
|
|
946
|
+
const {videoEnabled} = current;
|
|
947
|
+
|
|
948
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
949
|
+
|
|
950
|
+
this.emitScoped(
|
|
951
|
+
{
|
|
952
|
+
file: 'locus-info',
|
|
953
|
+
function: 'updateControls',
|
|
954
|
+
},
|
|
955
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
956
|
+
{
|
|
957
|
+
// muted: not part of locus.controls
|
|
958
|
+
unmuteAllowed: videoEnabled,
|
|
959
|
+
}
|
|
960
|
+
);
|
|
781
961
|
}
|
|
782
962
|
|
|
783
963
|
this.controls = controls;
|
|
@@ -918,20 +1098,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
918
1098
|
* @memberof LocusInfo
|
|
919
1099
|
*/
|
|
920
1100
|
updateMeetingInfo(info: object, self?: object) {
|
|
921
|
-
|
|
922
|
-
|
|
1101
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
1102
|
+
if (
|
|
1103
|
+
(info && !isEqual(this.info, info)) ||
|
|
1104
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
1105
|
+
) {
|
|
923
1106
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
924
1107
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
925
1108
|
|
|
926
|
-
this.emitScoped(
|
|
927
|
-
{
|
|
928
|
-
file: 'locus-info',
|
|
929
|
-
function: 'updateMeetingInfo',
|
|
930
|
-
},
|
|
931
|
-
LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,
|
|
932
|
-
{info: parsedInfo.current, self}
|
|
933
|
-
);
|
|
934
|
-
|
|
935
1109
|
if (parsedInfo.updates.isLocked) {
|
|
936
1110
|
this.emitScoped(
|
|
937
1111
|
{
|
|
@@ -957,7 +1131,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
957
1131
|
this.parsedLocus.info = parsedInfo.current;
|
|
958
1132
|
// Parses the info and adds necessary values
|
|
959
1133
|
this.updateMeeting(parsedInfo.current);
|
|
1134
|
+
|
|
1135
|
+
this.emitScoped(
|
|
1136
|
+
{
|
|
1137
|
+
file: 'locus-info',
|
|
1138
|
+
function: 'updateMeetingInfo',
|
|
1139
|
+
},
|
|
1140
|
+
LOCUSINFO.EVENTS.MEETING_INFO_UPDATED
|
|
1141
|
+
);
|
|
960
1142
|
}
|
|
1143
|
+
this.roles = roles;
|
|
961
1144
|
}
|
|
962
1145
|
|
|
963
1146
|
/**
|
|
@@ -998,6 +1181,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
998
1181
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
999
1182
|
|
|
1000
1183
|
this.updateMeeting(parsedMediaShares.current);
|
|
1184
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1185
|
+
this.mediaShares = mediaShares;
|
|
1001
1186
|
this.emitScoped(
|
|
1002
1187
|
{
|
|
1003
1188
|
file: 'locus-info',
|
|
@@ -1009,8 +1194,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
1009
1194
|
previous: parsedMediaShares.previous,
|
|
1010
1195
|
}
|
|
1011
1196
|
);
|
|
1012
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1013
|
-
this.mediaShares = mediaShares;
|
|
1014
1197
|
}
|
|
1015
1198
|
}
|
|
1016
1199
|
|
|
@@ -1099,6 +1282,20 @@ export default class LocusInfo extends EventsScope {
|
|
|
1099
1282
|
);
|
|
1100
1283
|
}
|
|
1101
1284
|
|
|
1285
|
+
if (parsedSelves.updates.interpretationChanged) {
|
|
1286
|
+
this.emitScoped(
|
|
1287
|
+
{
|
|
1288
|
+
file: 'locus-info',
|
|
1289
|
+
function: 'updateSelf',
|
|
1290
|
+
},
|
|
1291
|
+
LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,
|
|
1292
|
+
{
|
|
1293
|
+
interpretation: parsedSelves.current.interpretation,
|
|
1294
|
+
selfParticipantId: parsedSelves.current.selfId,
|
|
1295
|
+
}
|
|
1296
|
+
);
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1102
1299
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1103
1300
|
this.emitScoped(
|
|
1104
1301
|
{
|
|
@@ -1120,6 +1317,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1120
1317
|
self
|
|
1121
1318
|
);
|
|
1122
1319
|
}
|
|
1320
|
+
|
|
1321
|
+
if (parsedSelves.updates.isRolesChanged) {
|
|
1322
|
+
this.emitScoped(
|
|
1323
|
+
{
|
|
1324
|
+
file: 'locus-info',
|
|
1325
|
+
function: 'updateSelf',
|
|
1326
|
+
},
|
|
1327
|
+
LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,
|
|
1328
|
+
{oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}
|
|
1329
|
+
);
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1333
|
+
this.emitScoped(
|
|
1334
|
+
{
|
|
1335
|
+
file: 'locus-info',
|
|
1336
|
+
function: 'updateSelf',
|
|
1337
|
+
},
|
|
1338
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1339
|
+
{
|
|
1340
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1341
|
+
// unmuteAllowed: not part of .self
|
|
1342
|
+
}
|
|
1343
|
+
);
|
|
1344
|
+
}
|
|
1123
1345
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1124
1346
|
this.emitScoped(
|
|
1125
1347
|
{
|
|
@@ -1334,4 +1556,104 @@ export default class LocusInfo extends EventsScope {
|
|
|
1334
1556
|
this.identities = identities;
|
|
1335
1557
|
}
|
|
1336
1558
|
}
|
|
1559
|
+
|
|
1560
|
+
/**
|
|
1561
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1562
|
+
* @param {Object} locus
|
|
1563
|
+
* @returns {undefined}
|
|
1564
|
+
* @memberof LocusInfo
|
|
1565
|
+
*/
|
|
1566
|
+
updateLocusCache(locus: any) {
|
|
1567
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1568
|
+
if (isMainSessionDTO) {
|
|
1569
|
+
this.updateMainSessionLocusCache(locus);
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
/**
|
|
1574
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1575
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1576
|
+
* @param {Object} newLocus
|
|
1577
|
+
* @returns {Object}
|
|
1578
|
+
* @memberof LocusInfo
|
|
1579
|
+
*/
|
|
1580
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1581
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);
|
|
1582
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1583
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1584
|
+
}
|
|
1585
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1586
|
+
this.emitScoped(
|
|
1587
|
+
{
|
|
1588
|
+
file: 'locus-info',
|
|
1589
|
+
function: 'updateControls',
|
|
1590
|
+
},
|
|
1591
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1592
|
+
{
|
|
1593
|
+
mainLocusUrl: this.url,
|
|
1594
|
+
}
|
|
1595
|
+
);
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
return newLocus;
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
/**
|
|
1602
|
+
* merge participants by participant id
|
|
1603
|
+
* @param {Array} participants
|
|
1604
|
+
* @param {Array} sourceParticipants
|
|
1605
|
+
* @returns {Array} merged participants
|
|
1606
|
+
* @memberof LocusInfo
|
|
1607
|
+
*/
|
|
1608
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1609
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1610
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1611
|
+
if (!participants || !participants.length) {
|
|
1612
|
+
return sourceParticipants;
|
|
1613
|
+
}
|
|
1614
|
+
sourceParticipants.forEach((participant) => {
|
|
1615
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1616
|
+
if (existIndex > -1) {
|
|
1617
|
+
participants.splice(existIndex, 1, participant);
|
|
1618
|
+
} else {
|
|
1619
|
+
participants.push(participant);
|
|
1620
|
+
}
|
|
1621
|
+
});
|
|
1622
|
+
|
|
1623
|
+
return participants;
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1626
|
+
/**
|
|
1627
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1628
|
+
* @param {Object} mainLocus
|
|
1629
|
+
* @returns {undefined}
|
|
1630
|
+
* @memberof LocusInfo
|
|
1631
|
+
*/
|
|
1632
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1633
|
+
if (!mainLocus) {
|
|
1634
|
+
return;
|
|
1635
|
+
}
|
|
1636
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1637
|
+
if (this.mainSessionLocusCache) {
|
|
1638
|
+
// shallow merge and do special merge for participants
|
|
1639
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1640
|
+
if (key === 'participants') {
|
|
1641
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
return srcValue || objValue;
|
|
1645
|
+
});
|
|
1646
|
+
} else {
|
|
1647
|
+
this.mainSessionLocusCache = locusClone;
|
|
1648
|
+
}
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1651
|
+
/**
|
|
1652
|
+
* clear main session cache
|
|
1653
|
+
* @returns {undefined}
|
|
1654
|
+
* @memberof LocusInfo
|
|
1655
|
+
*/
|
|
1656
|
+
clearMainSessionLocusCache() {
|
|
1657
|
+
this.mainSessionLocusCache = null;
|
|
1658
|
+
}
|
|
1337
1659
|
}
|