@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211
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 -7
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +114 -14
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +841 -19
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/errors/webex-errors.js +3 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +3 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.js +179 -30
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +106 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +359 -64
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +43 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +219 -63
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +48 -135
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +29 -90
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2770 -2547
- 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 +229 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +199 -193
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +532 -414
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +171 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +20 -5
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +22 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +357 -66
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +88 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +49 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +121 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +86 -5
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +316 -233
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +49 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +52 -34
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +173 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +72 -27
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +12 -5
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +196 -155
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +21 -29
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +110 -89
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +93 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +326 -311
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +90 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1020 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
- package/dist/types/meeting/index.d.ts +1482 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -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 +79 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +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 +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +44 -14
- package/src/breakouts/breakout.ts +87 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +710 -10
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/webex-errors.ts +6 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +2 -7
- package/src/constants.ts +165 -21
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +383 -61
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +48 -0
- package/src/locus-info/parser.ts +224 -39
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +87 -140
- package/src/media/properties.ts +49 -90
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +179 -3
- package/src/meeting/index.ts +2099 -2083
- package/src/meeting/locusMediaRequest.ts +311 -0
- package/src/meeting/muteState.ts +228 -132
- package/src/meeting/request.ts +105 -115
- package/src/meeting/util.ts +511 -397
- package/src/meeting-info/index.ts +54 -8
- package/src/meeting-info/meeting-info-v2.ts +148 -14
- package/src/meeting-info/utilv2.ts +13 -3
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +392 -84
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +103 -4
- package/src/member/index.ts +49 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +127 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +107 -6
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +319 -240
- package/src/metrics/constants.ts +2 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +55 -18
- package/src/multistream/receiveSlotManager.ts +46 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +113 -32
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +62 -15
- package/src/reachability/request.ts +10 -5
- package/src/reconnection-manager/index.ts +68 -43
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +21 -30
- package/src/roap/request.ts +101 -95
- package/src/roap/turnDiscovery.ts +47 -25
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +376 -386
- package/src/statsAnalyzer/mqaUtil.ts +100 -99
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +336 -259
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +142 -24
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1545 -48
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1169 -36
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +62 -22
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +138 -28
- package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
- package/test/unit/spec/meeting/index.js +3573 -1663
- package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
- package/test/unit/spec/meeting/muteState.js +370 -208
- package/test/unit/spec/meeting/request.js +339 -44
- package/test/unit/spec/meeting/utils.js +456 -53
- package/test/unit/spec/meeting-info/index.js +181 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +14 -0
- package/test/unit/spec/meetings/index.js +867 -125
- package/test/unit/spec/meetings/utils.js +206 -2
- package/test/unit/spec/member/index.js +58 -4
- package/test/unit/spec/member/util.js +479 -35
- package/test/unit/spec/members/index.js +319 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +184 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +72 -13
- package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +125 -8
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +59 -6
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +26 -51
- package/test/unit/spec/roap/request.ts +196 -85
- package/test/unit/spec/roap/turnDiscovery.ts +30 -7
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- package/test/unit/spec/stats-analyzer/index.js +92 -41
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +6 -3
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -110
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/src/multistream/multistreamMedia.ts +0 -97
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -6,9 +6,10 @@ import {skipInNode} from '@webex/test-helper-mocha';
|
|
|
6
6
|
import sinon from 'sinon';
|
|
7
7
|
|
|
8
8
|
import BrowserDetection from '@webex/plugin-meetings/dist/common/browser-detection';
|
|
9
|
+
import {createCameraTrack, createDisplayTrack, createMicrophoneTrack, LocalTrackEvents} from '@webex/plugin-meetings';
|
|
9
10
|
|
|
10
|
-
import DEFAULT_RESOLUTIONS from '../../../src/config';
|
|
11
11
|
import testUtils from '../../utils/testUtils';
|
|
12
|
+
import integrationTestUtils from '../../utils/integrationTestUtils';
|
|
12
13
|
|
|
13
14
|
require('dotenv').config();
|
|
14
15
|
|
|
@@ -18,6 +19,42 @@ const {isBrowser} = BrowserDetection();
|
|
|
18
19
|
|
|
19
20
|
let userSet, alice, bob, chris, enumerateSpy, channelUrlA, channelUrlB;
|
|
20
21
|
|
|
22
|
+
const localTracks = {
|
|
23
|
+
alice: {
|
|
24
|
+
microphone: undefined,
|
|
25
|
+
camera: undefined,
|
|
26
|
+
screenShare: {
|
|
27
|
+
video: undefined,
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
bob: {
|
|
31
|
+
microphone: undefined,
|
|
32
|
+
camera: undefined,
|
|
33
|
+
screenShare: {
|
|
34
|
+
video: undefined,
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
chris: {
|
|
38
|
+
microphone: undefined,
|
|
39
|
+
camera: undefined,
|
|
40
|
+
screenShare: {
|
|
41
|
+
video: undefined,
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
const waitForPublished = (track, expectedPublished, description) => {
|
|
48
|
+
return testUtils.waitForEvents([{
|
|
49
|
+
scope: track,
|
|
50
|
+
event: LocalTrackEvents.PublishedStateUpdate,
|
|
51
|
+
match: ({isPublished}) => {
|
|
52
|
+
console.log(`${description} is now ${isPublished ? 'published': 'not published'}`);
|
|
53
|
+
return (isPublished === expectedPublished);
|
|
54
|
+
}
|
|
55
|
+
}]);
|
|
56
|
+
};
|
|
57
|
+
|
|
21
58
|
skipInNode(describe)('plugin-meetings', () => {
|
|
22
59
|
describe('journey', () => {
|
|
23
60
|
before(() =>
|
|
@@ -274,6 +311,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
274
311
|
);
|
|
275
312
|
});
|
|
276
313
|
|
|
314
|
+
it('alice creates local microphone and camera tracks', async () => {
|
|
315
|
+
localTracks.alice.microphone = await createMicrophoneTrack();
|
|
316
|
+
localTracks.alice.camera = await createCameraTrack();
|
|
317
|
+
});
|
|
318
|
+
|
|
277
319
|
it('alice dials bob and adds media', () =>
|
|
278
320
|
Promise.all([
|
|
279
321
|
testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
|
|
@@ -301,7 +343,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
301
343
|
})
|
|
302
344
|
.then(() =>
|
|
303
345
|
Promise.all([
|
|
304
|
-
|
|
346
|
+
integrationTestUtils.addMedia(alice, {microphone: localTracks.alice.microphone, camera: localTracks.alice.camera}),
|
|
305
347
|
testUtils.waitForEvents([
|
|
306
348
|
{scope: alice.meeting, event: 'meeting:media:local:start', user: alice},
|
|
307
349
|
]),
|
|
@@ -328,9 +370,14 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
328
370
|
]);
|
|
329
371
|
});
|
|
330
372
|
|
|
373
|
+
it('bob creates local microphone and camera tracks', async () => {
|
|
374
|
+
localTracks.bob.microphone = await createMicrophoneTrack();
|
|
375
|
+
localTracks.bob.camera = await createCameraTrack();
|
|
376
|
+
});
|
|
377
|
+
|
|
331
378
|
it('bob adds media to the meeting', () =>
|
|
332
379
|
Promise.all([
|
|
333
|
-
|
|
380
|
+
integrationTestUtils.addMedia(bob, {microphone: localTracks.bob.microphone, camera: localTracks.bob.camera}),
|
|
334
381
|
testUtils
|
|
335
382
|
.waitForEvents([
|
|
336
383
|
{scope: bob.meeting, event: 'meeting:media:local:start', user: bob},
|
|
@@ -372,133 +419,146 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
372
419
|
assert.exists(alice.meeting.members.selfId, 'selfId not present');
|
|
373
420
|
});
|
|
374
421
|
|
|
375
|
-
it('alice Audio Mute ', () => {
|
|
422
|
+
it('alice Audio Mute ', async () => {
|
|
376
423
|
const checkEvent = (event) =>
|
|
377
424
|
!!event.delta.updated.find(
|
|
378
425
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
379
426
|
);
|
|
380
427
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
428
|
+
await testUtils.waitUntil(2000);
|
|
429
|
+
|
|
430
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
431
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
432
|
+
]);
|
|
433
|
+
|
|
434
|
+
localTracks.alice.microphone.setMuted(true);
|
|
435
|
+
|
|
436
|
+
await membersUpdate;
|
|
437
|
+
|
|
438
|
+
assert.equal(localTracks.alice.microphone.muted, true);
|
|
390
439
|
});
|
|
391
440
|
|
|
392
|
-
it('alice Audio unMute ', () => {
|
|
441
|
+
it('alice Audio unMute ', async () => {
|
|
393
442
|
const checkEvent = (event) =>
|
|
394
443
|
!!event.delta.updated.find(
|
|
395
444
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
396
445
|
);
|
|
397
446
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
447
|
+
await testUtils.waitUntil(2000);
|
|
448
|
+
|
|
449
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
450
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
451
|
+
]);
|
|
452
|
+
|
|
453
|
+
localTracks.alice.microphone.setMuted(false);
|
|
454
|
+
|
|
455
|
+
await membersUpdate;
|
|
456
|
+
|
|
457
|
+
assert.equal(localTracks.alice.microphone.muted, false);
|
|
407
458
|
});
|
|
408
459
|
|
|
409
|
-
it('alice
|
|
460
|
+
it('alice video mute', async () => {
|
|
410
461
|
const checkEvent = (event) =>
|
|
411
462
|
!!event.delta.updated.find(
|
|
412
463
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true
|
|
413
464
|
);
|
|
414
465
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
466
|
+
await testUtils.waitUntil(2000);
|
|
467
|
+
|
|
468
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
469
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
470
|
+
]);
|
|
471
|
+
|
|
472
|
+
localTracks.alice.camera.setMuted(true);
|
|
473
|
+
|
|
474
|
+
await membersUpdate;
|
|
475
|
+
|
|
476
|
+
assert.equal(localTracks.alice.camera.muted, true);
|
|
424
477
|
});
|
|
425
478
|
|
|
426
|
-
it('alice video
|
|
479
|
+
it('alice video unmute', async () => {
|
|
427
480
|
const checkEvent = (event) =>
|
|
428
481
|
!!event.delta.updated.find(
|
|
429
482
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false
|
|
430
483
|
);
|
|
431
484
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
485
|
+
await testUtils.waitUntil(2000);
|
|
486
|
+
|
|
487
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
488
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
489
|
+
]);
|
|
490
|
+
|
|
491
|
+
localTracks.alice.camera.setMuted(false);
|
|
492
|
+
|
|
493
|
+
await membersUpdate;
|
|
494
|
+
|
|
495
|
+
assert.equal(localTracks.alice.camera.muted, false);
|
|
441
496
|
});
|
|
442
497
|
|
|
443
|
-
it('alice update Audio', () => {
|
|
498
|
+
it('alice update Audio', async () => {
|
|
444
499
|
const oldVideoTrackId = alice.meeting.mediaProperties.videoTrack.id;
|
|
445
500
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
501
|
+
const oldMicrophoneTrack = localTracks.alice.microphone;
|
|
502
|
+
const newMicrophoneTrack = await createMicrophoneTrack();
|
|
503
|
+
|
|
504
|
+
assert.equal(oldMicrophoneTrack.published, true);
|
|
505
|
+
assert.notEqual(oldMicrophoneTrack.id, newMicrophoneTrack.id);
|
|
506
|
+
|
|
507
|
+
const oldTrackUnpublished = waitForPublished(oldMicrophoneTrack, false, "Alice AUDIO: old microphone track");
|
|
508
|
+
const newTrackPublished = waitForPublished(newMicrophoneTrack, true, "Alice AUDIO: new microphone track");
|
|
509
|
+
|
|
510
|
+
await testUtils.delayedPromise(
|
|
511
|
+
alice.meeting
|
|
512
|
+
.publishTracks({
|
|
513
|
+
microphone: newMicrophoneTrack,
|
|
514
|
+
})
|
|
515
|
+
.then(() => {
|
|
516
|
+
console.log('Alice AUDIO: new track on meeting object:', alice.meeting.mediaProperties.audioTrack);
|
|
517
|
+
assert.equal(
|
|
518
|
+
alice.meeting.mediaProperties.audioTrack.id,
|
|
519
|
+
newMicrophoneTrack.id
|
|
520
|
+
);
|
|
521
|
+
assert.equal(alice.meeting.mediaProperties.videoTrack.id, oldVideoTrackId);
|
|
522
|
+
})
|
|
523
|
+
);
|
|
524
|
+
|
|
525
|
+
await oldTrackUnpublished;
|
|
526
|
+
await newTrackPublished;
|
|
527
|
+
|
|
528
|
+
localTracks.alice.microphone = newMicrophoneTrack;
|
|
472
529
|
});
|
|
473
530
|
|
|
474
|
-
it('alice update video', () => {
|
|
531
|
+
it('alice update video', async () => {
|
|
475
532
|
const oldAudioTrackId = alice.meeting.mediaProperties.audioTrack.id;
|
|
476
533
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
534
|
+
const oldCameraTrack = localTracks.alice.camera;
|
|
535
|
+
const newCameraTrack = await createCameraTrack();
|
|
536
|
+
|
|
537
|
+
assert.equal(oldCameraTrack.published, true);
|
|
538
|
+
assert.notEqual(oldCameraTrack.id, newCameraTrack.id);
|
|
539
|
+
|
|
540
|
+
const oldTrackUnpublished = waitForPublished(oldCameraTrack, false, "Alice VIDEO: old camera track");
|
|
541
|
+
const newTrackPublished = waitForPublished(newCameraTrack, true, "Alice VIDEO: new camera track");
|
|
542
|
+
|
|
543
|
+
await testUtils.delayedPromise(
|
|
544
|
+
alice.meeting
|
|
545
|
+
.publishTracks({
|
|
546
|
+
camera: newCameraTrack,
|
|
547
|
+
})
|
|
548
|
+
.then(() => {
|
|
549
|
+
console.log('Alice VIDEO: new track on meeting:', alice.meeting.mediaProperties.videoTrack);
|
|
550
|
+
assert.equal(
|
|
551
|
+
alice.meeting.mediaProperties.videoTrack.id,
|
|
552
|
+
newCameraTrack.id
|
|
553
|
+
);
|
|
554
|
+
assert.equal(alice.meeting.mediaProperties.audioTrack.id, oldAudioTrackId);
|
|
555
|
+
})
|
|
556
|
+
);
|
|
557
|
+
|
|
558
|
+
await oldTrackUnpublished;
|
|
559
|
+
await newTrackPublished;
|
|
560
|
+
|
|
561
|
+
localTracks.alice.camera = newCameraTrack;
|
|
502
562
|
});
|
|
503
563
|
|
|
504
564
|
it('alice mutes bob', () =>
|
|
@@ -522,27 +582,25 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
522
582
|
}),
|
|
523
583
|
]));
|
|
524
584
|
|
|
525
|
-
it('bob audio mute, so alice cannot unmute bob', (
|
|
585
|
+
it('bob audio mute, so alice cannot unmute bob', async () => {
|
|
526
586
|
const checkEvent = (event) =>
|
|
527
587
|
!!event.delta.updated.find(
|
|
528
588
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
529
589
|
);
|
|
530
590
|
|
|
591
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
592
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
593
|
+
]);
|
|
594
|
+
|
|
531
595
|
// first bob mutes himself
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
541
|
-
})
|
|
542
|
-
// now alice tries to unmmut bob
|
|
543
|
-
.then(() =>
|
|
544
|
-
testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
545
|
-
)
|
|
596
|
+
localTracks.bob.microphone.setMuted(true);
|
|
597
|
+
|
|
598
|
+
await membersUpdate;
|
|
599
|
+
|
|
600
|
+
assert.equal(localTracks.bob.microphone.muted, true);
|
|
601
|
+
|
|
602
|
+
// now alice tries to unmmute bob
|
|
603
|
+
await testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
546
604
|
// expect the waitForEvents to timeout
|
|
547
605
|
.then(() =>
|
|
548
606
|
testUtils.waitForEvents(
|
|
@@ -554,126 +612,120 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
554
612
|
assert.fail('bob received unexpected meeting:self:unmutedByOthers event');
|
|
555
613
|
})
|
|
556
614
|
.catch(() => {
|
|
557
|
-
assert.equal(bob.
|
|
558
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
559
|
-
done();
|
|
615
|
+
assert.equal(localTracks.bob.microphone.muted, true);
|
|
560
616
|
});
|
|
561
617
|
});
|
|
562
618
|
|
|
563
|
-
it('bob audio unmute ', () => {
|
|
619
|
+
it('bob audio unmute ', async () => {
|
|
564
620
|
const checkEvent = (event) =>
|
|
565
621
|
!!event.delta.updated.find(
|
|
566
622
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
567
623
|
);
|
|
568
624
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
625
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
626
|
+
{scope: alice.meeting.members, event: 'members:update', match: checkEvent},
|
|
627
|
+
]);
|
|
628
|
+
|
|
629
|
+
localTracks.bob.microphone.setMuted(false);
|
|
630
|
+
|
|
631
|
+
await membersUpdate;
|
|
632
|
+
|
|
633
|
+
assert.equal(localTracks.bob.microphone.muted, false);
|
|
578
634
|
});
|
|
579
635
|
|
|
580
|
-
it('alice shares the screen with highFrameRate', () =>
|
|
581
|
-
|
|
582
|
-
testUtils.delayedPromise(
|
|
583
|
-
alice.meeting.shareScreen({sharePreferences: {highFrameRate: true}})
|
|
584
|
-
),
|
|
585
|
-
testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
586
|
-
testUtils
|
|
587
|
-
.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
588
|
-
.then((response) => {
|
|
589
|
-
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
590
|
-
}),
|
|
591
|
-
testUtils
|
|
592
|
-
.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
593
|
-
.then((response) => {
|
|
594
|
-
console.log(
|
|
595
|
-
'SCREEN SHARE RESPONSE ',
|
|
596
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
597
|
-
);
|
|
598
|
-
}),
|
|
599
|
-
testUtils
|
|
600
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
601
|
-
.then((response) => {
|
|
602
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
603
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
604
|
-
}),
|
|
605
|
-
]).then(() => {
|
|
606
|
-
// TODO: Re-eanable Safari when screensharing issues have been resolved
|
|
607
|
-
if (!isBrowser('safari')) {
|
|
608
|
-
assert.equal(alice.meeting.mediaProperties.shareTrack.getConstraints().height, 720);
|
|
609
|
-
}
|
|
610
|
-
assert.equal(alice.meeting.isSharing, true);
|
|
611
|
-
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
612
|
-
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
613
|
-
console.log(
|
|
614
|
-
'SCREEN SHARE PARTICIPANTS ',
|
|
615
|
-
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
616
|
-
);
|
|
636
|
+
it('alice shares the screen with highFrameRate', async () => {
|
|
637
|
+
localTracks.alice.screenShare.video = await createDisplayTrack();
|
|
617
638
|
|
|
618
|
-
|
|
619
|
-
})
|
|
639
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
640
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
641
|
+
.then((response) => {
|
|
642
|
+
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
643
|
+
});
|
|
644
|
+
const bobReceivesMembersUpdate = testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
645
|
+
.then((response) => {
|
|
646
|
+
console.log(
|
|
647
|
+
'SCREEN SHARE RESPONSE ',
|
|
648
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
649
|
+
);
|
|
650
|
+
});
|
|
651
|
+
const screenShareVideoPublished = waitForPublished(localTracks.alice.screenShare.video, true, "alice's screen share video track");
|
|
620
652
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
'SCREEN SHARE RESPONSE ',
|
|
636
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
637
|
-
);
|
|
638
|
-
}),
|
|
639
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
|
|
640
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
641
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
642
|
-
}),
|
|
643
|
-
]).then(() => {
|
|
644
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
653
|
+
await testUtils.delayedPromise(alice.meeting.publishTracks({screenShare: {video: localTracks.alice.screenShare.video}}));
|
|
654
|
+
|
|
655
|
+
await screenShareVideoPublished;
|
|
656
|
+
await startedSharingLocal;
|
|
657
|
+
await startedSharingRemote;
|
|
658
|
+
await bobReceivesMembersUpdate;
|
|
659
|
+
|
|
660
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_request_granted');
|
|
661
|
+
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
662
|
+
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
663
|
+
console.log(
|
|
664
|
+
'SCREEN SHARE PARTICIPANTS ',
|
|
665
|
+
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
666
|
+
);
|
|
645
667
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
668
|
+
await testUtils.waitUntil(10000);
|
|
669
|
+
});
|
|
670
|
+
|
|
671
|
+
it('bob steals the screen share from alice', async () => {
|
|
672
|
+
localTracks.bob.screenShare.video = await createDisplayTrack();
|
|
673
|
+
|
|
674
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
675
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
676
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
677
|
+
.then((response) => {
|
|
678
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
679
|
+
});
|
|
680
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
681
|
+
.then((response) => {
|
|
682
|
+
console.log(
|
|
683
|
+
'SCREEN SHARE RESPONSE ',
|
|
684
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
651
685
|
);
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
686
|
+
});
|
|
687
|
+
const aliceScreenShareVideoUnpublished = waitForPublished(localTracks.alice.screenShare.video, false, "alice's screen share video track");
|
|
688
|
+
const bobScreenShareVideoPublished = waitForPublished(localTracks.bob.screenShare.video, true, "bob's screen share video track");
|
|
656
689
|
|
|
657
|
-
|
|
658
|
-
}));
|
|
690
|
+
await testUtils.delayedPromise(bob.meeting.publishTracks({screenShare: {video: localTracks.bob.screenShare.video}}));
|
|
659
691
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
692
|
+
await bobScreenShareVideoPublished;
|
|
693
|
+
await aliceScreenShareVideoUnpublished;
|
|
694
|
+
await stoppedSharingLocal;
|
|
695
|
+
await startedSharingLocal;
|
|
696
|
+
await startedSharingRemote;
|
|
697
|
+
await aliceReceivesMembersUpdate;
|
|
698
|
+
|
|
699
|
+
localTracks.alice.screenShare.video.stop();
|
|
700
|
+
localTracks.alice.screenShare.video = undefined;
|
|
701
|
+
|
|
702
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
703
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
704
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
705
|
+
|
|
706
|
+
await testUtils.waitUntil(10000);
|
|
707
|
+
});
|
|
708
|
+
|
|
709
|
+
it('bob stops sharing', async () => {
|
|
710
|
+
const screenShareVideoUnpublished = waitForPublished(localTracks.bob.screenShare.video, false, "bob's screen share video track");
|
|
711
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
712
|
+
const stoppedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingRemote'}]);
|
|
713
|
+
|
|
714
|
+
await testUtils.delayedPromise(bob.meeting.unpublishTracks([localTracks.bob.screenShare.video]));
|
|
715
|
+
|
|
716
|
+
await screenShareVideoUnpublished;
|
|
717
|
+
await stoppedSharingLocal;
|
|
718
|
+
await stoppedSharingRemote;
|
|
719
|
+
|
|
720
|
+
localTracks.bob.screenShare.video.stop();
|
|
721
|
+
localTracks.bob.screenShare.video = undefined;
|
|
722
|
+
|
|
723
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
724
|
+
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
725
|
+
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
726
|
+
|
|
727
|
+
await testUtils.waitUntil(10000);
|
|
728
|
+
});
|
|
677
729
|
|
|
678
730
|
it('alice shares whiteboard A', () =>
|
|
679
731
|
Promise.all([
|
|
@@ -698,7 +750,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
698
750
|
);
|
|
699
751
|
}),
|
|
700
752
|
]).then(() => {
|
|
701
|
-
assert.equal(alice.meeting.
|
|
753
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
702
754
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
703
755
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
704
756
|
}));
|
|
@@ -726,12 +778,12 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
726
778
|
);
|
|
727
779
|
}),
|
|
728
780
|
]).then(() => {
|
|
729
|
-
assert.equal(bob.meeting.
|
|
781
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
730
782
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
731
783
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
732
784
|
}));
|
|
733
785
|
|
|
734
|
-
it('bob stops sharing ', () =>
|
|
786
|
+
it('bob stops sharing again', () =>
|
|
735
787
|
Promise.all([
|
|
736
788
|
// Wait for peerConnection to stabalize
|
|
737
789
|
testUtils.waitUntil(20000),
|
|
@@ -743,7 +795,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
743
795
|
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
744
796
|
]),
|
|
745
797
|
]).then(() => {
|
|
746
|
-
assert.equal(bob.meeting.
|
|
798
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
747
799
|
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
748
800
|
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
749
801
|
}));
|
|
@@ -771,51 +823,43 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
771
823
|
);
|
|
772
824
|
}),
|
|
773
825
|
]).then(() => {
|
|
774
|
-
assert.equal(alice.meeting.
|
|
826
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
775
827
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
776
828
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
777
829
|
}));
|
|
778
830
|
|
|
779
|
-
it('bob steals the share from alice with desktop share', () =>
|
|
780
|
-
|
|
781
|
-
testUtils.delayedPromise(bob.meeting.shareScreen()),
|
|
782
|
-
testUtils.waitForEvents([
|
|
783
|
-
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
784
|
-
]),
|
|
785
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
786
|
-
testUtils
|
|
787
|
-
.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
788
|
-
.then((response) => {
|
|
789
|
-
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
790
|
-
}),
|
|
791
|
-
testUtils
|
|
792
|
-
.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
793
|
-
.then((response) => {
|
|
794
|
-
console.log(
|
|
795
|
-
'SCREEN SHARE RESPONSE ',
|
|
796
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
797
|
-
);
|
|
798
|
-
}),
|
|
799
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
|
|
800
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
801
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
802
|
-
}),
|
|
803
|
-
]).then(() => {
|
|
804
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
831
|
+
it('bob steals the share from alice with desktop share', async () => {
|
|
832
|
+
localTracks.bob.screenShare.video = await createDisplayTrack();
|
|
805
833
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
834
|
+
const stoppedSharingWhiteboard = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'}]);
|
|
835
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
836
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
837
|
+
.then((response) => {
|
|
838
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
839
|
+
});
|
|
840
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
841
|
+
.then((response) => {
|
|
842
|
+
console.log(
|
|
843
|
+
'SCREEN SHARE RESPONSE ',
|
|
844
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
811
845
|
);
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
815
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
846
|
+
});
|
|
847
|
+
const bobScreenShareVideoPublished = waitForPublished(localTracks.bob.screenShare.video, true, "bob's screen share video track");
|
|
816
848
|
|
|
817
|
-
|
|
818
|
-
|
|
849
|
+
await testUtils.delayedPromise(bob.meeting.publishTracks({screenShare: {video: localTracks.bob.screenShare.video}}));
|
|
850
|
+
|
|
851
|
+
await bobScreenShareVideoPublished;
|
|
852
|
+
await stoppedSharingWhiteboard;
|
|
853
|
+
await startedSharingLocal;
|
|
854
|
+
await startedSharingRemote;
|
|
855
|
+
await aliceReceivesMembersUpdate;
|
|
856
|
+
|
|
857
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
858
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
859
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
860
|
+
|
|
861
|
+
await testUtils.waitUntil(10000);
|
|
862
|
+
});
|
|
819
863
|
|
|
820
864
|
it('bob shares whiteboard B', () =>
|
|
821
865
|
Promise.all([
|
|
@@ -840,7 +884,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
840
884
|
);
|
|
841
885
|
}),
|
|
842
886
|
]).then(() => {
|
|
843
|
-
assert.equal(bob.meeting.
|
|
887
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
844
888
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
845
889
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
846
890
|
}));
|
|
@@ -886,7 +930,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
886
930
|
);
|
|
887
931
|
})
|
|
888
932
|
.then(() => testUtils.waitForStateChange(chris.meeting, 'JOINED'))
|
|
889
|
-
.then(() =>
|
|
933
|
+
.then(async () => {
|
|
934
|
+
localTracks.chris.microphone = await createMicrophoneTrack();
|
|
935
|
+
localTracks.chris.camera = await createCameraTrack();
|
|
936
|
+
})
|
|
937
|
+
.then(() => integrationTestUtils.addMedia(chris, {microphone: localTracks.chris.microphone, camera: localTracks.chris.camera}))
|
|
890
938
|
.then(() => assert(enumerateSpy.called));
|
|
891
939
|
})
|
|
892
940
|
.then(() =>
|
|
@@ -933,6 +981,35 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
933
981
|
assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
|
|
934
982
|
});
|
|
935
983
|
});
|
|
984
|
+
|
|
985
|
+
it('stop all local tracks', () => {
|
|
986
|
+
if (localTracks.alice.microphone) {
|
|
987
|
+
localTracks.alice.microphone.stop();
|
|
988
|
+
localTracks.alice.microphone = undefined;
|
|
989
|
+
}
|
|
990
|
+
if (localTracks.alice.camera) {
|
|
991
|
+
localTracks.alice.camera.stop();
|
|
992
|
+
localTracks.alice.camera = undefined;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
if (localTracks.bob.microphone) {
|
|
996
|
+
localTracks.bob.microphone.stop();
|
|
997
|
+
localTracks.bob.microphone = undefined;
|
|
998
|
+
}
|
|
999
|
+
if (localTracks.bob.camera) {
|
|
1000
|
+
localTracks.bob.camera.stop();
|
|
1001
|
+
localTracks.bob.camera = undefined;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
if (localTracks.chris.microphone) {
|
|
1005
|
+
localTracks.chris.microphone.stop();
|
|
1006
|
+
localTracks.chris.microphone = undefined;
|
|
1007
|
+
}
|
|
1008
|
+
if (localTracks.chris.camera) {
|
|
1009
|
+
localTracks.chris.camera.stop();
|
|
1010
|
+
localTracks.chris.camera = undefined;
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
936
1013
|
});
|
|
937
1014
|
});
|
|
938
1015
|
});
|