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