@webex/plugin-meetings 3.12.0-next.92 → 3.12.0-next.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/aiEnableRequest/index.js +1 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/webex-errors.js +47 -5
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/interpretation/index.js +1 -1
  7. package/dist/interpretation/siLanguage.js +1 -1
  8. package/dist/media/MediaConnectionAwaiter.js +15 -2
  9. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  10. package/dist/media/index.js +5 -1
  11. package/dist/media/index.js.map +1 -1
  12. package/dist/meeting/index.js +458 -365
  13. package/dist/meeting/index.js.map +1 -1
  14. package/dist/reachability/clusterReachability.js.map +1 -1
  15. package/dist/reachability/index.js +111 -70
  16. package/dist/reachability/index.js.map +1 -1
  17. package/dist/types/common/errors/webex-errors.d.ts +31 -2
  18. package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
  19. package/dist/types/meeting/index.d.ts +18 -3
  20. package/dist/types/reachability/clusterReachability.d.ts +3 -3
  21. package/dist/types/reachability/index.d.ts +9 -2
  22. package/dist/webinar/index.js +1 -1
  23. package/package.json +3 -3
  24. package/src/common/errors/webex-errors.ts +47 -3
  25. package/src/media/MediaConnectionAwaiter.ts +21 -4
  26. package/src/media/index.ts +7 -1
  27. package/src/meeting/index.ts +100 -27
  28. package/src/reachability/clusterReachability.ts +3 -2
  29. package/src/reachability/index.ts +28 -1
  30. package/test/unit/spec/common/errors/webex-errors.ts +62 -0
  31. package/test/unit/spec/media/MediaConnectionAwaiter.ts +55 -0
  32. package/test/unit/spec/media/index.ts +61 -0
  33. package/test/unit/spec/meeting/index.js +290 -8
  34. package/test/unit/spec/reachability/index.ts +69 -0
@@ -191,7 +191,7 @@ var AIEnableRequest = _webexCore.WebexPlugin.extend({
191
191
  method: _constants.HTTP_VERBS.PUT
192
192
  });
193
193
  },
194
- version: "3.12.0-next.92"
194
+ version: "3.12.0-next.93"
195
195
  });
196
196
  var _default = exports.default = AIEnableRequest;
197
197
  //# sourceMappingURL=index.js.map
@@ -214,7 +214,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
214
214
  sessionId: this.sessionId
215
215
  });
216
216
  },
217
- version: "3.12.0-next.92"
217
+ version: "3.12.0-next.93"
218
218
  });
219
219
  var _default = exports.default = Breakout;
220
220
  //# sourceMappingURL=breakout.js.map
@@ -1133,7 +1133,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1133
1133
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1134
1134
  }
1135
1135
  },
1136
- version: "3.12.0-next.92"
1136
+ version: "3.12.0-next.93"
1137
1137
  });
1138
1138
  var _default = exports.default = Breakouts;
1139
1139
  //# sourceMappingURL=index.js.map
@@ -6,8 +6,9 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
6
6
  _Object$defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
- exports.UserNotJoinedError = exports.UserInLobbyError = exports.SpaceIDDeprecatedError = exports.SdpResponseTimeoutError = exports.NoMediaEstablishedYetError = exports.MeetingNotActiveError = exports.IceGatheringFailed = exports.AddMediaFailed = void 0;
9
+ exports.UserNotJoinedError = exports.UserInLobbyError = exports.SpaceIDDeprecatedError = exports.SdpResponseTimeoutError = exports.NoMediaEstablishedYetError = exports.MeetingNotActiveError = exports.MediaConnectionTimedOutError = exports.IceGatheringFailed = exports.AddMediaFailed = void 0;
10
10
  exports.createMeetingsError = createMeetingsError;
