@webex/plugin-meetings 3.0.0 → 3.1.0

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.
Files changed (138) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/config.d.ts +1 -0
  4. package/dist/config.js +2 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/constants.d.ts +5 -4
  7. package/dist/constants.js +8 -4
  8. package/dist/constants.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +6 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/interpretation/index.js +16 -2
  13. package/dist/interpretation/index.js.map +1 -1
  14. package/dist/interpretation/siLanguage.js +1 -1
  15. package/dist/locus-info/mediaSharesUtils.js +15 -1
  16. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  17. package/dist/locus-info/selfUtils.js +5 -0
  18. package/dist/locus-info/selfUtils.js.map +1 -1
  19. package/dist/media/MediaConnectionAwaiter.d.ts +61 -0
  20. package/dist/media/MediaConnectionAwaiter.js +163 -0
  21. package/dist/media/MediaConnectionAwaiter.js.map +1 -0
  22. package/dist/media/index.js +4 -1
  23. package/dist/media/index.js.map +1 -1
  24. package/dist/media/properties.js +4 -24
  25. package/dist/media/properties.js.map +1 -1
  26. package/dist/meeting/index.d.ts +26 -7
  27. package/dist/meeting/index.js +893 -677
  28. package/dist/meeting/index.js.map +1 -1
  29. package/dist/meeting/muteState.d.ts +2 -8
  30. package/dist/meeting/muteState.js +37 -25
  31. package/dist/meeting/muteState.js.map +1 -1
  32. package/dist/meeting/request.d.ts +3 -0
  33. package/dist/meeting/request.js +32 -23
  34. package/dist/meeting/request.js.map +1 -1
  35. package/dist/meeting/util.js +1 -0
  36. package/dist/meeting/util.js.map +1 -1
  37. package/dist/meeting-info/utilv2.js +4 -1
  38. package/dist/meeting-info/utilv2.js.map +1 -1
  39. package/dist/meetings/index.d.ts +8 -0
  40. package/dist/meetings/index.js +20 -0
  41. package/dist/meetings/index.js.map +1 -1
  42. package/dist/multistream/mediaRequestManager.d.ts +2 -1
  43. package/dist/multistream/mediaRequestManager.js +1 -1
  44. package/dist/multistream/mediaRequestManager.js.map +1 -1
  45. package/dist/multistream/remoteMediaGroup.d.ts +2 -0
  46. package/dist/multistream/remoteMediaGroup.js +16 -2
  47. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  48. package/dist/multistream/remoteMediaManager.d.ts +15 -0
  49. package/dist/multistream/remoteMediaManager.js +179 -65
  50. package/dist/multistream/remoteMediaManager.js.map +1 -1
  51. package/dist/multistream/sendSlotManager.d.ts +9 -1
  52. package/dist/multistream/sendSlotManager.js +22 -0
  53. package/dist/multistream/sendSlotManager.js.map +1 -1
  54. package/dist/reachability/clusterReachability.d.ts +1 -0
  55. package/dist/reachability/clusterReachability.js +29 -15
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.d.ts +4 -0
  58. package/dist/reachability/index.js +18 -2
  59. package/dist/reachability/index.js.map +1 -1
  60. package/dist/reachability/request.js +12 -10
  61. package/dist/reachability/request.js.map +1 -1
  62. package/dist/reachability/util.d.ts +7 -0
  63. package/dist/reachability/util.js +19 -0
  64. package/dist/reachability/util.js.map +1 -1
  65. package/dist/reconnection-manager/index.js +2 -1
  66. package/dist/reconnection-manager/index.js.map +1 -1
  67. package/dist/roap/index.d.ts +10 -2
  68. package/dist/roap/index.js +15 -0
  69. package/dist/roap/index.js.map +1 -1
  70. package/dist/roap/request.js +3 -3
  71. package/dist/roap/request.js.map +1 -1
  72. package/dist/roap/turnDiscovery.d.ts +64 -17
  73. package/dist/roap/turnDiscovery.js +307 -126
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/statsAnalyzer/index.js +53 -30
  76. package/dist/statsAnalyzer/index.js.map +1 -1
  77. package/dist/webinar/index.js +1 -1
  78. package/package.json +22 -22
  79. package/src/config.ts +1 -0
  80. package/src/constants.ts +7 -3
  81. package/src/index.ts +1 -0
  82. package/src/interpretation/index.ts +18 -1
  83. package/src/locus-info/mediaSharesUtils.ts +16 -0
  84. package/src/locus-info/selfUtils.ts +5 -0
  85. package/src/media/MediaConnectionAwaiter.ts +174 -0
  86. package/src/media/index.ts +3 -1
  87. package/src/media/properties.ts +6 -31
  88. package/src/meeting/index.ts +321 -106
  89. package/src/meeting/muteState.ts +34 -20
  90. package/src/meeting/request.ts +18 -2
  91. package/src/meeting/util.ts +1 -0
  92. package/src/meeting-info/utilv2.ts +2 -1
  93. package/src/meetings/index.ts +18 -0
  94. package/src/multistream/mediaRequestManager.ts +4 -1
  95. package/src/multistream/remoteMediaGroup.ts +19 -0
  96. package/src/multistream/remoteMediaManager.ts +101 -16
  97. package/src/multistream/sendSlotManager.ts +28 -0
  98. package/src/reachability/clusterReachability.ts +20 -5
  99. package/src/reachability/index.ts +24 -1
  100. package/src/reachability/request.ts +15 -11
  101. package/src/reachability/util.ts +21 -0
  102. package/src/reconnection-manager/index.ts +1 -1
  103. package/src/roap/index.ts +25 -3
  104. package/src/roap/request.ts +3 -3
  105. package/src/roap/turnDiscovery.ts +244 -78
  106. package/src/statsAnalyzer/index.ts +63 -27
  107. package/test/integration/spec/journey.js +14 -14
  108. package/test/integration/spec/space-meeting.js +1 -1
  109. package/test/unit/spec/interpretation/index.ts +39 -3
  110. package/test/unit/spec/locus-info/index.js +28 -19
  111. package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
  112. package/test/unit/spec/locus-info/selfUtils.js +42 -12
  113. package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
  114. package/test/unit/spec/media/index.ts +89 -78
  115. package/test/unit/spec/media/properties.ts +16 -70
  116. package/test/unit/spec/meeting/index.js +638 -139
  117. package/test/unit/spec/meeting/muteState.js +219 -67
  118. package/test/unit/spec/meeting/request.js +21 -0
  119. package/test/unit/spec/meeting/utils.js +6 -1
  120. package/test/unit/spec/meeting-info/utilv2.js +6 -0
  121. package/test/unit/spec/meetings/index.js +40 -20
  122. package/test/unit/spec/multistream/mediaRequestManager.ts +20 -2
  123. package/test/unit/spec/multistream/remoteMediaGroup.ts +79 -1
  124. package/test/unit/spec/multistream/remoteMediaManager.ts +199 -1
  125. package/test/unit/spec/multistream/sendSlotManager.ts +50 -18
  126. package/test/unit/spec/reachability/clusterReachability.ts +86 -22
  127. package/test/unit/spec/reachability/index.ts +197 -60
  128. package/test/unit/spec/reachability/request.js +15 -7
  129. package/test/unit/spec/reachability/util.ts +32 -2
  130. package/test/unit/spec/reconnection-manager/index.js +28 -0
  131. package/test/unit/spec/roap/index.ts +61 -6
  132. package/test/unit/spec/roap/turnDiscovery.ts +298 -16
  133. package/test/unit/spec/stats-analyzer/index.js +179 -0
  134. package/dist/member/member.types.d.ts +0 -11
  135. package/dist/member/member.types.js +0 -17
  136. package/dist/member/member.types.js.map +0 -1
  137. package/src/member/member.types.ts +0 -13
  138. /package/test/unit/spec/locus-info/{lib/selfConstant.js → selfConstant.js} +0 -0
