@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40
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 +137 -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 +546 -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 +48 -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 +109 -49
- 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 +15 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +203 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +28 -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 +12 -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 +186 -192
- 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 +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +66 -153
- 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 +13 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2141 -2210
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +59 -82
- 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 +45 -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 +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +116 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +95 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +1 -13
- 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 +54 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +74 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +48 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +60 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +60 -76
- 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 +360 -413
- 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 +147 -183
- 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 +322 -456
- 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 +361 -449
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +137 -81
- 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 +916 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +5 -0
- package/dist/types/controls-options-manager/index.d.ts +120 -0
- package/dist/types/controls-options-manager/util.d.ts +7 -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 +269 -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 +83 -0
- package/dist/types/meeting/index.d.ts +1699 -0
- package/dist/types/meeting/muteState.d.ts +116 -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 +23 -0
- package/dist/types/meetings/index.d.ts +297 -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 +146 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +24 -0
- package/dist/types/members/index.d.ts +320 -0
- package/dist/types/members/request.d.ts +50 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +169 -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 +51 -0
- package/dist/types/multistream/receiveSlot.d.ts +64 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -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 +241 -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 +140 -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 +117 -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 +199 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +504 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +39 -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 +62 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +6 -0
- package/src/controls-options-manager/index.ts +183 -0
- package/src/controls-options-manager/util.ts +20 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +114 -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} +150 -66
- 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} +123 -68
- package/src/media/{index.js → index.ts} +182 -173
- 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 +31 -3
- package/src/meeting/{index.js → index.ts} +2512 -1579
- package/src/meeting/{muteState.js → muteState.ts} +95 -49
- 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} +117 -119
- 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} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +58 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +221 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +253 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +105 -94
- package/src/multistream/mediaRequestManager.ts +101 -39
- package/src/multistream/receiveSlot.ts +62 -26
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +38 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +152 -36
- 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} +109 -85
- 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} +196 -103
- 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 +1234 -0
- package/src/statsAnalyzer/mqaUtil.ts +293 -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 +147 -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 +707 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +47 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +124 -0
- package/test/unit/spec/controls-options-manager/util.js +66 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -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 +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +39 -53
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2253 -811
- package/test/unit/spec/meeting/muteState.js +74 -55
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +106 -171
- 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 +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
- package/test/unit/spec/multistream/receiveSlot.ts +68 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +38 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -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 +70 -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 +86 -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,18 @@ 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
27
|
locusInfo: {
|
|
28
|
-
onFullLocus: sinon.stub()
|
|
28
|
+
onFullLocus: sinon.stub(),
|
|
29
29
|
},
|
|
30
30
|
members: {
|
|
31
31
|
selfId: 'fake self id',
|
|
32
|
-
muteMember: sinon.stub().resolves()
|
|
33
|
-
}
|
|
32
|
+
muteMember: sinon.stub().resolves(),
|
|
33
|
+
},
|
|
34
34
|
};
|
|
35
35
|
audio = createMuteState(AUDIO, meeting, {sendAudio: true});
|
|
36
36
|
video = createMuteState(VIDEO, meeting, {sendVideo: true});
|
|
@@ -38,7 +38,6 @@ describe('plugin-meetings', () => {
|
|
|
38
38
|
originalRemoteUpdateAudioVideo = MeetingUtil.remoteUpdateAudioVideo;
|
|
39
39
|
|
|
40
40
|
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().resolves(fakeLocus);
|
|
41
|
-
Media.setLocalTrack = sinon.stub();
|
|
42
41
|
});
|
|
43
42
|
|
|
44
43
|
afterEach(() => {
|
|
@@ -110,8 +109,8 @@ describe('plugin-meetings', () => {
|
|
|
110
109
|
audio.handleServerLocalUnmuteRequired(meeting);
|
|
111
110
|
await testUtils.flushPromises();
|
|
112
111
|
|
|
113
|
-
// check that local track was
|
|
114
|
-
assert.calledWith(
|
|
112
|
+
// check that local track was unmuted
|
|
113
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
115
114
|
|
|
116
115
|
// and local unmute was sent to server
|
|
117
116
|
assert.calledOnce(MeetingUtil.remoteUpdateAudioVideo);
|
|
@@ -128,11 +127,14 @@ describe('plugin-meetings', () => {
|
|
|
128
127
|
// first we need to mute and make that request last forever
|
|
129
128
|
let serverResponseResolve;
|
|
130
129
|
|
|
131
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
132
|
-
|
|
133
|
-
|
|
130
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
131
|
+
new Promise((resolve) => {
|
|
132
|
+
serverResponseResolve = resolve;
|
|
133
|
+
})
|
|
134
|
+
);
|
|
134
135
|
|
|
135
|
-
audio
|
|
136
|
+
audio
|
|
137
|
+
.handleClientRequest(meeting, true)
|
|
136
138
|
.then(() => {
|
|
137
139
|
clientPromiseResolved = true;
|
|
138
140
|
})
|
|
@@ -158,48 +160,59 @@ describe('plugin-meetings', () => {
|
|
|
158
160
|
assert.calledOnce(MeetingUtil.remoteUpdateAudioVideo);
|
|
159
161
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, false, undefined, meeting);
|
|
160
162
|
|
|
161
|
-
// and local track should be
|
|
162
|
-
assert.calledWith(
|
|
163
|
+
// and local track should be unmuted
|
|
164
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
163
165
|
|
|
164
166
|
assert.isFalse(audio.isMuted());
|
|
165
167
|
assert.isFalse(audio.isSelf());
|
|
166
168
|
});
|
|
167
169
|
|
|
170
|
+
describe('#isLocallyMuted()', () => {
|
|
171
|
+
it('does not consider remote mute status for audio', async () => {
|
|
172
|
+
// simulate being already remote muted
|
|
173
|
+
meeting.remoteMuted = true;
|
|
174
|
+
// create a new MuteState intance
|
|
175
|
+
audio = createMuteState(AUDIO, meeting, {sendAudio: true});
|
|
176
|
+
|
|
177
|
+
assert.isFalse(audio.isLocallyMuted());
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
|
|
168
181
|
describe('#handleClientRequest', () => {
|
|
169
182
|
it('disables/enables the local audio track when audio is muted/unmuted', async () => {
|
|
170
183
|
// mute
|
|
171
184
|
audio.handleClientRequest(meeting, true);
|
|
172
|
-
assert.calledWith(
|
|
185
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, true);
|
|
173
186
|
|
|
174
|
-
// even when calling mute when it's already muted should still call
|
|
187
|
+
// even when calling mute when it's already muted should still call setMuted
|
|
175
188
|
audio.handleClientRequest(meeting, true);
|
|
176
|
-
assert.calledWith(
|
|
189
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, true);
|
|
177
190
|
|
|
178
191
|
// unmute
|
|
179
192
|
audio.handleClientRequest(meeting, false);
|
|
180
|
-
assert.calledWith(
|
|
193
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
181
194
|
|
|
182
|
-
// even when calling unmute when it's already unmuted should still call
|
|
195
|
+
// even when calling unmute when it's already unmuted should still call setMuted
|
|
183
196
|
audio.handleClientRequest(meeting, false);
|
|
184
|
-
assert.calledWith(
|
|
197
|
+
assert.calledWith(meeting.mediaProperties.audioTrack.setMuted, false);
|
|
185
198
|
});
|
|
186
199
|
|
|
187
200
|
it('disables/enables the local video track when video is muted/unmuted', async () => {
|
|
188
201
|
// mute
|
|
189
202
|
video.handleClientRequest(meeting, true);
|
|
190
|
-
assert.calledWith(
|
|
203
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
191
204
|
|
|
192
|
-
// even when calling mute when it's already muted should still call
|
|
205
|
+
// even when calling mute when it's already muted should still call setMuted
|
|
193
206
|
video.handleClientRequest(meeting, false);
|
|
194
|
-
assert.calledWith(
|
|
207
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
195
208
|
|
|
196
209
|
// unmute
|
|
197
210
|
video.handleClientRequest(meeting, false);
|
|
198
|
-
assert.calledWith(
|
|
211
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
199
212
|
|
|
200
|
-
// even when calling unmute when it's already unmuted should still call
|
|
213
|
+
// even when calling unmute when it's already unmuted should still call setMuted
|
|
201
214
|
video.handleClientRequest(meeting, false);
|
|
202
|
-
assert.calledWith(
|
|
215
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
203
216
|
});
|
|
204
217
|
|
|
205
218
|
it('returns correct value in isMuted()/isSelf() methods after client mute/unmute requests', async () => {
|
|
@@ -236,14 +249,15 @@ describe('plugin-meetings', () => {
|
|
|
236
249
|
|
|
237
250
|
let serverResponseResolve;
|
|
238
251
|
|
|
239
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
240
|
-
|
|
241
|
-
|
|
252
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
253
|
+
new Promise((resolve) => {
|
|
254
|
+
serverResponseResolve = resolve;
|
|
255
|
+
})
|
|
256
|
+
);
|
|
242
257
|
|
|
243
|
-
audio.handleClientRequest(meeting, true)
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
});
|
|
258
|
+
audio.handleClientRequest(meeting, true).then(() => {
|
|
259
|
+
clientPromiseResolved = true;
|
|
260
|
+
});
|
|
247
261
|
|
|
248
262
|
// do a small delay to make sure that the client promise doesn't resolve in that time
|
|
249
263
|
await testUtils.waitUntil(200);
|
|
@@ -257,9 +271,11 @@ describe('plugin-meetings', () => {
|
|
|
257
271
|
});
|
|
258
272
|
|
|
259
273
|
it('rejects client request promise if server request for local mute fails', async () => {
|
|
260
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
261
|
-
reject
|
|
262
|
-
|
|
274
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
275
|
+
new Promise((resolve, reject) => {
|
|
276
|
+
reject();
|
|
277
|
+
})
|
|
278
|
+
);
|
|
263
279
|
|
|
264
280
|
assert.isRejected(audio.handleClientRequest(meeting, true));
|
|
265
281
|
});
|
|
@@ -282,9 +298,11 @@ describe('plugin-meetings', () => {
|
|
|
282
298
|
it('does not send a server request if client state matches the server', async () => {
|
|
283
299
|
let serverResponseResolve;
|
|
284
300
|
|
|
285
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
286
|
-
|
|
287
|
-
|
|
301
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
302
|
+
new Promise((resolve) => {
|
|
303
|
+
serverResponseResolve = resolve;
|
|
304
|
+
})
|
|
305
|
+
);
|
|
288
306
|
|
|
289
307
|
// simulate many client requests, with the last one matching the initial one
|
|
290
308
|
audio.handleClientRequest(meeting, true);
|
|
@@ -309,22 +327,22 @@ describe('plugin-meetings', () => {
|
|
|
309
327
|
it('queues up server requests when multiple client requests are received', async () => {
|
|
310
328
|
let serverResponseResolve;
|
|
311
329
|
|
|
312
|
-
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
313
|
-
|
|
314
|
-
|
|
330
|
+
MeetingUtil.remoteUpdateAudioVideo = sinon.stub().returns(
|
|
331
|
+
new Promise((resolve) => {
|
|
332
|
+
serverResponseResolve = resolve;
|
|
333
|
+
})
|
|
334
|
+
);
|
|
315
335
|
|
|
316
336
|
let firstClientPromiseResolved = false;
|
|
317
337
|
let secondClientPromiseResolved = false;
|
|
318
338
|
|
|
319
339
|
// 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
|
-
});
|
|
340
|
+
audio.handleClientRequest(meeting, true).then(() => {
|
|
341
|
+
firstClientPromiseResolved = true;
|
|
342
|
+
});
|
|
343
|
+
audio.handleClientRequest(meeting, false).then(() => {
|
|
344
|
+
secondClientPromiseResolved = true;
|
|
345
|
+
});
|
|
328
346
|
|
|
329
347
|
await testUtils.flushPromises();
|
|
330
348
|
|
|
@@ -351,7 +369,8 @@ describe('plugin-meetings', () => {
|
|
|
351
369
|
it('rejects client request to unmute if hard mute is used', (done) => {
|
|
352
370
|
audio.handleServerRemoteMuteUpdate(true, false);
|
|
353
371
|
|
|
354
|
-
audio
|
|
372
|
+
audio
|
|
373
|
+
.handleClientRequest(meeting, false)
|
|
355
374
|
.then(() => {
|
|
356
375
|
done(new Error('expected handleClientRequest to fail, but it did not!'));
|
|
357
376
|
})
|
|
@@ -369,11 +388,11 @@ describe('plugin-meetings', () => {
|
|
|
369
388
|
assert.isTrue(video.isSelf());
|
|
370
389
|
|
|
371
390
|
// check local mute is done, but not remote one
|
|
372
|
-
assert.calledWith(
|
|
391
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, true);
|
|
373
392
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, undefined, true, meeting);
|
|
374
393
|
assert.notCalled(meeting.members.muteMember);
|
|
375
394
|
|
|
376
|
-
|
|
395
|
+
meeting.mediaProperties.videoTrack.setMuted.resetHistory();
|
|
377
396
|
MeetingUtil.remoteUpdateAudioVideo.resetHistory();
|
|
378
397
|
meeting.members.muteMember.resetHistory();
|
|
379
398
|
|
|
@@ -383,7 +402,7 @@ describe('plugin-meetings', () => {
|
|
|
383
402
|
assert.isFalse(video.isMuted());
|
|
384
403
|
assert.isFalse(video.isSelf());
|
|
385
404
|
|
|
386
|
-
assert.calledWith(
|
|
405
|
+
assert.calledWith(meeting.mediaProperties.videoTrack.setMuted, false);
|
|
387
406
|
assert.calledWith(MeetingUtil.remoteUpdateAudioVideo, undefined, false, meeting);
|
|
388
407
|
assert.notCalled(meeting.members.muteMember);
|
|
389
408
|
});
|
|
@@ -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
|
});
|