@webex/plugin-meetings 3.0.0-beta.35 → 3.0.0-beta.351
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/README.md +58 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +709 -35
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +45 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +233 -29
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +117 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.js +93 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +383 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +57 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +62 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +1 -204
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +86 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3921 -2960
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +224 -131
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +166 -152
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +192 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +437 -121
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +72 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +102 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- 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 +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +16 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -446
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +228 -58
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +29 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +265 -391
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +6 -4
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reconnection-manager/index.js +217 -171
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +62 -35
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +48 -64
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +95 -38
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +142 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +181 -214
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +22 -18
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +14 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +2 -7
- package/dist/types/constants.d.ts +200 -29
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +66 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -128
- package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
- package/dist/types/meeting/index.d.ts +506 -512
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +93 -25
- package/dist/types/meeting/request.d.ts +62 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +95 -22
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +15 -4
- package/dist/types/metrics/index.d.ts +4 -111
- package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
- package/dist/types/multistream/receiveSlot.d.ts +13 -11
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +60 -95
- package/dist/types/reachability/request.d.ts +3 -1
- package/dist/types/reachability/util.d.ts +8 -0
- package/dist/types/reconnection-manager/index.d.ts +19 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +9 -8
- package/dist/types/roap/turnDiscovery.d.ts +21 -3
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +54 -0
- package/dist/types/statsAnalyzer/index.d.ts +29 -11
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +22 -19
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +42 -12
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +592 -20
- package/src/breakouts/utils.ts +42 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +44 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -9
- package/src/constants.ts +223 -19
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +414 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +102 -122
- package/src/media/properties.ts +87 -110
- package/src/mediaQualityMetrics/config.ts +0 -135
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +3274 -2555
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +223 -136
- package/src/meeting/request.ts +142 -120
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +170 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +460 -128
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +80 -11
- package/src/member/index.ts +58 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +134 -8
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +15 -4
- package/src/metrics/index.ts +1 -469
- package/src/multistream/mediaRequestManager.ts +277 -82
- package/src/multistream/receiveSlot.ts +31 -17
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +226 -340
- package/src/reachability/request.ts +8 -4
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +128 -106
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +63 -32
- package/src/roap/request.ts +48 -67
- package/src/roap/turnDiscovery.ts +48 -26
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +124 -0
- package/src/statsAnalyzer/index.ts +218 -289
- package/src/statsAnalyzer/mqaUtil.ts +28 -30
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +118 -28
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1395 -69
- package/test/unit/spec/breakouts/utils.js +52 -1
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1352 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +120 -37
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
- package/test/unit/spec/meeting/index.js +5815 -2008
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +402 -213
- package/test/unit/spec/meeting/request.js +459 -52
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1301 -254
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +776 -162
- package/test/unit/spec/multistream/receiveSlot.ts +28 -20
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +476 -14
- package/test/unit/spec/reachability/request.js +3 -1
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +118 -11
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +174 -63
- package/test/unit/spec/roap/request.ts +100 -62
- package/test/unit/spec/roap/turnDiscovery.ts +76 -34
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +231 -7
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -52
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -169
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -485
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -9,21 +9,20 @@ exports.default = void 0;
|
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
10
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
11
11
|
var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
|
|
12
|
-
var
|
|
12
|
+
var _entries = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/entries"));
|
|
13
13
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
14
14
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
15
|
-
var
|
|
15
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
16
16
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
17
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
20
|
-
var
|
|
20
|
+
var _mapValues2 = _interopRequireDefault(require("lodash/mapValues"));
|
|
21
21
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
22
|
+
var _util = _interopRequireDefault(require("../meeting/util"));
|
|
22
23
|
var _constants = require("../constants");
|
|
23
24
|
var _request = _interopRequireDefault(require("./request"));
|
|
24
|
-
var
|
|
25
|
-
var VIDEO_MESH_TIMEOUT = 1000;
|
|
26
|
-
|
|
25
|
+
var _clusterReachability = require("./clusterReachability");
|
|
27
26
|
/**
|
|
28
27
|
* @class Reachability
|
|
29
28
|
* @export
|
|
@@ -39,7 +38,7 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
39
38
|
(0, _defineProperty2.default)(this, "namespace", _constants.REACHABILITY.namespace);
|
|
40
39
|
(0, _defineProperty2.default)(this, "webex", void 0);
|
|
41
40
|
(0, _defineProperty2.default)(this, "reachabilityRequest", void 0);
|
|
42
|
-
(0, _defineProperty2.default)(this, "
|
|
41
|
+
(0, _defineProperty2.default)(this, "clusterReachability", void 0);
|
|
43
42
|
this.webex = webex;
|
|
44
43
|
|
|
45
44
|
/**
|
|
@@ -50,22 +49,13 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
50
49
|
* @memberof Reachability
|
|
51
50
|
*/
|
|
52
51
|
this.reachabilityRequest = new _request.default(this.webex);
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* internal object of clusters latency results
|
|
56
|
-
* @instance
|
|
57
|
-
* @type {object}
|
|
58
|
-
* @private
|
|
59
|
-
* @memberof Reachability
|
|
60
|
-
*/
|
|
61
|
-
this.clusterLatencyResults = {};
|
|
52
|
+
this.clusterReachability = {};
|
|
62
53
|
}
|
|
63
54
|
|
|
64
55
|
/**
|
|
65
|
-
*
|
|
66
|
-
* @returns {
|
|
56
|
+
* Gets a list of media clusters from the backend and performs reachability checks on all the clusters
|
|
57
|
+
* @returns {Promise<ReachabilityResults>} reachability results
|
|
67
58
|
* @public
|
|
68
|
-
* @async
|
|
69
59
|
* @memberof Reachability
|
|
70
60
|
*/
|
|
71
61
|
(0, _createClass2.default)(Reachability, [{
|
|
@@ -76,51 +66,200 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
76
66
|
return _regenerator.default.wrap(function _callee$(_context) {
|
|
77
67
|
while (1) switch (_context.prev = _context.next) {
|
|
78
68
|
case 0:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// Remove stored reachability results to ensure no stale data
|
|
82
|
-
// @ts-ignore
|
|
83
|
-
_context.next = 3;
|
|
69
|
+
_context.next = 2;
|
|
84
70
|
return this.webex.boundedStorage.del(this.namespace, _constants.REACHABILITY.localStorageResult);
|
|
85
|
-
case
|
|
86
|
-
_context.next =
|
|
71
|
+
case 2:
|
|
72
|
+
_context.next = 4;
|
|
87
73
|
return this.webex.boundedStorage.del(this.namespace, _constants.REACHABILITY.localStorageJoinCookie);
|
|
88
|
-
case
|
|
89
|
-
_context.prev =
|
|
90
|
-
_context.next =
|
|
91
|
-
return this.reachabilityRequest.getClusters();
|
|
92
|
-
case
|
|
74
|
+
case 4:
|
|
75
|
+
_context.prev = 4;
|
|
76
|
+
_context.next = 7;
|
|
77
|
+
return this.reachabilityRequest.getClusters(_util.default.getIpVersion(this.webex));
|
|
78
|
+
case 7:
|
|
93
79
|
_yield$this$reachabil = _context.sent;
|
|
94
80
|
clusters = _yield$this$reachabil.clusters;
|
|
95
81
|
joinCookie = _yield$this$reachabil.joinCookie;
|
|
96
|
-
_context.next =
|
|
97
|
-
return this.
|
|
98
|
-
case
|
|
82
|
+
_context.next = 12;
|
|
83
|
+
return this.performReachabilityChecks(clusters);
|
|
84
|
+
case 12:
|
|
99
85
|
results = _context.sent;
|
|
100
|
-
_context.next =
|
|
86
|
+
_context.next = 15;
|
|
101
87
|
return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageResult, (0, _stringify.default)(results));
|
|
102
|
-
case
|
|
103
|
-
_context.next =
|
|
88
|
+
case 15:
|
|
89
|
+
_context.next = 17;
|
|
104
90
|
return this.webex.boundedStorage.put(this.namespace, _constants.REACHABILITY.localStorageJoinCookie, (0, _stringify.default)(joinCookie));
|
|
105
|
-
case
|
|
91
|
+
case 17:
|
|
106
92
|
_loggerProxy.default.logger.log('Reachability:index#gatherReachability --> Reachability checks completed');
|
|
107
93
|
return _context.abrupt("return", results);
|
|
108
|
-
case
|
|
109
|
-
_context.prev =
|
|
110
|
-
_context.t0 = _context["catch"](
|
|
111
|
-
_loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error
|
|
94
|
+
case 21:
|
|
95
|
+
_context.prev = 21;
|
|
96
|
+
_context.t0 = _context["catch"](4);
|
|
97
|
+
_loggerProxy.default.logger.error("Reachability:index#gatherReachability --> Error:", _context.t0);
|
|
112
98
|
return _context.abrupt("return", {});
|
|
113
|
-
case
|
|
99
|
+
case 25:
|
|
114
100
|
case "end":
|
|
115
101
|
return _context.stop();
|
|
116
102
|
}
|
|
117
|
-
}, _callee, this, [[
|
|
103
|
+
}, _callee, this, [[4, 21]]);
|
|
118
104
|
}));
|
|
119
105
|
function gatherReachability() {
|
|
120
106
|
return _gatherReachability.apply(this, arguments);
|
|
121
107
|
}
|
|
122
108
|
return gatherReachability;
|
|
123
109
|
}()
|
|
110
|
+
/**
|
|
111
|
+
* Returns statistics about last reachability results. The returned value is an object
|
|
112
|
+
* with a flat list of properties so that it can be easily sent with metrics
|
|
113
|
+
*
|
|
114
|
+
* @returns {Promise} Promise with metrics values, it never rejects/throws.
|
|
115
|
+
*/
|
|
116
|
+
}, {
|
|
117
|
+
key: "getReachabilityMetrics",
|
|
118
|
+
value: function () {
|
|
119
|
+
var _getReachabilityMetrics = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
120
|
+
var stats, updateStats, resultsJson, results;
|
|
121
|
+
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
122
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
123
|
+
case 0:
|
|
124
|
+
stats = {
|
|
125
|
+
reachability_public_udp_success: 0,
|
|
126
|
+
reachability_public_udp_failed: 0,
|
|
127
|
+
reachability_public_tcp_success: 0,
|
|
128
|
+
reachability_public_tcp_failed: 0,
|
|
129
|
+
reachability_vmn_udp_success: 0,
|
|
130
|
+
reachability_vmn_udp_failed: 0,
|
|
131
|
+
reachability_vmn_tcp_success: 0,
|
|
132
|
+
reachability_vmn_tcp_failed: 0
|
|
133
|
+
};
|
|
134
|
+
updateStats = function updateStats(clusterType, result) {
|
|
135
|
+
if (result.udp && result.udp.result !== 'untested') {
|
|
136
|
+
var outcome = result.udp.result === 'reachable' ? 'success' : 'failed';
|
|
137
|
+
stats["reachability_".concat(clusterType, "_udp_").concat(outcome)] += 1;
|
|
138
|
+
}
|
|
139
|
+
if (result.tcp && result.tcp.result !== 'untested') {
|
|
140
|
+
var _outcome = result.tcp.result === 'reachable' ? 'success' : 'failed';
|
|
141
|
+
stats["reachability_".concat(clusterType, "_tcp_").concat(_outcome)] += 1;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
_context2.prev = 2;
|
|
145
|
+
_context2.next = 5;
|
|
146
|
+
return this.webex.boundedStorage.get(_constants.REACHABILITY.namespace, _constants.REACHABILITY.localStorageResult);
|
|
147
|
+
case 5:
|
|
148
|
+
resultsJson = _context2.sent;
|
|
149
|
+
results = JSON.parse(resultsJson);
|
|
150
|
+
(0, _values.default)(results).forEach(function (result) {
|
|
151
|
+
updateStats(result.isVideoMesh ? 'vmn' : 'public', result);
|
|
152
|
+
});
|
|
153
|
+
_context2.next = 13;
|
|
154
|
+
break;
|
|
155
|
+
case 10:
|
|
156
|
+
_context2.prev = 10;
|
|
157
|
+
_context2.t0 = _context2["catch"](2);
|
|
158
|
+
// empty storage, that's ok
|
|
159
|
+
_loggerProxy.default.logger.warn('Roap:request#getReachabilityMetrics --> Error parsing reachability data: ', _context2.t0);
|
|
160
|
+
case 13:
|
|
161
|
+
return _context2.abrupt("return", stats);
|
|
162
|
+
case 14:
|
|
163
|
+
case "end":
|
|
164
|
+
return _context2.stop();
|
|
165
|
+
}
|
|
166
|
+
}, _callee2, this, [[2, 10]]);
|
|
167
|
+
}));
|
|
168
|
+
function getReachabilityMetrics() {
|
|
169
|
+
return _getReachabilityMetrics.apply(this, arguments);
|
|
170
|
+
}
|
|
171
|
+
return getReachabilityMetrics;
|
|
172
|
+
}()
|
|
173
|
+
/**
|
|
174
|
+
* Maps our internal transport result to the format that backend expects
|
|
175
|
+
* @param {TransportResult} transportResult
|
|
176
|
+
* @returns {TransportResultForBackend}
|
|
177
|
+
*/
|
|
178
|
+
}, {
|
|
179
|
+
key: "mapTransportResultToBackendDataFormat",
|
|
180
|
+
value: function mapTransportResultToBackendDataFormat(transportResult) {
|
|
181
|
+
var output = {};
|
|
182
|
+
for (var _i = 0, _Object$entries = (0, _entries.default)(transportResult); _i < _Object$entries.length; _i++) {
|
|
183
|
+
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
184
|
+
_key = _Object$entries$_i[0],
|
|
185
|
+
value = _Object$entries$_i[1];
|
|
186
|
+
switch (_key) {
|
|
187
|
+
case 'result':
|
|
188
|
+
switch (value) {
|
|
189
|
+
case 'reachable':
|
|
190
|
+
output.reachable = 'true';
|
|
191
|
+
break;
|
|
192
|
+
case 'unreachable':
|
|
193
|
+
output.reachable = 'false';
|
|
194
|
+
break;
|
|
195
|
+
case 'untested':
|
|
196
|
+
output.untested = 'true';
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
case 'latencyInMilliseconds':
|
|
201
|
+
output.latencyInMilliseconds = value.toString();
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
output[_key] = value;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return output;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Reachability results as an object in the format that backend expects
|
|
212
|
+
*
|
|
213
|
+
* @returns {any} reachability results that need to be sent to the backend
|
|
214
|
+
*/
|
|
215
|
+
}, {
|
|
216
|
+
key: "getReachabilityResults",
|
|
217
|
+
value: function () {
|
|
218
|
+
var _getReachabilityResults = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
219
|
+
var _this = this;
|
|
220
|
+
var results, resultsJson, allClusterResults;
|
|
221
|
+
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
222
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
223
|
+
case 0:
|
|
224
|
+
_context3.prev = 0;
|
|
225
|
+
_context3.next = 3;
|
|
226
|
+
return this.webex.boundedStorage.get(_constants.REACHABILITY.namespace, _constants.REACHABILITY.localStorageResult);
|
|
227
|
+
case 3:
|
|
228
|
+
resultsJson = _context3.sent;
|
|
229
|
+
allClusterResults = JSON.parse(resultsJson);
|
|
230
|
+
results = (0, _mapValues2.default)(allClusterResults, function (clusterResult) {
|
|
231
|
+
return {
|
|
232
|
+
udp: _this.mapTransportResultToBackendDataFormat(clusterResult.udp || {
|
|
233
|
+
result: 'untested'
|
|
234
|
+
}),
|
|
235
|
+
tcp: _this.mapTransportResultToBackendDataFormat(clusterResult.tcp || {
|
|
236
|
+
result: 'untested'
|
|
237
|
+
}),
|
|
238
|
+
xtls: _this.mapTransportResultToBackendDataFormat(clusterResult.xtls || {
|
|
239
|
+
result: 'untested'
|
|
240
|
+
})
|
|
241
|
+
};
|
|
242
|
+
});
|
|
243
|
+
_context3.next = 11;
|
|
244
|
+
break;
|
|
245
|
+
case 8:
|
|
246
|
+
_context3.prev = 8;
|
|
247
|
+
_context3.t0 = _context3["catch"](0);
|
|
248
|
+
// empty storage, that's ok
|
|
249
|
+
_loggerProxy.default.logger.warn('Roap:request#attachReachabilityData --> Error parsing reachability data: ', _context3.t0);
|
|
250
|
+
case 11:
|
|
251
|
+
return _context3.abrupt("return", results);
|
|
252
|
+
case 12:
|
|
253
|
+
case "end":
|
|
254
|
+
return _context3.stop();
|
|
255
|
+
}
|
|
256
|
+
}, _callee3, this, [[0, 8]]);
|
|
257
|
+
}));
|
|
258
|
+
function getReachabilityResults() {
|
|
259
|
+
return _getReachabilityResults.apply(this, arguments);
|
|
260
|
+
}
|
|
261
|
+
return getReachabilityResults;
|
|
262
|
+
}()
|
|
124
263
|
/**
|
|
125
264
|
* fetches reachability data and checks for cluster reachability
|
|
126
265
|
* @returns {boolean}
|
|
@@ -128,158 +267,41 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
128
267
|
* @memberof Reachability
|
|
129
268
|
*/
|
|
130
269
|
}, {
|
|
131
|
-
key: "
|
|
270
|
+
key: "isAnyPublicClusterReachable",
|
|
132
271
|
value: function () {
|
|
133
|
-
var
|
|
272
|
+
var _isAnyPublicClusterReachable = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
134
273
|
var reachable, reachabilityData, reachabilityResults;
|
|
135
|
-
return _regenerator.default.wrap(function
|
|
136
|
-
while (1) switch (
|
|
274
|
+
return _regenerator.default.wrap(function _callee4$(_context4) {
|
|
275
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
137
276
|
case 0:
|
|
138
277
|
reachable = false; // @ts-ignore
|
|
139
|
-
|
|
278
|
+
_context4.next = 3;
|
|
140
279
|
return this.webex.boundedStorage.get(this.namespace, _constants.REACHABILITY.localStorageResult).catch(function () {});
|
|
141
280
|
case 3:
|
|
142
|
-
reachabilityData =
|
|
281
|
+
reachabilityData = _context4.sent;
|
|
143
282
|
if (reachabilityData) {
|
|
144
283
|
try {
|
|
145
284
|
reachabilityResults = JSON.parse(reachabilityData);
|
|
146
285
|
reachable = (0, _values.default)(reachabilityResults).some(function (result) {
|
|
147
286
|
var _result$udp, _result$tcp;
|
|
148
|
-
return ((_result$udp = result.udp) === null || _result$udp === void 0 ? void 0 : _result$udp.
|
|
287
|
+
return !result.isVideoMesh && (((_result$udp = result.udp) === null || _result$udp === void 0 ? void 0 : _result$udp.result) === 'reachable' || ((_result$tcp = result.tcp) === null || _result$tcp === void 0 ? void 0 : _result$tcp.result) === 'reachable');
|
|
149
288
|
});
|
|
150
289
|
} catch (e) {
|
|
151
290
|
_loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
|
|
152
291
|
}
|
|
153
292
|
}
|
|
154
|
-
return
|
|
293
|
+
return _context4.abrupt("return", reachable);
|
|
155
294
|
case 6:
|
|
156
295
|
case "end":
|
|
157
|
-
return
|
|
296
|
+
return _context4.stop();
|
|
158
297
|
}
|
|
159
|
-
},
|
|
298
|
+
}, _callee4, this);
|
|
160
299
|
}));
|
|
161
|
-
function
|
|
162
|
-
return
|
|
300
|
+
function isAnyPublicClusterReachable() {
|
|
301
|
+
return _isAnyPublicClusterReachable.apply(this, arguments);
|
|
163
302
|
}
|
|
164
|
-
return
|
|
303
|
+
return isAnyPublicClusterReachable;
|
|
165
304
|
}()
|
|
166
|
-
/**
|
|
167
|
-
* Generate peerConnection config settings
|
|
168
|
-
* @param {object} cluster
|
|
169
|
-
* @returns {object} peerConnectionConfig
|
|
170
|
-
* @private
|
|
171
|
-
* @memberof Reachability
|
|
172
|
-
*/
|
|
173
|
-
}, {
|
|
174
|
-
key: "buildPeerConnectionConfig",
|
|
175
|
-
value: function buildPeerConnectionConfig(cluster) {
|
|
176
|
-
var iceServers = (0, _uniq2.default)([].concat((0, _toConsumableArray2.default)(cluster.udp), (0, _toConsumableArray2.default)(cluster.tcp))).map(function (url) {
|
|
177
|
-
return {
|
|
178
|
-
username: '',
|
|
179
|
-
credential: '',
|
|
180
|
-
urls: [url]
|
|
181
|
-
};
|
|
182
|
-
});
|
|
183
|
-
return {
|
|
184
|
-
iceServers: (0, _toConsumableArray2.default)(iceServers),
|
|
185
|
-
iceCandidatePoolSize: '0',
|
|
186
|
-
iceTransportPolicy: 'all'
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Creates an RTCPeerConnection
|
|
192
|
-
* @param {object} cluster
|
|
193
|
-
* @returns {RTCPeerConnection} peerConnection
|
|
194
|
-
* @private
|
|
195
|
-
* @memberof Reachability
|
|
196
|
-
*/
|
|
197
|
-
}, {
|
|
198
|
-
key: "createPeerConnection",
|
|
199
|
-
value: function createPeerConnection(cluster) {
|
|
200
|
-
var key = cluster.key,
|
|
201
|
-
config = cluster.config;
|
|
202
|
-
try {
|
|
203
|
-
var peerConnection = new window.RTCPeerConnection(config);
|
|
204
|
-
|
|
205
|
-
// @ts-ignore
|
|
206
|
-
peerConnection.key = key;
|
|
207
|
-
return peerConnection;
|
|
208
|
-
} catch (peerConnectionError) {
|
|
209
|
-
_loggerProxy.default.logger.log("Reachability:index#createPeerConnection --> Error creating peerConnection: ".concat(peerConnectionError));
|
|
210
|
-
return null;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Gets total elapsed time
|
|
216
|
-
* @param {RTCPeerConnection} peerConnection
|
|
217
|
-
* @returns {Number} Milliseconds
|
|
218
|
-
* @private
|
|
219
|
-
* @memberof Reachability
|
|
220
|
-
*/
|
|
221
|
-
}, {
|
|
222
|
-
key: "getElapsedTime",
|
|
223
|
-
value: function getElapsedTime(peerConnection) {
|
|
224
|
-
var startTime = peerConnection.begin;
|
|
225
|
-
delete peerConnection.begin;
|
|
226
|
-
return (0, _now.default)() - startTime;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* creates offer and generates localSDP
|
|
231
|
-
* @param {object} clusterList cluster List
|
|
232
|
-
* @returns {Promise} Reachability latency results
|
|
233
|
-
* @private
|
|
234
|
-
* @memberof Reachability
|
|
235
|
-
*/
|
|
236
|
-
}, {
|
|
237
|
-
key: "getLocalSDPForClusters",
|
|
238
|
-
value: function getLocalSDPForClusters(clusterList) {
|
|
239
|
-
var _this = this;
|
|
240
|
-
var clusters = (0, _toConsumableArray2.default)((0, _keys.default)(clusterList));
|
|
241
|
-
clusters = clusters.map( /*#__PURE__*/function () {
|
|
242
|
-
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(key) {
|
|
243
|
-
var cluster, config, peerConnection, description;
|
|
244
|
-
return _regenerator.default.wrap(function _callee3$(_context3) {
|
|
245
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
246
|
-
case 0:
|
|
247
|
-
cluster = clusterList[key];
|
|
248
|
-
config = _this.buildPeerConnectionConfig(cluster);
|
|
249
|
-
peerConnection = _this.createPeerConnection({
|
|
250
|
-
key: key,
|
|
251
|
-
config: config
|
|
252
|
-
});
|
|
253
|
-
_context3.next = 5;
|
|
254
|
-
return peerConnection.createOffer({
|
|
255
|
-
offerToReceiveAudio: true
|
|
256
|
-
});
|
|
257
|
-
case 5:
|
|
258
|
-
description = _context3.sent;
|
|
259
|
-
// @ts-ignore
|
|
260
|
-
peerConnection.begin = (0, _now.default)();
|
|
261
|
-
peerConnection.setLocalDescription(description);
|
|
262
|
-
return _context3.abrupt("return", _this.iceGatheringState(peerConnection, cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT).catch(function (iceGatheringStateError) {
|
|
263
|
-
_loggerProxy.default.logger.log("Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ".concat(iceGatheringStateError));
|
|
264
|
-
}));
|
|
265
|
-
case 9:
|
|
266
|
-
case "end":
|
|
267
|
-
return _context3.stop();
|
|
268
|
-
}
|
|
269
|
-
}, _callee3);
|
|
270
|
-
}));
|
|
271
|
-
return function (_x) {
|
|
272
|
-
return _ref.apply(this, arguments);
|
|
273
|
-
};
|
|
274
|
-
}());
|
|
275
|
-
return _promise.default.all(clusters).then(this.parseIceResultsToReachabilityResults).then(function (reachabilityLatencyResults) {
|
|
276
|
-
_this.logUnreachableClusters();
|
|
277
|
-
|
|
278
|
-
// return results
|
|
279
|
-
return reachabilityLatencyResults;
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
|
|
283
305
|
/**
|
|
284
306
|
* Get list of all unreachable clusters
|
|
285
307
|
* @returns {array} Unreachable clusters
|
|
@@ -287,121 +309,28 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
287
309
|
* @memberof Reachability
|
|
288
310
|
*/
|
|
289
311
|
}, {
|
|
290
|
-
key: "
|
|
291
|
-
value: function
|
|
312
|
+
key: "getUnreachableClusters",
|
|
313
|
+
value: function getUnreachableClusters() {
|
|
292
314
|
var unreachableList = [];
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
315
|
+
(0, _entries.default)(this.clusterReachability).forEach(function (_ref) {
|
|
316
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
317
|
+
key = _ref2[0],
|
|
318
|
+
clusterReachability = _ref2[1];
|
|
319
|
+
var result = clusterReachability.getResult();
|
|
320
|
+
if (result.udp.result === 'unreachable') {
|
|
321
|
+
unreachableList.push({
|
|
322
|
+
name: key,
|
|
323
|
+
protocol: 'udp'
|
|
324
|
+
});
|
|
298
325
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
* Attach an event handler for the icegatheringstatechange
|
|
305
|
-
* event and measure latency.
|
|
306
|
-
* @param {RTCPeerConnection} peerConnection
|
|
307
|
-
* @returns {undefined}
|
|
308
|
-
* @private
|
|
309
|
-
* @memberof Reachability
|
|
310
|
-
*/
|
|
311
|
-
}, {
|
|
312
|
-
key: "handleIceGatheringStateChange",
|
|
313
|
-
value: function handleIceGatheringStateChange(peerConnection) {
|
|
314
|
-
var _this2 = this;
|
|
315
|
-
peerConnection.onicegatheringstatechange = function () {
|
|
316
|
-
var COMPLETE = _constants.ICE_GATHERING_STATE.COMPLETE;
|
|
317
|
-
if (peerConnection.iceConnectionState === COMPLETE) {
|
|
318
|
-
var elapsed = _this2.getElapsedTime(peerConnection);
|
|
319
|
-
|
|
320
|
-
// @ts-ignore
|
|
321
|
-
_loggerProxy.default.logger.log( // @ts-ignore
|
|
322
|
-
"Reachability:index#onIceGatheringStateChange --> Successfully pinged ".concat(peerConnection.key, ":"), elapsed);
|
|
323
|
-
_this2.setLatencyAndClose(peerConnection, elapsed);
|
|
326
|
+
if (result.tcp.result === 'unreachable') {
|
|
327
|
+
unreachableList.push({
|
|
328
|
+
name: key,
|
|
329
|
+
protocol: 'tcp'
|
|
330
|
+
});
|
|
324
331
|
}
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* Attach an event handler for the icecandidate
|
|
330
|
-
* event and measure latency.
|
|
331
|
-
* @param {RTCPeerConnection} peerConnection
|
|
332
|
-
* @returns {undefined}
|
|
333
|
-
* @private
|
|
334
|
-
* @memberof Reachability
|
|
335
|
-
*/
|
|
336
|
-
}, {
|
|
337
|
-
key: "handleOnIceCandidate",
|
|
338
|
-
value: function handleOnIceCandidate(peerConnection) {
|
|
339
|
-
var _this3 = this;
|
|
340
|
-
peerConnection.onicecandidate = function (e) {
|
|
341
|
-
var SERVER_REFLEXIVE = 'srflx';
|
|
342
|
-
if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {
|
|
343
|
-
var elapsed = _this3.getElapsedTime(peerConnection);
|
|
344
|
-
_loggerProxy.default.logger.log( // @ts-ignore
|
|
345
|
-
"Reachability:index#onIceCandidate --> Successfully pinged ".concat(peerConnection.key, ":"), elapsed);
|
|
346
|
-
_this3.setLatencyAndClose(peerConnection, elapsed);
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* An event handler on an RTCPeerConnection when the state of the ICE
|
|
353
|
-
* candidate gathering process changes. Used to measure connection
|
|
354
|
-
* speed.
|
|
355
|
-
* @private
|
|
356
|
-
* @param {RTCPeerConnection} peerConnection
|
|
357
|
-
* @param {number} timeout
|
|
358
|
-
* @returns {Promise}
|
|
359
|
-
*/
|
|
360
|
-
}, {
|
|
361
|
-
key: "iceGatheringState",
|
|
362
|
-
value: function iceGatheringState(peerConnection, timeout) {
|
|
363
|
-
var _this4 = this;
|
|
364
|
-
var ELAPSED = 'elapsed';
|
|
365
|
-
return new _promise.default(function (resolve) {
|
|
366
|
-
var peerConnectionProxy = new window.Proxy(peerConnection, {
|
|
367
|
-
get: function get(target, property) {
|
|
368
|
-
var targetMember = target[property];
|
|
369
|
-
if (typeof targetMember === 'function') {
|
|
370
|
-
return targetMember.bind(target);
|
|
371
|
-
}
|
|
372
|
-
return targetMember;
|
|
373
|
-
},
|
|
374
|
-
set: function set(target, property, value) {
|
|
375
|
-
// only intercept elapsed property
|
|
376
|
-
if (property === ELAPSED) {
|
|
377
|
-
// @ts-ignore
|
|
378
|
-
resolve({
|
|
379
|
-
clusterId: peerConnection.key,
|
|
380
|
-
elapsed: value
|
|
381
|
-
});
|
|
382
|
-
return true;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// pass thru
|
|
386
|
-
return window.Reflect.set(target, property, value);
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
// Using peerConnection proxy so handle functions below
|
|
391
|
-
// won't be coupled to our promise implementation
|
|
392
|
-
_this4.handleIceGatheringStateChange(peerConnectionProxy);
|
|
393
|
-
_this4.handleOnIceCandidate(peerConnectionProxy);
|
|
394
|
-
|
|
395
|
-
// Set maximum timeout
|
|
396
|
-
window.setTimeout(function () {
|
|
397
|
-
var CLOSED = _constants.CONNECTION_STATE.CLOSED;
|
|
398
|
-
|
|
399
|
-
// Close any open peerConnections
|
|
400
|
-
if (peerConnectionProxy.connectionState !== CLOSED) {
|
|
401
|
-
_this4.setLatencyAndClose(peerConnectionProxy, null);
|
|
402
|
-
}
|
|
403
|
-
}, timeout);
|
|
404
332
|
});
|
|
333
|
+
return unreachableList;
|
|
405
334
|
}
|
|
406
335
|
|
|
407
336
|
/**
|
|
@@ -413,120 +342,65 @@ var Reachability = /*#__PURE__*/function () {
|
|
|
413
342
|
}, {
|
|
414
343
|
key: "logUnreachableClusters",
|
|
415
344
|
value: function logUnreachableClusters() {
|
|
416
|
-
var list = this.
|
|
417
|
-
list.forEach(function (
|
|
418
|
-
|
|
345
|
+
var list = this.getUnreachableClusters();
|
|
346
|
+
list.forEach(function (_ref3) {
|
|
347
|
+
var name = _ref3.name,
|
|
348
|
+
protocol = _ref3.protocol;
|
|
349
|
+
_loggerProxy.default.logger.log("Reachability:index#logUnreachableClusters --> failed to reach ".concat(name, " over ").concat(protocol));
|
|
419
350
|
});
|
|
420
351
|
}
|
|
421
352
|
|
|
422
353
|
/**
|
|
423
|
-
*
|
|
424
|
-
* @param {
|
|
425
|
-
* @returns {
|
|
426
|
-
* @private
|
|
427
|
-
* @memberof Reachability
|
|
354
|
+
* Performs reachability checks for all clusters
|
|
355
|
+
* @param {ClusterList} clusterList
|
|
356
|
+
* @returns {Promise<ReachabilityResults>} reachability check results
|
|
428
357
|
*/
|
|
429
358
|
}, {
|
|
430
|
-
key: "
|
|
431
|
-
value: function
|
|
432
|
-
var
|
|
433
|
-
|
|
434
|
-
var
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
return _promise.default.resolve({});
|
|
468
|
-
}
|
|
469
|
-
return new _promise.default(function (resolve) {
|
|
470
|
-
_this5.getLocalSDPForClusters(clusterList).then(function (localSDPData) {
|
|
471
|
-
if (!localSDPData || !(0, _keys.default)(localSDPData).length) {
|
|
472
|
-
// TODO: handle the error condition properly and try retry
|
|
473
|
-
_loggerProxy.default.logger.log('Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning');
|
|
474
|
-
resolve({});
|
|
475
|
-
} else {
|
|
476
|
-
resolve(localSDPData);
|
|
359
|
+
key: "performReachabilityChecks",
|
|
360
|
+
value: function () {
|
|
361
|
+
var _performReachabilityChecks = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(clusterList) {
|
|
362
|
+
var _this2 = this;
|
|
363
|
+
var results, includeTcpReachability, clusterReachabilityChecks;
|
|
364
|
+
return _regenerator.default.wrap(function _callee5$(_context5) {
|
|
365
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
366
|
+
case 0:
|
|
367
|
+
results = {};
|
|
368
|
+
if (!(!clusterList || !(0, _keys.default)(clusterList).length)) {
|
|
369
|
+
_context5.next = 3;
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
return _context5.abrupt("return", _promise.default.resolve(results));
|
|
373
|
+
case 3:
|
|
374
|
+
// @ts-ignore
|
|
375
|
+
includeTcpReachability = this.webex.config.meetings.experimental.enableTcpReachability;
|
|
376
|
+
_loggerProxy.default.logger.log("Reachability:index#performReachabilityChecks --> doing UDP".concat(includeTcpReachability ? ' and TCP' : '', " reachability checks"));
|
|
377
|
+
clusterReachabilityChecks = (0, _keys.default)(clusterList).map(function (key) {
|
|
378
|
+
var cluster = clusterList[key];
|
|
379
|
+
if (!includeTcpReachability) {
|
|
380
|
+
cluster.tcp = [];
|
|
381
|
+
}
|
|
382
|
+
_this2.clusterReachability[key] = new _clusterReachability.ClusterReachability(key, cluster);
|
|
383
|
+
return _this2.clusterReachability[key].start().then(function (result) {
|
|
384
|
+
results[key] = result;
|
|
385
|
+
results[key].isVideoMesh = cluster.isVideoMesh;
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
_context5.next = 8;
|
|
389
|
+
return _promise.default.all(clusterReachabilityChecks);
|
|
390
|
+
case 8:
|
|
391
|
+
this.logUnreachableClusters();
|
|
392
|
+
return _context5.abrupt("return", results);
|
|
393
|
+
case 10:
|
|
394
|
+
case "end":
|
|
395
|
+
return _context5.stop();
|
|
477
396
|
}
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
/**
|
|
486
|
-
* Records latency and closes the peerConnection
|
|
487
|
-
* @param {RTCPeerConnection} peerConnection
|
|
488
|
-
* @param {number} elapsed Latency in milliseconds
|
|
489
|
-
* @returns {undefined}
|
|
490
|
-
* @private
|
|
491
|
-
* @memberof Reachability
|
|
492
|
-
*/
|
|
493
|
-
}, {
|
|
494
|
-
key: "setLatencyAndClose",
|
|
495
|
-
value: function setLatencyAndClose(peerConnection, elapsed) {
|
|
496
|
-
var _intialState;
|
|
497
|
-
var REACHABLE = 'reachable';
|
|
498
|
-
var UNREACHABLE = 'unreachable';
|
|
499
|
-
var CLOSED = _constants.CONNECTION_STATE.CLOSED;
|
|
500
|
-
// @ts-ignore
|
|
501
|
-
var key = peerConnection.key;
|
|
502
|
-
var resultKey = elapsed === null ? UNREACHABLE : REACHABLE;
|
|
503
|
-
var intialState = (_intialState = {}, (0, _defineProperty2.default)(_intialState, REACHABLE, 0), (0, _defineProperty2.default)(_intialState, UNREACHABLE, 0), _intialState);
|
|
504
|
-
if (peerConnection.connectionState === CLOSED) {
|
|
505
|
-
_loggerProxy.default.logger.log("Reachability:index#setLatencyAndClose --> Attempting to set latency of ".concat(elapsed, " on closed peerConnection."));
|
|
506
|
-
return;
|
|
397
|
+
}, _callee5, this);
|
|
398
|
+
}));
|
|
399
|
+
function performReachabilityChecks(_x) {
|
|
400
|
+
return _performReachabilityChecks.apply(this, arguments);
|
|
507
401
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
// Set to null in case this fired from
|
|
512
|
-
// an event other than onIceCandidate
|
|
513
|
-
peerConnection.onicecandidate = null;
|
|
514
|
-
peerConnection.close();
|
|
515
|
-
// @ts-ignore
|
|
516
|
-
peerConnection.elapsed = elapsed;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
/**
|
|
520
|
-
* utility function
|
|
521
|
-
* @returns {undefined}
|
|
522
|
-
* @private
|
|
523
|
-
* @memberof Reachability
|
|
524
|
-
*/
|
|
525
|
-
}, {
|
|
526
|
-
key: "setup",
|
|
527
|
-
value: function setup() {
|
|
528
|
-
this.clusterLatencyResults = {};
|
|
529
|
-
}
|
|
402
|
+
return performReachabilityChecks;
|
|
403
|
+
}()
|
|
530
404
|
}]);
|
|
531
405
|
return Reachability;
|
|
532
406
|
}();
|