@webex/plugin-meetings 3.11.0-next.2 → 3.11.0-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/hashTree/hashTree.js +18 -0
- package/dist/hashTree/hashTree.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +307 -139
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +2 -1
- package/dist/hashTree/types.js.map +1 -1
- package/dist/hashTree/utils.js +10 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +55 -42
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +57 -1
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +4 -2
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +33 -22
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +108 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +76 -26
- package/dist/meetings/index.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/types/hashTree/hashTree.d.ts +7 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +47 -12
- package/dist/types/hashTree/types.d.ts +1 -0
- package/dist/types/hashTree/utils.d.ts +6 -0
- package/dist/types/locus-info/index.d.ts +9 -2
- package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
- package/dist/types/media/properties.d.ts +2 -1
- package/dist/types/meeting/index.d.ts +8 -5
- package/dist/types/meeting/util.d.ts +28 -0
- package/dist/types/meetings/index.d.ts +3 -1
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/reactions/reactions.type.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/hashTree/hashTree.ts +17 -0
- package/src/hashTree/hashTreeParser.ts +294 -96
- package/src/hashTree/types.ts +1 -0
- package/src/hashTree/utils.ts +9 -0
- package/src/locus-info/index.ts +83 -35
- package/src/media/MediaConnectionAwaiter.ts +41 -1
- package/src/media/properties.ts +3 -1
- package/src/meeting/index.ts +24 -11
- package/src/meeting/util.ts +132 -1
- package/src/meetings/index.ts +93 -8
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +1 -1
- package/src/reactions/reactions.type.ts +1 -0
- package/test/unit/spec/hashTree/hashTree.ts +66 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +942 -110
- package/test/unit/spec/locus-info/index.js +88 -17
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
- package/test/unit/spec/media/properties.ts +12 -3
- package/test/unit/spec/meeting/index.js +160 -2
- package/test/unit/spec/meeting/utils.js +294 -22
- package/test/unit/spec/meetings/index.js +594 -17
|
@@ -6,7 +6,10 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
+
var _from = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/from"));
|
|
9
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
12
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
10
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
11
14
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
@@ -14,6 +17,8 @@ var _common = require("@webex/common");
|
|
|
14
17
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
15
18
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
16
19
|
var _constants = require("../constants");
|
|
20
|
+
var _constants2 = _interopRequireDefault(require("../metrics/constants"));
|
|
21
|
+
var _metrics = _interopRequireDefault(require("../metrics"));
|
|
17
22
|
/**
|
|
18
23
|
* @class MediaConnectionAwaiter
|
|
19
24
|
*/
|
|
@@ -22,13 +27,15 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
22
27
|
* @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
|
|
23
28
|
*/
|
|
24
29
|
function MediaConnectionAwaiter(_ref) {
|
|
25
|
-
var webrtcMediaConnection = _ref.webrtcMediaConnection
|
|
30
|
+
var webrtcMediaConnection = _ref.webrtcMediaConnection,
|
|
31
|
+
correlationId = _ref.correlationId;
|
|
26
32
|
(0, _classCallCheck2.default)(this, MediaConnectionAwaiter);
|
|
27
33
|
(0, _defineProperty2.default)(this, "webrtcMediaConnection", void 0);
|
|
28
34
|
(0, _defineProperty2.default)(this, "timer", void 0);
|
|
29
35
|
(0, _defineProperty2.default)(this, "defer", void 0);
|
|
30
36
|
(0, _defineProperty2.default)(this, "retried", void 0);
|
|
31
37
|
(0, _defineProperty2.default)(this, "iceConnected", void 0);
|
|
38
|
+
(0, _defineProperty2.default)(this, "correlationId", void 0);
|
|
32
39
|
(0, _defineProperty2.default)(this, "onTimeoutCallback", void 0);
|
|
33
40
|
(0, _defineProperty2.default)(this, "peerConnectionStateCallback", void 0);
|
|
34
41
|
(0, _defineProperty2.default)(this, "iceConnectionStateCallback", void 0);
|
|
@@ -37,6 +44,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
37
44
|
this.defer = new _common.Defer();
|
|
38
45
|
this.retried = false;
|
|
39
46
|
this.iceConnected = false;
|
|
47
|
+
this.correlationId = correlationId;
|
|
40
48
|
this.onTimeoutCallback = this.onTimeout.bind(this);
|
|
41
49
|
this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);
|
|
42
50
|
this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);
|
|
@@ -163,11 +171,56 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
163
171
|
this.timer = setTimeout(this.onTimeoutCallback, _constants.ICE_AND_DTLS_CONNECTION_TIMEOUT);
|
|
164
172
|
}
|
|
165
173
|
|
|
174
|
+
/**
|
|
175
|
+
* sends a metric with some additional info that might help debugging
|
|
176
|
+
* issues where browser doesn't update the RTCPeerConnection's iceConnectionState or connectionState
|
|
177
|
+
*
|
|
178
|
+
* @returns {void}
|
|
179
|
+
*/
|
|
180
|
+
}, {
|
|
181
|
+
key: "sendMetric",
|
|
182
|
+
value: (function () {
|
|
183
|
+
var _sendMetric = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
184
|
+
var _transportReports$, _transportReports$2, _transportReports$3, _transportReports$4, _this$webrtcMediaConn, _this$webrtcMediaConn2;
|
|
185
|
+
var stats, transportReports;
|
|
186
|
+
return _regenerator.default.wrap(function (_context) {
|
|
187
|
+
while (1) switch (_context.prev = _context.next) {
|
|
188
|
+
case 0:
|
|
189
|
+
_context.next = 1;
|
|
190
|
+
return this.webrtcMediaConnection.getStats();
|
|
191
|
+
case 1:
|
|
192
|
+
stats = _context.sent;
|
|
193
|
+
// in theory we can end up with more than one transport report in the stats,
|
|
194
|
+
// but for the purpose of this metric it's fine to just use the first one
|
|
195
|
+
transportReports = (0, _from.default)(stats.values().filter(function (report) {
|
|
196
|
+
return report.type === 'transport';
|
|
197
|
+
}));
|
|
198
|
+
_metrics.default.sendBehavioralMetric(_constants2.default.MEDIA_STILL_NOT_CONNECTED, {
|
|
199
|
+
correlation_id: this.correlationId,
|
|
200
|
+
numTransports: transportReports.length,
|
|
201
|
+
dtlsState: (_transportReports$ = transportReports[0]) === null || _transportReports$ === void 0 ? void 0 : _transportReports$.dtlsState,
|
|
202
|
+
iceState: (_transportReports$2 = transportReports[0]) === null || _transportReports$2 === void 0 ? void 0 : _transportReports$2.iceState,
|
|
203
|
+
packetsSent: (_transportReports$3 = transportReports[0]) === null || _transportReports$3 === void 0 ? void 0 : _transportReports$3.packetsSent,
|
|
204
|
+
packetsReceived: (_transportReports$4 = transportReports[0]) === null || _transportReports$4 === void 0 ? void 0 : _transportReports$4.packetsReceived,
|
|
205
|
+
dataChannelState: (_this$webrtcMediaConn = this.webrtcMediaConnection.multistreamConnection) === null || _this$webrtcMediaConn === void 0 ? void 0 : (_this$webrtcMediaConn2 = _this$webrtcMediaConn.dataChannel) === null || _this$webrtcMediaConn2 === void 0 ? void 0 : _this$webrtcMediaConn2.readyState
|
|
206
|
+
});
|
|
207
|
+
case 2:
|
|
208
|
+
case "end":
|
|
209
|
+
return _context.stop();
|
|
210
|
+
}
|
|
211
|
+
}, _callee, this);
|
|
212
|
+
}));
|
|
213
|
+
function sendMetric() {
|
|
214
|
+
return _sendMetric.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
return sendMetric;
|
|
217
|
+
}()
|
|
166
218
|
/**
|
|
167
219
|
* Function called when the timeout is reached.
|
|
168
220
|
*
|
|
169
221
|
* @returns {void}
|
|
170
222
|
*/
|
|
223
|
+
)
|
|
171
224
|
}, {
|
|
172
225
|
key: "onTimeout",
|
|
173
226
|
value: function onTimeout() {
|
|
@@ -176,6 +229,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
176
229
|
this.defer.resolve();
|
|
177
230
|
return;
|
|
178
231
|
}
|
|
232
|
+
this.sendMetric();
|
|
179
233
|
if (!this.isIceGatheringCompleted()) {
|
|
180
234
|
if (!this.retried) {
|
|
181
235
|
_loggerProxy.default.logger.warn('Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once');
|
|
@@ -205,8 +259,10 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
|
|
|
205
259
|
key: "waitForMediaConnectionConnected",
|
|
206
260
|
value: function waitForMediaConnectionConnected() {
|
|
207
261
|
if (this.isConnected()) {
|
|
262
|
+
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Already connected');
|
|
208
263
|
return _promise.default.resolve();
|
|
209
264
|
}
|
|
265
|
+
_loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected');
|
|
210
266
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
|
|
211
267
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
|
|
212
268
|
this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isFailed","Failed","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","MediaConnectionEventNames","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","warn","reject","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, MediaConnectionEventNames} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n LoggerProxy.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> Resolving');\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n return Promise.resolve();\n }\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_common","require","_internalMediaCore","_loggerProxy","_interopRequireDefault","_constants","_constants2","_metrics","MediaConnectionAwaiter","exports","default","_ref","webrtcMediaConnection","correlationId","_classCallCheck2","_defineProperty2","defer","Defer","retried","iceConnected","onTimeoutCallback","onTimeout","bind","peerConnectionStateCallback","peerConnectionStateHandler","iceConnectionStateCallback","iceConnectionStateHandler","iceGatheringStateCallback","iceGatheringStateHandler","_createClass2","key","value","isConnected","getConnectionState","ConnectionState","Connected","isFailed","Failed","isIceGatheringCompleted","getIceGatheringState","clearCallbacks","off","MediaConnectionEventNames","ICE_GATHERING_STATE_CHANGED","PEER_CONNECTION_STATE_CHANGED","ICE_CONNECTION_STATE_CHANGED","connectionStateChange","LoggerProxy","logger","log","concat","warn","reject","clearTimeout","timer","resolve","peerConnectionState","getPeerConnectionState","iceConnectionState","getIceConnectionState","iceGatheringState","setTimeout","ICE_AND_DTLS_CONNECTION_TIMEOUT","_sendMetric","_asyncToGenerator2","_regenerator","mark","_callee","_transportReports$","_transportReports$2","_transportReports$3","_transportReports$4","_this$webrtcMediaConn","_this$webrtcMediaConn2","stats","transportReports","wrap","_context","prev","next","getStats","sent","_from","values","filter","report","type","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_STILL_NOT_CONNECTED","correlation_id","numTransports","length","dtlsState","iceState","packetsSent","packetsReceived","dataChannelState","multistreamConnection","dataChannel","readyState","stop","sendMetric","apply","arguments","waitForMediaConnectionConnected","_promise","on","promise"],"sources":["MediaConnectionAwaiter.ts"],"sourcesContent":["import {Defer} from '@webex/common';\nimport {ConnectionState, MediaConnectionEventNames} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport Metrics from '../metrics';\n\nexport interface MediaConnectionAwaiterProps {\n webrtcMediaConnection: any;\n correlationId: string;\n}\n\n/**\n * @class MediaConnectionAwaiter\n */\nexport default class MediaConnectionAwaiter {\n private webrtcMediaConnection: any;\n private timer: any;\n private defer: Defer;\n private retried: boolean;\n private iceConnected: boolean;\n private correlationId: string;\n private onTimeoutCallback: () => void;\n private peerConnectionStateCallback: () => void;\n private iceConnectionStateCallback: () => void;\n private iceGatheringStateCallback: () => void;\n\n /**\n * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps\n */\n constructor({webrtcMediaConnection, correlationId}: MediaConnectionAwaiterProps) {\n this.webrtcMediaConnection = webrtcMediaConnection;\n this.defer = new Defer();\n this.retried = false;\n this.iceConnected = false;\n this.correlationId = correlationId;\n this.onTimeoutCallback = this.onTimeout.bind(this);\n this.peerConnectionStateCallback = this.peerConnectionStateHandler.bind(this);\n this.iceConnectionStateCallback = this.iceConnectionStateHandler.bind(this);\n this.iceGatheringStateCallback = this.iceGatheringStateHandler.bind(this);\n }\n\n /**\n * Returns true if the connection is connected, false otherwise.\n *\n * @returns {boolean}\n */\n private isConnected(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;\n }\n\n /**\n * Returns true if the connection is in an unrecoverable \"failed\" state\n *\n * @returns {boolean}\n */\n private isFailed(): boolean {\n return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Failed;\n }\n\n /**\n * Returns true if the ICE Gathering is completed, false otherwise.\n *\n * @returns {boolean}\n */\n private isIceGatheringCompleted(): boolean {\n return this.webrtcMediaConnection.getIceGatheringState() === 'complete';\n }\n\n /**\n * Clears the callbacks.\n *\n * @returns {void}\n */\n private clearCallbacks(): void {\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n this.webrtcMediaConnection.off(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n }\n\n /**\n * On connection state change.\n *\n * @returns {void}\n */\n connectionStateChange(): void {\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#connectionStateChange --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (this.isFailed()) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#connectionStateChange --> ICE failed, rejecting'\n );\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n if (!this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.clearCallbacks();\n\n LoggerProxy.logger.warn('Media:MediaConnectionAwaiter#connectionStateChange --> Resolving');\n\n this.defer.resolve();\n }\n\n /**\n * Listener for peer connection state change.\n *\n * @returns {void}\n */\n peerConnectionStateHandler(): void {\n const peerConnectionState = this.webrtcMediaConnection.getPeerConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#peerConnectionStateHandler --> Peer connection state change -> ${peerConnectionState}`\n );\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE connection state change.\n *\n * @returns {void}\n */\n iceConnectionStateHandler(): void {\n const iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ${iceConnectionState}`\n );\n\n if (iceConnectionState === 'connected' && !this.iceConnected) {\n this.iceConnected = true;\n }\n\n this.connectionStateChange();\n }\n\n /**\n * Listener for ICE gathering state change.\n *\n * @returns {void}\n */\n iceGatheringStateHandler(): void {\n const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();\n\n LoggerProxy.logger.log(\n `Media:MediaConnectionAwaiter#iceGatheringStateHandler --> ICE gathering state change -> ${iceGatheringState}`\n );\n\n if (!this.isIceGatheringCompleted()) {\n return;\n }\n\n if (this.isConnected()) {\n return;\n }\n\n clearTimeout(this.timer);\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n }\n\n /**\n * sends a metric with some additional info that might help debugging\n * issues where browser doesn't update the RTCPeerConnection's iceConnectionState or connectionState\n *\n * @returns {void}\n */\n async sendMetric() {\n const stats = await this.webrtcMediaConnection.getStats();\n\n // in theory we can end up with more than one transport report in the stats,\n // but for the purpose of this metric it's fine to just use the first one\n const transportReports = Array.from(\n stats.values().filter((report) => report.type === 'transport')\n ) as Record<string, number | string>[];\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_STILL_NOT_CONNECTED, {\n correlation_id: this.correlationId,\n numTransports: transportReports.length,\n dtlsState: transportReports[0]?.dtlsState,\n iceState: transportReports[0]?.iceState,\n packetsSent: transportReports[0]?.packetsSent,\n packetsReceived: transportReports[0]?.packetsReceived,\n dataChannelState: this.webrtcMediaConnection.multistreamConnection?.dataChannel?.readyState,\n });\n }\n\n /**\n * Function called when the timeout is reached.\n *\n * @returns {void}\n */\n onTimeout(): void {\n if (this.isConnected()) {\n this.clearCallbacks();\n\n this.defer.resolve();\n\n return;\n }\n\n this.sendMetric();\n\n if (!this.isIceGatheringCompleted()) {\n if (!this.retried) {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'\n );\n\n // retry once if ICE gathering is not completed\n this.retried = true;\n clearTimeout(this.timer);\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return;\n }\n\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'\n );\n } else {\n LoggerProxy.logger.warn(\n 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'\n );\n }\n\n this.clearCallbacks();\n\n this.defer.reject({\n iceConnected: this.iceConnected,\n });\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise}\n */\n waitForMediaConnectionConnected(): Promise<void> {\n if (this.isConnected()) {\n LoggerProxy.logger.log(\n 'Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Already connected'\n );\n\n return Promise.resolve();\n }\n LoggerProxy.logger.log(\n 'Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected'\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED,\n this.peerConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED,\n this.iceConnectionStateCallback\n );\n\n this.webrtcMediaConnection.on(\n MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED,\n this.iceGatheringStateCallback\n );\n\n this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);\n\n return this.defer.promise;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/media/properties.js
CHANGED
|
@@ -228,13 +228,15 @@ var MediaProperties = exports.default = /*#__PURE__*/function () {
|
|
|
228
228
|
/**
|
|
229
229
|
* Waits for the webrtc media connection to be connected.
|
|
230
230
|
*
|
|
231
|
+
* @param {string} correlationId
|
|
231
232
|
* @returns {Promise<void>}
|
|
232
233
|
*/
|
|
233
234
|
}, {
|
|
234
235
|
key: "waitForMediaConnectionConnected",
|
|
235
|
-
value: function waitForMediaConnectionConnected() {
|
|
236
|
+
value: function waitForMediaConnectionConnected(correlationId) {
|
|
236
237
|
var mediaConnectionAwaiter = new _MediaConnectionAwaiter.default({
|
|
237
|
-
webrtcMediaConnection: this.webrtcMediaConnection
|
|
238
|
+
webrtcMediaConnection: this.webrtcMediaConnection,
|
|
239
|
+
correlationId: correlationId
|
|
238
240
|
});
|
|
239
241
|
return mediaConnectionAwaiter.waitForMediaConnectionConnected();
|
|
240
242
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tsSdp","require","_lodash","_metrics","_interopRequireDefault","_constants","_loggerProxy","_MediaConnectionAwaiter","_constants2","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MediaProperties","exports","_this","_classCallCheck2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","throttledSendMediaIssueMetric","throttle","eventPayload","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_ISSUE_DETECTED","_keys","mediaIssueCounters","key","_createClass2","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","flush","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","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","err","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","_this2","_this$webrtcMediaConn","_this$webrtcMediaConn2","rtcPeerconnection","ipVersion","_this$getTransportInf","_t","wrap","_context","prev","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","catch","multistreamConnection","pc","mediaConnection","abrupt","stop","getCurrentConnectionInfo","sendMediaIssueMetric","issueType","issueSubType","correlationId","count"],"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 {throttle} from 'lodash';\nimport Metrics from '../metrics';\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\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 mediaIssueCounters: {[key: string]: number} = {};\n throttledSendMediaIssueMetric: ReturnType<typeof throttle>;\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 this.throttledSendMediaIssueMetric = throttle((eventPayload) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_ISSUE_DETECTED, {\n ...eventPayload,\n });\n Object.keys(this.mediaIssueCounters).forEach((key) => {\n this.mediaIssueCounters[key] = 0;\n });\n }, 1000 * 60 * 5); // at most once every 5 minutes\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 /**\n * Clears the webrtcMediaConnection. This method should be called after\n * peer connection is closed and no longer needed.\n * @returns {void}\n */\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n this.throttledSendMediaIssueMetric.flush();\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 /**\n * Sends a metric about a media issue. Metrics are throttled so that we don't\n * send too many of them, but include a count so that we know how many issues\n * were detected.\n *\n * @param {string} issueType\n * @param {string} issueSubType\n * @param {string} correlationId\n * @returns {void}\n */\n public sendMediaIssueMetric(issueType: string, issueSubType: string, correlationId) {\n const key = `${issueType}_${issueSubType}`;\n\n const count = (this.mediaIssueCounters[key] || 0) + 1;\n\n this.mediaIssueCounters[key] = count;\n\n this.throttledSendMediaIssueMetric({\n correlationId,\n ...this.mediaIssueCounters,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_tsSdp","require","_lodash","_metrics","_interopRequireDefault","_constants","_loggerProxy","_MediaConnectionAwaiter","_constants2","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","MediaProperties","exports","_this","_classCallCheck2","MEETINGS","webrtcMediaConnection","mediaDirection","receiveAudio","receiveVideo","receiveShare","sendAudio","sendVideo","sendShare","videoStream","audioStream","shareVideoStream","shareAudioStream","remoteShareStream","undefined","remoteAudioStream","remoteVideoStream","remoteQualityLevel","QUALITY_LEVELS","HIGH","mediaSettings","videoDeviceId","throttledSendMediaIssueMetric","throttle","eventPayload","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEDIA_ISSUE_DETECTED","_keys","mediaIssueCounters","key","_createClass2","getVideoDeviceId","setMediaDirection","setMediaSettings","type","values","setMediaPeerConnection","mediaPeerConnection","setLocalVideoStream","setLocalAudioStream","setLocalShareVideoStream","setLocalShareAudioStream","setRemoteQualityLevel","setRemoteShareStream","setRemoteAudioStream","setRemoteVideoStream","setVideoDeviceId","deviceId","unsetPeerConnection","flush","unsetRemoteMedia","unsetRemoteShareStream","unsetRemoteStreams","hasLocalShareStream","waitForMediaConnectionConnected","correlationId","mediaConnectionAwaiter","MediaConnectionAwaiter","getTransportInfo","allStatsReports","transports","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","err","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","_this2","_this$webrtcMediaConn","_this$webrtcMediaConn2","rtcPeerconnection","ipVersion","_this$getTransportInf","_t","wrap","_context","prev","_promise","resolve","reject","timeout","setTimeout","Error","getStats","then","statsResult","clearTimeout","catch","multistreamConnection","pc","mediaConnection","abrupt","stop","getCurrentConnectionInfo","sendMediaIssueMetric","issueType","issueSubType","count"],"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 {throttle} from 'lodash';\nimport Metrics from '../metrics';\nimport {MEETINGS, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MediaConnectionAwaiter from './MediaConnectionAwaiter';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\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 mediaIssueCounters: {[key: string]: number} = {};\n throttledSendMediaIssueMetric: ReturnType<typeof throttle>;\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 this.throttledSendMediaIssueMetric = throttle((eventPayload) => {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEDIA_ISSUE_DETECTED, {\n ...eventPayload,\n });\n Object.keys(this.mediaIssueCounters).forEach((key) => {\n this.mediaIssueCounters[key] = 0;\n });\n }, 1000 * 60 * 5); // at most once every 5 minutes\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 /**\n * Clears the webrtcMediaConnection. This method should be called after\n * peer connection is closed and no longer needed.\n * @returns {void}\n */\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n this.throttledSendMediaIssueMetric.flush();\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 * @param {string} correlationId\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected(correlationId: string): Promise<void> {\n const mediaConnectionAwaiter = new MediaConnectionAwaiter({\n webrtcMediaConnection: this.webrtcMediaConnection,\n correlationId,\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 /**\n * Sends a metric about a media issue. Metrics are throttled so that we don't\n * send too many of them, but include a count so that we know how many issues\n * were detected.\n *\n * @param {string} issueType\n * @param {string} issueSubType\n * @param {string} correlationId\n * @returns {void}\n */\n public sendMediaIssueMetric(issueType: string, issueSubType: string, correlationId) {\n const key = `${issueType}_${issueSubType}`;\n\n const count = (this.mediaIssueCounters[key] || 0) + 1;\n\n this.mediaIssueCounters[key] = count;\n\n this.throttledSendMediaIssueMetric({\n correlationId,\n ...this.mediaIssueCounters,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/meeting/index.js
CHANGED
|
@@ -387,7 +387,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
387
387
|
* @memberof Meeting
|
|
388
388
|
*/
|
|
389
389
|
function Meeting(attrs, _options, callback) {
|
|
390
|
-
var _attrs$callStateForMe, _attrs$callStateForMe2, _this$
|
|
390
|
+
var _attrs$callStateForMe, _attrs$callStateForMe2, _this$locusInfo2, _this$locusInfo2$link, _this$locusInfo2$link2, _this$locusInfo2$link3, _this$locusInfo3, _this$locusInfo3$full, _this$locusInfo4, _this$locusInfo5;
|
|
391
391
|
var _this;
|
|
392
392
|
(0, _classCallCheck2.default)(this, Meeting);
|
|
393
393
|
_this = _callSuper(this, Meeting, [{}, _options]);
|
|
@@ -452,6 +452,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
452
452
|
(0, _defineProperty3.default)(_this, "keepAliveTimerId", void 0);
|
|
453
453
|
(0, _defineProperty3.default)(_this, "lastVideoLayoutInfo", void 0);
|
|
454
454
|
(0, _defineProperty3.default)(_this, "locusInfo", void 0);
|
|
455
|
+
// this group of properties is populated via updateMeetingObject() that's registered as a callback with LocusInfo
|
|
456
|
+
(0, _defineProperty3.default)(_this, "isUserUnadmitted", void 0);
|
|
457
|
+
(0, _defineProperty3.default)(_this, "joinedWith", void 0);
|
|
458
|
+
(0, _defineProperty3.default)(_this, "selfId", void 0);
|
|
459
|
+
(0, _defineProperty3.default)(_this, "roles", void 0);
|
|
460
|
+
// ... there is more ... see SelfUtils.parse()
|
|
461
|
+
// end of the group
|
|
455
462
|
(0, _defineProperty3.default)(_this, "locusMediaRequest", void 0);
|
|
456
463
|
(0, _defineProperty3.default)(_this, "mediaProperties", void 0);
|
|
457
464
|
(0, _defineProperty3.default)(_this, "mediaRequestManagers", void 0);
|
|
@@ -480,7 +487,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
480
487
|
(0, _defineProperty3.default)(_this, "endCallInitJoinReq", void 0);
|
|
481
488
|
(0, _defineProperty3.default)(_this, "endJoinReqResp", void 0);
|
|
482
489
|
(0, _defineProperty3.default)(_this, "endLocalSDPGenRemoteSDPRecvDelay", void 0);
|
|
483
|
-
(0, _defineProperty3.default)(_this, "joinedWith", void 0);
|
|
484
490
|
(0, _defineProperty3.default)(_this, "locusId", void 0);
|
|
485
491
|
(0, _defineProperty3.default)(_this, "startCallInitJoinReq", void 0);
|
|
486
492
|
(0, _defineProperty3.default)(_this, "startJoinReqResp", void 0);
|
|
@@ -495,12 +501,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
495
501
|
(0, _defineProperty3.default)(_this, "permissionTokenReceivedLocalTime", void 0);
|
|
496
502
|
(0, _defineProperty3.default)(_this, "resourceId", void 0);
|
|
497
503
|
(0, _defineProperty3.default)(_this, "resourceUrl", void 0);
|
|
498
|
-
(0, _defineProperty3.default)(_this, "selfId", void 0);
|
|
499
504
|
(0, _defineProperty3.default)(_this, "state", void 0);
|
|
500
505
|
(0, _defineProperty3.default)(_this, "localAudioStreamMuteStateHandler", void 0);
|
|
501
506
|
(0, _defineProperty3.default)(_this, "localVideoStreamMuteStateHandler", void 0);
|
|
502
507
|
(0, _defineProperty3.default)(_this, "localOutputTrackChangeHandler", void 0);
|
|
503
|
-
(0, _defineProperty3.default)(_this, "roles", void 0);
|
|
504
508
|
(0, _defineProperty3.default)(_this, "environment", void 0);
|
|
505
509
|
(0, _defineProperty3.default)(_this, "namespace", _constants.MEETINGS);
|
|
506
510
|
(0, _defineProperty3.default)(_this, "allowMediaInLobby", void 0);
|
|
@@ -587,13 +591,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
587
591
|
if (
|
|
588
592
|
// @ts-ignore - config coming from registerPlugin
|
|
589
593
|
(_this.config.receiveReactions || options.receiveReactions) && _this.isReactionsSupported()) {
|
|
594
|
+
var _this$locusInfo, _this$locusInfo$info;
|
|
590
595
|
var member = _this.members.membersCollection.get(e.data.sender.participantId);
|
|
591
|
-
if (!member) {
|
|
596
|
+
if (!member && !((_this$locusInfo = _this.locusInfo) !== null && _this$locusInfo !== void 0 && (_this$locusInfo$info = _this$locusInfo.info) !== null && _this$locusInfo$info !== void 0 && _this$locusInfo$info.isWebinar)) {
|
|
592
597
|
// @ts-ignore -- fix type
|
|
593
598
|
_loggerProxy.default.logger.warn("Meeting:index#processRelayEvent --> Skipping handling of ".concat(_constants3.REACTION_RELAY_TYPES.REACTION, " for ").concat(_this.id, ". participantId ").concat(e.data.sender.participantId, " does not exist in membersCollection."));
|
|
594
599
|
break;
|
|
595
600
|
}
|
|
596
|
-
var name = member.name;
|
|
601
|
+
var name = member && member.name || e.data.sender.displayName;
|
|
597
602
|
var processedReaction = {
|
|
598
603
|
reaction: e.data.reaction,
|
|
599
604
|
sender: {
|
|
@@ -2185,9 +2190,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
2185
2190
|
* @memberof Meeting
|
|
2186
2191
|
*/
|
|
2187
2192
|
_this.recordingController = new _recordingController.default(_this.meetingRequest, {
|
|
2188
|
-
serviceUrl: (_this$
|
|
2189
|
-
sessionId: (_this$
|
|
2190
|
-
locusUrl: (_this$
|
|
2193
|
+
serviceUrl: (_this$locusInfo2 = _this.locusInfo) === null || _this$locusInfo2 === void 0 ? void 0 : (_this$locusInfo2$link = _this$locusInfo2.links) === null || _this$locusInfo2$link === void 0 ? void 0 : (_this$locusInfo2$link2 = _this$locusInfo2$link.services) === null || _this$locusInfo2$link2 === void 0 ? void 0 : (_this$locusInfo2$link3 = _this$locusInfo2$link2.record) === null || _this$locusInfo2$link3 === void 0 ? void 0 : _this$locusInfo2$link3.url,
|
|
2194
|
+
sessionId: (_this$locusInfo3 = _this.locusInfo) === null || _this$locusInfo3 === void 0 ? void 0 : (_this$locusInfo3$full = _this$locusInfo3.fullState) === null || _this$locusInfo3$full === void 0 ? void 0 : _this$locusInfo3$full.sessionId,
|
|
2195
|
+
locusUrl: (_this$locusInfo4 = _this.locusInfo) === null || _this$locusInfo4 === void 0 ? void 0 : _this$locusInfo4.url,
|
|
2191
2196
|
displayHints: []
|
|
2192
2197
|
});
|
|
2193
2198
|
|
|
@@ -2199,7 +2204,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
2199
2204
|
* @memberof Meeting
|
|
2200
2205
|
*/
|
|
2201
2206
|
_this.controlsOptionsManager = new _controlsOptionsManager.default(_this.meetingRequest, {
|
|
2202
|
-
locusUrl: (_this$
|
|
2207
|
+
locusUrl: (_this$locusInfo5 = _this.locusInfo) === null || _this$locusInfo5 === void 0 ? void 0 : _this$locusInfo5.url,
|
|
2203
2208
|
displayHints: []
|
|
2204
2209
|
});
|
|
2205
2210
|
_this.setUpLocusInfoListeners();
|
|
@@ -5055,7 +5060,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
5055
5060
|
this.locusInfo.initialSetup({
|
|
5056
5061
|
trigger: 'join-response',
|
|
5057
5062
|
locus: mtgLocus,
|
|
5058
|
-
dataSets: data.dataSets
|
|
5063
|
+
dataSets: data.dataSets,
|
|
5064
|
+
metadata: data.metadata
|
|
5059
5065
|
});
|
|
5060
5066
|
}
|
|
5061
5067
|
|
|
@@ -6095,8 +6101,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6095
6101
|
}, {
|
|
6096
6102
|
key: "isReactionsSupported",
|
|
6097
6103
|
value: function isReactionsSupported() {
|
|
6098
|
-
var _this$
|
|
6099
|
-
if ((_this$
|
|
6104
|
+
var _this$locusInfo6, _this$locusInfo6$cont;
|
|
6105
|
+
if ((_this$locusInfo6 = this.locusInfo) !== null && _this$locusInfo6 !== void 0 && (_this$locusInfo6$cont = _this$locusInfo6.controls) !== null && _this$locusInfo6$cont !== void 0 && _this$locusInfo6$cont.reactions.enabled) {
|
|
6100
6106
|
return true;
|
|
6101
6107
|
}
|
|
6102
6108
|
_loggerProxy.default.logger.error('Meeting:index#isReactionsSupported --> Reactions is not supported');
|
|
@@ -6568,12 +6574,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
6568
6574
|
value: (function () {
|
|
6569
6575
|
var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18() {
|
|
6570
6576
|
var _this36 = this;
|
|
6571
|
-
var _this$
|
|
6577
|
+
var _this$locusInfo7, url, _this$locusInfo7$info, _this$locusInfo7$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
|
|
6572
6578
|
return _regenerator.default.wrap(function (_context18) {
|
|
6573
6579
|
while (1) switch (_context18.prev = _context18.next) {
|
|
6574
6580
|
case 0:
|
|
6575
6581
|
// @ts-ignore - Fix type
|
|
6576
|
-
_this$
|
|
6582
|
+
_this$locusInfo7 = this.locusInfo, url = _this$locusInfo7.url, _this$locusInfo7$info = _this$locusInfo7.info, _this$locusInfo7$info2 = _this$locusInfo7$info === void 0 ? {} : _this$locusInfo7$info, datachannelUrl = _this$locusInfo7$info2.datachannelUrl, practiceSessionDatachannelUrl = _this$locusInfo7$info2.practiceSessionDatachannelUrl;
|
|
6577
6583
|
isJoined = this.isJoined(); // webinar panelist should use new data channel in practice session
|
|
6578
6584
|
dataChannelUrl = this.webinar.isJoinPracticeSessionDataChannel() && practiceSessionDatachannelUrl ? practiceSessionDatachannelUrl : datachannelUrl; // @ts-ignore - Fix type
|
|
6579
6585
|
if (!this.webex.internal.llm.isConnected()) {
|
|
@@ -7146,7 +7152,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7146
7152
|
case 0:
|
|
7147
7153
|
_context22.prev = 0;
|
|
7148
7154
|
_context22.next = 1;
|
|
7149
|
-
return this.mediaProperties.waitForMediaConnectionConnected();
|
|
7155
|
+
return this.mediaProperties.waitForMediaConnectionConnected(this.correlationId);
|
|
7150
7156
|
case 1:
|
|
7151
7157
|
_context22.next = 5;
|
|
7152
7158
|
break;
|
|
@@ -7857,6 +7863,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7857
7863
|
bundlePolicy,
|
|
7858
7864
|
_options$additionalMe,
|
|
7859
7865
|
additionalMediaOptions,
|
|
7866
|
+
_options$allowPublish,
|
|
7867
|
+
allowPublishMediaInLobby,
|
|
7860
7868
|
rawSendVideo,
|
|
7861
7869
|
rawReceiveVideo,
|
|
7862
7870
|
rawSendAudio,
|
|
@@ -7924,7 +7932,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7924
7932
|
}
|
|
7925
7933
|
throw new _webexErrors.UserNotJoinedError();
|
|
7926
7934
|
case 2:
|
|
7927
|
-
localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, _options$bundlePolicy = options.bundlePolicy, bundlePolicy = _options$bundlePolicy === void 0 ? 'max-bundle' : _options$bundlePolicy, _options$additionalMe = options.additionalMediaOptions, additionalMediaOptions = _options$additionalMe === void 0 ? {} : _options$additionalMe;
|
|
7935
|
+
localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, _options$bundlePolicy = options.bundlePolicy, bundlePolicy = _options$bundlePolicy === void 0 ? 'max-bundle' : _options$bundlePolicy, _options$additionalMe = options.additionalMediaOptions, additionalMediaOptions = _options$additionalMe === void 0 ? {} : _options$additionalMe, _options$allowPublish = options.allowPublishMediaInLobby, allowPublishMediaInLobby = _options$allowPublish === void 0 ? false : _options$allowPublish;
|
|
7928
7936
|
rawSendVideo = additionalMediaOptions.sendVideo, rawReceiveVideo = additionalMediaOptions.receiveVideo, rawSendAudio = additionalMediaOptions.sendAudio, rawReceiveAudio = additionalMediaOptions.receiveAudio;
|
|
7929
7937
|
sendVideo = videoEnabled && (rawSendVideo !== null && rawSendVideo !== void 0 ? rawSendVideo : true);
|
|
7930
7938
|
receiveVideo = videoEnabled && (rawReceiveVideo !== null && rawReceiveVideo !== void 0 ? rawReceiveVideo : true);
|
|
@@ -7935,7 +7943,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7935
7943
|
// @ts-ignore
|
|
7936
7944
|
ipver = _util2.default.getIpVersion(this.webex); // used just for metrics
|
|
7937
7945
|
// If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
|
|
7938
|
-
// @ts-ignore - isUserUnadmitted coming from SelfUtil
|
|
7939
7946
|
if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
|
|
7940
7947
|
_context33.next = 3;
|
|
7941
7948
|
break;
|
|
@@ -7982,6 +7989,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
7982
7989
|
this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
|
|
7983
7990
|
this.brbState = (0, _brbState.createBrbState)(this, false);
|
|
7984
7991
|
_context33.prev = 4;
|
|
7992
|
+
if (!(allowPublishMediaInLobby || !this.isUserUnadmitted)) {
|
|
7993
|
+
_context33.next = 5;
|
|
7994
|
+
break;
|
|
7995
|
+
}
|
|
7985
7996
|
_context33.next = 5;
|
|
7986
7997
|
return this.setUpLocalStreamReferences(localStreams);
|
|
7987
7998
|
case 5:
|
|
@@ -9124,8 +9135,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9124
9135
|
* @memberof Meeting
|
|
9125
9136
|
*/
|
|
9126
9137
|
function sendReaction(reactionType, skinToneType) {
|
|
9127
|
-
var _this$
|
|
9128
|
-
var reactionChannelUrl = (_this$
|
|
9138
|
+
var _this$locusInfo8, _this$locusInfo8$cont, _this$locusInfo8$cont2;
|
|
9139
|
+
var reactionChannelUrl = (_this$locusInfo8 = this.locusInfo) === null || _this$locusInfo8 === void 0 ? void 0 : (_this$locusInfo8$cont = _this$locusInfo8.controls) === null || _this$locusInfo8$cont === void 0 ? void 0 : (_this$locusInfo8$cont2 = _this$locusInfo8$cont.reactions) === null || _this$locusInfo8$cont2 === void 0 ? void 0 : _this$locusInfo8$cont2.reactionChannelUrl;
|
|
9129
9140
|
var participantId = this.members.selfId;
|
|
9130
9141
|
var reactionData = _reactions.Reactions[reactionType];
|
|
9131
9142
|
if (!reactionData) {
|
|
@@ -9186,8 +9197,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
|
|
|
9186
9197
|
}, {
|
|
9187
9198
|
key: "toggleReactions",
|
|
9188
9199
|
value: function toggleReactions(enable) {
|
|
9189
|
-
var _this$
|
|
9190
|
-
var isEnabled = (_this$
|
|
9200
|
+
var _this$locusInfo9, _this$locusInfo9$cont, _this$locusInfo9$cont2;
|
|
9201
|
+
var isEnabled = (_this$locusInfo9 = this.locusInfo) === null || _this$locusInfo9 === void 0 ? void 0 : (_this$locusInfo9$cont = _this$locusInfo9.controls) === null || _this$locusInfo9$cont === void 0 ? void 0 : (_this$locusInfo9$cont2 = _this$locusInfo9$cont.reactions) === null || _this$locusInfo9$cont2 === void 0 ? void 0 : _this$locusInfo9$cont2.enabled;
|
|
9191
9202
|
if (isEnabled && enable || !isEnabled && !enable) {
|
|
9192
9203
|
return _promise.default.resolve("Reactions are already ".concat(isEnabled ? 'enabled' : 'disabled', "."));
|
|
9193
9204
|
}
|