@@ -28,7 +28,15 @@ var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
28
28
  // so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
29
29
  // and do the SDP offer with seq=1
30
30
  var TURN_DISCOVERY_SEQ = 0;
31
+ var TurnDiscoverySkipReason = {
32
+ missingHttpResponse: 'missing http response',
33
+ // when we asked for the TURN discovery response to be in the http response, but it wasn't there
34
+ reachability: 'reachability',
35
+ // when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)
36
+ alreadyInProgress: 'already in progress' // when we try to start TURN discovery while it's already in progress
37
+ };
31
38
 
39
+ // used when TURN discovery is not skipped
32
40
  /**
33
41
  * Handles the process of finding out TURN server information from Linus.
34
42
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -78,7 +86,8 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
78
86
  }
79
87
 
80
88
  /**
81
- * handles TURN_DISCOVERY_RESPONSE roap message
89
+ * Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,
90
+ * otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.
82
91
  *
83
92
  * @param {Object} roapMessage
84
93
  * @param {string} from string to indicate how we got the response (used just for logging)
@@ -132,32 +141,235 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
132
141
  }
133
142
 
134
143
  /**
135
- * handles TURN_DISCOVERY_RESPONSE roap message that came in http response
144
+ * Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.
145
+ * It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response
146
+ * or want to abort, you need to call abort().
136
147
  *
137
- * @param {Object} roapMessage
138
- * @returns {Promise}
139
- * @memberof Roap
148
+ * @param {Meeting} meeting
149
+ * @param {boolean} isForced
150
+ * @returns {Object}
140
151
  */
