@webex/plugin-meetings 3.8.0-next.61 → 3.8.0-next.62
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +22 -16
- package/dist/meeting/index.js.map +1 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +4 -3
- package/src/media/properties.ts +96 -0
- package/src/meeting/index.ts +5 -1
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/index.js +12 -1
package/dist/breakouts/index.js
CHANGED
@@ -1046,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
1046
1046
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
1047
1047
|
}
|
1048
1048
|
},
|
1049
|
-
version: "3.8.0-next.
|
1049
|
+
version: "3.8.0-next.62"
|
1050
1050
|
});
|
1051
1051
|
var _default = exports.default = Breakouts;
|
1052
1052
|
//# sourceMappingURL=index.js.map
|
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
|
|
373
373
|
throw error;
|
374
374
|
});
|
375
375
|
},
|
376
|
-
version: "3.8.0-next.
|
376
|
+
version: "3.8.0-next.62"
|
377
377
|
});
|
378
378
|
var _default = exports.default = SimultaneousInterpretation;
|
379
379
|
//# sourceMappingURL=index.js.map
|
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
|
|
18
18
|
languageCode: 'number',
|
19
19
|
languageName: 'string'
|
20
20
|
},
|
21
|
-
version: "3.8.0-next.
|
21
|
+
version: "3.8.0-next.62"
|
22
22
|
});
|
23
23
|
var _default = exports.default = SILanguage;
|
24
24
|
//# sourceMappingURL=siLanguage.js.map
|
package/dist/media/properties.js
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
|
4
|
+
var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
|
5
|
+
var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
|
6
|
+
var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
|
3
7
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
8
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
5
9
|
_Object$defineProperty(exports, "__esModule", {
|
@@ -13,10 +17,13 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/
|
|
13
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
14
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
15
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
20
|
+
var _tsSdp = require("@webex/ts-sdp");
|
16
21
|
var _constants = require("../constants");
|
17
22
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
18
23
|
var _MediaConnectionAwaiter = _interopRequireDefault(require("./MediaConnectionAwaiter"));
|
19
|
-
|
24
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
25
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
26
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } /* eslint-disable class-methods-use-this */
|
20
27
|
/**
|
21
28
|
* @class MediaProperties
|
22
29
|
*/
|
@@ -229,6 +236,83 @@ var MediaProperties = exports.default = /*#__PURE__*/function () {
|
|
229
236
|
};
|
230
237
|
}
|
231
238
|
|
239
|
+
/**
|
240
|
+
* Checks if the given IP address is IPv6
|
241
|
+
* @param {string} ip address to check
|
242
|
+
* @returns {boolean} true if the address is IPv6, false otherwise
|
243
|
+
*/
|
244
|
+
}, {
|
245
|
+
key: "isIPv6",
|
246
|
+
value: function isIPv6(ip) {
|
247
|
+
return ip.includes(':');
|
248
|
+
}
|
249
|
+
|
250
|
+
/** Finds out if we connected using IPv4 or IPv6
|
251
|
+
* @param {RTCPeerConnection} webrtcMediaConnection
|
252
|
+
* @param {Array<any>} allStatsReports array of RTC stats reports
|
253
|
+
* @returns {string} IPVersion
|
254
|
+
*/
|
255
|
+
}, {
|
256
|
+
key: "getConnectionIpVersion",
|
257
|
+
value: function getConnectionIpVersion(webrtcMediaConnection, allStatsReports) {
|
258
|
+
var transports = allStatsReports.filter(function (report) {
|
259
|
+
return report.type === 'transport';
|
260
|
+
});
|
261
|
+
var selectedCandidatePair;
|
262
|
+
if (transports.length > 0 && transports[0].selectedCandidatePairId) {
|
263
|
+
selectedCandidatePair = allStatsReports.find(function (report) {
|
264
|
+
return report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId;
|
265
|
+
});
|
266
|
+
} else {
|
267
|
+
// Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair
|
268
|
+
selectedCandidatePair = allStatsReports.find(function (report) {
|
269
|
+
return report.type === 'candidate-pair' && report.selected;
|
270
|
+
});
|
271
|
+
}
|
272
|
+
if (selectedCandidatePair) {
|
273
|
+
var localCandidate = allStatsReports.find(function (report) {
|
274
|
+
return report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId;
|
275
|
+
});
|
276
|
+
if (localCandidate) {
|
277
|
+
if (localCandidate.address) {
|
278
|
+
return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';
|
279
|
+
}
|
280
|
+
try {
|
281
|
+
// safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP
|
282
|
+
var localSdp = webrtcMediaConnection.localDescription.sdp;
|
283
|
+
var parsedSdp = (0, _tsSdp.parse)(localSdp);
|
284
|
+
var _iterator = _createForOfIteratorHelper(parsedSdp.avMedia),
|
285
|
+
_step;
|
286
|
+
try {
|
287
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
288
|
+
var mediaLine = _step.value;
|
289
|
+
var matchingCandidate = mediaLine.iceInfo.candidates.find(function (candidate) {
|
290
|
+
return candidate.port === localCandidate.port;
|
291
|
+
});
|
292
|
+
if (matchingCandidate) {
|
293
|
+
return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';
|
294
|
+
}
|
295
|
+
}
|
296
|
+
} catch (err) {
|
297
|
+
_iterator.e(err);
|
298
|
+
} finally {
|
299
|
+
_iterator.f();
|
300
|
+
}
|
301
|
+
_loggerProxy.default.logger.warn("Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ".concat(localCandidate.port));
|
302
|
+
} catch (error) {
|
303
|
+
_loggerProxy.default.logger.warn("Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:", error);
|
304
|
+
return undefined;
|
305
|
+
}
|
306
|
+
} else {
|
307
|
+
_loggerProxy.default.logger.warn("Media:properties#getConnectionIpVersion --> failed to find local candidate \"".concat(selectedCandidatePair.localCandidateId, "\" in getStats() results"));
|
308
|
+
}
|
309
|
+
} else {
|
310
|
+
var _transports$;
|
311
|
+
_loggerProxy.default.logger.warn("Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=".concat(transports.length, ", selectedCandidatePairId=").concat((_transports$ = transports[0]) === null || _transports$ === void 0 ? void 0 : _transports$.selectedCandidatePairId, ")"));
|
312
|
+
}
|
313
|
+
return undefined;
|
314
|
+
}
|
315
|
+
|
232
316
|
/**
|
233
317
|
* Returns the type of a connection that has been established
|
234
318
|
* It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'
|
@@ -292,7 +376,7 @@ var MediaProperties = exports.default = /*#__PURE__*/function () {
|
|
292
376
|
value: (function () {
|
293
377
|
var _getCurrentConnectionInfo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
294
378
|
var _this = this;
|
295
|
-
var allStatsReports, connectionType, _this$getTransportInf, selectedCandidatePairChanges, numTransports;
|
379
|
+
var _this$webrtcMediaConn, _this$webrtcMediaConn2, allStatsReports, connectionType, rtcPeerconnection, ipVersion, _this$getTransportInf, selectedCandidatePairChanges, numTransports;
|
296
380
|
return _regenerator.default.wrap(function _callee$(_context) {
|
297
381
|
while (1) switch (_context.prev = _context.next) {
|
298
382
|
case 0:
|
@@ -316,26 +400,30 @@ var MediaProperties = exports.default = /*#__PURE__*/function () {
|
|
316
400
|
});
|
317
401
|
case 4:
|
318
402
|
connectionType = this.getConnectionType(allStatsReports);
|
403
|
+
rtcPeerconnection = ((_this$webrtcMediaConn = this.webrtcMediaConnection.multistreamConnection) === null || _this$webrtcMediaConn === void 0 ? void 0 : _this$webrtcMediaConn.pc.pc) || ((_this$webrtcMediaConn2 = this.webrtcMediaConnection.mediaConnection) === null || _this$webrtcMediaConn2 === void 0 ? void 0 : _this$webrtcMediaConn2.pc);
|
404
|
+
ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);
|
319
405
|
_this$getTransportInf = this.getTransportInfo(allStatsReports), selectedCandidatePairChanges = _this$getTransportInf.selectedCandidatePairChanges, numTransports = _this$getTransportInf.numTransports;
|
320
406
|
return _context.abrupt("return", {
|
321
407
|
connectionType: connectionType,
|
408
|
+
ipVersion: ipVersion,
|
322
409
|
selectedCandidatePairChanges: selectedCandidatePairChanges,
|
323
410
|
numTransports: numTransports
|
324
411
|
});
|
325
|
-
case
|
326
|
-
_context.prev =
|
412
|
+
case 11:
|
413
|
+
_context.prev = 11;
|
327
414
|
_context.t0 = _context["catch"](0);
|
328
415
|
_loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionInfo --> getStats() failed: ".concat(_context.t0));
|
329
416
|
return _context.abrupt("return", {
|
330
417
|
connectionType: 'unknown',
|
418
|
+
ipVersion: undefined,
|
331
419
|
selectedCandidatePairChanges: -1,
|
332
420
|
numTransports: 0
|
333
421
|
});
|
334
|
-
case
|
422
|
+
case 15:
|
335
423
|
case "end":
|
336
424
|
return _context.stop();
|
337
425
|
}
|
338
|
-
}, _callee, this, [[0,
|
426
|
+
}, _callee, this, [[0, 11]]);
|
339
427
|
}));
|
340
428
|
function getCurrentConnectionInfo() {
|
341
429
|
return _getCurrentConnectionInfo.apply(this, arguments);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_constants","require","_loggerProxy","_interopRequireDefault","_MediaConnectionAwaiter","MediaProperties","exports","default","_classCallCheck2","_defineProperty2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","_createClass2","key","value","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","filter","report","length","LoggerProxy","logger","warn","concat","selectedCandidatePairChanges","numTransports","getConnectionType","successfulCandidatePairs","_report$state","state","toLowerCase","foundConnectionType","some","pair","localCandidate","find","id","localCandidateId","connectionType","relayProtocol","toUpperCase","_localCandidate$proto","protocol","candidateType","candidatePairStates","map","_stringify","_getCurrentConnectionInfo","_asyncToGenerator2","_regenerator","mark","_callee","_this","_this$getTransportInf","wrap","_callee$","_context","prev","next","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","forEach","push","catch","error","abrupt","t0","stop","getCurrentConnectionInfo","apply","arguments"],"sources":["properties.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {\n LocalCameraStream,\n LocalMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\n\nexport type MediaDirection = {\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n};\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioStream?: LocalMicrophoneStream;\n mediaDirection: MediaDirection;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioStream: RemoteStream;\n remoteQualityLevel: any;\n remoteShareStream: RemoteStream;\n remoteVideoStream: RemoteStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n videoDeviceId: any;\n videoStream?: LocalCameraStream;\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor() {\n this.webrtcMediaConnection = null;\n this.mediaDirection = {\n receiveAudio: false,\n receiveVideo: false,\n receiveShare: false,\n sendAudio: false,\n sendVideo: false,\n sendShare: false,\n };\n this.videoStream = null;\n this.audioStream = null;\n this.shareVideoStream = null;\n this.shareAudioStream = null;\n this.remoteShareStream = undefined;\n this.remoteAudioStream = undefined;\n this.remoteVideoStream = undefined;\n this.remoteQualityLevel = QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoStream(videoStream?: LocalCameraStream) {\n this.videoStream = videoStream;\n }\n\n setLocalAudioStream(audioStream?: LocalMicrophoneStream) {\n this.audioStream = audioStream;\n }\n\n setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {\n this.shareVideoStream = shareVideoStream;\n }\n\n setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {\n this.shareAudioStream = shareAudioStream;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShareStream(remoteShareStream: RemoteStream) {\n this.remoteShareStream = remoteShareStream;\n }\n\n /**\n * Sets the remote audio stream\n * @param {RemoteStream} remoteAudioStream RemoteStream to save\n * @returns {void}\n */\n setRemoteAudioStream(remoteAudioStream: RemoteStream) {\n this.remoteAudioStream = remoteAudioStream;\n }\n\n /**\n * Sets the remote video stream\n * @param {RemoteStream} remoteVideoStream RemoteStream to save\n * @returns {void}\n */\n setRemoteVideoStream(remoteVideoStream: RemoteStream) {\n this.remoteVideoStream = remoteVideoStream;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId: string) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioStream = null;\n this.remoteVideoStream = null;\n }\n\n unsetRemoteShareStream() {\n this.remoteShareStream = null;\n }\n\n /**\n * Unsets all remote streams\n * @returns {void}\n */\n unsetRemoteStreams() {\n this.unsetRemoteMedia();\n this.unsetRemoteShareStream();\n }\n\n /**\n * Returns if we have at least one local share stream or not.\n * @returns {Boolean}\n */\n hasLocalShareStream() {\n return !!(this.shareAudioStream || this.shareVideoStream);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n });\n\n return mediaConnectionAwaiter.waitForMediaConnectionConnected();\n }\n\n /**\n * Returns ICE transport information:\n * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections\n * it will be -1 if browser doesn't supply this information\n * - numTransports - number of transports (should be 1 if we're using bundle)\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {Object}\n */\n private getTransportInfo(allStatsReports: any[]): {\n selectedCandidatePairChanges: number;\n numTransports: number;\n } {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n if (transports.length > 1) {\n LoggerProxy.logger.warn(\n `Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`\n );\n }\n\n return {\n selectedCandidatePairChanges:\n transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined\n ? transports[0].selectedCandidatePairChanges\n : -1,\n numTransports: transports.length,\n };\n }\n\n /**\n * Returns the type of a connection that has been established\n * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'\n *\n * If connection was not established, it returns 'unknown'\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string}\n */\n private getConnectionType(allStatsReports: any[]) {\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`\n );\n\n return false;\n });\n\n if (foundConnectionType === 'unknown') {\n const candidatePairStates = allStatsReports\n .filter((report) => report.type === 'candidate-pair')\n .map((report) => report.state);\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(\n candidatePairStates\n )}`\n );\n }\n\n return foundConnectionType;\n }\n\n /**\n * Returns information about current webrtc media connection\n *\n * @returns {Promise<Object>}\n */\n async getCurrentConnectionInfo(): Promise<{\n connectionType: string;\n selectedCandidatePairChanges: number;\n numTransports: number;\n }> {\n try {\n const allStatsReports = [];\n\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('timed out'));\n }, 1000);\n\n this.webrtcMediaConnection\n .getStats()\n .then((statsResult) => {\n clearTimeout(timeout);\n statsResult.forEach((report) => allStatsReports.push(report));\n resolve(allStatsReports);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n\n const connectionType = this.getConnectionType(allStatsReports);\n const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);\n\n return {\n connectionType,\n selectedCandidatePairChanges,\n numTransports,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`\n );\n\n return {\n connectionType: 'unknown',\n selectedCandidatePairChanges: -1,\n numTransports: 0,\n };\n }\n }\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["_tsSdp","require","_constants","_loggerProxy","_interopRequireDefault","_MediaConnectionAwaiter","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","MediaProperties","exports","default","_classCallCheck2","_defineProperty2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","_createClass2","key","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","filter","report","LoggerProxy","logger","warn","concat","selectedCandidatePairChanges","numTransports","isIPv6","ip","includes","getConnectionIpVersion","selectedCandidatePair","selectedCandidatePairId","find","id","selected","localCandidate","localCandidateId","address","localSdp","localDescription","sdp","parsedSdp","parse","_iterator","avMedia","_step","mediaLine","matchingCandidate","iceInfo","candidates","candidate","port","connectionAddress","error","_transports$","getConnectionType","successfulCandidatePairs","_report$state","state","toLowerCase","foundConnectionType","some","pair","connectionType","relayProtocol","toUpperCase","_localCandidate$proto","protocol","candidateType","candidatePairStates","map","_stringify","_getCurrentConnectionInfo","_asyncToGenerator2","_regenerator","mark","_callee","_this","_this$webrtcMediaConn","_this$webrtcMediaConn2","rtcPeerconnection","ipVersion","_this$getTransportInf","wrap","_callee$","_context","prev","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","forEach","push","catch","multistreamConnection","pc","mediaConnection","abrupt","t0","stop","getCurrentConnectionInfo","apply","arguments"],"sources":["properties.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {\n LocalCameraStream,\n LocalMicrophoneStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n RemoteStream,\n} from '@webex/media-helpers';\n\nimport {parse} from '@webex/ts-sdp';\nimport {ClientEvent} from '@webex/internal-plugin-metrics';\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\n\nexport type MediaDirection = {\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n};\n\nexport type IPVersion = ClientEvent['payload']['ipVersion'];\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioStream?: LocalMicrophoneStream;\n mediaDirection: MediaDirection;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioStream: RemoteStream;\n remoteQualityLevel: any;\n remoteShareStream: RemoteStream;\n remoteVideoStream: RemoteStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n videoDeviceId: any;\n videoStream?: LocalCameraStream;\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor() {\n this.webrtcMediaConnection = null;\n this.mediaDirection = {\n receiveAudio: false,\n receiveVideo: false,\n receiveShare: false,\n sendAudio: false,\n sendVideo: false,\n sendShare: false,\n };\n this.videoStream = null;\n this.audioStream = null;\n this.shareVideoStream = null;\n this.shareAudioStream = null;\n this.remoteShareStream = undefined;\n this.remoteAudioStream = undefined;\n this.remoteVideoStream = undefined;\n this.remoteQualityLevel = QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoStream(videoStream?: LocalCameraStream) {\n this.videoStream = videoStream;\n }\n\n setLocalAudioStream(audioStream?: LocalMicrophoneStream) {\n this.audioStream = audioStream;\n }\n\n setLocalShareVideoStream(shareVideoStream?: LocalDisplayStream) {\n this.shareVideoStream = shareVideoStream;\n }\n\n setLocalShareAudioStream(shareAudioStream?: LocalSystemAudioStream) {\n this.shareAudioStream = shareAudioStream;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShareStream(remoteShareStream: RemoteStream) {\n this.remoteShareStream = remoteShareStream;\n }\n\n /**\n * Sets the remote audio stream\n * @param {RemoteStream} remoteAudioStream RemoteStream to save\n * @returns {void}\n */\n setRemoteAudioStream(remoteAudioStream: RemoteStream) {\n this.remoteAudioStream = remoteAudioStream;\n }\n\n /**\n * Sets the remote video stream\n * @param {RemoteStream} remoteVideoStream RemoteStream to save\n * @returns {void}\n */\n setRemoteVideoStream(remoteVideoStream: RemoteStream) {\n this.remoteVideoStream = remoteVideoStream;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId: string) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioStream = null;\n this.remoteVideoStream = null;\n }\n\n unsetRemoteShareStream() {\n this.remoteShareStream = null;\n }\n\n /**\n * Unsets all remote streams\n * @returns {void}\n */\n unsetRemoteStreams() {\n this.unsetRemoteMedia();\n this.unsetRemoteShareStream();\n }\n\n /**\n * Returns if we have at least one local share stream or not.\n * @returns {Boolean}\n */\n hasLocalShareStream() {\n return !!(this.shareAudioStream || this.shareVideoStream);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n });\n\n return mediaConnectionAwaiter.waitForMediaConnectionConnected();\n }\n\n /**\n * Returns ICE transport information:\n * - selectedCandidatePairChanges - number of times the selected candidate pair was changed, it should be at least 1 for successful connections\n * it will be -1 if browser doesn't supply this information\n * - numTransports - number of transports (should be 1 if we're using bundle)\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {Object}\n */\n private getTransportInfo(allStatsReports: any[]): {\n selectedCandidatePairChanges: number;\n numTransports: number;\n } {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n if (transports.length > 1) {\n LoggerProxy.logger.warn(\n `Media:properties#getSelectedCandidatePairChanges --> found more than 1 transport: ${transports.length}`\n );\n }\n\n return {\n selectedCandidatePairChanges:\n transports.length > 0 && transports[0].selectedCandidatePairChanges !== undefined\n ? transports[0].selectedCandidatePairChanges\n : -1,\n numTransports: transports.length,\n };\n }\n\n /**\n * Checks if the given IP address is IPv6\n * @param {string} ip address to check\n * @returns {boolean} true if the address is IPv6, false otherwise\n */\n private isIPv6(ip: string): boolean {\n return ip.includes(':');\n }\n\n /** Finds out if we connected using IPv4 or IPv6\n * @param {RTCPeerConnection} webrtcMediaConnection\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string} IPVersion\n */\n private getConnectionIpVersion(\n webrtcMediaConnection: RTCPeerConnection,\n allStatsReports: any[]\n ): IPVersion | undefined {\n const transports = allStatsReports.filter((report) => report.type === 'transport');\n\n let selectedCandidatePair;\n\n if (transports.length > 0 && transports[0].selectedCandidatePairId) {\n selectedCandidatePair = allStatsReports.find(\n (report) =>\n report.type === 'candidate-pair' && report.id === transports[0].selectedCandidatePairId\n );\n } else {\n // Firefox doesn't have selectedCandidatePairId, but has selected property on the candidate pair\n selectedCandidatePair = allStatsReports.find(\n (report) => report.type === 'candidate-pair' && report.selected\n );\n }\n\n if (selectedCandidatePair) {\n const localCandidate = allStatsReports.find(\n (report) =>\n report.type === 'local-candidate' && report.id === selectedCandidatePair.localCandidateId\n );\n\n if (localCandidate) {\n if (localCandidate.address) {\n return this.isIPv6(localCandidate.address) ? 'IPv6' : 'IPv4';\n }\n\n try {\n // safari doesn't have address field on the candidate, so we have to use the port to look up the candidate in the SDP\n const localSdp = webrtcMediaConnection.localDescription.sdp;\n\n const parsedSdp = parse(localSdp);\n\n for (const mediaLine of parsedSdp.avMedia) {\n const matchingCandidate = mediaLine.iceInfo.candidates.find(\n (candidate) => candidate.port === localCandidate.port\n );\n if (matchingCandidate) {\n return this.isIPv6(matchingCandidate.connectionAddress) ? 'IPv6' : 'IPv4';\n }\n }\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate in the SDP for port ${localCandidate.port}`\n );\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> error while trying to find candidate in local SDP:`,\n error\n );\n\n return undefined;\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find local candidate \"${selectedCandidatePair.localCandidateId}\" in getStats() results`\n );\n }\n } else {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionIpVersion --> failed to find selected candidate pair in getStats() results (transports.length=${transports.length}, selectedCandidatePairId=${transports[0]?.selectedCandidatePairId})`\n );\n }\n\n return undefined;\n }\n\n /**\n * Returns the type of a connection that has been established\n * It should be 'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'\n *\n * If connection was not established, it returns 'unknown'\n *\n * @param {Array<any>} allStatsReports array of RTC stats reports\n * @returns {string}\n */\n private getConnectionType(allStatsReports: any[]) {\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> missing localCandidate.protocol, candidateType=${localCandidate.candidateType}`\n );\n\n return false;\n });\n\n if (foundConnectionType === 'unknown') {\n const candidatePairStates = allStatsReports\n .filter((report) => report.type === 'candidate-pair')\n .map((report) => report.state);\n\n LoggerProxy.logger.warn(\n `Media:properties#getConnectionType --> all candidate pair states: ${JSON.stringify(\n candidatePairStates\n )}`\n );\n }\n\n return foundConnectionType;\n }\n\n /**\n * Returns information about current webrtc media connection\n *\n * @returns {Promise<Object>}\n */\n async getCurrentConnectionInfo(): Promise<{\n connectionType: string;\n ipVersion?: IPVersion;\n selectedCandidatePairChanges: number;\n numTransports: number;\n }> {\n try {\n const allStatsReports = [];\n\n await new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('timed out'));\n }, 1000);\n\n this.webrtcMediaConnection\n .getStats()\n .then((statsResult) => {\n clearTimeout(timeout);\n statsResult.forEach((report) => allStatsReports.push(report));\n resolve(allStatsReports);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n\n const connectionType = this.getConnectionType(allStatsReports);\n const rtcPeerconnection =\n this.webrtcMediaConnection.multistreamConnection?.pc.pc ||\n this.webrtcMediaConnection.mediaConnection?.pc;\n const ipVersion = this.getConnectionIpVersion(rtcPeerconnection, allStatsReports);\n const {selectedCandidatePairChanges, numTransports} = this.getTransportInfo(allStatsReports);\n\n return {\n connectionType,\n ipVersion,\n selectedCandidatePairChanges,\n numTransports,\n };\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionInfo --> getStats() failed: ${error}`\n );\n\n return {\n connectionType: 'unknown',\n ipVersion: undefined,\n selectedCandidatePairChanges: -1,\n numTransports: 0,\n };\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AASA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,uBAAA,GAAAD,sBAAA,CAAAH,OAAA;AAA8D,SAAAK,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,OAAA,oBAAAH,CAAA,CAAAI,gBAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,cAAA,CAAAL,CAAA,MAAAE,EAAA,GAAAI,2BAAA,CAAAN,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAO,MAAA,qBAAAL,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAM,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAR,CAAA,CAAAO,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAb,CAAA,CAAAQ,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAR,EAAA,GAAAA,EAAA,CAAAmB,IAAA,CAAArB,CAAA,MAAAW,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAApB,EAAA,CAAAqB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAhB,EAAA,CAAAuB,MAAA,UAAAvB,EAAA,CAAAuB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAN,CAAA,EAAA0B,MAAA,SAAA1B,CAAA,qBAAAA,CAAA,sBAAA2B,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAArB,CAAA,EAAA+B,KAAA,aAAApB,CAAA,iBAAAX,CAAA,CAAAgC,WAAA,EAAArB,CAAA,GAAAX,CAAA,CAAAgC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAuB,WAAA,CAAAlC,CAAA,OAAAW,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAC,KAAA,CAAAF,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA,IAb9D;AA0BA;AACA;AACA;AAFA,IAGqBE,eAAe,GAAAC,OAAA,CAAAC,OAAA;EAelC;AACF;AACA;AACA;EACE,SAAAF,gBAAA,EAAc;IAAA,IAAAG,gBAAA,CAAAD,OAAA,QAAAF,eAAA;IAAA,IAAAI,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA;IAAA,IAAAE,gBAAA,CAAAF,OAAA,qBANFG,mBAAQ;IAOlB,IAAI,CAACC,qBAAqB,GAAG,IAAI;IACjC,IAAI,CAACC,cAAc,GAAG;MACpBC,YAAY,EAAE,KAAK;MACnBC,YAAY,EAAE,KAAK;MACnBC,YAAY,EAAE,KAAK;MACnBC,SAAS,EAAE,KAAK;MAChBC,SAAS,EAAE,KAAK;MAChBC,SAAS,EAAE;IACb,CAAC;IACD,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAACC,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAACC,iBAAiB,GAAGC,SAAS;IAClC,IAAI,CAACC,iBAAiB,GAAGD,SAAS;IAClC,IAAI,CAACE,iBAAiB,GAAGF,SAAS;IAClC,IAAI,CAACG,kBAAkB,GAAGC,yBAAc,CAACC,IAAI;IAC7C,IAAI,CAACC,aAAa,GAAG,CAAC,CAAC;IACvB,IAAI,CAACC,aAAa,GAAG,IAAI;EAC3B;;EAEA;AACF;AACA;AACA;EAHE,IAAAC,aAAA,CAAAzB,OAAA,EAAAF,eAAA;IAAA4B,GAAA;IAAAvD,KAAA,EAIA,SAAAwD,iBAAA,EAAmB;MACjB,OAAO,IAAI,CAACH,aAAa,IAAI,IAAI;IACnC;EAAC;IAAAE,GAAA;IAAAvD,KAAA,EAED,SAAAyD,kBAAkBvB,cAAc,EAAE;MAChC,IAAI,CAACA,cAAc,GAAGA,cAAc;IACtC;EAAC;IAAAqB,GAAA;IAAAvD,KAAA,EAED,SAAA0D,iBAAiBC,IAAI,EAAEC,MAAM,EAAE;MAC7B,IAAI,CAACR,aAAa,CAACO,IAAI,CAAC,GAAGC,MAAM;IACnC;EAAC;IAAAL,GAAA;IAAAvD,KAAA,EAED,SAAA6D,uBAAuBC,mBAAmB,EAAE;MAC1C,IAAI,CAAC7B,qBAAqB,GAAG6B,mBAAmB;IAClD;EAAC;IAAAP,GAAA;IAAAvD,KAAA,EAED,SAAA+D,oBAAoBtB,WAA+B,EAAE;MACnD,IAAI,CAACA,WAAW,GAAGA,WAAW;IAChC;EAAC;IAAAc,GAAA;IAAAvD,KAAA,EAED,SAAAgE,oBAAoBtB,WAAmC,EAAE;MACvD,IAAI,CAACA,WAAW,GAAGA,WAAW;IAChC;EAAC;IAAAa,GAAA;IAAAvD,KAAA,EAED,SAAAiE,yBAAyBtB,gBAAqC,EAAE;MAC9D,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;IAC1C;EAAC;IAAAY,GAAA;IAAAvD,KAAA,EAED,SAAAkE,yBAAyBtB,gBAAyC,EAAE;MAClE,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;IAC1C;EAAC;IAAAW,GAAA;IAAAvD,KAAA,EAED,SAAAmE,sBAAsBlB,kBAAkB,EAAE;MACxC,IAAI,CAACA,kBAAkB,GAAGA,kBAAkB;IAC9C;EAAC;IAAAM,GAAA;IAAAvD,KAAA,EAED,SAAAoE,qBAAqBvB,iBAA+B,EAAE;MACpD,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC5C;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAU,GAAA;IAAAvD,KAAA,EAKA,SAAAqE,qBAAqBtB,iBAA+B,EAAE;MACpD,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC5C;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAQ,GAAA;IAAAvD,KAAA,EAKA,SAAAsE,qBAAqBtB,iBAA+B,EAAE;MACpD,IAAI,CAACA,iBAAiB,GAAGA,iBAAiB;IAC5C;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAO,GAAA;IAAAvD,KAAA,EAKA,SAAAuE,iBAAiBC,QAAgB,EAAE;MACjC,IAAI,CAACnB,aAAa,GAAGmB,QAAQ;IAC/B;EAAC;IAAAjB,GAAA;IAAAvD,KAAA,EAED,SAAAyE,oBAAA,EAAsB;MACpB,IAAI,CAACxC,qBAAqB,GAAG,IAAI;IACnC;;IAEA;AACF;AACA;AACA;EAHE;IAAAsB,GAAA;IAAAvD,KAAA,EAIA,SAAA0E,iBAAA,EAAmB;MACjB,IAAI,CAAC3B,iBAAiB,GAAG,IAAI;MAC7B,IAAI,CAACC,iBAAiB,GAAG,IAAI;IAC/B;EAAC;IAAAO,GAAA;IAAAvD,KAAA,EAED,SAAA2E,uBAAA,EAAyB;MACvB,IAAI,CAAC9B,iBAAiB,GAAG,IAAI;IAC/B;;IAEA;AACF;AACA;AACA;EAHE;IAAAU,GAAA;IAAAvD,KAAA,EAIA,SAAA4E,mBAAA,EAAqB;MACnB,IAAI,CAACF,gBAAgB,CAAC,CAAC;MACvB,IAAI,CAACC,sBAAsB,CAAC,CAAC;IAC/B;;IAEA;AACF;AACA;AACA;EAHE;IAAApB,GAAA;IAAAvD,KAAA,EAIA,SAAA6E,oBAAA,EAAsB;MACpB,OAAO,CAAC,EAAE,IAAI,CAACjC,gBAAgB,IAAI,IAAI,CAACD,gBAAgB,CAAC;IAC3D;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAY,GAAA;IAAAvD,KAAA,EAKA,SAAA8E,gCAAA,EAAiD;MAC/C,IAAMC,sBAAsB,GAAG,IAAIC,+BAAsB,CAAC;QACxD/C,qBAAqB,EAAE,IAAI,CAACA;MAC9B,CAAC,CAAC;MAEF,OAAO8C,sBAAsB,CAACD,+BAA+B,CAAC,CAAC;IACjE;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAvB,GAAA;IAAAvD,KAAA,EASA,SAAAiF,iBAAyBC,eAAsB,EAG7C;MACA,IAAMC,UAAU,GAAGD,eAAe,CAACE,MAAM,CAAC,UAACC,MAAM;QAAA,OAAKA,MAAM,CAAC1B,IAAI,KAAK,WAAW;MAAA,EAAC;MAElF,IAAIwB,UAAU,CAACzF,MAAM,GAAG,CAAC,EAAE;QACzB4F,oBAAW,CAACC,MAAM,CAACC,IAAI,sFAAAC,MAAA,CACgEN,UAAU,CAACzF,MAAM,CACxG,CAAC;MACH;MAEA,OAAO;QACLgG,4BAA4B,EAC1BP,UAAU,CAACzF,MAAM,GAAG,CAAC,IAAIyF,UAAU,CAAC,CAAC,CAAC,CAACO,4BAA4B,KAAK5C,SAAS,GAC7EqC,UAAU,CAAC,CAAC,CAAC,CAACO,4BAA4B,GAC1C,CAAC,CAAC;QACRC,aAAa,EAAER,UAAU,CAACzF;MAC5B,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA6D,GAAA;IAAAvD,KAAA,EAKA,SAAA4F,OAAeC,EAAU,EAAW;MAClC,OAAOA,EAAE,CAACC,QAAQ,CAAC,GAAG,CAAC;IACzB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAvC,GAAA;IAAAvD,KAAA,EAKA,SAAA+F,uBACE9D,qBAAwC,EACxCiD,eAAsB,EACC;MACvB,IAAMC,UAAU,GAAGD,eAAe,CAACE,MAAM,CAAC,UAACC,MAAM;QAAA,OAAKA,MAAM,CAAC1B,IAAI,KAAK,WAAW;MAAA,EAAC;MAElF,IAAIqC,qBAAqB;MAEzB,IAAIb,UAAU,CAACzF,MAAM,GAAG,CAAC,IAAIyF,UAAU,CAAC,CAAC,CAAC,CAACc,uBAAuB,EAAE;QAClED,qBAAqB,GAAGd,eAAe,CAACgB,IAAI,CAC1C,UAACb,MAAM;UAAA,OACLA,MAAM,CAAC1B,IAAI,KAAK,gBAAgB,IAAI0B,MAAM,CAACc,EAAE,KAAKhB,UAAU,CAAC,CAAC,CAAC,CAACc,uBAAuB;QAAA,CAC3F,CAAC;MACH,CAAC,MAAM;QACL;QACAD,qBAAqB,GAAGd,eAAe,CAACgB,IAAI,CAC1C,UAACb,MAAM;UAAA,OAAKA,MAAM,CAAC1B,IAAI,KAAK,gBAAgB,IAAI0B,MAAM,CAACe,QAAQ;QAAA,CACjE,CAAC;MACH;MAEA,IAAIJ,qBAAqB,EAAE;QACzB,IAAMK,cAAc,GAAGnB,eAAe,CAACgB,IAAI,CACzC,UAACb,MAAM;UAAA,OACLA,MAAM,CAAC1B,IAAI,KAAK,iBAAiB,IAAI0B,MAAM,CAACc,EAAE,KAAKH,qBAAqB,CAACM,gBAAgB;QAAA,CAC7F,CAAC;QAED,IAAID,cAAc,EAAE;UAClB,IAAIA,cAAc,CAACE,OAAO,EAAE;YAC1B,OAAO,IAAI,CAACX,MAAM,CAACS,cAAc,CAACE,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM;UAC9D;UAEA,IAAI;YACF;YACA,IAAMC,QAAQ,GAAGvE,qBAAqB,CAACwE,gBAAgB,CAACC,GAAG;YAE3D,IAAMC,SAAS,GAAG,IAAAC,YAAK,EAACJ,QAAQ,CAAC;YAAC,IAAAK,SAAA,GAAA3H,0BAAA,CAEVyH,SAAS,CAACG,OAAO;cAAAC,KAAA;YAAA;cAAzC,KAAAF,SAAA,CAAAhH,CAAA,MAAAkH,KAAA,GAAAF,SAAA,CAAA/G,CAAA,IAAAC,IAAA,GAA2C;gBAAA,IAAhCiH,SAAS,GAAAD,KAAA,CAAA/G,KAAA;gBAClB,IAAMiH,iBAAiB,GAAGD,SAAS,CAACE,OAAO,CAACC,UAAU,CAACjB,IAAI,CACzD,UAACkB,SAAS;kBAAA,OAAKA,SAAS,CAACC,IAAI,KAAKhB,cAAc,CAACgB,IAAI;gBAAA,CACvD,CAAC;gBACD,IAAIJ,iBAAiB,EAAE;kBACrB,OAAO,IAAI,CAACrB,MAAM,CAACqB,iBAAiB,CAACK,iBAAiB,CAAC,GAAG,MAAM,GAAG,MAAM;gBAC3E;cACF;YAAC,SAAA/G,GAAA;cAAAsG,SAAA,CAAA5G,CAAA,CAAAM,GAAA;YAAA;cAAAsG,SAAA,CAAA1G,CAAA;YAAA;YAEDmF,oBAAW,CAACC,MAAM,CAACC,IAAI,mGAAAC,MAAA,CAC6EY,cAAc,CAACgB,IAAI,CACvH,CAAC;UACH,CAAC,CAAC,OAAOE,KAAK,EAAE;YACdjC,oBAAW,CAACC,MAAM,CAACC,IAAI,mGAErB+B,KACF,CAAC;YAED,OAAOzE,SAAS;UAClB;QACF,CAAC,MAAM;UACLwC,oBAAW,CAACC,MAAM,CAACC,IAAI,iFAAAC,MAAA,CAC0DO,qBAAqB,CAACM,gBAAgB,6BACvH,CAAC;QACH;MACF,CAAC,MAAM;QAAA,IAAAkB,YAAA;QACLlC,oBAAW,CAACC,MAAM,CAACC,IAAI,gIAAAC,MAAA,CAC0GN,UAAU,CAACzF,MAAM,gCAAA+F,MAAA,EAAA+B,YAAA,GAA6BrC,UAAU,CAAC,CAAC,CAAC,cAAAqC,YAAA,uBAAbA,YAAA,CAAevB,uBAAuB,MACrN,CAAC;MACH;MAEA,OAAOnD,SAAS;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAS,GAAA;IAAAvD,KAAA,EASA,SAAAyH,kBAA0BvC,eAAsB,EAAE;MAChD,IAAMwC,wBAAwB,GAAGxC,eAAe,CAACE,MAAM,CACrD,UAACC,MAAM;QAAA,IAAAsC,aAAA;QAAA,OAAKtC,MAAM,CAAC1B,IAAI,KAAK,gBAAgB,IAAI,EAAAgE,aAAA,GAAAtC,MAAM,CAACuC,KAAK,cAAAD,aAAA,uBAAZA,aAAA,CAAcE,WAAW,CAAC,CAAC,MAAK,WAAW;MAAA,CAC7F,CAAC;MAED,IAAIC,mBAAmB,GAAG,SAAS;;MAEnC;MACAJ,wBAAwB,CAACK,IAAI,CAAC,UAACC,IAAI,EAAK;QACtC,IAAM3B,cAAc,GAAGnB,eAAe,CAACgB,IAAI,CACzC,UAACb,MAAM;UAAA,OAAKA,MAAM,CAAC1B,IAAI,KAAK,iBAAiB,IAAI0B,MAAM,CAACc,EAAE,KAAK6B,IAAI,CAAC1B,gBAAgB;QAAA,CACtF,CAAC;QAED,IAAID,cAAc,KAAKvD,SAAS,EAAE;UAChCwC,oBAAW,CAACC,MAAM,CAACC,IAAI,4EAAAC,MAAA,CACqDuC,IAAI,CAAC1B,gBAAgB,6BACjG,CAAC;UAED,OAAO,KAAK;QACd;QAEA,IAAI2B,cAAc;QAElB,IAAI5B,cAAc,CAAC6B,aAAa,EAAE;UAChCD,cAAc,WAAAxC,MAAA,CAAWY,cAAc,CAAC6B,aAAa,CAACC,WAAW,CAAC,CAAC,CAAE;QACvE,CAAC,MAAM;UAAA,IAAAC,qBAAA;UACLH,cAAc,IAAAG,qBAAA,GAAG/B,cAAc,CAACgC,QAAQ,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBD,WAAW,CAAC,CAAC,CAAC,CAAC;QAC3D;;QAEA,IAAIF,cAAc,EAAE;UAClBH,mBAAmB,GAAGG,cAAc;UAEpC,OAAO,IAAI;QACb;QACA3C,oBAAW,CAACC,MAAM,CAACC,IAAI,0FAAAC,MAAA,CACoEY,cAAc,CAACiC,aAAa,CACvH,CAAC;QAED,OAAO,KAAK;MACd,CAAC,CAAC;MAEF,IAAIR,mBAAmB,KAAK,SAAS,EAAE;QACrC,IAAMS,mBAAmB,GAAGrD,eAAe,CACxCE,MAAM,CAAC,UAACC,MAAM;UAAA,OAAKA,MAAM,CAAC1B,IAAI,KAAK,gBAAgB;QAAA,EAAC,CACpD6E,GAAG,CAAC,UAACnD,MAAM;UAAA,OAAKA,MAAM,CAACuC,KAAK;QAAA,EAAC;QAEhCtC,oBAAW,CAACC,MAAM,CAACC,IAAI,sEAAAC,MAAA,CACgD,IAAAgD,UAAA,CAAA5G,OAAA,EACnE0G,mBACF,CAAC,CACH,CAAC;MACH;MAEA,OAAOT,mBAAmB;IAC5B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAvE,GAAA;IAAAvD,KAAA;MAAA,IAAA0I,yBAAA,OAAAC,kBAAA,CAAA9G,OAAA,gBAAA+G,YAAA,CAAA/G,OAAA,CAAAgH,IAAA,CAKA,SAAAC,QAAA;QAAA,IAAAC,KAAA;QAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAA/D,eAAA,EAAA+C,cAAA,EAAAiB,iBAAA,EAAAC,SAAA,EAAAC,qBAAA,EAAA1D,4BAAA,EAAAC,aAAA;QAAA,OAAAiD,YAAA,CAAA/G,OAAA,CAAAwH,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAA7I,IAAA;YAAA;cAAA6I,QAAA,CAAAC,IAAA;cAOUtE,eAAe,GAAG,EAAE;cAAAqE,QAAA,CAAA7I,IAAA;cAAA,OAEpB,IAAA+I,QAAA,CAAA5H,OAAA,CAAY,UAAC6H,OAAO,EAAEC,MAAM,EAAK;gBACrC,IAAMC,OAAO,GAAGC,UAAU,CAAC,YAAM;kBAC/BF,MAAM,CAAC,IAAIG,KAAK,CAAC,WAAW,CAAC,CAAC;gBAChC,CAAC,EAAE,IAAI,CAAC;gBAERf,KAAI,CAAC9G,qBAAqB,CACvB8H,QAAQ,CAAC,CAAC,CACVC,IAAI,CAAC,UAACC,WAAW,EAAK;kBACrBC,YAAY,CAACN,OAAO,CAAC;kBACrBK,WAAW,CAACE,OAAO,CAAC,UAAC9E,MAAM;oBAAA,OAAKH,eAAe,CAACkF,IAAI,CAAC/E,MAAM,CAAC;kBAAA,EAAC;kBAC7DqE,OAAO,CAACxE,eAAe,CAAC;gBAC1B,CAAC,CAAC,CACDmF,KAAK,CAAC,UAAC9C,KAAK,EAAK;kBAChB2C,YAAY,CAACN,OAAO,CAAC;kBACrBD,MAAM,CAACpC,KAAK,CAAC;gBACf,CAAC,CAAC;cACN,CAAC,CAAC;YAAA;cAEIU,cAAc,GAAG,IAAI,CAACR,iBAAiB,CAACvC,eAAe,CAAC;cACxDgE,iBAAiB,GACrB,EAAAF,qBAAA,OAAI,CAAC/G,qBAAqB,CAACqI,qBAAqB,cAAAtB,qBAAA,uBAAhDA,qBAAA,CAAkDuB,EAAE,CAACA,EAAE,OAAAtB,sBAAA,GACvD,IAAI,CAAChH,qBAAqB,CAACuI,eAAe,cAAAvB,sBAAA,uBAA1CA,sBAAA,CAA4CsB,EAAE;cAC1CpB,SAAS,GAAG,IAAI,CAACpD,sBAAsB,CAACmD,iBAAiB,EAAEhE,eAAe,CAAC;cAAAkE,qBAAA,GAC3B,IAAI,CAACnE,gBAAgB,CAACC,eAAe,CAAC,EAArFQ,4BAA4B,GAAA0D,qBAAA,CAA5B1D,4BAA4B,EAAEC,aAAa,GAAAyD,qBAAA,CAAbzD,aAAa;cAAA,OAAA4D,QAAA,CAAAkB,MAAA,WAE3C;gBACLxC,cAAc,EAAdA,cAAc;gBACdkB,SAAS,EAATA,SAAS;gBACTzD,4BAA4B,EAA5BA,4BAA4B;gBAC5BC,aAAa,EAAbA;cACF,CAAC;YAAA;cAAA4D,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAmB,EAAA,GAAAnB,QAAA;cAEDjE,oBAAW,CAACC,MAAM,CAACC,IAAI,qEAAAC,MAAA,CAAA8D,QAAA,CAAAmB,EAAA,CAEvB,CAAC;cAAC,OAAAnB,QAAA,CAAAkB,MAAA,WAEK;gBACLxC,cAAc,EAAE,SAAS;gBACzBkB,SAAS,EAAErG,SAAS;gBACpB4C,4BAA4B,EAAE,CAAC,CAAC;gBAChCC,aAAa,EAAE;cACjB,CAAC;YAAA;YAAA;cAAA,OAAA4D,QAAA,CAAAoB,IAAA;UAAA;QAAA,GAAA7B,OAAA;MAAA,CAEJ;MAAA,SAAA8B,yBAAA;QAAA,OAAAlC,yBAAA,CAAAmC,KAAA,OAAAC,SAAA;MAAA;MAAA,OAAAF,wBAAA;IAAA;EAAA;EAAA,OAAAjJ,eAAA;AAAA"}
|
package/dist/meeting/index.js
CHANGED
@@ -7582,6 +7582,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7582
7582
|
_this$remoteMediaMana,
|
7583
7583
|
_yield$this$mediaProp,
|
7584
7584
|
connectionType,
|
7585
|
+
ipVersion,
|
7585
7586
|
selectedCandidatePairChanges,
|
7586
7587
|
numTransports,
|
7587
7588
|
iceCandidateErrors,
|
@@ -7728,17 +7729,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7728
7729
|
case 46:
|
7729
7730
|
_yield$this$mediaProp = _context35.sent;
|
7730
7731
|
connectionType = _yield$this$mediaProp.connectionType;
|
7732
|
+
ipVersion = _yield$this$mediaProp.ipVersion;
|
7731
7733
|
selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
|
7732
7734
|
numTransports = _yield$this$mediaProp.numTransports;
|
7733
7735
|
iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
|
7734
|
-
_context35.next =
|
7736
|
+
_context35.next = 54;
|
7735
7737
|
return this.getMediaReachabilityMetricFields();
|
7736
|
-
case
|
7738
|
+
case 54:
|
7737
7739
|
reachabilityMetrics = _context35.sent;
|
7738
7740
|
_metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
|
7739
7741
|
correlation_id: this.correlationId,
|
7740
7742
|
locus_id: this.locusUrl.split('/').pop(),
|
7741
7743
|
connectionType: connectionType,
|
7744
|
+
ipVersion: ipVersion,
|
7742
7745
|
selectedCandidatePairChanges: selectedCandidatePairChanges,
|
7743
7746
|
numTransports: numTransports,
|
7744
7747
|
isMultistream: this.isMultistream,
|
@@ -7750,6 +7753,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7750
7753
|
// @ts-ignore
|
7751
7754
|
this.webex.internal.newMetrics.submitClientEvent({
|
7752
7755
|
name: 'client.media-engine.ready',
|
7756
|
+
payload: {
|
7757
|
+
ipVersion: ipVersion
|
7758
|
+
},
|
7753
7759
|
options: {
|
7754
7760
|
meetingId: this.id
|
7755
7761
|
}
|
@@ -7759,21 +7765,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7759
7765
|
// We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
|
7760
7766
|
(_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
|
7761
7767
|
this.startPeriodicLogUpload();
|
7762
|
-
_context35.next =
|
7768
|
+
_context35.next = 80;
|
7763
7769
|
break;
|
7764
|
-
case
|
7765
|
-
_context35.prev =
|
7770
|
+
case 62:
|
7771
|
+
_context35.prev = 62;
|
7766
7772
|
_context35.t1 = _context35["catch"](19);
|
7767
7773
|
_loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
|
7768
7774
|
|
7769
7775
|
// @ts-ignore
|
7770
|
-
_context35.next =
|
7776
|
+
_context35.next = 67;
|
7771
7777
|
return this.getMediaReachabilityMetricFields();
|
7772
|
-
case
|
7778
|
+
case 67:
|
7773
7779
|
_reachabilityMetrics = _context35.sent;
|
7774
|
-
_context35.next =
|
7780
|
+
_context35.next = 70;
|
7775
7781
|
return this.mediaProperties.getCurrentConnectionInfo();
|
7776
|
-
case
|
7782
|
+
case 70:
|
7777
7783
|
_yield$this$mediaProp2 = _context35.sent;
|
7778
7784
|
_selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
|
7779
7785
|
_numTransports = _yield$this$mediaProp2.numTransports;
|
@@ -7797,9 +7803,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7797
7803
|
}, _reachabilityMetrics), _iceCandidateErrors), {}, {
|
7798
7804
|
iceCandidatesCount: this.iceCandidatesCount
|
7799
7805
|
}));
|
7800
|
-
_context35.next =
|
7806
|
+
_context35.next = 77;
|
7801
7807
|
return this.cleanUpOnAddMediaFailure();
|
7802
|
-
case
|
7808
|
+
case 77:
|
7803
7809
|
// Upload logs on error while adding media
|
7804
7810
|
_triggerProxy.default.trigger(this, {
|
7805
7811
|
file: 'meeting/index',
|
@@ -7811,15 +7817,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
7811
7817
|
});
|
7812
7818
|
}
|
7813
7819
|
throw _context35.t1;
|
7814
|
-
case
|
7815
|
-
_context35.prev =
|
7820
|
+
case 80:
|
7821
|
+
_context35.prev = 80;
|
7816
7822
|
this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
|
7817
|
-
return _context35.finish(
|
7818
|
-
case
|
7823
|
+
return _context35.finish(80);
|
7824
|
+
case 83:
|
7819
7825
|
case "end":
|
7820
7826
|
return _context35.stop();
|
7821
7827
|
}
|
7822
|
-
}, _callee35, this, [[19,
|
7828
|
+
}, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
|
7823
7829
|
}));
|
7824
7830
|
function addMediaInternal(_x33, _x34, _x35) {
|
7825
7831
|
return _addMediaInternal.apply(this, arguments);
|