@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 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","action","locus","meeting","loci","DESYNC","USE_CURRENT","USE_INCOMING","locusInfo","onDeltaLocus","locusDesync","needToGetFullLocus","meetingRequest","getFullLocus","desync","locusUrl","then","res","onFullLocus","body","resume","LoggerProxy","logger","info","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","updateLocusUrl","url","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","self","updateHostInfo","host","updateMediaShares","mediaShares","data","eventType","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","handleLocusDelta","scope","eventName","args","emit","error","updateParticipantDeltas","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","workingCopy","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","state","LOCUS","STATE","INACTIVE","warn","Metrics","postEvent","event","REMOTE_ENDED","DESTROY_MEETING","reason","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_REMOVED_REASON","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","ControlsUtils","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","current","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","LOCUSINFO","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","SelfUtils","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","MEETING_INFO_UPDATED","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","internal","device","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","muted","remoteMuted","unmuteAllowed","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","video","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","EventsScope"],"sources":["index.js"],"sourcesContent":["import {isEqual} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\nimport InfoUtils from '../locus-info/infoUtils';\nimport FullState from '../locus-info/fullState';\nimport SelfUtils from '../locus-info/selfUtils';\nimport HostUtils from '../locus-info/hostUtils';\nimport ControlsUtils from '../locus-info/controlsUtils';\nimport EmbeddedAppsUtils from '../locus-info/embeddedAppsUtils';\nimport MediaSharesUtils from '../locus-info/mediaSharesUtils';\nimport LocusDeltaParser from '../locus-info/parser';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action, locus, meeting) {\n const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n meeting.locusDesync = false;\n meeting.needToGetFullLocus = false;\n break;\n case DESYNC:\n meeting.meetingRequest\n .getFullLocus({\n desync: true,\n locusUrl: meeting.locusUrl,\n })\n .then((res) => {\n meeting.locusInfo.onFullLocus(res.body);\n // Notify parser to resume processing delta events\n // now that we have full locus from DESYNC.\n this.locusParser.resume();\n });\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus, meeting) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus) {\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting, data) {\n const {eventType} = data;\n\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(data.locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(data.locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(data.locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope, eventName, args) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {sting} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus, eventType) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n handleOneOnOneEvent(eventType) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus) {\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n this.updateControls(locus.controls);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants, self) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n }\n else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n }\n else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n }\n else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n }\n else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n Metrics.postEvent({\n event: eventType.REMOTE_ENDED,\n meetingId: this.meetingId,\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n }\n else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n }\n else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState = {}, newState = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n *\n * @param {Object} participants new participants object\n * @param {boolen} deltaParticpantFlag delta event\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n }\n else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n }\n else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone\n }\n );\n\n this.updateMeeting({entryExitTone});\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl, info) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n }\n else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n }\n else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info, self) {\n if (info && !isEqual(this.info, info)) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {info: parsedInfo.current, self}\n );\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n }\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self, participants) {\n if (self && !isEqual(this.self, self)) {\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n this.self = self;\n }\n else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["LocusInfo","updateMeeting","webex","meetingId","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","meeting","isDelta","url","workingCopy","syncUrl","locusUrl","LoggerProxy","logger","info","meetingRequest","getLocusDTO","catch","e","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","message","errorName","name","stack","code","err","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","body","locusInfo","handleLocusDelta","onFullLocus","resume","action","locus","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","doLocusSync","onDeltaAction","parsedLoci","applyLocusDeltaData","onDeltaEvent","created","scheduledMeeting","participantsUrl","replaces","aclUrl","baseSequence","sequence","membership","identities","participants","deltaParticipants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateServices","links","services","data","eventType","getTheLocusToUpdate","LOCUSEVENT","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","scope","eventName","args","emit","error","isNewFullLocus","updateParticipantDeltas","isReplaceMembers","ControlsUtils","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","type","_CALL_","_SIP_BRIDGE_","emitScoped","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","length","find","participant","identity","_USER_","removed","partner","getLocusPartner","LOCUS","STATE","INACTIVE","warn","internal","newMetrics","submitClientEvent","options","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","SELF_REMOVED","compareSelfAndHost","compareHostAndSelf","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","findParticipant","collection","item","person","id","generateDelta","prevState","newState","deltas","audioStatus","videoSlidesStatus","videoStatus","forEach","key","reduce","existingParticipant","delta","status","changed","push","isReplace","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","parse","getControls","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","current","LOCUSINFO","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","device","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","LINKS_SERVICES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","roles","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","isUserUnadmitted","SELF_UNADMITTED_GUEST","isUserAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","MEDIA_STATUS_CHANGE","currentMediaStatus","audio","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","LOCUS_INFO_UPDATE_URL","isMainSessionDTO","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","locusClone","objValue","srcValue","mergeParticipants","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n} from '../constants';\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n deltaParticipants: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n services: any;\n mainSessionLocusCache: any;\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n }\n\n /**\n * 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.\n *\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n private doLocusSync(meeting: any) {\n let isDelta;\n let url;\n\n if (this.locusParser.workingCopy.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n isDelta = false;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n throw e;\n })\n .then((res) => {\n if (isDelta) {\n if (!isEmpty(res.body)) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n }\n } else {\n meeting.locusInfo.onFullLocus(res.body);\n }\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n /**\n * Stored participant changes between the last event and the current event.\n * All previously stored events are overwritten between events.\n *\n * @instance\n * @type {Array<DeltaParticipant>}\n * @private\n * @member LocusInfo\n */\n this.deltaParticipants = [];\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url);\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self, locus.participants);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateServices(locus.links?.services);\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n initialSetup(locus: object) {\n this.updateLocusCache(locus);\n this.onFullLocus(locus);\n\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType particulat locus event\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n\n this.updateParticipantDeltas(locus.participants);\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(locus.participants, isReplaceMembers);\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self, locus.participants);\n this.updateLocusUrl(locus.url);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateServices(locus.links?.services);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * Update the deltaParticipants property of this object based on a list of\n * provided participants.\n *\n * @param {Array} [participants] - The participants to update against.\n * @returns {void}\n */\n updateParticipantDeltas(participants: Array<any> = []) {\n // Used to find a participant within a participants collection.\n const findParticipant = (participant, collection) =>\n collection.find((item) => item.person.id === participant.person.id);\n\n // Generates an object that indicates which state properties have changed.\n const generateDelta = (prevState: any = {}, newState: any = {}) => {\n // Setup deltas.\n const deltas = {\n audioStatus: prevState.audioStatus !== newState.audioStatus,\n videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,\n videoStatus: prevState.videoStatus !== newState.videoStatus,\n };\n\n // Clean the object\n Object.keys(deltas).forEach((key) => {\n if (deltas[key] !== true) {\n delete deltas[key];\n }\n });\n\n return deltas;\n };\n\n this.deltaParticipants = participants.reduce((collection, participant) => {\n const existingParticipant = findParticipant(participant, this.participants || []) || {};\n\n const delta = generateDelta(existingParticipant.status, participant.status);\n\n const changed = Object.keys(delta).length > 0;\n\n if (changed) {\n collection.push({\n person: participant.person,\n delta,\n });\n }\n\n return collection;\n }, []);\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * @param {Object} services\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateServices(services: Record<'breakout' | 'record', {url: string}>) {\n if (services && !isEqual(this.services, services)) {\n this.services = services;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateServices',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if (\n (info && !isEqual(this.info, info)) ||\n (roles.length && !isEqual(this.roles, roles) && info)\n ) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object) {\n if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the locus.mediaShares property\n * @param {Array} participants the locus.participants property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any, participants: Array<any>) {\n // @ts-ignore - check where this.self come from\n if (self && !isEqual(this.self, self)) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.isUserUnadmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.isUserAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n url\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus?.controls);\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,37 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
-
|
|
5
4
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
10
|
-
|
|
11
7
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
14
|
-
|
|
15
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
16
|
-
|
|
17
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
11
|
value: true
|
|
19
12
|
});
|
|
20
|
-
|
|
21
13
|
exports.default = void 0;
|
|
22
|
-
|
|
14
|
+
var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
|
|
23
15
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
24
|
-
|
|
16
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
25
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
26
|
-
|
|
27
18
|
var _constants = require("../constants");
|
|
28
|
-
|
|
29
19
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
30
|
-
|
|
31
20
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
32
|
-
|
|
33
21
|
var InfoUtils = {};
|
|
34
|
-
|
|
35
22
|
InfoUtils.parse = function (info, roles) {
|
|
36
23
|
var isJoined = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
37
24
|
var parsed = {
|
|
@@ -39,93 +26,78 @@ InfoUtils.parse = function (info, roles) {
|
|
|
39
26
|
moderator: InfoUtils.parseModerator(info),
|
|
40
27
|
coHost: InfoUtils.parseCoHost(info)
|
|
41
28
|
};
|
|
42
|
-
var userDisplayHints = isJoined ? _objectSpread({}, parsed.policy) : {}
|
|
43
|
-
|
|
29
|
+
var userDisplayHints = isJoined ? _objectSpread({}, parsed.policy) : _objectSpread({}, Object.fromEntries((0, _entries.default)(parsed.policy).filter(function (_ref) {
|
|
30
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 1),
|
|
31
|
+
hint = _ref2[0];
|
|
32
|
+
return _constants.INTERSTITIAL_DISPLAY_HINTS.includes(hint);
|
|
33
|
+
})));
|
|
44
34
|
if (roles.includes(_constants.SELF_ROLES.COHOST)) {
|
|
45
35
|
userDisplayHints = _objectSpread(_objectSpread({}, userDisplayHints), parsed.coHost);
|
|
46
36
|
}
|
|
47
|
-
|
|
48
37
|
if (roles.includes(_constants.SELF_ROLES.MODERATOR)) {
|
|
49
38
|
userDisplayHints = _objectSpread(_objectSpread({}, userDisplayHints), parsed.moderator);
|
|
50
39
|
}
|
|
51
|
-
|
|
52
40
|
parsed.userDisplayHints = (0, _keys.default)(userDisplayHints);
|
|
53
|
-
|
|
54
41
|
if (info.sipUri) {
|
|
55
42
|
parsed.sipUri = info.sipUri;
|
|
56
43
|
}
|
|
57
|
-
|
|
58
44
|
if (info.meetingId) {
|
|
59
45
|
parsed.meetingNumber = info.meetingId;
|
|
60
46
|
}
|
|
61
|
-
|
|
47
|
+
if (info.datachannelUrl) {
|
|
48
|
+
parsed.datachannelUrl = info.datachannelUrl;
|
|
49
|
+
}
|
|
62
50
|
return parsed;
|
|
63
51
|
};
|
|
64
|
-
|
|
65
52
|
InfoUtils.parseDisplayHintSection = function (info, displayHintKey) {
|
|
66
53
|
var displayHints = {};
|
|
67
|
-
|
|
68
54
|
if (info && info.displayHints && info.displayHints[displayHintKey] && info.displayHints[displayHintKey].length > 0) {
|
|
69
55
|
info.displayHints[displayHintKey].forEach(function (key) {
|
|
70
56
|
displayHints[key] = true;
|
|
71
57
|
});
|
|
72
58
|
}
|
|
73
|
-
|
|
74
59
|
return displayHints;
|
|
75
60
|
};
|
|
76
|
-
|
|
77
61
|
InfoUtils.parsePolicy = function (info) {
|
|
78
62
|
return InfoUtils.parseDisplayHintSection(info, 'joined');
|
|
79
63
|
};
|
|
80
|
-
|
|
81
64
|
InfoUtils.parseModerator = function (info) {
|
|
82
65
|
var displayHints = InfoUtils.parseDisplayHintSection(info, 'moderator');
|
|
83
66
|
return _objectSpread(_objectSpread({}, displayHints), {}, (0, _defineProperty2.default)({}, _constants.DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND, true));
|
|
84
67
|
};
|
|
85
|
-
|
|
86
68
|
InfoUtils.parseCoHost = function (info) {
|
|
87
69
|
var displayHints = InfoUtils.parseDisplayHintSection(info, 'coHost');
|
|
88
70
|
return _objectSpread(_objectSpread({}, displayHints), {}, (0, _defineProperty2.default)({}, _constants.DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND, true));
|
|
89
71
|
};
|
|
90
|
-
|
|
91
72
|
InfoUtils.isLocked = function (policy) {
|
|
92
73
|
return policy.LOCK_STATUS_LOCKED || false;
|
|
93
74
|
};
|
|
94
|
-
|
|
95
75
|
InfoUtils.isUnlocked = function (policy) {
|
|
96
76
|
return policy.LOCK_STATUS_UNLOCKED || false;
|
|
97
77
|
};
|
|
98
|
-
|
|
99
78
|
InfoUtils.getInfos = function (oldInfo, newInfo, roles, isJoined) {
|
|
100
79
|
var previous = null;
|
|
101
|
-
|
|
102
80
|
if (oldInfo) {
|
|
103
81
|
previous = oldInfo;
|
|
104
82
|
}
|
|
105
|
-
|
|
106
83
|
var current = newInfo && InfoUtils.parse(newInfo, roles, isJoined);
|
|
107
84
|
var updates = {};
|
|
108
|
-
|
|
109
85
|
if (current) {
|
|
110
86
|
current.isLocked = InfoUtils.isLocked(current.policy);
|
|
111
87
|
current.isUnlocked = InfoUtils.isUnlocked(current.policy);
|
|
112
|
-
|
|
113
88
|
if (previous && previous.isUnlocked && current.isLocked || !previous && current.isLocked) {
|
|
114
89
|
updates.isLocked = current.isLocked;
|
|
115
90
|
}
|
|
116
|
-
|
|
117
91
|
if (previous && previous.isLocked && current.isUnlocked || !previous && current.isUnlocked) {
|
|
118
92
|
updates.isUnlocked = current.isUnlocked;
|
|
119
93
|
}
|
|
120
94
|
}
|
|
121
|
-
|
|
122
95
|
return {
|
|
123
96
|
previous: previous,
|
|
124
97
|
current: current,
|
|
125
98
|
updates: updates
|
|
126
99
|
};
|
|
127
100
|
};
|
|
128
|
-
|
|
129
101
|
var _default = InfoUtils;
|
|
130
102
|
exports.default = _default;
|
|
131
103
|
//# sourceMappingURL=infoUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["InfoUtils","parse","info","roles","isJoined","parsed","policy","parsePolicy","moderator","parseModerator","coHost","parseCoHost","userDisplayHints","includes","SELF_ROLES","COHOST","MODERATOR","sipUri","meetingId","meetingNumber","parseDisplayHintSection","displayHintKey","displayHints","length","forEach","key","DISPLAY_HINTS","LOWER_SOMEONE_ELSES_HAND","isLocked","LOCK_STATUS_LOCKED","isUnlocked","LOCK_STATUS_UNLOCKED","getInfos","oldInfo","newInfo","previous","current","updates"],"sources":["infoUtils.
|
|
1
|
+
{"version":3,"names":["InfoUtils","parse","info","roles","isJoined","parsed","policy","parsePolicy","moderator","parseModerator","coHost","parseCoHost","userDisplayHints","Object","fromEntries","filter","hint","INTERSTITIAL_DISPLAY_HINTS","includes","SELF_ROLES","COHOST","MODERATOR","sipUri","meetingId","meetingNumber","datachannelUrl","parseDisplayHintSection","displayHintKey","displayHints","length","forEach","key","DISPLAY_HINTS","LOWER_SOMEONE_ELSES_HAND","isLocked","LOCK_STATUS_LOCKED","isUnlocked","LOCK_STATUS_UNLOCKED","getInfos","oldInfo","newInfo","previous","current","updates"],"sources":["infoUtils.ts"],"sourcesContent":["import {SELF_ROLES, DISPLAY_HINTS, INTERSTITIAL_DISPLAY_HINTS} from '../constants';\n\nconst InfoUtils: any = {};\n\nInfoUtils.parse = (info, roles, isJoined = true) => {\n const parsed: any = {\n policy: InfoUtils.parsePolicy(info),\n moderator: InfoUtils.parseModerator(info),\n coHost: InfoUtils.parseCoHost(info),\n };\n\n let userDisplayHints = isJoined\n ? {...parsed.policy}\n : {\n ...Object.fromEntries(\n Object.entries(parsed.policy).filter(([hint]) =>\n INTERSTITIAL_DISPLAY_HINTS.includes(hint)\n )\n ),\n };\n\n if (roles.includes(SELF_ROLES.COHOST)) {\n userDisplayHints = {...userDisplayHints, ...parsed.coHost};\n }\n\n if (roles.includes(SELF_ROLES.MODERATOR)) {\n userDisplayHints = {...userDisplayHints, ...parsed.moderator};\n }\n\n parsed.userDisplayHints = Object.keys(userDisplayHints);\n\n if (info.sipUri) {\n parsed.sipUri = info.sipUri;\n }\n\n if (info.meetingId) {\n parsed.meetingNumber = info.meetingId;\n }\n\n if (info.datachannelUrl) {\n parsed.datachannelUrl = info.datachannelUrl;\n }\n\n return parsed;\n};\n\nInfoUtils.parseDisplayHintSection = (info, displayHintKey) => {\n const displayHints = {};\n\n if (\n info &&\n info.displayHints &&\n info.displayHints[displayHintKey] &&\n info.displayHints[displayHintKey].length > 0\n ) {\n info.displayHints[displayHintKey].forEach((key) => {\n displayHints[key] = true;\n });\n }\n\n return displayHints;\n};\n\nInfoUtils.parsePolicy = (info) => InfoUtils.parseDisplayHintSection(info, 'joined');\n\nInfoUtils.parseModerator = (info) => {\n const displayHints = InfoUtils.parseDisplayHintSection(info, 'moderator');\n\n return {...displayHints, [DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND]: true};\n};\n\nInfoUtils.parseCoHost = (info) => {\n const displayHints = InfoUtils.parseDisplayHintSection(info, 'coHost');\n\n return {...displayHints, [DISPLAY_HINTS.LOWER_SOMEONE_ELSES_HAND]: true};\n};\n\nInfoUtils.isLocked = (policy) => policy.LOCK_STATUS_LOCKED || false;\n\nInfoUtils.isUnlocked = (policy) => policy.LOCK_STATUS_UNLOCKED || false;\n\nInfoUtils.getInfos = (oldInfo, newInfo, roles, isJoined) => {\n let previous = null;\n\n if (oldInfo) {\n previous = oldInfo;\n }\n const current = newInfo && InfoUtils.parse(newInfo, roles, isJoined);\n const updates: any = {};\n\n if (current) {\n current.isLocked = InfoUtils.isLocked(current.policy);\n current.isUnlocked = InfoUtils.isUnlocked(current.policy);\n\n if ((previous && previous.isUnlocked && current.isLocked) || (!previous && current.isLocked)) {\n updates.isLocked = current.isLocked;\n }\n if (\n (previous && previous.isLocked && current.isUnlocked) ||\n (!previous && current.isUnlocked)\n ) {\n updates.isUnlocked = current.isUnlocked;\n }\n }\n\n return {\n previous,\n current,\n updates,\n };\n};\n\nexport default InfoUtils;\n"],"mappings":"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"}
|