11
+ var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/wrapNativeSuper"));
11
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
13
14
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
@@ -158,22 +159,63 @@ WebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;
158
159
  var AddMediaFailed = exports.AddMediaFailed = /*#__PURE__*/function (_WebexMeetingsError7) {
159
160
  /**
160
161
  * Creates a new AddMediaFailed error
161
- * @param {Error} [cause] - The underlying error that caused the media addition to fail
162
+ * @param {Object} options
163
+ * @param {Error} [options.cause] - The underlying error that caused the media addition to fail
164
+ * @param {string} [options.connectionType] - The ICE connection type at the time of failure (e.g. 'UDP', 'TURN-TLS')
165
+ * @param {number} [options.selectedCandidatePairChanges] - Number of times the selected candidate pair changed
166
+ * @param {number} [options.numTransports] - Number of ICE transports
167
+ * @param {boolean} [options.iceConnected] - Whether ICE connection was established before the failure
162
168
  */
163
- function AddMediaFailed(cause) {
169
+ function AddMediaFailed() {
164
170
  var _this;
171
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
165
172
  (0, _classCallCheck2.default)(this, AddMediaFailed);
166
173
  _this = _callSuper(this, AddMediaFailed, [AddMediaFailed.CODE, 'Failed to add media']);
167
174
  (0, _defineProperty2.default)(_this, "cause", void 0);
168
- _this.cause = cause;
175
+ (0, _defineProperty2.default)(_this, "connectionType", void 0);
176
+ (0, _defineProperty2.default)(_this, "selectedCandidatePairChanges", void 0);
177
+ (0, _defineProperty2.default)(_this, "numTransports", void 0);
178
+ (0, _defineProperty2.default)(_this, "iceConnected", void 0);
179
+ _this.cause = options.cause;
180
+ _this.connectionType = options.connectionType;
181
+ _this.selectedCandidatePairChanges = options.selectedCandidatePairChanges;
182
+ _this.numTransports = options.numTransports;
183
+ _this.iceConnected = options.iceConnected;
169
184
  return _this;
170
185
  }
186
+
187
+ /**
188
+ * Returns true if the failure was due to a DTLS handshake failure
189
+ * (ICE connected successfully but the overall media connection failed).
190
+ */
171
191
  (0, _inherits2.default)(AddMediaFailed, _WebexMeetingsError7);
172
- return (0, _createClass2.default)(AddMediaFailed);
192
+ return (0, _createClass2.default)(AddMediaFailed, [{
193
+ key: "isDtlsHandshakeFailure",
194
+ get: function get() {
195
+ return this.iceConnected === true;
196
+ }
197
+ }]);
173
198
  }(_webexMeetingsError.default);
174
199
  (0, _defineProperty2.default)(AddMediaFailed, "CODE", 30203);
175
200
  WebExMeetingsErrors[AddMediaFailed.CODE] = AddMediaFailed;
176
201
 
202
+ /**
203
+ * @class MediaConnectionTimedOutError
204
+ * @classdesc Internal error thrown when the media connection times out waiting to connect.
205
+ */
206
+ var MediaConnectionTimedOutError = exports.MediaConnectionTimedOutError = /*#__PURE__*/function (_Error) {
207
+ function MediaConnectionTimedOutError(message, iceConnected) {
208
+ var _this2;
209
+ (0, _classCallCheck2.default)(this, MediaConnectionTimedOutError);
210
+ _this2 = _callSuper(this, MediaConnectionTimedOutError, [message]);
211
+ (0, _defineProperty2.default)(_this2, "iceConnected", void 0);
212
+ _this2.name = 'MediaConnectionTimedOutError';
213
+ _this2.iceConnected = iceConnected;
214
+ return _this2;
215
+ }
216
+ (0, _inherits2.default)(MediaConnectionTimedOutError, _Error);
217
+ return (0, _createClass2.default)(MediaConnectionTimedOutError);
218
+ }(/*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
177
219
  /**
178
220
  * @class SdpResponseTimeoutError
179
221
  * @classdesc Raised whenever we timeout waiting for remote SDP answer
@@ -1 +1 @@
1
- {"version":3,"names":["_webexMeetingsError","_interopRequireDefault","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","WebExMeetingsErrors","createMeetingsError","code","message","WebexMeetingsError","MeetingNotActiveError","exports","_WebexMeetingsError","_classCallCheck2","CODE","_inherits2","_createClass2","_defineProperty2","UserNotJoinedError","_WebexMeetingsError2","NoMediaEstablishedYetError","_WebexMeetingsError3","UserInLobbyError","_WebexMeetingsError4","SpaceIDDeprecatedError","_WebexMeetingsError5","IceGatheringFailed","_WebexMeetingsError6","AddMediaFailed","_WebexMeetingsError7","cause","_this","SdpResponseTimeoutError","_WebexMeetingsError8"],"sources":["webex-errors.ts"],"sourcesContent":["// The document would auto generate the doc for errors\n\n// 1) Error codes for Oauth, login, mercury should be separated out (Code range)\n// 2) Errors from the actual locus server or other server in case, we can use the same error code as locus and redirect it\n// 3) Any errors we generate from the SDK can be split into various categories\n// Parameter validation, user action, connection, media specific(They can have different range)\n\n// TODO: all the errors from the server need to be captured\n\n// add a way to log and send metrics if needed\nimport WebexMeetingsError from './webex-meetings-error';\n\nconst WebExMeetingsErrors = {};\n\n/**\n * Create a {@link WebexMeetingsError} for a given code and message.\n * @private\n * @param {number} [code] - Error code\n * @param {string} [message] - Error message\n * @returns {WebexMeetingsError}\n */\nexport function createMeetingsError(code?: number, message?: string) {\n code = typeof code === 'number' ? code : 0;\n message = typeof message === 'string' && message ? message : 'Unknown error';\n\n return WebExMeetingsErrors[code]\n ? new WebExMeetingsErrors[code]()\n : new WebexMeetingsError(code, message);\n}\n\n/**\n * @class MeetingNotActiveError\n * @classdesc Raised whenever Meeting has already ended and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30101\n * @property {string} message - 'Meeting has already Ended or not Active'\n */\nclass MeetingNotActiveError extends WebexMeetingsError {\n static CODE = 30101;\n\n constructor() {\n super(MeetingNotActiveError.CODE, 'Meeting has already Ended or not Active');\n }\n}\n\nexport {MeetingNotActiveError};\nWebExMeetingsErrors[MeetingNotActiveError.CODE] = MeetingNotActiveError;\n\n/**\n * @class UserNotJoinedError\n * @classdesc Raised whenever the user has already left the meeting and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30102\n * @property {string} message - 'User has already left the meeting'\n */\nclass UserNotJoinedError extends WebexMeetingsError {\n static CODE = 30102;\n\n constructor() {\n super(\n UserNotJoinedError.CODE,\n 'User currently not in meeting. Please join a meeting before adding media.'\n );\n }\n}\n\nexport {UserNotJoinedError};\nWebExMeetingsErrors[UserNotJoinedError.CODE] = UserNotJoinedError;\n\n/**\n * @class NoMediaEstablishedYetError\n * @classdesc Raised whenever the user has not established media yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30103\n * @property {string} message - error message\n */\nclass NoMediaEstablishedYetError extends WebexMeetingsError {\n static CODE = 30103;\n\n // eslint-disable-next-line require-jsdoc\n constructor() {\n super(\n NoMediaEstablishedYetError.CODE,\n 'Webrtc media connection is missing, call addMedia() first'\n );\n }\n}\n\nexport {NoMediaEstablishedYetError};\nWebExMeetingsErrors[NoMediaEstablishedYetError.CODE] = NoMediaEstablishedYetError;\n\n/**\n * @class UserInLobbyError\n * @classdesc Raised whenever the user is in lobby and not joined yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30104\n * @property {string} message - 'user is still in the lobby or not joined'\n */\nclass UserInLobbyError extends WebexMeetingsError {\n static CODE = 30104;\n\n constructor() {\n super(UserInLobbyError.CODE, 'user is still in the lobby or not joined');\n }\n}\n\nexport {UserInLobbyError};\nWebExMeetingsErrors[UserInLobbyError.CODE] = UserInLobbyError;\n\n/**\n * @class SpaceIDDeprecatedError\n * @classdesc Raised whenever the user passes Space ID as destination for create meeting.\n * @extends WebexMeetingsError\n * @property {number} code - 30105\n * @property {string} message - Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n */\nclass SpaceIDDeprecatedError extends WebexMeetingsError {\n static CODE = 30105;\n\n constructor() {\n super(\n SpaceIDDeprecatedError.CODE,\n 'Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n );\n }\n}\n\nexport {SpaceIDDeprecatedError};\nWebExMeetingsErrors[SpaceIDDeprecatedError.CODE] = SpaceIDDeprecatedError;\n\n/**\n * @class IceGatheringFailed\n * @classdesc Raised whenever ice gathering fails.\n * @extends WebexMeetingsError\n * @property {number} code - 30202\n * @property {string} message - 'user failed ice gathering check network/firewall'\n */\nclass IceGatheringFailed extends WebexMeetingsError {\n static CODE = 30202;\n\n constructor() {\n super(IceGatheringFailed.CODE, 'iceConnection: gethering ice candidate failed');\n }\n}\n\nexport {IceGatheringFailed};\nWebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;\n\n/**\n * @class AddMediaFailed\n * @classdesc Raised whenever we fail to successfully add media to a meeting\n * @extends WebexMeetingsError\n * @property {number} code - 30203\n * @property {string} message - 'Failed to add media'\n * @property {Error} [cause] - The underlying error that caused the failure\n */\nclass AddMediaFailed extends WebexMeetingsError {\n static CODE = 30203;\n cause?: Error;\n\n /**\n * Creates a new AddMediaFailed error\n * @param {Error} [cause] - The underlying error that caused the media addition to fail\n */\n constructor(cause?: Error) {\n super(AddMediaFailed.CODE, 'Failed to add media');\n this.cause = cause;\n }\n}\nexport {AddMediaFailed};\nWebExMeetingsErrors[AddMediaFailed.CODE] = AddMediaFailed;\n\n/**\n * @class SdpResponseTimeoutError\n * @classdesc Raised whenever we timeout waiting for remote SDP answer\n * @extends WebexMeetingsError\n * @property {number} code - 30204\n * @property {string} message - 'Timed out waiting for REMOTE SDP ANSWER'\n */\nclass SdpResponseTimeoutError extends WebexMeetingsError {\n static CODE = 30204;\n\n // eslint-disable-next-line require-jsdoc\n constructor() {\n super(SdpResponseTimeoutError.CODE, 'Timed out waiting for REMOTE SDP ANSWER');\n }\n}\n\nexport {SdpResponseTimeoutError};\nWebExMeetingsErrors[SdpResponseTimeoutError.CODE] = SdpResponseTimeoutError;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_webexMeetingsError","_interopRequireDefault","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","WebExMeetingsErrors","createMeetingsError","code","message","WebexMeetingsError","MeetingNotActiveError","exports","_WebexMeetingsError","_classCallCheck2","CODE","_inherits2","_createClass2","_defineProperty2","UserNotJoinedError","_WebexMeetingsError2","NoMediaEstablishedYetError","_WebexMeetingsError3","UserInLobbyError","_WebexMeetingsError4","SpaceIDDeprecatedError","_WebexMeetingsError5","IceGatheringFailed","_WebexMeetingsError6","AddMediaFailed","_WebexMeetingsError7","_this","options","arguments","length","undefined","cause","connectionType","selectedCandidatePairChanges","numTransports","iceConnected","key","get","MediaConnectionTimedOutError","_Error","_this2","name","_wrapNativeSuper2","Error","SdpResponseTimeoutError","_WebexMeetingsError8"],"sources":["webex-errors.ts"],"sourcesContent":["// The document would auto generate the doc for errors\n\n// 1) Error codes for Oauth, login, mercury should be separated out (Code range)\n// 2) Errors from the actual locus server or other server in case, we can use the same error code as locus and redirect it\n// 3) Any errors we generate from the SDK can be split into various categories\n// Parameter validation, user action, connection, media specific(They can have different range)\n\n// TODO: all the errors from the server need to be captured\n\n// add a way to log and send metrics if needed\nimport WebexMeetingsError from './webex-meetings-error';\n\nconst WebExMeetingsErrors = {};\n\n/**\n * Create a {@link WebexMeetingsError} for a given code and message.\n * @private\n * @param {number} [code] - Error code\n * @param {string} [message] - Error message\n * @returns {WebexMeetingsError}\n */\nexport function createMeetingsError(code?: number, message?: string) {\n code = typeof code === 'number' ? code : 0;\n message = typeof message === 'string' && message ? message : 'Unknown error';\n\n return WebExMeetingsErrors[code]\n ? new WebExMeetingsErrors[code]()\n : new WebexMeetingsError(code, message);\n}\n\n/**\n * @class MeetingNotActiveError\n * @classdesc Raised whenever Meeting has already ended and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30101\n * @property {string} message - 'Meeting has already Ended or not Active'\n */\nclass MeetingNotActiveError extends WebexMeetingsError {\n static CODE = 30101;\n\n constructor() {\n super(MeetingNotActiveError.CODE, 'Meeting has already Ended or not Active');\n }\n}\n\nexport {MeetingNotActiveError};\nWebExMeetingsErrors[MeetingNotActiveError.CODE] = MeetingNotActiveError;\n\n/**\n * @class UserNotJoinedError\n * @classdesc Raised whenever the user has already left the meeting and user tries to do a action.\n * @extends WebexMeetingsError\n * @property {number} code - 30102\n * @property {string} message - 'User has already left the meeting'\n */\nclass UserNotJoinedError extends WebexMeetingsError {\n static CODE = 30102;\n\n constructor() {\n super(\n UserNotJoinedError.CODE,\n 'User currently not in meeting. Please join a meeting before adding media.'\n );\n }\n}\n\nexport {UserNotJoinedError};\nWebExMeetingsErrors[UserNotJoinedError.CODE] = UserNotJoinedError;\n\n/**\n * @class NoMediaEstablishedYetError\n * @classdesc Raised whenever the user has not established media yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30103\n * @property {string} message - error message\n */\nclass NoMediaEstablishedYetError extends WebexMeetingsError {\n static CODE = 30103;\n\n // eslint-disable-next-line require-jsdoc\n constructor() {\n super(\n NoMediaEstablishedYetError.CODE,\n 'Webrtc media connection is missing, call addMedia() first'\n );\n }\n}\n\nexport {NoMediaEstablishedYetError};\nWebExMeetingsErrors[NoMediaEstablishedYetError.CODE] = NoMediaEstablishedYetError;\n\n/**\n * @class UserInLobbyError\n * @classdesc Raised whenever the user is in lobby and not joined yet.\n * @extends WebexMeetingsError\n * @property {number} code - 30104\n * @property {string} message - 'user is still in the lobby or not joined'\n */\nclass UserInLobbyError extends WebexMeetingsError {\n static CODE = 30104;\n\n constructor() {\n super(UserInLobbyError.CODE, 'user is still in the lobby or not joined');\n }\n}\n\nexport {UserInLobbyError};\nWebExMeetingsErrors[UserInLobbyError.CODE] = UserInLobbyError;\n\n/**\n * @class SpaceIDDeprecatedError\n * @classdesc Raised whenever the user passes Space ID as destination for create meeting.\n * @extends WebexMeetingsError\n * @property {number} code - 30105\n * @property {string} message - Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n */\nclass SpaceIDDeprecatedError extends WebexMeetingsError {\n static CODE = 30105;\n\n constructor() {\n super(\n SpaceIDDeprecatedError.CODE,\n 'Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.'\n );\n }\n}\n\nexport {SpaceIDDeprecatedError};\nWebExMeetingsErrors[SpaceIDDeprecatedError.CODE] = SpaceIDDeprecatedError;\n\n/**\n * @class IceGatheringFailed\n * @classdesc Raised whenever ice gathering fails.\n * @extends WebexMeetingsError\n * @property {number} code - 30202\n * @property {string} message - 'user failed ice gathering check network/firewall'\n */\nclass IceGatheringFailed extends WebexMeetingsError {\n static CODE = 30202;\n\n constructor() {\n super(IceGatheringFailed.CODE, 'iceConnection: gethering ice candidate failed');\n }\n}\n\nexport {IceGatheringFailed};\nWebExMeetingsErrors[IceGatheringFailed.CODE] = IceGatheringFailed;\n\n/**\n * @class AddMediaFailed\n * @classdesc Raised whenever we fail to successfully add media to a meeting\n * @extends WebexMeetingsError\n * @property {number} code - 30203\n * @property {string} message - 'Failed to add media'\n * @property {Error} [cause] - The underlying error that caused the failure\n */\nclass AddMediaFailed extends WebexMeetingsError {\n static CODE = 30203;\n cause?: Error;\n connectionType?: string;\n selectedCandidatePairChanges?: number;\n numTransports?: number;\n iceConnected?: boolean;\n\n /**\n * Creates a new AddMediaFailed error\n * @param {Object} options\n * @param {Error} [options.cause] - The underlying error that caused the media addition to fail\n * @param {string} [options.connectionType] - The ICE connection type at the time of failure (e.g. 'UDP', 'TURN-TLS')\n * @param {number} [options.selectedCandidatePairChanges] - Number of times the selected candidate pair changed\n * @param {number} [options.numTransports] - Number of ICE transports\n * @param {boolean} [options.iceConnected] - Whether ICE connection was established before the failure\n */\n constructor(\n options: {\n cause?: Error;\n connectionType?: string;\n selectedCandidatePairChanges?: number;\n numTransports?: number;\n iceConnected?: boolean;\n } = {}\n ) {\n super(AddMediaFailed.CODE, 'Failed to add media');\n this.cause = options.cause;\n this.connectionType = options.connectionType;\n this.selectedCandidatePairChanges = options.selectedCandidatePairChanges;\n this.numTransports = options.numTransports;\n this.iceConnected = options.iceConnected;\n }\n\n /**\n * Returns true if the failure was due to a DTLS handshake failure\n * (ICE connected successfully but the overall media connection failed).\n */\n get isDtlsHandshakeFailure(): boolean {\n return this.iceConnected === true;\n }\n}\nexport {AddMediaFailed};\nWebExMeetingsErrors[AddMediaFailed.CODE] = AddMediaFailed;\n\n/**\n * @class MediaConnectionTimedOutError\n * @classdesc Internal error thrown when the media connection times out waiting to connect.\n */\nclass MediaConnectionTimedOutError extends Error {\n iceConnected: boolean;\n\n constructor(message: string, iceConnected: boolean) {\n super(message);\n this.name = 'MediaConnectionTimedOutError';\n this.iceConnected = iceConnected;\n }\n}\nexport {MediaConnectionTimedOutError};\n\n/**\n * @class SdpResponseTimeoutError\n * @classdesc Raised whenever we timeout waiting for remote SDP answer\n * @extends WebexMeetingsError\n * @property {number} code - 30204\n * @property {string} message - 'Timed out waiting for REMOTE SDP ANSWER'\n */\nclass SdpResponseTimeoutError extends WebexMeetingsError {\n static CODE = 30204;\n\n // eslint-disable-next-line require-jsdoc\n constructor() {\n super(SdpResponseTimeoutError.CODE, 'Timed out waiting for REMOTE SDP ANSWER');\n }\n}\n\nexport {SdpResponseTimeoutError};\nWebExMeetingsErrors[SdpResponseTimeoutError.CODE] = SdpResponseTimeoutError;\n"],"mappings":"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","ignoreList":[]}
@@ -381,7 +381,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
381
381
  throw error;
382
382
  });
383
383
  },
