@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151
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/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +359 -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 +1046 -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 -21
- 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 +0 -21
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +0 -21
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +0 -21
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +0 -21
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +0 -28
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +0 -21
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +0 -21
- 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 +0 -21
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +0 -21
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- 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 +7 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +208 -64
- 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 +300 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +78 -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 +387 -208
- 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 +90 -126
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +93 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +70 -219
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +74 -198
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -8
- 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 +79 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2685 -3324
- 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 +243 -185
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +296 -342
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +0 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js +16 -26
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +446 -585
- 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 +8 -31
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +261 -242
- 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 +526 -372
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +21 -40
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +172 -141
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -57
- 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 +123 -162
- 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 +75 -147
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +170 -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 +73 -94
- 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 +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +24 -51
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +3 -38
- 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 +18 -24
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +356 -476
- 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 +32 -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 -462
- 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 +9 -44
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +43 -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 +72 -0
- package/dist/types/constants.d.ts +978 -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 +86 -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 +149 -0
- package/dist/types/meeting/index.d.ts +1509 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +270 -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 +75 -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 +364 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +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 +104 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +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/package.json +28 -21
- package/src/annotation/annotation.types.ts +52 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +343 -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 +921 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/config.ts +5 -7
- package/src/constants.ts +155 -20
- 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 +286 -0
- package/src/index.ts +34 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +310 -21
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +2 -1
- package/src/locus-info/selfUtils.ts +71 -1
- package/src/media/index.ts +70 -142
- package/src/media/properties.ts +41 -104
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +156 -0
- package/src/meeting/index.ts +1730 -1768
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +100 -91
- package/src/meeting/request.type.ts +2 -0
- package/src/meeting/util.ts +421 -421
- package/src/meeting-info/meeting-info-v2.ts +134 -13
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +375 -83
- package/src/meetings/meetings.types.ts +9 -0
- package/src/meetings/request.ts +3 -1
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +40 -0
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +81 -1
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +108 -6
- package/src/members/request.ts +98 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/config.ts +49 -10
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +43 -27
- package/src/multistream/mediaRequestManager.ts +210 -45
- package/src/multistream/receiveSlot.ts +68 -26
- package/src/multistream/receiveSlotManager.ts +61 -38
- package/src/multistream/remoteMedia.ts +29 -3
- package/src/multistream/remoteMediaGroup.ts +61 -2
- package/src/multistream/remoteMediaManager.ts +260 -66
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +75 -25
- package/src/reachability/request.ts +10 -5
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +28 -3
- package/src/reconnection-manager/index.ts +53 -32
- 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 +21 -30
- package/src/roap/request.ts +51 -52
- package/src/roap/turnDiscovery.ts +51 -27
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +380 -390
- package/src/statsAnalyzer/mqaUtil.ts +106 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +332 -255
- package/test/integration/spec/space-meeting.js +78 -5
- package/test/integration/spec/transcription.js +1 -1
- package/test/unit/spec/annotation/index.ts +436 -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 +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +518 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/locus-info/controlsUtils.js +303 -30
- package/test/unit/spec/locus-info/index.js +615 -4
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/selfConstant.js +38 -0
- package/test/unit/spec/locus-info/selfUtils.js +200 -0
- package/test/unit/spec/media/index.ts +118 -22
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
- package/test/unit/spec/meeting/index.js +2394 -1381
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +354 -42
- package/test/unit/spec/meeting/utils.js +268 -156
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +842 -128
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +24 -0
- package/test/unit/spec/member/util.js +384 -32
- package/test/unit/spec/members/index.js +320 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +98 -0
- package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- 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 +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +176 -25
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +46 -13
- 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 -51
- package/test/unit/spec/roap/request.ts +187 -0
- package/test/unit/spec/roap/turnDiscovery.ts +73 -34
- package/test/unit/spec/stats-analyzer/index.js +94 -43
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- 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 -117
- 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 -93
- package/test/unit/spec/meeting/effectsState.js +0 -281
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {isEqual} from 'lodash';
|
|
2
|
+
import {BREAKOUTS} from '../constants';
|
|
2
3
|
|
|
3
4
|
const ControlsUtils: any = {};
|
|
4
5
|
|
|
@@ -48,6 +49,41 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
48
49
|
: null;
|
|
49
50
|
}
|
|
50
51
|
|
|
52
|
+
if (controls && controls.video) {
|
|
53
|
+
parsedControls.videoEnabled = controls.video.enabled;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (controls?.muteOnEntry) {
|
|
57
|
+
parsedControls.muteOnEntry = {enabled: controls.muteOnEntry.enabled};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (controls?.shareControl) {
|
|
61
|
+
parsedControls.shareControl = {control: controls.shareControl.control};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (controls?.disallowUnmute) {
|
|
65
|
+
parsedControls.disallowUnmute = {enabled: controls.disallowUnmute.enabled};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (controls?.reactions) {
|
|
69
|
+
parsedControls.reactions = {
|
|
70
|
+
enabled: controls.reactions.enabled,
|
|
71
|
+
showDisplayNameWithReactions: controls.reactions.showDisplayNameWithReactions,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (controls?.viewTheParticipantList) {
|
|
76
|
+
parsedControls.viewTheParticipantList = {enabled: controls.viewTheParticipantList.enabled};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (controls?.raiseHand) {
|
|
80
|
+
parsedControls.raiseHand = {enabled: controls.raiseHand.enabled};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (controls?.video) {
|
|
84
|
+
parsedControls.video = {enabled: controls.video.enabled};
|
|
85
|
+
}
|
|
86
|
+
|
|
51
87
|
return parsedControls;
|
|
52
88
|
};
|
|
53
89
|
|
|
@@ -65,6 +101,26 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
65
101
|
previous,
|
|
66
102
|
current,
|
|
67
103
|
updates: {
|
|
104
|
+
hasMuteOnEntryChanged: current?.muteOnEntry?.enabled !== previous?.muteOnEntry?.enabled,
|
|
105
|
+
|
|
106
|
+
hasShareControlChanged: current?.shareControl?.control !== previous?.shareControl?.control,
|
|
107
|
+
|
|
108
|
+
hasDisallowUnmuteChanged:
|
|
109
|
+
current?.disallowUnmute?.enabled !== previous?.disallowUnmute?.enabled,
|
|
110
|
+
|
|
111
|
+
hasReactionsChanged: current?.reactions?.enabled !== previous?.reactions?.enabled,
|
|
112
|
+
|
|
113
|
+
hasReactionDisplayNamesChanged:
|
|
114
|
+
current?.reactions?.showDisplayNameWithReactions !==
|
|
115
|
+
previous?.reactions?.showDisplayNameWithReactions,
|
|
116
|
+
|
|
117
|
+
hasViewTheParticipantListChanged:
|
|
118
|
+
current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled,
|
|
119
|
+
|
|
120
|
+
hasRaiseHandChanged: current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,
|
|
121
|
+
|
|
122
|
+
hasVideoChanged: current?.video?.enabled !== previous?.video?.enabled,
|
|
123
|
+
|
|
68
124
|
hasRecordingPausedChanged:
|
|
69
125
|
current?.record &&
|
|
70
126
|
!isEqual(previous?.record?.paused, current.record.paused) &&
|
|
@@ -92,6 +148,12 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
92
148
|
!isEqual(previous?.entryExitTone, current?.entryExitTone) &&
|
|
93
149
|
(previous?.entryExitTone || current?.entryExitTone)
|
|
94
150
|
),
|
|
151
|
+
|
|
152
|
+
hasBreakoutChanged: !isEqual(previous?.breakout, current?.breakout),
|
|
153
|
+
|
|
154
|
+
hasVideoEnabledChanged:
|
|
155
|
+
newControls.video?.enabled !== undefined &&
|
|
156
|
+
!isEqual(previous?.videoEnabled, current?.videoEnabled),
|
|
95
157
|
},
|
|
96
158
|
};
|
|
97
159
|
};
|
|
@@ -109,4 +171,50 @@ ControlsUtils.getId = (controls: any) => {
|
|
|
109
171
|
return null;
|
|
110
172
|
};
|
|
111
173
|
|
|
174
|
+
/**
|
|
175
|
+
* check whether to replace the meeting's members or not.
|
|
176
|
+
* For case joined breakout session, need replace meeting's members
|
|
177
|
+
* @param {LocusControls} oldControls
|
|
178
|
+
* @param {LocusControls} controls
|
|
179
|
+
* @returns {Boolean}
|
|
180
|
+
*/
|
|
181
|
+
ControlsUtils.isNeedReplaceMembers = (oldControls: any, controls: any) => {
|
|
182
|
+
// no breakout case
|
|
183
|
+
if (!oldControls?.breakout || !controls?.breakout) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return (
|
|
188
|
+
oldControls.breakout.groupId !== controls.breakout.groupId ||
|
|
189
|
+
oldControls.breakout.sessionId !== controls.breakout.sessionId
|
|
190
|
+
);
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* determine the switch status between breakout session and main session.
|
|
195
|
+
* @param {LocusControls} oldControls
|
|
196
|
+
* @param {LocusControls} controls
|
|
197
|
+
* @returns {Object}
|
|
198
|
+
*/
|
|
199
|
+
ControlsUtils.getSessionSwitchStatus = (oldControls: any, controls: any) => {
|
|
200
|
+
const status = {isReturnToMain: false, isJoinToBreakout: false};
|
|
201
|
+
// no breakout case
|
|
202
|
+
if (!oldControls?.breakout || !controls?.breakout) {
|
|
203
|
+
return status;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
status.isReturnToMain =
|
|
207
|
+
oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT &&
|
|
208
|
+
controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
|
|
209
|
+
status.isJoinToBreakout =
|
|
210
|
+
oldControls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.MAIN &&
|
|
211
|
+
controls.breakout.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
212
|
+
|
|
213
|
+
return status;
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
ControlsUtils.isMainSessionDTO = (locus: any) => {
|
|
217
|
+
return locus?.controls?.breakout?.sessionType !== BREAKOUTS.SESSION_TYPES.BREAKOUT;
|
|
218
|
+
};
|
|
219
|
+
|
|
112
220
|
export default ControlsUtils;
|
package/src/locus-info/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {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';
|
|
@@ -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
|
|
@@ -208,7 +220,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
208
220
|
parse(meeting: any, data: any) {
|
|
209
221
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
210
222
|
const {eventType} = data;
|
|
211
|
-
|
|
223
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
212
224
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
213
225
|
|
|
214
226
|
switch (eventType) {
|
|
@@ -226,16 +238,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
226
238
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
227
239
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
228
240
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
229
|
-
this.onFullLocus(
|
|
241
|
+
this.onFullLocus(locus, eventType);
|
|
230
242
|
break;
|
|
231
243
|
case LOCUSEVENT.DIFFERENCE:
|
|
232
|
-
this.handleLocusDelta(
|
|
244
|
+
this.handleLocusDelta(locus, meeting);
|
|
233
245
|
break;
|
|
234
246
|
|
|
235
247
|
default:
|
|
236
248
|
// Why will there be a event with no eventType ????
|
|
237
249
|
// we may not need this, we can get full locus
|
|
238
|
-
this.handleLocusDelta(
|
|
250
|
+
this.handleLocusDelta(locus, meeting);
|
|
239
251
|
}
|
|
240
252
|
}
|
|
241
253
|
|
|
@@ -267,8 +279,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
267
279
|
this.updateParticipantDeltas(locus.participants);
|
|
268
280
|
this.scheduledMeeting = locus.meeting || null;
|
|
269
281
|
this.participants = locus.participants;
|
|
282
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
270
283
|
this.updateLocusInfo(locus);
|
|
271
|
-
this.updateParticipants(locus.participants);
|
|
284
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
272
285
|
this.isMeetingActive();
|
|
273
286
|
this.handleOneOnOneEvent(eventType);
|
|
274
287
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -327,8 +340,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
327
340
|
* @memberof LocusInfo
|
|
328
341
|
*/
|
|
329
342
|
onDeltaLocus(locus: any) {
|
|
343
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
330
344
|
this.updateLocusInfo(locus);
|
|
331
|
-
this.updateParticipants(locus.participants);
|
|
345
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
332
346
|
this.isMeetingActive();
|
|
333
347
|
}
|
|
334
348
|
|
|
@@ -337,8 +351,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
337
351
|
* @returns {undefined}
|
|
338
352
|
* @memberof LocusInfo
|
|
339
353
|
*/
|
|
340
|
-
updateLocusInfo(locus
|
|
341
|
-
|
|
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);
|
|
342
363
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
343
364
|
this.updateCreated(locus.created);
|
|
344
365
|
this.updateFullState(locus.fullState);
|
|
@@ -355,6 +376,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
355
376
|
this.updateMemberShip(locus.membership);
|
|
356
377
|
this.updateIdentifiers(locus.identities);
|
|
357
378
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
379
|
+
this.updateServices(locus.links?.services);
|
|
358
380
|
this.compareAndUpdate();
|
|
359
381
|
// update which required to compare different objects from locus
|
|
360
382
|
}
|
|
@@ -636,13 +658,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
636
658
|
}
|
|
637
659
|
|
|
638
660
|
/**
|
|
639
|
-
*
|
|
661
|
+
* update meeting's members
|
|
640
662
|
* @param {Object} participants new participants object
|
|
641
|
-
* @param {
|
|
663
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
642
664
|
* @returns {Array} updatedParticipants
|
|
643
665
|
* @memberof LocusInfo
|
|
644
666
|
*/
|
|
645
|
-
updateParticipants(participants: object) {
|
|
667
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
646
668
|
this.emitScoped(
|
|
647
669
|
{
|
|
648
670
|
file: 'locus-info',
|
|
@@ -655,16 +677,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
655
677
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
656
678
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
657
679
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
680
|
+
isReplace,
|
|
658
681
|
}
|
|
659
682
|
);
|
|
660
683
|
}
|
|
661
684
|
|
|
662
685
|
/**
|
|
663
686
|
* @param {Object} controls
|
|
687
|
+
* @param {Object} self
|
|
664
688
|
* @returns {undefined}
|
|
665
689
|
* @memberof LocusInfo
|
|
666
690
|
*/
|
|
667
|
-
updateControls(controls: object) {
|
|
691
|
+
updateControls(controls: object, self: object) {
|
|
668
692
|
if (controls && !isEqual(this.controls, controls)) {
|
|
669
693
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
670
694
|
const {
|
|
@@ -674,10 +698,76 @@ export default class LocusInfo extends EventsScope {
|
|
|
674
698
|
hasMeetingContainerChanged,
|
|
675
699
|
hasTranscribeChanged,
|
|
676
700
|
hasEntryExitToneChanged,
|
|
701
|
+
hasBreakoutChanged,
|
|
702
|
+
hasVideoEnabledChanged,
|
|
703
|
+
hasMuteOnEntryChanged,
|
|
704
|
+
hasShareControlChanged,
|
|
705
|
+
hasDisallowUnmuteChanged,
|
|
706
|
+
hasReactionsChanged,
|
|
707
|
+
hasReactionDisplayNamesChanged,
|
|
708
|
+
hasViewTheParticipantListChanged,
|
|
709
|
+
hasRaiseHandChanged,
|
|
710
|
+
hasVideoChanged,
|
|
677
711
|
},
|
|
678
712
|
current,
|
|
679
713
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
680
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
|
+
|
|
681
771
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
682
772
|
let state = null;
|
|
683
773
|
|
|
@@ -737,9 +827,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
737
827
|
);
|
|
738
828
|
}
|
|
739
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
|
+
|
|
740
848
|
if (hasEntryExitToneChanged) {
|
|
741
849
|
const {entryExitTone} = current;
|
|
742
850
|
|
|
851
|
+
this.updateMeeting({entryExitTone});
|
|
852
|
+
|
|
743
853
|
this.emitScoped(
|
|
744
854
|
{
|
|
745
855
|
file: 'locus-info',
|
|
@@ -750,8 +860,26 @@ export default class LocusInfo extends EventsScope {
|
|
|
750
860
|
entryExitTone,
|
|
751
861
|
}
|
|
752
862
|
);
|
|
863
|
+
}
|
|
753
864
|
|
|
754
|
-
|
|
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
|
+
);
|
|
755
883
|
}
|
|
756
884
|
|
|
757
885
|
this.controls = controls;
|
|
@@ -789,6 +917,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
789
917
|
}
|
|
790
918
|
}
|
|
791
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
|
+
|
|
792
941
|
/**
|
|
793
942
|
* @param {Object} fullState
|
|
794
943
|
* @returns {undefined}
|
|
@@ -871,8 +1020,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
871
1020
|
* @memberof LocusInfo
|
|
872
1021
|
*/
|
|
873
1022
|
updateMeetingInfo(info: object, self?: object) {
|
|
874
|
-
|
|
875
|
-
|
|
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
|
+
) {
|
|
876
1028
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
877
1029
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
878
1030
|
|
|
@@ -911,6 +1063,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
911
1063
|
// Parses the info and adds necessary values
|
|
912
1064
|
this.updateMeeting(parsedInfo.current);
|
|
913
1065
|
}
|
|
1066
|
+
this.roles = roles;
|
|
914
1067
|
}
|
|
915
1068
|
|
|
916
1069
|
/**
|
|
@@ -951,6 +1104,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
951
1104
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
952
1105
|
|
|
953
1106
|
this.updateMeeting(parsedMediaShares.current);
|
|
1107
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1108
|
+
this.mediaShares = mediaShares;
|
|
954
1109
|
this.emitScoped(
|
|
955
1110
|
{
|
|
956
1111
|
file: 'locus-info',
|
|
@@ -962,8 +1117,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
962
1117
|
previous: parsedMediaShares.previous,
|
|
963
1118
|
}
|
|
964
1119
|
);
|
|
965
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
966
|
-
this.mediaShares = mediaShares;
|
|
967
1120
|
}
|
|
968
1121
|
}
|
|
969
1122
|
|
|
@@ -1041,6 +1194,17 @@ export default class LocusInfo extends EventsScope {
|
|
|
1041
1194
|
);
|
|
1042
1195
|
}
|
|
1043
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
|
+
|
|
1044
1208
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1045
1209
|
this.emitScoped(
|
|
1046
1210
|
{
|
|
@@ -1062,6 +1226,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1062
1226
|
self
|
|
1063
1227
|
);
|
|
1064
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
|
+
|
|
1241
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1242
|
+
this.emitScoped(
|
|
1243
|
+
{
|
|
1244
|
+
file: 'locus-info',
|
|
1245
|
+
function: 'updateSelf',
|
|
1246
|
+
},
|
|
1247
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1248
|
+
{
|
|
1249
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1250
|
+
// unmuteAllowed: not part of .self
|
|
1251
|
+
}
|
|
1252
|
+
);
|
|
1253
|
+
}
|
|
1065
1254
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1066
1255
|
this.emitScoped(
|
|
1067
1256
|
{
|
|
@@ -1276,4 +1465,104 @@ export default class LocusInfo extends EventsScope {
|
|
|
1276
1465
|
this.identities = identities;
|
|
1277
1466
|
}
|
|
1278
1467
|
}
|
|
1468
|
+
|
|
1469
|
+
/**
|
|
1470
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1471
|
+
* @param {Object} locus
|
|
1472
|
+
* @returns {undefined}
|
|
1473
|
+
* @memberof LocusInfo
|
|
1474
|
+
*/
|
|
1475
|
+
updateLocusCache(locus: any) {
|
|
1476
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1477
|
+
if (isMainSessionDTO) {
|
|
1478
|
+
this.updateMainSessionLocusCache(locus);
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
/**
|
|
1483
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1484
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1485
|
+
* @param {Object} newLocus
|
|
1486
|
+
* @returns {Object}
|
|
1487
|
+
* @memberof LocusInfo
|
|
1488
|
+
*/
|
|
1489
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1490
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);
|
|
1491
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1492
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1493
|
+
}
|
|
1494
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1495
|
+
this.emitScoped(
|
|
1496
|
+
{
|
|
1497
|
+
file: 'locus-info',
|
|
1498
|
+
function: 'updateControls',
|
|
1499
|
+
},
|
|
1500
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1501
|
+
{
|
|
1502
|
+
mainLocusUrl: this.url,
|
|
1503
|
+
}
|
|
1504
|
+
);
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
return newLocus;
|
|
1508
|
+
}
|
|
1509
|
+
|
|
1510
|
+
/**
|
|
1511
|
+
* merge participants by participant id
|
|
1512
|
+
* @param {Array} participants
|
|
1513
|
+
* @param {Array} sourceParticipants
|
|
1514
|
+
* @returns {Array} merged participants
|
|
1515
|
+
* @memberof LocusInfo
|
|
1516
|
+
*/
|
|
1517
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1518
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1519
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1520
|
+
if (!participants || !participants.length) {
|
|
1521
|
+
return sourceParticipants;
|
|
1522
|
+
}
|
|
1523
|
+
sourceParticipants.forEach((participant) => {
|
|
1524
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1525
|
+
if (existIndex > -1) {
|
|
1526
|
+
participants.splice(existIndex, 1, participant);
|
|
1527
|
+
} else {
|
|
1528
|
+
participants.push(participant);
|
|
1529
|
+
}
|
|
1530
|
+
});
|
|
1531
|
+
|
|
1532
|
+
return participants;
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1535
|
+
/**
|
|
1536
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1537
|
+
* @param {Object} mainLocus
|
|
1538
|
+
* @returns {undefined}
|
|
1539
|
+
* @memberof LocusInfo
|
|
1540
|
+
*/
|
|
1541
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1542
|
+
if (!mainLocus) {
|
|
1543
|
+
return;
|
|
1544
|
+
}
|
|
1545
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1546
|
+
if (this.mainSessionLocusCache) {
|
|
1547
|
+
// shallow merge and do special merge for participants
|
|
1548
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1549
|
+
if (key === 'participants') {
|
|
1550
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1551
|
+
}
|
|
1552
|
+
|
|
1553
|
+
return srcValue || objValue;
|
|
1554
|
+
});
|
|
1555
|
+
} else {
|
|
1556
|
+
this.mainSessionLocusCache = locusClone;
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
/**
|
|
1561
|
+
* clear main session cache
|
|
1562
|
+
* @returns {undefined}
|
|
1563
|
+
* @memberof LocusInfo
|
|
1564
|
+
*/
|
|
1565
|
+
clearMainSessionLocusCache() {
|
|
1566
|
+
this.mainSessionLocusCache = null;
|
|
1567
|
+
}
|
|
1279
1568
|
}
|