@webex/plugin-meetings 2.36.1 → 2.37.1
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 +7 -46
- 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 +46 -42
- 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 -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 +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 +74 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +64 -110
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +3 -17
- 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 +812 -1487
- 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 +157 -227
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +25 -169
- 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 +451 -570
- 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 +94 -148
- 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 +68 -184
- 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/networkQualityMonitor/index.js +28 -57
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +60 -190
- package/dist/peer-connection-manager/index.js.map +1 -1
- package/dist/peer-connection-manager/util.js +10 -24
- package/dist/peer-connection-manager/util.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 +0 -5
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +294 -468
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/collection.js +1 -12
- package/dist/roap/collection.js.map +1 -1
- package/dist/roap/handler.js +15 -85
- package/dist/roap/handler.js.map +1 -1
- package/dist/roap/index.js +42 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +81 -148
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +2 -39
- package/dist/roap/state.js.map +1 -1
- package/dist/roap/turnDiscovery.js +8 -52
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +0 -26
- package/dist/roap/util.js.map +1 -1
- package/dist/statsAnalyzer/global.js +0 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +68 -168
- 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 +17 -17
- 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 +138 -119
- 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 +118 -109
- package/src/media/properties.ts +26 -20
- package/src/media/util.ts +2 -2
- 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 +1435 -1210
- package/src/meeting/muteState.ts +62 -31
- package/src/meeting/request.ts +160 -113
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +131 -90
- 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 +513 -441
- package/src/meetings/request.ts +26 -24
- package/src/meetings/util.ts +26 -23
- 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 +172 -121
- 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/networkQualityMonitor/index.ts +20 -23
- package/src/peer-connection-manager/index.ts +321 -241
- package/src/peer-connection-manager/util.ts +4 -2
- 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 +2 -3
- package/src/reconnection-manager/index.ts +159 -98
- package/src/roap/collection.ts +2 -4
- package/src/roap/handler.ts +63 -32
- package/src/roap/index.ts +78 -58
- package/src/roap/request.ts +69 -54
- package/src/roap/state.ts +17 -11
- package/src/roap/turnDiscovery.ts +60 -31
- package/src/roap/util.ts +39 -31
- package/src/statsAnalyzer/global.ts +30 -33
- package/src/statsAnalyzer/index.ts +397 -169
- package/src/statsAnalyzer/mqaUtil.ts +178 -72
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/journey.js +666 -462
- package/test/integration/spec/space-meeting.js +318 -203
- package/test/integration/spec/transcription.js +6 -7
- 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 +24 -31
- 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 +33 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
- package/test/unit/spec/meeting/index.js +1141 -649
- package/test/unit/spec/meeting/muteState.js +42 -33
- package/test/unit/spec/meeting/request.js +56 -45
- package/test/unit/spec/meeting/utils.js +66 -49
- 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 +84 -35
- 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/peerconnection-manager/index.js +88 -58
- package/test/unit/spec/peerconnection-manager/utils.js +5 -4
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
- 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 +14 -17
- package/test/unit/spec/roap/index.ts +18 -8
- package/test/unit/spec/roap/turnDiscovery.ts +22 -19
- package/test/unit/spec/roap/util.js +3 -3
- package/test/unit/spec/stats-analyzer/index.js +29 -24
- 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
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
SHARE_STOPPED_REASON,
|
|
14
14
|
_CALL_,
|
|
15
15
|
_LEFT_,
|
|
16
|
-
_ID_
|
|
16
|
+
_ID_,
|
|
17
17
|
} from '../constants';
|
|
18
18
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
|
19
19
|
import ReconnectionError from '../common/errors/reconnection';
|
|
@@ -66,7 +66,7 @@ class NeedsRejoinError extends Error {
|
|
|
66
66
|
/**
|
|
67
67
|
* @export
|
|
68
68
|
* @class ReconnectionManager
|
|
69
|
-
*/
|
|
69
|
+
*/
|
|
70
70
|
export default class ReconnectionManager {
|
|
71
71
|
autoRejoinEnabled: any;
|
|
72
72
|
iceState: any;
|
|
@@ -94,7 +94,7 @@ export default class ReconnectionManager {
|
|
|
94
94
|
resolve: () => {},
|
|
95
95
|
timer: undefined,
|
|
96
96
|
// @ts-ignore
|
|
97
|
-
timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout
|
|
97
|
+
timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,
|
|
98
98
|
};
|
|
99
99
|
|
|
100
100
|
/**
|
|
@@ -102,21 +102,21 @@ export default class ReconnectionManager {
|
|
|
102
102
|
* @type {String}
|
|
103
103
|
* @private
|
|
104
104
|
* @memberof ReconnectionManager
|
|
105
|
-
|
|
105
|
+
*/
|
|
106
106
|
this.status = RECONNECTION.STATE.DEFAULT_STATUS;
|
|
107
107
|
/**
|
|
108
108
|
* @instance
|
|
109
109
|
* @type {Number}
|
|
110
110
|
* @private
|
|
111
111
|
* @memberof ReconnectionManager
|
|
112
|
-
|
|
112
|
+
*/
|
|
113
113
|
this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;
|
|
114
114
|
/**
|
|
115
115
|
* @instance
|
|
116
116
|
* @type {Object}
|
|
117
117
|
* @private
|
|
118
118
|
* @memberof ReconnectionManager
|
|
119
|
-
|
|
119
|
+
*/
|
|
120
120
|
// TODO : change this logic to not save the meeting instance
|
|
121
121
|
// It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date
|
|
122
122
|
// @ts-ignore
|
|
@@ -137,7 +137,6 @@ export default class ReconnectionManager {
|
|
|
137
137
|
// @ts-ignore
|
|
138
138
|
this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;
|
|
139
139
|
|
|
140
|
-
|
|
141
140
|
// Make sure reconnection state is in default
|
|
142
141
|
this.reset();
|
|
143
142
|
}
|
|
@@ -178,7 +177,9 @@ export default class ReconnectionManager {
|
|
|
178
177
|
*/
|
|
179
178
|
public waitForIceReconnect() {
|
|
180
179
|
if (!this.iceState.disconnected) {
|
|
181
|
-
LoggerProxy.logger.log(
|
|
180
|
+
LoggerProxy.logger.log(
|
|
181
|
+
'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'
|
|
182
|
+
);
|
|
182
183
|
|
|
183
184
|
this.iceState.disconnected = true;
|
|
184
185
|
|
|
@@ -186,10 +187,11 @@ export default class ReconnectionManager {
|
|
|
186
187
|
this.iceState.timer = setTimeout(() => {
|
|
187
188
|
if (this.iceState.disconnected === false) {
|
|
188
189
|
resolve();
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
190
|
+
} else {
|
|
191
191
|
this.iceState.disconnected = false;
|
|
192
|
-
reject(
|
|
192
|
+
reject(
|
|
193
|
+
new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)
|
|
194
|
+
);
|
|
193
195
|
}
|
|
194
196
|
}, this.iceState.timeoutDuration);
|
|
195
197
|
|
|
@@ -237,7 +239,9 @@ export default class ReconnectionManager {
|
|
|
237
239
|
return true;
|
|
238
240
|
}
|
|
239
241
|
|
|
240
|
-
LoggerProxy.logger.info(
|
|
242
|
+
LoggerProxy.logger.info(
|
|
243
|
+
'ReconnectionManager:index#validate --> Reconnection already in progress.'
|
|
244
|
+
);
|
|
241
245
|
|
|
242
246
|
throw new ReconnectInProgress('Reconnection already in progress.');
|
|
243
247
|
}
|
|
@@ -263,38 +267,48 @@ export default class ReconnectionManager {
|
|
|
263
267
|
networkDisconnect?: boolean;
|
|
264
268
|
networkRetry?: boolean;
|
|
265
269
|
} = {}) {
|
|
266
|
-
LoggerProxy.logger.info(
|
|
270
|
+
LoggerProxy.logger.info(
|
|
271
|
+
`ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`
|
|
272
|
+
);
|
|
267
273
|
// First, validate that we can reconnect, if not, it will throw an error
|
|
268
274
|
try {
|
|
269
275
|
this.validate();
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
|
|
276
|
+
} catch (error) {
|
|
277
|
+
LoggerProxy.logger.info(
|
|
278
|
+
'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',
|
|
279
|
+
error
|
|
280
|
+
);
|
|
273
281
|
throw error;
|
|
274
282
|
}
|
|
275
283
|
|
|
276
284
|
if (!networkRetry) {
|
|
277
285
|
// Only log START metrics on the initial reconnect
|
|
278
|
-
LoggerProxy.logger.info(
|
|
286
|
+
LoggerProxy.logger.info(
|
|
287
|
+
'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'
|
|
288
|
+
);
|
|
279
289
|
Metrics.postEvent({
|
|
280
290
|
event: eventType.MEDIA_RECONNECTING,
|
|
281
|
-
meeting: this.meeting
|
|
291
|
+
meeting: this.meeting,
|
|
282
292
|
});
|
|
283
293
|
}
|
|
284
294
|
|
|
285
295
|
return this.executeReconnection({networkDisconnect})
|
|
286
296
|
.then(() => {
|
|
287
297
|
LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');
|
|
288
|
-
LoggerProxy.logger.info(
|
|
298
|
+
LoggerProxy.logger.info(
|
|
299
|
+
'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'
|
|
300
|
+
);
|
|
289
301
|
Metrics.postEvent({
|
|
290
302
|
event: eventType.MEDIA_RECOVERED,
|
|
291
303
|
meeting: this.meeting,
|
|
292
|
-
data: {recoveredBy: reconnection.RECOVERED_BY_NEW}
|
|
304
|
+
data: {recoveredBy: reconnection.RECOVERED_BY_NEW},
|
|
293
305
|
});
|
|
294
306
|
})
|
|
295
307
|
.catch((reconnectError) => {
|
|
296
308
|
if (reconnectError instanceof NeedsRetryError) {
|
|
297
|
-
LoggerProxy.logger.info(
|
|
309
|
+
LoggerProxy.logger.info(
|
|
310
|
+
'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'
|
|
311
|
+
);
|
|
298
312
|
// Reset our reconnect status since we are looping back to the beginning
|
|
299
313
|
this.status = RECONNECTION.STATE.DEFAULT_STATUS;
|
|
300
314
|
|
|
@@ -303,8 +317,13 @@ export default class ReconnectionManager {
|
|
|
303
317
|
}
|
|
304
318
|
|
|
305
319
|
// Reconnect has failed
|
|
306
|
-
LoggerProxy.logger.error(
|
|
307
|
-
|
|
320
|
+
LoggerProxy.logger.error(
|
|
321
|
+
'ReconnectionManager:index#reconnect --> Reconnection failed.',
|
|
322
|
+
reconnectError.message
|
|
323
|
+
);
|
|
324
|
+
LoggerProxy.logger.info(
|
|
325
|
+
'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'
|
|
326
|
+
);
|
|
308
327
|
|
|
309
328
|
const reconnectMetric = {
|
|
310
329
|
event: eventType.CALL_ABORTED,
|
|
@@ -316,10 +335,10 @@ export default class ReconnectionManager {
|
|
|
316
335
|
errorCode: 2008,
|
|
317
336
|
fatal: true,
|
|
318
337
|
name: errorObjects.name.mediaEngine,
|
|
319
|
-
shownToUser: false
|
|
320
|
-
}
|
|
321
|
-
]
|
|
322
|
-
}
|
|
338
|
+
shownToUser: false,
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
},
|
|
323
342
|
};
|
|
324
343
|
|
|
325
344
|
Metrics.postEvent(reconnectMetric);
|
|
@@ -331,7 +350,6 @@ export default class ReconnectionManager {
|
|
|
331
350
|
}
|
|
332
351
|
}
|
|
333
352
|
|
|
334
|
-
|
|
335
353
|
throw reconnectError;
|
|
336
354
|
});
|
|
337
355
|
}
|
|
@@ -344,43 +362,57 @@ export default class ReconnectionManager {
|
|
|
344
362
|
* @private
|
|
345
363
|
* @memberof ReconnectionManager
|
|
346
364
|
*/
|
|
347
|
-
private async executeReconnection({
|
|
365
|
+
private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {
|
|
348
366
|
this.status = RECONNECTION.STATE.IN_PROGRESS;
|
|
349
367
|
|
|
350
|
-
LoggerProxy.logger.info(
|
|
368
|
+
LoggerProxy.logger.info(
|
|
369
|
+
'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'
|
|
370
|
+
);
|
|
351
371
|
|
|
352
372
|
if (networkDisconnect) {
|
|
353
373
|
try {
|
|
354
374
|
await this.reconnectMercuryWebSocket();
|
|
355
|
-
LoggerProxy.logger.error(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
375
|
+
LoggerProxy.logger.error(
|
|
376
|
+
'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',
|
|
377
|
+
this.webex.internal.device.url
|
|
378
|
+
);
|
|
379
|
+
} catch (error) {
|
|
380
|
+
LoggerProxy.logger.error(
|
|
381
|
+
'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'
|
|
382
|
+
);
|
|
359
383
|
this.status = RECONNECTION.STATE.FAILURE;
|
|
360
|
-
throw
|
|
384
|
+
throw error;
|
|
361
385
|
}
|
|
362
386
|
}
|
|
363
387
|
|
|
364
388
|
const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;
|
|
365
389
|
|
|
366
390
|
try {
|
|
367
|
-
LoggerProxy.logger.info(
|
|
391
|
+
LoggerProxy.logger.info(
|
|
392
|
+
'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'
|
|
393
|
+
);
|
|
368
394
|
await this.webex.meetings.syncMeetings();
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
395
|
+
} catch (syncError) {
|
|
396
|
+
LoggerProxy.logger.info(
|
|
397
|
+
'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',
|
|
398
|
+
syncError
|
|
399
|
+
);
|
|
400
|
+
throw new NeedsRetryError(syncError);
|
|
373
401
|
}
|
|
374
402
|
|
|
375
403
|
// TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object
|
|
376
404
|
// So that on rejoin it known what parametrs it was using
|
|
377
405
|
if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {
|
|
378
|
-
LoggerProxy.logger.info(
|
|
406
|
+
LoggerProxy.logger.info(
|
|
407
|
+
'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely '
|
|
408
|
+
);
|
|
379
409
|
|
|
380
410
|
throw new Error('Unable to rejoin a meeting already ended or inactive .');
|
|
381
411
|
}
|
|
382
412
|
|
|
383
|
-
LoggerProxy.logger.info(
|
|
413
|
+
LoggerProxy.logger.info(
|
|
414
|
+
`ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`
|
|
415
|
+
);
|
|
384
416
|
|
|
385
417
|
// If the meeting state was left, no longer reconnect media
|
|
386
418
|
if (this.meeting.state === _LEFT_) {
|
|
@@ -388,22 +420,25 @@ export default class ReconnectionManager {
|
|
|
388
420
|
throw new Error('Unable to rejoin a call in LEFT state.');
|
|
389
421
|
}
|
|
390
422
|
|
|
391
|
-
throw
|
|
423
|
+
throw new NeedsRejoinError({wasSharing});
|
|
392
424
|
}
|
|
393
425
|
|
|
394
426
|
try {
|
|
395
427
|
const media = await this.reconnectMedia();
|
|
396
428
|
|
|
397
|
-
LoggerProxy.logger.log(
|
|
429
|
+
LoggerProxy.logger.log(
|
|
430
|
+
'ReconnectionManager:index#executeReconnection --> Media reestablished'
|
|
431
|
+
);
|
|
398
432
|
this.status = RECONNECTION.STATE.COMPLETE;
|
|
399
433
|
|
|
400
434
|
return media;
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
|
|
435
|
+
} catch (error) {
|
|
436
|
+
LoggerProxy.logger.error(
|
|
437
|
+
'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'
|
|
438
|
+
);
|
|
404
439
|
this.status = RECONNECTION.STATE.FAILURE;
|
|
405
440
|
|
|
406
|
-
throw
|
|
441
|
+
throw error;
|
|
407
442
|
}
|
|
408
443
|
}
|
|
409
444
|
|
|
@@ -414,9 +449,11 @@ export default class ReconnectionManager {
|
|
|
414
449
|
* @param {boolean} wasSharing
|
|
415
450
|
* @returns {Promise}
|
|
416
451
|
*/
|
|
417
|
-
async rejoinMeeting(wasSharing
|
|
452
|
+
async rejoinMeeting(wasSharing = false) {
|
|
418
453
|
try {
|
|
419
|
-
LoggerProxy.logger.info(
|
|
454
|
+
LoggerProxy.logger.info(
|
|
455
|
+
'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'
|
|
456
|
+
);
|
|
420
457
|
const previousCorrelationId = this.meeting.correlationId;
|
|
421
458
|
|
|
422
459
|
await this.meeting.join({rejoin: true});
|
|
@@ -436,31 +473,32 @@ export default class ReconnectionManager {
|
|
|
436
473
|
this.meeting,
|
|
437
474
|
{
|
|
438
475
|
file: 'reconnection-manager/index',
|
|
439
|
-
function: 'rejoinMeeting'
|
|
476
|
+
function: 'rejoinMeeting',
|
|
440
477
|
},
|
|
441
478
|
EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,
|
|
442
479
|
{
|
|
443
|
-
reason: SHARE_STOPPED_REASON.MEETING_REJOIN
|
|
480
|
+
reason: SHARE_STOPPED_REASON.MEETING_REJOIN,
|
|
444
481
|
}
|
|
445
482
|
);
|
|
446
483
|
}
|
|
447
|
-
}
|
|
448
|
-
catch (joinError) {
|
|
484
|
+
} catch (joinError) {
|
|
449
485
|
this.rejoinAttempts += 1;
|
|
450
486
|
if (this.rejoinAttempts <= this.maxRejoinAttempts) {
|
|
451
|
-
LoggerProxy.logger.info(
|
|
487
|
+
LoggerProxy.logger.info(
|
|
488
|
+
`ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,
|
|
489
|
+
joinError
|
|
490
|
+
);
|
|
452
491
|
this.rejoinMeeting();
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE,
|
|
458
|
-
{
|
|
459
|
-
locus_id: this.meeting.locusUrl.split('/').pop(),
|
|
460
|
-
reason: joinError.message,
|
|
461
|
-
stack: joinError.stack
|
|
462
|
-
}
|
|
492
|
+
} else {
|
|
493
|
+
LoggerProxy.logger.error(
|
|
494
|
+
'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',
|
|
495
|
+
joinError
|
|
463
496
|
);
|
|
497
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {
|
|
498
|
+
locus_id: this.meeting.locusUrl.split('/').pop(),
|
|
499
|
+
reason: joinError.message,
|
|
500
|
+
stack: joinError.stack,
|
|
501
|
+
});
|
|
464
502
|
this.status = RECONNECTION.STATE.FAILURE;
|
|
465
503
|
throw joinError;
|
|
466
504
|
}
|
|
@@ -468,9 +506,11 @@ export default class ReconnectionManager {
|
|
|
468
506
|
|
|
469
507
|
try {
|
|
470
508
|
await this.reconnectMedia();
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
|
|
509
|
+
} catch (mediaError) {
|
|
510
|
+
LoggerProxy.logger.error(
|
|
511
|
+
'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',
|
|
512
|
+
mediaError
|
|
513
|
+
);
|
|
474
514
|
throw mediaError;
|
|
475
515
|
}
|
|
476
516
|
}
|
|
@@ -481,26 +521,31 @@ export default class ReconnectionManager {
|
|
|
481
521
|
* @memberof ReconnectionManager
|
|
482
522
|
*/
|
|
483
523
|
reconnectMedia() {
|
|
484
|
-
LoggerProxy.logger.log(
|
|
524
|
+
LoggerProxy.logger.log(
|
|
525
|
+
'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'
|
|
526
|
+
);
|
|
485
527
|
|
|
486
528
|
return ReconnectionManager.setupPeerConnection(this.meeting)
|
|
487
|
-
.then(() =>
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
529
|
+
.then(() =>
|
|
530
|
+
Media.attachMedia(this.meeting.mediaProperties, {
|
|
531
|
+
meetingId: this.meeting.id,
|
|
532
|
+
remoteQualityLevel: this.meeting.mediaProperties.remoteQualityLevel,
|
|
533
|
+
enableRtx: this.meeting.config.enableRtx,
|
|
534
|
+
enableExtmap: this.meeting.config.enableExtmap,
|
|
535
|
+
})
|
|
536
|
+
)
|
|
493
537
|
.then((peerConnection) => this.meeting.setRemoteStream(peerConnection))
|
|
494
538
|
.then(() => {
|
|
495
|
-
LoggerProxy.logger.log(
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
539
|
+
LoggerProxy.logger.log(
|
|
540
|
+
'ReconnectionManager:index#reconnectMedia --> Sending ROAP media request'
|
|
541
|
+
);
|
|
542
|
+
|
|
543
|
+
return this.meeting.roap.sendRoapMediaRequest({
|
|
544
|
+
sdp: this.meeting.mediaProperties.peerConnection.sdp,
|
|
545
|
+
roapSeq: this.meeting.roapSeq,
|
|
546
|
+
meeting: this.meeting,
|
|
547
|
+
reconnect: true,
|
|
548
|
+
});
|
|
504
549
|
});
|
|
505
550
|
}
|
|
506
551
|
|
|
@@ -511,30 +556,44 @@ export default class ReconnectionManager {
|
|
|
511
556
|
* @memberof ReconnectionManager
|
|
512
557
|
*/
|
|
513
558
|
private async reconnectMercuryWebSocket() {
|
|
514
|
-
LoggerProxy.logger.info(
|
|
559
|
+
LoggerProxy.logger.info(
|
|
560
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'
|
|
561
|
+
);
|
|
515
562
|
// First, attempt to disconnect if we think we are already connected.
|
|
516
563
|
if (this.webex.internal.mercury.connected) {
|
|
517
|
-
LoggerProxy.logger.info(
|
|
564
|
+
LoggerProxy.logger.info(
|
|
565
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'
|
|
566
|
+
);
|
|
518
567
|
try {
|
|
519
568
|
await this.webex.internal.mercury.disconnect();
|
|
520
|
-
LoggerProxy.logger.info(
|
|
521
|
-
|
|
522
|
-
|
|
569
|
+
LoggerProxy.logger.info(
|
|
570
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'
|
|
571
|
+
);
|
|
572
|
+
} catch (disconnectError) {
|
|
523
573
|
// If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.
|
|
524
|
-
LoggerProxy.logger.error(
|
|
574
|
+
LoggerProxy.logger.error(
|
|
575
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',
|
|
576
|
+
disconnectError
|
|
577
|
+
);
|
|
525
578
|
throw disconnectError;
|
|
526
579
|
}
|
|
527
580
|
}
|
|
528
581
|
|
|
529
582
|
try {
|
|
530
|
-
LoggerProxy.logger.info(
|
|
583
|
+
LoggerProxy.logger.info(
|
|
584
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'
|
|
585
|
+
);
|
|
531
586
|
await this.webex.internal.mercury.connect();
|
|
532
|
-
LoggerProxy.logger.info(
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
587
|
+
LoggerProxy.logger.info(
|
|
588
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'
|
|
589
|
+
);
|
|
590
|
+
} catch (connectError) {
|
|
591
|
+
LoggerProxy.logger.error(
|
|
592
|
+
'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',
|
|
593
|
+
connectError
|
|
594
|
+
);
|
|
595
|
+
|
|
596
|
+
throw connectError;
|
|
538
597
|
}
|
|
539
598
|
}
|
|
540
599
|
|
|
@@ -545,7 +604,9 @@ export default class ReconnectionManager {
|
|
|
545
604
|
* @memberof ReconnectionManager
|
|
546
605
|
*/
|
|
547
606
|
private static async setupPeerConnection(meeting: Meeting) {
|
|
548
|
-
LoggerProxy.logger.log(
|
|
607
|
+
LoggerProxy.logger.log(
|
|
608
|
+
'ReconnectionManager:index#setupPeerConnection --> Begin resetting peer connection'
|
|
609
|
+
);
|
|
549
610
|
// close pcs, unset to null and create a new one with out closing any streams
|
|
550
611
|
PeerConnectionManager.close(meeting.mediaProperties.peerConnection);
|
|
551
612
|
meeting.mediaProperties.unsetPeerConnection();
|
package/src/roap/collection.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import RoapStateMachine from '
|
|
1
|
+
import RoapStateMachine from './state';
|
|
2
2
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
const RoapCollection = {
|
|
@@ -27,7 +27,6 @@ const RoapCollection = {
|
|
|
27
27
|
finished: false,
|
|
28
28
|
};
|
|
29
29
|
session.activeSequences += 1;
|
|
30
|
-
|
|
31
30
|
}
|
|
32
31
|
return session[seqId];
|
|
33
32
|
},
|
|
@@ -57,8 +56,7 @@ const RoapCollection = {
|
|
|
57
56
|
seq.finished = true;
|
|
58
57
|
session.activeSequences -= 1;
|
|
59
58
|
}
|
|
60
|
-
}
|
|
61
|
-
|
|
59
|
+
},
|
|
62
60
|
};
|
|
63
61
|
|
|
64
62
|
export default RoapCollection;
|