141
152
  }, {
142
- key: "handleTurnDiscoveryResponseInHttpResponse",
153
+ key: "generateTurnDiscoveryRequestMessage",
143
154
  value: (function () {
144
- var _handleTurnDiscoveryResponseInHttpResponse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(roapMessage) {
155
+ var _generateTurnDiscoveryRequestMessage = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(meeting, isForced) {
156
+ var turnDiscoverySkippedReason, roapMessage;
145
157
  return _regenerator.default.wrap(function _callee$(_context) {
146
158
  while (1) switch (_context.prev = _context.next) {
147
159
  case 0:
148
- this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
149
- return _context.abrupt("return", this.defer.promise);
150
- case 2:
160
+ if (!this.defer) {
161
+ _context.next = 3;
162
+ break;
163
+ }
164
+ _loggerProxy.default.logger.warn('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress');
165
+ return _context.abrupt("return", {
166
+ roapMessage: undefined,
167
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
168
+ });
169
+ case 3:
170
+ if (isForced) {
171
+ _context.next = 7;
172
+ break;
173
+ }
174
+ _context.next = 6;
175
+ return this.getSkipReason(meeting);
176
+ case 6:
177
+ turnDiscoverySkippedReason = _context.sent;
178
+ case 7:
179
+ if (!turnDiscoverySkippedReason) {
180
+ _context.next = 9;
181
+ break;
182
+ }
183
+ return _context.abrupt("return", {
184
+ roapMessage: undefined,
185
+ turnDiscoverySkippedReason: turnDiscoverySkippedReason
186
+ });
187
+ case 9:
188
+ this.defer = new _common.Defer();
189
+ roapMessage = {
190
+ messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
191
+ version: _constants2.ROAP.ROAP_VERSION,
192
+ seq: TURN_DISCOVERY_SEQ,
193
+ headers: ['includeAnswerInHttpResponse', 'noOkInTransaction']
194
+ };
195
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> generated TURN_DISCOVERY_REQUEST message');
196
+ return _context.abrupt("return", {
197
+ roapMessage: roapMessage,
198
+ turnDiscoverySkippedReason: undefined
199
+ });
200
+ case 13:
151
201
  case "end":
152
202
  return _context.stop();
153
203
  }
154
204
  }, _callee, this);
155
205
  }));
156
- function handleTurnDiscoveryResponseInHttpResponse(_x) {
157
- return _handleTurnDiscoveryResponseInHttpResponse.apply(this, arguments);
206
+ function generateTurnDiscoveryRequestMessage(_x, _x2) {
207
+ return _generateTurnDiscoveryRequestMessage.apply(this, arguments);
158
208
  }
159
- return handleTurnDiscoveryResponseInHttpResponse;
209
+ return generateTurnDiscoveryRequestMessage;
160
210
  }()
211
+ /**
212
+ * Handles any errors that occur during TURN discovery without re-throwing them.
213
+ *
214
+ * @param {Meeting} meeting
215
+ * @param {Error} error
216
+ * @returns {TurnDiscoveryResult}
217
+ */
218
+ )
219
+ }, {
220
+ key: "handleTurnDiscoveryFailure",
221
+ value: function handleTurnDiscoveryFailure(meeting, error) {
222
+ // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
223
+ _loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(error));
224
+ _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
225
+ correlation_id: meeting.correlationId,
226
+ locus_id: meeting.locusUrl.split('/').pop(),
227
+ reason: error.message,
228
+ stack: error.stack
229
+ });
230
+ return {
231
+ turnServerInfo: undefined,
232
+ turnDiscoverySkippedReason: "failure: ".concat(error.message)
233
+ };
234
+ }
235
+
236
+ /**
237
+ * Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,
238
+ * it returns an object with turnServerInfo set to undefined. In that case you need to call abort()
239
+ * to end the TURN discovery process.
240
+ *
241
+ * @param {Meeting} meeting
242
+ * @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response
243
+ * @returns {Promise<TurnDiscoveryResult>}
244
+ * @memberof Roap
245
+ */
246
+ }, {
247
+ key: "handleTurnDiscoveryHttpResponse",
248
+ value: (function () {
249
+ var _handleTurnDiscoveryHttpResponse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting, httpResponse) {
250
+ var roapMessage, _yield$this$defer$pro, isOkRequired;
251
+ return _regenerator.default.wrap(function _callee2$(_context2) {
252
+ while (1) switch (_context2.prev = _context2.next) {
253
+ case 0:
254
+ if (this.defer) {
255
+ _context2.next = 3;
256
+ break;
257
+ }
258
+ _loggerProxy.default.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryHttpResponse --> unexpected http response, TURN discovery is not in progress');
259
+ throw new Error('handleTurnDiscoveryHttpResponse() called before generateTurnDiscoveryRequestMessage()');
260
+ case 3:
261
+ if (!(httpResponse === undefined)) {
262
+ _context2.next = 5;
263
+ break;
264
+ }
265
+ return _context2.abrupt("return", {
266
+ turnServerInfo: undefined,
267
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
268
+ });
269
+ case 5:
270
+ _context2.prev = 5;
271
+ roapMessage = this.parseHttpTurnDiscoveryResponse(meeting, httpResponse);
272
+ if (roapMessage) {
273
+ _context2.next = 9;
274
+ break;
275
+ }
276
+ return _context2.abrupt("return", {
277
+ turnServerInfo: undefined,
278
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
279
+ });
280
+ case 9:
281
+ this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
282
+ _context2.next = 12;
283
+ return this.defer.promise;
284
+ case 12:
285
+ _yield$this$defer$pro = _context2.sent;
286
+ isOkRequired = _yield$this$defer$pro.isOkRequired;
287
+ if (!isOkRequired) {
288
+ _context2.next = 17;
289
+ break;
290
+ }
291
+ _context2.next = 17;
292
+ return this.sendRoapOK(meeting);
293
+ case 17:
294
+ this.defer = undefined;
295
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
296
+ return _context2.abrupt("return", {
297
+ turnServerInfo: this.turnInfo,
298
+ turnDiscoverySkippedReason: undefined
299
+ });
300
+ case 22:
301
+ _context2.prev = 22;
302
+ _context2.t0 = _context2["catch"](5);
303
+ this.abort();
304
+ return _context2.abrupt("return", this.handleTurnDiscoveryFailure(meeting, _context2.t0));
305
+ case 26:
306
+ case "end":
307
+ return _context2.stop();
308
+ }
309
+ }, _callee2, this, [[5, 22]]);
310
+ }));
311
+ function handleTurnDiscoveryHttpResponse(_x3, _x4) {
312
+ return _handleTurnDiscoveryHttpResponse.apply(this, arguments);
313
+ }
314
+ return handleTurnDiscoveryHttpResponse;
315
+ }()
316
+ /**
317
+ * Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),
318
+ * but then never got any response from the server.
319
+ * @returns {void}
320
+ */
321
+ )
322
+ }, {
323
+ key: "abort",
324
+ value: function abort() {
325
+ if (this.defer) {
326
+ this.defer.reject(new Error('TURN discovery aborted'));
327
+ this.defer = undefined;
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response
333
+ * and returns it.
334
+ *
335
+ * @param {Meeting} meeting
336
+ * @param {any} httpResponse
337
+ * @returns {any}
338
+ */
339
+ }, {
340
+ key: "parseHttpTurnDiscoveryResponse",
341
+ value: function parseHttpTurnDiscoveryResponse(meeting, httpResponse) {
342
+ var _httpResponse$mediaCo, _httpResponse$mediaCo2;
343
+ var turnDiscoveryResponse;
344
+ if ((_httpResponse$mediaCo = httpResponse.mediaConnections) !== null && _httpResponse$mediaCo !== void 0 && (_httpResponse$mediaCo2 = _httpResponse$mediaCo[0]) !== null && _httpResponse$mediaCo2 !== void 0 && _httpResponse$mediaCo2.remoteSdp) {
345
+ var remoteSdp = JSON.parse(httpResponse.mediaConnections[0].remoteSdp);
346
+ if (remoteSdp.roapMessage) {
347
+ // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...
348
+ var _remoteSdp$roapMessag = remoteSdp.roapMessage,
349
+ seq = _remoteSdp$roapMessag.seq,
350
+ messageType = _remoteSdp$roapMessag.messageType,
351
+ errorType = _remoteSdp$roapMessag.errorType,
352
+ errorCause = _remoteSdp$roapMessag.errorCause,
353
+ headers = _remoteSdp$roapMessag.headers;
354
+ turnDiscoveryResponse = {
355
+ seq: seq,
356
+ messageType: messageType,
357
+ errorType: errorType,
358
+ errorCause: errorCause,
359
+ headers: headers
360
+ };
361
+ }
362
+ }
363
+ if (!turnDiscoveryResponse) {
364
+ _metrics.default.sendBehavioralMetric(_constants.default.ROAP_HTTP_RESPONSE_MISSING, {
365
+ correlationId: meeting.correlationId,
366
+ messageType: 'TURN_DISCOVERY_RESPONSE',
367
+ isMultistream: meeting.isMultistream
368
+ });
369
+ }
370
+ return turnDiscoveryResponse;
371
+ }
372
+
161
373
  /**
162
374
  * sends the TURN_DISCOVERY_REQUEST roap request
163
375
  *
@@ -167,13 +379,16 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
167
379
  * @private
168
380
  * @memberof Roap
169
381
  */
170
- )
171
382
  }, {
172
383
  key: "sendRoapTurnDiscoveryRequest",
173
384
  value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
385
+ var _this2 = this;
174
386
  if (this.defer) {
175
387
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
176
- return _promise.default.resolve();
388
+ return _promise.default.resolve({
389
+ turnServerInfo: undefined,
390
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
391
+ });
177
392
  }
178
393
  this.defer = new _common.Defer();
179
394
  var roapMessage = {
@@ -193,41 +408,27 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
193
408
  locusMediaRequest: meeting.locusMediaRequest,
194
409
  // @ts-ignore - because of meeting.webex
195
410
  ipVersion: _util.default.getIpVersion(meeting.webex)
196
- }).then(function (response) {
197
- var mediaConnections = response.mediaConnections;
198
- var turnDiscoveryResponse;
199
- if (mediaConnections) {
200
- var _mediaConnections$;
201
- meeting.updateMediaConnections(mediaConnections);
202
- if ((_mediaConnections$ = mediaConnections[0]) !== null && _mediaConnections$ !== void 0 && _mediaConnections$.remoteSdp) {
203
- var remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);
204
- if (remoteSdp.roapMessage) {
205
- // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...
206
- var _remoteSdp$roapMessag = remoteSdp.roapMessage,
207
- seq = _remoteSdp$roapMessag.seq,
208
- messageType = _remoteSdp$roapMessag.messageType,
209
- errorType = _remoteSdp$roapMessag.errorType,
210
- errorCause = _remoteSdp$roapMessag.errorCause,
211
- headers = _remoteSdp$roapMessag.headers;
212
- turnDiscoveryResponse = {
213
- seq: seq,
214
- messageType: messageType,
215
- errorType: errorType,
216
- errorCause: errorCause,
217
- headers: headers
218
- };
411
+ }).then( /*#__PURE__*/function () {
412
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(response) {
413
+ var mediaConnections;
414
+ return _regenerator.default.wrap(function _callee3$(_context3) {
415
+ while (1) switch (_context3.prev = _context3.next) {
416
+ case 0:
417
+ mediaConnections = response.mediaConnections;
418
+ if (mediaConnections) {
419
+ meeting.updateMediaConnections(mediaConnections);
420
+ }
421
+ return _context3.abrupt("return", _this2.handleTurnDiscoveryHttpResponse(meeting, response));
422
+ case 3:
423
+ case "end":
424
+ return _context3.stop();
219
425
  }
220
- }
221
- }
222
- if (!turnDiscoveryResponse) {
223
- _metrics.default.sendBehavioralMetric(_constants.default.ROAP_HTTP_RESPONSE_MISSING, {
224
- correlationId: meeting.correlationId,
225
- messageType: 'TURN_DISCOVERY_RESPONSE',
226
- isMultistream: meeting.isMultistream
227
- });
228
- }
229
- return turnDiscoveryResponse;
230
- });
426
+ }, _callee3);
427
+ }));
428
+ return function (_x5) {
429
+ return _ref.apply(this, arguments);
430
+ };
431
+ }());
231
432
  }
