@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.110
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/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 +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +176 -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 +942 -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 +193 -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 +286 -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 +94 -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 +383 -212
- 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 +12 -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 +99 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +62 -147
- 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 +67 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2477 -2417
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +252 -113
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +296 -289
- 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 +58 -217
- 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 +278 -281
- 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 +155 -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 +675 -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 +177 -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 +162 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +58 -53
- 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 +107 -44
- 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 +3 -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 +38 -67
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -134
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +149 -101
- 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 +34 -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 +984 -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 +137 -0
- package/dist/types/meeting/index.d.ts +1753 -0
- package/dist/types/meeting/muteState.d.ts +185 -0
- package/dist/types/meeting/request.d.ts +275 -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 +2 -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 +115 -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 +69 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +195 -0
- package/dist/types/metrics/constants.d.ts +54 -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 +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +88 -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 +41 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +141 -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 +832 -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 +141 -6
- 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 +274 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +145 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +326 -55
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +187 -56
- package/src/media/index.ts +142 -172
- 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 +139 -3
- package/src/meeting/index.ts +2674 -1543
- package/src/meeting/muteState.ts +271 -68
- package/src/meeting/request.ts +231 -135
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +119 -110
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +201 -113
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +70 -55
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +749 -437
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +122 -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 +281 -129
- package/src/members/request.ts +87 -14
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +140 -49
- package/src/metrics/config.ts +302 -90
- package/src/metrics/constants.ts +1 -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 +63 -51
- package/src/roap/request.ts +86 -53
- package/src/roap/turnDiscovery.ts +105 -46
- 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 +435 -0
- package/test/unit/spec/breakouts/breakout.ts +184 -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 +1524 -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 +289 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +585 -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/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +110 -103
- package/test/unit/spec/locus-info/selfUtils.js +236 -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 +66 -3
- package/test/unit/spec/meeting/index.js +2934 -946
- package/test/unit/spec/meeting/muteState.js +368 -70
- package/test/unit/spec/meeting/request.js +194 -44
- package/test/unit/spec/meeting/utils.js +146 -165
- package/test/unit/spec/meeting-info/meetinginfov2.js +333 -74
- 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 +1052 -329
- package/test/unit/spec/meetings/utils.js +163 -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 +402 -54
- package/test/unit/spec/members/request.js +76 -20
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +104 -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 +21 -16
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +93 -49
- 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,78 @@ 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,
|
|
680
710
|
},
|
|
681
711
|
current,
|
|
682
712
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
683
713
|
|
|
714
|
+
if (hasMuteOnEntryChanged) {
|
|
715
|
+
this.emitScoped(
|
|
716
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
717
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
718
|
+
{state: current.muteOnEntry}
|
|
719
|
+
);
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (hasShareControlChanged) {
|
|
723
|
+
this.emitScoped(
|
|
724
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
725
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
726
|
+
{state: current.shareControl}
|
|
727
|
+
);
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
if (hasDisallowUnmuteChanged) {
|
|
731
|
+
this.emitScoped(
|
|
732
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
733
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
734
|
+
{state: current.disallowUnmute}
|
|
735
|
+
);
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
739
|
+
this.emitScoped(
|
|
740
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
741
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
742
|
+
{state: current.reactions}
|
|
743
|
+
);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
if (hasViewTheParticipantListChanged) {
|
|
747
|
+
this.emitScoped(
|
|
748
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
749
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
750
|
+
{state: current.viewTheParticipantList}
|
|
751
|
+
);
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
if (hasRaiseHandChanged) {
|
|
755
|
+
this.emitScoped(
|
|
756
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
757
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
758
|
+
{state: current.raiseHand}
|
|
759
|
+
);
|
|
760
|
+
}
|
|
761
|
+
|
|
684
762
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
685
763
|
let state = null;
|
|
686
764
|
|
|
687
765
|
if (hasRecordingPausedChanged) {
|
|
688
766
|
if (current.record.paused) {
|
|
689
767
|
state = RECORDING_STATE.PAUSED;
|
|
690
|
-
}
|
|
691
|
-
else {
|
|
768
|
+
} else {
|
|
692
769
|
// state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
|
|
693
770
|
state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
|
|
694
771
|
}
|
|
695
|
-
}
|
|
696
|
-
else if (hasRecordingChanged) {
|
|
772
|
+
} else if (hasRecordingChanged) {
|
|
697
773
|
state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
|
|
698
774
|
}
|
|
699
775
|
|
|
@@ -742,9 +818,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
742
818
|
);
|
|
743
819
|
}
|
|
744
820
|
|
|
821
|
+
if (hasBreakoutChanged) {
|
|
822
|
+
const {breakout} = current;
|
|
823
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
824
|
+
self,
|
|
825
|
+
this.webex.internal.device.url
|
|
826
|
+
);
|
|
827
|
+
this.emitScoped(
|
|
828
|
+
{
|
|
829
|
+
file: 'locus-info',
|
|
830
|
+
function: 'updateControls',
|
|
831
|
+
},
|
|
832
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
|
|
833
|
+
{
|
|
834
|
+
breakout,
|
|
835
|
+
}
|
|
836
|
+
);
|
|
837
|
+
}
|
|
838
|
+
|
|
745
839
|
if (hasEntryExitToneChanged) {
|
|
746
840
|
const {entryExitTone} = current;
|
|
747
841
|
|
|
842
|
+
this.updateMeeting({entryExitTone});
|
|
843
|
+
|
|
748
844
|
this.emitScoped(
|
|
749
845
|
{
|
|
750
846
|
file: 'locus-info',
|
|
@@ -752,11 +848,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
752
848
|
},
|
|
753
849
|
LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
|
|
754
850
|
{
|
|
755
|
-
entryExitTone
|
|
851
|
+
entryExitTone,
|
|
756
852
|
}
|
|
757
853
|
);
|
|
854
|
+
}
|
|
758
855
|
|
|
759
|
-
|
|
856
|
+
// videoEnabled is handled differently than other controls,
|
|
857
|
+
// to fit with audio mute status logic
|
|
858
|
+
if (hasVideoEnabledChanged) {
|
|
859
|
+
const {videoEnabled} = current;
|
|
860
|
+
|
|
861
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
862
|
+
|
|
863
|
+
this.emitScoped(
|
|
864
|
+
{
|
|
865
|
+
file: 'locus-info',
|
|
866
|
+
function: 'updateControls',
|
|
867
|
+
},
|
|
868
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
869
|
+
{
|
|
870
|
+
// muted: not part of locus.controls
|
|
871
|
+
unmuteAllowed: videoEnabled,
|
|
872
|
+
}
|
|
873
|
+
);
|
|
760
874
|
}
|
|
761
875
|
|
|
762
876
|
this.controls = controls;
|
|
@@ -773,8 +887,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
773
887
|
if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
|
|
774
888
|
this.conversationUrl = conversationUrl;
|
|
775
889
|
this.updateMeeting({conversationUrl});
|
|
776
|
-
}
|
|
777
|
-
else if (
|
|
890
|
+
} else if (
|
|
778
891
|
info &&
|
|
779
892
|
info.conversationUrl &&
|
|
780
893
|
!isEqual(this.conversationUrl, info.conversationUrl)
|
|
@@ -795,6 +908,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
795
908
|
}
|
|
796
909
|
}
|
|
797
910
|
|
|
911
|
+
/**
|
|
912
|
+
* @param {Object} services
|
|
913
|
+
* @returns {undefined}
|
|
914
|
+
* @memberof LocusInfo
|
|
915
|
+
*/
|
|
916
|
+
updateServices(services: Record<'breakout' | 'record', {url: string}>) {
|
|
917
|
+
if (services && !isEqual(this.services, services)) {
|
|
918
|
+
this.services = services;
|
|
919
|
+
this.emitScoped(
|
|
920
|
+
{
|
|
921
|
+
file: 'locus-info',
|
|
922
|
+
function: 'updateServices',
|
|
923
|
+
},
|
|
924
|
+
LOCUSINFO.EVENTS.LINKS_SERVICES,
|
|
925
|
+
{
|
|
926
|
+
services,
|
|
927
|
+
}
|
|
928
|
+
);
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
|
|
798
932
|
/**
|
|
799
933
|
* @param {Object} fullState
|
|
800
934
|
* @returns {undefined}
|
|
@@ -865,8 +999,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
865
999
|
);
|
|
866
1000
|
}
|
|
867
1001
|
this.host = host;
|
|
868
|
-
}
|
|
869
|
-
else {
|
|
1002
|
+
} else {
|
|
870
1003
|
this.compareAndUpdateFlags.compareSelfAndHost = false;
|
|
871
1004
|
}
|
|
872
1005
|
}
|
|
@@ -878,8 +1011,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
878
1011
|
* @memberof LocusInfo
|
|
879
1012
|
*/
|
|
880
1013
|
updateMeetingInfo(info: object, self?: object) {
|
|
881
|
-
|
|
882
|
-
|
|
1014
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
1015
|
+
if (
|
|
1016
|
+
(info && !isEqual(this.info, info)) ||
|
|
1017
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
1018
|
+
) {
|
|
883
1019
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
884
1020
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
885
1021
|
|
|
@@ -918,6 +1054,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
918
1054
|
// Parses the info and adds necessary values
|
|
919
1055
|
this.updateMeeting(parsedInfo.current);
|
|
920
1056
|
}
|
|
1057
|
+
this.roles = roles;
|
|
921
1058
|
}
|
|
922
1059
|
|
|
923
1060
|
/**
|
|
@@ -958,6 +1095,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
958
1095
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
959
1096
|
|
|
960
1097
|
this.updateMeeting(parsedMediaShares.current);
|
|
1098
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1099
|
+
this.mediaShares = mediaShares;
|
|
961
1100
|
this.emitScoped(
|
|
962
1101
|
{
|
|
963
1102
|
file: 'locus-info',
|
|
@@ -969,8 +1108,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
969
1108
|
previous: parsedMediaShares.previous,
|
|
970
1109
|
}
|
|
971
1110
|
);
|
|
972
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
973
|
-
this.mediaShares = mediaShares;
|
|
974
1111
|
}
|
|
975
1112
|
}
|
|
976
1113
|
|
|
@@ -1033,8 +1170,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1033
1170
|
|
|
1034
1171
|
if (parsedSelves.updates.moderatorChanged) {
|
|
1035
1172
|
this.compareAndUpdateFlags.compareHostAndSelf = true;
|
|
1036
|
-
}
|
|
1037
|
-
else {
|
|
1173
|
+
} else {
|
|
1038
1174
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1039
1175
|
}
|
|
1040
1176
|
|
|
@@ -1049,6 +1185,17 @@ export default class LocusInfo extends EventsScope {
|
|
|
1049
1185
|
);
|
|
1050
1186
|
}
|
|
1051
1187
|
|
|
1188
|
+
if (parsedSelves.updates.breakoutsChanged) {
|
|
1189
|
+
this.emitScoped(
|
|
1190
|
+
{
|
|
1191
|
+
file: 'locus-info',
|
|
1192
|
+
function: 'updateSelf',
|
|
1193
|
+
},
|
|
1194
|
+
LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
|
|
1195
|
+
{breakoutSessions: parsedSelves.current.breakoutSessions}
|
|
1196
|
+
);
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1052
1199
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1053
1200
|
this.emitScoped(
|
|
1054
1201
|
{
|
|
@@ -1070,6 +1217,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1070
1217
|
self
|
|
1071
1218
|
);
|
|
1072
1219
|
}
|
|
1220
|
+
// When the user upgrades to moderator or cohost
|
|
1221
|
+
if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {
|
|
1222
|
+
this.emitScoped(
|
|
1223
|
+
{
|
|
1224
|
+
file: 'locus-info',
|
|
1225
|
+
function: 'updateSelf',
|
|
1226
|
+
},
|
|
1227
|
+
LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,
|
|
1228
|
+
self
|
|
1229
|
+
);
|
|
1230
|
+
}
|
|
1231
|
+
//
|
|
1232
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1233
|
+
this.emitScoped(
|
|
1234
|
+
{
|
|
1235
|
+
file: 'locus-info',
|
|
1236
|
+
function: 'updateSelf',
|
|
1237
|
+
},
|
|
1238
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1239
|
+
{
|
|
1240
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1241
|
+
// unmuteAllowed: not part of .self
|
|
1242
|
+
}
|
|
1243
|
+
);
|
|
1244
|
+
}
|
|
1073
1245
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1074
1246
|
this.emitScoped(
|
|
1075
1247
|
{
|
|
@@ -1204,8 +1376,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1204
1376
|
this.parsedLocus.self = parsedSelves.current;
|
|
1205
1377
|
// @ts-ignore
|
|
1206
1378
|
this.self = self;
|
|
1207
|
-
}
|
|
1208
|
-
else {
|
|
1379
|
+
} else {
|
|
1209
1380
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1210
1381
|
}
|
|
1211
1382
|
}
|
|
@@ -1285,4 +1456,104 @@ export default class LocusInfo extends EventsScope {
|
|
|
1285
1456
|
this.identities = identities;
|
|
1286
1457
|
}
|
|
1287
1458
|
}
|
|
1459
|
+
|
|
1460
|
+
/**
|
|
1461
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1462
|
+
* @param {Object} locus
|
|
1463
|
+
* @returns {undefined}
|
|
1464
|
+
* @memberof LocusInfo
|
|
1465
|
+
*/
|
|
1466
|
+
updateLocusCache(locus: any) {
|
|
1467
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1468
|
+
if (isMainSessionDTO) {
|
|
1469
|
+
this.updateMainSessionLocusCache(locus);
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
/**
|
|
1474
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1475
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1476
|
+
* @param {Object} newLocus
|
|
1477
|
+
* @returns {Object}
|
|
1478
|
+
* @memberof LocusInfo
|
|
1479
|
+
*/
|
|
1480
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1481
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);
|
|
1482
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1483
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1484
|
+
}
|
|
1485
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1486
|
+
this.emitScoped(
|
|
1487
|
+
{
|
|
1488
|
+
file: 'locus-info',
|
|
1489
|
+
function: 'updateControls',
|
|
1490
|
+
},
|
|
1491
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1492
|
+
{
|
|
1493
|
+
mainLocusUrl: this.url,
|
|
1494
|
+
}
|
|
1495
|
+
);
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
return newLocus;
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
/**
|
|
1502
|
+
* merge participants by participant id
|
|
1503
|
+
* @param {Array} participants
|
|
1504
|
+
* @param {Array} sourceParticipants
|
|
1505
|
+
* @returns {Array} merged participants
|
|
1506
|
+
* @memberof LocusInfo
|
|
1507
|
+
*/
|
|
1508
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1509
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1510
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1511
|
+
if (!participants || !participants.length) {
|
|
1512
|
+
return sourceParticipants;
|
|
1513
|
+
}
|
|
1514
|
+
sourceParticipants.forEach((participant) => {
|
|
1515
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1516
|
+
if (existIndex > -1) {
|
|
1517
|
+
participants.splice(existIndex, 1, participant);
|
|
1518
|
+
} else {
|
|
1519
|
+
participants.push(participant);
|
|
1520
|
+
}
|
|
1521
|
+
});
|
|
1522
|
+
|
|
1523
|
+
return participants;
|
|
1524
|
+
}
|
|
1525
|
+
|
|
1526
|
+
/**
|
|
1527
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1528
|
+
* @param {Object} mainLocus
|
|
1529
|
+
* @returns {undefined}
|
|
1530
|
+
* @memberof LocusInfo
|
|
1531
|
+
*/
|
|
1532
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1533
|
+
if (!mainLocus) {
|
|
1534
|
+
return;
|
|
1535
|
+
}
|
|
1536
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1537
|
+
if (this.mainSessionLocusCache) {
|
|
1538
|
+
// shallow merge and do special merge for participants
|
|
1539
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1540
|
+
if (key === 'participants') {
|
|
1541
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
return srcValue || objValue;
|
|
1545
|
+
});
|
|
1546
|
+
} else {
|
|
1547
|
+
this.mainSessionLocusCache = locusClone;
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
/**
|
|
1552
|
+
* clear main session cache
|
|
1553
|
+
* @returns {undefined}
|
|
1554
|
+
* @memberof LocusInfo
|
|
1555
|
+
*/
|
|
1556
|
+
clearMainSessionLocusCache() {
|
|
1557
|
+
this.mainSessionLocusCache = null;
|
|
1558
|
+
}
|
|
1288
1559
|
}
|