@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +178 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +843 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +56 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +143 -52
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +16 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +261 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +39 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +31 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +237 -198
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +80 -89
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +56 -146
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +31 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2225 -2244
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +102 -100
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +63 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +565 -552
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +151 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +100 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +152 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +35 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +76 -46
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +4 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +59 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +116 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +58 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +342 -460
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +372 -455
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +944 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +6 -0
- package/dist/types/controls-options-manager/index.d.ts +128 -0
- package/dist/types/controls-options-manager/util.d.ts +9 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +276 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
- package/dist/types/meeting/index.d.ts +1720 -0
- package/dist/types/meeting/muteState.d.ts +132 -0
- package/dist/types/meeting/request.d.ts +271 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +315 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +343 -0
- package/dist/types/members/request.d.ts +58 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +171 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +153 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +745 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +44 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +92 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +7 -0
- package/src/controls-options-manager/index.ts +240 -0
- package/src/controls-options-manager/util.ts +30 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +141 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +211 -71
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
- package/src/media/{index.js → index.ts} +179 -176
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +67 -3
- package/src/meeting/{index.js → index.ts} +2605 -1605
- package/src/meeting/{muteState.js → muteState.ts} +138 -73
- package/src/meeting/{request.js → request.ts} +326 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +131 -115
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1275 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +99 -33
- package/src/member/{index.js → index.ts} +124 -56
- package/src/member/types.ts +24 -0
- package/src/member/{util.js → util.ts} +105 -25
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +281 -144
- package/src/members/{request.js → request.ts} +80 -16
- package/src/members/types.ts +28 -0
- package/src/members/{util.js → util.ts} +108 -55
- package/src/metrics/{config.js → config.ts} +255 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +110 -94
- package/src/multistream/mediaRequestManager.ts +144 -40
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +50 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +228 -120
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1242 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +178 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +1252 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +54 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +204 -0
- package/test/unit/spec/controls-options-manager/util.js +86 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +133 -34
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +303 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +101 -103
- package/test/unit/spec/locus-info/selfUtils.js +165 -12
- package/test/unit/spec/media/index.ts +72 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
- package/test/unit/spec/meeting/index.js +2503 -802
- package/test/unit/spec/meeting/muteState.js +146 -61
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +135 -164
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +622 -263
- package/test/unit/spec/meetings/utils.js +65 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +294 -54
- package/test/unit/spec/members/request.js +50 -20
- package/test/unit/spec/members/utils.js +147 -4
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +108 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -25,28 +25,33 @@ 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',
|
|
40
40
|
mediaId: 'fake media id',
|
|
41
41
|
locusUrl: `https://locus-a.wbx2.com/locus/api/v1/loci/${FAKE_LOCUS_ID}`,
|
|
42
42
|
roapSeq: -1,
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
audio:{
|
|
44
|
+
isLocallyMuted: () => true,
|
|
45
|
+
},
|
|
46
|
+
video:{
|
|
47
|
+
isLocallyMuted: () => false,
|
|
48
|
+
},
|
|
45
49
|
setRoapSeq: sinon.fake((newSeq) => {
|
|
46
50
|
testMeeting.roapSeq = newSeq;
|
|
47
51
|
}),
|
|
48
52
|
updateMediaConnections: sinon.stub(),
|
|
49
|
-
webex: {meetings: {reachability: {isAnyClusterReachable: () => false}}}
|
|
53
|
+
webex: {meetings: {reachability: {isAnyClusterReachable: () => Promise.resolve(false)}}},
|
|
54
|
+
isMultistream: false
|
|
50
55
|
};
|
|
51
56
|
});
|
|
52
57
|
|
|
@@ -55,7 +60,11 @@ describe('TurnDiscovery', () => {
|
|
|
55
60
|
sinon.restore();
|
|
56
61
|
});
|
|
57
62
|
|
|
58
|
-
const checkRoapMessageSent = async (
|
|
63
|
+
const checkRoapMessageSent = async (
|
|
64
|
+
messageType,
|
|
65
|
+
expectedSeq,
|
|
66
|
+
expectedMediaId = testMeeting.mediaId
|
|
67
|
+
) => {
|
|
59
68
|
await testUtils.flushPromises();
|
|
60
69
|
|
|
61
70
|
assert.calledOnce(mockRoapRequest.sendRoap);
|
|
@@ -68,9 +77,10 @@ describe('TurnDiscovery', () => {
|
|
|
68
77
|
correlationId: testMeeting.correlationId,
|
|
69
78
|
locusSelfUrl: testMeeting.selfUrl,
|
|
70
79
|
mediaId: expectedMediaId,
|
|
71
|
-
audioMuted: testMeeting.
|
|
72
|
-
videoMuted: testMeeting.
|
|
73
|
-
meetingId: testMeeting.id
|
|
80
|
+
audioMuted: testMeeting.audio?.isLocallyMuted(),
|
|
81
|
+
videoMuted: testMeeting.video?.isLocallyMuted(),
|
|
82
|
+
meetingId: testMeeting.id,
|
|
83
|
+
preferTranscoding: !testMeeting.isMultistream
|
|
74
84
|
});
|
|
75
85
|
|
|
76
86
|
if (messageType === 'TURN_DISCOVERY_REQUEST') {
|
|
@@ -93,39 +103,44 @@ describe('TurnDiscovery', () => {
|
|
|
93
103
|
};
|
|
94
104
|
|
|
95
105
|
describe('doTurnDiscovery', () => {
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
[false, true].forEach(function (enabledMultistream ) {
|
|
107
|
+
it('sends TURN_DISCOVERY_REQUEST'+ (enabledMultistream ? ' when enable Multistream':'') + ', waits for response and sends OK', async () => {
|
|
108
|
+
testMeeting.isMultistream = enabledMultistream;
|
|
98
109
|
|
|
99
|
-
|
|
110
|
+
const td = new TurnDiscovery(mockRoapRequest);
|
|
100
111
|
|
|
101
|
-
|
|
102
|
-
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
112
|
+
const result = td.doTurnDiscovery(testMeeting, false);
|
|
103
113
|
|
|
104
|
-
|
|
114
|
+
// check that TURN_DISCOVERY_REQUEST was sent
|
|
115
|
+
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
105
116
|
|
|
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
|
-
});
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
mockRoapRequest.sendRoap.resetHistory();
|
|
114
119
|
|
|
115
|
-
|
|
120
|
+
// simulate the response
|
|
121
|
+
td.handleTurnDiscoveryResponse({
|
|
122
|
+
headers: [
|
|
123
|
+
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
124
|
+
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
125
|
+
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
126
|
+
]
|
|
127
|
+
});
|
|
116
128
|
|
|
117
|
-
|
|
118
|
-
await checkRoapMessageSent('OK', 0);
|
|
129
|
+
await testUtils.flushPromises();
|
|
119
130
|
|
|
120
|
-
|
|
131
|
+
// check that we've sent OK
|
|
132
|
+
await checkRoapMessageSent('OK', 0);
|
|
121
133
|
|
|
122
|
-
|
|
123
|
-
url: FAKE_TURN_URL,
|
|
124
|
-
username: FAKE_TURN_USERNAME,
|
|
125
|
-
password: FAKE_TURN_PASSWORD
|
|
126
|
-
});
|
|
134
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await result;
|
|
127
135
|
|
|
128
|
-
|
|
136
|
+
assert.deepEqual(turnServerInfo, {
|
|
137
|
+
url: FAKE_TURN_URL,
|
|
138
|
+
username: FAKE_TURN_USERNAME,
|
|
139
|
+
password: FAKE_TURN_PASSWORD
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
assert.isUndefined(turnDiscoverySkippedReason);
|
|
143
|
+
});
|
|
129
144
|
});
|
|
130
145
|
|
|
131
146
|
it('sends TURN_DISCOVERY_REQUEST with empty mediaId when isReconnecting is true', async () => {
|
|
@@ -137,6 +152,7 @@ describe('TurnDiscovery', () => {
|
|
|
137
152
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0, '');
|
|
138
153
|
|
|
139
154
|
// the main part of the test is complete now, checking the remaining part of the flow just for completeness
|
|
155
|
+
// @ts-ignore
|
|
140
156
|
mockRoapRequest.sendRoap.resetHistory();
|
|
141
157
|
|
|
142
158
|
// simulate the response
|
|
@@ -145,7 +161,7 @@ describe('TurnDiscovery', () => {
|
|
|
145
161
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
146
162
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
147
163
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
148
|
-
]
|
|
164
|
+
],
|
|
149
165
|
});
|
|
150
166
|
|
|
151
167
|
await testUtils.flushPromises();
|
|
@@ -158,7 +174,7 @@ describe('TurnDiscovery', () => {
|
|
|
158
174
|
assert.deepEqual(turnServerInfo, {
|
|
159
175
|
url: FAKE_TURN_URL,
|
|
160
176
|
username: FAKE_TURN_USERNAME,
|
|
161
|
-
password: FAKE_TURN_PASSWORD
|
|
177
|
+
password: FAKE_TURN_PASSWORD,
|
|
162
178
|
});
|
|
163
179
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
164
180
|
});
|
|
@@ -169,7 +185,7 @@ describe('TurnDiscovery', () => {
|
|
|
169
185
|
|
|
170
186
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
171
187
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
172
|
-
|
|
188
|
+
// @ts-ignore
|
|
173
189
|
mockRoapRequest.sendRoap.resetHistory();
|
|
174
190
|
|
|
175
191
|
// simulate the response with some extra headers
|
|
@@ -181,7 +197,7 @@ describe('TurnDiscovery', () => {
|
|
|
181
197
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
182
198
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
183
199
|
'another-header-at-the-end=12345',
|
|
184
|
-
]
|
|
200
|
+
],
|
|
185
201
|
});
|
|
186
202
|
|
|
187
203
|
await testUtils.flushPromises();
|
|
@@ -193,7 +209,7 @@ describe('TurnDiscovery', () => {
|
|
|
193
209
|
assert.deepEqual(turnServerInfo, {
|
|
194
210
|
url: FAKE_TURN_URL,
|
|
195
211
|
username: FAKE_TURN_USERNAME,
|
|
196
|
-
password: FAKE_TURN_PASSWORD
|
|
212
|
+
password: FAKE_TURN_PASSWORD,
|
|
197
213
|
});
|
|
198
214
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
199
215
|
});
|
|
@@ -202,7 +218,7 @@ describe('TurnDiscovery', () => {
|
|
|
202
218
|
const prevConfigValue = testMeeting.config.experimental.enableTurnDiscovery;
|
|
203
219
|
|
|
204
220
|
testMeeting.config.experimental.enableTurnDiscovery = false;
|
|
205
|
-
|
|
221
|
+
// @ts-ignore
|
|
206
222
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
207
223
|
|
|
208
224
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -232,7 +248,7 @@ describe('TurnDiscovery', () => {
|
|
|
232
248
|
|
|
233
249
|
it('resolves with undefined when cluster is reachable', async () => {
|
|
234
250
|
const prev = testMeeting.webex.meetings.reachability.isAnyClusterReachable;
|
|
235
|
-
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => true;
|
|
251
|
+
testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => Promise.resolve(true);
|
|
236
252
|
const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
|
|
237
253
|
|
|
238
254
|
const {turnServerInfo, turnDiscoverySkippedReason} = result;
|
|
@@ -242,10 +258,9 @@ describe('TurnDiscovery', () => {
|
|
|
242
258
|
assert.notCalled(mockRoapRequest.sendRoap);
|
|
243
259
|
assert.notCalled(Metrics.sendBehavioralMetric);
|
|
244
260
|
testMeeting.webex.meetings.reachability.isAnyClusterReachable = prev;
|
|
245
|
-
|
|
246
261
|
});
|
|
247
262
|
|
|
248
|
-
it(
|
|
263
|
+
it("resolves with undefined if we don't get a response within 10s", async () => {
|
|
249
264
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
250
265
|
|
|
251
266
|
const promise = td.doTurnDiscovery(testMeeting, false);
|
|
@@ -264,12 +279,14 @@ describe('TurnDiscovery', () => {
|
|
|
264
279
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
265
280
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
266
281
|
|
|
282
|
+
await testUtils.flushPromises();
|
|
283
|
+
|
|
267
284
|
// simulate the response without the password
|
|
268
285
|
td.handleTurnDiscoveryResponse({
|
|
269
286
|
headers: [
|
|
270
287
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
271
288
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
272
|
-
]
|
|
289
|
+
],
|
|
273
290
|
});
|
|
274
291
|
await testUtils.flushPromises();
|
|
275
292
|
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
@@ -283,6 +300,8 @@ describe('TurnDiscovery', () => {
|
|
|
283
300
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
284
301
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
285
302
|
|
|
303
|
+
await testUtils.flushPromises();
|
|
304
|
+
|
|
286
305
|
// simulate the response without the headers
|
|
287
306
|
td.handleTurnDiscoveryResponse({});
|
|
288
307
|
|
|
@@ -298,11 +317,13 @@ describe('TurnDiscovery', () => {
|
|
|
298
317
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
299
318
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
300
319
|
|
|
320
|
+
await testUtils.flushPromises();
|
|
321
|
+
|
|
301
322
|
// simulate the response without the headers
|
|
302
323
|
td.handleTurnDiscoveryResponse({headers: []});
|
|
303
324
|
|
|
304
325
|
await testUtils.flushPromises();
|
|
305
|
-
const {turnServerInfo, turnDiscoverySkippedReason}= await turnDiscoveryPromise;
|
|
326
|
+
const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
|
|
306
327
|
|
|
307
328
|
assert.isUndefined(turnServerInfo);
|
|
308
329
|
assert.isUndefined(turnDiscoverySkippedReason);
|
|
@@ -314,9 +335,11 @@ describe('TurnDiscovery', () => {
|
|
|
314
335
|
|
|
315
336
|
const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
|
|
316
337
|
|
|
338
|
+
await testUtils.flushPromises();
|
|
339
|
+
|
|
317
340
|
// check that TURN_DISCOVERY_REQUEST was sent
|
|
318
341
|
await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
|
|
319
|
-
|
|
342
|
+
// @ts-ignore
|
|
320
343
|
mockRoapRequest.sendRoap.resetHistory();
|
|
321
344
|
|
|
322
345
|
// setup the mock so that sending of OK fails
|
|
@@ -328,7 +351,7 @@ describe('TurnDiscovery', () => {
|
|
|
328
351
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
329
352
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
330
353
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
331
|
-
]
|
|
354
|
+
],
|
|
332
355
|
});
|
|
333
356
|
|
|
334
357
|
await testUtils.flushPromises();
|
|
@@ -345,7 +368,7 @@ describe('TurnDiscovery', () => {
|
|
|
345
368
|
});
|
|
346
369
|
|
|
347
370
|
describe('handleTurnDiscoveryResponse', () => {
|
|
348
|
-
it(
|
|
371
|
+
it("doesn't do anything if turn discovery was not started", () => {
|
|
349
372
|
const td = new TurnDiscovery(mockRoapRequest);
|
|
350
373
|
|
|
351
374
|
// there is not much we can check, but we mainly want to make
|
|
@@ -355,7 +378,7 @@ describe('TurnDiscovery', () => {
|
|
|
355
378
|
`x-cisco-turn-url=${FAKE_TURN_URL}`,
|
|
356
379
|
`x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
|
|
357
380
|
`x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
|
|
358
|
-
]
|
|
381
|
+
],
|
|
359
382
|
});
|
|
360
383
|
|
|
361
384
|
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
|
|
|
@@ -78,6 +84,7 @@ describe('plugin-meetings', () => {
|
|
|
78
84
|
let pc;
|
|
79
85
|
let networkQualityMonitor;
|
|
80
86
|
let statsAnalyzer;
|
|
87
|
+
let mqeData;
|
|
81
88
|
|
|
82
89
|
let receivedEventsData = {
|
|
83
90
|
local: {},
|
|
@@ -105,52 +112,78 @@ describe('plugin-meetings', () => {
|
|
|
105
112
|
// bytesReceived and bytesSent need to be non-zero in order for StatsAnalyzer to parse any other values
|
|
106
113
|
fakeStats = {
|
|
107
114
|
audio: {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
senders: [
|
|
116
|
+
{
|
|
117
|
+
report: [
|
|
118
|
+
{
|
|
119
|
+
type: 'outbound-rtp',
|
|
120
|
+
packetsSent: 0,
|
|
121
|
+
bytesSent: 1,
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
receivers: [
|
|
127
|
+
{
|
|
128
|
+
report: [
|
|
129
|
+
{
|
|
130
|
+
type: 'inbound-rtp',
|
|
131
|
+
packetsReceived: 0,
|
|
132
|
+
bytesReceived: 1,
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
],
|
|
118
137
|
},
|
|
119
138
|
video: {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
139
|
+
senders: [
|
|
140
|
+
{
|
|
141
|
+
report: [
|
|
142
|
+
{
|
|
143
|
+
type: 'outbound-rtp',
|
|
144
|
+
framesSent: 0,
|
|
145
|
+
bytesSent: 1,
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
receivers: [
|
|
151
|
+
{
|
|
152
|
+
report: [
|
|
153
|
+
{
|
|
154
|
+
type: 'inbound-rtp',
|
|
155
|
+
framesDecoded: 0,
|
|
156
|
+
bytesReceived: 1,
|
|
157
|
+
frameHeight: 720,
|
|
158
|
+
frameWidth: 1280,
|
|
159
|
+
framesReceived: 1,
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
},
|
|
131
165
|
};
|
|
132
166
|
|
|
133
167
|
pc = {
|
|
134
|
-
getConnectionState: sinon.stub().returns(
|
|
168
|
+
getConnectionState: sinon.stub().returns(ConnectionState.Connected),
|
|
135
169
|
getTransceiverStats: sinon.stub().resolves({
|
|
136
170
|
audio: {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
currentDirection: 'sendrecv',
|
|
140
|
-
localTrackLabel: 'fake mic',
|
|
171
|
+
senders: [fakeStats.audio.senders[0]],
|
|
172
|
+
receivers: [fakeStats.audio.receivers[0]],
|
|
141
173
|
},
|
|
142
174
|
video: {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
175
|
+
senders: [fakeStats.video.senders[0]],
|
|
176
|
+
receivers: [fakeStats.video.receivers[0]],
|
|
177
|
+
},
|
|
178
|
+
screenShareAudio: {
|
|
179
|
+
senders: [],
|
|
180
|
+
receivers: [],
|
|
147
181
|
},
|
|
148
182
|
screenShareVideo: {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
})
|
|
183
|
+
senders: [],
|
|
184
|
+
receivers: [],
|
|
185
|
+
},
|
|
186
|
+
}),
|
|
154
187
|
};
|
|
155
188
|
|
|
156
189
|
networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
|
|
@@ -169,6 +202,9 @@ describe('plugin-meetings', () => {
|
|
|
169
202
|
statsAnalyzer.on(EVENTS.REMOTE_MEDIA_STOPPED, (data) => {
|
|
170
203
|
receivedEventsData.remote.stopped = data;
|
|
171
204
|
});
|
|
205
|
+
statsAnalyzer.on(EVENTS.MEDIA_QUALITY, ({data}) => {
|
|
206
|
+
mqeData = data;
|
|
207
|
+
});
|
|
172
208
|
});
|
|
173
209
|
|
|
174
210
|
afterEach(() => {
|
|
@@ -195,6 +231,12 @@ describe('plugin-meetings', () => {
|
|
|
195
231
|
assert.deepEqual(receivedEventsData.remote.stopped, expected.remote?.stopped);
|
|
196
232
|
};
|
|
197
233
|
|
|
234
|
+
const checkMqeData = () => {
|
|
235
|
+
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedFrameSize, 3600);
|
|
236
|
+
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedHeight, 720);
|
|
237
|
+
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedWidth, 1280);
|
|
238
|
+
};
|
|
239
|
+
|
|
198
240
|
it('emits LOCAL_MEDIA_STARTED and LOCAL_MEDIA_STOPPED events for audio', async () => {
|
|
199
241
|
await startStatsAnalyzer({expected: {sendAudio: true}});
|
|
200
242
|
|
|
@@ -202,7 +244,7 @@ describe('plugin-meetings', () => {
|
|
|
202
244
|
checkReceivedEvent({expected: {}});
|
|
203
245
|
|
|
204
246
|
// setup a mock to return some values higher the previous ones
|
|
205
|
-
fakeStats.audio.
|
|
247
|
+
fakeStats.audio.senders[0].report[0].packetsSent += 10;
|
|
206
248
|
|
|
207
249
|
await progressTime();
|
|
208
250
|
|
|
@@ -222,7 +264,7 @@ describe('plugin-meetings', () => {
|
|
|
222
264
|
checkReceivedEvent({expected: {}});
|
|
223
265
|
|
|
224
266
|
// setup a mock to return some values higher the previous ones
|
|
225
|
-
fakeStats.video.
|
|
267
|
+
fakeStats.video.senders[0].report[0].framesSent += 1;
|
|
226
268
|
|
|
227
269
|
await progressTime();
|
|
228
270
|
|
|
@@ -242,7 +284,7 @@ describe('plugin-meetings', () => {
|
|
|
242
284
|
checkReceivedEvent({expected: {}});
|
|
243
285
|
|
|
244
286
|
// setup a mock to return some values higher the previous ones
|
|
245
|
-
fakeStats.audio.
|
|
287
|
+
fakeStats.audio.receivers[0].report[0].packetsReceived += 5;
|
|
246
288
|
|
|
247
289
|
await progressTime();
|
|
248
290
|
// check that we got the REMOTE_MEDIA_STARTED event for audio
|
|
@@ -262,7 +304,7 @@ describe('plugin-meetings', () => {
|
|
|
262
304
|
checkReceivedEvent({expected: {}});
|
|
263
305
|
|
|
264
306
|
// setup a mock to return some values higher the previous ones
|
|
265
|
-
fakeStats.video.
|
|
307
|
+
fakeStats.video.receivers[0].report[0].framesDecoded += 1;
|
|
266
308
|
|
|
267
309
|
await progressTime();
|
|
268
310
|
// check that we got the REMOTE_MEDIA_STARTED event for video
|
|
@@ -274,6 +316,15 @@ describe('plugin-meetings', () => {
|
|
|
274
316
|
|
|
275
317
|
checkReceivedEvent({expected: {remote: {stopped: {type: 'video'}}}});
|
|
276
318
|
});
|
|
319
|
+
|
|
320
|
+
it('emits the correct MEDIA_QUALITY events', async () => {
|
|
321
|
+
await startStatsAnalyzer({expected: {receiveVideo: true}});
|
|
322
|
+
|
|
323
|
+
await progressTime();
|
|
324
|
+
|
|
325
|
+
// Check that the mqe data has been emitted and is correctly computed.
|
|
326
|
+
checkMqeData();
|
|
327
|
+
});
|
|
277
328
|
});
|
|
278
329
|
});
|
|
279
330
|
});
|