@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151
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 +45 -1
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +359 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +193 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +43 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1046 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -21
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +0 -21
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +0 -21
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +0 -21
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +0 -21
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +0 -28
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +0 -21
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +0 -21
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +0 -21
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +0 -21
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -24
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +35 -61
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +7 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +208 -64
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +300 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +78 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +100 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +387 -208
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +90 -126
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +93 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +70 -219
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +74 -198
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -8
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +79 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2685 -3324
- 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 +243 -185
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +296 -342
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +0 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js +16 -26
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +446 -585
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +8 -31
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +261 -242
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +24 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +526 -372
- 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 +21 -40
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +172 -141
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -57
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +101 -69
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +12 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +123 -162
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +120 -85
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +50 -16
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +75 -147
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +170 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +73 -94
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +24 -51
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +3 -38
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +190 -199
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +14 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +18 -24
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +356 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +32 -75
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +129 -136
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +143 -103
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +369 -462
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +144 -94
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +9 -44
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +43 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +124 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +2 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +978 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +315 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +86 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
- package/dist/types/meeting/index.d.ts +1509 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +270 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +75 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +364 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +157 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/config.d.ts +195 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +169 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +104 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/package.json +28 -21
- package/src/annotation/annotation.types.ts +52 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +343 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +163 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +37 -0
- package/src/breakouts/index.ts +921 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/config.ts +5 -7
- package/src/constants.ts +155 -20
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +286 -0
- package/src/index.ts +34 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +310 -21
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +2 -1
- package/src/locus-info/selfUtils.ts +71 -1
- package/src/media/index.ts +70 -142
- package/src/media/properties.ts +41 -104
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +156 -0
- package/src/meeting/index.ts +1730 -1768
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +100 -91
- package/src/meeting/request.type.ts +2 -0
- package/src/meeting/util.ts +421 -421
- package/src/meeting-info/meeting-info-v2.ts +134 -13
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +375 -83
- package/src/meetings/meetings.types.ts +9 -0
- package/src/meetings/request.ts +3 -1
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +40 -0
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +81 -1
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +108 -6
- package/src/members/request.ts +98 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/config.ts +49 -10
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +43 -27
- package/src/multistream/mediaRequestManager.ts +210 -45
- package/src/multistream/receiveSlot.ts +68 -26
- package/src/multistream/receiveSlotManager.ts +61 -38
- package/src/multistream/remoteMedia.ts +29 -3
- package/src/multistream/remoteMediaGroup.ts +61 -2
- package/src/multistream/remoteMediaManager.ts +260 -66
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +75 -25
- package/src/reachability/request.ts +10 -5
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +28 -3
- package/src/reconnection-manager/index.ts +53 -32
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/index.ts +21 -30
- package/src/roap/request.ts +51 -52
- package/src/roap/turnDiscovery.ts +51 -27
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +380 -390
- package/src/statsAnalyzer/mqaUtil.ts +106 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +332 -255
- package/test/integration/spec/space-meeting.js +78 -5
- package/test/integration/spec/transcription.js +1 -1
- package/test/unit/spec/annotation/index.ts +436 -0
- package/test/unit/spec/breakouts/breakout.ts +203 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +77 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +518 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/locus-info/controlsUtils.js +303 -30
- package/test/unit/spec/locus-info/index.js +615 -4
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/selfConstant.js +38 -0
- package/test/unit/spec/locus-info/selfUtils.js +200 -0
- package/test/unit/spec/media/index.ts +118 -22
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
- package/test/unit/spec/meeting/index.js +2394 -1381
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +354 -42
- package/test/unit/spec/meeting/utils.js +268 -156
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +842 -128
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +24 -0
- package/test/unit/spec/member/util.js +384 -32
- package/test/unit/spec/members/index.js +320 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +98 -0
- package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +176 -25
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +46 -13
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +21 -51
- package/test/unit/spec/roap/request.ts +187 -0
- package/test/unit/spec/roap/turnDiscovery.ts +73 -34
- package/test/unit/spec/stats-analyzer/index.js +94 -43
- 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/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -334
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -117
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting/effectsState.ts +0 -211
- package/src/multistream/multistreamMedia.ts +0 -93
- package/test/unit/spec/meeting/effectsState.js +0 -281
package/src/meetings/index.ts
CHANGED
|
@@ -4,7 +4,9 @@ import '@webex/internal-plugin-mercury';
|
|
|
4
4
|
import '@webex/internal-plugin-conversation';
|
|
5
5
|
// @ts-ignore
|
|
6
6
|
import {WebexPlugin} from '@webex/webex-core';
|
|
7
|
-
import {
|
|
7
|
+
import {setLogger} from '@webex/internal-media-core';
|
|
8
|
+
|
|
9
|
+
import * as mediaHelpersModule from '@webex/media-helpers';
|
|
8
10
|
|
|
9
11
|
import 'webrtc-adapter';
|
|
10
12
|
|
|
@@ -40,6 +42,9 @@ import {
|
|
|
40
42
|
MEETING_REMOVED_REASON,
|
|
41
43
|
_CONVERSATION_URL_,
|
|
42
44
|
CONVERSATION_URL,
|
|
45
|
+
MEETINGNUMBER,
|
|
46
|
+
_JOINED_,
|
|
47
|
+
_MOVED_,
|
|
43
48
|
} from '../constants';
|
|
44
49
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
45
50
|
import MeetingInfo from '../meeting-info';
|
|
@@ -53,6 +58,8 @@ import CaptchaError from '../common/errors/captcha-error';
|
|
|
53
58
|
|
|
54
59
|
import MeetingCollection from './collection';
|
|
55
60
|
import MeetingsUtil from './util';
|
|
61
|
+
import PermissionError from '../common/errors/permission';
|
|
62
|
+
import {INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';
|
|
56
63
|
|
|
57
64
|
let mediaLogger;
|
|
58
65
|
|
|
@@ -144,7 +151,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
144
151
|
request: any;
|
|
145
152
|
geoHintInfo: any;
|
|
146
153
|
meetingInfo: any;
|
|
147
|
-
|
|
154
|
+
mediaHelpers: any;
|
|
155
|
+
breakoutLocusForHandleLater: any;
|
|
148
156
|
namespace = MEETINGS;
|
|
149
157
|
|
|
150
158
|
/**
|
|
@@ -156,6 +164,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
156
164
|
constructor(...args) {
|
|
157
165
|
super(...args);
|
|
158
166
|
|
|
167
|
+
/**
|
|
168
|
+
* The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
|
|
169
|
+
* to be able to call media helper functions.
|
|
170
|
+
*
|
|
171
|
+
* @instance
|
|
172
|
+
* @type {Object}
|
|
173
|
+
* @private
|
|
174
|
+
* @memberof Meetings
|
|
175
|
+
*/
|
|
176
|
+
this.mediaHelpers = mediaHelpersModule;
|
|
177
|
+
|
|
159
178
|
/**
|
|
160
179
|
* The Meetings request to interact with server
|
|
161
180
|
* @instance
|
|
@@ -221,34 +240,132 @@ export default class Meetings extends WebexPlugin {
|
|
|
221
240
|
*/
|
|
222
241
|
this.media = {
|
|
223
242
|
getUserMedia: Media.getUserMedia,
|
|
224
|
-
getSupportedDevice: Media.getSupportedDevice,
|
|
225
243
|
};
|
|
226
244
|
|
|
227
245
|
this.onReady();
|
|
228
246
|
}
|
|
229
247
|
|
|
230
248
|
/**
|
|
231
|
-
*
|
|
249
|
+
* check whether you need to handle this main session's locus data or not
|
|
250
|
+
* @param {Object} meeting current meeting data
|
|
251
|
+
* @param {Object} newLocus new locus data
|
|
252
|
+
* @returns {boolean}
|
|
253
|
+
* @private
|
|
254
|
+
* @memberof Meetings
|
|
255
|
+
*/
|
|
256
|
+
private isNeedHandleMainLocus(meeting: any, newLocus: any) {
|
|
257
|
+
const breakoutUrl = newLocus.controls?.breakout?.url;
|
|
258
|
+
const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
|
|
259
|
+
|
|
260
|
+
const isSelfJoined = newLocus?.self?.state === _JOINED_;
|
|
261
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
262
|
+
// @ts-ignore
|
|
263
|
+
const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);
|
|
264
|
+
const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(
|
|
265
|
+
meeting,
|
|
266
|
+
newLocus,
|
|
267
|
+
// @ts-ignore
|
|
268
|
+
this.webex.internal.device.url
|
|
269
|
+
);
|
|
270
|
+
const isBreakoutLocusJoinThisDevice =
|
|
271
|
+
breakoutLocus?.joinedWith?.correlationId &&
|
|
272
|
+
breakoutLocus.joinedWith.correlationId === meeting?.correlationId;
|
|
273
|
+
|
|
274
|
+
if (isSelfJoined && isNewLocusJoinThisDevice) {
|
|
275
|
+
LoggerProxy.logger.log(
|
|
276
|
+
'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'
|
|
277
|
+
);
|
|
278
|
+
if (breakoutLocus?.joinedWith && deviceFromNewLocus) {
|
|
279
|
+
const breakoutReplaceAt =
|
|
280
|
+
breakoutLocus.joinedWith.replaces?.length > 0
|
|
281
|
+
? breakoutLocus.joinedWith.replaces[0].replaceAt
|
|
282
|
+
: '';
|
|
283
|
+
const newLocusReplaceAt =
|
|
284
|
+
deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
|
|
285
|
+
if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
|
|
286
|
+
LoggerProxy.logger.log(
|
|
287
|
+
`Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
if (isBreakoutLocusJoinThisDevice) {
|
|
297
|
+
LoggerProxy.logger.log(
|
|
298
|
+
`Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
if (isSelfMoved && newLocus?.self?.removed) {
|
|
304
|
+
LoggerProxy.logger.log(
|
|
305
|
+
'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status, not need to handle'
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
LoggerProxy.logger.log(
|
|
311
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* check whether you need to handle this locus data or not
|
|
319
|
+
* @param {Object} meeting old locus data
|
|
320
|
+
* @param {Object} newLocus new locus data
|
|
321
|
+
* @returns {boolean}
|
|
322
|
+
* @private
|
|
323
|
+
* @memberof Meetings
|
|
324
|
+
*/
|
|
325
|
+
private isNeedHandleLocusDTO(meeting: any, newLocus: any) {
|
|
326
|
+
if (newLocus) {
|
|
327
|
+
const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);
|
|
328
|
+
const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;
|
|
329
|
+
if (!meeting) {
|
|
330
|
+
if (isNewLocusAsBreakout) {
|
|
331
|
+
LoggerProxy.logger.log(
|
|
332
|
+
`Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`
|
|
333
|
+
);
|
|
334
|
+
|
|
335
|
+
return newLocus.self?.state === _JOINED_;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
339
|
+
}
|
|
340
|
+
if (!isNewLocusAsBreakout) {
|
|
341
|
+
return this.isNeedHandleMainLocus(meeting, newLocus);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
return !isSelfMoved;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return true;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* get corresponding meeting object by locus data
|
|
232
352
|
* @param {Object} data a locus event
|
|
233
353
|
* @param {String} data.locusUrl
|
|
234
354
|
* @param {Object} data.locus
|
|
235
|
-
* @
|
|
236
|
-
* @param {String} data.eventType
|
|
237
|
-
* @returns {undefined}
|
|
355
|
+
* @returns {Object}
|
|
238
356
|
* @private
|
|
239
357
|
* @memberof Meetings
|
|
240
358
|
*/
|
|
241
|
-
|
|
242
|
-
let meeting = null;
|
|
243
|
-
|
|
359
|
+
getCorrespondingMeetingByLocus(data) {
|
|
244
360
|
// getting meeting by correlationId. This will happen for the new event
|
|
245
361
|
// Either the locus
|
|
246
362
|
// TODO : Add check for the callBack Address
|
|
247
|
-
|
|
363
|
+
return (
|
|
248
364
|
this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||
|
|
249
365
|
// @ts-ignore
|
|
250
366
|
this.meetingCollection.getByKey(
|
|
251
367
|
CORRELATION_ID,
|
|
368
|
+
// @ts-ignore
|
|
252
369
|
MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)
|
|
253
370
|
) ||
|
|
254
371
|
this.meetingCollection.getByKey(
|
|
@@ -259,7 +376,24 @@ export default class Meetings extends WebexPlugin {
|
|
|
259
376
|
) ||
|
|
260
377
|
(data.locus.info?.isUnifiedSpaceMeeting
|
|
261
378
|
? undefined
|
|
262
|
-
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl))
|
|
379
|
+
: this.meetingCollection.getByKey(CONVERSATION_URL, data.locus.conversationUrl)) ||
|
|
380
|
+
this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* handle locus events and takes meeting actions with them as they come in
|
|
386
|
+
* @param {Object} data a locus event
|
|
387
|
+
* @param {String} data.locusUrl
|
|
388
|
+
* @param {Object} data.locus
|
|
389
|
+
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
390
|
+
* @param {String} data.eventType
|
|
391
|
+
* @returns {undefined}
|
|
392
|
+
* @private
|
|
393
|
+
* @memberof Meetings
|
|
394
|
+
*/
|
|
395
|
+
private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {
|
|
396
|
+
let meeting = this.getCorrespondingMeetingByLocus(data);
|
|
263
397
|
|
|
264
398
|
// Special case when locus has got replaced, This only happend once if a replace locus exists
|
|
265
399
|
// https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
|
|
@@ -272,6 +406,16 @@ export default class Meetings extends WebexPlugin {
|
|
|
272
406
|
);
|
|
273
407
|
}
|
|
274
408
|
|
|
409
|
+
if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {
|
|
410
|
+
meeting.locusInfo.updateMainSessionLocusCache(data.locus);
|
|
411
|
+
}
|
|
412
|
+
if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
|
|
413
|
+
LoggerProxy.logger.log(
|
|
414
|
+
`Meetings:index#handleLocusEvent --> doesn't need to process locus event`
|
|
415
|
+
);
|
|
416
|
+
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
275
419
|
if (!meeting) {
|
|
276
420
|
// TODO: create meeting when we get a meeting object
|
|
277
421
|
// const checkForEnded = (locus) => {
|
|
@@ -328,6 +472,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
328
472
|
|
|
329
473
|
// It's a new meeting so initialize the locus data
|
|
330
474
|
meeting.locusInfo.initialSetup(data.locus);
|
|
475
|
+
this.checkHandleBreakoutLocus(data.locus);
|
|
331
476
|
})
|
|
332
477
|
.catch((e) => {
|
|
333
478
|
LoggerProxy.logger.error(e);
|
|
@@ -460,7 +605,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
460
605
|
LoggerProxy.set(this.webex.logger);
|
|
461
606
|
|
|
462
607
|
mediaLogger = new MediaLogger();
|
|
463
|
-
|
|
608
|
+
setLogger(mediaLogger);
|
|
464
609
|
|
|
465
610
|
/**
|
|
466
611
|
* The MeetingInfo object to interact with server
|
|
@@ -471,11 +616,14 @@ export default class Meetings extends WebexPlugin {
|
|
|
471
616
|
*/
|
|
472
617
|
// @ts-ignore
|
|
473
618
|
this.meetingInfo = this.config.experimental.enableUnifiedMeetings
|
|
474
|
-
?
|
|
475
|
-
|
|
619
|
+
? // @ts-ignore
|
|
620
|
+
new MeetingInfoV2(this.webex)
|
|
621
|
+
: // @ts-ignore
|
|
622
|
+
new MeetingInfo(this.webex);
|
|
476
623
|
// @ts-ignore
|
|
477
624
|
this.personalMeetingRoom = new PersonalMeetingRoom(
|
|
478
625
|
{meetingInfo: this.meetingInfo},
|
|
626
|
+
// @ts-ignore
|
|
479
627
|
{parent: this.webex}
|
|
480
628
|
);
|
|
481
629
|
|
|
@@ -585,6 +733,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
585
733
|
// @ts-ignore
|
|
586
734
|
.then(() =>
|
|
587
735
|
LoggerProxy.logger.info(
|
|
736
|
+
// @ts-ignore
|
|
588
737
|
`Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`
|
|
589
738
|
)
|
|
590
739
|
)
|
|
@@ -638,8 +787,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
638
787
|
|
|
639
788
|
this.stopListeningForEvents();
|
|
640
789
|
|
|
641
|
-
// @ts-ignore
|
|
642
790
|
return (
|
|
791
|
+
// @ts-ignore
|
|
643
792
|
this.webex.internal.mercury
|
|
644
793
|
.disconnect()
|
|
645
794
|
// @ts-ignore
|
|
@@ -658,6 +807,36 @@ export default class Meetings extends WebexPlugin {
|
|
|
658
807
|
);
|
|
659
808
|
}
|
|
660
809
|
|
|
810
|
+
/**
|
|
811
|
+
* Creates a noise reduction effect
|
|
812
|
+
*
|
|
813
|
+
* @param {INoiseReductionEffect} options optional custom effect options
|
|
814
|
+
* @returns {Promise<effect>} noise reduction effect.
|
|
815
|
+
* @public
|
|
816
|
+
* @memberof Meetings
|
|
817
|
+
*/
|
|
818
|
+
createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {
|
|
819
|
+
// @ts-ignore
|
|
820
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
821
|
+
|
|
822
|
+
return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});
|
|
823
|
+
};
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* Creates a virtual background effect
|
|
827
|
+
*
|
|
828
|
+
* @param {IVirtualBackgroundEffect} options optional custom effect options
|
|
829
|
+
* @returns {Promise<effect>} virtual background effect.
|
|
830
|
+
* @public
|
|
831
|
+
* @memberof Meetings
|
|
832
|
+
*/
|
|
833
|
+
createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {
|
|
834
|
+
// @ts-ignore
|
|
835
|
+
const authToken = this.webex.credentials.supertoken.access_token;
|
|
836
|
+
|
|
837
|
+
return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});
|
|
838
|
+
};
|
|
839
|
+
|
|
661
840
|
/**
|
|
662
841
|
* Uploads logs to the webex services for tracking
|
|
663
842
|
* @param {Object} [options={}]
|
|
@@ -792,6 +971,29 @@ export default class Meetings extends WebexPlugin {
|
|
|
792
971
|
if (res) {
|
|
793
972
|
this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);
|
|
794
973
|
}
|
|
974
|
+
|
|
975
|
+
// fall back to getting the preferred site from the user information
|
|
976
|
+
if (!this.preferredWebexSite) {
|
|
977
|
+
// @ts-ignore
|
|
978
|
+
return this.webex.internal.user
|
|
979
|
+
.get()
|
|
980
|
+
.then((user) => {
|
|
981
|
+
const preferredWebexSite =
|
|
982
|
+
user?.userPreferences?.userPreferencesItems?.preferredWebExSite;
|
|
983
|
+
if (preferredWebexSite) {
|
|
984
|
+
this.preferredWebexSite = preferredWebexSite;
|
|
985
|
+
} else {
|
|
986
|
+
throw new Error('site not found');
|
|
987
|
+
}
|
|
988
|
+
})
|
|
989
|
+
.catch(() => {
|
|
990
|
+
LoggerProxy.logger.error(
|
|
991
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
992
|
+
);
|
|
993
|
+
});
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
return Promise.resolve();
|
|
795
997
|
});
|
|
796
998
|
}
|
|
797
999
|
|
|
@@ -836,11 +1038,17 @@ export default class Meetings extends WebexPlugin {
|
|
|
836
1038
|
* @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
|
|
837
1039
|
* @param {string} [type] - the optional specified type, such as locusId
|
|
838
1040
|
* @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
|
|
1041
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
839
1042
|
* @returns {Promise<Meeting>} A new Meeting.
|
|
840
1043
|
* @public
|
|
841
1044
|
* @memberof Meetings
|
|
842
1045
|
*/
|
|
843
|
-
public create(
|
|
1046
|
+
public create(
|
|
1047
|
+
destination: string,
|
|
1048
|
+
type: string = null,
|
|
1049
|
+
useRandomDelayForInfo = false,
|
|
1050
|
+
infoExtraParams = {}
|
|
1051
|
+
) {
|
|
844
1052
|
// TODO: type should be from a dictionary
|
|
845
1053
|
|
|
846
1054
|
// Validate meeting information based on the provided destination and
|
|
@@ -885,48 +1093,51 @@ export default class Meetings extends WebexPlugin {
|
|
|
885
1093
|
// Validate if a meeting was found.
|
|
886
1094
|
if (!meeting) {
|
|
887
1095
|
// Create a meeting based on the normalized destination and type.
|
|
888
|
-
return this.createMeeting(
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
1096
|
+
return this.createMeeting(
|
|
1097
|
+
targetDest,
|
|
1098
|
+
type,
|
|
1099
|
+
useRandomDelayForInfo,
|
|
1100
|
+
infoExtraParams
|
|
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
|
+
correlationId: createdMeeting.correlationId,
|
|
1111
|
+
feedbackId: createdMeeting.correlationId,
|
|
1112
|
+
locusId: createdMeeting.locusId,
|
|
1113
|
+
meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,
|
|
1114
|
+
}).then(() => this.destroy(createdMeeting, payload.reason));
|
|
1115
|
+
} else {
|
|
1116
|
+
this.destroy(createdMeeting, payload.reason);
|
|
1117
|
+
}
|
|
1118
|
+
});
|
|
1119
|
+
|
|
1120
|
+
createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {
|
|
1121
|
+
// @ts-ignore
|
|
1122
|
+
if (this.config.autoUploadLogs) {
|
|
1123
|
+
this.uploadLogs({
|
|
1124
|
+
callStart: meetingInstance?.locusInfo?.fullState?.lastActive,
|
|
1125
|
+
correlationId: meetingInstance.correlationId,
|
|
1126
|
+
feedbackId: meetingInstance.correlationId,
|
|
1127
|
+
locusId: meetingInstance.locusId,
|
|
1128
|
+
meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
});
|
|
1132
|
+
} else {
|
|
1133
|
+
LoggerProxy.logger.error(
|
|
1134
|
+
`Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`
|
|
1135
|
+
);
|
|
928
1136
|
}
|
|
929
|
-
|
|
1137
|
+
|
|
1138
|
+
// Return the newly created meeting.
|
|
1139
|
+
return Promise.resolve(createdMeeting);
|
|
1140
|
+
});
|
|
930
1141
|
}
|
|
931
1142
|
|
|
932
1143
|
// Return the existing meeting.
|
|
@@ -939,6 +1150,7 @@ export default class Meetings extends WebexPlugin {
|
|
|
939
1150
|
* @param {String} destination see create()
|
|
940
1151
|
* @param {String} type see create()
|
|
941
1152
|
* @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
|
|
1153
|
+
* @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
|
|
942
1154
|
* @returns {Promise} a new meeting instance complete with meeting info and destination
|
|
943
1155
|
* @private
|
|
944
1156
|
* @memberof Meetings
|
|
@@ -946,7 +1158,8 @@ export default class Meetings extends WebexPlugin {
|
|
|
946
1158
|
private async createMeeting(
|
|
947
1159
|
destination: any,
|
|
948
1160
|
type: string = null,
|
|
949
|
-
useRandomDelayForInfo = false
|
|
1161
|
+
useRandomDelayForInfo = false,
|
|
1162
|
+
infoExtraParams = {}
|
|
950
1163
|
) {
|
|
951
1164
|
const meeting = new Meeting(
|
|
952
1165
|
{
|
|
@@ -994,15 +1207,19 @@ export default class Meetings extends WebexPlugin {
|
|
|
994
1207
|
|
|
995
1208
|
if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {
|
|
996
1209
|
meeting.fetchMeetingInfoTimeoutId = setTimeout(
|
|
997
|
-
() => meeting.fetchMeetingInfo({}),
|
|
1210
|
+
() => meeting.fetchMeetingInfo({extraParams: infoExtraParams}),
|
|
998
1211
|
waitingTime
|
|
999
1212
|
);
|
|
1000
1213
|
meeting.parseMeetingInfo(undefined, destination);
|
|
1001
1214
|
} else {
|
|
1002
|
-
await meeting.fetchMeetingInfo({});
|
|
1215
|
+
await meeting.fetchMeetingInfo({extraParams: infoExtraParams});
|
|
1003
1216
|
}
|
|
1004
1217
|
} catch (err) {
|
|
1005
|
-
if (
|
|
1218
|
+
if (
|
|
1219
|
+
!(err instanceof CaptchaError) &&
|
|
1220
|
+
!(err instanceof PasswordError) &&
|
|
1221
|
+
!(err instanceof PermissionError)
|
|
1222
|
+
) {
|
|
1006
1223
|
// if there is no meeting info we assume its a 1:1 call or wireless share
|
|
1007
1224
|
LoggerProxy.logger.info(
|
|
1008
1225
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
|
@@ -1103,33 +1320,108 @@ export default class Meetings extends WebexPlugin {
|
|
|
1103
1320
|
* @memberof Meetings
|
|
1104
1321
|
*/
|
|
1105
1322
|
public syncMeetings() {
|
|
1106
|
-
return this.request
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
this.
|
|
1113
|
-
|
|
1114
|
-
|
|
1323
|
+
return this.request
|
|
1324
|
+
.getActiveMeetings()
|
|
1325
|
+
.then((locusArray) => {
|
|
1326
|
+
const activeLocusUrl = [];
|
|
1327
|
+
|
|
1328
|
+
if (locusArray?.loci && locusArray.loci.length > 0) {
|
|
1329
|
+
const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);
|
|
1330
|
+
lociToUpdate.forEach((locus) => {
|
|
1331
|
+
activeLocusUrl.push(locus.url);
|
|
1332
|
+
this.handleLocusEvent({
|
|
1333
|
+
locus,
|
|
1334
|
+
locusUrl: locus.url,
|
|
1335
|
+
});
|
|
1115
1336
|
});
|
|
1116
|
-
}
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
for (const meeting of Object.values(meetingsCollection)) {
|
|
1124
|
-
// @ts-ignore
|
|
1125
|
-
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1126
|
-
// destroy function also uploads logs
|
|
1337
|
+
}
|
|
1338
|
+
const meetingsCollection = this.meetingCollection.getAll();
|
|
1339
|
+
|
|
1340
|
+
if (Object.keys(meetingsCollection).length > 0) {
|
|
1341
|
+
// Some time the mercury event is missed after mercury reconnect
|
|
1342
|
+
// if sync returns no locus then clear all the meetings
|
|
1343
|
+
for (const meeting of Object.values(meetingsCollection)) {
|
|
1127
1344
|
// @ts-ignore
|
|
1128
|
-
|
|
1345
|
+
if (!activeLocusUrl.includes(meeting.locusUrl)) {
|
|
1346
|
+
// destroy function also uploads logs
|
|
1347
|
+
// @ts-ignore
|
|
1348
|
+
this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
|
|
1349
|
+
}
|
|
1129
1350
|
}
|
|
1130
1351
|
}
|
|
1352
|
+
})
|
|
1353
|
+
.catch((error) => {
|
|
1354
|
+
LoggerProxy.logger.error(
|
|
1355
|
+
`Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
|
|
1356
|
+
);
|
|
1357
|
+
throw new Error(error);
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
/**
|
|
1362
|
+
* sort out locus array for initial creating
|
|
1363
|
+
* @param {Array} loci original locus array
|
|
1364
|
+
* @returns {undefined}
|
|
1365
|
+
* @public
|
|
1366
|
+
* @memberof Meetings
|
|
1367
|
+
*/
|
|
1368
|
+
sortLocusArrayToUpdate(loci: any[]) {
|
|
1369
|
+
const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));
|
|
1370
|
+
const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));
|
|
1371
|
+
this.breakoutLocusForHandleLater = [];
|
|
1372
|
+
const lociToUpdate = [...mainLoci];
|
|
1373
|
+
breakoutLoci.forEach((breakoutLocus) => {
|
|
1374
|
+
const associateMainLocus = mainLoci.find(
|
|
1375
|
+
(mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url
|
|
1376
|
+
);
|
|
1377
|
+
const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({
|
|
1378
|
+
locus: breakoutLocus,
|
|
1379
|
+
locusUrl: breakoutLocus.url,
|
|
1380
|
+
});
|
|
1381
|
+
|
|
1382
|
+
if (associateMainLocus && !existCorrespondingMeeting) {
|
|
1383
|
+
// if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
|
|
1384
|
+
// after meeting create with main locus, then handle the associate breakout locus.
|
|
1385
|
+
// if only handle breakout locus, will miss some date
|
|
1386
|
+
this.breakoutLocusForHandleLater.push(breakoutLocus);
|
|
1387
|
+
} else {
|
|
1388
|
+
lociToUpdate.push(breakoutLocus);
|
|
1131
1389
|
}
|
|
1132
1390
|
});
|
|
1391
|
+
|
|
1392
|
+
return lociToUpdate;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
/**
|
|
1396
|
+
* check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
|
|
1397
|
+
* @param {Object} newCreatedLocus the locus which just create meeting object of it
|
|
1398
|
+
* @returns {undefined}
|
|
1399
|
+
* @public
|
|
1400
|
+
* @memberof Meetings
|
|
1401
|
+
*/
|
|
1402
|
+
checkHandleBreakoutLocus(newCreatedLocus) {
|
|
1403
|
+
if (
|
|
1404
|
+
!newCreatedLocus ||
|
|
1405
|
+
!this.breakoutLocusForHandleLater ||
|
|
1406
|
+
!this.breakoutLocusForHandleLater.length
|
|
1407
|
+
) {
|
|
1408
|
+
return;
|
|
1409
|
+
}
|
|
1410
|
+
if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {
|
|
1411
|
+
return;
|
|
1412
|
+
}
|
|
1413
|
+
const existIndex = this.breakoutLocusForHandleLater.findIndex(
|
|
1414
|
+
(breakoutLocus) =>
|
|
1415
|
+
breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url
|
|
1416
|
+
);
|
|
1417
|
+
|
|
1418
|
+
if (existIndex < 0) {
|
|
1419
|
+
return;
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
|
|
1423
|
+
this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});
|
|
1424
|
+
this.breakoutLocusForHandleLater.splice(existIndex, 1);
|
|
1133
1425
|
}
|
|
1134
1426
|
|
|
1135
1427
|
/**
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
NoiseReductionEffectOptions,
|
|
3
|
+
VirtualBackgroundEffectOptions,
|
|
4
|
+
} from '@webex/media-helpers';
|
|
5
|
+
|
|
6
|
+
type INoiseReductionEffect = Omit<NoiseReductionEffectOptions, 'authToken'>;
|
|
7
|
+
type IVirtualBackgroundEffect = Omit<VirtualBackgroundEffectOptions, 'authToken'>;
|
|
8
|
+
|
|
9
|
+
export type {INoiseReductionEffect, IVirtualBackgroundEffect};
|
package/src/meetings/request.ts
CHANGED
|
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
23
23
|
LoggerProxy.logger.error(
|
|
24
24
|
`Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
|
|
25
25
|
);
|
|
26
|
+
throw new Error(error);
|
|
26
27
|
});
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -53,9 +54,9 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
53
54
|
*/
|
|
54
55
|
determineRedirections(responseBody: any) {
|
|
55
56
|
if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {
|
|
56
|
-
// @ts-ignore
|
|
57
57
|
return Promise.all(
|
|
58
58
|
responseBody.remoteLocusClusterUrls.map((url) =>
|
|
59
|
+
// @ts-ignore
|
|
59
60
|
this.request({
|
|
60
61
|
method: HTTP_VERBS.GET,
|
|
61
62
|
url,
|
|
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
|
71
72
|
LoggerProxy.logger.error(
|
|
72
73
|
`Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
|
|
73
74
|
);
|
|
75
|
+
throw new Error(error);
|
|
74
76
|
})
|
|
75
77
|
)
|
|
76
78
|
).then(() => Promise.resolve(responseBody));
|