@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +137 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +546 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +48 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +109 -49
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +15 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +203 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +28 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +186 -192
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +66 -153
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +13 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2141 -2210
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +59 -82
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +45 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +116 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +95 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +1 -13
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +54 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +74 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +48 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +60 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +60 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +360 -413
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +147 -183
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +322 -456
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +361 -449
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +137 -81
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +916 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +5 -0
- package/dist/types/controls-options-manager/index.d.ts +120 -0
- package/dist/types/controls-options-manager/util.d.ts +7 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +269 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
- package/dist/types/meeting/index.d.ts +1699 -0
- package/dist/types/meeting/muteState.d.ts +116 -0
- package/dist/types/meeting/request.d.ts +271 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +297 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +146 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +24 -0
- package/dist/types/members/index.d.ts +320 -0
- package/dist/types/members/request.d.ts +50 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +169 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
- package/dist/types/multistream/receiveSlot.d.ts +64 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +140 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +117 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +199 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +504 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +39 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +62 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +6 -0
- package/src/controls-options-manager/index.ts +183 -0
- package/src/controls-options-manager/util.ts +20 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +114 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +150 -66
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
- package/src/media/{index.js → index.ts} +182 -173
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +31 -3
- package/src/meeting/{index.js → index.ts} +2512 -1579
- package/src/meeting/{muteState.js → muteState.ts} +95 -49
- package/src/meeting/{request.js → request.ts} +326 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +117 -119
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +58 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +221 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +253 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +105 -94
- package/src/multistream/mediaRequestManager.ts +101 -39
- package/src/multistream/receiveSlot.ts +62 -26
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +38 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +152 -36
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +109 -85
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +196 -103
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1234 -0
- package/src/statsAnalyzer/mqaUtil.ts +293 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +147 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +707 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +47 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +124 -0
- package/test/unit/spec/controls-options-manager/util.js +66 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +39 -53
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2253 -811
- package/test/unit/spec/meeting/muteState.js +74 -55
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +106 -171
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
- package/test/unit/spec/multistream/receiveSlot.ts +68 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +38 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +70 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +86 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -7,11 +7,7 @@
|
|
|
7
7
|
import _ from 'lodash';
|
|
8
8
|
|
|
9
9
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
10
|
-
import {
|
|
11
|
-
ICE_GATHERING_STATE,
|
|
12
|
-
CONNECTION_STATE,
|
|
13
|
-
REACHABILITY
|
|
14
|
-
} from '../constants';
|
|
10
|
+
import {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';
|
|
15
11
|
|
|
16
12
|
import ReachabilityRequest from './request';
|
|
17
13
|
|
|
@@ -23,12 +19,17 @@ const VIDEO_MESH_TIMEOUT = 1000;
|
|
|
23
19
|
* @export
|
|
24
20
|
*/
|
|
25
21
|
export default class Reachability {
|
|
22
|
+
namespace = REACHABILITY.namespace;
|
|
23
|
+
webex: object;
|
|
24
|
+
reachabilityRequest: any;
|
|
25
|
+
clusterLatencyResults: any;
|
|
26
|
+
|
|
26
27
|
/**
|
|
27
28
|
* Creates an instance of Reachability.
|
|
28
29
|
* @param {object} webex
|
|
29
30
|
* @memberof Reachability
|
|
30
31
|
*/
|
|
31
|
-
constructor(webex) {
|
|
32
|
+
constructor(webex: object) {
|
|
32
33
|
this.webex = webex;
|
|
33
34
|
|
|
34
35
|
/**
|
|
@@ -50,7 +51,6 @@ export default class Reachability {
|
|
|
50
51
|
this.clusterLatencyResults = {};
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
|
|
54
54
|
/**
|
|
55
55
|
* fetches reachability data
|
|
56
56
|
* @returns {Object} reachability data
|
|
@@ -58,34 +58,44 @@ export default class Reachability {
|
|
|
58
58
|
* @async
|
|
59
59
|
* @memberof Reachability
|
|
60
60
|
*/
|
|
61
|
-
async gatherReachability() {
|
|
61
|
+
public async gatherReachability() {
|
|
62
62
|
this.setup();
|
|
63
63
|
|
|
64
64
|
// Remove stored reachability results to ensure no stale data
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
LoggerProxy.logger.error('Reachability:index#gatherReachability --> Error in accessing LocalStorage.');
|
|
70
|
-
|
|
71
|
-
return {};
|
|
72
|
-
}
|
|
65
|
+
// @ts-ignore
|
|
66
|
+
await this.webex.boundedStorage.del(this.namespace, REACHABILITY.localStorageResult);
|
|
67
|
+
// @ts-ignore
|
|
68
|
+
await this.webex.boundedStorage.del(this.namespace, REACHABILITY.localStorageJoinCookie);
|
|
73
69
|
|
|
74
70
|
// Fetch clusters and measure latency
|
|
75
71
|
try {
|
|
76
|
-
const clusters = await this.reachabilityRequest.getClusters();
|
|
72
|
+
const {clusters, joinCookie} = await this.reachabilityRequest.getClusters();
|
|
77
73
|
|
|
78
74
|
// Perform Reachability Check
|
|
79
75
|
const results = await this.performReachabilityCheck(clusters);
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
77
|
+
// @ts-ignore
|
|
78
|
+
await this.webex.boundedStorage.put(
|
|
79
|
+
this.namespace,
|
|
80
|
+
REACHABILITY.localStorageResult,
|
|
81
|
+
JSON.stringify(results)
|
|
82
|
+
);
|
|
83
|
+
// @ts-ignore
|
|
84
|
+
await this.webex.boundedStorage.put(
|
|
85
|
+
this.namespace,
|
|
86
|
+
REACHABILITY.localStorageJoinCookie,
|
|
87
|
+
JSON.stringify(joinCookie)
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
LoggerProxy.logger.log(
|
|
91
|
+
'Reachability:index#gatherReachability --> Reachability checks completed'
|
|
92
|
+
);
|
|
84
93
|
|
|
85
94
|
return results;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
95
|
+
} catch (getClusterError) {
|
|
96
|
+
LoggerProxy.logger.error(
|
|
97
|
+
`Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`
|
|
98
|
+
);
|
|
89
99
|
|
|
90
100
|
return {};
|
|
91
101
|
}
|
|
@@ -97,25 +107,30 @@ export default class Reachability {
|
|
|
97
107
|
* @public
|
|
98
108
|
* @memberof Reachability
|
|
99
109
|
*/
|
|
100
|
-
isAnyClusterReachable() {
|
|
110
|
+
async isAnyClusterReachable() {
|
|
101
111
|
let reachable = false;
|
|
102
|
-
|
|
112
|
+
// @ts-ignore
|
|
113
|
+
const reachabilityData = await this.webex.boundedStorage
|
|
114
|
+
.get(this.namespace, REACHABILITY.localStorageResult)
|
|
115
|
+
.catch(() => {});
|
|
103
116
|
|
|
104
117
|
if (reachabilityData) {
|
|
105
118
|
try {
|
|
106
119
|
const reachabilityResults = JSON.parse(reachabilityData);
|
|
107
120
|
|
|
108
|
-
reachable = Object.values(reachabilityResults).some(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
reachable = Object.values(reachabilityResults).some(
|
|
122
|
+
(result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'
|
|
123
|
+
);
|
|
124
|
+
} catch (e) {
|
|
125
|
+
LoggerProxy.logger.error(
|
|
126
|
+
`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
|
|
127
|
+
);
|
|
112
128
|
}
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
return reachable;
|
|
116
132
|
}
|
|
117
133
|
|
|
118
|
-
|
|
119
134
|
/**
|
|
120
135
|
* Generate peerConnection config settings
|
|
121
136
|
* @param {object} cluster
|
|
@@ -123,26 +138,20 @@ export default class Reachability {
|
|
|
123
138
|
* @private
|
|
124
139
|
* @memberof Reachability
|
|
125
140
|
*/
|
|
126
|
-
buildPeerConnectionConfig(cluster) {
|
|
127
|
-
const iceServers = _.uniq([
|
|
128
|
-
...cluster.udp,
|
|
129
|
-
...cluster.tcp
|
|
130
|
-
]).map((url) => ({
|
|
141
|
+
private buildPeerConnectionConfig(cluster: any) {
|
|
142
|
+
const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({
|
|
131
143
|
username: '',
|
|
132
144
|
credential: '',
|
|
133
|
-
urls: [url]
|
|
145
|
+
urls: [url],
|
|
134
146
|
}));
|
|
135
147
|
|
|
136
148
|
return {
|
|
137
|
-
iceServers: [
|
|
138
|
-
...iceServers
|
|
139
|
-
],
|
|
149
|
+
iceServers: [...iceServers],
|
|
140
150
|
iceCandidatePoolSize: '0',
|
|
141
|
-
iceTransportPolicy: 'all'
|
|
151
|
+
iceTransportPolicy: 'all',
|
|
142
152
|
};
|
|
143
153
|
}
|
|
144
154
|
|
|
145
|
-
|
|
146
155
|
/**
|
|
147
156
|
* Creates an RTCPeerConnection
|
|
148
157
|
* @param {object} cluster
|
|
@@ -150,24 +159,25 @@ export default class Reachability {
|
|
|
150
159
|
* @private
|
|
151
160
|
* @memberof Reachability
|
|
152
161
|
*/
|
|
153
|
-
createPeerConnection(cluster) {
|
|
162
|
+
private createPeerConnection(cluster: any) {
|
|
154
163
|
const {key, config} = cluster;
|
|
155
164
|
|
|
156
165
|
try {
|
|
157
166
|
const peerConnection = new window.RTCPeerConnection(config);
|
|
158
167
|
|
|
168
|
+
// @ts-ignore
|
|
159
169
|
peerConnection.key = key;
|
|
160
170
|
|
|
161
171
|
return peerConnection;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
172
|
+
} catch (peerConnectionError) {
|
|
173
|
+
LoggerProxy.logger.log(
|
|
174
|
+
`Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`
|
|
175
|
+
);
|
|
165
176
|
|
|
166
177
|
return null;
|
|
167
178
|
}
|
|
168
179
|
}
|
|
169
180
|
|
|
170
|
-
|
|
171
181
|
/**
|
|
172
182
|
* Gets total elapsed time
|
|
173
183
|
* @param {RTCPeerConnection} peerConnection
|
|
@@ -175,7 +185,7 @@ export default class Reachability {
|
|
|
175
185
|
* @private
|
|
176
186
|
* @memberof Reachability
|
|
177
187
|
*/
|
|
178
|
-
getElapsedTime(peerConnection) {
|
|
188
|
+
private getElapsedTime(peerConnection: any) {
|
|
179
189
|
const startTime = peerConnection.begin;
|
|
180
190
|
|
|
181
191
|
delete peerConnection.begin;
|
|
@@ -183,7 +193,6 @@ export default class Reachability {
|
|
|
183
193
|
return Date.now() - startTime;
|
|
184
194
|
}
|
|
185
195
|
|
|
186
|
-
|
|
187
196
|
/**
|
|
188
197
|
* creates offer and generates localSDP
|
|
189
198
|
* @param {object} clusterList cluster List
|
|
@@ -191,8 +200,8 @@ export default class Reachability {
|
|
|
191
200
|
* @private
|
|
192
201
|
* @memberof Reachability
|
|
193
202
|
*/
|
|
194
|
-
getLocalSDPForClusters(clusterList) {
|
|
195
|
-
let clusters = [...Object.keys(clusterList)];
|
|
203
|
+
private getLocalSDPForClusters(clusterList: object) {
|
|
204
|
+
let clusters: any[] = [...Object.keys(clusterList)];
|
|
196
205
|
|
|
197
206
|
clusters = clusters.map(async (key) => {
|
|
198
207
|
const cluster = clusterList[key];
|
|
@@ -200,13 +209,18 @@ export default class Reachability {
|
|
|
200
209
|
const peerConnection = this.createPeerConnection({key, config});
|
|
201
210
|
const description = await peerConnection.createOffer({offerToReceiveAudio: true});
|
|
202
211
|
|
|
212
|
+
// @ts-ignore
|
|
203
213
|
peerConnection.begin = Date.now();
|
|
204
214
|
peerConnection.setLocalDescription(description);
|
|
205
215
|
|
|
206
|
-
return this.iceGatheringState(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
216
|
+
return this.iceGatheringState(
|
|
217
|
+
peerConnection,
|
|
218
|
+
cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT
|
|
219
|
+
).catch((iceGatheringStateError) => {
|
|
220
|
+
LoggerProxy.logger.log(
|
|
221
|
+
`Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`
|
|
222
|
+
);
|
|
223
|
+
});
|
|
210
224
|
});
|
|
211
225
|
|
|
212
226
|
return Promise.all(clusters)
|
|
@@ -219,14 +233,13 @@ export default class Reachability {
|
|
|
219
233
|
});
|
|
220
234
|
}
|
|
221
235
|
|
|
222
|
-
|
|
223
236
|
/**
|
|
224
237
|
* Get list of all unreachable clusters
|
|
225
238
|
* @returns {array} Unreachable clusters
|
|
226
239
|
* @private
|
|
227
240
|
* @memberof Reachability
|
|
228
241
|
*/
|
|
229
|
-
getUnreachablClusters() {
|
|
242
|
+
private getUnreachablClusters() {
|
|
230
243
|
const unreachableList = [];
|
|
231
244
|
const clusters = this.clusterLatencyResults;
|
|
232
245
|
|
|
@@ -241,7 +254,6 @@ export default class Reachability {
|
|
|
241
254
|
return unreachableList;
|
|
242
255
|
}
|
|
243
256
|
|
|
244
|
-
|
|
245
257
|
/**
|
|
246
258
|
* Attach an event handler for the icegatheringstatechange
|
|
247
259
|
* event and measure latency.
|
|
@@ -250,20 +262,24 @@ export default class Reachability {
|
|
|
250
262
|
* @private
|
|
251
263
|
* @memberof Reachability
|
|
252
264
|
*/
|
|
253
|
-
handleIceGatheringStateChange(peerConnection) {
|
|
265
|
+
private handleIceGatheringStateChange(peerConnection: RTCPeerConnection) {
|
|
254
266
|
peerConnection.onicegatheringstatechange = () => {
|
|
255
267
|
const {COMPLETE} = ICE_GATHERING_STATE;
|
|
256
268
|
|
|
257
269
|
if (peerConnection.iceConnectionState === COMPLETE) {
|
|
258
270
|
const elapsed = this.getElapsedTime(peerConnection);
|
|
259
271
|
|
|
260
|
-
|
|
272
|
+
// @ts-ignore
|
|
273
|
+
LoggerProxy.logger.log(
|
|
274
|
+
// @ts-ignore
|
|
275
|
+
`Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,
|
|
276
|
+
elapsed
|
|
277
|
+
);
|
|
261
278
|
this.setLatencyAndClose(peerConnection, elapsed);
|
|
262
279
|
}
|
|
263
280
|
};
|
|
264
281
|
}
|
|
265
282
|
|
|
266
|
-
|
|
267
283
|
/**
|
|
268
284
|
* Attach an event handler for the icecandidate
|
|
269
285
|
* event and measure latency.
|
|
@@ -272,14 +288,18 @@ export default class Reachability {
|
|
|
272
288
|
* @private
|
|
273
289
|
* @memberof Reachability
|
|
274
290
|
*/
|
|
275
|
-
handleOnIceCandidate(peerConnection) {
|
|
291
|
+
private handleOnIceCandidate(peerConnection: RTCPeerConnection) {
|
|
276
292
|
peerConnection.onicecandidate = (e) => {
|
|
277
293
|
const SERVER_REFLEXIVE = 'srflx';
|
|
278
294
|
|
|
279
295
|
if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
|
|
280
296
|
const elapsed = this.getElapsedTime(peerConnection);
|
|
281
297
|
|
|
282
|
-
LoggerProxy.logger.log(
|
|
298
|
+
LoggerProxy.logger.log(
|
|
299
|
+
// @ts-ignore
|
|
300
|
+
`Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,
|
|
301
|
+
elapsed
|
|
302
|
+
);
|
|
283
303
|
this.setLatencyAndClose(peerConnection, elapsed);
|
|
284
304
|
}
|
|
285
305
|
};
|
|
@@ -294,7 +314,7 @@ export default class Reachability {
|
|
|
294
314
|
* @param {number} timeout
|
|
295
315
|
* @returns {Promise}
|
|
296
316
|
*/
|
|
297
|
-
iceGatheringState(peerConnection, timeout) {
|
|
317
|
+
private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {
|
|
298
318
|
const ELAPSED = 'elapsed';
|
|
299
319
|
|
|
300
320
|
return new Promise((resolve) => {
|
|
@@ -302,7 +322,7 @@ export default class Reachability {
|
|
|
302
322
|
get(target, property) {
|
|
303
323
|
const targetMember = target[property];
|
|
304
324
|
|
|
305
|
-
if (typeof
|
|
325
|
+
if (typeof targetMember === 'function') {
|
|
306
326
|
return targetMember.bind(target);
|
|
307
327
|
}
|
|
308
328
|
|
|
@@ -311,6 +331,7 @@ export default class Reachability {
|
|
|
311
331
|
set: (target, property, value) => {
|
|
312
332
|
// only intercept elapsed property
|
|
313
333
|
if (property === ELAPSED) {
|
|
334
|
+
// @ts-ignore
|
|
314
335
|
resolve({clusterId: peerConnection.key, elapsed: value});
|
|
315
336
|
|
|
316
337
|
return true;
|
|
@@ -318,7 +339,7 @@ export default class Reachability {
|
|
|
318
339
|
|
|
319
340
|
// pass thru
|
|
320
341
|
return window.Reflect.set(target, property, value);
|
|
321
|
-
}
|
|
342
|
+
},
|
|
322
343
|
});
|
|
323
344
|
|
|
324
345
|
// Using peerConnection proxy so handle functions below
|
|
@@ -338,22 +359,22 @@ export default class Reachability {
|
|
|
338
359
|
});
|
|
339
360
|
}
|
|
340
361
|
|
|
341
|
-
|
|
342
362
|
/**
|
|
343
363
|
* Make a log of unreachable clusters.
|
|
344
364
|
* @returns {undefined}
|
|
345
365
|
* @private
|
|
346
366
|
* @memberof Reachability
|
|
347
367
|
*/
|
|
348
|
-
logUnreachableClusters() {
|
|
368
|
+
private logUnreachableClusters() {
|
|
349
369
|
const list = this.getUnreachablClusters();
|
|
350
370
|
|
|
351
371
|
list.forEach((cluster) => {
|
|
352
|
-
LoggerProxy.logger.log(
|
|
372
|
+
LoggerProxy.logger.log(
|
|
373
|
+
`Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`
|
|
374
|
+
);
|
|
353
375
|
});
|
|
354
376
|
}
|
|
355
377
|
|
|
356
|
-
|
|
357
378
|
/**
|
|
358
379
|
* Calculates time to establish connection
|
|
359
380
|
* @param {array} iceResults iceResults
|
|
@@ -361,7 +382,7 @@ export default class Reachability {
|
|
|
361
382
|
* @private
|
|
362
383
|
* @memberof Reachability
|
|
363
384
|
*/
|
|
364
|
-
parseIceResultsToReachabilityResults(iceResults) {
|
|
385
|
+
private parseIceResultsToReachabilityResults(iceResults: Array<any>) {
|
|
365
386
|
const reachabilityMap = {};
|
|
366
387
|
|
|
367
388
|
iceResults.forEach(({clusterId, elapsed}) => {
|
|
@@ -369,24 +390,22 @@ export default class Reachability {
|
|
|
369
390
|
|
|
370
391
|
if (elapsed === null) {
|
|
371
392
|
latencyResult = {reachable: 'false'};
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
393
|
+
} else {
|
|
374
394
|
latencyResult = {
|
|
375
395
|
reachable: 'true',
|
|
376
|
-
latencyInMilliseconds:
|
|
396
|
+
latencyInMilliseconds: elapsed.toString(),
|
|
377
397
|
};
|
|
378
398
|
}
|
|
379
399
|
|
|
380
400
|
reachabilityMap[clusterId] = {
|
|
381
401
|
udp: latencyResult,
|
|
382
|
-
tcp: latencyResult
|
|
402
|
+
tcp: latencyResult,
|
|
383
403
|
};
|
|
384
404
|
});
|
|
385
405
|
|
|
386
406
|
return reachabilityMap;
|
|
387
407
|
}
|
|
388
408
|
|
|
389
|
-
|
|
390
409
|
/**
|
|
391
410
|
* fetches reachability data
|
|
392
411
|
* @param {object} clusterList
|
|
@@ -394,7 +413,7 @@ export default class Reachability {
|
|
|
394
413
|
* @private
|
|
395
414
|
* @memberof Reachability
|
|
396
415
|
*/
|
|
397
|
-
performReachabilityCheck(clusterList) {
|
|
416
|
+
private performReachabilityCheck(clusterList: object) {
|
|
398
417
|
if (!clusterList || !Object.keys(clusterList).length) {
|
|
399
418
|
return Promise.resolve({});
|
|
400
419
|
}
|
|
@@ -404,21 +423,23 @@ export default class Reachability {
|
|
|
404
423
|
.then((localSDPData) => {
|
|
405
424
|
if (!localSDPData || !Object.keys(localSDPData).length) {
|
|
406
425
|
// TODO: handle the error condition properly and try retry
|
|
407
|
-
LoggerProxy.logger.log(
|
|
426
|
+
LoggerProxy.logger.log(
|
|
427
|
+
'Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning'
|
|
428
|
+
);
|
|
408
429
|
resolve({});
|
|
409
|
-
}
|
|
410
|
-
else {
|
|
430
|
+
} else {
|
|
411
431
|
resolve(localSDPData);
|
|
412
432
|
}
|
|
413
433
|
})
|
|
414
434
|
.catch((error) => {
|
|
415
|
-
LoggerProxy.logger.error(
|
|
435
|
+
LoggerProxy.logger.error(
|
|
436
|
+
`Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`
|
|
437
|
+
);
|
|
416
438
|
resolve({});
|
|
417
439
|
});
|
|
418
440
|
});
|
|
419
441
|
}
|
|
420
442
|
|
|
421
|
-
|
|
422
443
|
/**
|
|
423
444
|
* Records latency and closes the peerConnection
|
|
424
445
|
* @param {RTCPeerConnection} peerConnection
|
|
@@ -427,16 +448,19 @@ export default class Reachability {
|
|
|
427
448
|
* @private
|
|
428
449
|
* @memberof Reachability
|
|
429
450
|
*/
|
|
430
|
-
setLatencyAndClose(peerConnection, elapsed) {
|
|
451
|
+
private setLatencyAndClose(peerConnection: RTCPeerConnection, elapsed: number) {
|
|
431
452
|
const REACHABLE = 'reachable';
|
|
432
453
|
const UNREACHABLE = 'unreachable';
|
|
433
454
|
const {CLOSED} = CONNECTION_STATE;
|
|
455
|
+
// @ts-ignore
|
|
434
456
|
const {key} = peerConnection;
|
|
435
457
|
const resultKey = elapsed === null ? UNREACHABLE : REACHABLE;
|
|
436
458
|
const intialState = {[REACHABLE]: 0, [UNREACHABLE]: 0};
|
|
437
459
|
|
|
438
460
|
if (peerConnection.connectionState === CLOSED) {
|
|
439
|
-
LoggerProxy.logger.log(
|
|
461
|
+
LoggerProxy.logger.log(
|
|
462
|
+
`Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`
|
|
463
|
+
);
|
|
440
464
|
|
|
441
465
|
return;
|
|
442
466
|
}
|
|
@@ -448,17 +472,17 @@ export default class Reachability {
|
|
|
448
472
|
// an event other than onIceCandidate
|
|
449
473
|
peerConnection.onicecandidate = null;
|
|
450
474
|
peerConnection.close();
|
|
475
|
+
// @ts-ignore
|
|
451
476
|
peerConnection.elapsed = elapsed;
|
|
452
477
|
}
|
|
453
478
|
|
|
454
|
-
|
|
455
479
|
/**
|
|
456
480
|
* utility function
|
|
457
481
|
* @returns {undefined}
|
|
458
482
|
* @private
|
|
459
483
|
* @memberof Reachability
|
|
460
484
|
*/
|
|
461
|
-
setup() {
|
|
485
|
+
private setup() {
|
|
462
486
|
this.clusterLatencyResults = {};
|
|
463
487
|
}
|
|
464
488
|
}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
2
|
-
import {
|
|
3
|
-
HTTP_VERBS,
|
|
4
|
-
RESOURCE,
|
|
5
|
-
API
|
|
6
|
-
} from '../constants';
|
|
2
|
+
import {HTTP_VERBS, RESOURCE, API} from '../constants';
|
|
7
3
|
|
|
8
4
|
export interface ClusterNode {
|
|
9
5
|
isVideoMesh: boolean;
|
|
@@ -13,63 +9,78 @@ export interface ClusterNode {
|
|
|
13
9
|
}
|
|
14
10
|
|
|
15
11
|
export type ClusterList = {
|
|
16
|
-
[key:string]: ClusterNode;
|
|
17
|
-
}
|
|
12
|
+
[key: string]: ClusterNode;
|
|
13
|
+
};
|
|
18
14
|
|
|
19
15
|
/**
|
|
20
16
|
* @class ReachabilityRequest
|
|
21
17
|
*/
|
|
22
18
|
class ReachabilityRequest {
|
|
19
|
+
webex: any;
|
|
20
|
+
|
|
23
21
|
/**
|
|
24
22
|
* Creates an instance of ReachabilityRequest.
|
|
25
23
|
* @param {object} webex
|
|
26
24
|
* @memberof ReachabilityRequest
|
|
27
25
|
*/
|
|
28
|
-
constructor(webex) {
|
|
26
|
+
constructor(webex: object) {
|
|
29
27
|
this.webex = webex;
|
|
30
28
|
}
|
|
31
29
|
|
|
32
30
|
/**
|
|
33
|
-
*
|
|
31
|
+
* Gets the cluster information
|
|
34
32
|
*
|
|
35
|
-
* @param {boolean} includeVideoMesh whether to include the video mesh clusters in the result or not
|
|
36
33
|
* @returns {Promise}
|
|
37
34
|
*/
|
|
38
|
-
getClusters = (): Promise<ClusterList> =>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
getClusters = (): Promise<{clusters: ClusterList; joinCookie: any}> =>
|
|
36
|
+
this.webex
|
|
37
|
+
.request({
|
|
38
|
+
method: HTTP_VERBS.GET,
|
|
39
|
+
shouldRefreshAccessToken: false,
|
|
40
|
+
api: API.CALLIOPEDISCOVERY,
|
|
41
|
+
resource: RESOURCE.CLUSTERS,
|
|
42
|
+
qs: {
|
|
43
|
+
JCSupport: 1,
|
|
44
|
+
},
|
|
45
|
+
})
|
|
46
|
+
.then((res) => {
|
|
47
|
+
const {clusters, joinCookie} = res.body;
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
Object.keys(clusters).forEach((key) => {
|
|
50
|
+
clusters[key].isVideoMesh = res.body.clusterClasses?.hybridMedia?.includes(key);
|
|
51
|
+
});
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
LoggerProxy.logger.log(
|
|
54
|
+
`Reachability:request#getClusters --> get clusters successful:${JSON.stringify(clusters)}`
|
|
55
|
+
);
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
return {
|
|
58
|
+
clusters,
|
|
59
|
+
joinCookie,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
55
62
|
|
|
56
63
|
/**
|
|
57
64
|
* gets remote SDP For Clusters
|
|
58
65
|
* @param {Object} localSDPList localSDPs for the cluster
|
|
59
66
|
* @returns {Object}
|
|
60
67
|
*/
|
|
61
|
-
remoteSDPForClusters = (localSDPList) =>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
remoteSDPForClusters = (localSDPList: object) =>
|
|
69
|
+
this.webex
|
|
70
|
+
.request({
|
|
71
|
+
method: HTTP_VERBS.POST,
|
|
72
|
+
shouldRefreshAccessToken: false,
|
|
73
|
+
api: API.CALLIOPEDISCOVERY,
|
|
74
|
+
resource: RESOURCE.REACHABILITY,
|
|
75
|
+
body: {offers: localSDPList},
|
|
76
|
+
})
|
|
77
|
+
.then((res) => {
|
|
78
|
+
LoggerProxy.logger.log(
|
|
79
|
+
'Reachability:request#remoteSDPForClusters --> Remote SDPs got succcessfully'
|
|
80
|
+
);
|
|
70
81
|
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
return res.body;
|
|
83
|
+
});
|
|
73
84
|
}
|
|
74
85
|
|
|
75
86
|
export default ReachabilityRequest;
|