@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +178 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +843 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +56 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +143 -52
- 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 +16 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +261 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +39 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +31 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +237 -198
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +80 -89
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +56 -146
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +31 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2225 -2244
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +102 -100
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- 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 +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +63 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +565 -552
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +151 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +100 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +152 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +35 -39
- 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 +76 -46
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +4 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +59 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +116 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +58 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +342 -460
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +372 -455
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- 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/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +944 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +6 -0
- package/dist/types/controls-options-manager/index.d.ts +128 -0
- package/dist/types/controls-options-manager/util.d.ts +9 -0
- package/dist/types/index.d.ts +6 -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 +276 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -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 +101 -0
- package/dist/types/meeting/index.d.ts +1720 -0
- package/dist/types/meeting/muteState.d.ts +132 -0
- package/dist/types/meeting/request.d.ts +271 -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 +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -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 +315 -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 +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +343 -0
- package/dist/types/members/request.d.ts +58 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +171 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +153 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +745 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +44 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +92 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +7 -0
- package/src/controls-options-manager/index.ts +240 -0
- package/src/controls-options-manager/util.ts +30 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +141 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +211 -71
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
- package/src/media/{index.js → index.ts} +179 -176
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +67 -3
- package/src/meeting/{index.js → index.ts} +2605 -1605
- package/src/meeting/{muteState.js → muteState.ts} +138 -73
- package/src/meeting/{request.js → request.ts} +326 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +131 -115
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1275 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +99 -33
- package/src/member/{index.js → index.ts} +124 -56
- package/src/member/types.ts +24 -0
- package/src/member/{util.js → util.ts} +105 -25
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +281 -144
- package/src/members/{request.js → request.ts} +80 -16
- package/src/members/types.ts +28 -0
- package/src/members/{util.js → util.ts} +108 -55
- package/src/metrics/{config.js → config.ts} +255 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +110 -94
- package/src/multistream/mediaRequestManager.ts +144 -40
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +50 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +228 -120
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1242 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +178 -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/index.ts +1252 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +54 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +204 -0
- package/test/unit/spec/controls-options-manager/util.js +86 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +133 -34
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +303 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +101 -103
- package/test/unit/spec/locus-info/selfUtils.js +165 -12
- package/test/unit/spec/media/index.ts +72 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
- package/test/unit/spec/meeting/index.js +2503 -802
- package/test/unit/spec/meeting/muteState.js +146 -61
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +135 -164
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +622 -263
- package/test/unit/spec/meetings/utils.js +65 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +294 -54
- package/test/unit/spec/members/request.js +50 -20
- package/test/unit/spec/members/utils.js +147 -4
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +108 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import sinon from 'sinon';
|
|
2
2
|
import {assert} from '@webex/test-helper-chai';
|
|
3
3
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
4
|
-
import createMuteState from '@webex/plugin-meetings/src/meeting/muteState';
|
|
4
|
+
import {createMuteState} from '@webex/plugin-meetings/src/meeting/muteState';
|
|
5
5
|
import Media from '@webex/plugin-meetings/src/media/index';
|
|
6
6
|
import PermissionError from '@webex/plugin-meetings/src/common/errors/permission';
|
|
7
7
|
import {AUDIO, VIDEO} from '@webex/plugin-meetings/src/constants';
|
|
@@ -19,18 +19,21 @@ describe('plugin-meetings', () => {
|
|
|
19
19
|
beforeEach(() => {
|
|
20
20
|
meeting = {
|
|
21
21
|
mediaProperties: {
|
|
22
|
-
audioTrack: 'fake audio track',
|
|
23
|
-
videoTrack: 'fake video track'
|
|
22
|
+
audioTrack: {id: 'fake audio track', setMuted: sinon.stub()},
|
|
23
|
+
videoTrack: {id: 'fake video track', setMuted: sinon.stub()},
|
|
24
24
|
},
|
|
25
25
|
remoteMuted: false,
|
|
26
26
|
unmuteAllowed: true,
|
|
27
|
+
remoteVideoMuted: false,
|
|
28
|
+
unmuteVideoAllowed: true,
|
|
29
|
+
|
|
27
30
|
locusInfo: {
|
|
28
|
-
onFullLocus: sinon.stub()
|
|
31
|
+
onFullLocus: sinon.stub(),
|
|
29
32
|
},
|
|
30
33
|
members: {
|
|
31
34
|
selfId: 'fake self id',
|
|
32
|
-
muteMember: sinon.stub().resolves()
|
|
33
|
-
}
|
|
35
|
+
muteMember: sinon.stub().resolves(),
|
|
36
|
+
},
|
|
34
37
|
};
|
|
35
38
|
audio = createMuteState(AUDIO, meeting, {sendAudio: true});
|
|
36
39
|
video = createMuteState(VIDEO, meeting, {sendVideo: true});
|
|
@@ -38,7 +41,6 @@ describe('plugin-meetings', () => {
|
|
|
38
41
|
originalRemoteUpdateAudioVideo = MeetingUtil.remoteUpdateAudioVideo;
|
|
39
42
|
|
|
40
43
|
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().resolves(fakeLocus);
|
|
41
|
-
Media.setLocalTrack = sinon.stub();
|
|
42
44
|
});
|
|
43
45
|
|
|
44
46
|
afterEach(() => {
|
|
@@ -76,15 +78,16 @@ describe('plugin-meetings', () => {
|
|
|
76
78
|
});
|
|
77
79
|
|
|
78
80
|
it('initialises correctly for video', async () => {
|
|
79
|
-
// setup fields related to
|
|
80
|
-
meeting.
|
|
81
|
-
meeting.
|
|
82
|
-
|
|
81
|
+
// setup fields related to video remote state
|
|
82
|
+
meeting.remoteVideoMuted = false;
|
|
83
|
+
meeting.unmuteVideoAllowed = false;
|
|
84
|
+
|
|
85
|
+
// create a new video MuteState instance
|
|
83
86
|
video = createMuteState(VIDEO, meeting, {sendVideo: true});
|
|
84
87
|
|
|
85
88
|
assert.isFalse(video.isMuted());
|
|
86
89
|
assert.isFalse(video.state.server.remoteMute);
|
|
87
|
-
assert.
|
|
90
|
+
assert.isFalse(video.state.server.unmuteAllowed);
|
|
88
91
|
});
|
|
89
92
|
|
|
90
93
|
it('takes remote mute into account when reporting current state', async () => {
|
|
@@ -110,8 +113,8 @@ describe('plugin-meetings', () => {
|
|
|
110
113
|
audio.handleServerLocalUnmuteRequired(meeting);
|
|
111
114
|
await testUtils.flushPromises();
|
|
112
115
|
|
|
113
|
-
// check that local track was
|
|
114
|
-
assert.calledWith(
|
|
116
|
+
// check that local track was unmuted
|
|
117
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
115
118
|
|
|
116
119
|
// and local unmute was sent to server
|
|
117
120
|
assert.calledOnce(MeetingUtil.remoteUpdateAudioVideo);
|
|
@@ -128,11 +131,14 @@ describe('plugin-meetings', () => {
|
|
|
128
131
|
// first we need to mute and make that request last forever
|
|
129
132
|
let serverResponseResolve;
|
|
130
133
|
|
|
131
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
135
|
+
new Promise((resolve) => {
|
|
136
|
+
serverResponseResolve = resolve;
|
|
137
|
+
})
|
|
138
|
+
);
|
|
134
139
|
|
|
135
|
-
audio
|
|
140
|
+
audio
|
|
141
|
+
.handleClientRequest(meeting, true)
|
|
136
142
|
.then(() => {
|
|
137
143
|
clientPromiseResolved = true;
|
|
138
144
|
})
|
|
@@ -158,48 +164,92 @@ describe('plugin-meetings', () => {
|
|
|
158
164
|
assert.calledOnce(MeetingUtil.remoteUpdateAudioVideo);
|
|
159
165
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, false, undefined, meeting);
|
|
160
166
|
|
|
161
|
-
// and local track should be
|
|
162
|
-
assert.calledWith(
|
|
167
|
+
// and local track should be unmuted
|
|
168
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
163
169
|
|
|
164
170
|
assert.isFalse(audio.isMuted());
|
|
165
171
|
assert.isFalse(audio.isSelf());
|
|
166
172
|
});
|
|
167
173
|
|
|
174
|
+
it('does local video unmute if localVideoUnmuteRequired is received', async () => {
|
|
175
|
+
// first we need to mute
|
|
176
|
+
await video.handleClientRequest(meeting, true);
|
|
177
|
+
|
|
178
|
+
assert.isTrue(video.isMuted());
|
|
179
|
+
assert.isTrue(video.isSelf());
|
|
180
|
+
|
|
181
|
+
MeetingUtil.remoteUpdateAudioVideo.resetHistory();
|
|
182
|
+
|
|
183
|
+
// now simulate server requiring us to locally unmute
|
|
184
|
+
video.handleServerLocalUnmuteRequired(meeting);
|
|
185
|
+
await testUtils.flushPromises();
|
|
186
|
+
|
|
187
|
+
// check that local track was unmuted
|
|
188
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
189
|
+
|
|
190
|
+
// and local unmute was sent to server
|
|
191
|
+
assert.calledOnce(MeetingUtil.remoteUpdateAudioVideo);
|
|
192
|
+
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, undefined, false, meeting);
|
|
193
|
+
|
|
194
|
+
assert.isFalse(video.isMuted());
|
|
195
|
+
assert.isFalse(video.isSelf());
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
describe('#isLocallyMuted()', () => {
|
|
199
|
+
it('does not consider remote mute status for audio', async () => {
|
|
200
|
+
// simulate being already remote muted
|
|
201
|
+
meeting.remoteMuted = true;
|
|
202
|
+
// create a new MuteState intance
|
|
203
|
+
audio = createMuteState(AUDIO, meeting, {sendAudio: true});
|
|
204
|
+
|
|
205
|
+
assert.isFalse(audio.isLocallyMuted());
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
it('does not consider remote mute status for video', async () => {
|
|
209
|
+
// simulate being already remote muted
|
|
210
|
+
meeting.remoteVideoMuted = true;
|
|
211
|
+
// create a new MuteState intance
|
|
212
|
+
video = createMuteState(VIDEO, meeting, {sendVideo: true});
|
|
213
|
+
|
|
214
|
+
assert.isFalse(video.isLocallyMuted());
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
|
|
168
218
|
describe('#handleClientRequest', () => {
|
|
169
219
|
it('disables/enables the local audio track when audio is muted/unmuted', async () => {
|
|
170
220
|
// mute
|
|
171
221
|
audio.handleClientRequest(meeting, true);
|
|
172
|
-
assert.calledWith(
|
|
222
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, true);
|
|
173
223
|
|
|
174
|
-
// even when calling mute when it's already muted should still call
|
|
224
|
+
// even when calling mute when it's already muted should still call setMuted
|
|
175
225
|
audio.handleClientRequest(meeting, true);
|
|
176
|
-
assert.calledWith(
|
|
226
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, true);
|
|
177
227
|
|
|
178
228
|
// unmute
|
|
179
229
|
audio.handleClientRequest(meeting, false);
|
|
180
|
-
assert.calledWith(
|
|
230
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
181
231
|
|
|
182
|
-
// even when calling unmute when it's already unmuted should still call
|
|
232
|
+
// even when calling unmute when it's already unmuted should still call setMuted
|
|
183
233
|
audio.handleClientRequest(meeting, false);
|
|
184
|
-
assert.calledWith(
|
|
234
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
185
235
|
});
|
|
186
236
|
|
|
187
237
|
it('disables/enables the local video track when video is muted/unmuted', async () => {
|
|
188
238
|
// mute
|
|
189
239
|
video.handleClientRequest(meeting, true);
|
|
190
|
-
assert.calledWith(
|
|
240
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
191
241
|
|
|
192
|
-
// even when calling mute when it's already muted should still call
|
|
242
|
+
// even when calling mute when it's already muted should still call setMuted
|
|
193
243
|
video.handleClientRequest(meeting, false);
|
|
194
|
-
assert.calledWith(
|
|
244
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
195
245
|
|
|
196
246
|
// unmute
|
|
197
247
|
video.handleClientRequest(meeting, false);
|
|
198
|
-
assert.calledWith(
|
|
248
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
199
249
|
|
|
200
|
-
// even when calling unmute when it's already unmuted should still call
|
|
250
|
+
// even when calling unmute when it's already unmuted should still call setMuted
|
|
201
251
|
video.handleClientRequest(meeting, false);
|
|
202
|
-
assert.calledWith(
|
|
252
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
203
253
|
});
|
|
204
254
|
|
|
205
255
|
it('returns correct value in isMuted()/isSelf() methods after client mute/unmute requests', async () => {
|
|
@@ -225,25 +275,55 @@ describe('plugin-meetings', () => {
|
|
|
225
275
|
|
|
226
276
|
// check that remote unmute was sent to server
|
|
227
277
|
assert.calledOnce(meeting.members.muteMember);
|
|
228
|
-
assert.calledWith(meeting.members.muteMember, meeting.members.selfId, false);
|
|
278
|
+
assert.calledWith(meeting.members.muteMember, meeting.members.selfId, false, true);
|
|
229
279
|
|
|
230
280
|
assert.isFalse(audio.isMuted());
|
|
231
281
|
assert.isFalse(audio.isSelf());
|
|
232
282
|
});
|
|
233
283
|
|
|
284
|
+
it('does video remote unmute when unmuting and remote mute is on', async () => {
|
|
285
|
+
// simulate remote mute
|
|
286
|
+
video.handleServerRemoteMuteUpdate(true, true);
|
|
287
|
+
|
|
288
|
+
// unmute
|
|
289
|
+
await video.handleClientRequest(meeting, false);
|
|
290
|
+
|
|
291
|
+
// check that remote unmute was sent to server
|
|
292
|
+
assert.calledOnce(meeting.members.muteMember);
|
|
293
|
+
assert.calledWith(meeting.members.muteMember, meeting.members.selfId, false, false);
|
|
294
|
+
|
|
295
|
+
assert.isFalse(video.isMuted());
|
|
296
|
+
assert.isFalse(video.isSelf());
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
it('does not video remote unmute when unmuting and remote mute is off', async () => {
|
|
300
|
+
// simulate remote mute
|
|
301
|
+
video.handleServerRemoteMuteUpdate(false, true);
|
|
302
|
+
|
|
303
|
+
// unmute
|
|
304
|
+
await video.handleClientRequest(meeting, false);
|
|
305
|
+
|
|
306
|
+
// check that remote unmute was sent to server
|
|
307
|
+
assert.notCalled(meeting.members.muteMember);
|
|
308
|
+
|
|
309
|
+
assert.isFalse(video.isMuted());
|
|
310
|
+
assert.isFalse(video.isSelf());
|
|
311
|
+
});
|
|
312
|
+
|
|
234
313
|
it('resolves client request promise once the server is updated', async () => {
|
|
235
314
|
let clientPromiseResolved = false;
|
|
236
315
|
|
|
237
316
|
let serverResponseResolve;
|
|
238
317
|
|
|
239
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
240
|
-
|
|
241
|
-
|
|
318
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
319
|
+
new Promise((resolve) => {
|
|
320
|
+
serverResponseResolve = resolve;
|
|
321
|
+
})
|
|
322
|
+
);
|
|
242
323
|
|
|
243
|
-
audio.handleClientRequest(meeting, true)
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
});
|
|
324
|
+
audio.handleClientRequest(meeting, true).then(() => {
|
|
325
|
+
clientPromiseResolved = true;
|
|
326
|
+
});
|
|
247
327
|
|
|
248
328
|
// do a small delay to make sure that the client promise doesn't resolve in that time
|
|
249
329
|
await testUtils.waitUntil(200);
|
|
@@ -257,9 +337,11 @@ describe('plugin-meetings', () => {
|
|
|
257
337
|
});
|
|
258
338
|
|
|
259
339
|
it('rejects client request promise if server request for local mute fails', async () => {
|
|
260
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
261
|
-
reject
|
|
262
|
-
|
|
340
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
341
|
+
new Promise((resolve, reject) => {
|
|
342
|
+
reject();
|
|
343
|
+
})
|
|
344
|
+
);
|
|
263
345
|
|
|
264
346
|
assert.isRejected(audio.handleClientRequest(meeting, true));
|
|
265
347
|
});
|
|
@@ -282,9 +364,11 @@ describe('plugin-meetings', () => {
|
|
|
282
364
|
it('does not send a server request if client state matches the server', async () => {
|
|
283
365
|
let serverResponseResolve;
|
|
284
366
|
|
|
285
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
286
|
-
|
|
287
|
-
|
|
367
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
368
|
+
new Promise((resolve) => {
|
|
369
|
+
serverResponseResolve = resolve;
|
|
370
|
+
})
|
|
371
|
+
);
|
|
288
372
|
|
|
289
373
|
// simulate many client requests, with the last one matching the initial one
|
|
290
374
|
audio.handleClientRequest(meeting, true);
|
|
@@ -309,22 +393,22 @@ describe('plugin-meetings', () => {
|
|
|
309
393
|
it('queues up server requests when multiple client requests are received', async () => {
|
|
310
394
|
let serverResponseResolve;
|
|
311
395
|
|
|
312
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
313
|
-
|
|
314
|
-
|
|
396
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
397
|
+
new Promise((resolve) => {
|
|
398
|
+
serverResponseResolve = resolve;
|
|
399
|
+
})
|
|
400
|
+
);
|
|
315
401
|
|
|
316
402
|
let firstClientPromiseResolved = false;
|
|
317
403
|
let secondClientPromiseResolved = false;
|
|
318
404
|
|
|
319
405
|
// 2 client requests, one after another without waiting for first one to resolve
|
|
320
|
-
audio.handleClientRequest(meeting, true)
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
secondClientPromiseResolved = true;
|
|
327
|
-
});
|
|
406
|
+
audio.handleClientRequest(meeting, true).then(() => {
|
|
407
|
+
firstClientPromiseResolved = true;
|
|
408
|
+
});
|
|
409
|
+
audio.handleClientRequest(meeting, false).then(() => {
|
|
410
|
+
secondClientPromiseResolved = true;
|
|
411
|
+
});
|
|
328
412
|
|
|
329
413
|
await testUtils.flushPromises();
|
|
330
414
|
|
|
@@ -351,7 +435,8 @@ describe('plugin-meetings', () => {
|
|
|
351
435
|
it('rejects client request to unmute if hard mute is used', (done) => {
|
|
352
436
|
audio.handleServerRemoteMuteUpdate(true, false);
|
|
353
437
|
|
|
354
|
-
audio
|
|
438
|
+
audio
|
|
439
|
+
.handleClientRequest(meeting, false)
|
|
355
440
|
.then(() => {
|
|
356
441
|
done(new Error('expected handleClientRequest to fail, but it did not!'));
|
|
357
442
|
})
|
|
@@ -369,11 +454,11 @@ describe('plugin-meetings', () => {
|
|
|
369
454
|
assert.isTrue(video.isSelf());
|
|
370
455
|
|
|
371
456
|
// check local mute is done, but not remote one
|
|
372
|
-
assert.calledWith(
|
|
457
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
373
458
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, undefined, true, meeting);
|
|
374
459
|
assert.notCalled(meeting.members.muteMember);
|
|
375
460
|
|
|
376
|
-
|
|
461
|
+
meeting.mediaProperties.videoTrack.setMuted.resetHistory();
|
|
377
462
|
MeetingUtil.remoteUpdateAudioVideo.resetHistory();
|
|
378
463
|
meeting.members.muteMember.resetHistory();
|
|
379
464
|
|
|
@@ -383,7 +468,7 @@ describe('plugin-meetings', () => {
|
|
|
383
468
|
assert.isFalse(video.isMuted());
|
|
384
469
|
assert.isFalse(video.isSelf());
|
|
385
470
|
|
|
386
|
-
assert.calledWith(
|
|
471
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
387
472
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, undefined, false, meeting);
|
|
388
473
|
assert.notCalled(meeting.members.muteMember);
|
|
389
474
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import sinon from 'sinon';
|
|
2
2
|
import {assert} from '@webex/test-helper-chai';
|
|
3
3
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
4
|
-
|
|
5
4
|
import Meetings from '@webex/plugin-meetings';
|
|
6
5
|
import MeetingRequest from '@webex/plugin-meetings/src/meeting/request';
|
|
7
6
|
|
|
@@ -11,26 +10,30 @@ describe('plugin-meetings', () => {
|
|
|
11
10
|
beforeEach(() => {
|
|
12
11
|
const webex = new MockWebex({
|
|
13
12
|
children: {
|
|
14
|
-
meetings: Meetings
|
|
15
|
-
}
|
|
13
|
+
meetings: Meetings,
|
|
14
|
+
},
|
|
16
15
|
});
|
|
17
16
|
|
|
18
17
|
webex.meetings.clientRegion = {
|
|
19
18
|
countryCode: 'US',
|
|
20
|
-
regionCode: 'WEST-COAST'
|
|
19
|
+
regionCode: 'WEST-COAST',
|
|
21
20
|
};
|
|
22
21
|
|
|
23
22
|
webex.internal = {
|
|
24
23
|
services: {
|
|
25
24
|
get: sinon.mock().returns('locusUrl'),
|
|
26
|
-
waitForCatalog: sinon.mock().returns(Promise.resolve({}))
|
|
27
|
-
}
|
|
25
|
+
waitForCatalog: sinon.mock().returns(Promise.resolve({})),
|
|
26
|
+
},
|
|
28
27
|
};
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
parent: webex
|
|
32
|
-
});
|
|
29
|
+
webex.boundedStorage.get = sinon.mock().returns(Promise.resolve(JSON.stringify({anycastEntryPoint: "aws-eu-west-1"})))
|
|
33
30
|
|
|
31
|
+
meetingsRequest = new MeetingRequest(
|
|
32
|
+
{},
|
|
33
|
+
{
|
|
34
|
+
parent: webex,
|
|
35
|
+
}
|
|
36
|
+
);
|
|
34
37
|
|
|
35
38
|
meetingsRequest.request = sinon.mock().returns(Promise.resolve({}));
|
|
36
39
|
});
|
|
@@ -45,7 +48,7 @@ describe('plugin-meetings', () => {
|
|
|
45
48
|
await meetingsRequest.sendDTMF({
|
|
46
49
|
locusUrl,
|
|
47
50
|
deviceUrl,
|
|
48
|
-
tones
|
|
51
|
+
tones,
|
|
49
52
|
});
|
|
50
53
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
51
54
|
|
|
@@ -67,7 +70,7 @@ describe('plugin-meetings', () => {
|
|
|
67
70
|
deviceUrl,
|
|
68
71
|
layoutType,
|
|
69
72
|
main: {width: 640, height: 480},
|
|
70
|
-
content: {width: 1280, height: 720}
|
|
73
|
+
content: {width: 1280, height: 720},
|
|
71
74
|
});
|
|
72
75
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
73
76
|
|
|
@@ -75,43 +78,53 @@ describe('plugin-meetings', () => {
|
|
|
75
78
|
assert.equal(requestParams.uri, `${locusUrl}/controls`);
|
|
76
79
|
assert.equal(requestParams.body.layout.type, layoutType);
|
|
77
80
|
assert.equal(requestParams.body.layout.deviceUrl, deviceUrl);
|
|
78
|
-
assert.deepEqual(requestParams.body.layout.layoutParams, {
|
|
81
|
+
assert.deepEqual(requestParams.body.layout.layoutParams, {
|
|
82
|
+
renderInfo: {main: {width: 640, height: 480}, content: {width: 1280, height: 720}},
|
|
83
|
+
});
|
|
79
84
|
});
|
|
80
85
|
|
|
81
86
|
it('throws if width is missing for main', async () => {
|
|
82
|
-
await assert.isRejected(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
await assert.isRejected(
|
|
88
|
+
meetingsRequest.changeVideoLayout({
|
|
89
|
+
locusUrl,
|
|
90
|
+
deviceUrl,
|
|
91
|
+
layoutType,
|
|
92
|
+
main: {height: 100},
|
|
93
|
+
})
|
|
94
|
+
);
|
|
88
95
|
});
|
|
89
96
|
|
|
90
97
|
it('throws if height is missing for main', async () => {
|
|
91
|
-
await assert.isRejected(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
await assert.isRejected(
|
|
99
|
+
meetingsRequest.changeVideoLayout({
|
|
100
|
+
locusUrl,
|
|
101
|
+
deviceUrl,
|
|
102
|
+
layoutType,
|
|
103
|
+
main: {width: 100},
|
|
104
|
+
})
|
|
105
|
+
);
|
|
97
106
|
});
|
|
98
107
|
|
|
99
108
|
it('throws if width is missing for content', async () => {
|
|
100
|
-
await assert.isRejected(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
109
|
+
await assert.isRejected(
|
|
110
|
+
meetingsRequest.changeVideoLayout({
|
|
111
|
+
locusUrl,
|
|
112
|
+
deviceUrl,
|
|
113
|
+
layoutType,
|
|
114
|
+
content: {height: 100},
|
|
115
|
+
})
|
|
116
|
+
);
|
|
106
117
|
});
|
|
107
118
|
|
|
108
119
|
it('throws if height is missing for content', async () => {
|
|
109
|
-
await assert.isRejected(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
120
|
+
await assert.isRejected(
|
|
121
|
+
meetingsRequest.changeVideoLayout({
|
|
122
|
+
locusUrl,
|
|
123
|
+
deviceUrl,
|
|
124
|
+
layoutType,
|
|
125
|
+
content: {width: 100},
|
|
126
|
+
})
|
|
127
|
+
);
|
|
115
128
|
});
|
|
116
129
|
});
|
|
117
130
|
|
|
@@ -128,8 +141,7 @@ describe('plugin-meetings', () => {
|
|
|
128
141
|
deviceUrl,
|
|
129
142
|
correlationId,
|
|
130
143
|
roapMessage,
|
|
131
|
-
permissionToken
|
|
132
|
-
|
|
144
|
+
permissionToken,
|
|
133
145
|
});
|
|
134
146
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
135
147
|
|
|
@@ -151,7 +163,7 @@ describe('plugin-meetings', () => {
|
|
|
151
163
|
deviceUrl,
|
|
152
164
|
correlationId,
|
|
153
165
|
roapMessage,
|
|
154
|
-
meetingNumber
|
|
166
|
+
meetingNumber,
|
|
155
167
|
});
|
|
156
168
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
157
169
|
|
|
@@ -172,7 +184,7 @@ describe('plugin-meetings', () => {
|
|
|
172
184
|
correlationId,
|
|
173
185
|
roapMessage,
|
|
174
186
|
meetingNumber,
|
|
175
|
-
inviteeAddress
|
|
187
|
+
inviteeAddress,
|
|
176
188
|
});
|
|
177
189
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
178
190
|
|
|
@@ -180,6 +192,48 @@ describe('plugin-meetings', () => {
|
|
|
180
192
|
assert.equal(requestParams.uri, 'locusUrl/loci/call?alternateRedirect=true');
|
|
181
193
|
assert.equal(requestParams.body.invitee.address, 'sipUrl');
|
|
182
194
|
});
|
|
195
|
+
|
|
196
|
+
it('adds deviceCapabilities to request when breakouts are supported', async () => {
|
|
197
|
+
await meetingsRequest.joinMeeting({
|
|
198
|
+
breakoutsSupported: true
|
|
199
|
+
});
|
|
200
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
201
|
+
|
|
202
|
+
assert.deepEqual(requestParams.body.deviceCapabilities, ['BREAKOUTS_SUPPORTED']);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('does not add deviceCapabilities to request when breakouts are not supported', async () => {
|
|
206
|
+
await meetingsRequest.joinMeeting({});
|
|
207
|
+
|
|
208
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
209
|
+
|
|
210
|
+
assert.deepEqual(requestParams.body.deviceCapabilities, undefined);
|
|
211
|
+
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('includes joinCookie correctly', async () => {
|
|
215
|
+
const locusUrl = 'locusURL';
|
|
216
|
+
const deviceUrl = 'deviceUrl';
|
|
217
|
+
const correlationId = 'random-uuid';
|
|
218
|
+
const roapMessage = 'roap-message';
|
|
219
|
+
const permissionToken = 'permission-token';
|
|
220
|
+
|
|
221
|
+
await meetingsRequest.joinMeeting({
|
|
222
|
+
locusUrl,
|
|
223
|
+
deviceUrl,
|
|
224
|
+
correlationId,
|
|
225
|
+
roapMessage,
|
|
226
|
+
permissionToken,
|
|
227
|
+
});
|
|
228
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
229
|
+
|
|
230
|
+
assert.equal(requestParams.method, 'POST');
|
|
231
|
+
assert.equal(requestParams.uri, `${locusUrl}/participant?alternateRedirect=true`);
|
|
232
|
+
assert.deepEqual(requestParams.body.clientMediaPreferences, {
|
|
233
|
+
"joinCookie": {anycastEntryPoint: "aws-eu-west-1"},
|
|
234
|
+
"preferTranscoding": true
|
|
235
|
+
});
|
|
236
|
+
});
|
|
183
237
|
});
|
|
184
238
|
|
|
185
239
|
describe('#pstn', () => {
|
|
@@ -193,7 +247,7 @@ describe('plugin-meetings', () => {
|
|
|
193
247
|
locusUrl,
|
|
194
248
|
clientUrl,
|
|
195
249
|
correlationId,
|
|
196
|
-
dialInUrl
|
|
250
|
+
dialInUrl,
|
|
197
251
|
});
|
|
198
252
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
199
253
|
|
|
@@ -217,7 +271,7 @@ describe('plugin-meetings', () => {
|
|
|
217
271
|
clientUrl,
|
|
218
272
|
correlationId,
|
|
219
273
|
dialOutUrl,
|
|
220
|
-
phoneNumber
|
|
274
|
+
phoneNumber,
|
|
221
275
|
});
|
|
222
276
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
223
277
|
|
|
@@ -240,7 +294,7 @@ describe('plugin-meetings', () => {
|
|
|
240
294
|
locusUrl,
|
|
241
295
|
selfId,
|
|
242
296
|
correlationId,
|
|
243
|
-
phoneUrl
|
|
297
|
+
phoneUrl,
|
|
244
298
|
});
|
|
245
299
|
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
246
300
|
|
|
@@ -278,5 +332,49 @@ describe('plugin-meetings', () => {
|
|
|
278
332
|
assert.equal(requestParams.uri, keepAliveUrl);
|
|
279
333
|
});
|
|
280
334
|
});
|
|
335
|
+
|
|
336
|
+
describe('#sendReaction', () => {
|
|
337
|
+
it('sends request to sendReaction', async () => {
|
|
338
|
+
const reactionChannelUrl = 'reactionChannelUrl';
|
|
339
|
+
const participantId = 'participantId';
|
|
340
|
+
const reaction = {
|
|
341
|
+
type: 'thumb_down',
|
|
342
|
+
codepoints: '1F44E',
|
|
343
|
+
shortcodes: ':thumbsdown:',
|
|
344
|
+
tone: {type: 'normal_skin_tone', codepoints: '', shortcodes: ''},
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
await meetingsRequest.sendReaction({
|
|
348
|
+
reactionChannelUrl,
|
|
349
|
+
reaction,
|
|
350
|
+
participantId,
|
|
351
|
+
});
|
|
352
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
353
|
+
|
|
354
|
+
assert.equal(requestParams.method, 'POST');
|
|
355
|
+
assert.equal(requestParams.uri, reactionChannelUrl);
|
|
356
|
+
assert.equal(requestParams.body.sender.participantId, participantId);
|
|
357
|
+
assert.equal(requestParams.body.reaction, reaction);
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
describe('#toggleReactions', () => {
|
|
362
|
+
it('sends request to toggleReactions', async () => {
|
|
363
|
+
const locusUrl = 'locusUrl';
|
|
364
|
+
const requestingParticipantId = 'requestingParticipantId';
|
|
365
|
+
|
|
366
|
+
await meetingsRequest.toggleReactions({
|
|
367
|
+
enable: true,
|
|
368
|
+
locusUrl,
|
|
369
|
+
requestingParticipantId,
|
|
370
|
+
});
|
|
371
|
+
const requestParams = meetingsRequest.request.getCall(0).args[0];
|
|
372
|
+
|
|
373
|
+
assert.equal(requestParams.method, 'PUT');
|
|
374
|
+
assert.equal(requestParams.uri, `${locusUrl}/controls`);
|
|
375
|
+
assert.equal(requestParams.body.reactions.enabled, true);
|
|
376
|
+
assert.equal(requestParams.body.requestingParticipantId, requestingParticipantId);
|
|
377
|
+
});
|
|
378
|
+
});
|
|
281
379
|
});
|
|
282
380
|
});
|