@webex/plugin-meetings 3.0.0-beta.14 → 3.0.0-beta.16
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/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 +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- 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 +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- 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 +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- 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 +1 -24
- 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 +35 -61
- 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 +1 -5
- package/dist/config.js.map +1 -1
- package/dist/constants.js +45 -40
- package/dist/constants.js.map +1 -1
- package/dist/index.js +1 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +10 -28
- 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 +101 -193
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- 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 +87 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +16 -81
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +43 -97
- package/dist/media/index.js.map +1 -1
- package/dist/media/internal-media-core-wrapper.js +0 -4
- package/dist/media/internal-media-core-wrapper.js.map +1 -1
- package/dist/media/properties.js +64 -110
- 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 +120 -192
- package/dist/meeting/effectsState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -13
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +819 -1591
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +31 -78
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +160 -230
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +0 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +19 -158
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +179 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- 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 +3 -21
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +450 -582
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +7 -30
- 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 +49 -89
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +17 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +2 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +72 -194
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +21 -56
- 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 +48 -136
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +12 -28
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +11 -21
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +7 -47
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +38 -77
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +11 -56
- 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 +221 -380
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- 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 +100 -166
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.js +0 -2
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +2 -6
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -459
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +18 -53
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +13 -55
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +10 -52
- 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 +66 -174
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +54 -53
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/internal-README.md +7 -6
- package/package.json +18 -18
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +11 -11
- package/src/constants.ts +1 -1
- package/src/index.js +1 -1
- package/src/locus-info/controlsUtils.ts +34 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +25 -34
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +45 -68
- package/src/locus-info/selfUtils.ts +106 -57
- package/src/media/index.ts +123 -135
- package/src/media/internal-media-core-wrapper.ts +2 -2
- package/src/media/properties.ts +30 -20
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +46 -46
- package/src/meeting/effectsState.ts +35 -35
- package/src/meeting/in-meeting-actions.ts +7 -3
- package/src/meeting/index.ts +1559 -1292
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +155 -116
- package/src/meeting/request.type.ts +8 -8
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +101 -70
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +106 -108
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +59 -53
- package/src/meetings/collection.ts +1 -1
- package/src/meetings/index.ts +512 -440
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +29 -29
- package/src/member/index.ts +55 -49
- package/src/member/util.ts +26 -13
- package/src/members/collection.ts +0 -1
- package/src/members/index.ts +182 -126
- package/src/members/request.ts +46 -14
- package/src/members/util.ts +44 -42
- package/src/metrics/config.ts +254 -81
- package/src/metrics/constants.ts +0 -2
- package/src/metrics/index.ts +84 -71
- package/src/multistream/multistreamMedia.ts +1 -0
- package/src/multistream/receiveSlot.ts +1 -0
- package/src/multistream/receiveSlotManager.ts +1 -0
- package/src/multistream/remoteMedia.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +2 -1
- package/src/multistream/remoteMediaManager.ts +3 -0
- package/src/networkQualityMonitor/index.ts +20 -23
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +61 -59
- package/src/reachability/request.ts +36 -32
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -3
- package/src/reconnection-manager/index.ts +139 -84
- package/src/roap/index.ts +46 -38
- package/src/roap/request.ts +44 -31
- package/src/roap/turnDiscovery.ts +59 -30
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +432 -175
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +664 -463
- package/test/integration/spec/space-meeting.js +319 -204
- package/test/integration/spec/transcription.js +7 -8
- 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 +5 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1 -2
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- 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 +72 -103
- package/test/unit/spec/locus-info/selfUtils.js +21 -12
- package/test/unit/spec/meeting/effectsState.js +36 -46
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1279 -685
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +57 -46
- package/test/unit/spec/meeting/utils.js +78 -53
- 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 +438 -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 +5 -6
- 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/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 +9 -11
- package/test/unit/spec/reconnection-manager/index.js +16 -18
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/stats-analyzer/index.js +25 -20
- 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 +53 -50
package/src/roap/request.ts
CHANGED
|
@@ -3,11 +3,7 @@
|
|
|
3
3
|
import {StatelessWebexPlugin} from '@webex/webex-core';
|
|
4
4
|
|
|
5
5
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
6
|
-
import {
|
|
7
|
-
MEDIA,
|
|
8
|
-
HTTP_VERBS,
|
|
9
|
-
REACHABILITY
|
|
10
|
-
} from '../constants';
|
|
6
|
+
import {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
|
|
11
7
|
import Metrics from '../metrics';
|
|
12
8
|
import {eventType} from '../metrics/config';
|
|
13
9
|
|
|
@@ -21,7 +17,6 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
21
17
|
* @returns {Promise} returns a promise that resolves/rejects whatever the request does
|
|
22
18
|
*/
|
|
23
19
|
|
|
24
|
-
|
|
25
20
|
attachRechabilityData(localSdp) {
|
|
26
21
|
const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
|
|
27
22
|
|
|
@@ -33,9 +28,10 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
33
28
|
if (reachabilityResult && Object.keys(reachabilityResult).length) {
|
|
34
29
|
localSdp.reachability = reachabilityResult;
|
|
35
30
|
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
} catch (e) {
|
|
32
|
+
LoggerProxy.logger.error(
|
|
33
|
+
`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
|
|
34
|
+
);
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
37
|
|
|
@@ -64,9 +60,7 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
64
60
|
meetingId: string;
|
|
65
61
|
preferTranscoding?: boolean;
|
|
66
62
|
}) {
|
|
67
|
-
const {
|
|
68
|
-
roapMessage, locusSelfUrl, mediaId, correlationId, meetingId
|
|
69
|
-
} = options;
|
|
63
|
+
const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
|
|
70
64
|
|
|
71
65
|
if (!mediaId) {
|
|
72
66
|
LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
|
|
@@ -76,7 +70,9 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
76
70
|
// @ts-ignore
|
|
77
71
|
const deviceUrl = this.webex.internal.device.url;
|
|
78
72
|
|
|
79
|
-
LoggerProxy.logger.info(
|
|
73
|
+
LoggerProxy.logger.info(
|
|
74
|
+
`Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
|
|
75
|
+
);
|
|
80
76
|
|
|
81
77
|
Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
|
|
82
78
|
|
|
@@ -89,34 +85,43 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
89
85
|
device: {
|
|
90
86
|
url: deviceUrl,
|
|
91
87
|
// @ts-ignore
|
|
92
|
-
deviceType: this.config.meetings.deviceType
|
|
88
|
+
deviceType: this.config.meetings.deviceType,
|
|
93
89
|
},
|
|
94
90
|
correlationId,
|
|
95
91
|
localMedias: [
|
|
96
92
|
{
|
|
97
|
-
localSdp: JSON.stringify(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
93
|
+
localSdp: JSON.stringify(
|
|
94
|
+
this.attachRechabilityData({
|
|
95
|
+
roapMessage,
|
|
96
|
+
// eslint-disable-next-line no-warning-comments
|
|
97
|
+
// TODO: check whats the need for video and audiomute
|
|
98
|
+
audioMuted: !!options.audioMuted,
|
|
99
|
+
videoMuted: !!options.videoMuted,
|
|
100
|
+
})
|
|
101
|
+
),
|
|
102
|
+
mediaId: options.mediaId,
|
|
103
|
+
},
|
|
106
104
|
],
|
|
107
105
|
clientMediaPreferences: {
|
|
108
|
-
preferTranscoding: options.preferTranscoding ?? true
|
|
109
|
-
}
|
|
110
|
-
}
|
|
106
|
+
preferTranscoding: options.preferTranscoding ?? true,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
111
109
|
})
|
|
112
110
|
.then((res) => {
|
|
113
111
|
Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
|
|
114
112
|
|
|
115
113
|
// always it will be the first mediaConnection Object
|
|
116
|
-
const mediaConnections =
|
|
114
|
+
const mediaConnections =
|
|
115
|
+
res.body.mediaConnections &&
|
|
116
|
+
res.body.mediaConnections.length > 0 &&
|
|
117
|
+
res.body.mediaConnections[0];
|
|
117
118
|
|
|
118
119
|
LoggerProxy.logger.info(
|
|
119
|
-
`Roap:request#sendRoap --> response:${JSON.stringify(
|
|
120
|
+
`Roap:request#sendRoap --> response:${JSON.stringify(
|
|
121
|
+
mediaConnections,
|
|
122
|
+
null,
|
|
123
|
+
2
|
|
124
|
+
)}'\n StatusCode:'${res.statusCode}`
|
|
120
125
|
);
|
|
121
126
|
const {locus} = res.body;
|
|
122
127
|
|
|
@@ -124,14 +129,22 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
124
129
|
|
|
125
130
|
return {
|
|
126
131
|
locus,
|
|
127
|
-
...(mediaConnections && {mediaConnections: res.body.mediaConnections})
|
|
132
|
+
...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
|
|
128
133
|
};
|
|
129
134
|
})
|
|
130
135
|
.catch((err) => {
|
|
131
|
-
Metrics.postEvent({
|
|
136
|
+
Metrics.postEvent({
|
|
137
|
+
event: eventType.MEDIA_RESPONSE,
|
|
138
|
+
meetingId,
|
|
139
|
+
data: {error: Metrics.parseLocusError(err, true)},
|
|
140
|
+
});
|
|
132
141
|
LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
|
|
133
142
|
LoggerProxy.logger.error(
|
|
134
|
-
`Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
|
|
143
|
+
`Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
|
|
144
|
+
roapMessage,
|
|
145
|
+
null,
|
|
146
|
+
2
|
|
147
|
+
)} + '\\n mediaId:'${options.mediaId}`
|
|
135
148
|
);
|
|
136
149
|
throw err;
|
|
137
150
|
});
|
|
@@ -48,7 +48,6 @@ export default class TurnDiscovery {
|
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
|
|
52
51
|
/**
|
|
53
52
|
* waits for TURN_DISCOVERY_RESPONSE message to arrive
|
|
54
53
|
*
|
|
@@ -58,20 +57,28 @@ export default class TurnDiscovery {
|
|
|
58
57
|
*/
|
|
59
58
|
private waitForTurnDiscoveryResponse() {
|
|
60
59
|
if (!this.defer) {
|
|
61
|
-
LoggerProxy.logger.warn(
|
|
60
|
+
LoggerProxy.logger.warn(
|
|
61
|
+
'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'
|
|
62
|
+
);
|
|
62
63
|
|
|
63
|
-
return Promise.reject(
|
|
64
|
+
return Promise.reject(
|
|
65
|
+
new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')
|
|
66
|
+
);
|
|
64
67
|
}
|
|
65
68
|
|
|
66
69
|
const {defer} = this;
|
|
67
70
|
|
|
68
71
|
this.responseTimer = setTimeout(() => {
|
|
69
|
-
LoggerProxy.logger.warn(
|
|
72
|
+
LoggerProxy.logger.warn(
|
|
73
|
+
`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`
|
|
74
|
+
);
|
|
70
75
|
|
|
71
76
|
defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
|
|
72
77
|
}, TURN_DISCOVERY_TIMEOUT * 1000);
|
|
73
78
|
|
|
74
|
-
LoggerProxy.logger.info(
|
|
79
|
+
LoggerProxy.logger.info(
|
|
80
|
+
'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'
|
|
81
|
+
);
|
|
75
82
|
|
|
76
83
|
return defer.promise;
|
|
77
84
|
}
|
|
@@ -89,7 +96,9 @@ export default class TurnDiscovery {
|
|
|
89
96
|
const {headers} = roapMessage;
|
|
90
97
|
|
|
91
98
|
if (!this.defer) {
|
|
92
|
-
LoggerProxy.logger.warn(
|
|
99
|
+
LoggerProxy.logger.warn(
|
|
100
|
+
'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'
|
|
101
|
+
);
|
|
93
102
|
|
|
94
103
|
return;
|
|
95
104
|
}
|
|
@@ -106,7 +115,9 @@ export default class TurnDiscovery {
|
|
|
106
115
|
// check if it matches any of our expected headers
|
|
107
116
|
expectedHeaders.forEach((expectedHeader) => {
|
|
108
117
|
if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {
|
|
109
|
-
this.turnInfo[expectedHeader.field] = receivedHeader.substring(
|
|
118
|
+
this.turnInfo[expectedHeader.field] = receivedHeader.substring(
|
|
119
|
+
expectedHeader.headerName.length + 1
|
|
120
|
+
);
|
|
110
121
|
foundHeaders += 1;
|
|
111
122
|
}
|
|
112
123
|
});
|
|
@@ -116,11 +127,18 @@ export default class TurnDiscovery {
|
|
|
116
127
|
this.responseTimer = undefined;
|
|
117
128
|
|
|
118
129
|
if (foundHeaders !== expectedHeaders.length) {
|
|
119
|
-
LoggerProxy.logger.warn(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
130
|
+
LoggerProxy.logger.warn(
|
|
131
|
+
`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(
|
|
132
|
+
headers
|
|
133
|
+
)}`
|
|
134
|
+
);
|
|
135
|
+
this.defer.reject(
|
|
136
|
+
new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`)
|
|
137
|
+
);
|
|
138
|
+
} else {
|
|
139
|
+
LoggerProxy.logger.info(
|
|
140
|
+
`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`
|
|
141
|
+
);
|
|
124
142
|
this.defer.resolve();
|
|
125
143
|
}
|
|
126
144
|
}
|
|
@@ -136,7 +154,9 @@ export default class TurnDiscovery {
|
|
|
136
154
|
*/
|
|
137
155
|
sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
|
|
138
156
|
if (this.defer) {
|
|
139
|
-
LoggerProxy.logger.warn(
|
|
157
|
+
LoggerProxy.logger.warn(
|
|
158
|
+
'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
|
|
159
|
+
);
|
|
140
160
|
|
|
141
161
|
return Promise.resolve();
|
|
142
162
|
}
|
|
@@ -149,19 +169,21 @@ export default class TurnDiscovery {
|
|
|
149
169
|
seq: TURN_DISCOVERY_SEQ,
|
|
150
170
|
};
|
|
151
171
|
|
|
152
|
-
LoggerProxy.logger.info(
|
|
172
|
+
LoggerProxy.logger.info(
|
|
173
|
+
'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'
|
|
174
|
+
);
|
|
153
175
|
|
|
154
176
|
return this.roapRequest
|
|
155
177
|
.sendRoap({
|
|
156
178
|
roapMessage,
|
|
157
179
|
correlationId: meeting.correlationId,
|
|
158
|
-
|
|
180
|
+
// @ts-ignore - Fix missing type
|
|
159
181
|
locusSelfUrl: meeting.selfUrl,
|
|
160
182
|
// @ts-ignore - Fix missing type
|
|
161
183
|
mediaId: isReconnecting ? '' : meeting.mediaId,
|
|
162
184
|
audioMuted: meeting.isAudioMuted(),
|
|
163
185
|
videoMuted: meeting.isVideoMuted(),
|
|
164
|
-
meetingId: meeting.id
|
|
186
|
+
meetingId: meeting.id,
|
|
165
187
|
})
|
|
166
188
|
.then(({mediaConnections}) => {
|
|
167
189
|
if (mediaConnections) {
|
|
@@ -193,7 +215,7 @@ export default class TurnDiscovery {
|
|
|
193
215
|
correlationId: meeting.correlationId,
|
|
194
216
|
audioMuted: meeting.isAudioMuted(),
|
|
195
217
|
videoMuted: meeting.isVideoMuted(),
|
|
196
|
-
meetingId: meeting.id
|
|
218
|
+
meetingId: meeting.id,
|
|
197
219
|
});
|
|
198
220
|
}
|
|
199
221
|
|
|
@@ -219,13 +241,21 @@ export default class TurnDiscovery {
|
|
|
219
241
|
const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
|
|
220
242
|
|
|
221
243
|
if (isAnyClusterReachable) {
|
|
222
|
-
LoggerProxy.logger.info(
|
|
223
|
-
|
|
244
|
+
LoggerProxy.logger.info(
|
|
245
|
+
'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
return Promise.resolve({
|
|
249
|
+
turnServerInfo: undefined,
|
|
250
|
+
turnDiscoverySkippedReason: 'reachability',
|
|
251
|
+
});
|
|
224
252
|
}
|
|
225
253
|
|
|
226
254
|
// @ts-ignore - fix type
|
|
227
255
|
if (!meeting.config.experimental.enableTurnDiscovery) {
|
|
228
|
-
LoggerProxy.logger.info(
|
|
256
|
+
LoggerProxy.logger.info(
|
|
257
|
+
'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
|
|
258
|
+
);
|
|
229
259
|
|
|
230
260
|
return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
|
|
231
261
|
}
|
|
@@ -242,18 +272,17 @@ export default class TurnDiscovery {
|
|
|
242
272
|
})
|
|
243
273
|
.catch((e) => {
|
|
244
274
|
// we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
|
|
245
|
-
LoggerProxy.logger.info(
|
|
246
|
-
|
|
247
|
-
Metrics.sendBehavioralMetric(
|
|
248
|
-
BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
|
|
249
|
-
{
|
|
250
|
-
correlation_id: meeting.correlationId,
|
|
251
|
-
locus_id: meeting.locusUrl.split('/').pop(),
|
|
252
|
-
reason: e.message,
|
|
253
|
-
stack: e.stack
|
|
254
|
-
}
|
|
275
|
+
LoggerProxy.logger.info(
|
|
276
|
+
`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`
|
|
255
277
|
);
|
|
256
278
|
|
|
279
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {
|
|
280
|
+
correlation_id: meeting.correlationId,
|
|
281
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
282
|
+
reason: e.message,
|
|
283
|
+
stack: e.stack,
|
|
284
|
+
});
|
|
285
|
+
|
|
257
286
|
return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
|
|
258
287
|
});
|
|
259
288
|
}
|
|
@@ -7,14 +7,14 @@ const STATS_DEFAULT = {
|
|
|
7
7
|
availableBandwidth: 0,
|
|
8
8
|
bytesSent: 0,
|
|
9
9
|
meanRemoteJitter: [],
|
|
10
|
-
meanRoundTripTime: []
|
|
10
|
+
meanRoundTripTime: [],
|
|
11
11
|
},
|
|
12
12
|
recv: {
|
|
13
13
|
availableBandwidth: 0,
|
|
14
14
|
bytesReceived: 0,
|
|
15
15
|
meanRtpJitter: [],
|
|
16
|
-
meanRoundTripTime: []
|
|
17
|
-
}
|
|
16
|
+
meanRoundTripTime: [],
|
|
17
|
+
},
|
|
18
18
|
},
|
|
19
19
|
video: {
|
|
20
20
|
send: {
|
|
@@ -22,17 +22,16 @@ const STATS_DEFAULT = {
|
|
|
22
22
|
maxPacketLossRatio: 0,
|
|
23
23
|
availableBandwidth: 0,
|
|
24
24
|
meanRemoteJitter: [],
|
|
25
|
-
meanRoundTripTime: []
|
|
25
|
+
meanRoundTripTime: [],
|
|
26
26
|
},
|
|
27
27
|
recv: {
|
|
28
28
|
availableBandwidth: 0,
|
|
29
29
|
totalPacketsLost: 0,
|
|
30
30
|
meanRtpJitter: [],
|
|
31
|
-
meanRoundTripTime: []
|
|
32
|
-
|
|
31
|
+
meanRoundTripTime: [],
|
|
33
32
|
},
|
|
34
33
|
latency: 0,
|
|
35
|
-
packetsLost: 0
|
|
34
|
+
packetsLost: 0,
|
|
36
35
|
},
|
|
37
36
|
share: {
|
|
38
37
|
send: {
|
|
@@ -40,16 +39,16 @@ const STATS_DEFAULT = {
|
|
|
40
39
|
availableBandwidth: 0,
|
|
41
40
|
totalPacketsLost: 0,
|
|
42
41
|
meanRemoteJitter: [],
|
|
43
|
-
meanRoundTripTime: []
|
|
42
|
+
meanRoundTripTime: [],
|
|
44
43
|
},
|
|
45
44
|
recv: {
|
|
46
45
|
availableBandwidth: 0,
|
|
47
46
|
meanRtpJitter: [],
|
|
48
|
-
meanRoundTripTime: []
|
|
47
|
+
meanRoundTripTime: [],
|
|
49
48
|
},
|
|
50
49
|
|
|
51
50
|
latency: 0,
|
|
52
|
-
packetsLost: 0
|
|
51
|
+
packetsLost: 0,
|
|
53
52
|
},
|
|
54
53
|
bandwidth: {
|
|
55
54
|
systemBandwidth: 0,
|
|
@@ -57,9 +56,9 @@ const STATS_DEFAULT = {
|
|
|
57
56
|
encodedPerSecond: 0,
|
|
58
57
|
helper: {
|
|
59
58
|
audioBytesSent: 0,
|
|
60
|
-
videoBytestSent: 0
|
|
59
|
+
videoBytestSent: 0,
|
|
61
60
|
},
|
|
62
|
-
speed: 0
|
|
61
|
+
speed: 0,
|
|
63
62
|
},
|
|
64
63
|
results: {},
|
|
65
64
|
connectionType: {
|
|
@@ -69,65 +68,63 @@ const STATS_DEFAULT = {
|
|
|
69
68
|
candidateType: [],
|
|
70
69
|
transport: [],
|
|
71
70
|
ipAddress: [],
|
|
72
|
-
networkType: []
|
|
71
|
+
networkType: [],
|
|
73
72
|
},
|
|
74
73
|
remote: {
|
|
75
74
|
candidateType: [],
|
|
76
75
|
transport: [],
|
|
77
76
|
ipAddress: [],
|
|
78
|
-
networkType: []
|
|
79
|
-
}
|
|
77
|
+
networkType: [],
|
|
78
|
+
},
|
|
80
79
|
},
|
|
81
80
|
resolutions: {
|
|
82
81
|
audio: {
|
|
83
82
|
send: {
|
|
84
83
|
width: 0,
|
|
85
|
-
height: 0
|
|
84
|
+
height: 0,
|
|
86
85
|
},
|
|
87
86
|
recv: {
|
|
88
87
|
width: 0,
|
|
89
|
-
height: 0
|
|
90
|
-
}
|
|
88
|
+
height: 0,
|
|
89
|
+
},
|
|
91
90
|
},
|
|
92
91
|
video: {
|
|
93
92
|
send: {
|
|
94
93
|
width: 0,
|
|
95
|
-
height: 0
|
|
94
|
+
height: 0,
|
|
96
95
|
},
|
|
97
96
|
recv: {
|
|
98
97
|
width: 0,
|
|
99
|
-
height: 0
|
|
100
|
-
}
|
|
98
|
+
height: 0,
|
|
99
|
+
},
|
|
101
100
|
},
|
|
102
101
|
share: {
|
|
103
102
|
send: {
|
|
104
103
|
width: 0,
|
|
105
|
-
height: 0
|
|
104
|
+
height: 0,
|
|
106
105
|
},
|
|
107
106
|
recv: {
|
|
108
107
|
width: 0,
|
|
109
|
-
height: 0
|
|
110
|
-
}
|
|
111
|
-
}
|
|
108
|
+
height: 0,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
112
111
|
},
|
|
113
112
|
internal: {
|
|
114
113
|
audio: {
|
|
115
114
|
send: {},
|
|
116
|
-
recv: {}
|
|
115
|
+
recv: {},
|
|
117
116
|
},
|
|
118
117
|
video: {
|
|
119
118
|
send: {},
|
|
120
|
-
recv: {}
|
|
119
|
+
recv: {},
|
|
121
120
|
},
|
|
122
121
|
share: {
|
|
123
122
|
send: {},
|
|
124
|
-
recv: {}
|
|
123
|
+
recv: {},
|
|
125
124
|
},
|
|
126
|
-
remote: {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
candidates: {}
|
|
130
|
-
}
|
|
125
|
+
remote: {},
|
|
126
|
+
candidates: {},
|
|
127
|
+
},
|
|
131
128
|
};
|
|
132
129
|
|
|
133
130
|
export default STATS_DEFAULT;
|