@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.30
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/index.js +374 -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 +23 -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 +92 -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 +4 -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 +64 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +80 -114
- 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/effectsState.js +125 -190
- package/dist/meeting/effectsState.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 +2142 -2101
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +39 -80
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +224 -230
- 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 +43 -215
- 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 +94 -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 +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +55 -135
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +57 -33
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +30 -50
- 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 +18 -58
- 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 +138 -182
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +3 -18
- 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 -455
- 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 +39 -64
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +94 -113
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +85 -94
- 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 +357 -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/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +1 -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 +899 -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 +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +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 +107 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/effectsState.d.ts +42 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
- package/dist/types/meeting/index.d.ts +1724 -0
- package/dist/types/meeting/muteState.d.ts +108 -0
- package/dist/types/meeting/request.d.ts +261 -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 +178 -0
- package/dist/types/metrics/constants.d.ts +57 -0
- package/dist/types/metrics/index.d.ts +160 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +50 -0
- package/dist/types/multistream/receiveSlot.d.ts +66 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
- package/dist/types/multistream/remoteMedia.d.ts +93 -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 +35 -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 +35 -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 +25 -20
- package/src/breakouts/README.md +190 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/index.ts +353 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +15 -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 +44 -4
- 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 +2 -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} +176 -157
- package/src/media/{properties.js → properties.ts} +48 -31
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
- package/src/meeting/in-meeting-actions.ts +31 -3
- package/src/meeting/{index.js → index.ts} +2479 -1466
- package/src/meeting/{muteState.js → muteState.ts} +80 -45
- package/src/meeting/{request.js → request.ts} +292 -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} +112 -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} +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} +254 -83
- package/src/metrics/{constants.js → constants.ts} +0 -2
- package/src/metrics/{index.js → index.ts} +106 -74
- package/src/multistream/mediaRequestManager.ts +79 -15
- package/src/multistream/receiveSlot.ts +42 -13
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +15 -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} +99 -83
- package/src/reachability/request.ts +39 -33
- 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} +195 -102
- 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} +73 -56
- package/src/roap/request.ts +157 -0
- package/src/roap/turnDiscovery.ts +77 -37
- 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 +664 -463
- 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/index.ts +464 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +21 -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 +31 -47
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/effectsState.js +39 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2214 -746
- package/test/unit/spec/meeting/muteState.js +43 -34
- package/test/unit/spec/meeting/request.js +115 -44
- package/test/unit/spec/meeting/utils.js +104 -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 +312 -50
- package/test/unit/spec/multistream/receiveSlot.ts +57 -6
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +10 -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 +58 -26
- package/test/unit/spec/reconnection-manager/index.js +102 -9
- 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 +2 -1
- package/test/unit/spec/roap/request.ts +114 -0
- package/test/unit/spec/roap/turnDiscovery.ts +64 -45
- 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 +96 -80
- 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/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-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/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -4,12 +4,13 @@ import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
|
|
|
4
4
|
|
|
5
5
|
import RoapRequest from '@webex/plugin-meetings/src/roap/request';
|
|
6
6
|
import Roap from '@webex/plugin-meetings/src/roap/';
|
|
7
|
+
import Meeting from '@webex/plugin-meetings/src/meeting';
|
|
7
8
|
|
|
8
9
|
describe('Roap', () => {
|
|
9
10
|
describe('doTurnDiscovery', () => {
|
|
10
11
|
it('calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments', async () => {
|
|
11
12
|
const RESULT = {something: 'some value'};
|
|
12
|
-
const meeting = {id: 'some meeting id'};
|
|
13
|
+
const meeting = {id: 'some meeting id'} as Meeting;
|
|
13
14
|
|
|
14
15
|
const doTurnDiscoveryStub = sinon
|
|
15
16
|
.stub(TurnDiscovery.prototype, 'doTurnDiscovery')
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
import MockWebex from '@webex/test-helper-mock-webex';
|
|
4
|
+
import Metrics from '@webex/plugin-meetings/src/metrics';
|
|
5
|
+
|
|
6
|
+
import RoapRequest from '@webex/plugin-meetings/src/roap/request';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
describe('RoapRequest', () => {
|
|
10
|
+
describe('attachRechabilityData', () => {
|
|
11
|
+
let webex;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
webex = new MockWebex();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('attaches the reachability data when it exists', async () => {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
20
|
+
|
|
21
|
+
const sdp = {some: 'attribute'};
|
|
22
|
+
|
|
23
|
+
const reachabilitData = {reachability: 'data'};
|
|
24
|
+
|
|
25
|
+
await webex.boundedStorage.put(
|
|
26
|
+
'Reachability',
|
|
27
|
+
'reachability.result',
|
|
28
|
+
JSON.stringify(reachabilitData)
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const newSdp = await roapRequest.attachRechabilityData(sdp);
|
|
32
|
+
|
|
33
|
+
assert.deepEqual(newSdp, {
|
|
34
|
+
some: 'attribute',
|
|
35
|
+
reachability: reachabilitData
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('handles the case when realiability data does not exist', async () => {
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
42
|
+
|
|
43
|
+
const sdp = {some: 'attribute'};
|
|
44
|
+
|
|
45
|
+
const newSdp = await roapRequest.attachRechabilityData(sdp);
|
|
46
|
+
|
|
47
|
+
assert.deepEqual(newSdp, sdp);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('sendRoap', () => {
|
|
52
|
+
let webex;
|
|
53
|
+
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
webex = new MockWebex();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('calls attachReliabilityData', async () => {
|
|
59
|
+
Metrics.postEvent = sinon.stub();
|
|
60
|
+
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
const roapRequest = new RoapRequest({}, {parent: webex});
|
|
63
|
+
|
|
64
|
+
const newSdp = {new: 'sdp'}
|
|
65
|
+
|
|
66
|
+
roapRequest.attachRechabilityData = sinon.stub().returns(Promise.resolve(newSdp));
|
|
67
|
+
webex.request.returns(Promise.resolve({
|
|
68
|
+
body: {
|
|
69
|
+
locus: {}
|
|
70
|
+
}
|
|
71
|
+
}))
|
|
72
|
+
|
|
73
|
+
const result = await roapRequest.sendRoap({
|
|
74
|
+
roapMessage: {seq: 1},
|
|
75
|
+
locusSelfUrl: 'locusSelfUrl',
|
|
76
|
+
mediaId: 'mediaId',
|
|
77
|
+
correlationId: 'correlationId',
|
|
78
|
+
audioMuted: true,
|
|
79
|
+
videoMuted: true,
|
|
80
|
+
meetingId: 'meetingId',
|
|
81
|
+
preferTranscoding: true
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
assert.calledOnceWithExactly(webex.request, {
|
|
85
|
+
uri: 'locusSelfUrl/media',
|
|
86
|
+
method: 'PUT',
|
|
87
|
+
body: {
|
|
88
|
+
device: {
|
|
89
|
+
url: undefined,
|
|
90
|
+
deviceType: undefined,
|
|
91
|
+
},
|
|
92
|
+
correlationId: 'correlationId',
|
|
93
|
+
localMedias: [{
|
|
94
|
+
localSdp: JSON.stringify(newSdp),
|
|
95
|
+
mediaId: 'mediaId'
|
|
96
|
+
}],
|
|
97
|
+
clientMediaPreferences: {preferTranscoding: true}
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
assert.calledOnceWithExactly(roapRequest.attachRechabilityData, {
|
|
102
|
+
roapMessage: {seq: 1},
|
|
103
|
+
audioMuted: true,
|
|
104
|
+
videoMuted: true
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
assert.deepEqual(result, {
|
|
108
|
+
locus: {
|
|
109
|
+
roapSeq: 1
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
})
|
|
114
|
+
});
|
|
@@ -25,15 +25,15 @@ describe('TurnDiscovery', () => {
|
|
|
25
25
|
sinon.stub(Metrics, 'sendBehavioralMetric');
|
|
26
26
|
|
|
27
27
|
mockRoapRequest = {
|
|
28
|
-
sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS})
|
|
28
|
+
sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS}),
|
|
29
29
|
} as unknown as RoapRequest;
|
|
30
30
|
|
|
31
31
|
testMeeting = {
|
|
32
32
|
id: 'fake meeting id',
|
|
33
33
|
config: {
|
|
34
34
|
experimental: {
|
|
35
|
-
enableTurnDiscovery: true
|
|
36
|
-
}
|
|
35
|
+
enableTurnDiscovery: true,
|
|
36
|
+
},
|
|
37
37
|
},
|
|
38
38
|
correlationId: 'fake correlation id',
|
|
39
39
|
selfUrl: 'fake self url',
|
|
@@ -46,7 +46,8 @@ describe('TurnDiscovery', () => {
|
|
|
46
46
|
testMeeting.roapSeq = newSeq;
|
|
47
47
|
}),
|
|
48
48
|
updateMediaConnections: sinon.stub(),
|
|
49
|
-
webex: {meetings: {reachability: {isAnyClusterReachable: () => false}}}
|
|
49
|
+
webex: {meetings: {reachability: {isAnyClusterReachable: () => Promise.resolve(false)}}},
|
|
50
|
+
isMultistream: false
|
|
50
51
|
};
|
|
51
52
|
});
|
|
52
53
|
|
|
@@ -55,7 +56,11 @@ describe('TurnDiscovery', () => {
|
|
|
55
56
|
sinon.restore();
|
|
56
57
|
});
|
|
57
58
|
|
|
58
|
-
const checkRoapMessageSent = async (
|
|
59
|
+
const checkRoapMessageSent = async (
|
|
60
|
+
messageType,
|
|
61
|
+
expectedSeq,
|
|
62
|
+
expectedMediaId = testMeeting.mediaId
|
|
63
|
+
) => {
|
|
59
64
|
await testUtils.flushPromises();
|
|
60
65
|
|
|
61
66
|
assert.calledOnce(mockRoapRequest.sendRoap);
|
|
@@ -70,7 +75,8 @@ describe('TurnDiscovery', () => {
|
|
|
70
75
|
mediaId: expectedMediaId,
|
|
71
76
|
audioMuted: testMeeting.isAudioMuted(),
|
|
72
77
|
videoMuted: testMeeting.isVideoMuted(),
|
|
73
|
-
meetingId: testMeeting.id
|
|
78
|
+
meetingId: testMeeting.id,
|
|
79
|
+
preferTranscoding: !testMeeting.isMultistream
|
|
74
80
|
});
|
|
75
81
|
|
|
76
82
|
if (messageType === 'TURN_DISCOVERY_REQUEST') {
|
|
@@ -93,39 +99,44 @@ describe('TurnDiscovery', () => {
|
|
|
93
99
|
};
|
|
94
100
|
|
|
95
101
|
describe('doTurnDiscovery', () => {
|
|
96
|
-
|
|
97
|
-
|
|
102
|
+
[false, true].forEach(function (enabledMultistream ) {
|
|
103
|
+
it('sends TURN_DISCOVERY_REQUEST'+ (enabledMultistream ? ' when enable Multistream':'') + ', waits for response and sends OK', async () => {
|
|
104
|
+
testMeeting.isMultistream = enabledMultistream;
|
|
98
105
|
|
|
99
|
-
|
|
106
|
+
const td = new TurnDiscovery(mockRoapRequest);
|
|
100
107
|
|
|
101
|
-
|
|
102
|
-
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
108
|
+
const result = td.doTurnDiscovery(testMeeting, false);
|
|
103
109
|
|
|
104
|
-
|
|
110
|
+
// check that TURN_DISCOVERY_REQUEST was sent
|
|
111
|
+
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
headers: [
|
|
109
|
-
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
110
|
-
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
111
|
-
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
112
|
-
]
|
|
113
|
-
});
|
|
113
|
+
// @ts-ignore
|
|
114
|
+
mockRoapRequest.sendRoap.resetHistory();
|
|
114
115
|
|
|
115
|
-
|
|
116
|
+
// simulate the response
|
|
117
|
+
td.handleTurnDiscoveryResponse({
|
|
118
|
+
headers: [
|
|
119
|
+
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
120
|
+
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
121
|
+
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
122
|
+
]
|
|
123
|
+
});
|
|
116
124
|
|
|
117
|
-
|
|
118
|
-
await checkRoapMessageSent('OK', 0);
|
|
125
|
+
await testUtils.flushPromises();
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
// check that we've sent OK
|
|
128
|
+
await checkRoapMessageSent('OK', 0);
|
|
121
129
|
|
|
122
|
-
|
|
123
|
-
url: FAKE_TURN_URL,
|
|
124
|
-
username: FAKE_TURN_USERNAME,
|
|
125
|
-
password: FAKE_TURN_PASSWORD
|
|
126
|
-
});
|
|
130
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await result;
|
|
127
131
|
|
|
128
|
-
|
|
132
|
+
assert.deepEqual(turnServerInfo, {
|
|
133
|
+
url: FAKE_TURN_URL,
|
|
134
|
+
username: FAKE_TURN_USERNAME,
|
|
135
|
+
password: FAKE_TURN_PASSWORD
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
assert.isUndefined(turnDiscoverySkippedReason);
|
|
139
|
+
});
|
|
129
140
|
});
|
|
130
141
|
|
|
131
142
|
it('sends TURN_DISCOVERY_REQUEST with empty mediaId when isReconnecting is true', async () => {
|
|
@@ -137,6 +148,7 @@ describe('TurnDiscovery', () => {
|
|
|
137
148
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0, '');
|
|
138
149
|
|
|
139
150
|
// the main part of the test is complete now, checking the remaining part of the flow just for completeness
|
|
151
|
+
// @ts-ignore
|
|
140
152
|
mockRoapRequest.sendRoap.resetHistory();
|
|
141
153
|
|
|
142
154
|
// simulate the response
|
|
@@ -145,7 +157,7 @@ describe('TurnDiscovery', () => {
|
|
|
145
157
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
146
158
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
147
159
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
148
|
-
]
|
|
160
|
+
],
|
|
149
161
|
});
|
|
150
162
|
|
|
151
163
|
await testUtils.flushPromises();
|
|
@@ -158,7 +170,7 @@ describe('TurnDiscovery', () => {
|
|
|
158
170
|
assert.deepEqual(turnServerInfo, {
|
|
159
171
|
url: FAKE_TURN_URL,
|
|
160
172
|
username: FAKE_TURN_USERNAME,
|
|
161
|
-
password: FAKE_TURN_PASSWORD
|
|
173
|
+
password: FAKE_TURN_PASSWORD,
|
|
162
174
|
});
|
|
163
175
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
164
176
|
});
|
|
@@ -169,7 +181,7 @@ describe('TurnDiscovery', () => {
|
|
|
169
181
|
|
|
170
182
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
171
183
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
172
|
-
|
|
184
|
+
// @ts-ignore
|
|
173
185
|
mockRoapRequest.sendRoap.resetHistory();
|
|
174
186
|
|
|
175
187
|
// simulate the response with some extra headers
|
|
@@ -181,7 +193,7 @@ describe('TurnDiscovery', () => {
|
|
|
181
193
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
182
194
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
183
195
|
'another-header-at-the-end=12345',
|
|
184
|
-
]
|
|
196
|
+
],
|
|
185
197
|
});
|
|
186
198
|
|
|
187
199
|
await testUtils.flushPromises();
|
|
@@ -193,7 +205,7 @@ describe('TurnDiscovery', () => {
|
|
|
193
205
|
assert.deepEqual(turnServerInfo, {
|
|
194
206
|
url: FAKE_TURN_URL,
|
|
195
207
|
username: FAKE_TURN_USERNAME,
|
|
196
|
-
password: FAKE_TURN_PASSWORD
|
|
208
|
+
password: FAKE_TURN_PASSWORD,
|
|
197
209
|
});
|
|
198
210
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
199
211
|
});
|
|
@@ -202,7 +214,7 @@ describe('TurnDiscovery', () => {
|
|
|
202
214
|
const prevConfigValue = testMeeting.config.experimental.enableTurnDiscovery;
|
|
203
215
|
|
|
204
216
|
testMeeting.config.experimental.enableTurnDiscovery = false;
|
|
205
|
-
|
|
217
|
+
// @ts-ignore
|
|
206
218
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
207
219
|
|
|
208
220
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -232,7 +244,7 @@ describe('TurnDiscovery', () => {
|
|
|
232
244
|
|
|
233
245
|
it('resolves with undefined when cluster is reachable', async () => {
|
|
234
246
|
const prev = testMeeting.webex.meetings.reachability.isAnyClusterReachable;
|
|
235
|
-
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => true;
|
|
247
|
+
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => Promise.resolve(true);
|
|
236
248
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
237
249
|
|
|
238
250
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -242,10 +254,9 @@ describe('TurnDiscovery', () => {
|
|
|
242
254
|
assert.notCalled(mockRoapRequest.sendRoap);
|
|
243
255
|
assert.notCalled(Metrics.sendBehavioralMetric);
|
|
244
256
|
testMeeting.webex.meetings.reachability.isAnyClusterReachable = prev;
|
|
245
|
-
|
|
246
257
|
});
|
|
247
258
|
|
|
248
|
-
it(
|
|
259
|
+
it("resolves with undefined if we don't get a response within 10s", async () => {
|
|
249
260
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
250
261
|
|
|
251
262
|
const promise = td.doTurnDiscovery(testMeeting, false);
|
|
@@ -264,12 +275,14 @@ describe('TurnDiscovery', () => {
|
|
|
264
275
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
265
276
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
266
277
|
|
|
278
|
+
await testUtils.flushPromises();
|
|
279
|
+
|
|
267
280
|
// simulate the response without the password
|
|
268
281
|
td.handleTurnDiscoveryResponse({
|
|
269
282
|
headers: [
|
|
270
283
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
271
284
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
272
|
-
]
|
|
285
|
+
],
|
|
273
286
|
});
|
|
274
287
|
await testUtils.flushPromises();
|
|
275
288
|
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
@@ -283,6 +296,8 @@ describe('TurnDiscovery', () => {
|
|
|
283
296
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
284
297
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
285
298
|
|
|
299
|
+
await testUtils.flushPromises();
|
|
300
|
+
|
|
286
301
|
// simulate the response without the headers
|
|
287
302
|
td.handleTurnDiscoveryResponse({});
|
|
288
303
|
|
|
@@ -298,11 +313,13 @@ describe('TurnDiscovery', () => {
|
|
|
298
313
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
299
314
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
300
315
|
|
|
316
|
+
await testUtils.flushPromises();
|
|
317
|
+
|
|
301
318
|
// simulate the response without the headers
|
|
302
319
|
td.handleTurnDiscoveryResponse({headers: []});
|
|
303
320
|
|
|
304
321
|
await testUtils.flushPromises();
|
|
305
|
-
const {turnServerInfo, turnDiscoverySkippedReason}= await turnDiscoveryPromise;
|
|
322
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
306
323
|
|
|
307
324
|
assert.isUndefined(turnServerInfo);
|
|
308
325
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
@@ -314,9 +331,11 @@ describe('TurnDiscovery', () => {
|
|
|
314
331
|
|
|
315
332
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
316
333
|
|
|
334
|
+
await testUtils.flushPromises();
|
|
335
|
+
|
|
317
336
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
318
337
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
319
|
-
|
|
338
|
+
// @ts-ignore
|
|
320
339
|
mockRoapRequest.sendRoap.resetHistory();
|
|
321
340
|
|
|
322
341
|
// setup the mock so that sending of OK fails
|
|
@@ -328,7 +347,7 @@ describe('TurnDiscovery', () => {
|
|
|
328
347
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
329
348
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
330
349
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
331
|
-
]
|
|
350
|
+
],
|
|
332
351
|
});
|
|
333
352
|
|
|
334
353
|
await testUtils.flushPromises();
|
|
@@ -345,7 +364,7 @@ describe('TurnDiscovery', () => {
|
|
|
345
364
|
});
|
|
346
365
|
|
|
347
366
|
describe('handleTurnDiscoveryResponse', () => {
|
|
348
|
-
it(
|
|
367
|
+
it("doesn't do anything if turn discovery was not started", () => {
|
|
349
368
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
350
369
|
|
|
351
370
|
// there is not much we can check, but we mainly want to make
|
|
@@ -355,7 +374,7 @@ describe('TurnDiscovery', () => {
|
|
|
355
374
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
356
375
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
357
376
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
358
|
-
]
|
|
377
|
+
],
|
|
359
378
|
});
|
|
360
379
|
|
|
361
380
|
assert.notCalled(mockRoapRequest.sendRoap);
|
|
@@ -2,7 +2,7 @@ import 'jsdom-global/register';
|
|
|
2
2
|
import chai from 'chai';
|
|
3
3
|
import chaiAsPromised from 'chai-as-promised';
|
|
4
4
|
import sinon from 'sinon';
|
|
5
|
-
import {
|
|
5
|
+
import {ConnectionState} from '@webex/internal-media-core';
|
|
6
6
|
|
|
7
7
|
import {StatsAnalyzer, EVENTS} from '../../../../src/statsAnalyzer';
|
|
8
8
|
import NetworkQualityMonitor from '../../../../src/networkQualityMonitor';
|
|
@@ -20,31 +20,32 @@ describe('plugin-meetings', () => {
|
|
|
20
20
|
let sandBoxSpy;
|
|
21
21
|
|
|
22
22
|
const initialConfig = {
|
|
23
|
-
videoPacketLossRatioThreshold: 9
|
|
23
|
+
videoPacketLossRatioThreshold: 9,
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const defaultStats = {
|
|
27
|
+
resolutions: {},
|
|
27
28
|
internal: {
|
|
28
|
-
video: {
|
|
29
|
+
'video-send-1': {
|
|
29
30
|
send: {
|
|
30
|
-
totalPacketsLostOnReceiver: 10
|
|
31
|
-
}
|
|
32
|
-
}
|
|
31
|
+
totalPacketsLostOnReceiver: 10,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
33
34
|
},
|
|
34
|
-
video: {
|
|
35
|
+
'video-send-1': {
|
|
35
36
|
send: {
|
|
36
37
|
packetsSent: 2,
|
|
37
38
|
meanRemoteJitter: [],
|
|
38
|
-
meanRoundTripTime: []
|
|
39
|
-
}
|
|
40
|
-
}
|
|
39
|
+
meanRoundTripTime: [],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
const statusResult = {
|
|
44
45
|
type: 'remote-inbound-rtp',
|
|
45
46
|
packetsLost: 11,
|
|
46
47
|
rttThreshold: 501,
|
|
47
|
-
jitterThreshold: 501
|
|
48
|
+
jitterThreshold: 501,
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
const sandbox = sinon.createSandbox();
|
|
@@ -54,7 +55,10 @@ describe('plugin-meetings', () => {
|
|
|
54
55
|
|
|
55
56
|
statsAnalyzer = new StatsAnalyzer(initialConfig, networkQualityMonitor, defaultStats);
|
|
56
57
|
|
|
57
|
-
sandBoxSpy = sandbox.spy(
|
|
58
|
+
sandBoxSpy = sandbox.spy(
|
|
59
|
+
statsAnalyzer.networkQualityMonitor,
|
|
60
|
+
'determineUplinkNetworkQuality'
|
|
61
|
+
);
|
|
58
62
|
});
|
|
59
63
|
|
|
60
64
|
afterEach(() => {
|
|
@@ -62,14 +66,16 @@ describe('plugin-meetings', () => {
|
|
|
62
66
|
});
|
|
63
67
|
|
|
64
68
|
it('should trigger determineUplinkNetworkQuality with specific arguments', async () => {
|
|
65
|
-
await statsAnalyzer.parseGetStatsResult(statusResult, 'video');
|
|
69
|
+
await statsAnalyzer.parseGetStatsResult(statusResult, 'video-send-1', true);
|
|
66
70
|
|
|
67
71
|
assert.calledOnce(statsAnalyzer.networkQualityMonitor.determineUplinkNetworkQuality);
|
|
68
|
-
assert(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
assert(
|
|
73
|
+
sandBoxSpy.calledWith({
|
|
74
|
+
mediaType: 'video-send-1',
|
|
75
|
+
remoteRtpResults: statusResult,
|
|
76
|
+
statsAnalyzerCurrentStats: statsAnalyzer.statsResults,
|
|
77
|
+
})
|
|
78
|
+
);
|
|
73
79
|
});
|
|
74
80
|
});
|
|
75
81
|
|
|
@@ -105,52 +111,75 @@ describe('plugin-meetings', () => {
|
|
|
105
111
|
// bytesReceived and bytesSent need to be non-zero in order for StatsAnalyzer to parse any other values
|
|
106
112
|
fakeStats = {
|
|
107
113
|
audio: {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
senders: [
|
|
115
|
+
{
|
|
116
|
+
report: [
|
|
117
|
+
{
|
|
118
|
+
type: 'outbound-rtp',
|
|
119
|
+
packetsSent: 0,
|
|
120
|
+
bytesSent: 1,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
receivers: [
|
|
126
|
+
{
|
|
127
|
+
report: [
|
|
128
|
+
{
|
|
129
|
+
type: 'inbound-rtp',
|
|
130
|
+
packetsReceived: 0,
|
|
131
|
+
bytesReceived: 1,
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
],
|
|
118
136
|
},
|
|
119
137
|
video: {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
138
|
+
senders: [
|
|
139
|
+
{
|
|
140
|
+
report: [
|
|
141
|
+
{
|
|
142
|
+
type: 'outbound-rtp',
|
|
143
|
+
framesSent: 0,
|
|
144
|
+
bytesSent: 1,
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
receivers: [
|
|
150
|
+
{
|
|
151
|
+
report: [
|
|
152
|
+
{
|
|
153
|
+
type: 'inbound-rtp',
|
|
154
|
+
framesDecoded: 0,
|
|
155
|
+
bytesReceived: 1,
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
131
161
|
};
|
|
132
162
|
|
|
133
163
|
pc = {
|
|
134
|
-
getConnectionState: sinon.stub().returns(
|
|
164
|
+
getConnectionState: sinon.stub().returns(ConnectionState.Connected),
|
|
135
165
|
getTransceiverStats: sinon.stub().resolves({
|
|
136
166
|
audio: {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
currentDirection: 'sendrecv',
|
|
140
|
-
localTrackLabel: 'fake mic',
|
|
167
|
+
senders: [fakeStats.audio.senders[0]],
|
|
168
|
+
receivers: [fakeStats.audio.receivers[0]],
|
|
141
169
|
},
|
|
142
170
|
video: {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
171
|
+
senders: [fakeStats.video.senders[0]],
|
|
172
|
+
receivers: [fakeStats.video.receivers[0]],
|
|
173
|
+
},
|
|
174
|
+
screenShareAudio: {
|
|
175
|
+
senders: [],
|
|
176
|
+
receivers: [],
|
|
147
177
|
},
|
|
148
178
|
screenShareVideo: {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
})
|
|
179
|
+
senders: [],
|
|
180
|
+
receivers: [],
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
154
183
|
};
|
|
155
184
|
|
|
156
185
|
networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
|
|
@@ -202,7 +231,7 @@ describe('plugin-meetings', () => {
|
|
|
202
231
|
checkReceivedEvent({expected: {}});
|
|
203
232
|
|
|
204
233
|
// setup a mock to return some values higher the previous ones
|
|
205
|
-
fakeStats.audio.
|
|
234
|
+
fakeStats.audio.senders[0].report[0].packetsSent += 10;
|
|
206
235
|
|
|
207
236
|
await progressTime();
|
|
208
237
|
|
|
@@ -222,7 +251,7 @@ describe('plugin-meetings', () => {
|
|
|
222
251
|
checkReceivedEvent({expected: {}});
|
|
223
252
|
|
|
224
253
|
// setup a mock to return some values higher the previous ones
|
|
225
|
-
fakeStats.video.
|
|
254
|
+
fakeStats.video.senders[0].report[0].framesSent += 1;
|
|
226
255
|
|
|
227
256
|
await progressTime();
|
|
228
257
|
|
|
@@ -242,7 +271,7 @@ describe('plugin-meetings', () => {
|
|
|
242
271
|
checkReceivedEvent({expected: {}});
|
|
243
272
|
|
|
244
273
|
// setup a mock to return some values higher the previous ones
|
|
245
|
-
fakeStats.audio.
|
|
274
|
+
fakeStats.audio.receivers[0].report[0].packetsReceived += 5;
|
|
246
275
|
|
|
247
276
|
await progressTime();
|
|
248
277
|
// check that we got the REMOTE_MEDIA_STARTED event for audio
|
|
@@ -262,7 +291,7 @@ describe('plugin-meetings', () => {
|
|
|
262
291
|
checkReceivedEvent({expected: {}});
|
|
263
292
|
|
|
264
293
|
// setup a mock to return some values higher the previous ones
|
|
265
|
-
fakeStats.video.
|
|
294
|
+
fakeStats.video.receivers[0].report[0].framesDecoded += 1;
|
|
266
295
|
|
|
267
296
|
await progressTime();
|
|
268
297
|
// check that we got the REMOTE_MEDIA_STARTED event for video
|