@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +48 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +176 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +43 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +919 -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/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/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 +10 -69
- 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 +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +7 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +184 -122
- 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 +25 -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 +250 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +72 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +56 -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 +362 -208
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +99 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +113 -337
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +96 -135
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -35
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +59 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2909 -2398
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +257 -112
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +330 -264
- 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 +63 -261
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +273 -280
- 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 +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +155 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +741 -548
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +194 -149
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +100 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -68
- 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 +227 -188
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +54 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +107 -44
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +5 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +3 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +67 -159
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +250 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.js +202 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.js +176 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.js +270 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.js +209 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.js +1137 -0
- package/dist/multistream/remoteMediaManager.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/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +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 +386 -527
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +84 -286
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +138 -238
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +164 -102
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +399 -470
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- 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 +34 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +124 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +2 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +78 -0
- package/dist/types/constants.d.ts +968 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +13 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +37 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +315 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
- package/dist/types/meeting/index.d.ts +1748 -0
- package/dist/types/meeting/muteState.d.ts +185 -0
- package/dist/types/meeting/request.d.ts +275 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +345 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +69 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +172 -0
- package/dist/types/metrics/constants.d.ts +54 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +88 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +29 -21
- package/src/annotation/annotation.types.ts +41 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +141 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +37 -0
- package/src/breakouts/index.ts +823 -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/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/{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} +8 -25
- 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} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +18 -12
- package/src/constants.ts +256 -183
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +16 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +49 -0
- package/src/controls-options-manager/util.ts +229 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +169 -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} +331 -80
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
- package/src/media/index.ts +488 -0
- package/src/media/{properties.js → properties.ts} +67 -54
- package/src/media/util.ts +16 -0
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +123 -3
- package/src/meeting/{index.js → index.ts} +3334 -1775
- package/src/meeting/muteState.ts +526 -0
- package/src/meeting/{request.js → request.ts} +350 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +126 -159
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +345 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1394 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/util.ts +288 -0
- package/src/member/{index.js → index.ts} +124 -56
- package/src/member/types.ts +24 -0
- package/src/member/{util.js → util.ts} +105 -25
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +359 -139
- package/src/members/request.ts +215 -0
- package/src/members/types.ts +28 -0
- package/src/members/{util.js → util.ts} +145 -54
- package/src/metrics/{config.js → config.ts} +256 -92
- package/src/metrics/{constants.js → constants.ts} +1 -6
- package/src/metrics/{index.js → index.ts} +116 -97
- package/src/multistream/mediaRequestManager.ts +324 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +225 -0
- package/src/multistream/remoteMediaManager.ts +1075 -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/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- 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.js → index.ts} +261 -163
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/index.ts +241 -0
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +127 -53
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1273 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +177 -0
- package/test/integration/spec/journey.js +666 -464
- package/test/integration/spec/space-meeting.js +321 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +435 -0
- package/test/unit/spec/breakouts/breakout.ts +184 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +77 -0
- package/test/unit/spec/breakouts/index.ts +1504 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +403 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +177 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +493 -3
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +110 -103
- package/test/unit/spec/locus-info/selfUtils.js +236 -12
- package/test/unit/spec/media/index.ts +303 -0
- package/test/unit/spec/media/properties.ts +73 -82
- package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
- package/test/unit/spec/meeting/index.js +3127 -975
- package/test/unit/spec/meeting/muteState.js +375 -70
- package/test/unit/spec/meeting/request.js +217 -43
- package/test/unit/spec/meeting/utils.js +205 -163
- package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1052 -333
- package/test/unit/spec/meetings/utils.js +163 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +547 -37
- package/test/unit/spec/members/request.js +76 -20
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +46 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -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/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +106 -9
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +78 -45
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +93 -49
- package/test/unit/spec/stats-analyzer/index.js +118 -65
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +64 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -794
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.js +0 -73
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -337
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.js +0 -164
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.js +0 -102
- package/dist/roap/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 -593
- package/src/media/util.js +0 -38
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/muteState.js +0 -318
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -986
- package/src/meetings/util.js +0 -176
- package/src/members/request.js +0 -131
- package/src/peer-connection-manager/index.js +0 -723
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/collection.js +0 -63
- package/src/roap/handler.js +0 -252
- package/src/roap/index.js +0 -380
- package/src/roap/request.js +0 -198
- package/src/roap/state.js +0 -149
- package/src/roap/util.js +0 -93
- package/src/statsAnalyzer/global.js +0 -131
- package/src/statsAnalyzer/index.js +0 -1020
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -293
- package/test/unit/spec/peerconnection-manager/index.js +0 -188
- package/test/unit/spec/peerconnection-manager/utils.js +0 -48
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- package/test/unit/spec/roap/util.js +0 -30
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {isEqual} from 'lodash';
|
|
1
|
+
import {isArray, isEqual, assignWith, cloneDeep} from 'lodash';
|
|
2
2
|
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -19,14 +19,14 @@ import {
|
|
|
19
19
|
} from '../constants';
|
|
20
20
|
import Metrics from '../metrics';
|
|
21
21
|
import {eventType} from '../metrics/config';
|
|
22
|
-
import InfoUtils from '
|
|
23
|
-
import FullState from '
|
|
24
|
-
import SelfUtils from '
|
|
25
|
-
import HostUtils from '
|
|
26
|
-
import ControlsUtils from '
|
|
27
|
-
import EmbeddedAppsUtils from '
|
|
28
|
-
import MediaSharesUtils from '
|
|
29
|
-
import LocusDeltaParser from '
|
|
22
|
+
import InfoUtils from './infoUtils';
|
|
23
|
+
import FullState from './fullState';
|
|
24
|
+
import SelfUtils from './selfUtils';
|
|
25
|
+
import HostUtils from './hostUtils';
|
|
26
|
+
import ControlsUtils from './controlsUtils';
|
|
27
|
+
import EmbeddedAppsUtils from './embeddedAppsUtils';
|
|
28
|
+
import MediaSharesUtils from './mediaSharesUtils';
|
|
29
|
+
import LocusDeltaParser from './parser';
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object
|
|
@@ -35,6 +35,43 @@ import LocusDeltaParser from '../locus-info/parser';
|
|
|
35
35
|
* @class LocusInfo
|
|
36
36
|
*/
|
|
37
37
|
export default class LocusInfo extends EventsScope {
|
|
38
|
+
compareAndUpdateFlags: any;
|
|
39
|
+
emitChange: any;
|
|
40
|
+
locusParser: any;
|
|
41
|
+
meetingId: any;
|
|
42
|
+
parsedLocus: any;
|
|
43
|
+
updateMeeting: any;
|
|
44
|
+
webex: any;
|
|
45
|
+
aclUrl: any;
|
|
46
|
+
baseSequence: any;
|
|
47
|
+
created: any;
|
|
48
|
+
deltaParticipants: any;
|
|
49
|
+
identities: any;
|
|
50
|
+
membership: any;
|
|
51
|
+
participants: any;
|
|
52
|
+
participantsUrl: any;
|
|
53
|
+
replaces: any;
|
|
54
|
+
scheduledMeeting: any;
|
|
55
|
+
sequence: any;
|
|
56
|
+
controls: any;
|
|
57
|
+
conversationUrl: any;
|
|
58
|
+
embeddedApps: any;
|
|
59
|
+
fullState: any;
|
|
60
|
+
host: any;
|
|
61
|
+
info: any;
|
|
62
|
+
roles: any;
|
|
63
|
+
mediaShares: any;
|
|
64
|
+
replace: any;
|
|
65
|
+
url: any;
|
|
66
|
+
services: any;
|
|
67
|
+
mainSessionLocusCache: any;
|
|
68
|
+
/**
|
|
69
|
+
* Constructor
|
|
70
|
+
* @param {boolean} updateMeeting true if the meeting should be updated
|
|
71
|
+
* @param {object} webex
|
|
72
|
+
* @param {string} meetingId
|
|
73
|
+
* @returns {undefined}
|
|
74
|
+
*/
|
|
38
75
|
constructor(updateMeeting, webex, meetingId) {
|
|
39
76
|
super();
|
|
40
77
|
this.parsedLocus = {
|
|
@@ -55,7 +92,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
55
92
|
* @param {Meeting} meeting
|
|
56
93
|
* @returns {undefined}
|
|
57
94
|
*/
|
|
58
|
-
applyLocusDeltaData(action, locus, meeting) {
|
|
95
|
+
applyLocusDeltaData(action: string, locus: any, meeting: any) {
|
|
59
96
|
const {DESYNC, USE_CURRENT, USE_INCOMING} = LocusDeltaParser.loci;
|
|
60
97
|
|
|
61
98
|
switch (action) {
|
|
@@ -94,7 +131,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
94
131
|
* @param {Meeting} meeting
|
|
95
132
|
* @returns {undefined}
|
|
96
133
|
*/
|
|
97
|
-
handleLocusDelta(locus, meeting) {
|
|
134
|
+
handleLocusDelta(locus: any, meeting: any) {
|
|
98
135
|
// register a function to process delta actions
|
|
99
136
|
if (!this.locusParser.onDeltaAction) {
|
|
100
137
|
// delta action, along with associated loci
|
|
@@ -112,7 +149,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
112
149
|
* @returns {undefined}
|
|
113
150
|
* @memberof LocusInfo
|
|
114
151
|
*/
|
|
115
|
-
init(locus = {}) {
|
|
152
|
+
init(locus: any = {}) {
|
|
116
153
|
this.created = locus.created || null;
|
|
117
154
|
this.scheduledMeeting = locus.meeting || null;
|
|
118
155
|
this.participantsUrl = locus.participantsUrl || null;
|
|
@@ -143,12 +180,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
143
180
|
*/
|
|
144
181
|
this.deltaParticipants = [];
|
|
145
182
|
|
|
183
|
+
this.updateLocusCache(locus);
|
|
146
184
|
// above section only updates the locusInfo object
|
|
147
185
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
|
148
186
|
this.updateParticipants(locus.participants);
|
|
149
187
|
// For 1:1 space meeting the conversation Url does not exist in locus.conversation
|
|
150
188
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
151
|
-
this.updateControls(locus.controls);
|
|
189
|
+
this.updateControls(locus.controls, locus.self);
|
|
152
190
|
this.updateLocusUrl(locus.url);
|
|
153
191
|
this.updateFullState(locus.fullState);
|
|
154
192
|
this.updateMeetingInfo(locus.info);
|
|
@@ -157,6 +195,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
157
195
|
this.updateSelf(locus.self, locus.participants);
|
|
158
196
|
this.updateHostInfo(locus.host);
|
|
159
197
|
this.updateMediaShares(locus.mediaShares);
|
|
198
|
+
this.updateServices(locus.links?.services);
|
|
160
199
|
}
|
|
161
200
|
|
|
162
201
|
/**
|
|
@@ -164,7 +203,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
164
203
|
* @returns {undefined}
|
|
165
204
|
* @memberof LocusInfo
|
|
166
205
|
*/
|
|
167
|
-
initialSetup(locus) {
|
|
206
|
+
initialSetup(locus: object) {
|
|
207
|
+
this.updateLocusCache(locus);
|
|
168
208
|
this.onFullLocus(locus);
|
|
169
209
|
|
|
170
210
|
// Change it to true after it receives it first locus object
|
|
@@ -177,9 +217,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
177
217
|
* @returns {undefined}
|
|
178
218
|
* @memberof LocusInfo
|
|
179
219
|
*/
|
|
180
|
-
parse(meeting, data) {
|
|
220
|
+
parse(meeting: any, data: any) {
|
|
221
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
181
222
|
const {eventType} = data;
|
|
182
|
-
|
|
223
|
+
const locus = this.getTheLocusToUpdate(data.locus);
|
|
183
224
|
LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);
|
|
184
225
|
|
|
185
226
|
switch (eventType) {
|
|
@@ -197,16 +238,16 @@ export default class LocusInfo extends EventsScope {
|
|
|
197
238
|
case LOCUSEVENT.PARTICIPANT_DECLINED:
|
|
198
239
|
case LOCUSEVENT.FLOOR_GRANTED:
|
|
199
240
|
case LOCUSEVENT.FLOOR_RELEASED:
|
|
200
|
-
this.onFullLocus(
|
|
241
|
+
this.onFullLocus(locus, eventType);
|
|
201
242
|
break;
|
|
202
243
|
case LOCUSEVENT.DIFFERENCE:
|
|
203
|
-
this.handleLocusDelta(
|
|
244
|
+
this.handleLocusDelta(locus, meeting);
|
|
204
245
|
break;
|
|
205
246
|
|
|
206
247
|
default:
|
|
207
248
|
// Why will there be a event with no eventType ????
|
|
208
249
|
// we may not need this, we can get full locus
|
|
209
|
-
this.handleLocusDelta(
|
|
250
|
+
this.handleLocusDelta(locus, meeting);
|
|
210
251
|
}
|
|
211
252
|
}
|
|
212
253
|
|
|
@@ -217,18 +258,19 @@ export default class LocusInfo extends EventsScope {
|
|
|
217
258
|
* @returns {undefined}
|
|
218
259
|
* @memberof LocusInfo
|
|
219
260
|
*/
|
|
220
|
-
emitScoped(scope, eventName, args) {
|
|
261
|
+
emitScoped(scope?: any, eventName?: string, args?: any) {
|
|
221
262
|
return this.emit(scope, eventName, args);
|
|
222
263
|
}
|
|
223
264
|
|
|
224
265
|
/**
|
|
225
266
|
* updates the locus with full locus object
|
|
226
267
|
* @param {object} locus locus object
|
|
227
|
-
* @param {
|
|
268
|
+
* @param {string} eventType particulat locus event
|
|
228
269
|
* @returns {object} null
|
|
229
270
|
* @memberof LocusInfo
|
|
230
271
|
*/
|
|
231
|
-
|
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
273
|
+
onFullLocus(locus: any, eventType?: string) {
|
|
232
274
|
if (!locus) {
|
|
233
275
|
LoggerProxy.logger.error(
|
|
234
276
|
'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'
|
|
@@ -237,8 +279,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
237
279
|
this.updateParticipantDeltas(locus.participants);
|
|
238
280
|
this.scheduledMeeting = locus.meeting || null;
|
|
239
281
|
this.participants = locus.participants;
|
|
282
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
240
283
|
this.updateLocusInfo(locus);
|
|
241
|
-
this.updateParticipants(locus.participants);
|
|
284
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
242
285
|
this.isMeetingActive();
|
|
243
286
|
this.handleOneOnOneEvent(eventType);
|
|
244
287
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
@@ -252,7 +295,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
252
295
|
* @returns {undefined}
|
|
253
296
|
* @memberof LocusInfo
|
|
254
297
|
*/
|
|
255
|
-
|
|
298
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
299
|
+
handleOneOnOneEvent(eventType: string) {
|
|
256
300
|
if (
|
|
257
301
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
258
302
|
this.parsedLocus.fullState.type === _SIP_BRIDGE_
|
|
@@ -295,9 +339,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
295
339
|
* @returns {undefined}
|
|
296
340
|
* @memberof LocusInfo
|
|
297
341
|
*/
|
|
298
|
-
onDeltaLocus(locus) {
|
|
342
|
+
onDeltaLocus(locus: any) {
|
|
343
|
+
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
|
299
344
|
this.updateLocusInfo(locus);
|
|
300
|
-
this.updateParticipants(locus.participants);
|
|
345
|
+
this.updateParticipants(locus.participants, isReplaceMembers);
|
|
301
346
|
this.isMeetingActive();
|
|
302
347
|
}
|
|
303
348
|
|
|
@@ -307,7 +352,14 @@ export default class LocusInfo extends EventsScope {
|
|
|
307
352
|
* @memberof LocusInfo
|
|
308
353
|
*/
|
|
309
354
|
updateLocusInfo(locus) {
|
|
310
|
-
|
|
355
|
+
if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {
|
|
356
|
+
// When moved to a breakout session locus sends a message for the previous locus
|
|
357
|
+
// indicating that we have been moved. It isn't helpful to continue parsing this
|
|
358
|
+
// as it gets interpreted as if we have left the call
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
this.updateControls(locus.controls, locus.self);
|
|
311
363
|
this.updateConversationUrl(locus.conversationUrl, locus.info);
|
|
312
364
|
this.updateCreated(locus.created);
|
|
313
365
|
this.updateFullState(locus.fullState);
|
|
@@ -324,6 +376,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
324
376
|
this.updateMemberShip(locus.membership);
|
|
325
377
|
this.updateIdentifiers(locus.identities);
|
|
326
378
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
379
|
+
this.updateServices(locus.links?.services);
|
|
327
380
|
this.compareAndUpdate();
|
|
328
381
|
// update which required to compare different objects from locus
|
|
329
382
|
}
|
|
@@ -334,7 +387,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
334
387
|
* @returns {Array}
|
|
335
388
|
* @memberof LocusInfo
|
|
336
389
|
*/
|
|
337
|
-
getLocusPartner(participants
|
|
390
|
+
getLocusPartner(participants: Array<any>, self: any) {
|
|
338
391
|
if (!participants || participants.length === 0) {
|
|
339
392
|
return null;
|
|
340
393
|
}
|
|
@@ -345,6 +398,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
345
398
|
self &&
|
|
346
399
|
participant.identity !== self.identity &&
|
|
347
400
|
(participants.length <= 2 || (participant.type === _USER_ && !participant.removed))
|
|
401
|
+
// @ts-ignore
|
|
348
402
|
) || this.partner
|
|
349
403
|
);
|
|
350
404
|
}
|
|
@@ -359,6 +413,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
359
413
|
this.parsedLocus.fullState.type === _CALL_ ||
|
|
360
414
|
this.parsedLocus.fullState.type === _SIP_BRIDGE_
|
|
361
415
|
) {
|
|
416
|
+
// @ts-ignore
|
|
362
417
|
const partner = this.getLocusPartner(this.participants, this.self);
|
|
363
418
|
|
|
364
419
|
this.updateMeeting({partner});
|
|
@@ -390,8 +445,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
390
445
|
shouldLeave: false,
|
|
391
446
|
}
|
|
392
447
|
);
|
|
393
|
-
}
|
|
394
|
-
else if (
|
|
448
|
+
} else if (
|
|
395
449
|
partner.state === MEETING_STATE.STATES.LEFT &&
|
|
396
450
|
this.parsedLocus.self &&
|
|
397
451
|
(this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||
|
|
@@ -414,8 +468,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
414
468
|
this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,
|
|
415
469
|
}
|
|
416
470
|
);
|
|
417
|
-
}
|
|
418
|
-
else if (
|
|
471
|
+
} else if (
|
|
419
472
|
this.parsedLocus.self &&
|
|
420
473
|
this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&
|
|
421
474
|
(partner.state === MEETING_STATE.STATES.LEFT ||
|
|
@@ -439,11 +492,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
439
492
|
}
|
|
440
493
|
);
|
|
441
494
|
}
|
|
442
|
-
}
|
|
443
|
-
else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
495
|
+
} else if (this.parsedLocus.fullState.type === _MEETING_) {
|
|
444
496
|
if (
|
|
445
497
|
this.fullState &&
|
|
446
498
|
(this.fullState.state === LOCUS.STATE.INACTIVE ||
|
|
499
|
+
// @ts-ignore
|
|
447
500
|
this.fullState.state === LOCUS.STATE.TERMINATING)
|
|
448
501
|
) {
|
|
449
502
|
LoggerProxy.logger.warn(
|
|
@@ -464,8 +517,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
464
517
|
shouldLeave: false,
|
|
465
518
|
}
|
|
466
519
|
);
|
|
467
|
-
}
|
|
468
|
-
else if (this.fullState && this.fullState.removed) {
|
|
520
|
+
} else if (this.fullState && this.fullState.removed) {
|
|
469
521
|
// user has been dropped from a meeting
|
|
470
522
|
Metrics.postEvent({
|
|
471
523
|
event: eventType.REMOTE_ENDED,
|
|
@@ -499,8 +551,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
499
551
|
}
|
|
500
552
|
);
|
|
501
553
|
}
|
|
502
|
-
}
|
|
503
|
-
else {
|
|
554
|
+
} else {
|
|
504
555
|
LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');
|
|
505
556
|
}
|
|
506
557
|
}
|
|
@@ -543,8 +594,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
543
594
|
canAssignHost: true,
|
|
544
595
|
}
|
|
545
596
|
);
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
597
|
+
} else {
|
|
548
598
|
this.emitScoped(
|
|
549
599
|
{
|
|
550
600
|
file: 'locus-info',
|
|
@@ -565,13 +615,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
565
615
|
* @param {Array} [participants] - The participants to update against.
|
|
566
616
|
* @returns {void}
|
|
567
617
|
*/
|
|
568
|
-
updateParticipantDeltas(participants = []) {
|
|
618
|
+
updateParticipantDeltas(participants: Array<any> = []) {
|
|
569
619
|
// Used to find a participant within a participants collection.
|
|
570
620
|
const findParticipant = (participant, collection) =>
|
|
571
621
|
collection.find((item) => item.person.id === participant.person.id);
|
|
572
622
|
|
|
573
623
|
// Generates an object that indicates which state properties have changed.
|
|
574
|
-
const generateDelta = (prevState = {}, newState = {}) => {
|
|
624
|
+
const generateDelta = (prevState: any = {}, newState: any = {}) => {
|
|
575
625
|
// Setup deltas.
|
|
576
626
|
const deltas = {
|
|
577
627
|
audioStatus: prevState.audioStatus !== newState.audioStatus,
|
|
@@ -608,13 +658,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
608
658
|
}
|
|
609
659
|
|
|
610
660
|
/**
|
|
611
|
-
*
|
|
661
|
+
* update meeting's members
|
|
612
662
|
* @param {Object} participants new participants object
|
|
613
|
-
* @param {
|
|
663
|
+
* @param {Boolean} isReplace is replace the whole members
|
|
614
664
|
* @returns {Array} updatedParticipants
|
|
615
665
|
* @memberof LocusInfo
|
|
616
666
|
*/
|
|
617
|
-
updateParticipants(participants) {
|
|
667
|
+
updateParticipants(participants: object, isReplace?: boolean) {
|
|
618
668
|
this.emitScoped(
|
|
619
669
|
{
|
|
620
670
|
file: 'locus-info',
|
|
@@ -627,16 +677,18 @@ export default class LocusInfo extends EventsScope {
|
|
|
627
677
|
selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,
|
|
628
678
|
selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,
|
|
629
679
|
hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,
|
|
680
|
+
isReplace,
|
|
630
681
|
}
|
|
631
682
|
);
|
|
632
683
|
}
|
|
633
684
|
|
|
634
685
|
/**
|
|
635
686
|
* @param {Object} controls
|
|
687
|
+
* @param {Object} self
|
|
636
688
|
* @returns {undefined}
|
|
637
689
|
* @memberof LocusInfo
|
|
638
690
|
*/
|
|
639
|
-
updateControls(controls) {
|
|
691
|
+
updateControls(controls: object, self: object) {
|
|
640
692
|
if (controls && !isEqual(this.controls, controls)) {
|
|
641
693
|
this.parsedLocus.controls = ControlsUtils.parse(controls);
|
|
642
694
|
const {
|
|
@@ -646,6 +698,8 @@ export default class LocusInfo extends EventsScope {
|
|
|
646
698
|
hasMeetingContainerChanged,
|
|
647
699
|
hasTranscribeChanged,
|
|
648
700
|
hasEntryExitToneChanged,
|
|
701
|
+
hasBreakoutChanged,
|
|
702
|
+
hasVideoEnabledChanged,
|
|
649
703
|
},
|
|
650
704
|
current,
|
|
651
705
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
@@ -656,13 +710,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
656
710
|
if (hasRecordingPausedChanged) {
|
|
657
711
|
if (current.record.paused) {
|
|
658
712
|
state = RECORDING_STATE.PAUSED;
|
|
659
|
-
}
|
|
660
|
-
else {
|
|
713
|
+
} else {
|
|
661
714
|
// state will be `IDLE` if the recording is not active, even when there is a `pause` status change.
|
|
662
715
|
state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;
|
|
663
716
|
}
|
|
664
|
-
}
|
|
665
|
-
else if (hasRecordingChanged) {
|
|
717
|
+
} else if (hasRecordingChanged) {
|
|
666
718
|
state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;
|
|
667
719
|
}
|
|
668
720
|
|
|
@@ -711,9 +763,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
711
763
|
);
|
|
712
764
|
}
|
|
713
765
|
|
|
766
|
+
if (hasBreakoutChanged) {
|
|
767
|
+
const {breakout} = current;
|
|
768
|
+
breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(
|
|
769
|
+
self,
|
|
770
|
+
this.webex.internal.device.url
|
|
771
|
+
);
|
|
772
|
+
this.emitScoped(
|
|
773
|
+
{
|
|
774
|
+
file: 'locus-info',
|
|
775
|
+
function: 'updateControls',
|
|
776
|
+
},
|
|
777
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,
|
|
778
|
+
{
|
|
779
|
+
breakout,
|
|
780
|
+
}
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
|
|
714
784
|
if (hasEntryExitToneChanged) {
|
|
715
785
|
const {entryExitTone} = current;
|
|
716
786
|
|
|
787
|
+
this.updateMeeting({entryExitTone});
|
|
788
|
+
|
|
717
789
|
this.emitScoped(
|
|
718
790
|
{
|
|
719
791
|
file: 'locus-info',
|
|
@@ -721,11 +793,29 @@ export default class LocusInfo extends EventsScope {
|
|
|
721
793
|
},
|
|
722
794
|
LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
|
|
723
795
|
{
|
|
724
|
-
entryExitTone
|
|
796
|
+
entryExitTone,
|
|
725
797
|
}
|
|
726
798
|
);
|
|
799
|
+
}
|
|
727
800
|
|
|
728
|
-
|
|
801
|
+
// videoEnabled is handled differently than other controls,
|
|
802
|
+
// to fit with audio mute status logic
|
|
803
|
+
if (hasVideoEnabledChanged) {
|
|
804
|
+
const {videoEnabled} = current;
|
|
805
|
+
|
|
806
|
+
this.updateMeeting({unmuteVideoAllowed: videoEnabled});
|
|
807
|
+
|
|
808
|
+
this.emitScoped(
|
|
809
|
+
{
|
|
810
|
+
file: 'locus-info',
|
|
811
|
+
function: 'updateControls',
|
|
812
|
+
},
|
|
813
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
814
|
+
{
|
|
815
|
+
// muted: not part of locus.controls
|
|
816
|
+
unmuteAllowed: videoEnabled,
|
|
817
|
+
}
|
|
818
|
+
);
|
|
729
819
|
}
|
|
730
820
|
|
|
731
821
|
this.controls = controls;
|
|
@@ -738,12 +828,11 @@ export default class LocusInfo extends EventsScope {
|
|
|
738
828
|
* @returns {undefined}
|
|
739
829
|
* @memberof LocusInfo
|
|
740
830
|
*/
|
|
741
|
-
updateConversationUrl(conversationUrl, info) {
|
|
831
|
+
updateConversationUrl(conversationUrl: string, info: any) {
|
|
742
832
|
if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {
|
|
743
833
|
this.conversationUrl = conversationUrl;
|
|
744
834
|
this.updateMeeting({conversationUrl});
|
|
745
|
-
}
|
|
746
|
-
else if (
|
|
835
|
+
} else if (
|
|
747
836
|
info &&
|
|
748
837
|
info.conversationUrl &&
|
|
749
838
|
!isEqual(this.conversationUrl, info.conversationUrl)
|
|
@@ -758,18 +847,39 @@ export default class LocusInfo extends EventsScope {
|
|
|
758
847
|
* @returns {undefined}
|
|
759
848
|
* @memberof LocusInfo
|
|
760
849
|
*/
|
|
761
|
-
updateCreated(created) {
|
|
850
|
+
updateCreated(created: object) {
|
|
762
851
|
if (created && !isEqual(this.created, created)) {
|
|
763
852
|
this.created = created;
|
|
764
853
|
}
|
|
765
854
|
}
|
|
766
855
|
|
|
856
|
+
/**
|
|
857
|
+
* @param {Object} services
|
|
858
|
+
* @returns {undefined}
|
|
859
|
+
* @memberof LocusInfo
|
|
860
|
+
*/
|
|
861
|
+
updateServices(services: Record<'breakout' | 'record', {url: string}>) {
|
|
862
|
+
if (services && !isEqual(this.services, services)) {
|
|
863
|
+
this.services = services;
|
|
864
|
+
this.emitScoped(
|
|
865
|
+
{
|
|
866
|
+
file: 'locus-info',
|
|
867
|
+
function: 'updateServices',
|
|
868
|
+
},
|
|
869
|
+
LOCUSINFO.EVENTS.LINKS_SERVICES,
|
|
870
|
+
{
|
|
871
|
+
services,
|
|
872
|
+
}
|
|
873
|
+
);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
767
877
|
/**
|
|
768
878
|
* @param {Object} fullState
|
|
769
879
|
* @returns {undefined}
|
|
770
880
|
* @memberof LocusInfo
|
|
771
881
|
*/
|
|
772
|
-
updateFullState(fullState) {
|
|
882
|
+
updateFullState(fullState: object) {
|
|
773
883
|
if (fullState && !isEqual(this.fullState, fullState)) {
|
|
774
884
|
const result = FullState.getFullState(this.fullState, fullState);
|
|
775
885
|
|
|
@@ -813,7 +923,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
813
923
|
* @memberof LocusInfo
|
|
814
924
|
* emits internal event locus_info_update_host
|
|
815
925
|
*/
|
|
816
|
-
updateHostInfo(host) {
|
|
926
|
+
updateHostInfo(host: object) {
|
|
817
927
|
if (host && !isEqual(this.host, host)) {
|
|
818
928
|
const parsedHosts = HostUtils.getHosts(this.host, host);
|
|
819
929
|
|
|
@@ -834,8 +944,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
834
944
|
);
|
|
835
945
|
}
|
|
836
946
|
this.host = host;
|
|
837
|
-
}
|
|
838
|
-
else {
|
|
947
|
+
} else {
|
|
839
948
|
this.compareAndUpdateFlags.compareSelfAndHost = false;
|
|
840
949
|
}
|
|
841
950
|
}
|
|
@@ -846,9 +955,12 @@ export default class LocusInfo extends EventsScope {
|
|
|
846
955
|
* @returns {undefined}
|
|
847
956
|
* @memberof LocusInfo
|
|
848
957
|
*/
|
|
849
|
-
updateMeetingInfo(info, self) {
|
|
850
|
-
|
|
851
|
-
|
|
958
|
+
updateMeetingInfo(info: object, self?: object) {
|
|
959
|
+
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
|
960
|
+
if (
|
|
961
|
+
(info && !isEqual(this.info, info)) ||
|
|
962
|
+
(roles.length && !isEqual(this.roles, roles) && info)
|
|
963
|
+
) {
|
|
852
964
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
|
853
965
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
|
854
966
|
|
|
@@ -887,6 +999,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
887
999
|
// Parses the info and adds necessary values
|
|
888
1000
|
this.updateMeeting(parsedInfo.current);
|
|
889
1001
|
}
|
|
1002
|
+
this.roles = roles;
|
|
890
1003
|
}
|
|
891
1004
|
|
|
892
1005
|
/**
|
|
@@ -894,7 +1007,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
894
1007
|
* @returns {undefined}
|
|
895
1008
|
* @memberof LocusInfo
|
|
896
1009
|
*/
|
|
897
|
-
updateEmbeddedApps(embeddedApps) {
|
|
1010
|
+
updateEmbeddedApps(embeddedApps: object) {
|
|
898
1011
|
// don't do anything if the arrays of apps haven't changed significantly
|
|
899
1012
|
if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {
|
|
900
1013
|
return;
|
|
@@ -922,11 +1035,13 @@ export default class LocusInfo extends EventsScope {
|
|
|
922
1035
|
* @memberof LocusInfo
|
|
923
1036
|
* emits internal event locus_info_update_media_shares
|
|
924
1037
|
*/
|
|
925
|
-
updateMediaShares(mediaShares) {
|
|
1038
|
+
updateMediaShares(mediaShares: object) {
|
|
926
1039
|
if (mediaShares && !isEqual(this.mediaShares, mediaShares)) {
|
|
927
1040
|
const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);
|
|
928
1041
|
|
|
929
1042
|
this.updateMeeting(parsedMediaShares.current);
|
|
1043
|
+
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
1044
|
+
this.mediaShares = mediaShares;
|
|
930
1045
|
this.emitScoped(
|
|
931
1046
|
{
|
|
932
1047
|
file: 'locus-info',
|
|
@@ -938,8 +1053,6 @@ export default class LocusInfo extends EventsScope {
|
|
|
938
1053
|
previous: parsedMediaShares.previous,
|
|
939
1054
|
}
|
|
940
1055
|
);
|
|
941
|
-
this.parsedLocus.mediaShares = parsedMediaShares.current;
|
|
942
|
-
this.mediaShares = mediaShares;
|
|
943
1056
|
}
|
|
944
1057
|
}
|
|
945
1058
|
|
|
@@ -948,7 +1061,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
948
1061
|
* @returns {undefined}
|
|
949
1062
|
* @memberof LocusInfo
|
|
950
1063
|
*/
|
|
951
|
-
updateParticipantsUrl(participantsUrl) {
|
|
1064
|
+
updateParticipantsUrl(participantsUrl: string) {
|
|
952
1065
|
if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {
|
|
953
1066
|
this.participantsUrl = participantsUrl;
|
|
954
1067
|
}
|
|
@@ -959,7 +1072,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
959
1072
|
* @returns {undefined}
|
|
960
1073
|
* @memberof LocusInfo
|
|
961
1074
|
*/
|
|
962
|
-
updateReplace(replace) {
|
|
1075
|
+
updateReplace(replace: object) {
|
|
963
1076
|
if (replace && !isEqual(this.replace, replace)) {
|
|
964
1077
|
this.replace = replace;
|
|
965
1078
|
}
|
|
@@ -973,8 +1086,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
973
1086
|
* @memberof LocusInfo
|
|
974
1087
|
* emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self
|
|
975
1088
|
*/
|
|
976
|
-
updateSelf(self, participants) {
|
|
1089
|
+
updateSelf(self: any, participants: Array<any>) {
|
|
1090
|
+
// @ts-ignore - check where this.self come from
|
|
977
1091
|
if (self && !isEqual(this.self, self)) {
|
|
1092
|
+
// @ts-ignore
|
|
978
1093
|
const parsedSelves = SelfUtils.getSelves(this.self, self, this.webex.internal.device.url);
|
|
979
1094
|
|
|
980
1095
|
this.updateMeeting(parsedSelves.current);
|
|
@@ -1000,8 +1115,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1000
1115
|
|
|
1001
1116
|
if (parsedSelves.updates.moderatorChanged) {
|
|
1002
1117
|
this.compareAndUpdateFlags.compareHostAndSelf = true;
|
|
1003
|
-
}
|
|
1004
|
-
else {
|
|
1118
|
+
} else {
|
|
1005
1119
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1006
1120
|
}
|
|
1007
1121
|
|
|
@@ -1016,6 +1130,17 @@ export default class LocusInfo extends EventsScope {
|
|
|
1016
1130
|
);
|
|
1017
1131
|
}
|
|
1018
1132
|
|
|
1133
|
+
if (parsedSelves.updates.breakoutsChanged) {
|
|
1134
|
+
this.emitScoped(
|
|
1135
|
+
{
|
|
1136
|
+
file: 'locus-info',
|
|
1137
|
+
function: 'updateSelf',
|
|
1138
|
+
},
|
|
1139
|
+
LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,
|
|
1140
|
+
{breakoutSessions: parsedSelves.current.breakoutSessions}
|
|
1141
|
+
);
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1019
1144
|
if (parsedSelves.updates.isMediaInactiveOrReleased) {
|
|
1020
1145
|
this.emitScoped(
|
|
1021
1146
|
{
|
|
@@ -1037,6 +1162,31 @@ export default class LocusInfo extends EventsScope {
|
|
|
1037
1162
|
self
|
|
1038
1163
|
);
|
|
1039
1164
|
}
|
|
1165
|
+
// When the user upgrades to moderator or cohost
|
|
1166
|
+
if (parsedSelves.updates.isUpgradeToModeratorOrCohost) {
|
|
1167
|
+
this.emitScoped(
|
|
1168
|
+
{
|
|
1169
|
+
file: 'locus-info',
|
|
1170
|
+
function: 'updateSelf',
|
|
1171
|
+
},
|
|
1172
|
+
LOCUSINFO.EVENTS.SELF_MODERATOR_OR_COHOST_UPGRADE,
|
|
1173
|
+
self
|
|
1174
|
+
);
|
|
1175
|
+
}
|
|
1176
|
+
//
|
|
1177
|
+
if (parsedSelves.updates.isVideoMutedByOthersChanged) {
|
|
1178
|
+
this.emitScoped(
|
|
1179
|
+
{
|
|
1180
|
+
file: 'locus-info',
|
|
1181
|
+
function: 'updateSelf',
|
|
1182
|
+
},
|
|
1183
|
+
LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,
|
|
1184
|
+
{
|
|
1185
|
+
muted: parsedSelves.current.remoteVideoMuted,
|
|
1186
|
+
// unmuteAllowed: not part of .self
|
|
1187
|
+
}
|
|
1188
|
+
);
|
|
1189
|
+
}
|
|
1040
1190
|
if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {
|
|
1041
1191
|
this.emitScoped(
|
|
1042
1192
|
{
|
|
@@ -1100,6 +1250,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1100
1250
|
file: 'locus-info',
|
|
1101
1251
|
function: 'updateSelf',
|
|
1102
1252
|
},
|
|
1253
|
+
// @ts-ignore
|
|
1103
1254
|
LOCUSINFO.EVENTS.MEDIA_INACTIVITY,
|
|
1104
1255
|
SelfUtils.getMediaStatus(self.mediaSessions)
|
|
1105
1256
|
);
|
|
@@ -1168,9 +1319,9 @@ export default class LocusInfo extends EventsScope {
|
|
|
1168
1319
|
}
|
|
1169
1320
|
);
|
|
1170
1321
|
this.parsedLocus.self = parsedSelves.current;
|
|
1322
|
+
// @ts-ignore
|
|
1171
1323
|
this.self = self;
|
|
1172
|
-
}
|
|
1173
|
-
else {
|
|
1324
|
+
} else {
|
|
1174
1325
|
this.compareAndUpdateFlags.compareHostAndSelf = false;
|
|
1175
1326
|
}
|
|
1176
1327
|
}
|
|
@@ -1181,7 +1332,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1181
1332
|
* @returns {undefined}
|
|
1182
1333
|
* emits internal event locus_info_update_url
|
|
1183
1334
|
*/
|
|
1184
|
-
updateLocusUrl(url) {
|
|
1335
|
+
updateLocusUrl(url: string) {
|
|
1185
1336
|
if (url && this.url !== url) {
|
|
1186
1337
|
this.url = url;
|
|
1187
1338
|
this.updateMeeting({locusUrl: url});
|
|
@@ -1201,7 +1352,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1201
1352
|
* @returns {undefined}
|
|
1202
1353
|
* @memberof LocusInfo
|
|
1203
1354
|
*/
|
|
1204
|
-
updateAclUrl(aclUrl) {
|
|
1355
|
+
updateAclUrl(aclUrl: string) {
|
|
1205
1356
|
if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {
|
|
1206
1357
|
this.aclUrl = aclUrl;
|
|
1207
1358
|
}
|
|
@@ -1212,7 +1363,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1212
1363
|
* @returns {undefined}
|
|
1213
1364
|
* @memberof LocusInfo
|
|
1214
1365
|
*/
|
|
1215
|
-
updateBasequence(baseSequence) {
|
|
1366
|
+
updateBasequence(baseSequence: number) {
|
|
1216
1367
|
if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {
|
|
1217
1368
|
this.baseSequence = baseSequence;
|
|
1218
1369
|
}
|
|
@@ -1223,7 +1374,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1223
1374
|
* @returns {undefined}
|
|
1224
1375
|
* @memberof LocusInfo
|
|
1225
1376
|
*/
|
|
1226
|
-
updateSequence(sequence) {
|
|
1377
|
+
updateSequence(sequence: number) {
|
|
1227
1378
|
if (sequence && !isEqual(this.sequence, sequence)) {
|
|
1228
1379
|
this.sequence = sequence;
|
|
1229
1380
|
}
|
|
@@ -1234,7 +1385,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
1234
1385
|
* @returns {undefined}
|
|
1235
1386
|
* @memberof LocusInfo
|
|
1236
1387
|
*/
|
|
1237
|
-
updateMemberShip(membership) {
|
|
1388
|
+
updateMemberShip(membership: object) {
|
|
1238
1389
|
if (membership && !isEqual(this.membership, membership)) {
|
|
1239
1390
|
this.membership = membership;
|
|
1240
1391
|
}
|
|
@@ -1245,9 +1396,109 @@ export default class LocusInfo extends EventsScope {
|
|
|
1245
1396
|
* @returns {undefined}
|
|
1246
1397
|
* @memberof LocusInfo
|
|
1247
1398
|
*/
|
|
1248
|
-
updateIdentifiers(identities) {
|
|
1399
|
+
updateIdentifiers(identities: Array<any>) {
|
|
1249
1400
|
if (identities && !isEqual(this.identities, identities)) {
|
|
1250
1401
|
this.identities = identities;
|
|
1251
1402
|
}
|
|
1252
1403
|
}
|
|
1404
|
+
|
|
1405
|
+
/**
|
|
1406
|
+
* check the locus is main session's one or not, if is main session's, update main session cache
|
|
1407
|
+
* @param {Object} locus
|
|
1408
|
+
* @returns {undefined}
|
|
1409
|
+
* @memberof LocusInfo
|
|
1410
|
+
*/
|
|
1411
|
+
updateLocusCache(locus: any) {
|
|
1412
|
+
const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);
|
|
1413
|
+
if (isMainSessionDTO) {
|
|
1414
|
+
this.updateMainSessionLocusCache(locus);
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
/**
|
|
1419
|
+
* if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)
|
|
1420
|
+
* if join breakout from main session, need to query main locus url (if response with 403 means no privilege, need to clear the cache)
|
|
1421
|
+
* @param {Object} newLocus
|
|
1422
|
+
* @returns {Object}
|
|
1423
|
+
* @memberof LocusInfo
|
|
1424
|
+
*/
|
|
1425
|
+
getTheLocusToUpdate(newLocus: any) {
|
|
1426
|
+
const switchStatus = ControlsUtils.getSessionSwitchStatus(this.controls, newLocus.controls);
|
|
1427
|
+
if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {
|
|
1428
|
+
return cloneDeep(this.mainSessionLocusCache);
|
|
1429
|
+
}
|
|
1430
|
+
if (switchStatus.isJoinToBreakout) {
|
|
1431
|
+
this.emitScoped(
|
|
1432
|
+
{
|
|
1433
|
+
file: 'locus-info',
|
|
1434
|
+
function: 'updateControls',
|
|
1435
|
+
},
|
|
1436
|
+
LOCUSINFO.EVENTS.CONTROLS_JOIN_BREAKOUT_FROM_MAIN,
|
|
1437
|
+
{
|
|
1438
|
+
mainLocusUrl: this.url,
|
|
1439
|
+
}
|
|
1440
|
+
);
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
return newLocus;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
/**
|
|
1447
|
+
* merge participants by participant id
|
|
1448
|
+
* @param {Array} participants
|
|
1449
|
+
* @param {Array} sourceParticipants
|
|
1450
|
+
* @returns {Array} merged participants
|
|
1451
|
+
* @memberof LocusInfo
|
|
1452
|
+
*/
|
|
1453
|
+
// eslint-disable-next-line class-methods-use-this
|
|
1454
|
+
mergeParticipants(participants, sourceParticipants) {
|
|
1455
|
+
if (!sourceParticipants || !sourceParticipants.length) return participants;
|
|
1456
|
+
if (!participants || !participants.length) {
|
|
1457
|
+
return sourceParticipants;
|
|
1458
|
+
}
|
|
1459
|
+
sourceParticipants.forEach((participant) => {
|
|
1460
|
+
const existIndex = participants.findIndex((p) => p.id === participant.id);
|
|
1461
|
+
if (existIndex > -1) {
|
|
1462
|
+
participants.splice(existIndex, 1, participant);
|
|
1463
|
+
} else {
|
|
1464
|
+
participants.push(participant);
|
|
1465
|
+
}
|
|
1466
|
+
});
|
|
1467
|
+
|
|
1468
|
+
return participants;
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
/**
|
|
1472
|
+
* need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout
|
|
1473
|
+
* @param {Object} mainLocus
|
|
1474
|
+
* @returns {undefined}
|
|
1475
|
+
* @memberof LocusInfo
|
|
1476
|
+
*/
|
|
1477
|
+
updateMainSessionLocusCache(mainLocus: any) {
|
|
1478
|
+
if (!mainLocus) {
|
|
1479
|
+
return;
|
|
1480
|
+
}
|
|
1481
|
+
const locusClone = cloneDeep(mainLocus);
|
|
1482
|
+
if (this.mainSessionLocusCache) {
|
|
1483
|
+
// shallow merge and do special merge for participants
|
|
1484
|
+
assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {
|
|
1485
|
+
if (key === 'participants') {
|
|
1486
|
+
return this.mergeParticipants(objValue, srcValue);
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
return srcValue || objValue;
|
|
1490
|
+
});
|
|
1491
|
+
} else {
|
|
1492
|
+
this.mainSessionLocusCache = locusClone;
|
|
1493
|
+
}
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
/**
|
|
1497
|
+
* clear main session cache
|
|
1498
|
+
* @returns {undefined}
|
|
1499
|
+
* @memberof LocusInfo
|
|
1500
|
+
*/
|
|
1501
|
+
clearMainSessionLocusCache() {
|
|
1502
|
+
this.mainSessionLocusCache = null;
|
|
1503
|
+
}
|
|
1253
1504
|
}
|