@webex/plugin-meetings 2.59.8-next.2 → 2.60.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +1 -2
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +154 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +9 -12
- package/dist/config.js.map +1 -1
- package/dist/constants.js +437 -433
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +126 -37
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +116 -4
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +95 -6
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +408 -67
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +251 -78
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +106 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +498 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +90 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4579 -2951
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +295 -197
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +602 -432
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +1 -2
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +197 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +25 -12
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +23 -2
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +464 -123
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +54 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +131 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +172 -8
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +108 -41
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +14 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +327 -234
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +14 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +258 -72
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +272 -220
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +101 -235
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +2 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +374 -374
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +100 -66
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +27 -18
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +7 -9
- package/src/constants.ts +263 -89
- package/src/controls-options-manager/enums.ts +11 -1
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +110 -0
- package/src/locus-info/index.ts +449 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/in-meeting-actions.ts +168 -0
- package/src/meeting/index.ts +3801 -2457
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +207 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +590 -423
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +159 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +22 -9
- package/src/meetings/collection.ts +20 -0
- package/src/meetings/index.ts +466 -124
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +52 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +139 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +196 -7
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +12 -4
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/index.ts +238 -45
- package/src/reachability/request.ts +17 -8
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +124 -107
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +98 -240
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +1 -92
- package/src/statsAnalyzer/index.ts +429 -447
- package/src/statsAnalyzer/mqaUtil.ts +105 -103
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- package/test/integration/spec/space-meeting.js +77 -4
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +323 -30
- package/test/unit/spec/locus-info/index.js +1390 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +274 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
- package/test/unit/spec/meeting/index.js +7420 -3125
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +407 -212
- package/test/unit/spec/meeting/request.js +512 -42
- package/test/unit/spec/meeting/utils.js +741 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
- 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 +1012 -209
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +38 -8
- package/test/unit/spec/member/util.js +528 -27
- package/test/unit/spec/members/index.js +597 -3
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/index.ts +598 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +130 -22
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +200 -77
- package/test/unit/spec/roap/request.ts +232 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +205 -50
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
|
@@ -6,9 +6,11 @@ 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 {createCameraStream, createDisplayStream, createMicrophoneStream, LocalTrackEvents, LocalStreamEventNames} 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';
|
|
13
|
+
import {EVENT_TRIGGERS} from '../../../src/constants';
|
|
12
14
|
|
|
13
15
|
require('dotenv').config();
|
|
14
16
|
|
|
@@ -18,6 +20,42 @@ const {isBrowser} = BrowserDetection();
|
|
|
18
20
|
|
|
19
21
|
let userSet, alice, bob, chris, enumerateSpy, channelUrlA, channelUrlB;
|
|
20
22
|
|
|
23
|
+
const localStreams = {
|
|
24
|
+
alice: {
|
|
25
|
+
microphone: undefined,
|
|
26
|
+
camera: undefined,
|
|
27
|
+
screenShare: {
|
|
28
|
+
video: undefined,
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
bob: {
|
|
32
|
+
microphone: undefined,
|
|
33
|
+
camera: undefined,
|
|
34
|
+
screenShare: {
|
|
35
|
+
video: undefined,
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
chris: {
|
|
39
|
+
microphone: undefined,
|
|
40
|
+
camera: undefined,
|
|
41
|
+
screenShare: {
|
|
42
|
+
video: undefined,
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Updated expectedPublished from a boolean value to an object containing the stream and status properties
|
|
48
|
+
const waitForPublished = (meeting, expectedPublished, description) => {
|
|
49
|
+
return testUtils.waitForEvents([{
|
|
50
|
+
scope: meeting,
|
|
51
|
+
event: EVENT_TRIGGERS.MEETING_STREAM_PUBLISH_STATE_CHANGED,
|
|
52
|
+
match: (event) => {
|
|
53
|
+
console.log(`${description} is now ${event.isPublished ? 'published': 'not published'}`);
|
|
54
|
+
return (event.isPublished === expectedPublished.status && event.stream.id === expectedPublished.stream.id) ;
|
|
55
|
+
}
|
|
56
|
+
}]);
|
|
57
|
+
};
|
|
58
|
+
|
|
21
59
|
skipInNode(describe)('plugin-meetings', () => {
|
|
22
60
|
describe('journey', () => {
|
|
23
61
|
before(() =>
|
|
@@ -274,6 +312,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
274
312
|
);
|
|
275
313
|
});
|
|
276
314
|
|
|
315
|
+
it('alice creates local microphone and camera tracks', async () => {
|
|
316
|
+
localStreams.alice.microphone = await createMicrophoneStream();
|
|
317
|
+
localStreams.alice.camera = await createCameraStream();
|
|
318
|
+
});
|
|
319
|
+
|
|
277
320
|
it('alice dials bob and adds media', () =>
|
|
278
321
|
Promise.all([
|
|
279
322
|
testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
|
|
@@ -301,7 +344,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
301
344
|
})
|
|
302
345
|
.then(() =>
|
|
303
346
|
Promise.all([
|
|
304
|
-
|
|
347
|
+
integrationTestUtils.addMedia(alice, {microphone: localStreams.alice.microphone, camera: localStreams.alice.camera}),
|
|
305
348
|
testUtils.waitForEvents([
|
|
306
349
|
{scope: alice.meeting, event: 'meeting:media:local:start', user: alice},
|
|
307
350
|
]),
|
|
@@ -328,9 +371,14 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
328
371
|
]);
|
|
329
372
|
});
|
|
330
373
|
|
|
374
|
+
it('bob creates local microphone and camera tracks', async () => {
|
|
375
|
+
localStreams.bob.microphone = await createMicrophoneStream();
|
|
376
|
+
localStreams.bob.camera = await createCameraStream();
|
|
377
|
+
});
|
|
378
|
+
|
|
331
379
|
it('bob adds media to the meeting', () =>
|
|
332
380
|
Promise.all([
|
|
333
|
-
|
|
381
|
+
integrationTestUtils.addMedia(bob, {microphone: localStreams.bob.microphone, camera: localStreams.bob.camera}),
|
|
334
382
|
testUtils
|
|
335
383
|
.waitForEvents([
|
|
336
384
|
{scope: bob.meeting, event: 'meeting:media:local:start', user: bob},
|
|
@@ -372,136 +420,126 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
372
420
|
assert.exists(alice.meeting.members.selfId, 'selfId not present');
|
|
373
421
|
});
|
|
374
422
|
|
|
375
|
-
it('alice Audio Mute ', () => {
|
|
423
|
+
it('alice Audio Mute ', async () => {
|
|
376
424
|
const checkEvent = (event) =>
|
|
377
425
|
!!event.delta.updated.find(
|
|
378
426
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
379
427
|
);
|
|
380
428
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
429
|
+
await testUtils.waitUntil(2000);
|
|
430
|
+
|
|
431
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
432
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
433
|
+
]);
|
|
434
|
+
|
|
435
|
+
localStreams.alice.microphone.setMuted(true);
|
|
436
|
+
|
|
437
|
+
await membersUpdate;
|
|
438
|
+
|
|
439
|
+
assert.equal(localStreams.alice.microphone.muted, true);
|
|
390
440
|
});
|
|
391
441
|
|
|
392
|
-
it('alice Audio unMute ', () => {
|
|
442
|
+
it('alice Audio unMute ', async () => {
|
|
393
443
|
const checkEvent = (event) =>
|
|
394
444
|
!!event.delta.updated.find(
|
|
395
445
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
396
446
|
);
|
|
397
447
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
448
|
+
await testUtils.waitUntil(2000);
|
|
449
|
+
|
|
450
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
451
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
452
|
+
]);
|
|
453
|
+
|
|
454
|
+
localStreams.alice.microphone.setMuted(false);
|
|
455
|
+
|
|
456
|
+
await membersUpdate;
|
|
457
|
+
|
|
458
|
+
assert.equal(localStreams.alice.microphone.muted, false);
|
|
407
459
|
});
|
|
408
460
|
|
|
409
|
-
it('alice
|
|
461
|
+
it('alice video mute', async () => {
|
|
410
462
|
const checkEvent = (event) =>
|
|
411
463
|
!!event.delta.updated.find(
|
|
412
464
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true
|
|
413
465
|
);
|
|
414
466
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
467
|
+
await testUtils.waitUntil(2000);
|
|
468
|
+
|
|
469
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
470
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
471
|
+
]);
|
|
472
|
+
|
|
473
|
+
localStreams.alice.camera.setMuted(true);
|
|
474
|
+
|
|
475
|
+
await membersUpdate;
|
|
476
|
+
|
|
477
|
+
assert.equal(localStreams.alice.camera.muted, true);
|
|
424
478
|
});
|
|
425
479
|
|
|
426
|
-
it('alice video
|
|
480
|
+
it('alice video unmute', async () => {
|
|
427
481
|
const checkEvent = (event) =>
|
|
428
482
|
!!event.delta.updated.find(
|
|
429
483
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false
|
|
430
484
|
);
|
|
431
485
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
486
|
+
await testUtils.waitUntil(2000);
|
|
487
|
+
|
|
488
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
489
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
490
|
+
]);
|
|
491
|
+
|
|
492
|
+
localStreams.alice.camera.setMuted(false);
|
|
493
|
+
|
|
494
|
+
await membersUpdate;
|
|
495
|
+
|
|
496
|
+
assert.equal(localStreams.alice.camera.muted, false);
|
|
441
497
|
});
|
|
442
498
|
|
|
443
|
-
it('alice update Audio', () => {
|
|
444
|
-
const
|
|
499
|
+
it('alice update Audio', async () => {
|
|
500
|
+
const newMicrophoneStream = await createMicrophoneStream();
|
|
501
|
+
const newStreamPublished = waitForPublished(alice.meeting, {stream: newMicrophoneStream, status: true}, "Alice AUDIO: new microphone stream");
|
|
445
502
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
);
|
|
464
|
-
assert.equal(alice.meeting.mediaProperties.videoTrack.id, oldVideoTrackId);
|
|
465
|
-
})
|
|
466
|
-
),
|
|
467
|
-
testUtils
|
|
468
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
469
|
-
.then((response) => {
|
|
470
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
471
|
-
assert.equal(response[0].result.type === 'local', true);
|
|
472
|
-
}),
|
|
473
|
-
])
|
|
474
|
-
);
|
|
503
|
+
await testUtils.delayedPromise(
|
|
504
|
+
alice.meeting
|
|
505
|
+
.publishStreams({
|
|
506
|
+
microphone: newMicrophoneStream,
|
|
507
|
+
})
|
|
508
|
+
.then(() => {
|
|
509
|
+
console.log('Alice AUDIO: new stream on meeting object:', alice.meeting.mediaProperties.audioStream);
|
|
510
|
+
assert.equal(
|
|
511
|
+
alice.meeting.mediaProperties.audioStream.id,
|
|
512
|
+
newMicrophoneStream.id
|
|
513
|
+
);
|
|
514
|
+
})
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
await newStreamPublished;
|
|
518
|
+
|
|
519
|
+
localStreams.alice.microphone = newMicrophoneStream;
|
|
475
520
|
});
|
|
476
521
|
|
|
477
|
-
it('alice update video', () => {
|
|
478
|
-
const
|
|
522
|
+
it('alice update video', async () => {
|
|
523
|
+
const newCameraStream = await createCameraStream();
|
|
524
|
+
const newStreamPublished = waitForPublished(alice.meeting, {stream: newCameraStream, status: true}, "Alice VIDEO: new camera stream");
|
|
479
525
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
testUtils
|
|
498
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
499
|
-
.then((response) => {
|
|
500
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
501
|
-
assert.equal(response[0].result.type === 'local', true);
|
|
502
|
-
}),
|
|
503
|
-
])
|
|
504
|
-
);
|
|
526
|
+
await testUtils.delayedPromise(
|
|
527
|
+
alice.meeting
|
|
528
|
+
.publishStreams({
|
|
529
|
+
camera: newCameraStream,
|
|
530
|
+
})
|
|
531
|
+
.then(() => {
|
|
532
|
+
console.log('Alice VIDEO: new stream on meeting:', alice.meeting.mediaProperties.videoStream);
|
|
533
|
+
assert.equal(
|
|
534
|
+
alice.meeting.mediaProperties.videoStream.id,
|
|
535
|
+
newCameraStream.id
|
|
536
|
+
);
|
|
537
|
+
})
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
await newStreamPublished;
|
|
541
|
+
|
|
542
|
+
localStreams.alice.camera = newCameraStream;
|
|
505
543
|
});
|
|
506
544
|
|
|
507
545
|
it('alice mutes bob', () =>
|
|
@@ -525,27 +563,25 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
525
563
|
}),
|
|
526
564
|
]));
|
|
527
565
|
|
|
528
|
-
it('bob audio mute, so alice cannot unmute bob', (
|
|
566
|
+
it('bob audio mute, so alice cannot unmute bob', async () => {
|
|
529
567
|
const checkEvent = (event) =>
|
|
530
568
|
!!event.delta.updated.find(
|
|
531
569
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
532
570
|
);
|
|
533
571
|
|
|
572
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
573
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
574
|
+
]);
|
|
575
|
+
|
|
534
576
|
// first bob mutes himself
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
544
|
-
})
|
|
545
|
-
// now alice tries to unmmut bob
|
|
546
|
-
.then(() =>
|
|
547
|
-
testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
548
|
-
)
|
|
577
|
+
localStreams.bob.microphone.setMuted(true);
|
|
578
|
+
|
|
579
|
+
await membersUpdate;
|
|
580
|
+
|
|
581
|
+
assert.equal(localStreams.bob.microphone.muted, true);
|
|
582
|
+
|
|
583
|
+
// now alice tries to unmmute bob
|
|
584
|
+
await testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
549
585
|
// expect the waitForEvents to timeout
|
|
550
586
|
.then(() =>
|
|
551
587
|
testUtils.waitForEvents(
|
|
@@ -557,126 +593,121 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
557
593
|
assert.fail('bob received unexpected meeting:self:unmutedByOthers event');
|
|
558
594
|
})
|
|
559
595
|
.catch(() => {
|
|
560
|
-
assert.equal(bob.
|
|
561
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
562
|
-
done();
|
|
596
|
+
assert.equal(localStreams.bob.microphone.muted, true);
|
|
563
597
|
});
|
|
564
598
|
});
|
|
565
599
|
|
|
566
|
-
it('bob audio unmute ', () => {
|
|
600
|
+
it('bob audio unmute ', async () => {
|
|
567
601
|
const checkEvent = (event) =>
|
|
568
602
|
!!event.delta.updated.find(
|
|
569
603
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
570
604
|
);
|
|
571
605
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
606
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
607
|
+
{scope: alice.meeting.members, event: 'members:update', match: checkEvent},
|
|
608
|
+
]);
|
|
609
|
+
|
|
610
|
+
localStreams.bob.microphone.setMuted(false);
|
|
611
|
+
|
|
612
|
+
await membersUpdate;
|
|
613
|
+
|
|
614
|
+
assert.equal(localStreams.bob.microphone.muted, false);
|
|
581
615
|
});
|
|
582
616
|
|
|
583
|
-
it('alice shares the screen with highFrameRate', () =>
|
|
584
|
-
|
|
585
|
-
testUtils.delayedPromise(
|
|
586
|
-
alice.meeting.shareScreen({sharePreferences: {highFrameRate: true}})
|
|
587
|
-
),
|
|
588
|
-
testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
589
|
-
testUtils
|
|
590
|
-
.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
591
|
-
.then((response) => {
|
|
592
|
-
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
593
|
-
}),
|
|
594
|
-
testUtils
|
|
595
|
-
.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
596
|
-
.then((response) => {
|
|
597
|
-
console.log(
|
|
598
|
-
'SCREEN SHARE RESPONSE ',
|
|
599
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
600
|
-
);
|
|
601
|
-
}),
|
|
602
|
-
testUtils
|
|
603
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
604
|
-
.then((response) => {
|
|
605
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
606
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
607
|
-
}),
|
|
608
|
-
]).then(() => {
|
|
609
|
-
// TODO: Re-eanable Safari when screensharing issues have been resolved
|
|
610
|
-
if (!isBrowser('safari')) {
|
|
611
|
-
assert.equal(alice.meeting.mediaProperties.shareTrack.getConstraints().height, 720);
|
|
612
|
-
}
|
|
613
|
-
assert.equal(alice.meeting.isSharing, true);
|
|
614
|
-
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
615
|
-
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
616
|
-
console.log(
|
|
617
|
-
'SCREEN SHARE PARTICIPANTS ',
|
|
618
|
-
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
619
|
-
);
|
|
617
|
+
it('alice shares the screen with highFrameRate', async () => {
|
|
618
|
+
localStreams.alice.screenShare.video = await createDisplayStream();
|
|
620
619
|
|
|
621
|
-
|
|
622
|
-
})
|
|
620
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
621
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
622
|
+
.then((response) => {
|
|
623
|
+
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
624
|
+
});
|
|
625
|
+
const bobReceivesMembersUpdate = testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
626
|
+
.then((response) => {
|
|
627
|
+
console.log(
|
|
628
|
+
'SCREEN SHARE RESPONSE ',
|
|
629
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
630
|
+
);
|
|
631
|
+
});
|
|
623
632
|
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
644
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
645
|
-
}),
|
|
646
|
-
]).then(() => {
|
|
647
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
633
|
+
const screenShareVideoPublished = waitForPublished(alice.meeting, {stream: localStreams.alice.screenShare.video, status: true}, "alice's screen share video stream");
|
|
634
|
+
|
|
635
|
+
await testUtils.delayedPromise(alice.meeting.publishStreams({screenShare: {video: localStreams.alice.screenShare.video}}));
|
|
636
|
+
|
|
637
|
+
await screenShareVideoPublished;
|
|
638
|
+
await startedSharingLocal;
|
|
639
|
+
await startedSharingRemote;
|
|
640
|
+
await bobReceivesMembersUpdate;
|
|
641
|
+
|
|
642
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_request_granted');
|
|
643
|
+
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
644
|
+
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
645
|
+
console.log(
|
|
646
|
+
'SCREEN SHARE PARTICIPANTS ',
|
|
647
|
+
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
await testUtils.waitUntil(10000);
|
|
651
|
+
});
|
|
648
652
|
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
653
|
+
it('bob steals the screen share from alice', async () => {
|
|
654
|
+
localStreams.bob.screenShare.video = await createDisplayStream();
|
|
655
|
+
|
|
656
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
657
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
658
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
659
|
+
.then((response) => {
|
|
660
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
661
|
+
});
|
|
662
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
663
|
+
.then((response) => {
|
|
664
|
+
console.log(
|
|
665
|
+
'SCREEN SHARE RESPONSE ',
|
|
666
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
654
667
|
);
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
668
|
+
});
|
|
669
|
+
const aliceScreenShareVideoUnpublished = waitForPublished(alice.meeting, {stream: localStreams.alice.screenShare.video, status: false}, "alice's screen share video stream");
|
|
670
|
+
const bobScreenShareVideoPublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: true}, "bob's screen share video stream");
|
|
659
671
|
|
|
660
|
-
|
|
661
|
-
}));
|
|
672
|
+
await testUtils.delayedPromise(bob.meeting.publishStreams({screenShare: {video: localStreams.bob.screenShare.video}}));
|
|
662
673
|
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
674
|
+
await bobScreenShareVideoPublished;
|
|
675
|
+
await aliceScreenShareVideoUnpublished;
|
|
676
|
+
await stoppedSharingLocal;
|
|
677
|
+
await startedSharingLocal;
|
|
678
|
+
await startedSharingRemote;
|
|
679
|
+
await aliceReceivesMembersUpdate;
|
|
680
|
+
|
|
681
|
+
localStreams.alice.screenShare.video.stop();
|
|
682
|
+
localStreams.alice.screenShare.video = undefined;
|
|
683
|
+
|
|
684
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
685
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
686
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
687
|
+
|
|
688
|
+
await testUtils.waitUntil(10000);
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
it('bob stops sharing', async () => {
|
|
692
|
+
const screenShareVideoUnpublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: false}, "bob's screen share video stream");
|
|
693
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
694
|
+
const stoppedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingRemote'}]);
|
|
695
|
+
|
|
696
|
+
await testUtils.delayedPromise(bob.meeting.unpublishStreams([localStreams.bob.screenShare.video]));
|
|
697
|
+
|
|
698
|
+
await screenShareVideoUnpublished;
|
|
699
|
+
await stoppedSharingLocal;
|
|
700
|
+
await stoppedSharingRemote;
|
|
701
|
+
|
|
702
|
+
localStreams.bob.screenShare.video.stop();
|
|
703
|
+
localStreams.bob.screenShare.video = undefined;
|
|
704
|
+
|
|
705
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
706
|
+
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
707
|
+
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
708
|
+
|
|
709
|
+
await testUtils.waitUntil(10000);
|
|
710
|
+
});
|
|
680
711
|
|
|
681
712
|
it('alice shares whiteboard A', () =>
|
|
682
713
|
Promise.all([
|
|
@@ -701,7 +732,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
701
732
|
);
|
|
702
733
|
}),
|
|
703
734
|
]).then(() => {
|
|
704
|
-
assert.equal(alice.meeting.
|
|
735
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
705
736
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
706
737
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
707
738
|
}));
|
|
@@ -729,12 +760,12 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
729
760
|
);
|
|
730
761
|
}),
|
|
731
762
|
]).then(() => {
|
|
732
|
-
assert.equal(bob.meeting.
|
|
763
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
733
764
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
734
765
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
735
766
|
}));
|
|
736
767
|
|
|
737
|
-
it('bob stops sharing ', () =>
|
|
768
|
+
it('bob stops sharing again', () =>
|
|
738
769
|
Promise.all([
|
|
739
770
|
// Wait for peerConnection to stabalize
|
|
740
771
|
testUtils.waitUntil(20000),
|
|
@@ -746,7 +777,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
746
777
|
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
747
778
|
]),
|
|
748
779
|
]).then(() => {
|
|
749
|
-
assert.equal(bob.meeting.
|
|
780
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
750
781
|
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
751
782
|
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
752
783
|
}));
|
|
@@ -774,51 +805,43 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
774
805
|
);
|
|
775
806
|
}),
|
|
776
807
|
]).then(() => {
|
|
777
|
-
assert.equal(alice.meeting.
|
|
808
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
778
809
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
779
810
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
780
811
|
}));
|
|
781
812
|
|
|
782
|
-
it('bob steals the share from alice with desktop share', () =>
|
|
783
|
-
|
|
784
|
-
testUtils.delayedPromise(bob.meeting.shareScreen()),
|
|
785
|
-
testUtils.waitForEvents([
|
|
786
|
-
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
787
|
-
]),
|
|
788
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
789
|
-
testUtils
|
|
790
|
-
.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
791
|
-
.then((response) => {
|
|
792
|
-
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
793
|
-
}),
|
|
794
|
-
testUtils
|
|
795
|
-
.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
796
|
-
.then((response) => {
|
|
797
|
-
console.log(
|
|
798
|
-
'SCREEN SHARE RESPONSE ',
|
|
799
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
800
|
-
);
|
|
801
|
-
}),
|
|
802
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
|
|
803
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
804
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
805
|
-
}),
|
|
806
|
-
]).then(() => {
|
|
807
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
813
|
+
it('bob steals the share from alice with desktop share', async () => {
|
|
814
|
+
localStreams.bob.screenShare.video = await createDisplayStream();
|
|
808
815
|
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
816
|
+
const stoppedSharingWhiteboard = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'}]);
|
|
817
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
818
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
819
|
+
.then((response) => {
|
|
820
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
821
|
+
});
|
|
822
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
823
|
+
.then((response) => {
|
|
824
|
+
console.log(
|
|
825
|
+
'SCREEN SHARE RESPONSE ',
|
|
826
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
814
827
|
);
|
|
815
|
-
}
|
|
816
|
-
|
|
817
|
-
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
818
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
828
|
+
});
|
|
829
|
+
const bobScreenShareVideoPublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: true}, "bob's screen share video stream");
|
|
819
830
|
|
|
820
|
-
|
|
821
|
-
|
|
831
|
+
await testUtils.delayedPromise(bob.meeting.publishStreams({screenShare: {video: localStreams.bob.screenShare.video}}));
|
|
832
|
+
|
|
833
|
+
await bobScreenShareVideoPublished;
|
|
834
|
+
await stoppedSharingWhiteboard;
|
|
835
|
+
await startedSharingLocal;
|
|
836
|
+
await startedSharingRemote;
|
|
837
|
+
await aliceReceivesMembersUpdate;
|
|
838
|
+
|
|
839
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
840
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
841
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
842
|
+
|
|
843
|
+
await testUtils.waitUntil(10000);
|
|
844
|
+
});
|
|
822
845
|
|
|
823
846
|
it('bob shares whiteboard B', () =>
|
|
824
847
|
Promise.all([
|
|
@@ -843,7 +866,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
843
866
|
);
|
|
844
867
|
}),
|
|
845
868
|
]).then(() => {
|
|
846
|
-
assert.equal(bob.meeting.
|
|
869
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
847
870
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
848
871
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
849
872
|
}));
|
|
@@ -889,7 +912,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
889
912
|
);
|
|
890
913
|
})
|
|
891
914
|
.then(() => testUtils.waitForStateChange(chris.meeting, 'JOINED'))
|
|
892
|
-
.then(() =>
|
|
915
|
+
.then(async () => {
|
|
916
|
+
localStreams.chris.microphone = await createMicrophoneStream();
|
|
917
|
+
localStreams.chris.camera = await createCameraStream();
|
|
918
|
+
})
|
|
919
|
+
.then(() => integrationTestUtils.addMedia(chris, {microphone: localStreams.chris.microphone, camera: localStreams.chris.camera}))
|
|
893
920
|
.then(() => assert(enumerateSpy.called));
|
|
894
921
|
})
|
|
895
922
|
.then(() =>
|
|
@@ -936,6 +963,35 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
936
963
|
assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
|
|
937
964
|
});
|
|
938
965
|
});
|
|
966
|
+
|
|
967
|
+
it('stop all local streams', () => {
|
|
968
|
+
if (localStreams.alice.microphone) {
|
|
969
|
+
localStreams.alice.microphone.stop();
|
|
970
|
+
localStreams.alice.microphone = undefined;
|
|
971
|
+
}
|
|
972
|
+
if (localStreams.alice.camera) {
|
|
973
|
+
localStreams.alice.camera.stop();
|
|
974
|
+
localStreams.alice.camera = undefined;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
if (localStreams.bob.microphone) {
|
|
978
|
+
localStreams.bob.microphone.stop();
|
|
979
|
+
localStreams.bob.microphone = undefined;
|
|
980
|
+
}
|
|
981
|
+
if (localStreams.bob.camera) {
|
|
982
|
+
localStreams.bob.camera.stop();
|
|
983
|
+
localStreams.bob.camera = undefined;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
if (localStreams.chris.microphone) {
|
|
987
|
+
localStreams.chris.microphone.stop();
|
|
988
|
+
localStreams.chris.microphone = undefined;
|
|
989
|
+
}
|
|
990
|
+
if (localStreams.chris.camera) {
|
|
991
|
+
localStreams.chris.camera.stop();
|
|
992
|
+
localStreams.chris.camera = undefined;
|
|
993
|
+
}
|
|
994
|
+
});
|
|
939
995
|
});
|
|
940
996
|
});
|
|
941
997
|
});
|