384
- version: "3.12.0-next.92"
384
+ version: "3.12.0-next.93"
385
385
  });
386
386
  var _default = exports.default = SimultaneousInterpretation;
387
387
  //# 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.12.0-next.92"
21
+ version: "3.12.0-next.93"
22
22
  });
23
23
  var _default = exports.default = SILanguage;
24
24
  //# sourceMappingURL=siLanguage.js.map
@@ -73,6 +73,18 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
73
73
  return this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Failed;
74
74
  }
75
75
 
76
+ /**
77
+ * Returns true if ICE connection state indicates connectivity.
78
+ *
79
+ * @returns {boolean}
80
+ */
81
+ }, {
82
+ key: "isIceConnected",
83
+ value: function isIceConnected() {
84
+ var state = this.webrtcMediaConnection.getIceConnectionState();
85
+ return state === 'connected' || state === 'completed';
86
+ }
87
+
76
88
  /**
77
89
  * Returns true if the ICE Gathering is completed, false otherwise.
78
90
  *
@@ -145,7 +157,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
145
157
  value: function iceConnectionStateHandler() {
146
158
  var iceConnectionState = this.webrtcMediaConnection.getIceConnectionState();
147
159
  _loggerProxy.default.logger.log("Media:MediaConnectionAwaiter#iceConnectionStateHandler --> ICE connection state change -> ".concat(iceConnectionState));
148
- if (iceConnectionState === 'connected' && !this.iceConnected) {
160
+ if (this.isIceConnected() && !this.iceConnected) {
149
161
  this.iceConnected = true;
150
162
  }
151
163
  this.connectionStateChange();
@@ -253,7 +265,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
253
265
  /**
254
266
  * Waits for the webrtc media connection to be connected.
255
267
  *
256
- * @returns {Promise}
268
+ * @returns {Promise<void>} In case of failure, the promise is rejected with FailureResult
257
269
  */
258
270
  }, {
259
271
  key: "waitForMediaConnectionConnected",
@@ -263,6 +275,7 @@ var MediaConnectionAwaiter = exports.default = /*#__PURE__*/function () {
263
275
  return _promise.default.resolve();
264
276
  }
265
277
  _loggerProxy.default.logger.log('Media:MediaConnectionAwaiter#waitForMediaConnectionConnected --> Waiting for media connection to be connected');
278
+ this.iceConnected = this.isIceConnected();
266
279
  this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, this.peerConnectionStateCallback);
