@webex/plugin-meetings 2.60.0-next.9 → 2.60.1
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 +8 -46
- package/dist/common/browser-detection.js +3 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +4 -3
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +2 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +2 -1
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +2 -1
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +2 -1
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +2 -1
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +4 -3
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +2 -1
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +2 -1
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +2 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +2 -1
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +2 -1
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +8 -20
- package/dist/common/errors/webex-errors.js +28 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +2 -1
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +2 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +2 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +2 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +2 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +2 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +3 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +1 -3
- package/dist/common/logs/request.js +5 -8
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +7 -9
- package/dist/common/queue.js +9 -22
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +7 -5
- package/dist/config.js +11 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +97 -217
- package/dist/constants.js +441 -416
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +6 -3
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +1 -11
- package/dist/controls-options-manager/enums.js +6 -15
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +1 -17
- package/dist/controls-options-manager/index.js +38 -127
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -1
- package/dist/controls-options-manager/util.js +19 -309
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +4 -116
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +11 -100
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +4 -3
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +2 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +4 -57
- package/dist/locus-info/index.js +84 -425
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +5 -13
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +3 -58
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +6 -66
- package/dist/locus-info/parser.js +80 -253
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +13 -97
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +0 -2
- package/dist/media/index.js +319 -107
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +53 -38
- package/dist/media/properties.js +153 -96
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +22 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +230 -234
- package/dist/mediaQualityMetrics/config.js +498 -302
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +0 -88
- package/dist/meeting/in-meeting-actions.js +3 -94
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +494 -591
- package/dist/meeting/index.js +2969 -4707
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +25 -93
- package/dist/meeting/muteState.js +133 -224
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +47 -82
- package/dist/meeting/request.js +199 -297
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +2 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +1 -102
- package/dist/meeting/util.js +435 -605
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -3
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +1 -13
- package/dist/meeting-info/index.js +7 -74
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
- package/dist/meeting-info/meeting-info-v2.js +63 -200
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +2 -1
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +3 -2
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +41 -39
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +0 -17
- package/dist/meetings/collection.js +4 -42
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +21 -103
- package/dist/meetings/index.js +124 -486
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +3 -4
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +6 -107
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +1 -13
- package/dist/member/index.js +2 -45
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +4 -3
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/util.js +29 -120
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +0 -5
- package/dist/members/collection.js +2 -11
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +11 -56
- package/dist/members/index.js +47 -174
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +11 -67
- package/dist/members/request.js +54 -102
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +4 -3
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +1 -214
- package/dist/members/util.js +284 -327
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +6 -15
- package/dist/metrics/constants.js +9 -17
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +111 -4
- package/dist/metrics/index.js +452 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -5
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.js +3 -2
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +3 -2
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +2 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.d.ts +7 -62
- package/dist/reachability/index.js +72 -265
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +3 -7
- package/dist/reachability/request.js +10 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +6 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +3 -23
- package/dist/reactions/reactions.type.js +23 -21
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +8 -32
- package/dist/reconnection-manager/index.js +231 -282
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +5 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +1 -15
- package/dist/recording-controller/index.js +46 -57
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +4 -5
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +47 -9
- package/dist/roap/index.js +235 -101
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +12 -18
- package/dist/roap/request.js +180 -126
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +16 -27
- package/dist/roap/turnDiscovery.js +105 -115
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +83 -1
- package/dist/statsAnalyzer/global.js +85 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +30 -28
- package/dist/statsAnalyzer/index.js +509 -374
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
- package/dist/statsAnalyzer/mqaUtil.js +83 -116
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +2 -1
- package/dist/transcription/index.js.map +1 -1
- package/package.json +26 -35
- package/src/common/errors/webex-errors.ts +12 -36
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +1 -5
- package/src/common/queue.ts +8 -22
- package/src/config.ts +7 -5
- package/src/constants.ts +97 -244
- package/src/controls-options-manager/enums.ts +0 -12
- package/src/controls-options-manager/index.ts +21 -116
- package/src/controls-options-manager/util.ts +14 -294
- package/src/index.js +15 -0
- package/src/locus-info/controlsUtils.ts +0 -110
- package/src/locus-info/index.ts +61 -449
- package/src/locus-info/infoUtils.ts +2 -14
- package/src/locus-info/mediaSharesUtils.ts +0 -64
- package/src/locus-info/parser.ts +47 -258
- package/src/locus-info/selfUtils.ts +2 -85
- package/src/media/index.ts +370 -153
- package/src/media/properties.ts +136 -106
- package/src/media/util.ts +21 -0
- package/src/mediaQualityMetrics/config.ts +377 -244
- package/src/meeting/effectsState.ts +209 -0
- package/src/meeting/in-meeting-actions.ts +0 -176
- package/src/meeting/index.ts +2482 -3929
- package/src/meeting/muteState.ts +138 -224
- package/src/meeting/request.ts +127 -207
- package/src/meeting/util.ts +423 -590
- package/src/meeting-info/index.ts +8 -81
- package/src/meeting-info/meeting-info-v2.ts +13 -163
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +0 -33
- package/src/meetings/index.ts +126 -486
- package/src/meetings/request.ts +0 -2
- package/src/meetings/util.ts +5 -116
- package/src/member/index.ts +1 -43
- package/src/member/util.ts +28 -125
- package/src/members/collection.ts +0 -8
- package/src/members/index.ts +52 -187
- package/src/members/request.ts +27 -87
- package/src/members/util.ts +291 -332
- package/src/metrics/config.ts +485 -0
- package/src/metrics/constants.ts +6 -15
- package/src/metrics/index.ts +471 -1
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/peer-connection-manager/index.ts +847 -0
- package/src/peer-connection-manager/util.ts +119 -0
- package/src/reachability/index.ts +45 -238
- package/src/reachability/request.ts +8 -17
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -30
- package/src/reconnection-manager/index.ts +156 -168
- package/src/recording-controller/index.ts +3 -20
- package/src/recording-controller/util.ts +9 -26
- package/src/roap/collection.ts +62 -0
- package/src/roap/handler.ts +294 -0
- package/src/roap/index.ts +241 -98
- package/src/roap/request.ts +148 -74
- package/src/roap/state.ts +156 -0
- package/src/roap/turnDiscovery.ts +56 -62
- package/src/roap/util.ts +100 -0
- package/src/statsAnalyzer/global.ts +84 -1
- package/src/statsAnalyzer/index.ts +642 -413
- package/src/statsAnalyzer/mqaUtil.ts +114 -111
- package/test/integration/spec/journey.js +264 -320
- package/test/integration/spec/space-meeting.js +4 -77
- package/test/unit/spec/common/queue.js +2 -31
- package/test/unit/spec/controls-options-manager/index.js +0 -163
- package/test/unit/spec/controls-options-manager/util.js +60 -576
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/controlsUtils.js +30 -323
- package/test/unit/spec/locus-info/index.js +15 -1389
- package/test/unit/spec/locus-info/infoUtils.js +16 -54
- package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
- package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
- package/test/unit/spec/locus-info/parser.js +35 -116
- package/test/unit/spec/locus-info/selfUtils.js +0 -275
- package/test/unit/spec/media/properties.ts +84 -75
- package/test/unit/spec/meeting/effectsState.js +281 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
- package/test/unit/spec/meeting/index.js +3136 -8547
- package/test/unit/spec/meeting/muteState.js +213 -409
- package/test/unit/spec/meeting/request.js +42 -512
- package/test/unit/spec/meeting/utils.js +24 -741
- package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
- package/test/unit/spec/meeting-info/utilv2.js +0 -21
- package/test/unit/spec/meetings/collection.js +0 -26
- package/test/unit/spec/meetings/index.js +211 -1278
- package/test/unit/spec/meetings/utils.js +2 -202
- package/test/unit/spec/member/index.js +9 -32
- package/test/unit/spec/member/util.js +61 -499
- package/test/unit/spec/members/index.js +5 -394
- package/test/unit/spec/members/request.js +27 -206
- package/test/unit/spec/members/utils.js +38 -173
- package/test/unit/spec/metrics/index.js +50 -1
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/peerconnection-manager/index.js +218 -0
- package/test/unit/spec/peerconnection-manager/utils.js +49 -0
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
- package/test/unit/spec/reachability/index.ts +24 -598
- package/test/unit/spec/reconnection-manager/index.js +24 -162
- package/test/unit/spec/recording-controller/index.js +218 -293
- package/test/unit/spec/recording-controller/util.js +96 -223
- package/test/unit/spec/roap/index.ts +76 -200
- package/test/unit/spec/roap/turnDiscovery.ts +48 -86
- package/test/unit/spec/roap/util.js +30 -0
- package/test/unit/spec/stats-analyzer/index.js +174 -188
- package/test/utils/testUtils.js +45 -0
- package/test/utils/webex-config.js +0 -4
- package/test/utils/webex-test-users.js +3 -7
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/annotation.types.js +0 -7
- package/dist/annotation/annotation.types.js.map +0 -1
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/constants.js +0 -41
- package/dist/annotation/constants.js.map +0 -1
- package/dist/annotation/index.d.ts +0 -117
- package/dist/annotation/index.js +0 -357
- package/dist/annotation/index.js.map +0 -1
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/breakout.js +0 -215
- package/dist/breakouts/breakout.js.map +0 -1
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/collection.js +0 -22
- package/dist/breakouts/collection.js.map +0 -1
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/edit-lock-error.js +0 -51
- package/dist/breakouts/edit-lock-error.js.map +0 -1
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/events.js +0 -44
- package/dist/breakouts/events.js.map +0 -1
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/index.js +0 -1047
- package/dist/breakouts/index.js.map +0 -1
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/request.js +0 -77
- package/dist/breakouts/request.js.map +0 -1
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/breakouts/utils.js +0 -64
- package/dist/breakouts/utils.js.map +0 -1
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/no-meeting-info.js +0 -50
- package/dist/common/errors/no-meeting-info.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/types.js +0 -7
- package/dist/controls-options-manager/types.js.map +0 -1
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/collection.js +0 -22
- package/dist/interpretation/collection.js.map +0 -1
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/index.js +0 -365
- package/dist/interpretation/index.js.map +0 -1
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/interpretation/siLanguage.js +0 -24
- package/dist/interpretation/siLanguage.js.map +0 -1
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/locusMediaRequest.js +0 -291
- package/dist/meeting/locusMediaRequest.js.map +0 -1
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/request.type.js +0 -7
- package/dist/meeting/request.type.js.map +0 -1
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/meetings.types.js +0 -7
- package/dist/meetings/meetings.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/types.js +0 -23
- package/dist/member/types.js.map +0 -1
- package/dist/multistream/mediaRequestManager.d.ts +0 -118
- package/dist/multistream/mediaRequestManager.js +0 -344
- package/dist/multistream/mediaRequestManager.js.map +0 -1
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlot.js +0 -200
- package/dist/multistream/receiveSlot.js.map +0 -1
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/receiveSlotManager.js +0 -174
- package/dist/multistream/receiveSlotManager.js.map +0 -1
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMedia.js +0 -268
- package/dist/multistream/remoteMedia.js.map +0 -1
- package/dist/multistream/remoteMediaGroup.d.ts +0 -47
- package/dist/multistream/remoteMediaGroup.js +0 -267
- package/dist/multistream/remoteMediaGroup.js.map +0 -1
- package/dist/multistream/remoteMediaManager.d.ts +0 -285
- package/dist/multistream/remoteMediaManager.js +0 -1211
- package/dist/multistream/remoteMediaManager.js.map +0 -1
- package/dist/multistream/sendSlotManager.d.ts +0 -61
- package/dist/multistream/sendSlotManager.js +0 -236
- package/dist/multistream/sendSlotManager.js.map +0 -1
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/constants.js +0 -12
- package/dist/reactions/constants.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -54
- package/dist/rtcMetrics/index.js +0 -140
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/collection.js +0 -43
- package/dist/webinar/collection.js.map +0 -1
- package/dist/webinar/index.d.ts +0 -5
- package/dist/webinar/index.js +0 -68
- package/dist/webinar/index.js.map +0 -1
- package/src/annotation/annotation.types.ts +0 -50
- package/src/annotation/constants.ts +0 -36
- package/src/annotation/index.ts +0 -328
- package/src/breakouts/README.md +0 -220
- package/src/breakouts/breakout.ts +0 -188
- package/src/breakouts/collection.ts +0 -19
- package/src/breakouts/edit-lock-error.ts +0 -25
- package/src/breakouts/events.ts +0 -56
- package/src/breakouts/index.ts +0 -925
- package/src/breakouts/request.ts +0 -55
- package/src/breakouts/utils.ts +0 -57
- package/src/common/errors/no-meeting-info.ts +0 -24
- package/src/controls-options-manager/types.ts +0 -59
- package/src/index.ts +0 -40
- package/src/interpretation/README.md +0 -60
- package/src/interpretation/collection.ts +0 -19
- package/src/interpretation/index.ts +0 -332
- package/src/interpretation/siLanguage.ts +0 -18
- package/src/meeting/locusMediaRequest.ts +0 -313
- package/src/meeting/request.type.ts +0 -13
- package/src/meetings/meetings.types.ts +0 -12
- package/src/member/types.ts +0 -38
- package/src/multistream/mediaRequestManager.ts +0 -440
- package/src/multistream/receiveSlot.ts +0 -184
- package/src/multistream/receiveSlotManager.ts +0 -166
- package/src/multistream/remoteMedia.ts +0 -254
- package/src/multistream/remoteMediaGroup.ts +0 -284
- package/src/multistream/remoteMediaManager.ts +0 -1145
- package/src/multistream/sendSlotManager.ts +0 -170
- package/src/reactions/constants.ts +0 -4
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -124
- package/src/webinar/collection.ts +0 -31
- package/src/webinar/index.ts +0 -62
- package/test/integration/spec/converged-space-meetings.js +0 -233
- package/test/unit/spec/annotation/index.ts +0 -418
- package/test/unit/spec/breakouts/breakout.ts +0 -237
- package/test/unit/spec/breakouts/collection.ts +0 -15
- package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
- package/test/unit/spec/breakouts/events.ts +0 -89
- package/test/unit/spec/breakouts/index.ts +0 -1790
- package/test/unit/spec/breakouts/request.ts +0 -104
- package/test/unit/spec/breakouts/utils.js +0 -72
- package/test/unit/spec/interpretation/collection.ts +0 -15
- package/test/unit/spec/interpretation/index.ts +0 -589
- package/test/unit/spec/interpretation/siLanguage.ts +0 -28
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
- package/test/unit/spec/media/index.ts +0 -290
- package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
- package/test/unit/spec/meeting-info/index.js +0 -300
- package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
- package/test/unit/spec/multistream/receiveSlot.ts +0 -163
- package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
- package/test/unit/spec/multistream/remoteMedia.ts +0 -255
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
- package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
- package/test/unit/spec/reachability/request.js +0 -68
- package/test/unit/spec/roap/request.ts +0 -232
- package/test/unit/spec/rtcMetrics/index.ts +0 -93
- package/test/unit/spec/webinar/collection.ts +0 -13
- package/test/unit/spec/webinar/index.ts +0 -60
- package/test/utils/constants.js +0 -9
- package/test/utils/integrationTestUtils.js +0 -46
- /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
package/src/meetings/index.ts
CHANGED
|
@@ -1,17 +1,13 @@
|
|
|
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';
|
|
6
4
|
// @ts-ignore
|
|
7
5
|
import {WebexPlugin} from '@webex/webex-core';
|
|
8
|
-
import {setLogger} from '@webex/internal-media-core';
|
|
9
|
-
|
|
10
|
-
import * as mediaHelpersModule from '@webex/media-helpers';
|
|
11
6
|
|
|
12
7
|
import 'webrtc-adapter';
|
|
13
8
|
|
|
14
9
|
import Metrics from '../metrics';
|
|
10
|
+
import {trigger, eventType} from '../metrics/config';
|
|
15
11
|
import LoggerConfig from '../common/logs/logger-config';
|
|
16
12
|
import StaticConfig from '../common/config';
|
|
17
13
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
@@ -42,14 +38,11 @@ import {
|
|
|
42
38
|
MEETING_REMOVED_REASON,
|
|
43
39
|
_CONVERSATION_URL_,
|
|
44
40
|
CONVERSATION_URL,
|
|
45
|
-
MEETINGNUMBER,
|
|
46
|
-
_JOINED_,
|
|
47
|
-
_MOVED_,
|
|
48
41
|
} from '../constants';
|
|
49
42
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
50
43
|
import MeetingInfo from '../meeting-info';
|
|
51
44
|
import MeetingInfoV2 from '../meeting-info/meeting-info-v2';
|
|
52
|
-
import Meeting
|
|
45
|
+
import Meeting from '../meeting';
|
|
53
46
|
import PersonalMeetingRoom from '../personal-meeting-room';
|
|
54
47
|
import Reachability from '../reachability';
|
|
55
48
|
import Request from './request';
|
|
@@ -58,38 +51,7 @@ import CaptchaError from '../common/errors/captcha-error';
|
|
|
58
51
|
|
|
59
52
|
import MeetingCollection from './collection';
|
|
60
53
|
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
|
-
}
|
|
72
54
|
|
|
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
|
-
}
|
|
93
55
|
/**
|
|
94
56
|
* Meetings Ready Event
|
|
95
57
|
* Emitted when the meetings instance on webex is ready
|
|
@@ -148,13 +110,12 @@ export default class Meetings extends WebexPlugin {
|
|
|
148
110
|
meetingCollection: any;
|
|
149
111
|
personalMeetingRoom: any;
|
|
150
112
|
preferredWebexSite: any;
|
|
151
|
-
reachability:
|
|
113
|
+
reachability: any;
|
|
152
114
|
registered: any;
|
|
153
115
|
request: any;
|
|
154
116
|
geoHintInfo: any;
|
|
155
117
|
meetingInfo: any;
|
|
156
|
-
|
|
157
|
-
breakoutLocusForHandleLater: any;
|
|
118
|
+
|
|
158
119
|
namespace = MEETINGS;
|
|
159
120
|
|
|
160
121
|
/**
|
|
@@ -166,17 +127,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
166
127
|
constructor(...args) {
|
|
167
128
|
super(...args);
|
|
168
129
|
|
|
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
|
-
|
|
180
130
|
/**
|
|
181
131
|
* The Meetings request to interact with server
|
|
182
132
|
* @instance
|
|
@@ -204,17 +154,15 @@ export default class Meetings extends WebexPlugin {
|
|
|
204
154
|
* @memberof Meetings
|
|
205
155
|
*/
|
|
206
156
|
this.personalMeetingRoom = null;
|
|
207
|
-
|
|
208
157
|
/**
|
|
209
|
-
* The Reachability object to interact with server
|
|
158
|
+
* The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called
|
|
210
159
|
* starts as null
|
|
211
160
|
* @instance
|
|
212
161
|
* @type {Object}
|
|
213
162
|
* @private
|
|
214
163
|
* @memberof Meetings
|
|
215
164
|
*/
|
|
216
|
-
|
|
217
|
-
this.reachability = new Reachability(this.webex);
|
|
165
|
+
this.reachability = null;
|
|
218
166
|
|
|
219
167
|
/**
|
|
220
168
|
* If the meetings plugin has been registered and listening via {@link Meetings#register}
|
|
@@ -244,137 +192,30 @@ export default class Meetings extends WebexPlugin {
|
|
|
244
192
|
*/
|
|
245
193
|
this.media = {
|
|
246
194
|
getUserMedia: Media.getUserMedia,
|
|
195
|
+
getSupportedDevice: Media.getSupportedDevice,
|
|
247
196
|
};
|
|
248
197
|
|
|
249
198
|
this.onReady();
|
|
250
199
|
}
|
|
251
200
|
|
|
252
201
|
/**
|
|
253
|
-
*
|
|
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
|
|
202
|
+
* handle locus events and takes meeting actions with them as they come in
|
|
366
203
|
* @param {Object} data a locus event
|
|
367
204
|
* @param {String} data.locusUrl
|
|
368
205
|
* @param {Object} data.locus
|
|
369
|
-
* @
|
|
206
|
+
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
207
|
+
* @param {String} data.eventType
|
|
208
|
+
* @returns {undefined}
|
|
370
209
|
* @private
|
|
371
210
|
* @memberof Meetings
|
|
372
211
|
*/
|
|
373
|
-
|
|
212
|
+
private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {
|
|
213
|
+
let meeting = null;
|
|
214
|
+
|
|
374
215
|
// getting meeting by correlationId. This will happen for the new event
|
|
375
216
|
// Either the locus
|
|
376
217
|
// TODO : Add check for the callBack Address
|
|
377
|
-
|
|
218
|
+
meeting =
|
|
378
219
|
this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
|
|
379
220
|
// @ts-ignore
|
|
380
221
|
this.meetingCollection.getByKey(
|
|
@@ -390,24 +231,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
390
231
|
) ||
|
|
391
232
|
(data.locus.info?.isUnifiedSpaceMeeting
|
|
392
233
|
? undefined
|
|
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);
|
|
234
|
+
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl));
|
|
411
235
|
|
|
412
236
|
// Special case when locus has got replaced, This only happend once if a replace locus exists
|
|
413
237
|
// https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
|
|
@@ -420,16 +244,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
420
244
|
);
|
|
421
245
|
}
|
|
422
246
|
|
|
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
|
-
}
|
|
433
247
|
if (!meeting) {
|
|
434
248
|
// TODO: create meeting when we get a meeting object
|
|
435
249
|
// const checkForEnded = (locus) => {
|
|
@@ -486,7 +300,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
486
300
|
|
|
487
301
|
// It's a new meeting so initialize the locus data
|
|
488
302
|
meeting.locusInfo.initialSetup(data.locus);
|
|
489
|
-
this.checkHandleBreakoutLocus(data.locus);
|
|
490
303
|
})
|
|
491
304
|
.catch((e) => {
|
|
492
305
|
LoggerProxy.logger.error(e);
|
|
@@ -496,15 +309,10 @@ export default class Meetings extends WebexPlugin {
|
|
|
496
309
|
// because the other user left so before sending 'added' event make sure it exists in the collection
|
|
497
310
|
|
|
498
311
|
if (this.getMeetingByType(_ID_, meeting.id)) {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
trigger: 'mercury-event',
|
|
504
|
-
},
|
|
505
|
-
options: {
|
|
506
|
-
meetingId: meeting.id,
|
|
507
|
-
},
|
|
312
|
+
Metrics.postEvent({
|
|
313
|
+
event: eventType.REMOTE_STARTED,
|
|
314
|
+
meeting,
|
|
315
|
+
data: {trigger: trigger.MERCURY_EVENT},
|
|
508
316
|
});
|
|
509
317
|
Trigger.trigger(
|
|
510
318
|
this,
|
|
@@ -623,9 +431,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
623
431
|
// @ts-ignore
|
|
624
432
|
LoggerProxy.set(this.webex.logger);
|
|
625
433
|
|
|
626
|
-
mediaLogger = new MediaLogger();
|
|
627
|
-
setLogger(mediaLogger);
|
|
628
|
-
|
|
629
434
|
/**
|
|
630
435
|
* The MeetingInfo object to interact with server
|
|
631
436
|
* @instance
|
|
@@ -657,7 +462,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
657
462
|
|
|
658
463
|
MeetingsUtil.checkH264Support({disableNotifications: true});
|
|
659
464
|
// @ts-ignore
|
|
660
|
-
Metrics.initialSetup(this.webex);
|
|
465
|
+
Metrics.initialSetup(this.meetingCollection, this.webex);
|
|
661
466
|
});
|
|
662
467
|
}
|
|
663
468
|
|
|
@@ -681,6 +486,21 @@ export default class Meetings extends WebexPlugin {
|
|
|
681
486
|
}
|
|
682
487
|
}
|
|
683
488
|
|
|
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
|
+
|
|
684
504
|
/**
|
|
685
505
|
* API to toggle starting adhoc meeting
|
|
686
506
|
* @param {Boolean} changeState
|
|
@@ -811,36 +631,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
811
631
|
);
|
|
812
632
|
}
|
|
813
633
|
|
|
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
|
-
|
|
844
634
|
/**
|
|
845
635
|
* Uploads logs to the webex services for tracking
|
|
846
636
|
* @param {Object} [options={}]
|
|
@@ -855,10 +645,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
855
645
|
*/
|
|
856
646
|
uploadLogs(
|
|
857
647
|
options: {
|
|
858
|
-
autoupload?: boolean;
|
|
859
648
|
callStart?: string;
|
|
860
649
|
feedbackId?: string;
|
|
861
|
-
locussessionid?: string;
|
|
862
650
|
locusId?: string;
|
|
863
651
|
correlationId?: string;
|
|
864
652
|
meetingId?: string;
|
|
@@ -875,7 +663,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
875
663
|
'Meetings:index#uploadLogs --> Upload logs for meeting completed.',
|
|
876
664
|
uploadResult
|
|
877
665
|
);
|
|
878
|
-
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);
|
|
879
666
|
Trigger.trigger(
|
|
880
667
|
this,
|
|
881
668
|
{
|
|
@@ -910,7 +697,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
910
697
|
);
|
|
911
698
|
|
|
912
699
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {
|
|
913
|
-
|
|
700
|
+
// @ts-ignore - seems like typo
|
|
701
|
+
meetingId: options.meetingsId,
|
|
914
702
|
reason: uploadError.message,
|
|
915
703
|
stack: uploadError.stack,
|
|
916
704
|
code: uploadError.code,
|
|
@@ -918,6 +706,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
918
706
|
});
|
|
919
707
|
}
|
|
920
708
|
|
|
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
|
+
|
|
921
720
|
/**
|
|
922
721
|
* gets the reachability instance for Meetings
|
|
923
722
|
* @returns {Reachability}
|
|
@@ -935,6 +734,10 @@ export default class Meetings extends WebexPlugin {
|
|
|
935
734
|
* @memberof Meetings
|
|
936
735
|
*/
|
|
937
736
|
startReachability() {
|
|
737
|
+
if (!this.reachability) {
|
|
738
|
+
this.setReachability();
|
|
739
|
+
}
|
|
740
|
+
|
|
938
741
|
return this.getReachability().gatherReachability();
|
|
939
742
|
}
|
|
940
743
|
|
|
@@ -962,29 +765,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
962
765
|
if (res) {
|
|
963
766
|
this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
|
|
964
767
|
}
|
|
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();
|
|
988
768
|
});
|
|
989
769
|
}
|
|
990
770
|
|
|
@@ -1025,48 +805,29 @@ export default class Meetings extends WebexPlugin {
|
|
|
1025
805
|
}
|
|
1026
806
|
|
|
1027
807
|
/**
|
|
1028
|
-
* Create a meeting
|
|
1029
|
-
* @param {string} destination - sipURL, phonenumber, or locus object}
|
|
808
|
+
* Create a meeting.
|
|
809
|
+
* @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
|
|
1030
810
|
* @param {string} [type] - the optional specified type, such as locusId
|
|
1031
811
|
* @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 (callStateForMetrics.correlationId can be provided instead)
|
|
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)
|
|
1035
|
-
* @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
|
|
1036
812
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
1037
813
|
* @public
|
|
1038
814
|
* @memberof Meetings
|
|
1039
815
|
*/
|
|
1040
|
-
public create(
|
|
1041
|
-
destination: string,
|
|
1042
|
-
type: string = null,
|
|
1043
|
-
useRandomDelayForInfo = false,
|
|
1044
|
-
infoExtraParams = {},
|
|
1045
|
-
correlationId: string = undefined,
|
|
1046
|
-
failOnMissingMeetingInfo = false,
|
|
1047
|
-
callStateForMetrics: CallStateForMetrics = undefined
|
|
1048
|
-
) {
|
|
816
|
+
public create(destination: string, type: string = null, useRandomDelayForInfo = false) {
|
|
1049
817
|
// TODO: type should be from a dictionary
|
|
1050
818
|
|
|
1051
819
|
// Validate meeting information based on the provided destination and
|
|
1052
820
|
// type. This must be performed prior to determining if the meeting is
|
|
1053
821
|
// found in the collection, as we mutate the destination for hydra person
|
|
1054
822
|
// id values.
|
|
1055
|
-
if (correlationId) {
|
|
1056
|
-
callStateForMetrics = {...(callStateForMetrics || {}), correlationId};
|
|
1057
|
-
}
|
|
1058
|
-
|
|
1059
823
|
return (
|
|
1060
824
|
this.meetingInfo
|
|
1061
825
|
.fetchInfoOptions(destination, type)
|
|
1062
826
|
// Catch a failure to fetch info options.
|
|
1063
827
|
.catch((error) => {
|
|
1064
|
-
LoggerProxy.logger.
|
|
1065
|
-
`Meetings:index#create -->
|
|
828
|
+
LoggerProxy.logger.info(
|
|
829
|
+
`Meetings:index#create --> INFO, unable to determine info options: ${error.message}`
|
|
1066
830
|
);
|
|
1067
|
-
if (error instanceof SpaceIDDeprecatedError) {
|
|
1068
|
-
throw new SpaceIDDeprecatedError();
|
|
1069
|
-
}
|
|
1070
831
|
})
|
|
1071
832
|
.then((options: any = {}) => {
|
|
1072
833
|
// Normalize the destination.
|
|
@@ -1097,59 +858,49 @@ export default class Meetings extends WebexPlugin {
|
|
|
1097
858
|
// Validate if a meeting was found.
|
|
1098
859
|
if (!meeting) {
|
|
1099
860
|
// Create a meeting based on the normalized destination and type.
|
|
1100
|
-
return this.createMeeting(
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
}
|
|
1141
|
-
});
|
|
1142
|
-
} else {
|
|
1143
|
-
LoggerProxy.logger.error(
|
|
1144
|
-
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
1145
|
-
);
|
|
861
|
+
return this.createMeeting(targetDest, type, useRandomDelayForInfo).then(
|
|
862
|
+
(createdMeeting: any) => {
|
|
863
|
+
// If the meeting was successfully created.
|
|
864
|
+
if (createdMeeting && createdMeeting.on) {
|
|
865
|
+
// Create a destruction event for the meeting.
|
|
866
|
+
createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {
|
|
867
|
+
// @ts-ignore
|
|
868
|
+
if (this.config.autoUploadLogs) {
|
|
869
|
+
this.uploadLogs({
|
|
870
|
+
callStart: createdMeeting.locusInfo?.fullState?.lastActive,
|
|
871
|
+
correlationId: createdMeeting.correlationId,
|
|
872
|
+
feedbackId: createdMeeting.correlationId,
|
|
873
|
+
locusId: createdMeeting.locusId,
|
|
874
|
+
meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,
|
|
875
|
+
}).then(() => this.destroy(createdMeeting, payload.reason));
|
|
876
|
+
} else {
|
|
877
|
+
this.destroy(createdMeeting, payload.reason);
|
|
878
|
+
}
|
|
879
|
+
});
|
|
880
|
+
|
|
881
|
+
createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
|
|
882
|
+
// @ts-ignore
|
|
883
|
+
if (this.config.autoUploadLogs) {
|
|
884
|
+
this.uploadLogs({
|
|
885
|
+
callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
|
|
886
|
+
correlationId: meetingInstance.correlationId,
|
|
887
|
+
feedbackId: meetingInstance.correlationId,
|
|
888
|
+
locusId: meetingInstance.locusId,
|
|
889
|
+
meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,
|
|
890
|
+
});
|
|
891
|
+
}
|
|
892
|
+
});
|
|
893
|
+
} else {
|
|
894
|
+
LoggerProxy.logger.error(
|
|
895
|
+
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
896
|
+
);
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
// Return the newly created meeting.
|
|
900
|
+
return Promise.resolve(createdMeeting);
|
|
1146
901
|
}
|
|
1147
|
-
|
|
1148
|
-
// Return the newly created meeting.
|
|
1149
|
-
return Promise.resolve(createdMeeting);
|
|
1150
|
-
});
|
|
902
|
+
);
|
|
1151
903
|
}
|
|
1152
|
-
meeting.setCallStateForMetrics(callStateForMetrics);
|
|
1153
904
|
|
|
1154
905
|
// Return the existing meeting.
|
|
1155
906
|
return Promise.resolve(meeting);
|
|
@@ -1161,9 +912,6 @@ export default class Meetings extends WebexPlugin {
|
|
|
1161
912
|
* @param {String} destination see create()
|
|
1162
913
|
* @param {String} type see create()
|
|
1163
914
|
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
1164
|
-
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
1165
|
-
* @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics
|
|
1166
|
-
* @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
|
|
1167
915
|
* @returns {Promise} a new meeting instance complete with meeting info and destination
|
|
1168
916
|
* @private
|
|
1169
917
|
* @memberof Meetings
|
|
@@ -1171,10 +919,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
1171
919
|
private async createMeeting(
|
|
1172
920
|
destination: any,
|
|
1173
921
|
type: string = null,
|
|
1174
|
-
useRandomDelayForInfo = false
|
|
1175
|
-
infoExtraParams = {},
|
|
1176
|
-
callStateForMetrics: CallStateForMetrics = undefined,
|
|
1177
|
-
failOnMissingMeetingInfo = false
|
|
922
|
+
useRandomDelayForInfo = false
|
|
1178
923
|
) {
|
|
1179
924
|
const meeting = new Meeting(
|
|
1180
925
|
{
|
|
@@ -1184,11 +929,11 @@ export default class Meetings extends WebexPlugin {
|
|
|
1184
929
|
deviceUrl: this.webex.internal.device.url,
|
|
1185
930
|
// @ts-ignore
|
|
1186
931
|
orgId: this.webex.internal.device.orgId,
|
|
932
|
+
roapSeq: 0,
|
|
1187
933
|
locus: type === _LOCUS_ID_ ? destination : null, // pass the locus object if present
|
|
1188
934
|
meetingInfoProvider: this.meetingInfo,
|
|
1189
935
|
destination,
|
|
1190
936
|
destinationType: type,
|
|
1191
|
-
callStateForMetrics,
|
|
1192
937
|
},
|
|
1193
938
|
{
|
|
1194
939
|
// @ts-ignore
|
|
@@ -1223,38 +968,19 @@ export default class Meetings extends WebexPlugin {
|
|
|
1223
968
|
|
|
1224
969
|
if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
|
|
1225
970
|
meeting.fetchMeetingInfoTimeoutId = setTimeout(
|
|
1226
|
-
() =>
|
|
1227
|
-
meeting.fetchMeetingInfo({
|
|
1228
|
-
extraParams: infoExtraParams,
|
|
1229
|
-
sendCAevents: !!callStateForMetrics?.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
|
|
1230
|
-
}),
|
|
971
|
+
() => meeting.fetchMeetingInfo({}),
|
|
1231
972
|
waitingTime
|
|
1232
973
|
);
|
|
1233
974
|
meeting.parseMeetingInfo(undefined, destination);
|
|
1234
975
|
} else {
|
|
1235
|
-
await meeting.fetchMeetingInfo({
|
|
1236
|
-
extraParams: infoExtraParams,
|
|
1237
|
-
sendCAevents: !!callStateForMetrics?.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
|
|
1238
|
-
});
|
|
976
|
+
await meeting.fetchMeetingInfo({});
|
|
1239
977
|
}
|
|
1240
978
|
} catch (err) {
|
|
1241
|
-
if (
|
|
1242
|
-
|
|
1243
|
-
!(err instanceof PasswordError) &&
|
|
1244
|
-
!(err instanceof PermissionError)
|
|
1245
|
-
) {
|
|
979
|
+
if (!(err instanceof CaptchaError) && !(err instanceof PasswordError)) {
|
|
980
|
+
// if there is no meeting info we assume its a 1:1 call or wireless share
|
|
1246
981
|
LoggerProxy.logger.info(
|
|
1247
982
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
|
1248
983
|
);
|
|
1249
|
-
if (failOnMissingMeetingInfo) {
|
|
1250
|
-
LoggerProxy.logger.info(
|
|
1251
|
-
`Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`
|
|
1252
|
-
);
|
|
1253
|
-
// @ts-ignore
|
|
1254
|
-
this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
|
|
1255
|
-
throw new NoMeetingInfoError();
|
|
1256
|
-
}
|
|
1257
|
-
// if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
|
|
1258
984
|
LoggerProxy.logger.info(
|
|
1259
985
|
'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'
|
|
1260
986
|
);
|
|
@@ -1307,7 +1033,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
1307
1033
|
//
|
|
1308
1034
|
// Our job is to determine the appropriate one
|
|
1309
1035
|
// and its corresponding service so that developers
|
|
1310
|
-
// need only sipURL to get a meeting
|
|
1036
|
+
// need only sipURL or spaceID to get a meeting
|
|
1311
1037
|
// and its ID, but have the option to use createWithType()
|
|
1312
1038
|
// and specify those types to get meetingInfo
|
|
1313
1039
|
}
|
|
@@ -1351,108 +1077,33 @@ export default class Meetings extends WebexPlugin {
|
|
|
1351
1077
|
* @memberof Meetings
|
|
1352
1078
|
*/
|
|
1353
1079
|
public syncMeetings() {
|
|
1354
|
-
return this.request
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
this.handleLocusEvent({
|
|
1364
|
-
locus,
|
|
1365
|
-
locusUrl: locus.url,
|
|
1366
|
-
});
|
|
1080
|
+
return this.request.getActiveMeetings().then((locusArray) => {
|
|
1081
|
+
const activeLocusUrl = [];
|
|
1082
|
+
|
|
1083
|
+
if (locusArray?.loci && locusArray.loci.length > 0) {
|
|
1084
|
+
locusArray.loci.forEach((locus) => {
|
|
1085
|
+
activeLocusUrl.push(locus.url);
|
|
1086
|
+
this.handleLocusEvent({
|
|
1087
|
+
locus,
|
|
1088
|
+
locusUrl: locus.url,
|
|
1367
1089
|
});
|
|
1368
|
-
}
|
|
1369
|
-
|
|
1090
|
+
});
|
|
1091
|
+
}
|
|
1092
|
+
const meetingsCollection = this.meetingCollection.getAll();
|
|
1370
1093
|
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1094
|
+
if (Object.keys(meetingsCollection).length > 0) {
|
|
1095
|
+
// Some time the mercury event is missed after mercury reconnect
|
|
1096
|
+
// if sync returns no locus then clear all the meetings
|
|
1097
|
+
for (const meeting of Object.values(meetingsCollection)) {
|
|
1098
|
+
// @ts-ignore
|
|
1099
|
+
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1100
|
+
// destroy function also uploads logs
|
|
1375
1101
|
// @ts-ignore
|
|
1376
|
-
|
|
1377
|
-
// destroy function also uploads logs
|
|
1378
|
-
// @ts-ignore
|
|
1379
|
-
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1380
|
-
}
|
|
1102
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1381
1103
|
}
|
|
1382
1104
|
}
|
|
1383
|
-
})
|
|
1384
|
-
.catch((error) => {
|
|
1385
|
-
LoggerProxy.logger.error(
|
|
1386
|
-
`Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
|
|
1387
|
-
);
|
|
1388
|
-
throw new Error(error);
|
|
1389
|
-
});
|
|
1390
|
-
}
|
|
1391
|
-
|
|
1392
|
-
/**
|
|
1393
|
-
* sort out locus array for initial creating
|
|
1394
|
-
* @param {Array} loci original locus array
|
|
1395
|
-
* @returns {undefined}
|
|
1396
|
-
* @public
|
|
1397
|
-
* @memberof Meetings
|
|
1398
|
-
*/
|
|
1399
|
-
sortLocusArrayToUpdate(loci: any[]) {
|
|
1400
|
-
const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));
|
|
1401
|
-
const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));
|
|
1402
|
-
this.breakoutLocusForHandleLater = [];
|
|
1403
|
-
const lociToUpdate = [...mainLoci];
|
|
1404
|
-
breakoutLoci.forEach((breakoutLocus) => {
|
|
1405
|
-
const associateMainLocus = mainLoci.find(
|
|
1406
|
-
(mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url
|
|
1407
|
-
);
|
|
1408
|
-
const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({
|
|
1409
|
-
locus: breakoutLocus,
|
|
1410
|
-
locusUrl: breakoutLocus.url,
|
|
1411
|
-
});
|
|
1412
|
-
|
|
1413
|
-
if (associateMainLocus && !existCorrespondingMeeting) {
|
|
1414
|
-
// if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
|
|
1415
|
-
// after meeting create with main locus, then handle the associate breakout locus.
|
|
1416
|
-
// if only handle breakout locus, will miss some date
|
|
1417
|
-
this.breakoutLocusForHandleLater.push(breakoutLocus);
|
|
1418
|
-
} else {
|
|
1419
|
-
lociToUpdate.push(breakoutLocus);
|
|
1420
1105
|
}
|
|
1421
1106
|
});
|
|
1422
|
-
|
|
1423
|
-
return lociToUpdate;
|
|
1424
|
-
}
|
|
1425
|
-
|
|
1426
|
-
/**
|
|
1427
|
-
* check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
|
|
1428
|
-
* @param {Object} newCreatedLocus the locus which just create meeting object of it
|
|
1429
|
-
* @returns {undefined}
|
|
1430
|
-
* @public
|
|
1431
|
-
* @memberof Meetings
|
|
1432
|
-
*/
|
|
1433
|
-
checkHandleBreakoutLocus(newCreatedLocus) {
|
|
1434
|
-
if (
|
|
1435
|
-
!newCreatedLocus ||
|
|
1436
|
-
!this.breakoutLocusForHandleLater ||
|
|
1437
|
-
!this.breakoutLocusForHandleLater.length
|
|
1438
|
-
) {
|
|
1439
|
-
return;
|
|
1440
|
-
}
|
|
1441
|
-
if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {
|
|
1442
|
-
return;
|
|
1443
|
-
}
|
|
1444
|
-
const existIndex = this.breakoutLocusForHandleLater.findIndex(
|
|
1445
|
-
(breakoutLocus) =>
|
|
1446
|
-
breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url
|
|
1447
|
-
);
|
|
1448
|
-
|
|
1449
|
-
if (existIndex < 0) {
|
|
1450
|
-
return;
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
|
|
1454
|
-
this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});
|
|
1455
|
-
this.breakoutLocusForHandleLater.splice(existIndex, 1);
|
|
1456
1107
|
}
|
|
1457
1108
|
|
|
1458
1109
|
/**
|
|
@@ -1474,15 +1125,4 @@ export default class Meetings extends WebexPlugin {
|
|
|
1474
1125
|
getLogger() {
|
|
1475
1126
|
return LoggerProxy.get();
|
|
1476
1127
|
}
|
|
1477
|
-
|
|
1478
|
-
/**
|
|
1479
|
-
* Returns the first meeting it finds that has the webrtc media connection created.
|
|
1480
|
-
* Useful for debugging in the console.
|
|
1481
|
-
*
|
|
1482
|
-
* @private
|
|
1483
|
-
* @returns {Meeting} Meeting object that has a webrtc media connection, else undefined
|
|
1484
|
-
*/
|
|
1485
|
-
getActiveWebrtcMeeting() {
|
|
1486
|
-
return this.meetingCollection.getActiveWebrtcMeeting();
|
|
1487
|
-
}
|
|
1488
1128
|
}
|