@webex/plugin-meetings 3.0.0-beta.22 → 3.0.0-beta.221
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 +46 -8
- 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 +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- 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 +841 -19
- package/dist/breakouts/index.js.map +1 -1
- 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/errors/webex-errors.js +3 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +188 -30
- 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 +106 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -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 +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +357 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +219 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +49 -106
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2587 -2560
- 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 +228 -123
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +244 -194
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +568 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +20 -5
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +361 -84
- 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 +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- 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 +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- 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 +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +90 -30
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +16 -7
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +25 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +111 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +97 -36
- 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 +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +326 -311
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +90 -53
- package/dist/statsAnalyzer/mqaUtil.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/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 +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1028 -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/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 +271 -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 +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
- package/dist/types/meeting/index.d.ts +1512 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +289 -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 +94 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +361 -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 +159 -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 +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +158 -0
- package/dist/types/reachability/request.d.ts +39 -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 +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -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 +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/package.json +23 -20
- 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 +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +2 -7
- package/src/constants.ts +175 -21
- 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 +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +381 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +89 -109
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2062 -2137
- package/src/meeting/locusMediaRequest.ts +314 -0
- package/src/meeting/muteState.ts +227 -130
- package/src/meeting/request.ts +157 -116
- package/src/meeting/util.ts +555 -396
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -14
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +397 -102
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +113 -32
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +76 -18
- package/src/reachability/request.ts +16 -7
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +25 -30
- package/src/roap/request.ts +103 -95
- package/src/roap/turnDiscovery.ts +51 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +376 -386
- package/src/statsAnalyzer/mqaUtil.ts +100 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +336 -259
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- 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 +1545 -48
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- 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 +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3510 -1747
- package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +417 -45
- package/test/unit/spec/meeting/utils.js +601 -53
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +874 -150
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +185 -7
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +27 -51
- package/test/unit/spec/roap/request.ts +202 -85
- package/test/unit/spec/roap/turnDiscovery.ts +36 -8
- package/test/unit/spec/rtcMetrics/index.ts +68 -0
- package/test/unit/spec/stats-analyzer/index.js +92 -41
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
package/src/meetings/index.ts
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
import '@webex/internal-plugin-mercury';
|
|
4
4
|
import '@webex/internal-plugin-conversation';
|
|
5
|
+
import '@webex/internal-plugin-metrics';
|
|
5
6
|
// @ts-ignore
|
|
6
7
|
import {WebexPlugin} from '@webex/webex-core';
|
|
7
8
|
import {setLogger} from '@webex/internal-media-core';
|
|
8
9
|
|
|
10
|
+
import * as mediaHelpersModule from '@webex/media-helpers';
|
|
11
|
+
|
|
9
12
|
import 'webrtc-adapter';
|
|
10
13
|
|
|
11
14
|
import Metrics from '../metrics';
|
|
12
|
-
import {trigger, eventType} from '../metrics/config';
|
|
13
15
|
import LoggerConfig from '../common/logs/logger-config';
|
|
14
16
|
import StaticConfig from '../common/config';
|
|
15
17
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
@@ -40,6 +42,9 @@ import {
|
|
|
40
42
|
MEETING_REMOVED_REASON,
|
|
41
43
|
_CONVERSATION_URL_,
|
|
42
44
|
CONVERSATION_URL,
|
|
45
|
+
MEETINGNUMBER,
|
|
46
|
+
_JOINED_,
|
|
47
|
+
_MOVED_,
|
|
43
48
|
} from '../constants';
|
|
44
49
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
45
50
|
import MeetingInfo from '../meeting-info';
|
|
@@ -53,6 +58,8 @@ import CaptchaError from '../common/errors/captcha-error';
|
|
|
53
58
|
|
|
54
59
|
import MeetingCollection from './collection';
|
|
55
60
|
import MeetingsUtil from './util';
|
|
61
|
+
import PermissionError from '../common/errors/permission';
|
|
62
|
+
import {INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';
|
|
56
63
|
|
|
57
64
|
let mediaLogger;
|
|
58
65
|
|
|
@@ -139,12 +146,13 @@ export default class Meetings extends WebexPlugin {
|
|
|
139
146
|
meetingCollection: any;
|
|
140
147
|
personalMeetingRoom: any;
|
|
141
148
|
preferredWebexSite: any;
|
|
142
|
-
reachability:
|
|
149
|
+
reachability: Reachability;
|
|
143
150
|
registered: any;
|
|
144
151
|
request: any;
|
|
145
152
|
geoHintInfo: any;
|
|
146
153
|
meetingInfo: any;
|
|
147
|
-
|
|
154
|
+
mediaHelpers: any;
|
|
155
|
+
breakoutLocusForHandleLater: any;
|
|
148
156
|
namespace = MEETINGS;
|
|
149
157
|
|
|
150
158
|
/**
|
|
@@ -156,6 +164,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
156
164
|
constructor(...args) {
|
|
157
165
|
super(...args);
|
|
158
166
|
|
|
167
|
+
/**
|
|
168
|
+
* The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
|
|
169
|
+
* to be able to call media helper functions.
|
|
170
|
+
*
|
|
171
|
+
* @instance
|
|
172
|
+
* @type {Object}
|
|
173
|
+
* @private
|
|
174
|
+
* @memberof Meetings
|
|
175
|
+
*/
|
|
176
|
+
this.mediaHelpers = mediaHelpersModule;
|
|
177
|
+
|
|
159
178
|
/**
|
|
160
179
|
* The Meetings request to interact with server
|
|
161
180
|
* @instance
|
|
@@ -183,15 +202,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
183
202
|
* @memberof Meetings
|
|
184
203
|
*/
|
|
185
204
|
this.personalMeetingRoom = null;
|
|
205
|
+
|
|
186
206
|
/**
|
|
187
|
-
* The Reachability object to interact with server
|
|
207
|
+
* The Reachability object to interact with server
|
|
188
208
|
* starts as null
|
|
189
209
|
* @instance
|
|
190
210
|
* @type {Object}
|
|
191
211
|
* @private
|
|
192
212
|
* @memberof Meetings
|
|
193
213
|
*/
|
|
194
|
-
|
|
214
|
+
// @ts-ignore
|
|
215
|
+
this.reachability = new Reachability(this.webex);
|
|
195
216
|
|
|
196
217
|
/**
|
|
197
218
|
* If the meetings plugin has been registered and listening via {@link Meetings#register}
|
|
@@ -221,30 +242,137 @@ export default class Meetings extends WebexPlugin {
|
|
|
221
242
|
*/
|
|
222
243
|
this.media = {
|
|
223
244
|
getUserMedia: Media.getUserMedia,
|
|
224
|
-
getSupportedDevice: Media.getSupportedDevice,
|
|
225
245
|
};
|
|
226
246
|
|
|
227
247
|
this.onReady();
|
|
228
248
|
}
|
|
229
249
|
|
|
230
250
|
/**
|
|
231
|
-
*
|
|
251
|
+
* check whether you need to handle this main session's locus data or not
|
|
252
|
+
* @param {Object} meeting current meeting data
|
|
253
|
+
* @param {Object} newLocus new locus data
|
|
254
|
+
* @returns {boolean}
|
|
255
|
+
* @private
|
|
256
|
+
* @memberof Meetings
|
|
257
|
+
*/
|
|
258
|
+
private isNeedHandleMainLocus(meeting: any, newLocus: any) {
|
|
259
|
+
const breakoutUrl = newLocus.controls?.breakout?.url;
|
|
260
|
+
const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
|
|
261
|
+
|
|
262
|
+
const isSelfJoined = newLocus?.self?.state === _JOINED_;
|
|
263
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
264
|
+
// @ts-ignore
|
|
265
|
+
const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);
|
|
266
|
+
const isResourceMovedOnThisDevice =
|
|
267
|
+
deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;
|
|
268
|
+
|
|
269
|
+
const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(
|
|
270
|
+
meeting,
|
|
271
|
+
newLocus,
|
|
272
|
+
// @ts-ignore
|
|
273
|
+
this.webex.internal.device.url
|
|
274
|
+
);
|
|
275
|
+
const isBreakoutLocusJoinThisDevice =
|
|
276
|
+
breakoutLocus?.joinedWith?.correlationId &&
|
|
277
|
+
breakoutLocus.joinedWith.correlationId === meeting?.correlationId;
|
|
278
|
+
|
|
279
|
+
if (isSelfJoined && isNewLocusJoinThisDevice) {
|
|
280
|
+
LoggerProxy.logger.log(
|
|
281
|
+
'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'
|
|
282
|
+
);
|
|
283
|
+
if (breakoutLocus?.joinedWith && deviceFromNewLocus) {
|
|
284
|
+
const breakoutReplaceAt =
|
|
285
|
+
breakoutLocus.joinedWith.replaces?.length > 0
|
|
286
|
+
? breakoutLocus.joinedWith.replaces[0].replaceAt
|
|
287
|
+
: '';
|
|
288
|
+
const newLocusReplaceAt =
|
|
289
|
+
deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
|
|
290
|
+
if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
|
|
291
|
+
LoggerProxy.logger.log(
|
|
292
|
+
`Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
if (isBreakoutLocusJoinThisDevice) {
|
|
302
|
+
LoggerProxy.logger.log(
|
|
303
|
+
`Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`
|
|
304
|
+
);
|
|
305
|
+
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {
|
|
309
|
+
LoggerProxy.logger.log(
|
|
310
|
+
'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
if (isSelfJoined && isResourceMovedOnThisDevice) {
|
|
316
|
+
LoggerProxy.logger.log(
|
|
317
|
+
'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
return false;
|
|
321
|
+
}
|
|
322
|
+
LoggerProxy.logger.log(
|
|
323
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* check whether you need to handle this locus data or not
|
|
331
|
+
* @param {Object} meeting old locus data
|
|
332
|
+
* @param {Object} newLocus new locus data
|
|
333
|
+
* @returns {boolean}
|
|
334
|
+
* @private
|
|
335
|
+
* @memberof Meetings
|
|
336
|
+
*/
|
|
337
|
+
private isNeedHandleLocusDTO(meeting: any, newLocus: any) {
|
|
338
|
+
if (newLocus) {
|
|
339
|
+
const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);
|
|
340
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
341
|
+
if (!meeting) {
|
|
342
|
+
if (isNewLocusAsBreakout) {
|
|
343
|
+
LoggerProxy.logger.log(
|
|
344
|
+
`Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
return newLocus.self?.state === _JOINED_;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
351
|
+
}
|
|
352
|
+
if (!isNewLocusAsBreakout) {
|
|
353
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return !isSelfMoved;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* get corresponding meeting object by locus data
|
|
232
364
|
* @param {Object} data a locus event
|
|
233
365
|
* @param {String} data.locusUrl
|
|
234
366
|
* @param {Object} data.locus
|
|
235
|
-
* @
|
|
236
|
-
* @param {String} data.eventType
|
|
237
|
-
* @returns {undefined}
|
|
367
|
+
* @returns {Object}
|
|
238
368
|
* @private
|
|
239
369
|
* @memberof Meetings
|
|
240
370
|
*/
|
|
241
|
-
|
|
242
|
-
let meeting = null;
|
|
243
|
-
|
|
371
|
+
getCorrespondingMeetingByLocus(data) {
|
|
244
372
|
// getting meeting by correlationId. This will happen for the new event
|
|
245
373
|
// Either the locus
|
|
246
374
|
// TODO : Add check for the callBack Address
|
|
247
|
-
|
|
375
|
+
return (
|
|
248
376
|
this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
|
|
249
377
|
// @ts-ignore
|
|
250
378
|
this.meetingCollection.getByKey(
|
|
@@ -260,7 +388,24 @@ export default class Meetings extends WebexPlugin {
|
|
|
260
388
|
) ||
|
|
261
389
|
(data.locus.info?.isUnifiedSpaceMeeting
|
|
262
390
|
? undefined
|
|
263
|
-
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl))
|
|
391
|
+
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl)) ||
|
|
392
|
+
this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* handle locus events and takes meeting actions with them as they come in
|
|
398
|
+
* @param {Object} data a locus event
|
|
399
|
+
* @param {String} data.locusUrl
|
|
400
|
+
* @param {Object} data.locus
|
|
401
|
+
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
402
|
+
* @param {String} data.eventType
|
|
403
|
+
* @returns {undefined}
|
|
404
|
+
* @private
|
|
405
|
+
* @memberof Meetings
|
|
406
|
+
*/
|
|
407
|
+
private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {
|
|
408
|
+
let meeting = this.getCorrespondingMeetingByLocus(data);
|
|
264
409
|
|
|
265
410
|
// Special case when locus has got replaced, This only happend once if a replace locus exists
|
|
266
411
|
// https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
|
|
@@ -273,6 +418,16 @@ export default class Meetings extends WebexPlugin {
|
|
|
273
418
|
);
|
|
274
419
|
}
|
|
275
420
|
|
|
421
|
+
if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {
|
|
422
|
+
meeting.locusInfo.updateMainSessionLocusCache(data.locus);
|
|
423
|
+
}
|
|
424
|
+
if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
|
|
425
|
+
LoggerProxy.logger.log(
|
|
426
|
+
`Meetings:index#handleLocusEvent --> doesn't need to process locus event`
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
276
431
|
if (!meeting) {
|
|
277
432
|
// TODO: create meeting when we get a meeting object
|
|
278
433
|
// const checkForEnded = (locus) => {
|
|
@@ -329,6 +484,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
329
484
|
|
|
330
485
|
// It's a new meeting so initialize the locus data
|
|
331
486
|
meeting.locusInfo.initialSetup(data.locus);
|
|
487
|
+
this.checkHandleBreakoutLocus(data.locus);
|
|
332
488
|
})
|
|
333
489
|
.catch((e) => {
|
|
334
490
|
LoggerProxy.logger.error(e);
|
|
@@ -338,10 +494,15 @@ export default class Meetings extends WebexPlugin {
|
|
|
338
494
|
// because the other user left so before sending 'added' event make sure it exists in the collection
|
|
339
495
|
|
|
340
496
|
if (this.getMeetingByType(_ID_, meeting.id)) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
497
|
+
// @ts-ignore
|
|
498
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
499
|
+
name: 'client.call.remote-started',
|
|
500
|
+
payload: {
|
|
501
|
+
trigger: 'mercury-event',
|
|
502
|
+
},
|
|
503
|
+
options: {
|
|
504
|
+
meetingId: meeting.id,
|
|
505
|
+
},
|
|
345
506
|
});
|
|
346
507
|
Trigger.trigger(
|
|
347
508
|
this,
|
|
@@ -494,7 +655,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
494
655
|
|
|
495
656
|
MeetingsUtil.checkH264Support({disableNotifications: true});
|
|
496
657
|
// @ts-ignore
|
|
497
|
-
Metrics.initialSetup(this.
|
|
658
|
+
Metrics.initialSetup(this.webex);
|
|
498
659
|
});
|
|
499
660
|
}
|
|
500
661
|
|
|
@@ -663,6 +824,36 @@ export default class Meetings extends WebexPlugin {
|
|
|
663
824
|
);
|
|
664
825
|
}
|
|
665
826
|
|
|
827
|
+
/**
|
|
828
|
+
* Creates a noise reduction effect
|
|
829
|
+
*
|
|
830
|
+
* @param {INoiseReductionEffect} options optional custom effect options
|
|
831
|
+
* @returns {Promise<effect>} noise reduction effect.
|
|
832
|
+
* @public
|
|
833
|
+
* @memberof Meetings
|
|
834
|
+
*/
|
|
835
|
+
createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {
|
|
836
|
+
// @ts-ignore
|
|
837
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
838
|
+
|
|
839
|
+
return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});
|
|
840
|
+
};
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* Creates a virtual background effect
|
|
844
|
+
*
|
|
845
|
+
* @param {IVirtualBackgroundEffect} options optional custom effect options
|
|
846
|
+
* @returns {Promise<effect>} virtual background effect.
|
|
847
|
+
* @public
|
|
848
|
+
* @memberof Meetings
|
|
849
|
+
*/
|
|
850
|
+
createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {
|
|
851
|
+
// @ts-ignore
|
|
852
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
853
|
+
|
|
854
|
+
return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});
|
|
855
|
+
};
|
|
856
|
+
|
|
666
857
|
/**
|
|
667
858
|
* Uploads logs to the webex services for tracking
|
|
668
859
|
* @param {Object} [options={}]
|
|
@@ -738,17 +929,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
738
929
|
});
|
|
739
930
|
}
|
|
740
931
|
|
|
741
|
-
/**
|
|
742
|
-
* initializes the reachability instance for Meetings
|
|
743
|
-
* @returns {undefined}
|
|
744
|
-
* @public
|
|
745
|
-
* @memberof Meetings
|
|
746
|
-
*/
|
|
747
|
-
setReachability() {
|
|
748
|
-
// @ts-ignore
|
|
749
|
-
this.reachability = new Reachability(this.webex);
|
|
750
|
-
}
|
|
751
|
-
|
|
752
932
|
/**
|
|
753
933
|
* gets the reachability instance for Meetings
|
|
754
934
|
* @returns {Reachability}
|
|
@@ -766,10 +946,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
766
946
|
* @memberof Meetings
|
|
767
947
|
*/
|
|
768
948
|
startReachability() {
|
|
769
|
-
if (!this.reachability) {
|
|
770
|
-
this.setReachability();
|
|
771
|
-
}
|
|
772
|
-
|
|
773
949
|
return this.getReachability().gatherReachability();
|
|
774
950
|
}
|
|
775
951
|
|
|
@@ -797,6 +973,29 @@ export default class Meetings extends WebexPlugin {
|
|
|
797
973
|
if (res) {
|
|
798
974
|
this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
|
|
799
975
|
}
|
|
976
|
+
|
|
977
|
+
// fall back to getting the preferred site from the user information
|
|
978
|
+
if (!this.preferredWebexSite) {
|
|
979
|
+
// @ts-ignore
|
|
980
|
+
return this.webex.internal.user
|
|
981
|
+
.get()
|
|
982
|
+
.then((user) => {
|
|
983
|
+
const preferredWebexSite =
|
|
984
|
+
user?.userPreferences?.userPreferencesItems?.preferredWebExSite;
|
|
985
|
+
if (preferredWebexSite) {
|
|
986
|
+
this.preferredWebexSite = preferredWebexSite;
|
|
987
|
+
} else {
|
|
988
|
+
throw new Error('site not found');
|
|
989
|
+
}
|
|
990
|
+
})
|
|
991
|
+
.catch(() => {
|
|
992
|
+
LoggerProxy.logger.error(
|
|
993
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
994
|
+
);
|
|
995
|
+
});
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
return Promise.resolve();
|
|
800
999
|
});
|
|
801
1000
|
}
|
|
802
1001
|
|
|
@@ -841,11 +1040,19 @@ export default class Meetings extends WebexPlugin {
|
|
|
841
1040
|
* @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
|
|
842
1041
|
* @param {string} [type] - the optional specified type, such as locusId
|
|
843
1042
|
* @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
|
|
1043
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1044
|
+
* @param {string} correlationId - the optional specified correlationId
|
|
844
1045
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
845
1046
|
* @public
|
|
846
1047
|
* @memberof Meetings
|
|
847
1048
|
*/
|
|
848
|
-
public create(
|
|
1049
|
+
public create(
|
|
1050
|
+
destination: string,
|
|
1051
|
+
type: string = null,
|
|
1052
|
+
useRandomDelayForInfo = false,
|
|
1053
|
+
infoExtraParams = {},
|
|
1054
|
+
correlationId: string = undefined
|
|
1055
|
+
) {
|
|
849
1056
|
// TODO: type should be from a dictionary
|
|
850
1057
|
|
|
851
1058
|
// Validate meeting information based on the provided destination and
|
|
@@ -890,48 +1097,52 @@ export default class Meetings extends WebexPlugin {
|
|
|
890
1097
|
// Validate if a meeting was found.
|
|
891
1098
|
if (!meeting) {
|
|
892
1099
|
// Create a meeting based on the normalized destination and type.
|
|
893
|
-
return this.createMeeting(
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
1100
|
+
return this.createMeeting(
|
|
1101
|
+
targetDest,
|
|
1102
|
+
type,
|
|
1103
|
+
useRandomDelayForInfo,
|
|
1104
|
+
infoExtraParams,
|
|
1105
|
+
correlationId
|
|
1106
|
+
).then((createdMeeting: any) => {
|
|
1107
|
+
// If the meeting was successfully created.
|
|
1108
|
+
if (createdMeeting && createdMeeting.on) {
|
|
1109
|
+
// Create a destruction event for the meeting.
|
|
1110
|
+
createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {
|
|
1111
|
+
// @ts-ignore
|
|
1112
|
+
if (this.config.autoUploadLogs) {
|
|
1113
|
+
this.uploadLogs({
|
|
1114
|
+
callStart: createdMeeting.locusInfo?.fullState?.lastActive,
|
|
1115
|
+
correlationId: createdMeeting.correlationId,
|
|
1116
|
+
feedbackId: createdMeeting.correlationId,
|
|
1117
|
+
locusId: createdMeeting.locusId,
|
|
1118
|
+
meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,
|
|
1119
|
+
}).then(() => this.destroy(createdMeeting, payload.reason));
|
|
1120
|
+
} else {
|
|
1121
|
+
this.destroy(createdMeeting, payload.reason);
|
|
1122
|
+
}
|
|
1123
|
+
});
|
|
1124
|
+
|
|
1125
|
+
createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
|
|
1126
|
+
// @ts-ignore
|
|
1127
|
+
if (this.config.autoUploadLogs) {
|
|
1128
|
+
this.uploadLogs({
|
|
1129
|
+
callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
|
|
1130
|
+
correlationId: meetingInstance.correlationId,
|
|
1131
|
+
feedbackId: meetingInstance.correlationId,
|
|
1132
|
+
locusId: meetingInstance.locusId,
|
|
1133
|
+
meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,
|
|
1134
|
+
});
|
|
1135
|
+
}
|
|
1136
|
+
});
|
|
1137
|
+
} else {
|
|
1138
|
+
LoggerProxy.logger.error(
|
|
1139
|
+
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
1140
|
+
);
|
|
933
1141
|
}
|
|
934
|
-
|
|
1142
|
+
|
|
1143
|
+
// Return the newly created meeting.
|
|
1144
|
+
return Promise.resolve(createdMeeting);
|
|
1145
|
+
});
|
|
935
1146
|
}
|
|
936
1147
|
|
|
937
1148
|
// Return the existing meeting.
|
|
@@ -944,6 +1155,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
944
1155
|
* @param {String} destination see create()
|
|
945
1156
|
* @param {String} type see create()
|
|
946
1157
|
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
1158
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1159
|
+
* @param {String} correlationId the optional specified correlationId
|
|
947
1160
|
* @returns {Promise} a new meeting instance complete with meeting info and destination
|
|
948
1161
|
* @private
|
|
949
1162
|
* @memberof Meetings
|
|
@@ -951,7 +1164,9 @@ export default class Meetings extends WebexPlugin {
|
|
|
951
1164
|
private async createMeeting(
|
|
952
1165
|
destination: any,
|
|
953
1166
|
type: string = null,
|
|
954
|
-
useRandomDelayForInfo = false
|
|
1167
|
+
useRandomDelayForInfo = false,
|
|
1168
|
+
infoExtraParams = {},
|
|
1169
|
+
correlationId: string = undefined
|
|
955
1170
|
) {
|
|
956
1171
|
const meeting = new Meeting(
|
|
957
1172
|
{
|
|
@@ -965,6 +1180,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
965
1180
|
meetingInfoProvider: this.meetingInfo,
|
|
966
1181
|
destination,
|
|
967
1182
|
destinationType: type,
|
|
1183
|
+
correlationId,
|
|
968
1184
|
},
|
|
969
1185
|
{
|
|
970
1186
|
// @ts-ignore
|
|
@@ -999,15 +1215,19 @@ export default class Meetings extends WebexPlugin {
|
|
|
999
1215
|
|
|
1000
1216
|
if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
|
|
1001
1217
|
meeting.fetchMeetingInfoTimeoutId = setTimeout(
|
|
1002
|
-
() => meeting.fetchMeetingInfo({}),
|
|
1218
|
+
() => meeting.fetchMeetingInfo({extraParams: infoExtraParams}),
|
|
1003
1219
|
waitingTime
|
|
1004
1220
|
);
|
|
1005
1221
|
meeting.parseMeetingInfo(undefined, destination);
|
|
1006
1222
|
} else {
|
|
1007
|
-
await meeting.fetchMeetingInfo({});
|
|
1223
|
+
await meeting.fetchMeetingInfo({extraParams: infoExtraParams});
|
|
1008
1224
|
}
|
|
1009
1225
|
} catch (err) {
|
|
1010
|
-
if (
|
|
1226
|
+
if (
|
|
1227
|
+
!(err instanceof CaptchaError) &&
|
|
1228
|
+
!(err instanceof PasswordError) &&
|
|
1229
|
+
!(err instanceof PermissionError)
|
|
1230
|
+
) {
|
|
1011
1231
|
// if there is no meeting info we assume its a 1:1 call or wireless share
|
|
1012
1232
|
LoggerProxy.logger.info(
|
|
1013
1233
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
|
@@ -1108,33 +1328,108 @@ export default class Meetings extends WebexPlugin {
|
|
|
1108
1328
|
* @memberof Meetings
|
|
1109
1329
|
*/
|
|
1110
1330
|
public syncMeetings() {
|
|
1111
|
-
return this.request
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
this.
|
|
1118
|
-
|
|
1119
|
-
|
|
1331
|
+
return this.request
|
|
1332
|
+
.getActiveMeetings()
|
|
1333
|
+
.then((locusArray) => {
|
|
1334
|
+
const activeLocusUrl = [];
|
|
1335
|
+
|
|
1336
|
+
if (locusArray?.loci && locusArray.loci.length > 0) {
|
|
1337
|
+
const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);
|
|
1338
|
+
lociToUpdate.forEach((locus) => {
|
|
1339
|
+
activeLocusUrl.push(locus.url);
|
|
1340
|
+
this.handleLocusEvent({
|
|
1341
|
+
locus,
|
|
1342
|
+
locusUrl: locus.url,
|
|
1343
|
+
});
|
|
1120
1344
|
});
|
|
1121
|
-
}
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
for (const meeting of Object.values(meetingsCollection)) {
|
|
1129
|
-
// @ts-ignore
|
|
1130
|
-
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1131
|
-
// destroy function also uploads logs
|
|
1345
|
+
}
|
|
1346
|
+
const meetingsCollection = this.meetingCollection.getAll();
|
|
1347
|
+
|
|
1348
|
+
if (Object.keys(meetingsCollection).length > 0) {
|
|
1349
|
+
// Some time the mercury event is missed after mercury reconnect
|
|
1350
|
+
// if sync returns no locus then clear all the meetings
|
|
1351
|
+
for (const meeting of Object.values(meetingsCollection)) {
|
|
1132
1352
|
// @ts-ignore
|
|
1133
|
-
|
|
1353
|
+
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1354
|
+
// destroy function also uploads logs
|
|
1355
|
+
// @ts-ignore
|
|
1356
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1357
|
+
}
|
|
1134
1358
|
}
|
|
1135
1359
|
}
|
|
1360
|
+
})
|
|
1361
|
+
.catch((error) => {
|
|
1362
|
+
LoggerProxy.logger.error(
|
|
1363
|
+
`Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
|
|
1364
|
+
);
|
|
1365
|
+
throw new Error(error);
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1369
|
+
/**
|
|
1370
|
+
* sort out locus array for initial creating
|
|
1371
|
+
* @param {Array} loci original locus array
|
|
1372
|
+
* @returns {undefined}
|
|
1373
|
+
* @public
|
|
1374
|
+
* @memberof Meetings
|
|
1375
|
+
*/
|
|
1376
|
+
sortLocusArrayToUpdate(loci: any[]) {
|
|
1377
|
+
const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));
|
|
1378
|
+
const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));
|
|
1379
|
+
this.breakoutLocusForHandleLater = [];
|
|
1380
|
+
const lociToUpdate = [...mainLoci];
|
|
1381
|
+
breakoutLoci.forEach((breakoutLocus) => {
|
|
1382
|
+
const associateMainLocus = mainLoci.find(
|
|
1383
|
+
(mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url
|
|
1384
|
+
);
|
|
1385
|
+
const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({
|
|
1386
|
+
locus: breakoutLocus,
|
|
1387
|
+
locusUrl: breakoutLocus.url,
|
|
1388
|
+
});
|
|
1389
|
+
|
|
1390
|
+
if (associateMainLocus && !existCorrespondingMeeting) {
|
|
1391
|
+
// if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
|
|
1392
|
+
// after meeting create with main locus, then handle the associate breakout locus.
|
|
1393
|
+
// if only handle breakout locus, will miss some date
|
|
1394
|
+
this.breakoutLocusForHandleLater.push(breakoutLocus);
|
|
1395
|
+
} else {
|
|
1396
|
+
lociToUpdate.push(breakoutLocus);
|
|
1136
1397
|
}
|
|
1137
1398
|
});
|
|
1399
|
+
|
|
1400
|
+
return lociToUpdate;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
/**
|
|
1404
|
+
* check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
|
|
1405
|
+
* @param {Object} newCreatedLocus the locus which just create meeting object of it
|
|
1406
|
+
* @returns {undefined}
|
|
1407
|
+
* @public
|
|
1408
|
+
* @memberof Meetings
|
|
1409
|
+
*/
|
|
1410
|
+
checkHandleBreakoutLocus(newCreatedLocus) {
|
|
1411
|
+
if (
|
|
1412
|
+
!newCreatedLocus ||
|
|
1413
|
+
!this.breakoutLocusForHandleLater ||
|
|
1414
|
+
!this.breakoutLocusForHandleLater.length
|
|
1415
|
+
) {
|
|
1416
|
+
return;
|
|
1417
|
+
}
|
|
1418
|
+
if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {
|
|
1419
|
+
return;
|
|
1420
|
+
}
|
|
1421
|
+
const existIndex = this.breakoutLocusForHandleLater.findIndex(
|
|
1422
|
+
(breakoutLocus) =>
|
|
1423
|
+
breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url
|
|
1424
|
+
);
|
|
1425
|
+
|
|
1426
|
+
if (existIndex < 0) {
|
|
1427
|
+
return;
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
|
|
1431
|
+
this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});
|
|
1432
|
+
this.breakoutLocusForHandleLater.splice(existIndex, 1);
|
|
1138
1433
|
}
|
|
1139
1434
|
|
|
1140
1435
|
/**
|