@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -1
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +48 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +355 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +193 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +43 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +994 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +203 -53
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +294 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +72 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +100 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +406 -216
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +88 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +105 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +55 -165
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +71 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +77 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2603 -2462
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +292 -138
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +315 -336
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +463 -583
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +305 -286
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +24 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +692 -593
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +23 -42
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +89 -88
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +101 -69
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +12 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +166 -205
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +120 -85
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +50 -16
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +93 -162
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +167 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +74 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +32 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +190 -199
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +14 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +19 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +326 -465
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +31 -75
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +129 -136
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +143 -103
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +369 -461
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +144 -94
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +35 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +124 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +2 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +78 -0
- package/dist/types/constants.d.ts +993 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +315 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
- package/dist/types/meeting/index.d.ts +1762 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +186 -0
- package/dist/types/meeting/request.d.ts +269 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +76 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +345 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +157 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/config.d.ts +195 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +169 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +28 -21
- package/src/annotation/annotation.types.ts +42 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +163 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +37 -0
- package/src/breakouts/index.ts +860 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +16 -12
- package/src/constants.ts +153 -7
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +281 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +142 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +346 -55
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +52 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +195 -56
- package/src/media/index.ts +139 -196
- package/src/media/properties.ts +43 -36
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +380 -378
- package/src/meeting/in-meeting-actions.ts +159 -3
- package/src/meeting/index.ts +2803 -1584
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +290 -72
- package/src/meeting/request.ts +247 -178
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +445 -395
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +235 -116
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +71 -55
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +772 -437
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +132 -33
- package/src/member/index.ts +95 -49
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +106 -13
- package/src/members/collection.ts +8 -1
- package/src/members/index.ts +288 -130
- package/src/members/request.ts +144 -31
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +316 -235
- package/src/metrics/config.ts +302 -90
- package/src/metrics/constants.ts +2 -6
- package/src/metrics/index.ts +124 -95
- package/src/multistream/mediaRequestManager.ts +203 -45
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +62 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/index.ts +24 -27
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +131 -79
- package/src/reachability/request.ts +43 -34
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +8 -8
- package/src/reactions/reactions.type.ts +31 -5
- package/src/reconnection-manager/index.ts +193 -111
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/index.ts +53 -53
- package/src/roap/request.ts +77 -64
- package/src/roap/turnDiscovery.ts +101 -48
- package/src/statsAnalyzer/global.ts +8 -104
- package/src/statsAnalyzer/index.ts +624 -376
- package/src/statsAnalyzer/mqaUtil.ts +203 -90
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/converged-space-meetings.js +177 -0
- package/test/integration/spec/journey.js +670 -466
- package/test/integration/spec/space-meeting.js +320 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +433 -0
- package/test/unit/spec/breakouts/breakout.ts +203 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +77 -0
- package/test/unit/spec/breakouts/index.ts +1609 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +504 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/locus-info/controlsUtils.js +305 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +636 -5
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +110 -103
- package/test/unit/spec/locus-info/selfUtils.js +252 -12
- package/test/unit/spec/media/index.ts +104 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
- package/test/unit/spec/meeting/index.js +3112 -921
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +421 -94
- package/test/unit/spec/meeting/request.js +421 -79
- package/test/unit/spec/meeting/utils.js +326 -189
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1126 -328
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +383 -32
- package/test/unit/spec/members/index.js +424 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +113 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +62 -31
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +19 -49
- package/test/unit/spec/roap/request.ts +187 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +64 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -334
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting/effectsState.ts +0 -211
- package/src/multistream/multistreamMedia.ts +0 -92
- package/test/unit/spec/meeting/effectsState.js +0 -291
package/src/locus-info/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isArray, isEqual, assignWith, cloneDeep} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -19,14 +19,14 @@ import {
|
|
|
19
19
|
} from '../constants';
|
|
20
20
|
import Metrics from '../metrics';
|
|
21
21
|
import {eventType} from '../metrics/config';
|
|
22
|
-
import InfoUtils from '
|
|
23
|
-
import FullState from '
|
|
24
|
-
import SelfUtils from '
|
|
25
|
-
import HostUtils from '
|
|
26
|
-
import ControlsUtils from '
|
|
27
|
-
import EmbeddedAppsUtils from '
|
|
28
|
-
import MediaSharesUtils from '
|
|
29
|
-
import LocusDeltaParser from '
|
|
22
|
+
import InfoUtils from './infoUtils';
|
|
23
|
+
import FullState from './fullState';
|
|
24
|
+
import SelfUtils from './selfUtils';
|
|
25
|
+
import HostUtils from './hostUtils';
|
|
26
|
+
import ControlsUtils from './controlsUtils';
|
|
27
|
+
import EmbeddedAppsUtils from './embeddedAppsUtils';
|
|
28
|
+
import MediaSharesUtils from './mediaSharesUtils';
|
|
29
|
+
import LocusDeltaParser from './parser';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
|
|
@@ -59,10 +59,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
59
59
|
fullState: any;
|
|
60
60
|
host: any;
|
|
61
61
|
info: any;
|
|
62
|
+
roles: any;
|
|
62
63
|
mediaShares: any;
|
|
63
64
|
replace: any;
|
|
64
65
|
url: any;
|
|
65
|
-
|
|
66
|
+
services: any;
|
|
67
|
+
mainSessionLocusCache: any;
|
|
68
|
+
/**
|
|
69
|
+
* Constructor
|
|
70
|
+
* @param {boolean} updateMeeting true if the meeting should be updated
|
|
71
|
+
* @param {object} webex
|
|
72
|
+
* @param {string} meetingId
|
|
73
|
+
* @returns {undefined}
|
|
74
|
+
*/
|
|
66
75
|
constructor(updateMeeting, webex, meetingId) {
|
|
67
76
|
super();
|
|
68
77
|
this.parsedLocus = {
|
|
@@ -98,7 +107,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
98
107
|
meeting.meetingRequest
|
|
99
108
|
.getFullLocus({
|
|
100
109
|
desync: true,
|
|
101
|
-
locusUrl: meeting.locusUrl,
|
|
110
|
+
locusUrl: locus.url ? locus.url : meeting.locusUrl,
|
|
102
111
|
})
|
|
103
112
|
.then((res) => {
|
|
104
113
|
meeting.locusInfo.onFullLocus(res.body);
|
|
@@ -171,12 +180,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
171
180
|
*/
|
|
172
181
|
this.deltaParticipants = [];
|
|
173
182
|
|
|
183
|
+
this.updateLocusCache(locus);
|
|
174
184
|
// above section only updates the locusInfo object
|
|
175
185
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
176
186
|
this.updateParticipants(locus.participants);
|
|
177
187
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
178
188
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
179
|
-
this.updateControls(locus.controls);
|
|
189
|
+
this.updateControls(locus.controls, locus.self);
|
|
180
190
|
this.updateLocusUrl(locus.url);
|
|
181
191
|
this.updateFullState(locus.fullState);
|
|
182
192
|
this.updateMeetingInfo(locus.info);
|
|
@@ -185,6 +195,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
185
195
|
this.updateSelf(locus.self, locus.participants);
|
|
186
196
|
this.updateHostInfo(locus.host);
|
|
187
197
|
this.updateMediaShares(locus.mediaShares);
|
|
198
|
+
this.updateServices(locus.links?.services);
|
|
188
199
|
}
|
|
189
200
|
|
|
190
201
|
/**
|
|
@@ -193,6 +204,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
193
204
|
* @memberof LocusInfo
|
|
194
205
|
*/
|
|
195
206
|
initialSetup(locus: object) {
|
|
207
|
+
this.updateLocusCache(locus);
|
|
196
208
|
this.onFullLocus(locus);
|
|
197
209
|
|
|
198
210
|
// Change it to true after it receives it first locus object
|
|
@@ -206,8 +218,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
206
218
|
* @memberof LocusInfo
|
|
207
219
|
*/
|
|
208
220
|
parse(meeting: any, data: any) {
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
209
222
|
const {eventType} = data;
|
|
210
|
-
|
|
223
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
211
224
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
212
225
|
|
|
213
226
|
switch (eventType) {
|
|
@@ -225,16 +238,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
225
238
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
226
239
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
227
240
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
228
|
-
this.onFullLocus(
|
|
241
|
+
this.onFullLocus(locus, eventType);
|
|
229
242
|
break;
|
|
230
243
|
case LOCUSEVENT.DIFFERENCE:
|
|
231
|
-
this.handleLocusDelta(
|
|
244
|
+
this.handleLocusDelta(locus, meeting);
|
|
232
245
|
break;
|
|
233
246
|
|
|
234
247
|
default:
|
|
235
248
|
// Why will there be a event with no eventType ????
|
|
236
249
|
// we may not need this, we can get full locus
|
|
237
|
-
this.handleLocusDelta(
|
|
250
|
+
this.handleLocusDelta(locus, meeting);
|
|
238
251
|
}
|
|
239
252
|
}
|
|
240
253
|
|
|
@@ -256,6 +269,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
256
269
|
* @returns {object} null
|
|
257
270
|
* @memberof LocusInfo
|
|
258
271
|
*/
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
259
273
|
onFullLocus(locus: any, eventType?: string) {
|
|
260
274
|
if (!locus) {
|
|
261
275
|
LoggerProxy.logger.error(
|
|
@@ -265,8 +279,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
265
279
|
this.updateParticipantDeltas(locus.participants);
|
|
266
280
|
this.scheduledMeeting = locus.meeting || null;
|
|
267
281
|
this.participants = locus.participants;
|
|
282
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
268
283
|
this.updateLocusInfo(locus);
|
|
269
|
-
this.updateParticipants(locus.participants);
|
|
284
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
270
285
|
this.isMeetingActive();
|
|
271
286
|
this.handleOneOnOneEvent(eventType);
|
|
272
287
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -280,6 +295,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
280
295
|
* @returns {undefined}
|
|
281
296
|
* @memberof LocusInfo
|
|
282
297
|
*/
|
|
298
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
283
299
|
handleOneOnOneEvent(eventType: string) {
|
|
284
300
|
if (
|
|
285
301
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
@@ -324,8 +340,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
324
340
|
* @memberof LocusInfo
|
|
325
341
|
*/
|
|
326
342
|
onDeltaLocus(locus: any) {
|
|
343
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
327
344
|
this.updateLocusInfo(locus);
|
|
328
|
-
this.updateParticipants(locus.participants);
|
|
345
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
329
346
|
this.isMeetingActive();
|
|
330
347
|
}
|
|
331
348
|
|
|
@@ -334,8 +351,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
334
351
|
* @returns {undefined}
|
|
335
352
|
* @memberof LocusInfo
|
|
336
353
|
*/
|
|
337
|
-
updateLocusInfo(locus
|
|
338
|
-
|
|
354
|
+
updateLocusInfo(locus) {
|
|
355
|
+
if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {
|
|
356
|
+
// When moved to a breakout session locus sends a message for the previous locus
|
|
357
|
+
// indicating that we have been moved. It isn't helpful to continue parsing this
|
|
358
|
+
// as it gets interpreted as if we have left the call
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
this.updateControls(locus.controls, locus.self);
|
|
339
363
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
340
364
|
this.updateCreated(locus.created);
|
|
341
365
|
this.updateFullState(locus.fullState);
|
|
@@ -352,6 +376,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
352
376
|
this.updateMemberShip(locus.membership);
|
|
353
377
|
this.updateIdentifiers(locus.identities);
|
|
354
378
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
379
|
+
this.updateServices(locus.links?.services);
|
|
355
380
|
this.compareAndUpdate();
|
|
356
381
|
// update which required to compare different objects from locus
|
|
357
382
|
}
|
|
@@ -373,7 +398,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
373
398
|
self &&
|
|
374
399
|
participant.identity !== self.identity &&
|
|
375
400
|
(participants.length <= 2 || (participant.type === _USER_ && !participant.removed))
|
|
376
|
-
|
|
401
|
+
// @ts-ignore
|
|
377
402
|
) || this.partner
|
|
378
403
|
);
|
|
379
404
|
}
|
|
@@ -420,8 +445,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
420
445
|
shouldLeave: false,
|
|
421
446
|
}
|
|
422
447
|
);
|
|
423
|
-
}
|
|
424
|
-
else if (
|
|
448
|
+
} else if (
|
|
425
449
|
partner.state === MEETING_STATE.STATES.LEFT &&
|
|
426
450
|
this.parsedLocus.self &&
|
|
427
451
|
(this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||
|
|
@@ -444,8 +468,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
444
468
|
this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,
|
|
445
469
|
}
|
|
446
470
|
);
|
|
447
|
-
}
|
|
448
|
-
else if (
|
|
471
|
+
} else if (
|
|
449
472
|
this.parsedLocus.self &&
|
|
450
473
|
this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&
|
|
451
474
|
(partner.state === MEETING_STATE.STATES.LEFT ||
|
|
@@ -469,8 +492,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
469
492
|
}
|
|
470
493
|
);
|
|
471
494
|
}
|
|
472
|
-
}
|
|
473
|
-
else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
495
|
+
} else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
474
496
|
if (
|
|
475
497
|
this.fullState &&
|
|
476
498
|
(this.fullState.state === LOCUS.STATE.INACTIVE ||
|
|
@@ -495,8 +517,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
495
517
|
shouldLeave: false,
|
|
496
518
|
}
|
|
497
519
|
);
|
|
498
|
-
}
|
|
499
|
-
else if (this.fullState && this.fullState.removed) {
|
|
520
|
+
} else if (this.fullState && this.fullState.removed) {
|
|
500
521
|
// user has been dropped from a meeting
|
|
501
522
|
Metrics.postEvent({
|
|
502
523
|
event: eventType.REMOTE_ENDED,
|
|
@@ -530,8 +551,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
530
551
|
}
|
|
531
552
|
);
|
|
532
553
|
}
|
|
533
|
-
}
|
|
534
|
-
else {
|
|
554
|
+
} else {
|
|
535
555
|
LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');
|
|
536
556
|
}
|
|
537
557
|
}
|
|
@@ -574,8 +594,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
574
594
|
canAssignHost: true,
|
|
575
595
|
}
|
|
576
596
|
);
|
|
577
|
-
}
|
|
578
|
-
else {
|
|
597
|
+
} else {
|
|
579
598
|
this.emitScoped(
|
|
580
599
|
{
|
|
581
600
|
file: 'locus-info',
|
|
@@ -639,13 +658,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
639
658
|
}
|
|
640
659
|
|
|
641
660
|
/**
|
|
642
|
-
*
|
|
661
|
+
* update meeting's members
|
|
643
662
|
* @param {Object} participants new participants object
|
|
644
|
-
* @param {
|
|
663
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
645
664
|
* @returns {Array} updatedParticipants
|
|
646
665
|
* @memberof LocusInfo
|
|
647
666
|
*/
|
|
648
|
-
updateParticipants(participants: object) {
|
|
667
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
649
668
|
this.emitScoped(
|
|
650
669
|
{
|
|
651
670
|
file: 'locus-info',
|
|
@@ -658,16 +677,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
658
677
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
659
678
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
660
679
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
680
|
+
isReplace,
|
|
661
681
|
}
|
|
662
682
|
);
|
|
663
683
|
}
|
|
664
684
|
|
|
665
685
|
/**
|
|
666
686
|
* @param {Object} controls
|
|
687
|
+
* @param {Object} self
|
|
667
688
|
* @returns {undefined}
|
|
668
689
|
* @memberof LocusInfo
|
|
669
690
|
*/
|
|
670
|
-
updateControls(controls: object) {
|
|
691
|
+
updateControls(controls: object, self: object) {
|
|
671
692
|
if (controls && !isEqual(this.controls, controls)) {
|
|
672
693
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
673
694
|
const {
|
|
@@ -677,23 +698,87 @@ export default class LocusInfo extends EventsScope {
|
|
|
677
698
|
hasMeetingContainerChanged,
|
|
678
699
|
hasTranscribeChanged,
|
|
679
700
|
hasEntryExitToneChanged,
|
|
701
|
+
hasBreakoutChanged,
|
|
702
|
+
hasVideoEnabledChanged,
|
|
703
|
+
hasMuteOnEntryChanged,
|
|
704
|
+
hasShareControlChanged,
|
|
705
|
+
hasDisallowUnmuteChanged,
|
|
706
|
+
hasReactionsChanged,
|
|
707
|
+
hasReactionDisplayNamesChanged,
|
|
708
|
+
hasViewTheParticipantListChanged,
|
|
709
|
+
hasRaiseHandChanged,
|
|
710
|
+
hasVideoChanged,
|
|
680
711
|
},
|
|
681
712
|
current,
|
|
682
713
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
683
714
|
|
|
715
|
+
if (hasMuteOnEntryChanged) {
|
|
716
|
+
this.emitScoped(
|
|
717
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
718
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
719
|
+
{state: current.muteOnEntry}
|
|
720
|
+
);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
if (hasShareControlChanged) {
|
|
724
|
+
this.emitScoped(
|
|
725
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
726
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
727
|
+
{state: current.shareControl}
|
|
728
|
+
);
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
if (hasDisallowUnmuteChanged) {
|
|
732
|
+
this.emitScoped(
|
|
733
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
734
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
735
|
+
{state: current.disallowUnmute}
|
|
736
|
+
);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
740
|
+
this.emitScoped(
|
|
741
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
742
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
743
|
+
{state: current.reactions}
|
|
744
|
+
);
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
if (hasViewTheParticipantListChanged) {
|
|
748
|
+
this.emitScoped(
|
|
749
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
750
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
751
|
+
{state: current.viewTheParticipantList}
|
|
752
|
+
);
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
if (hasRaiseHandChanged) {
|
|
756
|
+
this.emitScoped(
|
|
757
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
758
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
759
|
+
{state: current.raiseHand}
|
|
760
|
+
);
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
if (hasVideoChanged) {
|
|
764
|
+
this.emitScoped(
|
|
765
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
766
|
+
LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,
|
|
767
|
+
{state: current.video}
|
|
768
|
+
);
|
|
769
|
+
}
|
|
770
|
+
|
|
684
771
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
685
772
|
let state = null;
|
|
686
773
|
|
|
687
774
|
if (hasRecordingPausedChanged) {
|
|
688
775
|
if (current.record.paused) {
|
|
689
776
|
state = RECORDING_STATE.PAUSED;
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
777
|
+
} else {
|
|
692
778
|
// state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
|
|
693
779
|
state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
|
|
694
780
|
}
|
|
695
|
-
}
|
|
696
|
-
else if (hasRecordingChanged) {
|
|
781
|
+
} else if (hasRecordingChanged) {
|
|
697
782
|
state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
|
|
698
783
|
}
|
|
699
784
|
|
|
@@ -742,9 +827,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
742
827
|
);
|
|
743
828
|
}
|
|
744
829
|
|
|
830
|
+
if (hasBreakoutChanged) {
|
|
831
|
+
const {breakout} = current;
|
|
832
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
833
|
+
self,
|
|
834
|
+
this.webex.internal.device.url
|
|
835
|
+
);
|
|
836
|
+
this.emitScoped(
|
|
837
|
+
{
|
|
838
|
+
file: 'locus-info',
|
|
839
|
+
function: 'updateControls',
|
|
840
|
+
},
|
|
841
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
|
|
842
|
+
{
|
|
843
|
+
breakout,
|
|
844
|
+
}
|
|
845
|
+
);
|
|
846
|
+
}
|
|
847
|
+
|
|
745
848
|
if (hasEntryExitToneChanged) {
|
|
746
849
|
const {entryExitTone} = current;
|
|
747
850
|
|
|
851
|
+
this.updateMeeting({entryExitTone});
|
|
852
|
+
|
|
748
853
|
this.emitScoped(
|
|
749
854
|
{
|
|
750
855
|
file: 'locus-info',
|
|
@@ -752,11 +857,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
752
857
|
},
|
|
753
858
|
LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
|
|
754
859
|
{
|
|
755
|
-
entryExitTone
|
|
860
|
+
entryExitTone,
|
|
756
861
|
}
|
|
757
862
|
);
|
|
863
|
+
}
|
|
758
864
|
|
|
759
|
-
|
|
865
|
+
// videoEnabled is handled differently than other controls,
|
|
866
|
+
// to fit with audio mute status logic
|
|
867
|
+
if (hasVideoEnabledChanged) {
|
|
868
|
+
const {videoEnabled} = current;
|
|
869
|
+
|
|
870
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
871
|
+
|
|
872
|
+
this.emitScoped(
|
|
873
|
+
{
|
|
874
|
+
file: 'locus-info',
|
|
875
|
+
function: 'updateControls',
|
|
876
|
+
},
|
|
877
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
878
|
+
{
|
|
879
|
+
// muted: not part of locus.controls
|
|
880
|
+
unmuteAllowed: videoEnabled,
|
|
881
|
+
}
|
|
882
|
+
);
|
|
760
883
|
}
|
|
761
884
|
|
|
762
885
|
this.controls = controls;
|
|
@@ -773,8 +896,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
773
896
|
if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
|
|
774
897
|
this.conversationUrl = conversationUrl;
|
|
775
898
|
this.updateMeeting({conversationUrl});
|
|
776
|
-
}
|
|
777
|
-
else if (
|
|
899
|
+
} else if (
|
|
778
900
|
info &&
|
|
779
901
|
info.conversationUrl &&
|
|
780
902
|
!isEqual(this.conversationUrl, info.conversationUrl)
|
|
@@ -795,6 +917,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
795
917
|
}
|
|
796
918
|
}
|
|
797
919
|
|
|
920
|
+
/**
|
|
921
|
+
* @param {Object} services
|
|
922
|
+
* @returns {undefined}
|
|
923
|
+
* @memberof LocusInfo
|
|
924
|
+
*/
|
|
925
|
+
updateServices(services: Record<'breakout' | 'record', {url: string}>) {
|
|
926
|
+
if (services && !isEqual(this.services, services)) {
|
|
927
|
+
this.services = services;
|
|
928
|
+
this.emitScoped(
|
|
929
|
+
{
|
|
930
|
+
file: 'locus-info',
|
|
931
|
+
function: 'updateServices',
|
|
932
|
+
},
|
|
933
|
+
LOCUSINFO.EVENTS.LINKS_SERVICES,
|
|
934
|
+
{
|
|
935
|
+
services,
|
|
936
|
+
}
|
|
937
|
+
);
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
|
|
798
941
|
/**
|
|
799
942
|
* @param {Object} fullState
|
|
800
943
|
* @returns {undefined}
|
|
@@ -865,8 +1008,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
865
1008
|
);
|
|
866
1009
|
}
|
|
867
1010
|
this.host = host;
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
1011
|
+
} else {
|
|
870
1012
|
this.compareAndUpdateFlags.compareSelfAndHost = false;
|
|
871
1013
|
}
|
|
872
1014
|
}
|
|
@@ -878,8 +1020,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
878
1020
|
* @memberof LocusInfo
|
|
879
1021
|
*/
|
|
880
1022
|
updateMeetingInfo(info: object, self?: object) {
|
|
881
|
-
|
|
882
|
-
|
|
1023
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
1024
|
+
if (
|
|
1025
|
+
(info && !isEqual(this.info, info)) ||
|
|
1026
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
1027
|
+
) {
|
|
883
1028
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
884
1029
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
885
1030
|
|
|
@@ -918,6 +1063,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
918
1063
|
// Parses the info and adds necessary values
|
|
919
1064
|
this.updateMeeting(parsedInfo.current);
|
|
920
1065
|
}
|
|
1066
|
+
this.roles = roles;
|
|
921
1067
|
}
|
|
922
1068
|
|
|
923
1069
|
/**
|
|
@@ -958,6 +1104,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
958
1104
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
959
1105
|
|
|
960
1106
|
this.updateMeeting(parsedMediaShares.current);
|
|
1107
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1108
|
+
this.mediaShares = mediaShares;
|
|
961
1109
|
this.emitScoped(
|
|
962
1110
|
{
|
|
963
1111
|
file: 'locus-info',
|
|
@@ -969,8 +1117,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
969
1117
|
previous: parsedMediaShares.previous,
|
|
970
1118
|
}
|
|
971
1119
|
);
|
|
972
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
973
|
-
this.mediaShares = mediaShares;
|
|
974
1120
|
}
|
|
975
1121
|
}
|
|
976
1122
|
|
|
@@ -1033,8 +1179,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1033
1179
|
|
|
1034
1180
|
if (parsedSelves.updates.moderatorChanged) {
|
|
1035
1181
|
this.compareAndUpdateFlags.compareHostAndSelf = true;
|
|
1036
|
-
}
|
|
1037
|
-
else {
|
|
1182
|
+
} else {
|
|
1038
1183
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1039
1184
|
}
|
|
1040
1185
|
|
|
@@ -1049,6 +1194,17 @@ export default class LocusInfo extends EventsScope {
|
|
|
1049
1194
|
);
|
|
1050
1195
|
}
|
|
1051
1196
|
|
|
1197
|
+
if (parsedSelves.updates.breakoutsChanged) {
|
|
1198
|
+
this.emitScoped(
|
|
1199
|
+
{
|
|
1200
|
+
file: 'locus-info',
|
|
1201
|
+
function: 'updateSelf',
|
|
1202
|
+
},
|
|
1203
|
+
LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
|
|
1204
|
+
{breakoutSessions: parsedSelves.current.breakoutSessions}
|
|
1205
|
+
);
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1052
1208
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1053
1209
|
this.emitScoped(
|
|
1054
1210
|
{
|
|
@@ -1070,6 +1226,42 @@ export default class LocusInfo extends EventsScope {
|
|
|
1070
1226
|
self
|
|
1071
1227
|
);
|
|
1072
1228
|
}
|
|
1229
|
+
|
|
1230
|
+
if (parsedSelves.updates.isRolesChanged) {
|
|
1231
|
+
this.emitScoped(
|
|
1232
|
+
{
|
|
1233
|
+
file: 'locus-info',
|
|
1234
|
+
function: 'updateSelf',
|
|
1235
|
+
},
|
|
1236
|
+
LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,
|
|
1237
|
+
{oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}
|
|
1238
|
+
);
|
|
1239
|
+
}
|
|
1240
|
+
// When the user upgrades to moderator or cohost
|
|
1241
|
+
if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {
|
|
1242
|
+
this.emitScoped(
|
|
1243
|
+
{
|
|
1244
|
+
file: 'locus-info',
|
|
1245
|
+
function: 'updateSelf',
|
|
1246
|
+
},
|
|
1247
|
+
LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,
|
|
1248
|
+
self
|
|
1249
|
+
);
|
|
1250
|
+
}
|
|
1251
|
+
//
|
|
1252
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1253
|
+
this.emitScoped(
|
|
1254
|
+
{
|
|
1255
|
+
file: 'locus-info',
|
|
1256
|
+
function: 'updateSelf',
|
|
1257
|
+
},
|
|
1258
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1259
|
+
{
|
|
1260
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1261
|
+
// unmuteAllowed: not part of .self
|
|
1262
|
+
}
|
|
1263
|
+
);
|
|
1264
|
+
}
|
|
1073
1265
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1074
1266
|
this.emitScoped(
|
|
1075
1267
|
{
|
|
@@ -1204,8 +1396,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1204
1396
|
this.parsedLocus.self = parsedSelves.current;
|
|
1205
1397
|
// @ts-ignore
|
|
1206
1398
|
this.self = self;
|
|
1207
|
-
}
|
|
1208
|
-
else {
|
|
1399
|
+
} else {
|
|
1209
1400
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1210
1401
|
}
|
|
1211
1402
|
}
|
|
@@ -1285,4 +1476,104 @@ export default class LocusInfo extends EventsScope {
|
|
|
1285
1476
|
this.identities = identities;
|
|
1286
1477
|
}
|
|
1287
1478
|
}
|
|
1479
|
+
|
|
1480
|
+
/**
|
|
1481
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1482
|
+
* @param {Object} locus
|
|
1483
|
+
* @returns {undefined}
|
|
1484
|
+
* @memberof LocusInfo
|
|
1485
|
+
*/
|
|
1486
|
+
updateLocusCache(locus: any) {
|
|
1487
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1488
|
+
if (isMainSessionDTO) {
|
|
1489
|
+
this.updateMainSessionLocusCache(locus);
|
|
1490
|
+
}
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
/**
|
|
1494
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1495
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1496
|
+
* @param {Object} newLocus
|
|
1497
|
+
* @returns {Object}
|
|
1498
|
+
* @memberof LocusInfo
|
|
1499
|
+
*/
|
|
1500
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1501
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);
|
|
1502
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1503
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1504
|
+
}
|
|
1505
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1506
|
+
this.emitScoped(
|
|
1507
|
+
{
|
|
1508
|
+
file: 'locus-info',
|
|
1509
|
+
function: 'updateControls',
|
|
1510
|
+
},
|
|
1511
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1512
|
+
{
|
|
1513
|
+
mainLocusUrl: this.url,
|
|
1514
|
+
}
|
|
1515
|
+
);
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
return newLocus;
|
|
1519
|
+
}
|
|
1520
|
+
|
|
1521
|
+
/**
|
|
1522
|
+
* merge participants by participant id
|
|
1523
|
+
* @param {Array} participants
|
|
1524
|
+
* @param {Array} sourceParticipants
|
|
1525
|
+
* @returns {Array} merged participants
|
|
1526
|
+
* @memberof LocusInfo
|
|
1527
|
+
*/
|
|
1528
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1529
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1530
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1531
|
+
if (!participants || !participants.length) {
|
|
1532
|
+
return sourceParticipants;
|
|
1533
|
+
}
|
|
1534
|
+
sourceParticipants.forEach((participant) => {
|
|
1535
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1536
|
+
if (existIndex > -1) {
|
|
1537
|
+
participants.splice(existIndex, 1, participant);
|
|
1538
|
+
} else {
|
|
1539
|
+
participants.push(participant);
|
|
1540
|
+
}
|
|
1541
|
+
});
|
|
1542
|
+
|
|
1543
|
+
return participants;
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
/**
|
|
1547
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1548
|
+
* @param {Object} mainLocus
|
|
1549
|
+
* @returns {undefined}
|
|
1550
|
+
* @memberof LocusInfo
|
|
1551
|
+
*/
|
|
1552
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1553
|
+
if (!mainLocus) {
|
|
1554
|
+
return;
|
|
1555
|
+
}
|
|
1556
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1557
|
+
if (this.mainSessionLocusCache) {
|
|
1558
|
+
// shallow merge and do special merge for participants
|
|
1559
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1560
|
+
if (key === 'participants') {
|
|
1561
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
return srcValue || objValue;
|
|
1565
|
+
});
|
|
1566
|
+
} else {
|
|
1567
|
+
this.mainSessionLocusCache = locusClone;
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
/**
|
|
1572
|
+
* clear main session cache
|
|
1573
|
+
* @returns {undefined}
|
|
1574
|
+
* @memberof LocusInfo
|
|
1575
|
+
*/
|
|
1576
|
+
clearMainSessionLocusCache() {
|
|
1577
|
+
this.mainSessionLocusCache = null;
|
|
1578
|
+
}
|
|
1288
1579
|
}
|