267
280
  this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, this.iceConnectionStateCallback);
268
281
  this.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, this.iceGatheringStateCallback);
@@ -1 +1 @@
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":[]}
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","isIceConnected","state","getIceConnectionState","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","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\nexport interface FailureResult {\n iceConnected: boolean;\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 ICE connection state indicates connectivity.\n *\n * @returns {boolean}\n */\n private isIceConnected(): boolean {\n const state = this.webrtcMediaConnection.getIceConnectionState();\n\n return state === 'connected' || state === 'completed';\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 } satisfies FailureResult);\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 (this.isIceConnected() && !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 } satisfies FailureResult);\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>} In case of failure, the promise is rejected with FailureResult\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.iceConnected = this.isIceConnected();\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":[]}
@@ -118,6 +118,7 @@ Media.createMediaConnection = function (isMultistream, debugId, meetingId, optio
118
118
  enableExtmap = options.enableExtmap,
119
119
  turnServerInfo = options.turnServerInfo,
120
120
  bundlePolicy = options.bundlePolicy,
121
+ iceTransportPolicy = options.iceTransportPolicy,
121
122
  iceCandidatesTimeout = options.iceCandidatesTimeout,
122
123
  disableAudioMainDtx = options.disableAudioMainDtx,
123
124
  enableAudioTwcc = options.enableAudioTwcc,
@@ -126,7 +127,7 @@ Media.createMediaConnection = function (isMultistream, debugId, meetingId, optio
126
127
  var iceServers = [];
127
128
 
128
129
  // we might not have any TURN server if TURN discovery failed or wasn't done or we land on a video mesh node
129
- if ((turnServerInfo === null || turnServerInfo === void 0 ? void 0 : turnServerInfo.urls.length) > 0) {
130
+ if (turnServerInfo && turnServerInfo.urls.length > 0) {
130
131
  // TURN-TLS server
131
132
  iceServers.push({
132
133
  urls: turnServerInfo.urls,
@@ -143,6 +144,9 @@ Media.createMediaConnection = function (isMultistream, debugId, meetingId, optio
143
144
  if (bundlePolicy) {
144
145
  config.bundlePolicy = bundlePolicy;
145
146
  }
147
+ if (iceTransportPolicy) {
148
+ config.iceTransportPolicy = iceTransportPolicy;
149
+ }
146
150
  if (disableAudioMainDtx !== undefined) {
147
151
  config.disableAudioMainDtx = disableAudioMainDtx;
148
152
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_internalMediaCore","require","_webCapabilities","_loggerProxy","_interopRequireDefault","_constants","_config","_config2","_browserDetection","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","_promise","resolve","undefined","getDirection","forceSendRecv","receive","send","createMediaConnection","isMultistream","debugId","meetingId","_audioStream$outputSt","_videoStream$outputSt","_shareVideoStream$out","_shareAudioStream$out","rtcMetrics","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceCandidatesTimeout","disableAudioMainDtx","enableAudioTwcc","enableAv1SlidesSupport","stopIceGatheringAfterFirstRelayCandidate","iceServers","urls","username","credential","password","disableAudioTwcc","enableAV1SlidesSupport","BrowserInfo","isFirefox","doFullIce","isEdge","isChrome","enableInboundAudioLevelMonitoring","MultistreamRoapMediaConnection","data","addMetrics","closeMetrics","sendMetricsInQueue","Error","mediaDirection","audioStream","videoStream","shareVideoStream","shareAudioStream","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","localTracks","outputStream","getTracks","screenShareVideo","screenShareAudio","direction","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","concat","constraint","toggleStream","stopStream","stop","readyState","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n type MultistreamConnectionConfig,\n} from '@webex/internal-media-core';\nimport {\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\n} from '@webex/media-helpers';\nimport {RtcMetrics} from '@webex/internal-plugin-metrics';\nimport {BrowserInfo} from '@webex/web-capabilities';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\nimport {TurnServerInfo} from '../roap/types';\n\nconst {isBrowser} = BrowserDetection();\n\nexport type BundlePolicy = MultistreamConnectionConfig['bundlePolicy'];\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\nMedia.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {\n if (!receive && !send) {\n return 'inactive';\n }\n\n if (forceSendRecv || (receive && send)) {\n return 'sendrecv';\n }\n\n if (receive) {\n return 'recvonly';\n }\n\n return 'sendonly';\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {string} meetingId id for the meeting using this connection\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @param {BundlePolicy} [options.bundlePolicy]\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n meetingId: string,\n options: {\n rtcMetrics?: RtcMetrics;\n mediaProperties: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: TurnServerInfo;\n bundlePolicy?: BundlePolicy;\n iceCandidatesTimeout?: number;\n disableAudioMainDtx?: boolean;\n enableAudioTwcc?: boolean;\n enableAv1SlidesSupport?: boolean;\n stopIceGatheringAfterFirstRelayCandidate?: boolean;\n }\n) => {\n const {\n rtcMetrics,\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo,\n bundlePolicy,\n iceCandidatesTimeout,\n disableAudioMainDtx,\n enableAudioTwcc,\n enableAv1SlidesSupport,\n stopIceGatheringAfterFirstRelayCandidate,\n } = options;\n\n const iceServers = [];\n\n // we might not have any TURN server if TURN discovery failed or wasn't done or we land on a video mesh node\n if (turnServerInfo?.urls.length > 0) {\n // TURN-TLS server\n iceServers.push({\n urls: turnServerInfo.urls,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n const config: MultistreamConnectionConfig = {\n iceServers,\n disableAudioTwcc: !enableAudioTwcc,\n enableAV1SlidesSupport: !!enableAv1SlidesSupport,\n };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n if (disableAudioMainDtx !== undefined) {\n config.disableAudioMainDtx = disableAudioMainDtx;\n }\n\n if (BrowserInfo.isFirefox()) {\n config.doFullIce = true;\n\n config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;\n }\n\n if (BrowserInfo.isEdge() || BrowserInfo.isChrome()) {\n // we need this for getting inbound audio metadata\n // but the audioLevel that we use is only available on Chromium based browsers\n config.enableInboundAudioLevelMonitoring = true;\n }\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n /* the rtc metrics objects callbacks */\n (data) => rtcMetrics?.addMetrics(data),\n () => rtcMetrics?.closeMetrics(),\n () => rtcMetrics?.sendMetricsInQueue()\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioStream, videoStream, shareVideoStream, shareAudioStream} =\n mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n iceCandidatesTimeout,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530\n localTracks: {\n audio: audioStream?.outputStream?.getTracks()[0],\n video: videoStream?.outputStream?.getTracks()[0],\n screenShareVideo: shareVideoStream?.outputStream?.getTracks()[0],\n screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923\n } as unknown,\n direction: {\n audio: Media.getDirection(false, mediaDirection.receiveAudio, mediaDirection.sendAudio),\n video: Media.getDirection(false, mediaDirection.receiveVideo, mediaDirection.sendVideo),\n screenShareVideo: Media.getDirection(\n false,\n mediaDirection.receiveShare,\n mediaDirection.sendShare\n ),\n },\n remoteQualityLevel,\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {LocalStream} stream A local stream\n * @returns {null}\n */\nMedia.stopStream = (stream: LocalStream) => {\n if (!stream) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n try {\n stream.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopStream --> Unable to stop the stream with ready state => ${stream.readyState}, error: ${e}`\n );\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_internalMediaCore","require","_webCapabilities","_loggerProxy","_interopRequireDefault","_constants","_config","_config2","_browserDetection","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","_promise","resolve","undefined","getDirection","forceSendRecv","receive","send","createMediaConnection","isMultistream","debugId","meetingId","_audioStream$outputSt","_videoStream$outputSt","_shareVideoStream$out","_shareAudioStream$out","rtcMetrics","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceTransportPolicy","iceCandidatesTimeout","disableAudioMainDtx","enableAudioTwcc","enableAv1SlidesSupport","stopIceGatheringAfterFirstRelayCandidate","iceServers","urls","username","credential","password","disableAudioTwcc","enableAV1SlidesSupport","BrowserInfo","isFirefox","doFullIce","isEdge","isChrome","enableInboundAudioLevelMonitoring","MultistreamRoapMediaConnection","data","addMetrics","closeMetrics","sendMetricsInQueue","Error","mediaDirection","audioStream","videoStream","shareVideoStream","shareAudioStream","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","localTracks","outputStream","getTracks","screenShareVideo","screenShareAudio","direction","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","concat","constraint","toggleStream","stopStream","stop","readyState","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n type MultistreamConnectionConfig,\n} from '@webex/internal-media-core';\nimport {\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\n} from '@webex/media-helpers';\nimport {RtcMetrics} from '@webex/internal-plugin-metrics';\nimport {BrowserInfo} from '@webex/web-capabilities';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\nimport {TurnServerInfo} from '../roap/types';\n\nconst {isBrowser} = BrowserDetection();\n\nexport type BundlePolicy = MultistreamConnectionConfig['bundlePolicy'];\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\nMedia.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {\n if (!receive && !send) {\n return 'inactive';\n }\n\n if (forceSendRecv || (receive && send)) {\n return 'sendrecv';\n }\n\n if (receive) {\n return 'recvonly';\n }\n\n return 'sendonly';\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {string} meetingId id for the meeting using this connection\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @param {BundlePolicy} [options.bundlePolicy]\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n meetingId: string,\n options: {\n rtcMetrics?: RtcMetrics;\n mediaProperties: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: TurnServerInfo;\n bundlePolicy?: BundlePolicy;\n iceTransportPolicy?: RTCIceTransportPolicy;\n iceCandidatesTimeout?: number;\n disableAudioMainDtx?: boolean;\n enableAudioTwcc?: boolean;\n enableAv1SlidesSupport?: boolean;\n stopIceGatheringAfterFirstRelayCandidate?: boolean;\n }\n) => {\n const {\n rtcMetrics,\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo,\n bundlePolicy,\n iceTransportPolicy,\n iceCandidatesTimeout,\n disableAudioMainDtx,\n enableAudioTwcc,\n enableAv1SlidesSupport,\n stopIceGatheringAfterFirstRelayCandidate,\n } = options;\n\n const iceServers = [];\n\n // we might not have any TURN server if TURN discovery failed or wasn't done or we land on a video mesh node\n if (turnServerInfo && turnServerInfo.urls.length > 0) {\n // TURN-TLS server\n iceServers.push({\n urls: turnServerInfo.urls,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n const config: MultistreamConnectionConfig = {\n iceServers,\n disableAudioTwcc: !enableAudioTwcc,\n enableAV1SlidesSupport: !!enableAv1SlidesSupport,\n };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n if (iceTransportPolicy) {\n config.iceTransportPolicy = iceTransportPolicy;\n }\n\n if (disableAudioMainDtx !== undefined) {\n config.disableAudioMainDtx = disableAudioMainDtx;\n }\n\n if (BrowserInfo.isFirefox()) {\n config.doFullIce = true;\n\n config.stopIceGatheringAfterFirstRelayCandidate = stopIceGatheringAfterFirstRelayCandidate;\n }\n\n if (BrowserInfo.isEdge() || BrowserInfo.isChrome()) {\n // we need this for getting inbound audio metadata\n // but the audioLevel that we use is only available on Chromium based browsers\n config.enableInboundAudioLevelMonitoring = true;\n }\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n /* the rtc metrics objects callbacks */\n (data) => rtcMetrics?.addMetrics(data),\n () => rtcMetrics?.closeMetrics(),\n () => rtcMetrics?.sendMetricsInQueue()\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioStream, videoStream, shareVideoStream, shareAudioStream} =\n mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n iceCandidatesTimeout,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530\n localTracks: {\n audio: audioStream?.outputStream?.getTracks()[0],\n video: videoStream?.outputStream?.getTracks()[0],\n screenShareVideo: shareVideoStream?.outputStream?.getTracks()[0],\n screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923\n } as unknown,\n direction: {\n audio: Media.getDirection(false, mediaDirection.receiveAudio, mediaDirection.sendAudio),\n video: Media.getDirection(false, mediaDirection.receiveVideo, mediaDirection.sendVideo),\n screenShareVideo: Media.getDirection(\n false,\n mediaDirection.receiveShare,\n mediaDirection.sendShare\n ),\n },\n remoteQualityLevel,\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {LocalStream} stream A local stream\n * @returns {null}\n */\nMedia.stopStream = (stream: LocalStream) => {\n if (!stream) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n try {\n stream.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopStream --> Unable to stop the stream with ready state => ${stream.readyState}, error: ${e}`\n );\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":";;;;;;;;;;;;;;;AAKA,IAAAA,kBAAA,GAAAC,OAAA;AAaA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,iBAAA,GAAAJ,sBAAA,CAAAH,OAAA;AAA2D,SAAAQ,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA,IAvB3D;AACA;AACA,GAFA,CAGA;AAuBA,IAAAqB,iBAAA,GAAoB,IAAAC,yBAAgB,EAAC,CAAC;EAA/BC,SAAS,GAAAF,iBAAA,CAATE,SAAS;AAIhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,KAAU,GAAG,CAAC,CAAC;;AAErB;AACA;AACA;AACA;AACA;AACA;AACAA,KAAK,CAACC,aAAa,GAAG,UAACC,OAAY,EAAEC,MAAc,EAAK;EACtD,IAAOC,SAAS,GAAuDF,OAAO,CAAvEE,SAAS;IAAEC,SAAS,GAA4CH,OAAO,CAA5DG,SAAS;IAAEC,SAAS,GAAiCJ,OAAO,CAAjDI,SAAS;IAAEC,gBAAgB,GAAeL,OAAO,CAAtCK,gBAAgB;IAAEC,SAAS,GAAIN,OAAO,CAApBM,SAAS;EAEnE,IAAIJ,SAAS,IAAIC,SAAS,EAAE;IAC1B,OAAOL,KAAK,CAACS,QAAQ,CAACL,SAAS,EAAEC,SAAS,EAAEF,MAAM,CAAC;EACrD;EAEA,IAAIG,SAAS,IAAI,CAACE,SAAS,EAAE;IAC3B,OAAOR,KAAK,CAACU,eAAe,CAC1B;MACEN,SAAS,EAAE,KAAK;MAChBE,SAAS,EAAE,IAAI;MACfC,gBAAgB,EAAhBA;IACF,CAAC,EACDJ,MACF,CAAC;EACH;EAEA,OAAOQ,QAAA,CAAAlB,OAAA,CAAQmB,OAAO,CAACC,SAAS,CAAC;AACnC,CAAC;AAEDb,KAAK,CAACc,YAAY,GAAG,UAACC,aAAsB,EAAEC,OAAgB,EAAEC,IAAa,EAAK;EAChF,IAAI,CAACD,OAAO,IAAI,CAACC,IAAI,EAAE;IACrB,OAAO,UAAU;EACnB;EAEA,IAAIF,aAAa,IAAKC,OAAO,IAAIC,IAAK,EAAE;IACtC,OAAO,UAAU;EACnB;EAEA,IAAID,OAAO,EAAE;IACX,OAAO,UAAU;EACnB;EAEA,OAAO,UAAU;AACnB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAhB,KAAK,CAACkB,qBAAqB,GAAG,UAC5BC,aAAsB,EACtBC,OAAe,EACfC,SAAiB,EACjBnB,OA2BC,EACE;EAAA,IAAAoB,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,qBAAA;EACH,IACEC,UAAU,GAaRxB,OAAO,CAbTwB,UAAU;IACVC,eAAe,GAYbzB,OAAO,CAZTyB,eAAe;IACfC,kBAAkB,GAWhB1B,OAAO,CAXT0B,kBAAkB;IAClBC,SAAS,GAUP3B,OAAO,CAVT2B,SAAS;IACTC,YAAY,GASV5B,OAAO,CATT4B,YAAY;IACZC,cAAc,GAQZ7B,OAAO,CART6B,cAAc;IACdC,YAAY,GAOV9B,OAAO,CAPT8B,YAAY;IACZC,kBAAkB,GAMhB/B,OAAO,CANT+B,kBAAkB;IAClBC,oBAAoB,GAKlBhC,OAAO,CALTgC,oBAAoB;IACpBC,mBAAmB,GAIjBjC,OAAO,CAJTiC,mBAAmB;IACnBC,eAAe,GAGblC,OAAO,CAHTkC,eAAe;IACfC,sBAAsB,GAEpBnC,OAAO,CAFTmC,sBAAsB;IACtBC,wCAAwC,GACtCpC,OAAO,CADToC,wCAAwC;EAG1C,IAAMC,UAAU,GAAG,EAAE;;EAErB;EACA,IAAIR,cAAc,IAAIA,cAAc,CAACS,IAAI,CAACnD,MAAM,GAAG,CAAC,EAAE;IACpD;IACAkD,UAAU,CAACtD,IAAI,CAAC;MACduD,IAAI,EAAET,cAAc,CAACS,IAAI;MACzBC,QAAQ,EAAEV,cAAc,CAACU,QAAQ,IAAI,EAAE;MACvCC,UAAU,EAAEX,cAAc,CAACY,QAAQ,IAAI;IACzC,CAAC,CAAC;EACJ;EAEA,IAAIxB,aAAa,EAAE;IACjB,IAAMhB,MAAmC,GAAG;MAC1CoC,UAAU,EAAVA,UAAU;MACVK,gBAAgB,EAAE,CAACR,eAAe;MAClCS,sBAAsB,EAAE,CAAC,CAACR;IAC5B,CAAC;IAED,IAAIL,YAAY,EAAE;MAChB7B,MAAM,CAAC6B,YAAY,GAAGA,YAAY;IACpC;IAEA,IAAIC,kBAAkB,EAAE;MACtB9B,MAAM,CAAC8B,kBAAkB,GAAGA,kBAAkB;IAChD;IAEA,IAAIE,mBAAmB,KAAKtB,SAAS,EAAE;MACrCV,MAAM,CAACgC,mBAAmB,GAAGA,mBAAmB;IAClD;IAEA,IAAIW,4BAAW,CAACC,SAAS,CAAC,CAAC,EAAE;MAC3B5C,MAAM,CAAC6C,SAAS,GAAG,IAAI;MAEvB7C,MAAM,CAACmC,wCAAwC,GAAGA,wCAAwC;IAC5F;IAEA,IAAIQ,4BAAW,CAACG,MAAM,CAAC,CAAC,IAAIH,4BAAW,CAACI,QAAQ,CAAC,CAAC,EAAE;MAClD;MACA;MACA/C,MAAM,CAACgD,iCAAiC,GAAG,IAAI;IACjD;IAEA,OAAO,IAAIC,iDAA8B,CACvCjD,MAAM,EACNkB,SAAS,EACT;IACA,UAACgC,IAAI;MAAA,OAAK3B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE4B,UAAU,CAACD,IAAI,CAAC;IAAA,GACtC;MAAA,OAAM3B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE6B,YAAY,CAAC,CAAC;IAAA,GAChC;MAAA,OAAM7B,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE8B,kBAAkB,CAAC,CAAC;IAAA,CACxC,CAAC;EACH;EAEA,IAAI,CAAC7B,eAAe,EAAE;IACpB,MAAM,IAAI8B,KAAK,CAAC,2EAA2E,CAAC;EAC9F;EAEA,IAAOC,cAAc,GACnB/B,eAAe,CADV+B,cAAc;IAAEC,WAAW,GAChChC,eAAe,CADMgC,WAAW;IAAEC,WAAW,GAC7CjC,eAAe,CADmBiC,WAAW;IAAEC,gBAAgB,GAC/DlC,eAAe,CADgCkC,gBAAgB;IAAEC,gBAAgB,GACjFnC,eAAe,CADkDmC,gBAAgB;EAGnF,OAAO,IAAIC,sCAAmB,CAC5B;IACExB,UAAU,EAAVA,UAAU;IACVL,oBAAoB,EAApBA,oBAAoB;IACpB8B,wBAAwB,EAAE,KAAK;IAC/BC,WAAW,EAAE,IAAI;IACjBC,UAAU,EAAE;MACVC,eAAe,EAAE,KAAK;MACtBC,gBAAgB,EAAE,IAAI;MACtBC,eAAe,EAAE;QACfC,KAAK,EAAEC,gBAAY,CAACC,QAAQ,CAACC,SAAS,CAACH,KAAK;QAC5CI,KAAK,EAAEH,gBAAY,CAACC,QAAQ,CAACC,SAAS,CAACC;MACzC,CAAC;MACDC,YAAY,EAAEJ,gBAAY,CAACC,QAAQ,CAACC,SAAS,CAACE,YAAY;MAC1DC,iBAAiB,EAAE,EAAE;MAAE;MACvBC,aAAa,EAAE,CAAC/C,YAAY;MAC5BgD,UAAU,EAAE,CAACjD,SAAS,CAAE;IAC1B;EACF,CAAC,EACD;IACE;IACAkD,WAAW,EAAE;MACXT,KAAK,EAAEX,WAAW,aAAXA,WAAW,wBAAArC,qBAAA,GAAXqC,WAAW,CAAEqB,YAAY,cAAA1D,qBAAA,uBAAzBA,qBAAA,CAA2B2D,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MAChDP,KAAK,EAAEd,WAAW,aAAXA,WAAW,wBAAArC,qBAAA,GAAXqC,WAAW,CAAEoB,YAAY,cAAAzD,qBAAA,uBAAzBA,qBAAA,CAA2B0D,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MAChDC,gBAAgB,EAAErB,gBAAgB,aAAhBA,gBAAgB,wBAAArC,qBAAA,GAAhBqC,gBAAgB,CAAEmB,YAAY,cAAAxD,qBAAA,uBAA9BA,qBAAA,CAAgCyD,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;MAChEE,gBAAgB,EAAErB,gBAAgB,aAAhBA,gBAAgB,wBAAArC,qBAAA,GAAhBqC,gBAAgB,CAAEkB,YAAY,cAAAvD,qBAAA,uBAA9BA,qBAAA,CAAgCwD,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE;IACpE,CAAY;IACZG,SAAS,EAAE;MACTd,KAAK,EAAEtE,KAAK,CAACc,YAAY,CAAC,KAAK,EAAE4C,cAAc,CAAC2B,YAAY,EAAE3B,cAAc,CAACtD,SAAS,CAAC;MACvFsE,KAAK,EAAE1E,KAAK,CAACc,YAAY,CAAC,KAAK,EAAE4C,cAAc,CAAC4B,YAAY,EAAE5B,cAAc,CAACrD,SAAS,CAAC;MACvF6E,gBAAgB,EAAElF,KAAK,CAACc,YAAY,CAClC,KAAK,EACL4C,cAAc,CAAC6B,YAAY,EAC3B7B,cAAc,CAACpD,SACjB;IACF,CAAC;IACDsB,kBAAkB,EAAlBA;EACF,CAAC,EACDR,OACF,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACApB,KAAK,CAACU,eAAe,GAAG,UACtBR,OAOC,EAEE;EAAA,IADHC,MAAW,GAAAf,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAyB,SAAA,GAAAzB,SAAA,MAAG,CAAC,CAAC;EAEhB;EACA,IAAMoG,gBAAgB,GAAGrF,MAAM,CAACsF,gBAAgB,IAAI,CAAC,CAAC;EACtD;EACA,IAAMC,oBAAoB,GAAGvF,MAAM,CAACwF,eAAe,IAAI,IAAI;EAC3D;EACA,IAAMC,mBAAmB,GAAG1F,OAAO,CAACK,gBAAgB;EACpD,IAAMsF,oBAAoB,GAAGD,mBAAmB,IAAIA,mBAAmB,CAACE,gBAAgB;EACxF,IAAMC,gBAAgB,GAAGH,mBAAmB,IAAIA,mBAAmB,CAACI,aAAa;EACjF,IAAAC,gBAAA,GACEC,eAAM,CAAC1B,QAAQ;IADViB,gBAAgB,GAAAQ,gBAAA,CAAhBR,gBAAgB;IAAEU,UAAU,GAAAF,gBAAA,CAAVE,UAAU;IAAEC,mBAAmB,GAAAH,gBAAA,CAAnBG,mBAAmB;IAAET,eAAe,GAAAM,gBAAA,CAAfN,eAAe;IAAEU,WAAW,GAAAJ,gBAAA,CAAXI,WAAW;EAGtF,IAAIP,gBAAqB,GAAG;IAC1BQ,MAAM,EAAEC,iCAAsB,CAACC,MAAM,CAACC,MAAM;IAC5CJ,WAAW,EAAXA;EACF,CAAC;EAED,IAAIR,oBAAoB,EAAE;IACxBC,gBAAgB,GAAGF,mBAAmB,CAACE,gBAAgB;EACzD,CAAC,MAAM,IAAIC,gBAAgB,EAAE;IAC3BD,gBAAgB,GAAA3G,aAAA,CAAAA,aAAA,KACX2G,gBAAgB;MACnBY,SAAS,EAAEN,mBAAmB;MAC9BO,MAAM,EAAER,UAAU,CAACS,WAAW;MAC9BC,KAAK,EAAEV,UAAU,CAACW;IAAU,GACzB3G,MAAM,CAACgG,UAAU,CACrB;EACH,CAAC,MAAM;IACLL,gBAAgB,GAAA3G,aAAA,CAAAA,aAAA,KACX2G,gBAAgB;MACnBY,SAAS,EAAEhB,oBAAoB,IAAIC,eAAe;MAClDgB,MAAM,EAAEnB,gBAAgB,CAACoB,WAAW,IAAInB,gBAAgB,CAACmB,WAAW;MACpEC,KAAK,EAAErB,gBAAgB,CAACsB,UAAU,IAAIrB,gBAAgB,CAACqB;IAAU,GAC9D3G,MAAM,CAACsF,gBAAgB,CAC3B;EACH;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA,IAAI1F,SAAS,CAAC,SAAS,CAAC,EAAE;IACxB,IAAMgH,WAAgB,GAAG;MACvBzC,KAAK,EAAEpE,OAAO,CAACE,SAAS;MACxBsE,KAAK,EAAExE,OAAO,CAACI;IACjB,CAAC;IAED,OAAO0G,SAAS,CAACC,YAAY,CAC1BvG,eAAe,CAAC;MAAC4D,KAAK,EAAEpE,OAAO,CAACE,SAAS;MAAEsE,KAAK,EAAEqC;IAAW,CAAC,CAAC,CAC/DG,IAAI,CAAC,UAACC,MAAM,EAAK;MAChB,IAAIjH,OAAO,CAACI,SAAS,IAAI6G,MAAM,CAACC,cAAc,CAAC,CAAC,CAAC/H,MAAM,GAAG,CAAC,EAAE;QAC3D;QACA;QACA;QACA8H,MAAM,CAACC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAACC,gBAAgB,CAACvB,gBAAgB,CAAC;MAC/D;MAEA,OAAOqB,MAAM;IACf,CAAC,CAAC;EACN;EAEA,IAAMG,qBAA0B,GAAG;IAAC5C,KAAK,EAAExE,OAAO,CAACI,SAAS,GAAGwF,gBAAgB,GAAG;EAAK,CAAC;;EAExF;EACA;EACA,IAAI5F,OAAO,CAACE,SAAS,IAAIL,SAAS,CAAC,QAAQ,CAAC,EAAE;IAC5CuH,qBAAqB,CAAChD,KAAK,GAAGpE,OAAO,CAACE,SAAS;EACjD;EAEA,OAAO4G,SAAS,CAACC,YAAY,CAACvG,eAAe,CAAC4G,qBAAqB,CAAC;AACtE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACAtH,KAAK,CAACS,QAAQ,GAAG,UAAC6D,KAAoB,EAAEI,KAAoB,EAAEvE,MAAW,EAAK;EAC5E,IAAMoH,YAAY,GAAG;IAACC,KAAK,EAAErH,MAAM,CAACgG,UAAU,CAACW,UAAU;IAAEW,GAAG,EAAEtH,MAAM,CAACgG,UAAU,CAACuB;EAAQ,CAAC;EAC3F,IAAMC,aAAa,GAAG;IAACH,KAAK,EAAErH,MAAM,CAACgG,UAAU,CAACS,WAAW;IAAEa,GAAG,EAAEtH,MAAM,CAACgG,UAAU,CAACyB;EAAS,CAAC;EAC9F,IAAMb,WAAW,GAAG;IAClBzC,KAAK,EAALA,KAAK;IACL;IACA;IACAI,KAAK,EAAEA,KAAK,GACR3E,SAAS,CAAC,SAAS,CAAC,IAAI2E,KAAK,CAACmC,KAAK,IAAInC,KAAK,CAACmC,KAAK,CAACY,GAAG,KAAK,GAAG,GAC5D;MACEI,QAAQ,EAAEnD,KAAK,CAACmD,QAAQ,GAAGnD,KAAK,CAACmD,QAAQ,GAAGhH,SAAS;MACrDgG,KAAK,EAAE,GAAG;MACVF,MAAM,EAAE,GAAG;MACXD,SAAS,EAAEhC,KAAK,CAACgC,SAAS,GAAGhC,KAAK,CAACgC,SAAS,GAAG7F,SAAS;MACxDiH,UAAU,EAAEpD,KAAK,CAACoD,UAAU,GAAGpD,KAAK,CAACoD,UAAU,GAAGjH;IACpD,CAAC,GACD;MACEgH,QAAQ,EAAEnD,KAAK,CAACmD,QAAQ,GAAGnD,KAAK,CAACmD,QAAQ,GAAGhH,SAAS;MACrDgG,KAAK,EAAEnC,KAAK,CAACmC,KAAK,GAAGnC,KAAK,CAACmC,KAAK,GAAGU,YAAY;MAC/CZ,MAAM,EAAEjC,KAAK,CAACiC,MAAM,GAAGjC,KAAK,CAACiC,MAAM,GAAGgB,aAAa;MACnDjB,SAAS,EAAEhC,KAAK,CAACgC,SAAS,GAAGhC,KAAK,CAACgC,SAAS,GAAG7F,SAAS;MACxDiH,UAAU,EAAEpD,KAAK,CAACoD,UAAU,GAAGpD,KAAK,CAACoD,UAAU,GAAGjH;IACpD,CAAC,GACH,KAAK;IACTkH,IAAI,EAAEC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,MAAM,CAAE;EACzC,CAAC;EAED,OAAOlB,SAAS,CAACC,YAAY,CAACkB,YAAY,CAACpB,WAAW,CAAC,CAACqB,KAAK,CAAC,UAACC,GAAG,EAAK;IACrE,IAAMC,OAAO,GAAG,8DAA8D;IAE9EC,oBAAW,CAACC,MAAM,CAACC,KAAK,IAAAC,MAAA,CAAIJ,OAAO,gBAAAI,MAAA,CAAaL,GAAG,QAAAK,MAAA,CAAKL,GAAG,CAACM,UAAU,MAAG,CAAC;IAC1E,MAAMN,GAAG;EACX,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACArI,KAAK,CAAC4I,YAAY,GAAG,YAAM,CAAC,CAAC;;AAE7B;AACA;AACA;AACA;AACA;AACA5I,KAAK,CAAC6I,UAAU,GAAG,UAAC1B,MAAmB,EAAK;EAC1C,IAAI,CAACA,MAAM,EAAE;IACX,OAAOxG,QAAA,CAAAlB,OAAA,CAAQmB,OAAO,CAAC,CAAC;EAC1B;EAEA,OAAOD,QAAA,CAAAlB,OAAA,CAAQmB,OAAO,CAAC,CAAC,CAACsG,IAAI,CAAC,YAAM;IAClC,IAAI;MACFC,MAAM,CAAC2B,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,OAAOtK,CAAC,EAAE;MACV+J,oBAAW,CAACC,MAAM,CAACC,KAAK,6EAAAC,MAAA,CACsDvB,MAAM,CAAC4B,UAAU,eAAAL,MAAA,CAAYlK,CAAC,CAC5G,CAAC;IACH;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAwB,KAAK,CAACmI,YAAY,GAAG,UACnBa,YAKC,EACDC,UAGC,EACD1I,gBAGC,EACDJ,MAAc;EAAA,OAEdH,KAAK,CAACC,aAAa,CACjB;IACEG,SAAS,EAAE4I,YAAY,CAAC5I,SAAS,GAAG6I,UAAU,CAAC3E,KAAK,IAAI0E,YAAY,CAAC5I,SAAS,GAAG,KAAK;IACtFC,SAAS,EAAE2I,YAAY,CAAC3I,SAAS,GAAG4I,UAAU,CAACvE,KAAK,IAAIsE,YAAY,CAAC3I,SAAS,GAAG;EACnF,CAAC,EACDF,MACF,CAAC,CAAC+G,IAAI,CAAC,UAACgC,WAAW;IAAA,OACjBlJ,KAAK,CAACC,aAAa,CACjB;MACEK,SAAS,EAAE0I,YAAY,CAAC1I,SAAS;MACjCE,SAAS,EAAEwI,YAAY,CAACxI,SAAS;MACjCD,gBAAgB,EAAhBA;IACF,CAAC,EACDJ,MACF,CAAC,CAAC+G,IAAI,CAAC,UAACiC,WAAW;MAAA,OAAK,CAACD,WAAW,EAAEC,WAAW,CAAC;IAAA,EAAC;EAAA,CACrD,CAAC;AAAA;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAA5J,OAAA,GAEWO,KAAK","ignoreList":[]}