@webex/plugin-meetings 2.59.8 → 2.60.0-next.2
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 +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +154 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +8 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +437 -435
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +15 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +127 -38
- package/dist/controls-options-manager/index.js.map +1 -1
- 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 +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +116 -4
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +100 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +425 -84
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +253 -80
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +106 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +498 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +92 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4628 -2971
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +297 -199
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +605 -435
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +200 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +39 -41
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +42 -4
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +477 -123
- 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 +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +54 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +131 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +174 -10
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +108 -41
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +14 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +327 -234
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +15 -9
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +265 -72
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +281 -229
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +101 -235
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +140 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +2 -85
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +402 -424
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +117 -83
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +34 -25
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +5 -7
- package/src/constants.ts +271 -93
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -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 +110 -0
- package/src/locus-info/index.ts +449 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +172 -0
- package/src/meeting/index.ts +3861 -2504
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +207 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +590 -423
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +163 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +477 -124
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +52 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +139 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +196 -7
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +13 -6
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +238 -45
- package/src/reachability/request.ts +17 -8
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +167 -154
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +98 -241
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +124 -0
- package/src/statsAnalyzer/global.ts +1 -84
- package/src/statsAnalyzer/index.ts +470 -522
- package/src/statsAnalyzer/mqaUtil.ts +117 -112
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- 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 +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- 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 +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- 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 +323 -30
- package/test/unit/spec/locus-info/index.js +1390 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +274 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +84 -0
- package/test/unit/spec/meeting/index.js +8269 -3145
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +409 -213
- package/test/unit/spec/meeting/request.js +512 -42
- package/test/unit/spec/meeting/utils.js +741 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1201 -210
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +38 -8
- package/test/unit/spec/member/util.js +499 -29
- package/test/unit/spec/members/index.js +597 -3
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +598 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +145 -22
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +200 -76
- package/test/unit/spec/roap/request.ts +232 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +188 -174
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- 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 +7 -3
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -81
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -34
- package/dist/common/queue.d.ts +0 -32
- package/dist/config.d.ts +0 -73
- package/dist/constants.d.ts +0 -926
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -5
- package/dist/controls-options-manager/index.d.ts +0 -120
- package/dist/controls-options-manager/util.d.ts +0 -7
- package/dist/index.d.ts +0 -4
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -269
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -212
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -32
- package/dist/media/properties.d.ts +0 -108
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -233
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -79
- package/dist/meeting/index.d.ts +0 -1622
- package/dist/meeting/muteState.d.ts +0 -116
- package/dist/meeting/request.d.ts +0 -255
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -2
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -57
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -23
- package/dist/meetings/index.d.ts +0 -296
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -147
- package/dist/member/member.types.d.ts +0 -11
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -24
- package/dist/members/index.d.ts +0 -298
- package/dist/members/request.d.ts +0 -50
- package/dist/members/util.d.ts +0 -2
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -59
- package/dist/metrics/index.d.ts +0 -152
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/index.d.ts +0 -139
- package/dist/reachability/request.d.ts +0 -35
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -32
- package/dist/reconnection-manager/index.d.ts +0 -112
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -193
- package/dist/recording-controller/util.d.ts +0 -13
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -116
- package/dist/roap/request.d.ts +0 -35
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -81
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -118
- package/dist/statsAnalyzer/index.d.ts +0 -193
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
- package/dist/transcription/index.d.ts +0 -64
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
package/src/meetings/index.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/* eslint no-shadow: ["error", { "allow": ["eventType"] }] */
|
|
2
2
|
|
|
3
3
|
import '@webex/internal-plugin-mercury';
|
|
4
|
+
import '@webex/internal-plugin-conversation';
|
|
5
|
+
import '@webex/internal-plugin-metrics';
|
|
4
6
|
// @ts-ignore
|
|
5
7
|
import {WebexPlugin} from '@webex/webex-core';
|
|
8
|
+
import {setLogger} from '@webex/internal-media-core';
|
|
9
|
+
|
|
10
|
+
import * as mediaHelpersModule from '@webex/media-helpers';
|
|
6
11
|
|
|
7
12
|
import 'webrtc-adapter';
|
|
8
13
|
|
|
9
14
|
import Metrics from '../metrics';
|
|
10
|
-
import {trigger, eventType} from '../metrics/config';
|
|
11
15
|
import LoggerConfig from '../common/logs/logger-config';
|
|
12
16
|
import StaticConfig from '../common/config';
|
|
13
17
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
@@ -38,6 +42,9 @@ import {
|
|
|
38
42
|
MEETING_REMOVED_REASON,
|
|
39
43
|
_CONVERSATION_URL_,
|
|
40
44
|
CONVERSATION_URL,
|
|
45
|
+
MEETINGNUMBER,
|
|
46
|
+
_JOINED_,
|
|
47
|
+
_MOVED_,
|
|
41
48
|
} from '../constants';
|
|
42
49
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
43
50
|
import MeetingInfo from '../meeting-info';
|
|
@@ -51,7 +58,38 @@ import CaptchaError from '../common/errors/captcha-error';
|
|
|
51
58
|
|
|
52
59
|
import MeetingCollection from './collection';
|
|
53
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';
|
|
64
|
+
import NoMeetingInfoError from '../common/errors/no-meeting-info';
|
|
65
|
+
|
|
66
|
+
let mediaLogger;
|
|
67
|
+
|
|
68
|
+
class MediaLogger {
|
|
69
|
+
info(...args) {
|
|
70
|
+
LoggerProxy.logger.info(...args);
|
|
71
|
+
}
|
|
54
72
|
|
|
73
|
+
log(...args) {
|
|
74
|
+
LoggerProxy.logger.log(...args);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
error(...args) {
|
|
78
|
+
LoggerProxy.logger.error(...args);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
warn(...args) {
|
|
82
|
+
LoggerProxy.logger.warn(...args);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
trace(...args) {
|
|
86
|
+
LoggerProxy.logger.trace(...args);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
debug(...args) {
|
|
90
|
+
LoggerProxy.logger.debug(...args);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
55
93
|
/**
|
|
56
94
|
* Meetings Ready Event
|
|
57
95
|
* Emitted when the meetings instance on webex is ready
|
|
@@ -110,12 +148,13 @@ export default class Meetings extends WebexPlugin {
|
|
|
110
148
|
meetingCollection: any;
|
|
111
149
|
personalMeetingRoom: any;
|
|
112
150
|
preferredWebexSite: any;
|
|
113
|
-
reachability:
|
|
151
|
+
reachability: Reachability;
|
|
114
152
|
registered: any;
|
|
115
153
|
request: any;
|
|
116
154
|
geoHintInfo: any;
|
|
117
155
|
meetingInfo: any;
|
|
118
|
-
|
|
156
|
+
mediaHelpers: any;
|
|
157
|
+
breakoutLocusForHandleLater: any;
|
|
119
158
|
namespace = MEETINGS;
|
|
120
159
|
|
|
121
160
|
/**
|
|
@@ -127,6 +166,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
127
166
|
constructor(...args) {
|
|
128
167
|
super(...args);
|
|
129
168
|
|
|
169
|
+
/**
|
|
170
|
+
* The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
|
|
171
|
+
* to be able to call media helper functions.
|
|
172
|
+
*
|
|
173
|
+
* @instance
|
|
174
|
+
* @type {Object}
|
|
175
|
+
* @private
|
|
176
|
+
* @memberof Meetings
|
|
177
|
+
*/
|
|
178
|
+
this.mediaHelpers = mediaHelpersModule;
|
|
179
|
+
|
|
130
180
|
/**
|
|
131
181
|
* The Meetings request to interact with server
|
|
132
182
|
* @instance
|
|
@@ -154,15 +204,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
154
204
|
* @memberof Meetings
|
|
155
205
|
*/
|
|
156
206
|
this.personalMeetingRoom = null;
|
|
207
|
+
|
|
157
208
|
/**
|
|
158
|
-
* The Reachability object to interact with server
|
|
209
|
+
* The Reachability object to interact with server
|
|
159
210
|
* starts as null
|
|
160
211
|
* @instance
|
|
161
212
|
* @type {Object}
|
|
162
213
|
* @private
|
|
163
214
|
* @memberof Meetings
|
|
164
215
|
*/
|
|
165
|
-
|
|
216
|
+
// @ts-ignore
|
|
217
|
+
this.reachability = new Reachability(this.webex);
|
|
166
218
|
|
|
167
219
|
/**
|
|
168
220
|
* If the meetings plugin has been registered and listening via {@link Meetings#register}
|
|
@@ -192,30 +244,137 @@ export default class Meetings extends WebexPlugin {
|
|
|
192
244
|
*/
|
|
193
245
|
this.media = {
|
|
194
246
|
getUserMedia: Media.getUserMedia,
|
|
195
|
-
getSupportedDevice: Media.getSupportedDevice,
|
|
196
247
|
};
|
|
197
248
|
|
|
198
249
|
this.onReady();
|
|
199
250
|
}
|
|
200
251
|
|
|
201
252
|
/**
|
|
202
|
-
*
|
|
253
|
+
* check whether you need to handle this main session's locus data or not
|
|
254
|
+
* @param {Object} meeting current meeting data
|
|
255
|
+
* @param {Object} newLocus new locus data
|
|
256
|
+
* @returns {boolean}
|
|
257
|
+
* @private
|
|
258
|
+
* @memberof Meetings
|
|
259
|
+
*/
|
|
260
|
+
private isNeedHandleMainLocus(meeting: any, newLocus: any) {
|
|
261
|
+
const breakoutUrl = newLocus.controls?.breakout?.url;
|
|
262
|
+
const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
|
|
263
|
+
|
|
264
|
+
const isSelfJoined = newLocus?.self?.state === _JOINED_;
|
|
265
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
266
|
+
// @ts-ignore
|
|
267
|
+
const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);
|
|
268
|
+
const isResourceMovedOnThisDevice =
|
|
269
|
+
deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;
|
|
270
|
+
|
|
271
|
+
const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(
|
|
272
|
+
meeting,
|
|
273
|
+
newLocus,
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
this.webex.internal.device.url
|
|
276
|
+
);
|
|
277
|
+
const isBreakoutLocusJoinThisDevice =
|
|
278
|
+
breakoutLocus?.joinedWith?.correlationId &&
|
|
279
|
+
breakoutLocus.joinedWith.correlationId === meeting?.correlationId;
|
|
280
|
+
|
|
281
|
+
if (isSelfJoined && isNewLocusJoinThisDevice) {
|
|
282
|
+
LoggerProxy.logger.log(
|
|
283
|
+
'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'
|
|
284
|
+
);
|
|
285
|
+
if (breakoutLocus?.joinedWith && deviceFromNewLocus) {
|
|
286
|
+
const breakoutReplaceAt =
|
|
287
|
+
breakoutLocus.joinedWith.replaces?.length > 0
|
|
288
|
+
? breakoutLocus.joinedWith.replaces[0].replaceAt
|
|
289
|
+
: '';
|
|
290
|
+
const newLocusReplaceAt =
|
|
291
|
+
deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
|
|
292
|
+
if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
|
|
293
|
+
LoggerProxy.logger.log(
|
|
294
|
+
`Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
if (isBreakoutLocusJoinThisDevice) {
|
|
304
|
+
LoggerProxy.logger.log(
|
|
305
|
+
`Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {
|
|
311
|
+
LoggerProxy.logger.log(
|
|
312
|
+
'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
if (isSelfJoined && isResourceMovedOnThisDevice) {
|
|
318
|
+
LoggerProxy.logger.log(
|
|
319
|
+
'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
LoggerProxy.logger.log(
|
|
325
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
326
|
+
);
|
|
327
|
+
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* check whether you need to handle this locus data or not
|
|
333
|
+
* @param {Object} meeting old locus data
|
|
334
|
+
* @param {Object} newLocus new locus data
|
|
335
|
+
* @returns {boolean}
|
|
336
|
+
* @private
|
|
337
|
+
* @memberof Meetings
|
|
338
|
+
*/
|
|
339
|
+
private isNeedHandleLocusDTO(meeting: any, newLocus: any) {
|
|
340
|
+
if (newLocus) {
|
|
341
|
+
const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);
|
|
342
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
343
|
+
if (!meeting) {
|
|
344
|
+
if (isNewLocusAsBreakout) {
|
|
345
|
+
LoggerProxy.logger.log(
|
|
346
|
+
`Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`
|
|
347
|
+
);
|
|
348
|
+
|
|
349
|
+
return newLocus.self?.state === _JOINED_;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
353
|
+
}
|
|
354
|
+
if (!isNewLocusAsBreakout) {
|
|
355
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
return !isSelfMoved;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* get corresponding meeting object by locus data
|
|
203
366
|
* @param {Object} data a locus event
|
|
204
367
|
* @param {String} data.locusUrl
|
|
205
368
|
* @param {Object} data.locus
|
|
206
|
-
* @
|
|
207
|
-
* @param {String} data.eventType
|
|
208
|
-
* @returns {undefined}
|
|
369
|
+
* @returns {Object}
|
|
209
370
|
* @private
|
|
210
371
|
* @memberof Meetings
|
|
211
372
|
*/
|
|
212
|
-
|
|
213
|
-
let meeting = null;
|
|
214
|
-
|
|
373
|
+
getCorrespondingMeetingByLocus(data) {
|
|
215
374
|
// getting meeting by correlationId. This will happen for the new event
|
|
216
375
|
// Either the locus
|
|
217
376
|
// TODO : Add check for the callBack Address
|
|
218
|
-
|
|
377
|
+
return (
|
|
219
378
|
this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
|
|
220
379
|
// @ts-ignore
|
|
221
380
|
this.meetingCollection.getByKey(
|
|
@@ -231,7 +390,24 @@ export default class Meetings extends WebexPlugin {
|
|
|
231
390
|
) ||
|
|
232
391
|
(data.locus.info?.isUnifiedSpaceMeeting
|
|
233
392
|
? undefined
|
|
234
|
-
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl))
|
|
393
|
+
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl)) ||
|
|
394
|
+
this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* handle locus events and takes meeting actions with them as they come in
|
|
400
|
+
* @param {Object} data a locus event
|
|
401
|
+
* @param {String} data.locusUrl
|
|
402
|
+
* @param {Object} data.locus
|
|
403
|
+
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
404
|
+
* @param {String} data.eventType
|
|
405
|
+
* @returns {undefined}
|
|
406
|
+
* @private
|
|
407
|
+
* @memberof Meetings
|
|
408
|
+
*/
|
|
409
|
+
private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {
|
|
410
|
+
let meeting = this.getCorrespondingMeetingByLocus(data);
|
|
235
411
|
|
|
236
412
|
// Special case when locus has got replaced, This only happend once if a replace locus exists
|
|
237
413
|
// https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
|
|
@@ -244,6 +420,16 @@ export default class Meetings extends WebexPlugin {
|
|
|
244
420
|
);
|
|
245
421
|
}
|
|
246
422
|
|
|
423
|
+
if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {
|
|
424
|
+
meeting.locusInfo.updateMainSessionLocusCache(data.locus);
|
|
425
|
+
}
|
|
426
|
+
if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
|
|
427
|
+
LoggerProxy.logger.log(
|
|
428
|
+
`Meetings:index#handleLocusEvent --> doesn't need to process locus event`
|
|
429
|
+
);
|
|
430
|
+
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
247
433
|
if (!meeting) {
|
|
248
434
|
// TODO: create meeting when we get a meeting object
|
|
249
435
|
// const checkForEnded = (locus) => {
|
|
@@ -300,6 +486,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
300
486
|
|
|
301
487
|
// It's a new meeting so initialize the locus data
|
|
302
488
|
meeting.locusInfo.initialSetup(data.locus);
|
|
489
|
+
this.checkHandleBreakoutLocus(data.locus);
|
|
303
490
|
})
|
|
304
491
|
.catch((e) => {
|
|
305
492
|
LoggerProxy.logger.error(e);
|
|
@@ -309,10 +496,15 @@ export default class Meetings extends WebexPlugin {
|
|
|
309
496
|
// because the other user left so before sending 'added' event make sure it exists in the collection
|
|
310
497
|
|
|
311
498
|
if (this.getMeetingByType(_ID_, meeting.id)) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
499
|
+
// @ts-ignore
|
|
500
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
|
501
|
+
name: 'client.call.remote-started',
|
|
502
|
+
payload: {
|
|
503
|
+
trigger: 'mercury-event',
|
|
504
|
+
},
|
|
505
|
+
options: {
|
|
506
|
+
meetingId: meeting.id,
|
|
507
|
+
},
|
|
316
508
|
});
|
|
317
509
|
Trigger.trigger(
|
|
318
510
|
this,
|
|
@@ -431,6 +623,9 @@ export default class Meetings extends WebexPlugin {
|
|
|
431
623
|
// @ts-ignore
|
|
432
624
|
LoggerProxy.set(this.webex.logger);
|
|
433
625
|
|
|
626
|
+
mediaLogger = new MediaLogger();
|
|
627
|
+
setLogger(mediaLogger);
|
|
628
|
+
|
|
434
629
|
/**
|
|
435
630
|
* The MeetingInfo object to interact with server
|
|
436
631
|
* @instance
|
|
@@ -462,7 +657,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
462
657
|
|
|
463
658
|
MeetingsUtil.checkH264Support({disableNotifications: true});
|
|
464
659
|
// @ts-ignore
|
|
465
|
-
Metrics.initialSetup(this.
|
|
660
|
+
Metrics.initialSetup(this.webex);
|
|
466
661
|
});
|
|
467
662
|
}
|
|
468
663
|
|
|
@@ -486,21 +681,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
486
681
|
}
|
|
487
682
|
}
|
|
488
683
|
|
|
489
|
-
/**
|
|
490
|
-
* API to enable or disable TURN discovery
|
|
491
|
-
* @param {Boolean} enable
|
|
492
|
-
* @private
|
|
493
|
-
* @memberof Meetings
|
|
494
|
-
* @returns {undefined}
|
|
495
|
-
*/
|
|
496
|
-
private _toggleTurnDiscovery(enable: boolean) {
|
|
497
|
-
if (typeof enable !== 'boolean') {
|
|
498
|
-
return;
|
|
499
|
-
}
|
|
500
|
-
// @ts-ignore
|
|
501
|
-
this.config.experimental.enableTurnDiscovery = enable;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
684
|
/**
|
|
505
685
|
* API to toggle starting adhoc meeting
|
|
506
686
|
* @param {Boolean} changeState
|
|
@@ -631,6 +811,36 @@ export default class Meetings extends WebexPlugin {
|
|
|
631
811
|
);
|
|
632
812
|
}
|
|
633
813
|
|
|
814
|
+
/**
|
|
815
|
+
* Creates a noise reduction effect
|
|
816
|
+
*
|
|
817
|
+
* @param {INoiseReductionEffect} options optional custom effect options
|
|
818
|
+
* @returns {Promise<effect>} noise reduction effect.
|
|
819
|
+
* @public
|
|
820
|
+
* @memberof Meetings
|
|
821
|
+
*/
|
|
822
|
+
createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {
|
|
823
|
+
// @ts-ignore
|
|
824
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
825
|
+
|
|
826
|
+
return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});
|
|
827
|
+
};
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* Creates a virtual background effect
|
|
831
|
+
*
|
|
832
|
+
* @param {IVirtualBackgroundEffect} options optional custom effect options
|
|
833
|
+
* @returns {Promise<effect>} virtual background effect.
|
|
834
|
+
* @public
|
|
835
|
+
* @memberof Meetings
|
|
836
|
+
*/
|
|
837
|
+
createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {
|
|
838
|
+
// @ts-ignore
|
|
839
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
840
|
+
|
|
841
|
+
return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});
|
|
842
|
+
};
|
|
843
|
+
|
|
634
844
|
/**
|
|
635
845
|
* Uploads logs to the webex services for tracking
|
|
636
846
|
* @param {Object} [options={}]
|
|
@@ -645,8 +855,10 @@ export default class Meetings extends WebexPlugin {
|
|
|
645
855
|
*/
|
|
646
856
|
uploadLogs(
|
|
647
857
|
options: {
|
|
858
|
+
autoupload?: boolean;
|
|
648
859
|
callStart?: string;
|
|
649
860
|
feedbackId?: string;
|
|
861
|
+
locussessionid?: string;
|
|
650
862
|
locusId?: string;
|
|
651
863
|
correlationId?: string;
|
|
652
864
|
meetingId?: string;
|
|
@@ -663,6 +875,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
663
875
|
'Meetings:index#uploadLogs --> Upload logs for meeting completed.',
|
|
664
876
|
uploadResult
|
|
665
877
|
);
|
|
878
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);
|
|
666
879
|
Trigger.trigger(
|
|
667
880
|
this,
|
|
668
881
|
{
|
|
@@ -697,8 +910,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
697
910
|
);
|
|
698
911
|
|
|
699
912
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {
|
|
700
|
-
|
|
701
|
-
meetingId: options.meetingsId,
|
|
913
|
+
...options,
|
|
702
914
|
reason: uploadError.message,
|
|
703
915
|
stack: uploadError.stack,
|
|
704
916
|
code: uploadError.code,
|
|
@@ -706,17 +918,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
706
918
|
});
|
|
707
919
|
}
|
|
708
920
|
|
|
709
|
-
/**
|
|
710
|
-
* initializes the reachability instance for Meetings
|
|
711
|
-
* @returns {undefined}
|
|
712
|
-
* @public
|
|
713
|
-
* @memberof Meetings
|
|
714
|
-
*/
|
|
715
|
-
setReachability() {
|
|
716
|
-
// @ts-ignore
|
|
717
|
-
this.reachability = new Reachability(this.webex);
|
|
718
|
-
}
|
|
719
|
-
|
|
720
921
|
/**
|
|
721
922
|
* gets the reachability instance for Meetings
|
|
722
923
|
* @returns {Reachability}
|
|
@@ -734,10 +935,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
734
935
|
* @memberof Meetings
|
|
735
936
|
*/
|
|
736
937
|
startReachability() {
|
|
737
|
-
if (!this.reachability) {
|
|
738
|
-
this.setReachability();
|
|
739
|
-
}
|
|
740
|
-
|
|
741
938
|
return this.getReachability().gatherReachability();
|
|
742
939
|
}
|
|
743
940
|
|
|
@@ -765,6 +962,29 @@ export default class Meetings extends WebexPlugin {
|
|
|
765
962
|
if (res) {
|
|
766
963
|
this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
|
|
767
964
|
}
|
|
965
|
+
|
|
966
|
+
// fall back to getting the preferred site from the user information
|
|
967
|
+
if (!this.preferredWebexSite) {
|
|
968
|
+
// @ts-ignore
|
|
969
|
+
return this.webex.internal.user
|
|
970
|
+
.get()
|
|
971
|
+
.then((user) => {
|
|
972
|
+
const preferredWebexSite =
|
|
973
|
+
user?.userPreferences?.userPreferencesItems?.preferredWebExSite;
|
|
974
|
+
if (preferredWebexSite) {
|
|
975
|
+
this.preferredWebexSite = preferredWebexSite;
|
|
976
|
+
} else {
|
|
977
|
+
throw new Error('site not found');
|
|
978
|
+
}
|
|
979
|
+
})
|
|
980
|
+
.catch(() => {
|
|
981
|
+
LoggerProxy.logger.error(
|
|
982
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
983
|
+
);
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
return Promise.resolve();
|
|
768
988
|
});
|
|
769
989
|
}
|
|
770
990
|
|
|
@@ -806,14 +1026,24 @@ export default class Meetings extends WebexPlugin {
|
|
|
806
1026
|
|
|
807
1027
|
/**
|
|
808
1028
|
* Create a meeting.
|
|
809
|
-
* @param {string} destination - sipURL,
|
|
1029
|
+
* @param {string} destination - sipURL, phonenumber, or locus object}
|
|
810
1030
|
* @param {string} [type] - the optional specified type, such as locusId
|
|
811
1031
|
* @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
|
|
1032
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1033
|
+
* @param {string} correlationId - the optional specified correlationId
|
|
1034
|
+
* @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
|
|
812
1035
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
813
1036
|
* @public
|
|
814
1037
|
* @memberof Meetings
|
|
815
1038
|
*/
|
|
816
|
-
public create(
|
|
1039
|
+
public create(
|
|
1040
|
+
destination: string,
|
|
1041
|
+
type: string = null,
|
|
1042
|
+
useRandomDelayForInfo = false,
|
|
1043
|
+
infoExtraParams = {},
|
|
1044
|
+
correlationId: string = undefined,
|
|
1045
|
+
failOnMissingMeetingInfo = false
|
|
1046
|
+
) {
|
|
817
1047
|
// TODO: type should be from a dictionary
|
|
818
1048
|
|
|
819
1049
|
// Validate meeting information based on the provided destination and
|
|
@@ -825,9 +1055,12 @@ export default class Meetings extends WebexPlugin {
|
|
|
825
1055
|
.fetchInfoOptions(destination, type)
|
|
826
1056
|
// Catch a failure to fetch info options.
|
|
827
1057
|
.catch((error) => {
|
|
828
|
-
LoggerProxy.logger.
|
|
829
|
-
`Meetings:index#create -->
|
|
1058
|
+
LoggerProxy.logger.error(
|
|
1059
|
+
`Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`
|
|
830
1060
|
);
|
|
1061
|
+
if (error instanceof SpaceIDDeprecatedError) {
|
|
1062
|
+
throw new SpaceIDDeprecatedError();
|
|
1063
|
+
}
|
|
831
1064
|
})
|
|
832
1065
|
.then((options: any = {}) => {
|
|
833
1066
|
// Normalize the destination.
|
|
@@ -858,48 +1091,57 @@ export default class Meetings extends WebexPlugin {
|
|
|
858
1091
|
// Validate if a meeting was found.
|
|
859
1092
|
if (!meeting) {
|
|
860
1093
|
// Create a meeting based on the normalized destination and type.
|
|
861
|
-
return this.createMeeting(
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
1094
|
+
return this.createMeeting(
|
|
1095
|
+
targetDest,
|
|
1096
|
+
type,
|
|
1097
|
+
useRandomDelayForInfo,
|
|
1098
|
+
infoExtraParams,
|
|
1099
|
+
correlationId,
|
|
1100
|
+
failOnMissingMeetingInfo
|
|
1101
|
+
).then((createdMeeting: any) => {
|
|
1102
|
+
// If the meeting was successfully created.
|
|
1103
|
+
if (createdMeeting && createdMeeting.on) {
|
|
1104
|
+
// Create a destruction event for the meeting.
|
|
1105
|
+
createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {
|
|
1106
|
+
// @ts-ignore
|
|
1107
|
+
if (this.config.autoUploadLogs) {
|
|
1108
|
+
this.uploadLogs({
|
|
1109
|
+
callStart: createdMeeting.locusInfo?.fullState?.lastActive,
|
|
1110
|
+
locussessionid: createdMeeting.locusInfo?.fullState?.sessionId,
|
|
1111
|
+
correlationId: createdMeeting.correlationId,
|
|
1112
|
+
feedbackId: createdMeeting.correlationId,
|
|
1113
|
+
locusId: createdMeeting.locusId,
|
|
1114
|
+
meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,
|
|
1115
|
+
autoupload: true,
|
|
1116
|
+
}).then(() => this.destroy(createdMeeting, payload.reason));
|
|
1117
|
+
} else {
|
|
1118
|
+
this.destroy(createdMeeting, payload.reason);
|
|
1119
|
+
}
|
|
1120
|
+
});
|
|
1121
|
+
|
|
1122
|
+
createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
|
|
1123
|
+
// @ts-ignore
|
|
1124
|
+
if (this.config.autoUploadLogs) {
|
|
1125
|
+
this.uploadLogs({
|
|
1126
|
+
callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
|
|
1127
|
+
locussessionid: meetingInstance?.locusInfo?.fullState?.sessionId,
|
|
1128
|
+
correlationId: meetingInstance.correlationId,
|
|
1129
|
+
feedbackId: meetingInstance.correlationId,
|
|
1130
|
+
locusId: meetingInstance.locusId,
|
|
1131
|
+
meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,
|
|
1132
|
+
autoupload: true,
|
|
1133
|
+
});
|
|
1134
|
+
}
|
|
1135
|
+
});
|
|
1136
|
+
} else {
|
|
1137
|
+
LoggerProxy.logger.error(
|
|
1138
|
+
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
1139
|
+
);
|
|
901
1140
|
}
|
|
902
|
-
|
|
1141
|
+
|
|
1142
|
+
// Return the newly created meeting.
|
|
1143
|
+
return Promise.resolve(createdMeeting);
|
|
1144
|
+
});
|
|
903
1145
|
}
|
|
904
1146
|
|
|
905
1147
|
// Return the existing meeting.
|
|
@@ -912,6 +1154,9 @@ export default class Meetings extends WebexPlugin {
|
|
|
912
1154
|
* @param {String} destination see create()
|
|
913
1155
|
* @param {String} type see create()
|
|
914
1156
|
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
1157
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1158
|
+
* @param {String} correlationId the optional specified correlationId
|
|
1159
|
+
* @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
|
|
915
1160
|
* @returns {Promise} a new meeting instance complete with meeting info and destination
|
|
916
1161
|
* @private
|
|
917
1162
|
* @memberof Meetings
|
|
@@ -919,7 +1164,10 @@ export default class Meetings extends WebexPlugin {
|
|
|
919
1164
|
private async createMeeting(
|
|
920
1165
|
destination: any,
|
|
921
1166
|
type: string = null,
|
|
922
|
-
useRandomDelayForInfo = false
|
|
1167
|
+
useRandomDelayForInfo = false,
|
|
1168
|
+
infoExtraParams = {},
|
|
1169
|
+
correlationId: string = undefined,
|
|
1170
|
+
failOnMissingMeetingInfo = false
|
|
923
1171
|
) {
|
|
924
1172
|
const meeting = new Meeting(
|
|
925
1173
|
{
|
|
@@ -929,11 +1177,11 @@ export default class Meetings extends WebexPlugin {
|
|
|
929
1177
|
deviceUrl: this.webex.internal.device.url,
|
|
930
1178
|
// @ts-ignore
|
|
931
1179
|
orgId: this.webex.internal.device.orgId,
|
|
932
|
-
roapSeq: 0,
|
|
933
1180
|
locus: type === _LOCUS_ID_ ? destination : null, // pass the locus object if present
|
|
934
1181
|
meetingInfoProvider: this.meetingInfo,
|
|
935
1182
|
destination,
|
|
936
1183
|
destinationType: type,
|
|
1184
|
+
correlationId,
|
|
937
1185
|
},
|
|
938
1186
|
{
|
|
939
1187
|
// @ts-ignore
|
|
@@ -968,19 +1216,38 @@ export default class Meetings extends WebexPlugin {
|
|
|
968
1216
|
|
|
969
1217
|
if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
|
|
970
1218
|
meeting.fetchMeetingInfoTimeoutId = setTimeout(
|
|
971
|
-
() =>
|
|
1219
|
+
() =>
|
|
1220
|
+
meeting.fetchMeetingInfo({
|
|
1221
|
+
extraParams: infoExtraParams,
|
|
1222
|
+
sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
|
|
1223
|
+
}),
|
|
972
1224
|
waitingTime
|
|
973
1225
|
);
|
|
974
1226
|
meeting.parseMeetingInfo(undefined, destination);
|
|
975
1227
|
} else {
|
|
976
|
-
await meeting.fetchMeetingInfo({
|
|
1228
|
+
await meeting.fetchMeetingInfo({
|
|
1229
|
+
extraParams: infoExtraParams,
|
|
1230
|
+
sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
|
|
1231
|
+
});
|
|
977
1232
|
}
|
|
978
1233
|
} catch (err) {
|
|
979
|
-
if (
|
|
980
|
-
|
|
1234
|
+
if (
|
|
1235
|
+
!(err instanceof CaptchaError) &&
|
|
1236
|
+
!(err instanceof PasswordError) &&
|
|
1237
|
+
!(err instanceof PermissionError)
|
|
1238
|
+
) {
|
|
981
1239
|
LoggerProxy.logger.info(
|
|
982
1240
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
|
983
1241
|
);
|
|
1242
|
+
if (failOnMissingMeetingInfo) {
|
|
1243
|
+
LoggerProxy.logger.info(
|
|
1244
|
+
`Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`
|
|
1245
|
+
);
|
|
1246
|
+
// @ts-ignore
|
|
1247
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
|
|
1248
|
+
throw new NoMeetingInfoError();
|
|
1249
|
+
}
|
|
1250
|
+
// if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
|
|
984
1251
|
LoggerProxy.logger.info(
|
|
985
1252
|
'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'
|
|
986
1253
|
);
|
|
@@ -1033,7 +1300,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
1033
1300
|
//
|
|
1034
1301
|
// Our job is to determine the appropriate one
|
|
1035
1302
|
// and its corresponding service so that developers
|
|
1036
|
-
// need only sipURL
|
|
1303
|
+
// need only sipURL to get a meeting
|
|
1037
1304
|
// and its ID, but have the option to use createWithType()
|
|
1038
1305
|
// and specify those types to get meetingInfo
|
|
1039
1306
|
}
|
|
@@ -1077,33 +1344,108 @@ export default class Meetings extends WebexPlugin {
|
|
|
1077
1344
|
* @memberof Meetings
|
|
1078
1345
|
*/
|
|
1079
1346
|
public syncMeetings() {
|
|
1080
|
-
return this.request
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
this.
|
|
1087
|
-
|
|
1088
|
-
|
|
1347
|
+
return this.request
|
|
1348
|
+
.getActiveMeetings()
|
|
1349
|
+
.then((locusArray) => {
|
|
1350
|
+
const activeLocusUrl = [];
|
|
1351
|
+
|
|
1352
|
+
if (locusArray?.loci && locusArray.loci.length > 0) {
|
|
1353
|
+
const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);
|
|
1354
|
+
lociToUpdate.forEach((locus) => {
|
|
1355
|
+
activeLocusUrl.push(locus.url);
|
|
1356
|
+
this.handleLocusEvent({
|
|
1357
|
+
locus,
|
|
1358
|
+
locusUrl: locus.url,
|
|
1359
|
+
});
|
|
1089
1360
|
});
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
const meetingsCollection = this.meetingCollection.getAll();
|
|
1361
|
+
}
|
|
1362
|
+
const meetingsCollection = this.meetingCollection.getAll();
|
|
1093
1363
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
// @ts-ignore
|
|
1099
|
-
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1100
|
-
// destroy function also uploads logs
|
|
1364
|
+
if (Object.keys(meetingsCollection).length > 0) {
|
|
1365
|
+
// Some time the mercury event is missed after mercury reconnect
|
|
1366
|
+
// if sync returns no locus then clear all the meetings
|
|
1367
|
+
for (const meeting of Object.values(meetingsCollection)) {
|
|
1101
1368
|
// @ts-ignore
|
|
1102
|
-
|
|
1369
|
+
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1370
|
+
// destroy function also uploads logs
|
|
1371
|
+
// @ts-ignore
|
|
1372
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1373
|
+
}
|
|
1103
1374
|
}
|
|
1104
1375
|
}
|
|
1376
|
+
})
|
|
1377
|
+
.catch((error) => {
|
|
1378
|
+
LoggerProxy.logger.error(
|
|
1379
|
+
`Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
|
|
1380
|
+
);
|
|
1381
|
+
throw new Error(error);
|
|
1382
|
+
});
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
/**
|
|
1386
|
+
* sort out locus array for initial creating
|
|
1387
|
+
* @param {Array} loci original locus array
|
|
1388
|
+
* @returns {undefined}
|
|
1389
|
+
* @public
|
|
1390
|
+
* @memberof Meetings
|
|
1391
|
+
*/
|
|
1392
|
+
sortLocusArrayToUpdate(loci: any[]) {
|
|
1393
|
+
const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));
|
|
1394
|
+
const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));
|
|
1395
|
+
this.breakoutLocusForHandleLater = [];
|
|
1396
|
+
const lociToUpdate = [...mainLoci];
|
|
1397
|
+
breakoutLoci.forEach((breakoutLocus) => {
|
|
1398
|
+
const associateMainLocus = mainLoci.find(
|
|
1399
|
+
(mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url
|
|
1400
|
+
);
|
|
1401
|
+
const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({
|
|
1402
|
+
locus: breakoutLocus,
|
|
1403
|
+
locusUrl: breakoutLocus.url,
|
|
1404
|
+
});
|
|
1405
|
+
|
|
1406
|
+
if (associateMainLocus && !existCorrespondingMeeting) {
|
|
1407
|
+
// if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
|
|
1408
|
+
// after meeting create with main locus, then handle the associate breakout locus.
|
|
1409
|
+
// if only handle breakout locus, will miss some date
|
|
1410
|
+
this.breakoutLocusForHandleLater.push(breakoutLocus);
|
|
1411
|
+
} else {
|
|
1412
|
+
lociToUpdate.push(breakoutLocus);
|
|
1105
1413
|
}
|
|
1106
1414
|
});
|
|
1415
|
+
|
|
1416
|
+
return lociToUpdate;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
/**
|
|
1420
|
+
* check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
|
|
1421
|
+
* @param {Object} newCreatedLocus the locus which just create meeting object of it
|
|
1422
|
+
* @returns {undefined}
|
|
1423
|
+
* @public
|
|
1424
|
+
* @memberof Meetings
|
|
1425
|
+
*/
|
|
1426
|
+
checkHandleBreakoutLocus(newCreatedLocus) {
|
|
1427
|
+
if (
|
|
1428
|
+
!newCreatedLocus ||
|
|
1429
|
+
!this.breakoutLocusForHandleLater ||
|
|
1430
|
+
!this.breakoutLocusForHandleLater.length
|
|
1431
|
+
) {
|
|
1432
|
+
return;
|
|
1433
|
+
}
|
|
1434
|
+
if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {
|
|
1435
|
+
return;
|
|
1436
|
+
}
|
|
1437
|
+
const existIndex = this.breakoutLocusForHandleLater.findIndex(
|
|
1438
|
+
(breakoutLocus) =>
|
|
1439
|
+
breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url
|
|
1440
|
+
);
|
|
1441
|
+
|
|
1442
|
+
if (existIndex < 0) {
|
|
1443
|
+
return;
|
|
1444
|
+
}
|
|
1445
|
+
|
|
1446
|
+
const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
|
|
1447
|
+
this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});
|
|
1448
|
+
this.breakoutLocusForHandleLater.splice(existIndex, 1);
|
|
1107
1449
|
}
|
|
1108
1450
|
|
|
1109
1451
|
/**
|
|
@@ -1125,4 +1467,15 @@ export default class Meetings extends WebexPlugin {
|
|
|
1125
1467
|
getLogger() {
|
|
1126
1468
|
return LoggerProxy.get();
|
|
1127
1469
|
}
|
|
1470
|
+
|
|
1471
|
+
/**
|
|
1472
|
+
* Returns the first meeting it finds that has the webrtc media connection created.
|
|
1473
|
+
* Useful for debugging in the console.
|
|
1474
|
+
*
|
|
1475
|
+
* @private
|
|
1476
|
+
* @returns {Meeting} Meeting object that has a webrtc media connection, else undefined
|
|
1477
|
+
*/
|
|
1478
|
+
getActiveWebrtcMeeting() {
|
|
1479
|
+
return this.meetingCollection.getActiveWebrtcMeeting();
|
|
1480
|
+
}
|
|
1128
1481
|
}
|