@webex/plugin-meetings 3.0.0-beta.23 → 3.0.0-beta.231
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 +28 -7
- 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 +5 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +188 -27
- 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/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2583 -2557
- 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/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- 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 +367 -86
- 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/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/index.js +51 -34
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +6 -6
- 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 +81 -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 +27 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -9
- package/src/constants.ts +175 -18
- 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 +48 -87
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2061 -2133
- 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/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +405 -106
- 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/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/index.ts +73 -35
- package/src/statsAnalyzer/mqaUtil.ts +8 -10
- 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 +76 -3
- 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/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 +29 -2
- 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,9 @@ 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';
|
|
63
|
+
import {SpaceIDDeprecatedError} from '../common/errors/webex-errors';
|
|
56
64
|
|
|
57
65
|
let mediaLogger;
|
|
58
66
|
|
|
@@ -139,12 +147,13 @@ export default class Meetings extends WebexPlugin {
|
|
|
139
147
|
meetingCollection: any;
|
|
140
148
|
personalMeetingRoom: any;
|
|
141
149
|
preferredWebexSite: any;
|
|
142
|
-
reachability:
|
|
150
|
+
reachability: Reachability;
|
|
143
151
|
registered: any;
|
|
144
152
|
request: any;
|
|
145
153
|
geoHintInfo: any;
|
|
146
154
|
meetingInfo: any;
|
|
147
|
-
|
|
155
|
+
mediaHelpers: any;
|
|
156
|
+
breakoutLocusForHandleLater: any;
|
|
148
157
|
namespace = MEETINGS;
|
|
149
158
|
|
|
150
159
|
/**
|
|
@@ -156,6 +165,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
156
165
|
constructor(...args) {
|
|
157
166
|
super(...args);
|
|
158
167
|
|
|
168
|
+
/**
|
|
169
|
+
* The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
|
|
170
|
+
* to be able to call media helper functions.
|
|
171
|
+
*
|
|
172
|
+
* @instance
|
|
173
|
+
* @type {Object}
|
|
174
|
+
* @private
|
|
175
|
+
* @memberof Meetings
|
|
176
|
+
*/
|
|
177
|
+
this.mediaHelpers = mediaHelpersModule;
|
|
178
|
+
|
|
159
179
|
/**
|
|
160
180
|
* The Meetings request to interact with server
|
|
161
181
|
* @instance
|
|
@@ -183,15 +203,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
183
203
|
* @memberof Meetings
|
|
184
204
|
*/
|
|
185
205
|
this.personalMeetingRoom = null;
|
|
206
|
+
|
|
186
207
|
/**
|
|
187
|
-
* The Reachability object to interact with server
|
|
208
|
+
* The Reachability object to interact with server
|
|
188
209
|
* starts as null
|
|
189
210
|
* @instance
|
|
190
211
|
* @type {Object}
|
|
191
212
|
* @private
|
|
192
213
|
* @memberof Meetings
|
|
193
214
|
*/
|
|
194
|
-
|
|
215
|
+
// @ts-ignore
|
|
216
|
+
this.reachability = new Reachability(this.webex);
|
|
195
217
|
|
|
196
218
|
/**
|
|
197
219
|
* If the meetings plugin has been registered and listening via {@link Meetings#register}
|
|
@@ -221,30 +243,137 @@ export default class Meetings extends WebexPlugin {
|
|
|
221
243
|
*/
|
|
222
244
|
this.media = {
|
|
223
245
|
getUserMedia: Media.getUserMedia,
|
|
224
|
-
getSupportedDevice: Media.getSupportedDevice,
|
|
225
246
|
};
|
|
226
247
|
|
|
227
248
|
this.onReady();
|
|
228
249
|
}
|
|
229
250
|
|
|
230
251
|
/**
|
|
231
|
-
*
|
|
252
|
+
* check whether you need to handle this main session's locus data or not
|
|
253
|
+
* @param {Object} meeting current meeting data
|
|
254
|
+
* @param {Object} newLocus new locus data
|
|
255
|
+
* @returns {boolean}
|
|
256
|
+
* @private
|
|
257
|
+
* @memberof Meetings
|
|
258
|
+
*/
|
|
259
|
+
private isNeedHandleMainLocus(meeting: any, newLocus: any) {
|
|
260
|
+
const breakoutUrl = newLocus.controls?.breakout?.url;
|
|
261
|
+
const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
|
|
262
|
+
|
|
263
|
+
const isSelfJoined = newLocus?.self?.state === _JOINED_;
|
|
264
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
265
|
+
// @ts-ignore
|
|
266
|
+
const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);
|
|
267
|
+
const isResourceMovedOnThisDevice =
|
|
268
|
+
deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;
|
|
269
|
+
|
|
270
|
+
const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(
|
|
271
|
+
meeting,
|
|
272
|
+
newLocus,
|
|
273
|
+
// @ts-ignore
|
|
274
|
+
this.webex.internal.device.url
|
|
275
|
+
);
|
|
276
|
+
const isBreakoutLocusJoinThisDevice =
|
|
277
|
+
breakoutLocus?.joinedWith?.correlationId &&
|
|
278
|
+
breakoutLocus.joinedWith.correlationId === meeting?.correlationId;
|
|
279
|
+
|
|
280
|
+
if (isSelfJoined && isNewLocusJoinThisDevice) {
|
|
281
|
+
LoggerProxy.logger.log(
|
|
282
|
+
'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'
|
|
283
|
+
);
|
|
284
|
+
if (breakoutLocus?.joinedWith && deviceFromNewLocus) {
|
|
285
|
+
const breakoutReplaceAt =
|
|
286
|
+
breakoutLocus.joinedWith.replaces?.length > 0
|
|
287
|
+
? breakoutLocus.joinedWith.replaces[0].replaceAt
|
|
288
|
+
: '';
|
|
289
|
+
const newLocusReplaceAt =
|
|
290
|
+
deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
|
|
291
|
+
if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
|
|
292
|
+
LoggerProxy.logger.log(
|
|
293
|
+
`Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`
|
|
294
|
+
);
|
|
295
|
+
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return true;
|
|
301
|
+
}
|
|
302
|
+
if (isBreakoutLocusJoinThisDevice) {
|
|
303
|
+
LoggerProxy.logger.log(
|
|
304
|
+
`Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {
|
|
310
|
+
LoggerProxy.logger.log(
|
|
311
|
+
'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
if (isSelfJoined && isResourceMovedOnThisDevice) {
|
|
317
|
+
LoggerProxy.logger.log(
|
|
318
|
+
'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'
|
|
319
|
+
);
|
|
320
|
+
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
LoggerProxy.logger.log(
|
|
324
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* check whether you need to handle this locus data or not
|
|
332
|
+
* @param {Object} meeting old locus data
|
|
333
|
+
* @param {Object} newLocus new locus data
|
|
334
|
+
* @returns {boolean}
|
|
335
|
+
* @private
|
|
336
|
+
* @memberof Meetings
|
|
337
|
+
*/
|
|
338
|
+
private isNeedHandleLocusDTO(meeting: any, newLocus: any) {
|
|
339
|
+
if (newLocus) {
|
|
340
|
+
const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);
|
|
341
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
342
|
+
if (!meeting) {
|
|
343
|
+
if (isNewLocusAsBreakout) {
|
|
344
|
+
LoggerProxy.logger.log(
|
|
345
|
+
`Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
return newLocus.self?.state === _JOINED_;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
352
|
+
}
|
|
353
|
+
if (!isNewLocusAsBreakout) {
|
|
354
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
return !isSelfMoved;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* get corresponding meeting object by locus data
|
|
232
365
|
* @param {Object} data a locus event
|
|
233
366
|
* @param {String} data.locusUrl
|
|
234
367
|
* @param {Object} data.locus
|
|
235
|
-
* @
|
|
236
|
-
* @param {String} data.eventType
|
|
237
|
-
* @returns {undefined}
|
|
368
|
+
* @returns {Object}
|
|
238
369
|
* @private
|
|
239
370
|
* @memberof Meetings
|
|
240
371
|
*/
|
|
241
|
-
|
|
242
|
-
let meeting = null;
|
|
243
|
-
|
|
372
|
+
getCorrespondingMeetingByLocus(data) {
|
|
244
373
|
// getting meeting by correlationId. This will happen for the new event
|
|
245
374
|
// Either the locus
|
|
246
375
|
// TODO : Add check for the callBack Address
|
|
247
|
-
|
|
376
|
+
return (
|
|
248
377
|
this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
|
|
249
378
|
// @ts-ignore
|
|
250
379
|
this.meetingCollection.getByKey(
|
|
@@ -260,7 +389,24 @@ export default class Meetings extends WebexPlugin {
|
|
|
260
389
|
) ||
|
|
261
390
|
(data.locus.info?.isUnifiedSpaceMeeting
|
|
262
391
|
? undefined
|
|
263
|
-
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl))
|
|
392
|
+
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl)) ||
|
|
393
|
+
this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)
|
|
394
|
+
);
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* handle locus events and takes meeting actions with them as they come in
|
|
399
|
+
* @param {Object} data a locus event
|
|
400
|
+
* @param {String} data.locusUrl
|
|
401
|
+
* @param {Object} data.locus
|
|
402
|
+
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
403
|
+
* @param {String} data.eventType
|
|
404
|
+
* @returns {undefined}
|
|
405
|
+
* @private
|
|
406
|
+
* @memberof Meetings
|
|
407
|
+
*/
|
|
408
|
+
private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {
|
|
409
|
+
let meeting = this.getCorrespondingMeetingByLocus(data);
|
|
264
410
|
|
|
265
411
|
// Special case when locus has got replaced, This only happend once if a replace locus exists
|
|
266
412
|
// https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
|
|
@@ -273,6 +419,16 @@ export default class Meetings extends WebexPlugin {
|
|
|
273
419
|
);
|
|
274
420
|
}
|
|
275
421
|
|
|
422
|
+
if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {
|
|
423
|
+
meeting.locusInfo.updateMainSessionLocusCache(data.locus);
|
|
424
|
+
}
|
|
425
|
+
if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
|
|
426
|
+
LoggerProxy.logger.log(
|
|
427
|
+
`Meetings:index#handleLocusEvent --> doesn't need to process locus event`
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
276
432
|
if (!meeting) {
|
|
277
433
|
// TODO: create meeting when we get a meeting object
|
|
278
434
|
// const checkForEnded = (locus) => {
|
|
@@ -329,6 +485,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
329
485
|
|
|
330
486
|
// It's a new meeting so initialize the locus data
|
|
331
487
|
meeting.locusInfo.initialSetup(data.locus);
|
|
488
|
+
this.checkHandleBreakoutLocus(data.locus);
|
|
332
489
|
})
|
|
333
490
|
.catch((e) => {
|
|
334
491
|
LoggerProxy.logger.error(e);
|
|
@@ -338,10 +495,15 @@ export default class Meetings extends WebexPlugin {
|
|
|
338
495
|
// because the other user left so before sending 'added' event make sure it exists in the collection
|
|
339
496
|
|
|
340
497
|
if (this.getMeetingByType(_ID_, meeting.id)) {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
498
|
+
// @ts-ignore
|
|
499
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
500
|
+
name: 'client.call.remote-started',
|
|
501
|
+
payload: {
|
|
502
|
+
trigger: 'mercury-event',
|
|
503
|
+
},
|
|
504
|
+
options: {
|
|
505
|
+
meetingId: meeting.id,
|
|
506
|
+
},
|
|
345
507
|
});
|
|
346
508
|
Trigger.trigger(
|
|
347
509
|
this,
|
|
@@ -494,7 +656,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
494
656
|
|
|
495
657
|
MeetingsUtil.checkH264Support({disableNotifications: true});
|
|
496
658
|
// @ts-ignore
|
|
497
|
-
Metrics.initialSetup(this.
|
|
659
|
+
Metrics.initialSetup(this.webex);
|
|
498
660
|
});
|
|
499
661
|
}
|
|
500
662
|
|
|
@@ -663,6 +825,36 @@ export default class Meetings extends WebexPlugin {
|
|
|
663
825
|
);
|
|
664
826
|
}
|
|
665
827
|
|
|
828
|
+
/**
|
|
829
|
+
* Creates a noise reduction effect
|
|
830
|
+
*
|
|
831
|
+
* @param {INoiseReductionEffect} options optional custom effect options
|
|
832
|
+
* @returns {Promise<effect>} noise reduction effect.
|
|
833
|
+
* @public
|
|
834
|
+
* @memberof Meetings
|
|
835
|
+
*/
|
|
836
|
+
createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {
|
|
837
|
+
// @ts-ignore
|
|
838
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
839
|
+
|
|
840
|
+
return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});
|
|
841
|
+
};
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* Creates a virtual background effect
|
|
845
|
+
*
|
|
846
|
+
* @param {IVirtualBackgroundEffect} options optional custom effect options
|
|
847
|
+
* @returns {Promise<effect>} virtual background effect.
|
|
848
|
+
* @public
|
|
849
|
+
* @memberof Meetings
|
|
850
|
+
*/
|
|
851
|
+
createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {
|
|
852
|
+
// @ts-ignore
|
|
853
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
854
|
+
|
|
855
|
+
return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});
|
|
856
|
+
};
|
|
857
|
+
|
|
666
858
|
/**
|
|
667
859
|
* Uploads logs to the webex services for tracking
|
|
668
860
|
* @param {Object} [options={}]
|
|
@@ -738,17 +930,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
738
930
|
});
|
|
739
931
|
}
|
|
740
932
|
|
|
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
933
|
/**
|
|
753
934
|
* gets the reachability instance for Meetings
|
|
754
935
|
* @returns {Reachability}
|
|
@@ -766,10 +947,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
766
947
|
* @memberof Meetings
|
|
767
948
|
*/
|
|
768
949
|
startReachability() {
|
|
769
|
-
if (!this.reachability) {
|
|
770
|
-
this.setReachability();
|
|
771
|
-
}
|
|
772
|
-
|
|
773
950
|
return this.getReachability().gatherReachability();
|
|
774
951
|
}
|
|
775
952
|
|
|
@@ -797,6 +974,29 @@ export default class Meetings extends WebexPlugin {
|
|
|
797
974
|
if (res) {
|
|
798
975
|
this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
|
|
799
976
|
}
|
|
977
|
+
|
|
978
|
+
// fall back to getting the preferred site from the user information
|
|
979
|
+
if (!this.preferredWebexSite) {
|
|
980
|
+
// @ts-ignore
|
|
981
|
+
return this.webex.internal.user
|
|
982
|
+
.get()
|
|
983
|
+
.then((user) => {
|
|
984
|
+
const preferredWebexSite =
|
|
985
|
+
user?.userPreferences?.userPreferencesItems?.preferredWebExSite;
|
|
986
|
+
if (preferredWebexSite) {
|
|
987
|
+
this.preferredWebexSite = preferredWebexSite;
|
|
988
|
+
} else {
|
|
989
|
+
throw new Error('site not found');
|
|
990
|
+
}
|
|
991
|
+
})
|
|
992
|
+
.catch(() => {
|
|
993
|
+
LoggerProxy.logger.error(
|
|
994
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
995
|
+
);
|
|
996
|
+
});
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
return Promise.resolve();
|
|
800
1000
|
});
|
|
801
1001
|
}
|
|
802
1002
|
|
|
@@ -838,14 +1038,22 @@ export default class Meetings extends WebexPlugin {
|
|
|
838
1038
|
|
|
839
1039
|
/**
|
|
840
1040
|
* Create a meeting.
|
|
841
|
-
* @param {string} destination - sipURL,
|
|
1041
|
+
* @param {string} destination - sipURL, phonenumber, or locus object}
|
|
842
1042
|
* @param {string} [type] - the optional specified type, such as locusId
|
|
843
1043
|
* @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
|
|
1044
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1045
|
+
* @param {string} correlationId - the optional specified correlationId
|
|
844
1046
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
845
1047
|
* @public
|
|
846
1048
|
* @memberof Meetings
|
|
847
1049
|
*/
|
|
848
|
-
public create(
|
|
1050
|
+
public create(
|
|
1051
|
+
destination: string,
|
|
1052
|
+
type: string = null,
|
|
1053
|
+
useRandomDelayForInfo = false,
|
|
1054
|
+
infoExtraParams = {},
|
|
1055
|
+
correlationId: string = undefined
|
|
1056
|
+
) {
|
|
849
1057
|
// TODO: type should be from a dictionary
|
|
850
1058
|
|
|
851
1059
|
// Validate meeting information based on the provided destination and
|
|
@@ -857,9 +1065,12 @@ export default class Meetings extends WebexPlugin {
|
|
|
857
1065
|
.fetchInfoOptions(destination, type)
|
|
858
1066
|
// Catch a failure to fetch info options.
|
|
859
1067
|
.catch((error) => {
|
|
860
|
-
LoggerProxy.logger.
|
|
861
|
-
`Meetings:index#create -->
|
|
1068
|
+
LoggerProxy.logger.error(
|
|
1069
|
+
`Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`
|
|
862
1070
|
);
|
|
1071
|
+
if (error instanceof SpaceIDDeprecatedError) {
|
|
1072
|
+
throw new SpaceIDDeprecatedError();
|
|
1073
|
+
}
|
|
863
1074
|
})
|
|
864
1075
|
.then((options: any = {}) => {
|
|
865
1076
|
// Normalize the destination.
|
|
@@ -890,48 +1101,52 @@ export default class Meetings extends WebexPlugin {
|
|
|
890
1101
|
// Validate if a meeting was found.
|
|
891
1102
|
if (!meeting) {
|
|
892
1103
|
// 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
|
-
|
|
1104
|
+
return this.createMeeting(
|
|
1105
|
+
targetDest,
|
|
1106
|
+
type,
|
|
1107
|
+
useRandomDelayForInfo,
|
|
1108
|
+
infoExtraParams,
|
|
1109
|
+
correlationId
|
|
1110
|
+
).then((createdMeeting: any) => {
|
|
1111
|
+
// If the meeting was successfully created.
|
|
1112
|
+
if (createdMeeting && createdMeeting.on) {
|
|
1113
|
+
// Create a destruction event for the meeting.
|
|
1114
|
+
createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {
|
|
1115
|
+
// @ts-ignore
|
|
1116
|
+
if (this.config.autoUploadLogs) {
|
|
1117
|
+
this.uploadLogs({
|
|
1118
|
+
callStart: createdMeeting.locusInfo?.fullState?.lastActive,
|
|
1119
|
+
correlationId: createdMeeting.correlationId,
|
|
1120
|
+
feedbackId: createdMeeting.correlationId,
|
|
1121
|
+
locusId: createdMeeting.locusId,
|
|
1122
|
+
meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,
|
|
1123
|
+
}).then(() => this.destroy(createdMeeting, payload.reason));
|
|
1124
|
+
} else {
|
|
1125
|
+
this.destroy(createdMeeting, payload.reason);
|
|
1126
|
+
}
|
|
1127
|
+
});
|
|
1128
|
+
|
|
1129
|
+
createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
|
|
1130
|
+
// @ts-ignore
|
|
1131
|
+
if (this.config.autoUploadLogs) {
|
|
1132
|
+
this.uploadLogs({
|
|
1133
|
+
callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
|
|
1134
|
+
correlationId: meetingInstance.correlationId,
|
|
1135
|
+
feedbackId: meetingInstance.correlationId,
|
|
1136
|
+
locusId: meetingInstance.locusId,
|
|
1137
|
+
meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
});
|
|
1141
|
+
} else {
|
|
1142
|
+
LoggerProxy.logger.error(
|
|
1143
|
+
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
1144
|
+
);
|
|
933
1145
|
}
|
|
934
|
-
|
|
1146
|
+
|
|
1147
|
+
// Return the newly created meeting.
|
|
1148
|
+
return Promise.resolve(createdMeeting);
|
|
1149
|
+
});
|
|
935
1150
|
}
|
|
936
1151
|
|
|
937
1152
|
// Return the existing meeting.
|
|
@@ -944,6 +1159,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
944
1159
|
* @param {String} destination see create()
|
|
945
1160
|
* @param {String} type see create()
|
|
946
1161
|
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
1162
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1163
|
+
* @param {String} correlationId the optional specified correlationId
|
|
947
1164
|
* @returns {Promise} a new meeting instance complete with meeting info and destination
|
|
948
1165
|
* @private
|
|
949
1166
|
* @memberof Meetings
|
|
@@ -951,7 +1168,9 @@ export default class Meetings extends WebexPlugin {
|
|
|
951
1168
|
private async createMeeting(
|
|
952
1169
|
destination: any,
|
|
953
1170
|
type: string = null,
|
|
954
|
-
useRandomDelayForInfo = false
|
|
1171
|
+
useRandomDelayForInfo = false,
|
|
1172
|
+
infoExtraParams = {},
|
|
1173
|
+
correlationId: string = undefined
|
|
955
1174
|
) {
|
|
956
1175
|
const meeting = new Meeting(
|
|
957
1176
|
{
|
|
@@ -965,6 +1184,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
965
1184
|
meetingInfoProvider: this.meetingInfo,
|
|
966
1185
|
destination,
|
|
967
1186
|
destinationType: type,
|
|
1187
|
+
correlationId,
|
|
968
1188
|
},
|
|
969
1189
|
{
|
|
970
1190
|
// @ts-ignore
|
|
@@ -999,15 +1219,19 @@ export default class Meetings extends WebexPlugin {
|
|
|
999
1219
|
|
|
1000
1220
|
if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
|
|
1001
1221
|
meeting.fetchMeetingInfoTimeoutId = setTimeout(
|
|
1002
|
-
() => meeting.fetchMeetingInfo({}),
|
|
1222
|
+
() => meeting.fetchMeetingInfo({extraParams: infoExtraParams}),
|
|
1003
1223
|
waitingTime
|
|
1004
1224
|
);
|
|
1005
1225
|
meeting.parseMeetingInfo(undefined, destination);
|
|
1006
1226
|
} else {
|
|
1007
|
-
await meeting.fetchMeetingInfo({});
|
|
1227
|
+
await meeting.fetchMeetingInfo({extraParams: infoExtraParams});
|
|
1008
1228
|
}
|
|
1009
1229
|
} catch (err) {
|
|
1010
|
-
if (
|
|
1230
|
+
if (
|
|
1231
|
+
!(err instanceof CaptchaError) &&
|
|
1232
|
+
!(err instanceof PasswordError) &&
|
|
1233
|
+
!(err instanceof PermissionError)
|
|
1234
|
+
) {
|
|
1011
1235
|
// if there is no meeting info we assume its a 1:1 call or wireless share
|
|
1012
1236
|
LoggerProxy.logger.info(
|
|
1013
1237
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
|
@@ -1064,7 +1288,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
1064
1288
|
//
|
|
1065
1289
|
// Our job is to determine the appropriate one
|
|
1066
1290
|
// and its corresponding service so that developers
|
|
1067
|
-
// need only sipURL
|
|
1291
|
+
// need only sipURL to get a meeting
|
|
1068
1292
|
// and its ID, but have the option to use createWithType()
|
|
1069
1293
|
// and specify those types to get meetingInfo
|
|
1070
1294
|
}
|
|
@@ -1108,33 +1332,108 @@ export default class Meetings extends WebexPlugin {
|
|
|
1108
1332
|
* @memberof Meetings
|
|
1109
1333
|
*/
|
|
1110
1334
|
public syncMeetings() {
|
|
1111
|
-
return this.request
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
this.
|
|
1118
|
-
|
|
1119
|
-
|
|
1335
|
+
return this.request
|
|
1336
|
+
.getActiveMeetings()
|
|
1337
|
+
.then((locusArray) => {
|
|
1338
|
+
const activeLocusUrl = [];
|
|
1339
|
+
|
|
1340
|
+
if (locusArray?.loci && locusArray.loci.length > 0) {
|
|
1341
|
+
const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);
|
|
1342
|
+
lociToUpdate.forEach((locus) => {
|
|
1343
|
+
activeLocusUrl.push(locus.url);
|
|
1344
|
+
this.handleLocusEvent({
|
|
1345
|
+
locus,
|
|
1346
|
+
locusUrl: locus.url,
|
|
1347
|
+
});
|
|
1120
1348
|
});
|
|
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
|
|
1349
|
+
}
|
|
1350
|
+
const meetingsCollection = this.meetingCollection.getAll();
|
|
1351
|
+
|
|
1352
|
+
if (Object.keys(meetingsCollection).length > 0) {
|
|
1353
|
+
// Some time the mercury event is missed after mercury reconnect
|
|
1354
|
+
// if sync returns no locus then clear all the meetings
|
|
1355
|
+
for (const meeting of Object.values(meetingsCollection)) {
|
|
1132
1356
|
// @ts-ignore
|
|
1133
|
-
|
|
1357
|
+
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1358
|
+
// destroy function also uploads logs
|
|
1359
|
+
// @ts-ignore
|
|
1360
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1361
|
+
}
|
|
1134
1362
|
}
|
|
1135
1363
|
}
|
|
1364
|
+
})
|
|
1365
|
+
.catch((error) => {
|
|
1366
|
+
LoggerProxy.logger.error(
|
|
1367
|
+
`Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
|
|
1368
|
+
);
|
|
1369
|
+
throw new Error(error);
|
|
1370
|
+
});
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
/**
|
|
1374
|
+
* sort out locus array for initial creating
|
|
1375
|
+
* @param {Array} loci original locus array
|
|
1376
|
+
* @returns {undefined}
|
|
1377
|
+
* @public
|
|
1378
|
+
* @memberof Meetings
|
|
1379
|
+
*/
|
|
1380
|
+
sortLocusArrayToUpdate(loci: any[]) {
|
|
1381
|
+
const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));
|
|
1382
|
+
const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));
|
|
1383
|
+
this.breakoutLocusForHandleLater = [];
|
|
1384
|
+
const lociToUpdate = [...mainLoci];
|
|
1385
|
+
breakoutLoci.forEach((breakoutLocus) => {
|
|
1386
|
+
const associateMainLocus = mainLoci.find(
|
|
1387
|
+
(mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url
|
|
1388
|
+
);
|
|
1389
|
+
const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({
|
|
1390
|
+
locus: breakoutLocus,
|
|
1391
|
+
locusUrl: breakoutLocus.url,
|
|
1392
|
+
});
|
|
1393
|
+
|
|
1394
|
+
if (associateMainLocus && !existCorrespondingMeeting) {
|
|
1395
|
+
// if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
|
|
1396
|
+
// after meeting create with main locus, then handle the associate breakout locus.
|
|
1397
|
+
// if only handle breakout locus, will miss some date
|
|
1398
|
+
this.breakoutLocusForHandleLater.push(breakoutLocus);
|
|
1399
|
+
} else {
|
|
1400
|
+
lociToUpdate.push(breakoutLocus);
|
|
1136
1401
|
}
|
|
1137
1402
|
});
|
|
1403
|
+
|
|
1404
|
+
return lociToUpdate;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
/**
|
|
1408
|
+
* check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
|
|
1409
|
+
* @param {Object} newCreatedLocus the locus which just create meeting object of it
|
|
1410
|
+
* @returns {undefined}
|
|
1411
|
+
* @public
|
|
1412
|
+
* @memberof Meetings
|
|
1413
|
+
*/
|
|
1414
|
+
checkHandleBreakoutLocus(newCreatedLocus) {
|
|
1415
|
+
if (
|
|
1416
|
+
!newCreatedLocus ||
|
|
1417
|
+
!this.breakoutLocusForHandleLater ||
|
|
1418
|
+
!this.breakoutLocusForHandleLater.length
|
|
1419
|
+
) {
|
|
1420
|
+
return;
|
|
1421
|
+
}
|
|
1422
|
+
if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {
|
|
1423
|
+
return;
|
|
1424
|
+
}
|
|
1425
|
+
const existIndex = this.breakoutLocusForHandleLater.findIndex(
|
|
1426
|
+
(breakoutLocus) =>
|
|
1427
|
+
breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url
|
|
1428
|
+
);
|
|
1429
|
+
|
|
1430
|
+
if (existIndex < 0) {
|
|
1431
|
+
return;
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
|
|
1435
|
+
this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});
|
|
1436
|
+
this.breakoutLocusForHandleLater.splice(existIndex, 1);
|
|
1138
1437
|
}
|
|
1139
1438
|
|
|
1140
1439
|
/**
|