@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400
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 +58 -8
- 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 +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -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 +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -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 +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- 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 +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +54 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- 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 +41 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +11 -15
- package/dist/config.js.map +1 -1
- package/dist/constants.js +347 -74
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +125 -18
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.js +93 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +380 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -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 +564 -246
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +10 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +82 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +314 -163
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +107 -231
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +137 -222
- 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 +316 -501
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +97 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +5311 -3871
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +260 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +421 -347
- 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 +672 -585
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +172 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +87 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +352 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +99 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +147 -234
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +43 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +895 -600
- 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 +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +184 -157
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +134 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +158 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +194 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- 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 +324 -259
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +19 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +263 -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 +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +82 -45
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +657 -448
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +255 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- 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/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +297 -460
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +20 -26
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +413 -483
- 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 +362 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +102 -86
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +131 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +437 -116
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +179 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +557 -583
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +326 -130
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -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/reclaim-host-role-errors.d.ts +60 -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 +93 -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 +36 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1088 -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/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +272 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/types/meeting/index.d.ts +1824 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +178 -0
- package/dist/types/meeting/request.d.ts +293 -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 +118 -0
- package/dist/types/meeting/voicea-meeting.d.ts +16 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +69 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -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 +40 -0
- package/dist/types/meetings/index.d.ts +389 -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 +160 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +215 -0
- package/dist/types/metrics/constants.d.ts +70 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +120 -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 +49 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +301 -0
- package/dist/types/multistream/sendSlotManager.d.ts +70 -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/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +105 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reachability/util.d.ts +8 -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 +136 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +86 -0
- package/dist/types/roap/request.d.ts +39 -0
- package/dist/types/roap/turnDiscovery.d.ts +155 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/internal-README.md +7 -6
- package/package.json +30 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +26 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +19 -21
- package/src/constants.ts +296 -27
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +45 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +349 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +561 -119
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +97 -17
- package/src/locus-info/{parser.js → parser.ts} +303 -104
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +460 -0
- package/src/media/properties.ts +283 -0
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +249 -0
- package/src/meeting/in-meeting-actions.ts +199 -3
- package/src/meeting/index.ts +8494 -0
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +465 -0
- package/src/meeting/request.ts +912 -0
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +799 -0
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +210 -0
- package/src/meeting-info/meeting-info-v2.ts +423 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +70 -58
- package/src/meeting-info/{utilv2.js → utilv2.ts} +99 -82
- package/src/meetings/collection.ts +76 -0
- package/src/meetings/index.ts +1539 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +133 -38
- package/src/member/{index.js → index.ts} +159 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +397 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +351 -146
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +353 -0
- package/src/metrics/{constants.js → constants.ts} +17 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +341 -64
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +82 -3
- package/src/multistream/remoteMediaManager.ts +401 -81
- package/src/multistream/sendSlotManager.ts +199 -0
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +371 -0
- package/src/reachability/request.ts +50 -35
- package/src/reachability/util.ts +24 -0
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/index.ts +643 -0
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +332 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/index.ts +288 -0
- package/src/roap/request.ts +153 -0
- package/src/roap/turnDiscovery.ts +374 -70
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +166 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1275 -0
- package/src/statsAnalyzer/mqaUtil.ts +440 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +791 -531
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +238 -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 +89 -0
- package/test/unit/spec/breakouts/index.ts +1793 -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/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +625 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1458 -21
- package/test/unit/spec/locus-info/infoUtils.js +71 -40
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
- package/test/unit/spec/locus-info/parser.js +119 -44
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +291 -12
- package/test/unit/spec/media/index.ts +194 -111
- package/test/unit/spec/media/properties.ts +11 -11
- package/test/unit/spec/meeting/in-meeting-actions.ts +96 -3
- package/test/unit/spec/meeting/index.js +8616 -1921
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +568 -207
- package/test/unit/spec/meeting/request.js +602 -82
- package/test/unit/spec/meeting/utils.js +867 -179
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +631 -78
- 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 +27 -1
- package/test/unit/spec/meetings/index.js +1826 -374
- package/test/unit/spec/meetings/utils.js +243 -14
- package/test/unit/spec/member/index.js +61 -7
- package/test/unit/spec/member/util.js +526 -26
- package/test/unit/spec/members/index.js +536 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +217 -4
- package/test/unit/spec/metrics/index.js +13 -68
- package/test/unit/spec/multistream/mediaRequestManager.ts +1032 -110
- 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 +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +350 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +937 -65
- package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
- 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/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +606 -26
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +222 -34
- package/test/unit/spec/recording-controller/index.js +306 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +238 -82
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +707 -110
- package/test/unit/spec/rtcMetrics/index.ts +122 -0
- package/test/unit/spec/stats-analyzer/index.js +1331 -62
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +65 -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 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/media/properties.js +0 -289
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/request.js +0 -684
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/collection.js +0 -40
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/reachability/index.js +0 -464
- package/src/reconnection-manager/index.js +0 -519
- package/src/roap/index.js +0 -220
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -17,16 +17,16 @@ import {
|
|
|
17
17
|
CALL_REMOVED_REASON,
|
|
18
18
|
RECORDING_STATE,
|
|
19
19
|
} from '../constants';
|
|
20
|
+
import InfoUtils from './infoUtils';
|
|
21
|
+
import FullState from './fullState';
|
|
22
|
+
import SelfUtils from './selfUtils';
|
|
23
|
+
import HostUtils from './hostUtils';
|
|
24
|
+
import ControlsUtils from './controlsUtils';
|
|
25
|
+
import EmbeddedAppsUtils from './embeddedAppsUtils';
|
|
26
|
+
import MediaSharesUtils from './mediaSharesUtils';
|
|
27
|
+
import LocusDeltaParser from './parser';
|
|
20
28
|
import Metrics from '../metrics';
|
|
21
|
-
import
|
|
22
|
-
import InfoUtils from '../locus-info/infoUtils';
|
|
23
|
-
import FullState from '../locus-info/fullState';
|
|
24
|
-
import SelfUtils from '../locus-info/selfUtils';
|
|
25
|
-
import HostUtils from '../locus-info/hostUtils';
|
|
26
|
-
import ControlsUtils from '../locus-info/controlsUtils';
|
|
27
|
-
import EmbeddedAppsUtils from '../locus-info/embeddedAppsUtils';
|
|
28
|
-
import MediaSharesUtils from '../locus-info/mediaSharesUtils';
|
|
29
|
-
import LocusDeltaParser from '../locus-info/parser';
|
|
29
|
+
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
|
|
@@ -35,6 +35,43 @@ import LocusDeltaParser from '../locus-info/parser';
|
|
|
35
35
|
* @class LocusInfo
|
|
36
36
|
*/
|
|
37
37
|
export default class LocusInfo extends EventsScope {
|
|
38
|
+
compareAndUpdateFlags: any;
|
|
39
|
+
emitChange: any;
|
|
40
|
+
locusParser: any;
|
|
41
|
+
meetingId: any;
|
|
42
|
+
parsedLocus: any;
|
|
43
|
+
updateMeeting: any;
|
|
44
|
+
webex: any;
|
|
45
|
+
aclUrl: any;
|
|
46
|
+
baseSequence: any;
|
|
47
|
+
created: any;
|
|
48
|
+
deltaParticipants: any;
|
|
49
|
+
identities: any;
|
|
50
|
+
membership: any;
|
|
51
|
+
participants: any;
|
|
52
|
+
participantsUrl: any;
|
|
53
|
+
replaces: any;
|
|
54
|
+
scheduledMeeting: any;
|
|
55
|
+
sequence: any;
|
|
56
|
+
controls: any;
|
|
57
|
+
conversationUrl: any;
|
|
58
|
+
embeddedApps: any;
|
|
59
|
+
fullState: any;
|
|
60
|
+
host: any;
|
|
61
|
+
info: any;
|
|
62
|
+
roles: any;
|
|
63
|
+
mediaShares: any;
|
|
64
|
+
replace: any;
|
|
65
|
+
url: any;
|
|
66
|
+
services: any;
|
|
67
|
+
mainSessionLocusCache: any;
|
|
68
|
+
/**
|
|
69
|
+
* Constructor
|
|
70
|
+
* @param {function} updateMeeting callback to update the meeting object from an object
|
|
71
|
+
* @param {object} webex
|
|
72
|
+
* @param {string} meetingId
|
|
73
|
+
* @returns {undefined}
|
|
74
|
+
*/
|
|
38
75
|
constructor(updateMeeting, webex, meetingId) {
|
|
39
76
|
super();
|
|
40
77
|
this.parsedLocus = {
|
|
@@ -48,6 +85,82 @@ export default class LocusInfo extends EventsScope {
|
|
|
48
85
|
this.locusParser = new LocusDeltaParser();
|
|
49
86
|
}
|
|
50
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
|
|
90
|
+
*
|
|
91
|
+
* @param {Meeting} meeting
|
|
92
|
+
* @returns {undefined}
|
|
93
|
+
*/
|
|
94
|
+
private doLocusSync(meeting: any) {
|
|
95
|
+
let isDelta;
|
|
96
|
+
let url;
|
|
97
|
+
|
|
98
|
+
if (this.locusParser.workingCopy.syncUrl) {
|
|
99
|
+
url = this.locusParser.workingCopy.syncUrl;
|
|
100
|
+
isDelta = true;
|
|
101
|
+
} else {
|
|
102
|
+
url = meeting.locusUrl;
|
|
103
|
+
isDelta = false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
LoggerProxy.logger.info(
|
|
107
|
+
`Locus-info:index#doLocusSync --> doing Locus sync (getting ${
|
|
108
|
+
isDelta ? 'delta' : 'full'
|
|
109
|
+
} DTO)`
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
// return value ignored on purpose
|
|
113
|
+
meeting.meetingRequest
|
|
114
|
+
.getLocusDTO({url})
|
|
115
|
+
.catch((e) => {
|
|
116
|
+
if (isDelta) {
|
|
117
|
+
LoggerProxy.logger.info(
|
|
118
|
+
'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {
|
|
122
|
+
correlationId: meeting.correlationId,
|
|
123
|
+
url,
|
|
124
|
+
reason: e.message,
|
|
125
|
+
errorName: e.name,
|
|
126
|
+
stack: e.stack,
|
|
127
|
+
code: e.code,
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
isDelta = false;
|
|
131
|
+
|
|
132
|
+
return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {
|
|
133
|
+
LoggerProxy.logger.info(
|
|
134
|
+
'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
|
|
135
|
+
);
|
|
136
|
+
this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
|
|
137
|
+
throw err;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
LoggerProxy.logger.info(
|
|
141
|
+
'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
|
|
142
|
+
);
|
|
143
|
+
this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
|
|
144
|
+
throw e;
|
|
145
|
+
})
|
|
146
|
+
.then((res) => {
|
|
147
|
+
if (isDelta) {
|
|
148
|
+
if (!isEmpty(res.body)) {
|
|
149
|
+
meeting.locusInfo.handleLocusDelta(res.body, meeting);
|
|
150
|
+
} else {
|
|
151
|
+
LoggerProxy.logger.info(
|
|
152
|
+
'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
meeting.locusInfo.onFullLocus(res.body);
|
|
157
|
+
}
|
|
158
|
+
// Notify parser to resume processing delta events.
|
|
159
|
+
// Any deltas in the queue that have now been superseded by this sync will simply be ignored
|
|
160
|
+
this.locusParser.resume();
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
|
|
51
164
|
/**
|
|
52
165
|
* Apply locus delta data to meeting
|
|
53
166
|
* @param {string} action Locus delta action
|
|
@@ -55,29 +168,20 @@ export default class LocusInfo extends EventsScope {
|
|
|
55
168
|
* @param {Meeting} meeting
|
|
56
169
|
* @returns {undefined}
|
|
57
170
|
*/
|
|
58
|
-
applyLocusDeltaData(action, locus, meeting) {
|
|
59
|
-
const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;
|
|
171
|
+
applyLocusDeltaData(action: string, locus: any, meeting: any) {
|
|
172
|
+
const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;
|
|
60
173
|
|
|
61
174
|
switch (action) {
|
|
62
175
|
case USE_INCOMING:
|
|
63
176
|
meeting.locusInfo.onDeltaLocus(locus);
|
|
64
177
|
break;
|
|
65
178
|
case USE_CURRENT:
|
|
66
|
-
|
|
67
|
-
|
|
179
|
+
case WAIT:
|
|
180
|
+
// do nothing
|
|
68
181
|
break;
|
|
69
182
|
case DESYNC:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
desync: true,
|
|
73
|
-
locusUrl: meeting.locusUrl,
|
|
74
|
-
})
|
|
75
|
-
.then((res) => {
|
|
76
|
-
meeting.locusInfo.onFullLocus(res.body);
|
|
77
|
-
// Notify parser to resume processing delta events
|
|
78
|
-
// now that we have full locus from DESYNC.
|
|
79
|
-
this.locusParser.resume();
|
|
80
|
-
});
|
|
183
|
+
case LOCUS_URL_CHANGED:
|
|
184
|
+
this.doLocusSync(meeting);
|
|
81
185
|
break;
|
|
82
186
|
default:
|
|
83
187
|
LoggerProxy.logger.info(
|
|
@@ -94,7 +198,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
94
198
|
* @param {Meeting} meeting
|
|
95
199
|
* @returns {undefined}
|
|
96
200
|
*/
|
|
97
|
-
handleLocusDelta(locus, meeting) {
|
|
201
|
+
handleLocusDelta(locus: any, meeting: any) {
|
|
98
202
|
// register a function to process delta actions
|
|
99
203
|
if (!this.locusParser.onDeltaAction) {
|
|
100
204
|
// delta action, along with associated loci
|
|
@@ -112,7 +216,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
112
216
|
* @returns {undefined}
|
|
113
217
|
* @memberof LocusInfo
|
|
114
218
|
*/
|
|
115
|
-
init(locus = {}) {
|
|
219
|
+
init(locus: any = {}) {
|
|
116
220
|
this.created = locus.created || null;
|
|
117
221
|
this.scheduledMeeting = locus.meeting || null;
|
|
118
222
|
this.participantsUrl = locus.participantsUrl || null;
|
|
@@ -143,12 +247,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
143
247
|
*/
|
|
144
248
|
this.deltaParticipants = [];
|
|
145
249
|
|
|
250
|
+
this.updateLocusCache(locus);
|
|
146
251
|
// above section only updates the locusInfo object
|
|
147
252
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
148
253
|
this.updateParticipants(locus.participants);
|
|
149
254
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
150
255
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
151
|
-
this.updateControls(locus.controls);
|
|
256
|
+
this.updateControls(locus.controls, locus.self);
|
|
152
257
|
this.updateLocusUrl(locus.url);
|
|
153
258
|
this.updateFullState(locus.fullState);
|
|
154
259
|
this.updateMeetingInfo(locus.info);
|
|
@@ -157,6 +262,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
157
262
|
this.updateSelf(locus.self, locus.participants);
|
|
158
263
|
this.updateHostInfo(locus.host);
|
|
159
264
|
this.updateMediaShares(locus.mediaShares);
|
|
265
|
+
this.updateServices(locus.links?.services);
|
|
160
266
|
}
|
|
161
267
|
|
|
162
268
|
/**
|
|
@@ -164,7 +270,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
164
270
|
* @returns {undefined}
|
|
165
271
|
* @memberof LocusInfo
|
|
166
272
|
*/
|
|
167
|
-
initialSetup(locus) {
|
|
273
|
+
initialSetup(locus: object) {
|
|
274
|
+
this.updateLocusCache(locus);
|
|
168
275
|
this.onFullLocus(locus);
|
|
169
276
|
|
|
170
277
|
// Change it to true after it receives it first locus object
|
|
@@ -177,9 +284,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
177
284
|
* @returns {undefined}
|
|
178
285
|
* @memberof LocusInfo
|
|
179
286
|
*/
|
|
180
|
-
parse(meeting, data) {
|
|
287
|
+
parse(meeting: any, data: any) {
|
|
288
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
181
289
|
const {eventType} = data;
|
|
182
|
-
|
|
290
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
183
291
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
184
292
|
|
|
185
293
|
switch (eventType) {
|
|
@@ -197,16 +305,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
197
305
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
198
306
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
199
307
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
200
|
-
this.onFullLocus(
|
|
308
|
+
this.onFullLocus(locus, eventType);
|
|
201
309
|
break;
|
|
202
310
|
case LOCUSEVENT.DIFFERENCE:
|
|
203
|
-
this.handleLocusDelta(
|
|
311
|
+
this.handleLocusDelta(locus, meeting);
|
|
204
312
|
break;
|
|
205
313
|
|
|
206
314
|
default:
|
|
207
315
|
// Why will there be a event with no eventType ????
|
|
208
316
|
// we may not need this, we can get full locus
|
|
209
|
-
this.handleLocusDelta(
|
|
317
|
+
this.handleLocusDelta(locus, meeting);
|
|
210
318
|
}
|
|
211
319
|
}
|
|
212
320
|
|
|
@@ -217,28 +325,38 @@ export default class LocusInfo extends EventsScope {
|
|
|
217
325
|
* @returns {undefined}
|
|
218
326
|
* @memberof LocusInfo
|
|
219
327
|
*/
|
|
220
|
-
emitScoped(scope, eventName, args) {
|
|
328
|
+
emitScoped(scope?: any, eventName?: string, args?: any) {
|
|
221
329
|
return this.emit(scope, eventName, args);
|
|
222
330
|
}
|
|
223
331
|
|
|
224
332
|
/**
|
|
225
333
|
* updates the locus with full locus object
|
|
226
334
|
* @param {object} locus locus object
|
|
227
|
-
* @param {
|
|
335
|
+
* @param {string} eventType particulat locus event
|
|
228
336
|
* @returns {object} null
|
|
229
337
|
* @memberof LocusInfo
|
|
230
338
|
*/
|
|
231
|
-
onFullLocus(locus, eventType) {
|
|
339
|
+
onFullLocus(locus: any, eventType?: string) {
|
|
232
340
|
if (!locus) {
|
|
233
341
|
LoggerProxy.logger.error(
|
|
234
342
|
'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'
|
|
235
343
|
);
|
|
236
344
|
}
|
|
345
|
+
|
|
346
|
+
if (!this.locusParser.isNewFullLocus(locus)) {
|
|
347
|
+
LoggerProxy.logger.info(
|
|
348
|
+
`Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`
|
|
349
|
+
);
|
|
350
|
+
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
|
|
237
354
|
this.updateParticipantDeltas(locus.participants);
|
|
238
355
|
this.scheduledMeeting = locus.meeting || null;
|
|
239
356
|
this.participants = locus.participants;
|
|
357
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
240
358
|
this.updateLocusInfo(locus);
|
|
241
|
-
this.updateParticipants(locus.participants);
|
|
359
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
242
360
|
this.isMeetingActive();
|
|
243
361
|
this.handleOneOnOneEvent(eventType);
|
|
244
362
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -252,7 +370,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
252
370
|
* @returns {undefined}
|
|
253
371
|
* @memberof LocusInfo
|
|
254
372
|
*/
|
|
255
|
-
|
|
373
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
374
|
+
handleOneOnOneEvent(eventType: string) {
|
|
256
375
|
if (
|
|
257
376
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
258
377
|
this.parsedLocus.fullState.type === _SIP_BRIDGE_
|
|
@@ -295,9 +414,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
295
414
|
* @returns {undefined}
|
|
296
415
|
* @memberof LocusInfo
|
|
297
416
|
*/
|
|
298
|
-
onDeltaLocus(locus) {
|
|
417
|
+
onDeltaLocus(locus: any) {
|
|
418
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
299
419
|
this.updateLocusInfo(locus);
|
|
300
|
-
this.updateParticipants(locus.participants);
|
|
420
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
301
421
|
this.isMeetingActive();
|
|
302
422
|
}
|
|
303
423
|
|
|
@@ -307,7 +427,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
307
427
|
* @memberof LocusInfo
|
|
308
428
|
*/
|
|
309
429
|
updateLocusInfo(locus) {
|
|
310
|
-
|
|
430
|
+
if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {
|
|
431
|
+
// When moved to a breakout session locus sends a message for the previous locus
|
|
432
|
+
// indicating that we have been moved. It isn't helpful to continue parsing this
|
|
433
|
+
// as it gets interpreted as if we have left the call
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
this.updateControls(locus.controls, locus.self);
|
|
311
438
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
312
439
|
this.updateCreated(locus.created);
|
|
313
440
|
this.updateFullState(locus.fullState);
|
|
@@ -324,6 +451,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
324
451
|
this.updateMemberShip(locus.membership);
|
|
325
452
|
this.updateIdentifiers(locus.identities);
|
|
326
453
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
454
|
+
this.updateServices(locus.links?.services);
|
|
327
455
|
this.compareAndUpdate();
|
|
328
456
|
// update which required to compare different objects from locus
|
|
329
457
|
}
|
|
@@ -334,7 +462,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
334
462
|
* @returns {Array}
|
|
335
463
|
* @memberof LocusInfo
|
|
336
464
|
*/
|
|
337
|
-
getLocusPartner(participants
|
|
465
|
+
getLocusPartner(participants: Array<any>, self: any) {
|
|
338
466
|
if (!participants || participants.length === 0) {
|
|
339
467
|
return null;
|
|
340
468
|
}
|
|
@@ -345,6 +473,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
345
473
|
self &&
|
|
346
474
|
participant.identity !== self.identity &&
|
|
347
475
|
(participants.length <= 2 || (participant.type === _USER_ && !participant.removed))
|
|
476
|
+
// @ts-ignore
|
|
348
477
|
) || this.partner
|
|
349
478
|
);
|
|
350
479
|
}
|
|
@@ -359,6 +488,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
359
488
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
360
489
|
this.parsedLocus.fullState.type === _SIP_BRIDGE_
|
|
361
490
|
) {
|
|
491
|
+
// @ts-ignore
|
|
362
492
|
const partner = this.getLocusPartner(this.participants, this.self);
|
|
363
493
|
|
|
364
494
|
this.updateMeeting({partner});
|
|
@@ -375,10 +505,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
375
505
|
LoggerProxy.logger.warn(
|
|
376
506
|
'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'
|
|
377
507
|
);
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
508
|
+
|
|
509
|
+
// @ts-ignore
|
|
510
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
511
|
+
name: 'client.call.remote-ended',
|
|
512
|
+
options: {
|
|
513
|
+
meetingId: this.meetingId,
|
|
514
|
+
},
|
|
381
515
|
});
|
|
516
|
+
|
|
382
517
|
this.emitScoped(
|
|
383
518
|
{
|
|
384
519
|
file: 'locus-info',
|
|
@@ -390,17 +525,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
390
525
|
shouldLeave: false,
|
|
391
526
|
}
|
|
392
527
|
);
|
|
393
|
-
}
|
|
394
|
-
else if (
|
|
528
|
+
} else if (
|
|
395
529
|
partner.state === MEETING_STATE.STATES.LEFT &&
|
|
396
530
|
this.parsedLocus.self &&
|
|
397
531
|
(this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||
|
|
398
532
|
this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
399
533
|
this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)
|
|
400
534
|
) {
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
535
|
+
// @ts-ignore
|
|
536
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
537
|
+
name: 'client.call.remote-ended',
|
|
538
|
+
options: {
|
|
539
|
+
meetingId: this.meetingId,
|
|
540
|
+
},
|
|
404
541
|
});
|
|
405
542
|
this.emitScoped(
|
|
406
543
|
{
|
|
@@ -414,8 +551,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
414
551
|
this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,
|
|
415
552
|
}
|
|
416
553
|
);
|
|
417
|
-
}
|
|
418
|
-
else if (
|
|
554
|
+
} else if (
|
|
419
555
|
this.parsedLocus.self &&
|
|
420
556
|
this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&
|
|
421
557
|
(partner.state === MEETING_STATE.STATES.LEFT ||
|
|
@@ -423,10 +559,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
423
559
|
partner.state === MEETING_STATE.STATES.NOTIFIED ||
|
|
424
560
|
partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media
|
|
425
561
|
) {
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
562
|
+
// @ts-ignore
|
|
563
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
564
|
+
name: 'client.call.remote-ended',
|
|
565
|
+
options: {
|
|
566
|
+
meetingId: this.meetingId,
|
|
567
|
+
},
|
|
429
568
|
});
|
|
569
|
+
|
|
430
570
|
this.emitScoped(
|
|
431
571
|
{
|
|
432
572
|
file: 'locus-info',
|
|
@@ -439,19 +579,23 @@ export default class LocusInfo extends EventsScope {
|
|
|
439
579
|
}
|
|
440
580
|
);
|
|
441
581
|
}
|
|
442
|
-
}
|
|
443
|
-
else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
582
|
+
} else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
444
583
|
if (
|
|
445
584
|
this.fullState &&
|
|
446
585
|
(this.fullState.state === LOCUS.STATE.INACTIVE ||
|
|
586
|
+
// @ts-ignore
|
|
447
587
|
this.fullState.state === LOCUS.STATE.TERMINATING)
|
|
448
588
|
) {
|
|
449
589
|
LoggerProxy.logger.warn(
|
|
450
590
|
'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'
|
|
451
591
|
);
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
592
|
+
|
|
593
|
+
// @ts-ignore
|
|
594
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
595
|
+
name: 'client.call.remote-ended',
|
|
596
|
+
options: {
|
|
597
|
+
meetingId: this.meetingId,
|
|
598
|
+
},
|
|
455
599
|
});
|
|
456
600
|
this.emitScoped(
|
|
457
601
|
{
|
|
@@ -464,12 +608,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
464
608
|
shouldLeave: false,
|
|
465
609
|
}
|
|
466
610
|
);
|
|
467
|
-
}
|
|
468
|
-
else if (this.fullState && this.fullState.removed) {
|
|
611
|
+
} else if (this.fullState && this.fullState.removed) {
|
|
469
612
|
// user has been dropped from a meeting
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
613
|
+
|
|
614
|
+
// @ts-ignore
|
|
615
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
616
|
+
name: 'client.call.remote-ended',
|
|
617
|
+
options: {
|
|
618
|
+
meetingId: this.meetingId,
|
|
619
|
+
},
|
|
473
620
|
});
|
|
474
621
|
this.emitScoped(
|
|
475
622
|
{
|
|
@@ -499,8 +646,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
499
646
|
}
|
|
500
647
|
);
|
|
501
648
|
}
|
|
502
|
-
}
|
|
503
|
-
else {
|
|
649
|
+
} else {
|
|
504
650
|
LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');
|
|
505
651
|
}
|
|
506
652
|
}
|
|
@@ -543,8 +689,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
543
689
|
canAssignHost: true,
|
|
544
690
|
}
|
|
545
691
|
);
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
692
|
+
} else {
|
|
548
693
|
this.emitScoped(
|
|
549
694
|
{
|
|
550
695
|
file: 'locus-info',
|
|
@@ -565,13 +710,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
565
710
|
* @param {Array} [participants] - The participants to update against.
|
|
566
711
|
* @returns {void}
|
|
567
712
|
*/
|
|
568
|
-
updateParticipantDeltas(participants = []) {
|
|
713
|
+
updateParticipantDeltas(participants: Array<any> = []) {
|
|
569
714
|
// Used to find a participant within a participants collection.
|
|
570
715
|
const findParticipant = (participant, collection) =>
|
|
571
716
|
collection.find((item) => item.person.id === participant.person.id);
|
|
572
717
|
|
|
573
718
|
// Generates an object that indicates which state properties have changed.
|
|
574
|
-
const generateDelta = (prevState = {}, newState = {}) => {
|
|
719
|
+
const generateDelta = (prevState: any = {}, newState: any = {}) => {
|
|
575
720
|
// Setup deltas.
|
|
576
721
|
const deltas = {
|
|
577
722
|
audioStatus: prevState.audioStatus !== newState.audioStatus,
|
|
@@ -608,13 +753,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
608
753
|
}
|
|
609
754
|
|
|
610
755
|
/**
|
|
611
|
-
*
|
|
756
|
+
* update meeting's members
|
|
612
757
|
* @param {Object} participants new participants object
|
|
613
|
-
* @param {
|
|
758
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
614
759
|
* @returns {Array} updatedParticipants
|
|
615
760
|
* @memberof LocusInfo
|
|
616
761
|
*/
|
|
617
|
-
updateParticipants(participants) {
|
|
762
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
618
763
|
this.emitScoped(
|
|
619
764
|
{
|
|
620
765
|
file: 'locus-info',
|
|
@@ -627,16 +772,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
627
772
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
628
773
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
629
774
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
775
|
+
isReplace,
|
|
630
776
|
}
|
|
631
777
|
);
|
|
632
778
|
}
|
|
633
779
|
|
|
634
780
|
/**
|
|
635
781
|
* @param {Object} controls
|
|
782
|
+
* @param {Object} self
|
|
636
783
|
* @returns {undefined}
|
|
637
784
|
* @memberof LocusInfo
|
|
638
785
|
*/
|
|
639
|
-
updateControls(controls) {
|
|
786
|
+
updateControls(controls: object, self: object) {
|
|
640
787
|
if (controls && !isEqual(this.controls, controls)) {
|
|
641
788
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
642
789
|
const {
|
|
@@ -646,23 +793,88 @@ export default class LocusInfo extends EventsScope {
|
|
|
646
793
|
hasMeetingContainerChanged,
|
|
647
794
|
hasTranscribeChanged,
|
|
648
795
|
hasEntryExitToneChanged,
|
|
796
|
+
hasBreakoutChanged,
|
|
797
|
+
hasVideoEnabledChanged,
|
|
798
|
+
hasMuteOnEntryChanged,
|
|
799
|
+
hasShareControlChanged,
|
|
800
|
+
hasDisallowUnmuteChanged,
|
|
801
|
+
hasReactionsChanged,
|
|
802
|
+
hasReactionDisplayNamesChanged,
|
|
803
|
+
hasViewTheParticipantListChanged,
|
|
804
|
+
hasRaiseHandChanged,
|
|
805
|
+
hasVideoChanged,
|
|
806
|
+
hasInterpretationChanged,
|
|
649
807
|
},
|
|
650
808
|
current,
|
|
651
809
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
652
810
|
|
|
811
|
+
if (hasMuteOnEntryChanged) {
|
|
812
|
+
this.emitScoped(
|
|
813
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
814
|
+
LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
|
|
815
|
+
{state: current.muteOnEntry}
|
|
816
|
+
);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
if (hasShareControlChanged) {
|
|
820
|
+
this.emitScoped(
|
|
821
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
822
|
+
LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
|
|
823
|
+
{state: current.shareControl}
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
if (hasDisallowUnmuteChanged) {
|
|
828
|
+
this.emitScoped(
|
|
829
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
830
|
+
LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
|
|
831
|
+
{state: current.disallowUnmute}
|
|
832
|
+
);
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
if (hasReactionsChanged || hasReactionDisplayNamesChanged) {
|
|
836
|
+
this.emitScoped(
|
|
837
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
838
|
+
LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
|
|
839
|
+
{state: current.reactions}
|
|
840
|
+
);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
if (hasViewTheParticipantListChanged) {
|
|
844
|
+
this.emitScoped(
|
|
845
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
846
|
+
LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
|
|
847
|
+
{state: current.viewTheParticipantList}
|
|
848
|
+
);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
if (hasRaiseHandChanged) {
|
|
852
|
+
this.emitScoped(
|
|
853
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
854
|
+
LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
|
|
855
|
+
{state: current.raiseHand}
|
|
856
|
+
);
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
if (hasVideoChanged) {
|
|
860
|
+
this.emitScoped(
|
|
861
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
862
|
+
LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,
|
|
863
|
+
{state: current.video}
|
|
864
|
+
);
|
|
865
|
+
}
|
|
866
|
+
|
|
653
867
|
if (hasRecordingChanged || hasRecordingPausedChanged) {
|
|
654
868
|
let state = null;
|
|
655
869
|
|
|
656
870
|
if (hasRecordingPausedChanged) {
|
|
657
871
|
if (current.record.paused) {
|
|
658
872
|
state = RECORDING_STATE.PAUSED;
|
|
659
|
-
}
|
|
660
|
-
else {
|
|
873
|
+
} else {
|
|
661
874
|
// state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
|
|
662
875
|
state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
|
|
663
876
|
}
|
|
664
|
-
}
|
|
665
|
-
else if (hasRecordingChanged) {
|
|
877
|
+
} else if (hasRecordingChanged) {
|
|
666
878
|
state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
|
|
667
879
|
}
|
|
668
880
|
|
|
@@ -711,9 +923,43 @@ export default class LocusInfo extends EventsScope {
|
|
|
711
923
|
);
|
|
712
924
|
}
|
|
713
925
|
|
|
926
|
+
if (hasBreakoutChanged) {
|
|
927
|
+
const {breakout} = current;
|
|
928
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
929
|
+
self,
|
|
930
|
+
this.webex.internal.device.url
|
|
931
|
+
);
|
|
932
|
+
this.emitScoped(
|
|
933
|
+
{
|
|
934
|
+
file: 'locus-info',
|
|
935
|
+
function: 'updateControls',
|
|
936
|
+
},
|
|
937
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
|
|
938
|
+
{
|
|
939
|
+
breakout,
|
|
940
|
+
}
|
|
941
|
+
);
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
if (hasInterpretationChanged) {
|
|
945
|
+
const {interpretation} = current;
|
|
946
|
+
this.emitScoped(
|
|
947
|
+
{
|
|
948
|
+
file: 'locus-info',
|
|
949
|
+
function: 'updateControls',
|
|
950
|
+
},
|
|
951
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,
|
|
952
|
+
{
|
|
953
|
+
interpretation,
|
|
954
|
+
}
|
|
955
|
+
);
|
|
956
|
+
}
|
|
957
|
+
|
|
714
958
|
if (hasEntryExitToneChanged) {
|
|
715
959
|
const {entryExitTone} = current;
|
|
716
960
|
|
|
961
|
+
this.updateMeeting({entryExitTone});
|
|
962
|
+
|
|
717
963
|
this.emitScoped(
|
|
718
964
|
{
|
|
719
965
|
file: 'locus-info',
|
|
@@ -721,11 +967,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
721
967
|
},
|
|
722
968
|
LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
|
|
723
969
|
{
|
|
724
|
-
entryExitTone
|
|
970
|
+
entryExitTone,
|
|
725
971
|
}
|
|
726
972
|
);
|
|
973
|
+
}
|
|
727
974
|
|
|
728
|
-
|
|
975
|
+
// videoEnabled is handled differently than other controls,
|
|
976
|
+
// to fit with audio mute status logic
|
|
977
|
+
if (hasVideoEnabledChanged) {
|
|
978
|
+
const {videoEnabled} = current;
|
|
979
|
+
|
|
980
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
981
|
+
|
|
982
|
+
this.emitScoped(
|
|
983
|
+
{
|
|
984
|
+
file: 'locus-info',
|
|
985
|
+
function: 'updateControls',
|
|
986
|
+
},
|
|
987
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
988
|
+
{
|
|
989
|
+
// muted: not part of locus.controls
|
|
990
|
+
unmuteAllowed: videoEnabled,
|
|
991
|
+
}
|
|
992
|
+
);
|
|
729
993
|
}
|
|
730
994
|
|
|
731
995
|
this.controls = controls;
|
|
@@ -738,12 +1002,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
738
1002
|
* @returns {undefined}
|
|
739
1003
|
* @memberof LocusInfo
|
|
740
1004
|
*/
|
|
741
|
-
updateConversationUrl(conversationUrl, info) {
|
|
1005
|
+
updateConversationUrl(conversationUrl: string, info: any) {
|
|
742
1006
|
if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
|
|
743
1007
|
this.conversationUrl = conversationUrl;
|
|
744
1008
|
this.updateMeeting({conversationUrl});
|
|
745
|
-
}
|
|
746
|
-
else if (
|
|
1009
|
+
} else if (
|
|
747
1010
|
info &&
|
|
748
1011
|
info.conversationUrl &&
|
|
749
1012
|
!isEqual(this.conversationUrl, info.conversationUrl)
|
|
@@ -758,18 +1021,39 @@ export default class LocusInfo extends EventsScope {
|
|
|
758
1021
|
* @returns {undefined}
|
|
759
1022
|
* @memberof LocusInfo
|
|
760
1023
|
*/
|
|
761
|
-
updateCreated(created) {
|
|
1024
|
+
updateCreated(created: object) {
|
|
762
1025
|
if (created && !isEqual(this.created, created)) {
|
|
763
1026
|
this.created = created;
|
|
764
1027
|
}
|
|
765
1028
|
}
|
|
766
1029
|
|
|
1030
|
+
/**
|
|
1031
|
+
* @param {Object} services
|
|
1032
|
+
* @returns {undefined}
|
|
1033
|
+
* @memberof LocusInfo
|
|
1034
|
+
*/
|
|
1035
|
+
updateServices(services: Record<'breakout' | 'record', {url: string}>) {
|
|
1036
|
+
if (services && !isEqual(this.services, services)) {
|
|
1037
|
+
this.services = services;
|
|
1038
|
+
this.emitScoped(
|
|
1039
|
+
{
|
|
1040
|
+
file: 'locus-info',
|
|
1041
|
+
function: 'updateServices',
|
|
1042
|
+
},
|
|
1043
|
+
LOCUSINFO.EVENTS.LINKS_SERVICES,
|
|
1044
|
+
{
|
|
1045
|
+
services,
|
|
1046
|
+
}
|
|
1047
|
+
);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
|
|
767
1051
|
/**
|
|
768
1052
|
* @param {Object} fullState
|
|
769
1053
|
* @returns {undefined}
|
|
770
1054
|
* @memberof LocusInfo
|
|
771
1055
|
*/
|
|
772
|
-
updateFullState(fullState) {
|
|
1056
|
+
updateFullState(fullState: object) {
|
|
773
1057
|
if (fullState && !isEqual(this.fullState, fullState)) {
|
|
774
1058
|
const result = FullState.getFullState(this.fullState, fullState);
|
|
775
1059
|
|
|
@@ -813,7 +1097,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
813
1097
|
* @memberof LocusInfo
|
|
814
1098
|
* emits internal event locus_info_update_host
|
|
815
1099
|
*/
|
|
816
|
-
updateHostInfo(host) {
|
|
1100
|
+
updateHostInfo(host: object) {
|
|
817
1101
|
if (host && !isEqual(this.host, host)) {
|
|
818
1102
|
const parsedHosts = HostUtils.getHosts(this.host, host);
|
|
819
1103
|
|
|
@@ -834,8 +1118,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
834
1118
|
);
|
|
835
1119
|
}
|
|
836
1120
|
this.host = host;
|
|
837
|
-
}
|
|
838
|
-
else {
|
|
1121
|
+
} else {
|
|
839
1122
|
this.compareAndUpdateFlags.compareSelfAndHost = false;
|
|
840
1123
|
}
|
|
841
1124
|
}
|
|
@@ -846,21 +1129,15 @@ export default class LocusInfo extends EventsScope {
|
|
|
846
1129
|
* @returns {undefined}
|
|
847
1130
|
* @memberof LocusInfo
|
|
848
1131
|
*/
|
|
849
|
-
updateMeetingInfo(info, self) {
|
|
850
|
-
|
|
851
|
-
|
|
1132
|
+
updateMeetingInfo(info: object, self?: object) {
|
|
1133
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
1134
|
+
if (
|
|
1135
|
+
(info && !isEqual(this.info, info)) ||
|
|
1136
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
1137
|
+
) {
|
|
852
1138
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
853
1139
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
854
1140
|
|
|
855
|
-
this.emitScoped(
|
|
856
|
-
{
|
|
857
|
-
file: 'locus-info',
|
|
858
|
-
function: 'updateMeetingInfo',
|
|
859
|
-
},
|
|
860
|
-
LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,
|
|
861
|
-
{info: parsedInfo.current, self}
|
|
862
|
-
);
|
|
863
|
-
|
|
864
1141
|
if (parsedInfo.updates.isLocked) {
|
|
865
1142
|
this.emitScoped(
|
|
866
1143
|
{
|
|
@@ -886,7 +1163,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
886
1163
|
this.parsedLocus.info = parsedInfo.current;
|
|
887
1164
|
// Parses the info and adds necessary values
|
|
888
1165
|
this.updateMeeting(parsedInfo.current);
|
|
1166
|
+
|
|
1167
|
+
this.emitScoped(
|
|
1168
|
+
{
|
|
1169
|
+
file: 'locus-info',
|
|
1170
|
+
function: 'updateMeetingInfo',
|
|
1171
|
+
},
|
|
1172
|
+
LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,
|
|
1173
|
+
{
|
|
1174
|
+
isInitializing: !self, // if self is undefined, then the update is caused by locus init
|
|
1175
|
+
}
|
|
1176
|
+
);
|
|
889
1177
|
}
|
|
1178
|
+
this.roles = roles;
|
|
890
1179
|
}
|
|
891
1180
|
|
|
892
1181
|
/**
|
|
@@ -894,7 +1183,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
894
1183
|
* @returns {undefined}
|
|
895
1184
|
* @memberof LocusInfo
|
|
896
1185
|
*/
|
|
897
|
-
updateEmbeddedApps(embeddedApps) {
|
|
1186
|
+
updateEmbeddedApps(embeddedApps: object) {
|
|
898
1187
|
// don't do anything if the arrays of apps haven't changed significantly
|
|
899
1188
|
if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {
|
|
900
1189
|
return;
|
|
@@ -922,11 +1211,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
922
1211
|
* @memberof LocusInfo
|
|
923
1212
|
* emits internal event locus_info_update_media_shares
|
|
924
1213
|
*/
|
|
925
|
-
updateMediaShares(mediaShares) {
|
|
1214
|
+
updateMediaShares(mediaShares: object) {
|
|
926
1215
|
if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {
|
|
927
1216
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
928
1217
|
|
|
929
1218
|
this.updateMeeting(parsedMediaShares.current);
|
|
1219
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1220
|
+
this.mediaShares = mediaShares;
|
|
930
1221
|
this.emitScoped(
|
|
931
1222
|
{
|
|
932
1223
|
file: 'locus-info',
|
|
@@ -938,8 +1229,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
938
1229
|
previous: parsedMediaShares.previous,
|
|
939
1230
|
}
|
|
940
1231
|
);
|
|
941
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
942
|
-
this.mediaShares = mediaShares;
|
|
943
1232
|
}
|
|
944
1233
|
}
|
|
945
1234
|
|
|
@@ -948,7 +1237,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
948
1237
|
* @returns {undefined}
|
|
949
1238
|
* @memberof LocusInfo
|
|
950
1239
|
*/
|
|
951
|
-
updateParticipantsUrl(participantsUrl) {
|
|
1240
|
+
updateParticipantsUrl(participantsUrl: string) {
|
|
952
1241
|
if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {
|
|
953
1242
|
this.participantsUrl = participantsUrl;
|
|
954
1243
|
}
|
|
@@ -959,7 +1248,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
959
1248
|
* @returns {undefined}
|
|
960
1249
|
* @memberof LocusInfo
|
|
961
1250
|
*/
|
|
962
|
-
updateReplace(replace) {
|
|
1251
|
+
updateReplace(replace: object) {
|
|
963
1252
|
if (replace && !isEqual(this.replace, replace)) {
|
|
964
1253
|
this.replace = replace;
|
|
965
1254
|
}
|
|
@@ -973,8 +1262,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
973
1262
|
* @memberof LocusInfo
|
|
974
1263
|
* emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self
|
|
975
1264
|
*/
|
|
976
|
-
updateSelf(self, participants) {
|
|
1265
|
+
updateSelf(self: any, participants: Array<any>) {
|
|
1266
|
+
// @ts-ignore - check where this.self come from
|
|
977
1267
|
if (self && !isEqual(this.self, self)) {
|
|
1268
|
+
// @ts-ignore
|
|
978
1269
|
const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);
|
|
979
1270
|
|
|
980
1271
|
this.updateMeeting(parsedSelves.current);
|
|
@@ -1000,8 +1291,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1000
1291
|
|
|
1001
1292
|
if (parsedSelves.updates.moderatorChanged) {
|
|
1002
1293
|
this.compareAndUpdateFlags.compareHostAndSelf = true;
|
|
1003
|
-
}
|
|
1004
|
-
else {
|
|
1294
|
+
} else {
|
|
1005
1295
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1006
1296
|
}
|
|
1007
1297
|
|
|
@@ -1016,6 +1306,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1016
1306
|
);
|
|
1017
1307
|
}
|
|
1018
1308
|
|
|
1309
|
+
if (parsedSelves.updates.breakoutsChanged) {
|
|
1310
|
+
this.emitScoped(
|
|
1311
|
+
{
|
|
1312
|
+
file: 'locus-info',
|
|
1313
|
+
function: 'updateSelf',
|
|
1314
|
+
},
|
|
1315
|
+
LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
|
|
1316
|
+
{breakoutSessions: parsedSelves.current.breakoutSessions}
|
|
1317
|
+
);
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
if (parsedSelves.updates.interpretationChanged) {
|
|
1321
|
+
this.emitScoped(
|
|
1322
|
+
{
|
|
1323
|
+
file: 'locus-info',
|
|
1324
|
+
function: 'updateSelf',
|
|
1325
|
+
},
|
|
1326
|
+
LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,
|
|
1327
|
+
{
|
|
1328
|
+
interpretation: parsedSelves.current.interpretation,
|
|
1329
|
+
selfParticipantId: parsedSelves.current.selfId,
|
|
1330
|
+
}
|
|
1331
|
+
);
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1019
1334
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1020
1335
|
this.emitScoped(
|
|
1021
1336
|
{
|
|
@@ -1037,6 +1352,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1037
1352
|
self
|
|
1038
1353
|
);
|
|
1039
1354
|
}
|
|
1355
|
+
|
|
1356
|
+
if (parsedSelves.updates.isRolesChanged) {
|
|
1357
|
+
this.emitScoped(
|
|
1358
|
+
{
|
|
1359
|
+
file: 'locus-info',
|
|
1360
|
+
function: 'updateSelf',
|
|
1361
|
+
},
|
|
1362
|
+
LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,
|
|
1363
|
+
{oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}
|
|
1364
|
+
);
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1368
|
+
this.emitScoped(
|
|
1369
|
+
{
|
|
1370
|
+
file: 'locus-info',
|
|
1371
|
+
function: 'updateSelf',
|
|
1372
|
+
},
|
|
1373
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1374
|
+
{
|
|
1375
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1376
|
+
// unmuteAllowed: not part of .self
|
|
1377
|
+
}
|
|
1378
|
+
);
|
|
1379
|
+
}
|
|
1040
1380
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1041
1381
|
this.emitScoped(
|
|
1042
1382
|
{
|
|
@@ -1100,6 +1440,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1100
1440
|
file: 'locus-info',
|
|
1101
1441
|
function: 'updateSelf',
|
|
1102
1442
|
},
|
|
1443
|
+
// @ts-ignore
|
|
1103
1444
|
LOCUSINFO.EVENTS.MEDIA_INACTIVITY,
|
|
1104
1445
|
SelfUtils.getMediaStatus(self.mediaSessions)
|
|
1105
1446
|
);
|
|
@@ -1168,9 +1509,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
1168
1509
|
}
|
|
1169
1510
|
);
|
|
1170
1511
|
this.parsedLocus.self = parsedSelves.current;
|
|
1512
|
+
// @ts-ignore
|
|
1171
1513
|
this.self = self;
|
|
1172
|
-
}
|
|
1173
|
-
else {
|
|
1514
|
+
} else {
|
|
1174
1515
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1175
1516
|
}
|
|
1176
1517
|
}
|
|
@@ -1181,7 +1522,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1181
1522
|
* @returns {undefined}
|
|
1182
1523
|
* emits internal event locus_info_update_url
|
|
1183
1524
|
*/
|
|
1184
|
-
updateLocusUrl(url) {
|
|
1525
|
+
updateLocusUrl(url: string) {
|
|
1185
1526
|
if (url && this.url !== url) {
|
|
1186
1527
|
this.url = url;
|
|
1187
1528
|
this.updateMeeting({locusUrl: url});
|
|
@@ -1201,7 +1542,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1201
1542
|
* @returns {undefined}
|
|
1202
1543
|
* @memberof LocusInfo
|
|
1203
1544
|
*/
|
|
1204
|
-
updateAclUrl(aclUrl) {
|
|
1545
|
+
updateAclUrl(aclUrl: string) {
|
|
1205
1546
|
if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {
|
|
1206
1547
|
this.aclUrl = aclUrl;
|
|
1207
1548
|
}
|
|
@@ -1212,7 +1553,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1212
1553
|
* @returns {undefined}
|
|
1213
1554
|
* @memberof LocusInfo
|
|
1214
1555
|
*/
|
|
1215
|
-
updateBasequence(baseSequence) {
|
|
1556
|
+
updateBasequence(baseSequence: number) {
|
|
1216
1557
|
if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {
|
|
1217
1558
|
this.baseSequence = baseSequence;
|
|
1218
1559
|
}
|
|
@@ -1223,7 +1564,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1223
1564
|
* @returns {undefined}
|
|
1224
1565
|
* @memberof LocusInfo
|
|
1225
1566
|
*/
|
|
1226
|
-
updateSequence(sequence) {
|
|
1567
|
+
updateSequence(sequence: number) {
|
|
1227
1568
|
if (sequence && !isEqual(this.sequence, sequence)) {
|
|
1228
1569
|
this.sequence = sequence;
|
|
1229
1570
|
}
|
|
@@ -1234,7 +1575,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1234
1575
|
* @returns {undefined}
|
|
1235
1576
|
* @memberof LocusInfo
|
|
1236
1577
|
*/
|
|
1237
|
-
updateMemberShip(membership) {
|
|
1578
|
+
updateMemberShip(membership: object) {
|
|
1238
1579
|
if (membership && !isEqual(this.membership, membership)) {
|
|
1239
1580
|
this.membership = membership;
|
|
1240
1581
|
}
|
|
@@ -1245,9 +1586,110 @@ export default class LocusInfo extends EventsScope {
|
|
|
1245
1586
|
* @returns {undefined}
|
|
1246
1587
|
* @memberof LocusInfo
|
|
1247
1588
|
*/
|
|
1248
|
-
updateIdentifiers(identities) {
|
|
1589
|
+
updateIdentifiers(identities: Array<any>) {
|
|
1249
1590
|
if (identities && !isEqual(this.identities, identities)) {
|
|
1250
1591
|
this.identities = identities;
|
|
1251
1592
|
}
|
|
1252
1593
|
}
|
|
1594
|
+
|
|
1595
|
+
/**
|
|
1596
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1597
|
+
* @param {Object} locus
|
|
1598
|
+
* @returns {undefined}
|
|
1599
|
+
* @memberof LocusInfo
|
|
1600
|
+
*/
|
|
1601
|
+
updateLocusCache(locus: any) {
|
|
1602
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1603
|
+
if (isMainSessionDTO) {
|
|
1604
|
+
this.updateMainSessionLocusCache(locus);
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
/**
|
|
1609
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1610
|
+
* if join breakout from main session, main session is not active for the attendee and remove main session locus cache
|
|
1611
|
+
* @param {Object} newLocus
|
|
1612
|
+
* @returns {Object}
|
|
1613
|
+
* @memberof LocusInfo
|
|
1614
|
+
*/
|
|
1615
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1616
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);
|
|
1617
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1618
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1619
|
+
}
|
|
1620
|
+
const isMainSessionDTO =
|
|
1621
|
+
this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);
|
|
1622
|
+
|
|
1623
|
+
if (isMainSessionDTO) {
|
|
1624
|
+
const isActive =
|
|
1625
|
+
[LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(
|
|
1626
|
+
this.fullState?.state
|
|
1627
|
+
) && !this.mainSessionLocusCache?.self?.removed;
|
|
1628
|
+
|
|
1629
|
+
if (!isActive) {
|
|
1630
|
+
this.clearMainSessionLocusCache();
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
return newLocus;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
/**
|
|
1638
|
+
* merge participants by participant id
|
|
1639
|
+
* @param {Array} participants
|
|
1640
|
+
* @param {Array} sourceParticipants
|
|
1641
|
+
* @returns {Array} merged participants
|
|
1642
|
+
* @memberof LocusInfo
|
|
1643
|
+
*/
|
|
1644
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1645
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1646
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1647
|
+
if (!participants || !participants.length) {
|
|
1648
|
+
return sourceParticipants;
|
|
1649
|
+
}
|
|
1650
|
+
sourceParticipants.forEach((participant) => {
|
|
1651
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1652
|
+
if (existIndex > -1) {
|
|
1653
|
+
participants.splice(existIndex, 1, participant);
|
|
1654
|
+
} else {
|
|
1655
|
+
participants.push(participant);
|
|
1656
|
+
}
|
|
1657
|
+
});
|
|
1658
|
+
|
|
1659
|
+
return participants;
|
|
1660
|
+
}
|
|
1661
|
+
|
|
1662
|
+
/**
|
|
1663
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1664
|
+
* @param {Object} mainLocus
|
|
1665
|
+
* @returns {undefined}
|
|
1666
|
+
* @memberof LocusInfo
|
|
1667
|
+
*/
|
|
1668
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1669
|
+
if (!mainLocus) {
|
|
1670
|
+
return;
|
|
1671
|
+
}
|
|
1672
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1673
|
+
if (this.mainSessionLocusCache) {
|
|
1674
|
+
// shallow merge and do special merge for participants
|
|
1675
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1676
|
+
if (key === 'participants') {
|
|
1677
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1678
|
+
}
|
|
1679
|
+
|
|
1680
|
+
return srcValue || objValue;
|
|
1681
|
+
});
|
|
1682
|
+
} else {
|
|
1683
|
+
this.mainSessionLocusCache = locusClone;
|
|
1684
|
+
}
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
/**
|
|
1688
|
+
* clear main session cache
|
|
1689
|
+
* @returns {undefined}
|
|
1690
|
+
* @memberof LocusInfo
|
|
1691
|
+
*/
|
|
1692
|
+
clearMainSessionLocusCache() {
|
|
1693
|
+
this.mainSessionLocusCache = null;
|
|
1694
|
+
}
|
|
1253
1695
|
}
|