232
433
 
233
434
  /**
@@ -240,7 +441,11 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
240
441
  }, {
241
442
  key: "sendRoapOK",
242
443
  value: function sendRoapOK(meeting) {
243
- _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
444
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> TURN discovery response requires OK, sending it...');
445
+ _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
446
+ correlation_id: meeting.correlationId,
447
+ locus_id: meeting.locusUrl.split('/').pop()
448
+ });
244
449
  return this.roapRequest.sendRoap({
245
450
  roapMessage: {
246
451
  messageType: _constants2.ROAP.ROAP_TYPES.OK,
@@ -265,30 +470,30 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
265
470
  }, {
266
471
  key: "getSkipReason",
267
472
  value: (function () {
268
- var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting) {
473
+ var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(meeting) {
269
474
  var isAnyPublicClusterReachable;
270
- return _regenerator.default.wrap(function _callee2$(_context2) {
271
- while (1) switch (_context2.prev = _context2.next) {
475
+ return _regenerator.default.wrap(function _callee4$(_context4) {
476
+ while (1) switch (_context4.prev = _context4.next) {
272
477
  case 0:
273
- _context2.next = 2;
478
+ _context4.next = 2;
274
479
  return meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
275
480
  case 2:
276
- isAnyPublicClusterReachable = _context2.sent;
481
+ isAnyPublicClusterReachable = _context4.sent;
277
482
  if (!isAnyPublicClusterReachable) {
278
- _context2.next = 6;
483
+ _context4.next = 6;
279
484
  break;
280
485
  }
281
486
  _loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
282
- return _context2.abrupt("return", 'reachability');
487
+ return _context4.abrupt("return", TurnDiscoverySkipReason.reachability);
283
488
  case 6:
284
- return _context2.abrupt("return", '');
489
+ return _context4.abrupt("return", undefined);
285
490
  case 7:
286
491
  case "end":
287
- return _context2.stop();
492
+ return _context4.stop();
288
493
  }
289
- }, _callee2);
494
+ }, _callee4);
290
495
  }));
291
- function getSkipReason(_x2) {
496
+ function getSkipReason(_x6) {
292
497
  return _getSkipReason.apply(this, arguments);
293
498
  }
294
499
  return getSkipReason;
@@ -303,23 +508,23 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
303
508
  }, {
304
509
  key: "isSkipped",
305
510
  value: (function () {
306
- var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(meeting) {
511
+ var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(meeting) {
307
512
  var skipReason;
308
- return _regenerator.default.wrap(function _callee3$(_context3) {
309
- while (1) switch (_context3.prev = _context3.next) {
513
+ return _regenerator.default.wrap(function _callee5$(_context5) {
514
+ while (1) switch (_context5.prev = _context5.next) {
310
515
  case 0:
311
- _context3.next = 2;
516
+ _context5.next = 2;
312
517
  return this.getSkipReason(meeting);
313
518
  case 2:
314
- skipReason = _context3.sent;
315
- return _context3.abrupt("return", !!skipReason);
519
+ skipReason = _context5.sent;
520
+ return _context5.abrupt("return", !!skipReason);
316
521
  case 4:
317
522
  case "end":
318
- return _context3.stop();
523
+ return _context5.stop();
319
524
  }
320
- }, _callee3, this);
525
+ }, _callee5, this);
321
526
  }));
322
- function isSkipped(_x3) {
527
+ function isSkipped(_x7) {
323
528
  return _isSkipped.apply(this, arguments);
324
529
  }
325
530
  return isSkipped;
@@ -346,93 +551,69 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
346
551
  }, {
347
552
  key: "doTurnDiscovery",
348
553
  value: (function () {
349
- var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(meeting, isReconnecting, isForced) {
350
- var turnDiscoverySkippedReason, httpResponse, _ref, isOkRequired;
351
- return _regenerator.default.wrap(function _callee4$(_context4) {
352
- while (1) switch (_context4.prev = _context4.next) {
554
+ var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(meeting, isReconnecting, isForced) {
555
+ var turnDiscoverySkippedReason, turnDiscoveryResult, _yield$this$waitForTu, isOkRequired;
556
+ return _regenerator.default.wrap(function _callee6$(_context6) {
557
+ while (1) switch (_context6.prev = _context6.next) {
353
558
  case 0:
354
559
  if (isForced) {
355
- _context4.next = 4;
560
+ _context6.next = 4;
356
561
  break;
357
562
  }
358
- _context4.next = 3;
563
+ _context6.next = 3;
359
564
  return this.getSkipReason(meeting);
360
565
  case 3:
361
- turnDiscoverySkippedReason = _context4.sent;
566
+ turnDiscoverySkippedReason = _context6.sent;
362
567
  case 4:
363
568
  if (!turnDiscoverySkippedReason) {
364
- _context4.next = 6;
569
+ _context6.next = 6;
365
570
  break;
366
571
  }
367
- return _context4.abrupt("return", {
572
+ return _context6.abrupt("return", {
368
573
  turnServerInfo: undefined,
369
574
  turnDiscoverySkippedReason: turnDiscoverySkippedReason
370
575
  });
371
576
  case 6:
372
- _context4.prev = 6;
373
- _context4.next = 9;
577
+ _context6.prev = 6;
578
+ _context6.next = 9;
374
579
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
375
580
  case 9:
376
- httpResponse = _context4.sent;
377
- if (!httpResponse) {
378
- _context4.next = 16;
581
+ turnDiscoveryResult = _context6.sent;
582
+ if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== TurnDiscoverySkipReason.missingHttpResponse)) {
583
+ _context6.next = 12;
379
584
  break;
380
585
  }
381
- _context4.next = 13;
382
- return this.handleTurnDiscoveryResponseInHttpResponse(httpResponse);
383
- case 13:
384
- _context4.t0 = _context4.sent;
385
- _context4.next = 19;
386
- break;
387
- case 16:
388
- _context4.next = 18;
586
+ return _context6.abrupt("return", turnDiscoveryResult);
587
+ case 12:
588
+ _context6.next = 14;
389
589
  return this.waitForTurnDiscoveryResponse();
390
- case 18:
391
- _context4.t0 = _context4.sent;
392
- case 19:
393
- _ref = _context4.t0;
394
- isOkRequired = _ref.isOkRequired;
590
+ case 14:
591
+ _yield$this$waitForTu = _context6.sent;
592
+ isOkRequired = _yield$this$waitForTu.isOkRequired;
395
593
  if (!isOkRequired) {
396
- _context4.next = 26;
594
+ _context6.next = 19;
397
595
  break;
398
596
  }
399
- _context4.next = 24;
597
+ _context6.next = 19;
400
598
  return this.sendRoapOK(meeting);
401
- case 24:
402
- _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery response requires OK');
403
- _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
404
- correlation_id: meeting.correlationId,
405
- locus_id: meeting.locusUrl.split('/').pop()
406
- });
407
- case 26:
599
+ case 19:
408
600
  this.defer = undefined;
409
601
  _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
410
- return _context4.abrupt("return", {
602
+ return _context6.abrupt("return", {
411
603
  turnServerInfo: this.turnInfo,
412
604
  turnDiscoverySkippedReason: undefined
413
605
  });
414
- case 31:
415
- _context4.prev = 31;
416
- _context4.t1 = _context4["catch"](6);
417
- // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
418
- _loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(_context4.t1));
419
- _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
420
- correlation_id: meeting.correlationId,
421
- locus_id: meeting.locusUrl.split('/').pop(),
422
- reason: _context4.t1.message,
423
- stack: _context4.t1.stack
424
- });
425
- return _context4.abrupt("return", {
426
- turnServerInfo: undefined,
427
- turnDiscoverySkippedReason: undefined
428
- });
429
- case 36:
606
+ case 24:
607
+ _context6.prev = 24;
608
+ _context6.t0 = _context6["catch"](6);
609
+ return _context6.abrupt("return", this.handleTurnDiscoveryFailure(meeting, _context6.t0));
610
+ case 27:
430
611
  case "end":
431
- return _context4.stop();
612
+ return _context6.stop();
432
613
  }
433
- }, _callee4, this, [[6, 31]]);
614
+ }, _callee6, this, [[6, 24]]);
434
615
  }));
435
- function doTurnDiscovery(_x4, _x5, _x6) {
616
+ function doTurnDiscovery(_x8, _x9, _x10) {
436
617
  return _doTurnDiscovery.apply(this, arguments);
437
618
  }
438
619
  return doTurnDiscovery;