@webex/plugin-meetings 3.5.0-next.11 → 3.5.0-next.13

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.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.5.0-next.11"
212
+ version: "3.5.0-next.13"
213
213
  });
214
214
  var _default = exports.default = Breakout;
215
215
  //# sourceMappingURL=breakout.js.map
@@ -1046,7 +1046,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1046
1046
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1047
1047
  }
1048
1048
  },
1049
- version: "3.5.0-next.11"
1049
+ version: "3.5.0-next.13"
1050
1050
  });
1051
1051
  var _default = exports.default = Breakouts;
1052
1052
  //# sourceMappingURL=index.js.map
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
373
373
  throw error;
374
374
  });
375
375
  },
376
- version: "3.5.0-next.11"
376
+ version: "3.5.0-next.13"
377
377
  });
378
378
  var _default = exports.default = SimultaneousInterpretation;
379
379
  //# sourceMappingURL=index.js.map
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.5.0-next.11"
21
+ version: "3.5.0-next.13"
22
22
  });
23
23
  var _default = exports.default = SILanguage;
24
24
  //# sourceMappingURL=siLanguage.js.map
@@ -14,6 +14,7 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  value: true
15
15
  });
16
16
  exports.default = void 0;
17
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
17
18
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
18
19
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
19
20
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
@@ -28,6 +29,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
28
29
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
29
30
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
30
31
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
32
+ var _lodash = require("lodash");
31
33
  require("@webex/internal-plugin-mercury");
32
34
  require("@webex/internal-plugin-conversation");
33
35
  require("@webex/internal-plugin-metrics");
@@ -152,6 +154,10 @@ var MediaLogger = /*#__PURE__*/function () {
152
154
  * @property {String} type what type of meeting it was
153
155
  * @memberof Meetings
154
156
  */
157
+ /**
158
+ * Object containing only the most basic information about a meeting.
159
+ * This is the information that is kept even after the meeting is deleted from the MeetingCollection
160
+ */
155
161
  /**
156
162
  * Maintain a cache of meetings and sync with services.
157
163
  * @class
@@ -185,6 +191,7 @@ var Meetings = exports.default = /*#__PURE__*/function (_WebexPlugin) {
185
191
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "loggerRequest", void 0);
186
192
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "media", void 0);
187
193
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingCollection", void 0);
194
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "deletedMeetings", void 0);
188
195
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "personalMeetingRoom", void 0);
189
196
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "preferredWebexSite", void 0);
190
197
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "reachability", void 0);
@@ -278,6 +285,8 @@ var Meetings = exports.default = /*#__PURE__*/function (_WebexPlugin) {
278
285
  webex: _this.webex
279
286
  });
280
287
  _this.meetingCollection = new _collection.default();
288
+ _this.deletedMeetings = new _map.default();
289
+
281
290
  /**
282
291
  * The PersonalMeetingRoom object to interact with server
283
292
  * @instance
@@ -991,6 +1000,19 @@ var Meetings = exports.default = /*#__PURE__*/function (_WebexPlugin) {
991
1000
  return this.personalMeetingRoom;
992
1001
  }
993
1002
 
1003
+ /**
1004
+ * Returns basic information about a meeting that exists or
1005
+ * used to exist in the MeetingCollection
1006
+ *
1007
+ * @param {string} meetingId
1008
+ * @returns {BasicMeetingInformation|undefined}
1009
+ */
1010
+ }, {
1011
+ key: "getBasicMeetingInformation",
1012
+ value: function getBasicMeetingInformation(meetingId) {
1013
+ return this.meetingCollection.get(meetingId) || this.deletedMeetings.get(meetingId);
1014
+ }
1015
+
994
1016
  /**
995
1017
  * @param {Meeting} meeting
996
1018
  * @param {Object} reason
@@ -1002,7 +1024,27 @@ var Meetings = exports.default = /*#__PURE__*/function (_WebexPlugin) {
1002
1024
  }, {
1003
1025
  key: "destroy",
1004
1026
  value: function destroy(meeting, reason) {
1027
+ var _meeting$locusInfo, _meeting$locusInfo2, _meeting$locusInfo3, _meeting$locusInfo3$f, _meeting$locusInfo4, _meeting$locusInfo4$f;
1005
1028
  _util.default.cleanUp(meeting);
1029
+ // keep some basic info about the deleted meeting forever
1030
+ this.deletedMeetings.set(meeting.id, {
1031
+ id: meeting.id,
1032
+ allowMediaInLobby: meeting.allowMediaInLobby,
1033
+ correlationId: meeting.correlationId,
1034
+ sessionCorrelationId: meeting.sessionCorrelationId,
1035
+ environment: meeting.environment,
1036
+ locusUrl: meeting.locusUrl,
1037
+ meetingInfo: (0, _lodash.cloneDeep)(meeting.meetingInfo),
1038
+ locusInfo: {
1039
+ // locusInfo can be quite big, so keep just the minimal info
1040
+ sequence: (_meeting$locusInfo = meeting.locusInfo) === null || _meeting$locusInfo === void 0 ? void 0 : _meeting$locusInfo.sequence,
1041
+ url: (_meeting$locusInfo2 = meeting.locusInfo) === null || _meeting$locusInfo2 === void 0 ? void 0 : _meeting$locusInfo2.url,
1042
+ fullState: {
1043
+ lastActive: (_meeting$locusInfo3 = meeting.locusInfo) === null || _meeting$locusInfo3 === void 0 ? void 0 : (_meeting$locusInfo3$f = _meeting$locusInfo3.fullState) === null || _meeting$locusInfo3$f === void 0 ? void 0 : _meeting$locusInfo3$f.lastActive,
1044
+ sessionId: (_meeting$locusInfo4 = meeting.locusInfo) === null || _meeting$locusInfo4 === void 0 ? void 0 : (_meeting$locusInfo4$f = _meeting$locusInfo4.fullState) === null || _meeting$locusInfo4$f === void 0 ? void 0 : _meeting$locusInfo4$f.sessionId
1045
+ }
1046
+ }
1047
+ });
1006
1048
  this.meetingCollection.delete(meeting.id);
1007
1049
  _triggerProxy.default.trigger(this, {
1008
1050
  file: 'meetings',
@@ -1 +1 @@
1
- {"version":3,"names":["require","_webexCore","_internalMediaCore","mediaHelpersModule","_interopRequireWildcard","_metrics","_interopRequireDefault","_loggerConfig","_config","_loggerProxy","_request","_triggerProxy","_media","_util","_constants","_constants2","_meetingInfo","_meetingInfoV","_meeting","_personalMeetingRoom","_reachability","_request2","_passwordError","_captchaError","_collection","_meetings","_util2","_permission","_webexErrors","_noMeetingInfo","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","valueOf","mediaLogger","MediaLogger","_classCallCheck2","_createClass2","key","value","info","_LoggerProxy$logger","LoggerProxy","logger","log","_LoggerProxy$logger2","error","_LoggerProxy$logger3","warn","_LoggerProxy$logger4","trace","_LoggerProxy$logger5","debug","_LoggerProxy$logger6","Meetings","exports","_WebexPlugin","_inherits2","_super","_this","_len","args","Array","_key","concat","_assertThisInitialized2","MEETINGS","_ref","_asyncToGenerator2","_regenerator","mark","_callee","options","authToken","wrap","_callee$","_context","prev","next","webex","credentials","supertoken","access_token","abrupt","NoiseReductionEffect","stop","_x","_ref2","_callee2","_callee2$","_context2","VirtualBackgroundEffect","_x2","mediaHelpers","request","Request","parent","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","personalMeetingRoom","reachability","Reachability","registered","preferredWebexSite","media","getUserMedia","Media","onReady","isNeedHandleMainLocus","meeting","newLocus","_newLocus$controls","_newLocus$controls$br","_newLocus$self","_newLocus$self2","_newLocus$self3","_breakoutLocus$joined","_newLocus$self4","breakoutUrl","controls","breakout","url","breakoutLocus","getActiveBreakoutLocus","isSelfJoined","self","state","_JOINED_","isSelfMoved","_LEFT_","reason","_MOVED_","deviceFromNewLocus","MeetingsUtil","getThisDevice","internal","device","isResourceMovedOnThisDevice","isNewLocusJoinThisDevice","joinedOnThisDevice","isBreakoutLocusJoinThisDevice","joinedWith","correlationId","_breakoutLocus$joined2","_deviceFromNewLocus$r","breakoutReplaceAt","replaces","replaceAt","newLocusReplaceAt","removed","isNeedHandleLocusDTO","_newLocus$self5","_newLocus$self6","_newLocus$self7","_newLocus$self7$devic","_newLocus$self7$devic2","_newLocus$self8","_newLocus$self8$devic","_newLocus$self8$devic2","isNewLocusAsBreakout","isBreakoutLocusDTO","isSelfMovedToLobby","devices","intent","_ON_HOLD_LOBBY_","type","_WAIT_","_newLocus$fullState","_newLocus$self9","fullState","active","getCorrespondingMeetingByLocus","data","_data$locus$info","_data$locus","_data$locus$info2","getByKey","MEETING_KEY","LOCUS_URL","locusUrl","CORRELATION_ID","checkForCorrelationId","locus","SIP_URI","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","MEETINGNUMBER","webExMeetingId","handleLocusEvent","_data$locus2","_data$locus2$replaces","_this2","useRandomDelayForInfo","locusInfo","updateMainSessionLocusCache","LOCUS","STATE","INACTIVE","create","DESTINATION_TYPE","LOCUS_ID","then","newMeeting","initialSetup","checkHandleBreakoutLocus","catch","finally","getMeetingByType","_ID_","id","newMetrics","submitClientEvent","name","payload","trigger","meetingId","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","_MEETING_","_JOIN_","_INCOMING_","parse","handleLocusMercury","envelope","eventType","LOCUSEVENT","MESSAGE_ROAP","handleMercuryOffline","MEETINGS_NETWORK_DISCONNECTED","listenForEvents","_this3","mercury","on","LOCUS_MERCURY","ROAP","ROAP_MERCURY","handleRoapMercury","ONLINE","syncMeetings","keepOnlyLocusMeetings","OFFLINE","stopListeningForEvents","off","_this4","once","READY","StaticConfig","config","LoggerConfig","logging","setLogger","meetingInfo","experimental","enableUnifiedMeetings","MeetingInfoV2","MeetingInfo","PersonalMeetingRoom","MEETINGS_READY","checkH264Support","disableNotifications","Metrics","_toggleUnifiedMeetings","changeState","_this$config","_this$config$experime","_toggleAdhocMeetings","_this$config2","_this$config2$experim","enableAdhocMeetings","_toggleTcpReachability","newValue","enableTcpReachability","_toggleTlsReachability","enableTlsReachability","register","_this5","canAuthorize","_promise","reject","Error","resolve","all","fetchUserPreferredWebexSite","getGeoHint","startReachability","message","connect","MEETINGS_REGISTERED","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_FAILED","stack","unregister","_this6","disconnect","MEETINGS_UNREGISTERED","uploadLogs","_this7","uploadResult","UPLOAD_LOGS_SUCCESS","MEETING_LOG_UPLOAD_SUCCESS","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","code","getReachability","gatherReachability","_this8","fetchGeoHint","res","geoHintInfo","_this9","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","services","_getCatalog","addAllowedDomains","user","_user$userPreferences","_user$userPreferences2","userPreferences","userPreferencesItems","preferredWebExSite","getPersonalMeetingRoom","destroy","MeetingUtil","cleanUp","delete","MEETING_REMOVED","destination","_this10","infoExtraParams","failOnMissingMeetingInfo","callStateForMetrics","meetingLookupUrl","sessionCorrelationId","fetchInfoOptions","SpaceIDDeprecatedError","targetDest","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","autoUploadLogs","_createdMeeting$locus","_createdMeeting$locus2","_createdMeeting$locus3","_createdMeeting$locus4","_createdMeeting$locus5","_createdMeeting$locus6","callStart","lastActive","locussessionid","sessionId","feedbackId","locusId","autoupload","REQUEST_UPLOAD_LOGS","meetingInstance","_meetingInstance$locu","_meetingInstance$locu2","_meetingInstance$locu3","_meetingInstance$locu4","_meetingInstance$locu5","_meetingInstance$locu6","setCallStateForMetrics","_createMeeting","_callee3","_destination$fullStat","waitingTime","startTime","startTimeDate","startTimeDatestamp","timeToStart","maxWaitingTime","isMeetingActive","meetingInfoOptions","meetingAddedType","_args3","_callee3$","_context3","Meeting","userId","deviceUrl","orgId","meetingInfoProvider","destinationType","Date","getTime","_now","Math","max","min","MAX_RANDOM_DELAY_FOR_MEETING_INFO","round","random","extraParams","sendCAevents","injectMeetingInfo","ONE_ON_ONE_CALL","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","parseMeetingInfo","t0","CaptchaError","PasswordError","PermissionError","MEETING_REMOVED_REASON","MISSING_MEETING_INFO","NoMeetingInfoError","sipUri","setSipUri","getMeetingAddedType","finish","_x3","getAllMeetings","getAll","_this11","_ref3","_ref3$keepOnlyLocusMe","isUnverifiedGuest","getActiveMeetings","locusArray","activeLocusUrl","loci","lociToUpdate","sortLocusArrayToUpdate","meetingsCollection","_keys","_i","_Object$values","_values","includes","NO_MEETINGS_TO_SYNC","_this12","mainLoci","breakoutLoci","isValidBreakoutLocus","breakoutLocusForHandleLater","_toConsumableArray2","associateMainLocus","find","mainLocus","_mainLocus$controls","_mainLocus$controls$b","_breakoutLocus$contro","_breakoutLocus$contro2","existCorrespondingMeeting","newCreatedLocus","existIndex","findIndex","_breakoutLocus$contro3","_breakoutLocus$contro4","_newCreatedLocus$cont","_newCreatedLocus$cont2","associateBreakoutLocus","splice","getLogger","getActiveWebrtcMeeting","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\nimport {union} from 'lodash';\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-metrics';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport * as mediaHelpersModule from '@webex/media-helpers';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport LoggerConfig from '../common/logs/logger-config';\nimport StaticConfig from '../common/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport LoggerRequest from '../common/logs/request';\nimport Trigger from '../common/events/trigger-proxy';\nimport Media from '../media';\nimport MeetingUtil from '../meeting/util';\nimport {\n MEETINGS,\n EVENTS,\n EVENT_TRIGGERS,\n READY,\n LOCUSEVENT,\n MAX_RANDOM_DELAY_FOR_MEETING_INFO,\n ROAP,\n ONLINE,\n OFFLINE,\n _MEETING_,\n _JOIN_,\n _INCOMING_,\n LOCUS,\n _LEFT_,\n _ID_,\n MEETING_REMOVED_REASON,\n _JOINED_,\n _MOVED_,\n _ON_HOLD_LOBBY_,\n _WAIT_,\n DESTINATION_TYPE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport MeetingInfo from '../meeting-info';\nimport MeetingInfoV2 from '../meeting-info/meeting-info-v2';\nimport Meeting, {CallStateForMetrics} from '../meeting';\nimport PersonalMeetingRoom from '../personal-meeting-room';\nimport Reachability from '../reachability';\nimport Request from './request';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport MeetingCollection from './collection';\nimport {MEETING_KEY, INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';\nimport MeetingsUtil from './util';\nimport PermissionError from '../common/errors/permission';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\nimport NoMeetingInfoError from '../common/errors/no-meeting-info';\n\nlet mediaLogger;\n\nclass MediaLogger {\n info(...args) {\n LoggerProxy.logger.info(...args);\n }\n\n log(...args) {\n LoggerProxy.logger.log(...args);\n }\n\n error(...args) {\n LoggerProxy.logger.error(...args);\n }\n\n warn(...args) {\n LoggerProxy.logger.warn(...args);\n }\n\n trace(...args) {\n LoggerProxy.logger.trace(...args);\n }\n\n debug(...args) {\n LoggerProxy.logger.debug(...args);\n }\n}\n/**\n * Meetings Ready Event\n * Emitted when the meetings instance on webex is ready\n * @event meetings:ready\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Network Disconnected Event\n * Emitted when the meetings instance is disconnected from\n * the internal mercury server\n * @event network:disconnected\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Registered Event\n * Emitted when the meetings instance has been registered and listening\n * @event meetings:registered\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meeting Removed Event\n * Emitted when a meeting was removed from the cache of meetings\n * @event meeting:removed\n * @instance\n * @type {Object}\n * @property {String} meetingId the removed meeting\n * @property {Object} response the server response\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Meeting Added Event\n * Emitted when a meeting was added to the cache of meetings\n * @event meeting:added\n * @instance\n * @type {Object}\n * @property {String} meetingId the added meeting\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Maintain a cache of meetings and sync with services.\n * @class\n */\nexport default class Meetings extends WebexPlugin {\n loggerRequest: any;\n media: any;\n meetingCollection: any;\n personalMeetingRoom: any;\n preferredWebexSite: any;\n reachability: Reachability;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n mediaHelpers: any;\n breakoutLocusForHandleLater: any;\n namespace = MEETINGS;\n\n /**\n * Initializes the Meetings Plugin\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app\n * to be able to call media helper functions.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.mediaHelpers = mediaHelpersModule;\n\n /**\n * The Meetings request to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.request = new Request({}, {parent: this.webex});\n /**\n * Log upload request helper\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.loggerRequest = new LoggerRequest({webex: this.webex});\n this.meetingCollection = new MeetingCollection();\n /**\n * The PersonalMeetingRoom object to interact with server\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this.personalMeetingRoom = null;\n\n /**\n * The Reachability object to interact with server\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\n\n /**\n * If the meetings plugin has been registered and listening via {@link Meetings#register}\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Meetings\n */\n this.registered = false;\n\n /**\n * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}\n * @instance\n * @type {String}\n * @private\n * @memberof Meetings\n */\n this.preferredWebexSite = '';\n\n /**\n * The public interface for the internal Media util files. These are helpful to expose outside the context\n * of a meeting so that a user can access media without creating a meeting instance.\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.media = {\n getUserMedia: Media.getUserMedia,\n };\n\n this.onReady();\n }\n\n /**\n * check whether you need to handle this main session's locus data or not\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleMainLocus(meeting: any, newLocus: any) {\n const breakoutUrl = newLocus.controls?.breakout?.url;\n const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);\n\n const isSelfJoined = newLocus?.self?.state === _JOINED_;\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n // @ts-ignore\n const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);\n const isResourceMovedOnThisDevice =\n deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;\n\n const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(\n meeting,\n newLocus,\n // @ts-ignore\n this.webex.internal.device.url\n );\n const isBreakoutLocusJoinThisDevice =\n breakoutLocus?.joinedWith?.correlationId &&\n breakoutLocus.joinedWith.correlationId === meeting?.correlationId;\n\n if (isSelfJoined && isNewLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'\n );\n if (breakoutLocus?.joinedWith && deviceFromNewLocus) {\n const breakoutReplaceAt =\n breakoutLocus.joinedWith.replaces?.length > 0\n ? breakoutLocus.joinedWith.replaces[0].replaceAt\n : '';\n const newLocusReplaceAt =\n deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';\n if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`\n );\n\n return false;\n }\n }\n\n return true;\n }\n if (isBreakoutLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`\n );\n\n return false;\n }\n if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'\n );\n\n return false;\n }\n if (isSelfJoined && isResourceMovedOnThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'\n );\n\n return false;\n }\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'\n );\n\n return true;\n }\n\n /**\n * check whether you need to handle this locus data or not\n * @param {Object} meeting old locus data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleLocusDTO(meeting: any, newLocus: any) {\n if (newLocus) {\n const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n const isSelfMovedToLobby =\n newLocus?.self?.devices[0]?.intent?.reason === _ON_HOLD_LOBBY_ &&\n newLocus?.self?.devices[0]?.intent?.type === _WAIT_;\n if (!meeting) {\n if (isNewLocusAsBreakout) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`\n );\n\n return newLocus.self?.state === _JOINED_;\n }\n\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n if (!isNewLocusAsBreakout) {\n return isSelfMovedToLobby || this.isNeedHandleMainLocus(meeting, newLocus);\n }\n\n return !isSelfMoved;\n }\n\n return true;\n }\n\n /**\n * get corresponding meeting object by locus data\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @returns {Object}\n * @private\n * @memberof Meetings\n */\n getCorrespondingMeetingByLocus(data) {\n // getting meeting by correlationId. This will happen for the new event\n // Either the locus\n // TODO : Add check for the callBack Address\n return (\n this.meetingCollection.getByKey(MEETING_KEY.LOCUS_URL, data.locusUrl) ||\n // @ts-ignore\n this.meetingCollection.getByKey(\n MEETING_KEY.CORRELATION_ID,\n // @ts-ignore\n MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)\n ) ||\n this.meetingCollection.getByKey(\n MEETING_KEY.SIP_URI,\n data.locus.self &&\n data.locus.self.callbackInfo &&\n data.locus.self.callbackInfo.callbackAddress\n ) ||\n (data.locus.info?.isUnifiedSpaceMeeting\n ? undefined\n : this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n data.locus.conversationUrl\n )) ||\n this.meetingCollection.getByKey(MEETING_KEY.MEETINGNUMBER, data.locus?.info?.webExMeetingId)\n );\n }\n\n /**\n * handle locus events and takes meeting actions with them as they come in\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {String} data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {\n let meeting = this.getCorrespondingMeetingByLocus(data);\n\n // Special case when locus has got replaced, This only happend once if a replace locus exists\n // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call\n\n if (!meeting && data.locus?.replaces?.length > 0) {\n // Always the last element in the replace is the active one\n meeting = this.meetingCollection.getByKey(\n MEETING_KEY.LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\n\n if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {\n meeting.locusInfo.updateMainSessionLocusCache(data.locus);\n }\n if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {\n LoggerProxy.logger.log(\n `Meetings:index#handleLocusEvent --> doesn't need to process locus event`\n );\n\n return;\n }\n if (!meeting) {\n // TODO: create meeting when we get a meeting object\n // const checkForEnded = (locus) => {\n // TODO: you already ended the meeting but you got an event later\n // Mainly for 1:1 Callsor meeting\n // Happens mainly after refresh\n\n // 1:1 Meeting\n // 1) You ended a call before but you got a mercury event\n // Make sure end the call and cleanup the meeting only if the mercury\n // event says so\n // 2) Maintain lastSync time in the meetings object which helps to compare\n // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid\n\n // For space Meeting\n // Check the locus object and see who has joined\n\n // };\n // rather then locus object change to locus url\n\n if (\n data.locus &&\n data.locus.fullState &&\n data.locus.fullState.state === LOCUS.STATE.INACTIVE\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object\n // Any future events will be neglected\n\n if (\n data.locus &&\n data.locus.self &&\n data.locus.self.state === _LEFT_ &&\n data.locus.self.removed === true\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n this.create(data.locus, DESTINATION_TYPE.LOCUS_ID, useRandomDelayForInfo)\n .then((newMeeting) => {\n meeting = newMeeting;\n\n // It's a new meeting so initialize the locus data\n meeting.locusInfo.initialSetup(data.locus);\n this.checkHandleBreakoutLocus(data.locus);\n })\n .catch((e) => {\n LoggerProxy.logger.error(e);\n })\n .finally(() => {\n // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted\n // because the other user left so before sending 'added' event make sure it exists in the collection\n\n if (this.getMeetingByType(_ID_, meeting.id)) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-started',\n payload: {\n trigger: 'mercury-event',\n },\n options: {\n meetingId: meeting.id,\n },\n });\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'handleLocusEvent',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_,\n }\n );\n } else {\n // Meeting got added but was not found in the collection. It might have got destroyed\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event'\n );\n }\n });\n } else {\n meeting.locusInfo.parse(meeting, data);\n }\n }\n\n /**\n * handles locus events through mercury that are not roap\n * @param {Object} envelope\n * @param {Object} envelope.data\n * @param {String} envelope.data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusMercury(envelope: {data: any}) {\n const {data} = envelope;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {\n this.handleLocusEvent(data, true);\n }\n }\n\n /**\n * handles mecury offline event\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleMercuryOffline() {\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'handleMercuryOffline',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n }\n\n /**\n * registers for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private listenForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {\n this.handleLocusMercury(envelope);\n });\n // @ts-ignore\n this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {\n MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n this.syncMeetings({keepOnlyLocusMeetings: false});\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n this.handleMercuryOffline();\n });\n }\n\n /**\n * stops listening for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private stopListeningForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n }\n\n /**\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private onReady() {\n // @ts-ignore\n this.webex.once(READY, () => {\n // @ts-ignore\n StaticConfig.set(this.config);\n // @ts-ignore\n LoggerConfig.set(this.config.logging);\n // @ts-ignore\n LoggerProxy.set(this.webex.logger);\n\n mediaLogger = new MediaLogger();\n setLogger(mediaLogger);\n\n /**\n * The MeetingInfo object to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.meetingInfo = this.config.experimental.enableUnifiedMeetings\n ? // @ts-ignore\n new MeetingInfoV2(this.webex)\n : // @ts-ignore\n new MeetingInfo(this.webex);\n // @ts-ignore\n this.personalMeetingRoom = new PersonalMeetingRoom(\n {meetingInfo: this.meetingInfo},\n // @ts-ignore\n {parent: this.webex}\n );\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'onReady',\n },\n EVENT_TRIGGERS.MEETINGS_READY\n );\n\n MeetingsUtil.checkH264Support({disableNotifications: true});\n // @ts-ignore\n Metrics.initialSetup(this.webex);\n });\n }\n\n /**\n * API to toggle unified meetings\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleUnifiedMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings = changeState;\n // @ts-ignore\n this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);\n }\n }\n\n /**\n * API to toggle starting adhoc meeting\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleAdhocMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableAdhocMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableAdhocMeetings = changeState;\n }\n }\n\n /**\n * API to toggle TCP reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTcpReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTcpReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTcpReachability = newValue;\n }\n }\n\n /**\n * API to toggle TLS reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTlsReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTlsReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTlsReachability = newValue;\n }\n }\n\n /**\n * Explicitly sets up the meetings plugin by registering\n * the device, connecting to mercury, and listening for locus events.\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n public register() {\n // @ts-ignore\n if (!this.webex.canAuthorize) {\n LoggerProxy.logger.error(\n 'Meetings:index#register --> ERROR, Unable to register, SDK cannot authorize'\n );\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#register --> INFO, Meetings plugin already registered'\n );\n\n return Promise.resolve();\n }\n\n return Promise.all([\n this.fetchUserPreferredWebexSite(),\n this.getGeoHint(),\n this.startReachability('registration').catch((error) => {\n LoggerProxy.logger.error(`Meetings:index#register --> GDM error, ${error.message}`);\n }),\n // @ts-ignore\n this.webex.internal.device\n .register()\n // @ts-ignore\n .then(() =>\n LoggerProxy.logger.info(\n // @ts-ignore\n `Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`\n )\n )\n // @ts-ignore\n .then(() => this.webex.internal.mercury.connect()),\n MeetingsUtil.checkH264Support.call(this),\n ])\n .then(() => {\n this.listenForEvents();\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'register',\n },\n EVENT_TRIGGERS.MEETINGS_REGISTERED\n );\n this.registered = true;\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_SUCCESS);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#register --> ERROR, Unable to register, ${error.message}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_FAILED, {\n reason: error.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Explicitly tears down the meetings plugin by deregistering\n * the device, disconnecting from mercury, and stops listening to locus events\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n unregister() {\n if (!this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#unregister --> INFO, Meetings plugin already unregistered'\n );\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return (\n // @ts-ignore\n this.webex.internal.mercury\n .disconnect()\n // @ts-ignore\n .then(() => this.webex.internal.device.unregister())\n .then(() => {\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'unregister',\n },\n EVENT_TRIGGERS.MEETINGS_UNREGISTERED\n );\n this.registered = false;\n })\n );\n }\n\n /**\n * Creates a noise reduction effect\n *\n * @param {INoiseReductionEffect} options optional custom effect options\n * @returns {Promise<effect>} noise reduction effect.\n * @public\n * @memberof Meetings\n */\n createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});\n };\n\n /**\n * Creates a virtual background effect\n *\n * @param {IVirtualBackgroundEffect} options optional custom effect options\n * @returns {Promise<effect>} virtual background effect.\n * @public\n * @memberof Meetings\n */\n createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});\n };\n\n /**\n * Uploads logs to the webex services for tracking\n * @param {Object} [options={}]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.feedbackId] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.meetingId] webex meeting ID\n * @param {String} [options.userId] userId\n * @param {String} [options.orgId] org id\n * @returns {String} feedback ID logs were submitted under\n */\n uploadLogs(\n options: {\n autoupload?: boolean;\n callStart?: string;\n feedbackId?: string;\n locussessionid?: string;\n locusId?: string;\n correlationId?: string;\n meetingId?: string;\n userId?: string;\n orgId?: string;\n } = {}\n ) {\n LoggerProxy.logger.info('Meetings:index#uploadLogs --> uploading logs');\n\n return this.loggerRequest\n .uploadLogs(options)\n .then((uploadResult) => {\n LoggerProxy.logger.info(\n 'Meetings:index#uploadLogs --> Upload logs for meeting completed.',\n uploadResult\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,\n {\n meetingId: options.meetingId,\n details: uploadResult,\n }\n );\n\n return uploadResult;\n })\n .catch((uploadError) => {\n LoggerProxy.logger.error(\n 'Meetings:index#uploadLogs --> Unable to upload logs for meeting',\n uploadError\n );\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,\n {\n meetingId: options.meetingId,\n reason: uploadError,\n }\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {\n ...options,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * gets the reachability instance for Meetings\n * @returns {Reachability}\n * @public\n * @memberof Meetings\n */\n getReachability() {\n return this.reachability;\n }\n\n /**\n * initializes and starts gathering reachability for Meetings\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability(trigger = 'client') {\n return this.getReachability().gatherReachability(trigger);\n }\n\n /**\n * Get geoHint for info for meetings\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n getGeoHint() {\n return this.request.fetchGeoHint().then((res) => {\n this.geoHintInfo = res;\n });\n }\n\n /**\n * Fetch user preferred webex site information\n * This also has other infomation about the user\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n fetchUserPreferredWebexSite() {\n return this.request.getMeetingPreferences().then((res) => {\n if (res) {\n const preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n }\n\n // fall back to getting the preferred site from the user information\n if (!this.preferredWebexSite) {\n // @ts-ignore\n return this.webex.internal.user\n .get()\n .then((user) => {\n const preferredWebexSite =\n user?.userPreferences?.userPreferencesItems?.preferredWebExSite;\n if (preferredWebexSite) {\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n } else {\n throw new Error('site not found');\n }\n })\n .catch(() => {\n LoggerProxy.logger.error(\n 'Failed to fetch preferred site from user - no site will be set'\n );\n });\n }\n\n return Promise.resolve();\n });\n }\n\n /**\n * gets the personal meeting room instance, for saved PMR values for this user\n * @returns {PersonalMeetingRoom}\n * @public\n * @memberof Meetings\n */\n\n getPersonalMeetingRoom() {\n return this.personalMeetingRoom;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} reason\n * @param {String} type\n * @returns {Undefined}\n * @private\n * @memberof Meetings\n */\n private destroy(meeting: Meeting, reason: object) {\n MeetingUtil.cleanUp(meeting);\n this.meetingCollection.delete(meeting.id);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'destroy',\n },\n EVENT_TRIGGERS.MEETING_REMOVED,\n {\n meetingId: meeting.id,\n reason,\n }\n );\n }\n\n /**\n * Create a meeting or return an existing meeting.\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {string} destination - sipURL, phonenumber, or locus object}\n * @param {DESTINATION_TYPE} [type] - the optional specified type, such as locusId\n * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {string} correlationId - the optional specified correlationId (callStateForMetrics.correlationId can be provided instead)\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @param {string} sessionCorrelationId - the optional specified sessionCorrelationId (callStateForMetrics.sessionCorrelationId) can be provided instead\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(\n destination: string,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n correlationId: string = undefined,\n failOnMissingMeetingInfo = false,\n callStateForMetrics: CallStateForMetrics = undefined,\n meetingInfo = undefined,\n meetingLookupUrl = undefined,\n sessionCorrelationId: string = undefined\n ) {\n // Validate meeting information based on the provided destination and\n // type. This must be performed prior to determining if the meeting is\n // found in the collection, as we mutate the destination for hydra person\n // id values.\n\n if (correlationId) {\n callStateForMetrics = {...(callStateForMetrics || {}), correlationId};\n }\n\n if (sessionCorrelationId) {\n callStateForMetrics = {...(callStateForMetrics || {}), sessionCorrelationId};\n }\n\n return (\n this.meetingInfo\n .fetchInfoOptions(destination, type)\n // Catch a failure to fetch info options.\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`\n );\n if (error instanceof SpaceIDDeprecatedError) {\n throw new SpaceIDDeprecatedError();\n }\n })\n .then((options: any = {}) => {\n // Normalize the destination.\n const targetDest = options.destination || destination;\n\n // check for the conversation URL then sip Url\n let meeting = null;\n\n if (\n type === DESTINATION_TYPE.CONVERSATION_URL ||\n options.type === DESTINATION_TYPE.CONVERSATION_URL\n ) {\n const foundMeeting = this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n targetDest\n );\n\n if (foundMeeting) {\n const foundMeetingIsNotCalendarMeeting = !foundMeeting.locusInfo.scheduledMeeting;\n\n // If the found meeting is not a calendar meeting, return that meeting.\n // This allows for the creation of instant-meetings when calendar meetings are present.\n if (foundMeetingIsNotCalendarMeeting) {\n meeting = foundMeeting;\n }\n }\n }\n\n // Attempt to collect the meeting if it exists.\n if (!meeting) {\n meeting = this.meetingCollection.getByKey(MEETING_KEY.SIP_URI, targetDest);\n }\n\n // Validate if a meeting was found.\n if (!meeting) {\n // Create a meeting based on the normalized destination and type.\n return this.createMeeting(\n targetDest,\n type,\n useRandomDelayForInfo,\n infoExtraParams,\n callStateForMetrics,\n failOnMissingMeetingInfo,\n meetingInfo,\n meetingLookupUrl\n ).then((createdMeeting: any) => {\n // If the meeting was successfully created.\n if (createdMeeting && createdMeeting.on) {\n // Create a destruction event for the meeting.\n createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: createdMeeting.locusInfo?.fullState?.lastActive,\n locussessionid: createdMeeting.locusInfo?.fullState?.sessionId,\n correlationId: createdMeeting.correlationId,\n feedbackId: createdMeeting.correlationId,\n locusId: createdMeeting.locusId,\n meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n }).then(() => this.destroy(createdMeeting, payload.reason));\n } else {\n this.destroy(createdMeeting, payload.reason);\n }\n });\n\n createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: meetingInstance?.locusInfo?.fullState?.lastActive,\n locussessionid: meetingInstance?.locusInfo?.fullState?.sessionId,\n correlationId: meetingInstance.correlationId,\n feedbackId: meetingInstance.correlationId,\n locusId: meetingInstance.locusId,\n meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n });\n }\n });\n } else {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`\n );\n }\n\n // Return the newly created meeting.\n return Promise.resolve(createdMeeting);\n });\n }\n meeting.setCallStateForMetrics(callStateForMetrics);\n\n // Return the existing meeting.\n return Promise.resolve(meeting);\n })\n );\n }\n\n /**\n * Create meeting\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {String} destination see create()\n * @param {DESTINATION_TYPE} type see create()\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @returns {Promise} a new meeting instance complete with meeting info and destination\n * @private\n * @memberof Meetings\n */\n private async createMeeting(\n destination: any,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n callStateForMetrics: CallStateForMetrics = undefined,\n failOnMissingMeetingInfo = false,\n meetingInfo = undefined,\n meetingLookupUrl = undefined\n ) {\n const meeting = new Meeting(\n {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n // @ts-ignore\n deviceUrl: this.webex.internal.device.url,\n // @ts-ignore\n orgId: this.webex.internal.device.orgId,\n locus: type === DESTINATION_TYPE.LOCUS_ID ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\n callStateForMetrics,\n },\n {\n // @ts-ignore\n parent: this.webex,\n }\n );\n\n this.meetingCollection.set(meeting);\n\n try {\n // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,\n // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo\n // between 5 and 2 min (random between 3 minutes) before the meeting starts\n // to avoid a spike in traffic to the wbxappi service\n let waitingTime = 0;\n\n if (destination.meeting) {\n const {startTime} = destination.meeting;\n const startTimeDate = new Date(startTime);\n const startTimeDatestamp = startTimeDate.getTime();\n const timeToStart = startTimeDatestamp - Date.now();\n const maxWaitingTime = Math.max(\n Math.min(timeToStart, MAX_RANDOM_DELAY_FOR_MEETING_INFO),\n 0\n );\n\n waitingTime = Math.round(Math.random() * maxWaitingTime);\n }\n const isMeetingActive = !!destination.fullState?.active;\n // @ts-ignore\n const {enableUnifiedMeetings} = this.config.experimental;\n const meetingInfoOptions = {\n extraParams: infoExtraParams,\n sendCAevents: !!callStateForMetrics?.correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n };\n\n if (meetingInfo) {\n meeting.injectMeetingInfo(meetingInfo, meetingInfoOptions, meetingLookupUrl);\n } else if (type !== DESTINATION_TYPE.ONE_ON_ONE_CALL) {\n // ignore fetchMeetingInfo for 1:1 meetings\n if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {\n meeting.fetchMeetingInfoTimeoutId = setTimeout(\n () => meeting.fetchMeetingInfo(meetingInfoOptions),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo(meetingInfoOptions);\n }\n }\n } catch (err) {\n if (\n !(err instanceof CaptchaError) &&\n !(err instanceof PasswordError) &&\n !(err instanceof PermissionError)\n ) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\n if (failOnMissingMeetingInfo) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`\n );\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);\n throw new NoMeetingInfoError();\n }\n // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n 'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'\n );\n }\n LoggerProxy.logger.debug(\n `Meetings:index#createMeeting --> Debug ${err} fetching /meetingInfo for creation.`\n );\n } finally {\n // For type LOCUS_ID we need to parse the locus object to get the information\n // about the caller and callee\n // Meeting Added event will be created in `handleLocusEvent`\n if (type !== DESTINATION_TYPE.LOCUS_ID) {\n if (!meeting.sipUri) {\n meeting.setSipUri(destination);\n }\n\n // TODO: check if we have to move this to parser\n const meetingAddedType = MeetingsUtil.getMeetingAddedType(type);\n\n // We typically shouldn't need to trigger both and event and return a promise.\n // Is this a special case? We want to make the public API usage as simple as possible.\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'createMeeting',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meetingAddedType,\n }\n );\n }\n }\n\n return meeting;\n\n // Create the meeting calling the necessary service endpoints.\n\n // Internally, there are many more destinations:\n //\n // - locusID\n // - meetingURL\n // - globalMeetingID, e.g, *00*meetingID\n // - meetingID\n // - meetingURL\n // - PSTN\n // - phone number\n //\n // Our job is to determine the appropriate one\n // and its corresponding service so that developers\n // need only sipURL to get a meeting\n // and its ID, but have the option to use createWithType()\n // and specify those types to get meetingInfo\n }\n\n /**\n * get a specifc meeting given it's type matched to the value, i.e., locus url\n * @param {String} type\n * @param {Object} value\n * @returns {Meeting}\n * @public\n * @memberof Meetings\n */\n public getMeetingByType(type: string, value: object) {\n return this.meetingCollection.getByKey(type, value);\n }\n\n /**\n * Get all meetings.\n * @returns {Object} All currently active meetings.\n * @public\n * @memberof Meetings\n */\n public getAllMeetings() {\n return this.meetingCollection.getAll();\n }\n\n /**\n * Syncs all the meetings from server. Does nothing and returns immediately if unverified guest.\n * @param {boolean} keepOnlyLocusMeetings - whether the sync should keep only locus meetings or any other meeting in meetingCollection\n * @returns {Promise<void>}\n * @public\n * @memberof Meetings\n */\n public syncMeetings({keepOnlyLocusMeetings = true} = {}): Promise<void> {\n // @ts-ignore\n if (this.webex.credentials.isUnverifiedGuest) {\n LoggerProxy.logger.info(\n 'Meetings:index#syncMeetings --> skipping meeting sync as unverified guest'\n );\n\n return Promise.resolve();\n }\n\n return this.request\n .getActiveMeetings()\n .then((locusArray) => {\n const activeLocusUrl = [];\n\n if (locusArray?.loci && locusArray.loci.length > 0) {\n const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);\n lociToUpdate.forEach((locus) => {\n activeLocusUrl.push(locus.url);\n this.handleLocusEvent({\n locus,\n locusUrl: locus.url,\n });\n });\n }\n const meetingsCollection = this.meetingCollection.getAll();\n\n if (Object.keys(meetingsCollection).length > 0) {\n // Sometimes the mercury events are lost after mercury reconnect\n // Remove any Locus meetings that are not returned by Locus\n // (they had a locusUrl previously but are no longer active) in the sync\n for (const meeting of Object.values(meetingsCollection)) {\n // @ts-ignore\n const {locusUrl} = meeting;\n if ((keepOnlyLocusMeetings || locusUrl) && !activeLocusUrl.includes(locusUrl)) {\n // destroy function also uploads logs\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);\n }\n }\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#syncMeetings --> failed to sync meetings, ${error}`\n );\n throw new Error(error);\n });\n }\n\n /**\n * sort out locus array for initial creating\n * @param {Array} loci original locus array\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n sortLocusArrayToUpdate(loci: any[]) {\n const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));\n const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));\n this.breakoutLocusForHandleLater = [];\n const lociToUpdate = [...mainLoci];\n breakoutLoci.forEach((breakoutLocus) => {\n const associateMainLocus = mainLoci.find(\n (mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url\n );\n const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({\n locus: breakoutLocus,\n locusUrl: breakoutLocus.url,\n });\n\n if (associateMainLocus && !existCorrespondingMeeting) {\n // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,\n // after meeting create with main locus, then handle the associate breakout locus.\n // if only handle breakout locus, will miss some date\n this.breakoutLocusForHandleLater.push(breakoutLocus);\n } else {\n lociToUpdate.push(breakoutLocus);\n }\n });\n\n return lociToUpdate;\n }\n\n /**\n * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus\n * @param {Object} newCreatedLocus the locus which just create meeting object of it\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n checkHandleBreakoutLocus(newCreatedLocus) {\n if (\n !newCreatedLocus ||\n !this.breakoutLocusForHandleLater ||\n !this.breakoutLocusForHandleLater.length\n ) {\n return;\n }\n if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {\n return;\n }\n const existIndex = this.breakoutLocusForHandleLater.findIndex(\n (breakoutLocus) =>\n breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url\n );\n\n if (existIndex < 0) {\n return;\n }\n\n const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];\n this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});\n this.breakoutLocusForHandleLater.splice(existIndex, 1);\n }\n\n /**\n * Get the logger instance for plugin-meetings\n * @returns {Logger}\n */\n getLogger() {\n return LoggerProxy.get();\n }\n\n /**\n * Returns the first meeting it finds that has the webrtc media connection created.\n * Useful for debugging in the console.\n *\n * @private\n * @returns {Meeting} Meeting object that has a webrtc media connection, else undefined\n */\n getActiveWebrtcMeeting() {\n return this.meetingCollection.getActiveWebrtcMeeting();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AAEA,IAAAG,kBAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAEAA,OAAA;AAEA,IAAAK,QAAA,GAAAC,sBAAA,CAAAN,OAAA;AACA,IAAAO,aAAA,GAAAD,sBAAA,CAAAN,OAAA;AACA,IAAAQ,OAAA,GAAAF,sBAAA,CAAAN,OAAA;AACA,IAAAS,YAAA,GAAAH,sBAAA,CAAAN,OAAA;AACA,IAAAU,QAAA,GAAAJ,sBAAA,CAAAN,OAAA;AACA,IAAAW,aAAA,GAAAL,sBAAA,CAAAN,OAAA;AACA,IAAAY,MAAA,GAAAN,sBAAA,CAAAN,OAAA;AACA,IAAAa,KAAA,GAAAP,sBAAA,CAAAN,OAAA;AACA,IAAAc,UAAA,GAAAd,OAAA;AAuBA,IAAAe,WAAA,GAAAT,sBAAA,CAAAN,OAAA;AACA,IAAAgB,YAAA,GAAAV,sBAAA,CAAAN,OAAA;AACA,IAAAiB,aAAA,GAAAX,sBAAA,CAAAN,OAAA;AACA,IAAAkB,QAAA,GAAAZ,sBAAA,CAAAN,OAAA;AACA,IAAAmB,oBAAA,GAAAb,sBAAA,CAAAN,OAAA;AACA,IAAAoB,aAAA,GAAAd,sBAAA,CAAAN,OAAA;AACA,IAAAqB,SAAA,GAAAf,sBAAA,CAAAN,OAAA;AACA,IAAAsB,cAAA,GAAAhB,sBAAA,CAAAN,OAAA;AACA,IAAAuB,aAAA,GAAAjB,sBAAA,CAAAN,OAAA;AACA,IAAAwB,WAAA,GAAAlB,sBAAA,CAAAN,OAAA;AACA,IAAAyB,SAAA,GAAAzB,OAAA;AACA,IAAA0B,MAAA,GAAApB,sBAAA,CAAAN,OAAA;AACA,IAAA2B,WAAA,GAAArB,sBAAA,CAAAN,OAAA;AACA,IAAA4B,YAAA,GAAA5B,OAAA;AACA,IAAA6B,cAAA,GAAAvB,sBAAA,CAAAN,OAAA;AAAkE,SAAA8B,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAA3B,wBAAA2B,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAAA,SAAAY,QAAArB,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAmB,aAAA,CAAAtB,CAAA,OAAAuB,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAvB,CAAA,GAAAE,CAAA,KAAAsB,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAvB,CAAA,WAAAW,gCAAA,CAAAb,CAAA,EAAAE,CAAA,EAAAwB,UAAA,OAAAvB,CAAA,CAAAwB,IAAA,CAAAC,KAAA,CAAAzB,CAAA,EAAAqB,CAAA,YAAArB,CAAA;AAAA,SAAA0B,cAAA7B,CAAA,aAAAE,CAAA,MAAAA,CAAA,GAAA4B,SAAA,CAAAC,MAAA,EAAA7B,CAAA,UAAAC,CAAA,WAAA2B,SAAA,CAAA5B,CAAA,IAAA4B,SAAA,CAAA5B,CAAA,QAAAA,CAAA,OAAAmB,OAAA,CAAAN,MAAA,CAAAZ,CAAA,OAAA6B,OAAA,WAAA9B,CAAA,QAAA+B,gBAAA,CAAA3B,OAAA,EAAAN,CAAA,EAAAE,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAgC,iCAAA,GAAAC,wBAAA,CAAAnC,CAAA,EAAAkC,iCAAA,CAAA/B,CAAA,KAAAkB,OAAA,CAAAN,MAAA,CAAAZ,CAAA,GAAA6B,OAAA,WAAA9B,CAAA,IAAAU,sBAAA,CAAAZ,CAAA,EAAAE,CAAA,EAAAW,gCAAA,CAAAV,CAAA,EAAAD,CAAA,iBAAAF,CAAA;AAAA,SAAAoC,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAApC,OAAA,EAAA+B,OAAA,GAAAM,MAAA,MAAAL,yBAAA,QAAAM,SAAA,OAAAF,gBAAA,CAAApC,OAAA,QAAAuC,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAL,KAAA,EAAAX,SAAA,EAAAc,SAAA,YAAAD,MAAA,GAAAF,KAAA,CAAAb,KAAA,OAAAE,SAAA,gBAAAiB,2BAAA,CAAAzC,OAAA,QAAAqC,MAAA;AAAA,SAAAJ,0BAAA,eAAAS,OAAA,qBAAAF,kBAAA,oBAAAA,kBAAA,CAAAG,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAnC,SAAA,CAAAoC,OAAA,CAAAlC,IAAA,CAAA4B,kBAAA,CAAAK,OAAA,8CAAAnD,CAAA,sBA1DlE,8DAKA;AAuDA,IAAIqD,WAAW;AAAC,IAEVC,WAAW;EAAA,SAAAA,YAAA;IAAA,IAAAC,gBAAA,CAAAjD,OAAA,QAAAgD,WAAA;EAAA;EAAA,IAAAE,aAAA,CAAAlD,OAAA,EAAAgD,WAAA;IAAAG,GAAA;IAAAC,KAAA,EACf,SAAAC,KAAA,EAAc;MAAA,IAAAC,mBAAA;MACZ,CAAAA,mBAAA,GAAAC,oBAAW,CAACC,MAAM,EAACH,IAAI,CAAA/B,KAAA,CAAAgC,mBAAA,EAAA9B,SAAQ,CAAC;IAClC;EAAC;IAAA2B,GAAA;IAAAC,KAAA,EAED,SAAAK,IAAA,EAAa;MAAA,IAAAC,oBAAA;MACX,CAAAA,oBAAA,GAAAH,oBAAW,CAACC,MAAM,EAACC,GAAG,CAAAnC,KAAA,CAAAoC,oBAAA,EAAAlC,SAAQ,CAAC;IACjC;EAAC;IAAA2B,GAAA;IAAAC,KAAA,EAED,SAAAO,MAAA,EAAe;MAAA,IAAAC,oBAAA;MACb,CAAAA,oBAAA,GAAAL,oBAAW,CAACC,MAAM,EAACG,KAAK,CAAArC,KAAA,CAAAsC,oBAAA,EAAApC,SAAQ,CAAC;IACnC;EAAC;IAAA2B,GAAA;IAAAC,KAAA,EAED,SAAAS,KAAA,EAAc;MAAA,IAAAC,oBAAA;MACZ,CAAAA,oBAAA,GAAAP,oBAAW,CAACC,MAAM,EAACK,IAAI,CAAAvC,KAAA,CAAAwC,oBAAA,EAAAtC,SAAQ,CAAC;IAClC;EAAC;IAAA2B,GAAA;IAAAC,KAAA,EAED,SAAAW,MAAA,EAAe;MAAA,IAAAC,oBAAA;MACb,CAAAA,oBAAA,GAAAT,oBAAW,CAACC,MAAM,EAACO,KAAK,CAAAzC,KAAA,CAAA0C,oBAAA,EAAAxC,SAAQ,CAAC;IACnC;EAAC;IAAA2B,GAAA;IAAAC,KAAA,EAED,SAAAa,MAAA,EAAe;MAAA,IAAAC,oBAAA;MACb,CAAAA,oBAAA,GAAAX,oBAAW,CAACC,MAAM,EAACS,KAAK,CAAA3C,KAAA,CAAA4C,oBAAA,EAAA1C,SAAQ,CAAC;IACnC;EAAC;EAAA,OAAAwB,WAAA;AAAA;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAHA,IAIqBmB,QAAQ,GAAAC,OAAA,CAAApE,OAAA,0BAAAqE,YAAA;EAAA,IAAAC,UAAA,CAAAtE,OAAA,EAAAmE,QAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAAzC,YAAA,CAAAqC,QAAA;EAe3B;AACF;AACA;AACA;AACA;AACA;EACE,SAAAA,SAAA,EAAqB;IAAA,IAAAK,KAAA;IAAA,IAAAvB,gBAAA,CAAAjD,OAAA,QAAAmE,QAAA;IAAA,SAAAM,IAAA,GAAAjD,SAAA,CAAAC,MAAA,EAANiD,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,IAAApD,SAAA,CAAAoD,IAAA;IAAA;IACjBJ,KAAA,GAAAD,MAAA,CAAA3D,IAAA,CAAAU,KAAA,CAAAiD,MAAA,SAAAM,MAAA,CAASH,IAAI;;IAEb;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IARI,IAAA/C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;IAAA,IAAA7C,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA,gBAXUO,mBAAQ;IA0rBpB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE,IAAApD,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;MAAA,IAAAQ,IAAA,OAAAC,kBAAA,CAAAjF,OAAA,gBAAAkF,YAAA,CAAAlF,OAAA,CAAAmF,IAAA,CAQ6B,SAAAC,QAAOC,OAA+B;QAAA,IAAAC,SAAA;QAAA,OAAAJ,YAAA,CAAAlF,OAAA,CAAAuF,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cACjE;cACML,SAAS,GAAGd,KAAA,CAAKoB,KAAK,CAACC,WAAW,CAACC,UAAU,CAACC,YAAY;cAAA,OAAAN,QAAA,CAAAO,MAAA,WAEzD,IAAIlI,kBAAkB,CAACmI,oBAAoB,CAAA1E,aAAA;gBAAE+D,SAAS,EAATA;cAAS,GAAKD,OAAO,CAAC,CAAC;YAAA;YAAA;cAAA,OAAAI,QAAA,CAAAS,IAAA;UAAA;QAAA,GAAAd,OAAA;MAAA,CAC5E;MAAA,iBAAAe,EAAA;QAAA,OAAAnB,IAAA,CAAA1D,KAAA,OAAAE,SAAA;MAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE,IAAAG,gBAAA,CAAA3B,OAAA,MAAA8E,uBAAA,CAAA9E,OAAA,EAAAwE,KAAA;MAAA,IAAA4B,KAAA,OAAAnB,kBAAA,CAAAjF,OAAA,gBAAAkF,YAAA,CAAAlF,OAAA,CAAAmF,IAAA,CAQgC,SAAAkB,SAAOhB,OAAkC;QAAA,IAAAC,SAAA;QAAA,OAAAJ,YAAA,CAAAlF,OAAA,CAAAuF,IAAA,UAAAe,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAb,IAAA,GAAAa,SAAA,CAAAZ,IAAA;YAAA;cACvE;cACML,SAAS,GAAGd,KAAA,CAAKoB,KAAK,CAACC,WAAW,CAACC,UAAU,CAACC,YAAY;cAAA,OAAAQ,SAAA,CAAAP,MAAA,WAEzD,IAAIlI,kBAAkB,CAAC0I,uBAAuB,CAAAjF,aAAA;gBAAE+D,SAAS,EAATA;cAAS,GAAKD,OAAO,CAAC,CAAC;YAAA;YAAA;cAAA,OAAAkB,SAAA,CAAAL,IAAA;UAAA;QAAA,GAAAG,QAAA;MAAA,CAC/E;MAAA,iBAAAI,GAAA;QAAA,OAAAL,KAAA,CAAA9E,KAAA,OAAAE,SAAA;MAAA;IAAA;IAlsBCgD,KAAA,CAAKkC,YAAY,GAAG5I,kBAAkB;;IAEtC;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACA0G,KAAA,CAAKmC,OAAO,GAAG,IAAIC,iBAAO,CAAC,CAAC,CAAC,EAAE;MAACC,MAAM,EAAErC,KAAA,CAAKoB;IAAK,CAAC,CAAC;IACpD;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACApB,KAAA,CAAKsC,aAAa,GAAG,IAAIC,gBAAa,CAAC;MAACnB,KAAK,EAAEpB,KAAA,CAAKoB;IAAK,CAAC,CAAC;IAC3DpB,KAAA,CAAKwC,iBAAiB,GAAG,IAAIC,mBAAiB,CAAC,CAAC;IAChD;AACJ;AACA;AACA;AACA;AACA;AACA;IACIzC,KAAA,CAAK0C,mBAAmB,GAAG,IAAI;;IAE/B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACI;IACA1C,KAAA,CAAK2C,YAAY,GAAG,IAAIC,qBAAY,CAAC5C,KAAA,CAAKoB,KAAK,CAAC;;IAEhD;AACJ;AACA;AACA;AACA;AACA;AACA;IACIpB,KAAA,CAAK6C,UAAU,GAAG,KAAK;;IAEvB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI7C,KAAA,CAAK8C,kBAAkB,GAAG,EAAE;;IAE5B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACI9C,KAAA,CAAK+C,KAAK,GAAG;MACXC,YAAY,EAAEC,cAAK,CAACD;IACtB,CAAC;IAEDhD,KAAA,CAAKkD,OAAO,CAAC,CAAC;IAAC,OAAAlD,KAAA;EACjB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE,IAAAtB,aAAA,CAAAlD,OAAA,EAAAmE,QAAA;IAAAhB,GAAA;IAAAC,KAAA,EAQA,SAAAuE,sBAA8BC,OAAY,EAAEC,QAAa,EAAE;MAAA,IAAAC,kBAAA,EAAAC,qBAAA,EAAAC,cAAA,EAAAC,eAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,eAAA;MACzD,IAAMC,WAAW,IAAAP,kBAAA,GAAGD,QAAQ,CAACS,QAAQ,cAAAR,kBAAA,wBAAAC,qBAAA,GAAjBD,kBAAA,CAAmBS,QAAQ,cAAAR,qBAAA,uBAA3BA,qBAAA,CAA6BS,GAAG;MACpD,IAAMC,aAAa,GAAG,IAAI,CAACzB,iBAAiB,CAAC0B,sBAAsB,CAACL,WAAW,CAAC;MAEhF,IAAMM,YAAY,GAAG,CAAAd,QAAQ,aAARA,QAAQ,wBAAAG,cAAA,GAARH,QAAQ,CAAEe,IAAI,cAAAZ,cAAA,uBAAdA,cAAA,CAAgBa,KAAK,MAAKC,mBAAQ;MACvD,IAAMC,WAAW,GAAG,CAAAlB,QAAQ,aAARA,QAAQ,wBAAAI,eAAA,GAARJ,QAAQ,CAAEe,IAAI,cAAAX,eAAA,uBAAdA,eAAA,CAAgBY,KAAK,MAAKG,iBAAM,IAAI,CAAAnB,QAAQ,aAARA,QAAQ,wBAAAK,eAAA,GAARL,QAAQ,CAAEe,IAAI,cAAAV,eAAA,uBAAdA,eAAA,CAAgBe,MAAM,MAAKC,kBAAO;MAC1F;MACA,IAAMC,kBAAkB,GAAGC,cAAY,CAACC,aAAa,CAACxB,QAAQ,EAAE,IAAI,CAACjC,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACf,GAAG,CAAC;MAC/F,IAAMgB,2BAA2B,GAC/B,CAAAL,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEN,KAAK,MAAKG,iBAAM,IAAI,CAAAG,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAEF,MAAM,MAAKC,kBAAO;MAEhF,IAAMO,wBAAwB,GAAGL,cAAY,CAACM,kBAAkB,CAC9D9B,OAAO,EACPC,QAAQ;MACR;MACA,IAAI,CAACjC,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACf,GAC7B,CAAC;MACD,IAAMmB,6BAA6B,GACjC,CAAAlB,aAAa,aAAbA,aAAa,wBAAAN,qBAAA,GAAbM,aAAa,CAAEmB,UAAU,cAAAzB,qBAAA,uBAAzBA,qBAAA,CAA2B0B,aAAa,KACxCpB,aAAa,CAACmB,UAAU,CAACC,aAAa,MAAKjC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEiC,aAAa;MAEnE,IAAIlB,YAAY,IAAIc,wBAAwB,EAAE;QAC5ClG,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,+FACF,CAAC;QACD,IAAIgF,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEmB,UAAU,IAAIT,kBAAkB,EAAE;UAAA,IAAAW,sBAAA,EAAAC,qBAAA;UACnD,IAAMC,iBAAiB,GACrB,EAAAF,sBAAA,GAAArB,aAAa,CAACmB,UAAU,CAACK,QAAQ,cAAAH,sBAAA,uBAAjCA,sBAAA,CAAmCrI,MAAM,IAAG,CAAC,GACzCgH,aAAa,CAACmB,UAAU,CAACK,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,GAC9C,EAAE;UACR,IAAMC,iBAAiB,GACrB,EAAAJ,qBAAA,GAAAZ,kBAAkB,CAACc,QAAQ,cAAAF,qBAAA,uBAA3BA,qBAAA,CAA6BtI,MAAM,IAAG,CAAC,GAAG0H,kBAAkB,CAACc,QAAQ,CAAC,CAAC,CAAC,CAACC,SAAS,GAAG,EAAE;UACzF,IAAIF,iBAAiB,IAAIG,iBAAiB,IAAIH,iBAAiB,GAAGG,iBAAiB,EAAE;YACnF5G,oBAAW,CAACC,MAAM,CAACC,GAAG,qGAAAoB,MAAA,CACgFsF,iBAAiB,qBAAAtF,MAAA,CAAkBmF,iBAAiB,CAC1J,CAAC;YAED,OAAO,KAAK;UACd;QACF;QAEA,OAAO,IAAI;MACb;MACA,IAAIL,6BAA6B,EAAE;QACjCpG,oBAAW,CAACC,MAAM,CAACC,GAAG,gJAAAoB,MAAA,CAC2HwD,WAAW,CAC5J,CAAC;QAED,OAAO,KAAK;MACd;MACA,IAAIU,WAAW,KAAKlB,QAAQ,aAARA,QAAQ,gBAAAO,eAAA,GAARP,QAAQ,CAAEe,IAAI,cAAAR,eAAA,eAAdA,eAAA,CAAgBgC,OAAO,IAAIZ,2BAA2B,CAAC,EAAE;QAC3EjG,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,2IACF,CAAC;QAED,OAAO,KAAK;MACd;MACA,IAAIkF,YAAY,IAAIa,2BAA2B,EAAE;QAC/CjG,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,2HACF,CAAC;QAED,OAAO,KAAK;MACd;MACAF,oBAAW,CAACC,MAAM,CAACC,GAAG,CACpB,6FACF,CAAC;MAED,OAAO,IAAI;IACb;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAN,GAAA;IAAAC,KAAA,EAQA,SAAAiH,qBAA6BzC,OAAY,EAAEC,QAAa,EAAE;MACxD,IAAIA,QAAQ,EAAE;QAAA,IAAAyC,eAAA,EAAAC,eAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,sBAAA;QACZ,IAAMC,oBAAoB,GAAG1B,cAAY,CAAC2B,kBAAkB,CAAClD,QAAQ,CAAC;QACtE,IAAMkB,WAAW,GAAG,CAAAlB,QAAQ,aAARA,QAAQ,wBAAAyC,eAAA,GAARzC,QAAQ,CAAEe,IAAI,cAAA0B,eAAA,uBAAdA,eAAA,CAAgBzB,KAAK,MAAKG,iBAAM,IAAI,CAAAnB,QAAQ,aAARA,QAAQ,wBAAA0C,eAAA,GAAR1C,QAAQ,CAAEe,IAAI,cAAA2B,eAAA,uBAAdA,eAAA,CAAgBtB,MAAM,MAAKC,kBAAO;QAC1F,IAAM8B,kBAAkB,GACtB,CAAAnD,QAAQ,aAARA,QAAQ,wBAAA2C,eAAA,GAAR3C,QAAQ,CAAEe,IAAI,cAAA4B,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBS,OAAO,CAAC,CAAC,CAAC,cAAAR,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BS,MAAM,cAAAR,sBAAA,uBAAlCA,sBAAA,CAAoCzB,MAAM,MAAKkC,0BAAe,IAC9D,CAAAtD,QAAQ,aAARA,QAAQ,wBAAA8C,eAAA,GAAR9C,QAAQ,CAAEe,IAAI,cAAA+B,eAAA,wBAAAC,qBAAA,GAAdD,eAAA,CAAgBM,OAAO,CAAC,CAAC,CAAC,cAAAL,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4BM,MAAM,cAAAL,sBAAA,uBAAlCA,sBAAA,CAAoCO,IAAI,MAAKC,iBAAM;QACrD,IAAI,CAACzD,OAAO,EAAE;UACZ,IAAIkD,oBAAoB,EAAE;YAAA,IAAAQ,mBAAA,EAAAC,eAAA;YACxBhI,oBAAW,CAACC,MAAM,CAACC,GAAG,+FAAAoB,MAAA,EAAAyG,mBAAA,GAC0EzD,QAAQ,CAAC2D,SAAS,cAAAF,mBAAA,uBAAlBA,mBAAA,CAAoBG,MAAM,CAC1H,CAAC;YAED,OAAO,EAAAF,eAAA,GAAA1D,QAAQ,CAACe,IAAI,cAAA2C,eAAA,uBAAbA,eAAA,CAAe1C,KAAK,MAAKC,mBAAQ;UAC1C;UAEA,OAAO,IAAI,CAACnB,qBAAqB,CAACC,OAAO,EAAEC,QAAQ,CAAC;QACtD;QACA,IAAI,CAACiD,oBAAoB,EAAE;UACzB,OAAOE,kBAAkB,IAAI,IAAI,CAACrD,qBAAqB,CAACC,OAAO,EAAEC,QAAQ,CAAC;QAC5E;QAEA,OAAO,CAACkB,WAAW;MACrB;MAEA,OAAO,IAAI;IACb;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA5F,GAAA;IAAAC,KAAA,EASA,SAAAsI,+BAA+BC,IAAI,EAAE;MAAA,IAAAC,gBAAA,EAAAC,WAAA,EAAAC,iBAAA;MACnC;MACA;MACA;MACA,OACE,IAAI,CAAC9E,iBAAiB,CAAC+E,QAAQ,CAACC,qBAAW,CAACC,SAAS,EAAEN,IAAI,CAACO,QAAQ,CAAC;MACrE;MACA,IAAI,CAAClF,iBAAiB,CAAC+E,QAAQ,CAC7BC,qBAAW,CAACG,cAAc;MAC1B;MACA/C,cAAY,CAACgD,qBAAqB,CAAC,IAAI,CAACxG,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACf,GAAG,EAAEmD,IAAI,CAACU,KAAK,CAC/E,CAAC,IACD,IAAI,CAACrF,iBAAiB,CAAC+E,QAAQ,CAC7BC,qBAAW,CAACM,OAAO,EACnBX,IAAI,CAACU,KAAK,CAACzD,IAAI,IACb+C,IAAI,CAACU,KAAK,CAACzD,IAAI,CAAC2D,YAAY,IAC5BZ,IAAI,CAACU,KAAK,CAACzD,IAAI,CAAC2D,YAAY,CAACC,eACjC,CAAC,KACA,CAAAZ,gBAAA,GAAAD,IAAI,CAACU,KAAK,CAAChJ,IAAI,cAAAuI,gBAAA,eAAfA,gBAAA,CAAiBa,qBAAqB,GACnCC,SAAS,GACT,IAAI,CAAC1F,iBAAiB,CAAC+E,QAAQ,CAC7BC,qBAAW,CAACW,gBAAgB,EAC5BhB,IAAI,CAACU,KAAK,CAACO,eACb,CAAC,CAAC,IACN,IAAI,CAAC5F,iBAAiB,CAAC+E,QAAQ,CAACC,qBAAW,CAACa,aAAa,GAAAhB,WAAA,GAAEF,IAAI,CAACU,KAAK,cAAAR,WAAA,wBAAAC,iBAAA,GAAVD,WAAA,CAAYxI,IAAI,cAAAyI,iBAAA,uBAAhBA,iBAAA,CAAkBgB,cAAc,CAAC;IAEhG;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAVE;IAAA3J,GAAA;IAAAC,KAAA,EAWA,SAAA2J,iBAAyBpB,IAAoC,EAAiC;MAAA,IAAAqB,YAAA;QAAAC,qBAAA;QAAAC,MAAA;MAAA,IAA/BC,qBAAqB,GAAA3L,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,KAAK;MAC1F,IAAIoG,OAAO,GAAG,IAAI,CAAC8D,8BAA8B,CAACC,IAAI,CAAC;;MAEvD;MACA;;MAEA,IAAI,CAAC/D,OAAO,IAAI,EAAAoF,YAAA,GAAArB,IAAI,CAACU,KAAK,cAAAW,YAAA,wBAAAC,qBAAA,GAAVD,YAAA,CAAY/C,QAAQ,cAAAgD,qBAAA,uBAApBA,qBAAA,CAAsBxL,MAAM,IAAG,CAAC,EAAE;QAChD;QACAmG,OAAO,GAAG,IAAI,CAACZ,iBAAiB,CAAC+E,QAAQ,CACvCC,qBAAW,CAACC,SAAS,EACrBN,IAAI,CAACU,KAAK,CAACpC,QAAQ,CAAC0B,IAAI,CAACU,KAAK,CAACpC,QAAQ,CAACxI,MAAM,GAAG,CAAC,CAAC,CAACyK,QACtD,CAAC;MACH;MAEA,IAAItE,OAAO,IAAI,CAACwB,cAAY,CAAC2B,kBAAkB,CAACY,IAAI,CAACU,KAAK,CAAC,EAAE;QAC3DzE,OAAO,CAACwF,SAAS,CAACC,2BAA2B,CAAC1B,IAAI,CAACU,KAAK,CAAC;MAC3D;MACA,IAAI,CAAC,IAAI,CAAChC,oBAAoB,CAACzC,OAAO,EAAE+D,IAAI,CAACU,KAAK,CAAC,EAAE;QACnD9I,oBAAW,CAACC,MAAM,CAACC,GAAG,0EAEtB,CAAC;QAED;MACF;MACA,IAAI,CAACmE,OAAO,EAAE;QACZ;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA,IACE+D,IAAI,CAACU,KAAK,IACVV,IAAI,CAACU,KAAK,CAACb,SAAS,IACpBG,IAAI,CAACU,KAAK,CAACb,SAAS,CAAC3C,KAAK,KAAKyE,gBAAK,CAACC,KAAK,CAACC,QAAQ,EACnD;UACA;UACAjK,oBAAW,CAACC,MAAM,CAACK,IAAI,CACrB,2FACF,CAAC;UAED;QACF;;QAEA;QACA;;QAEA,IACE8H,IAAI,CAACU,KAAK,IACVV,IAAI,CAACU,KAAK,CAACzD,IAAI,IACf+C,IAAI,CAACU,KAAK,CAACzD,IAAI,CAACC,KAAK,KAAKG,iBAAM,IAChC2C,IAAI,CAACU,KAAK,CAACzD,IAAI,CAACwB,OAAO,KAAK,IAAI,EAChC;UACA;UACA7G,oBAAW,CAACC,MAAM,CAACK,IAAI,CACrB,2FACF,CAAC;UAED;QACF;QAEA,IAAI,CAAC4J,MAAM,CAAC9B,IAAI,CAACU,KAAK,EAAEqB,2BAAgB,CAACC,QAAQ,EAAER,qBAAqB,CAAC,CACtES,IAAI,CAAC,UAACC,UAAU,EAAK;UACpBjG,OAAO,GAAGiG,UAAU;;UAEpB;UACAjG,OAAO,CAACwF,SAAS,CAACU,YAAY,CAACnC,IAAI,CAACU,KAAK,CAAC;UAC1Ca,MAAI,CAACa,wBAAwB,CAACpC,IAAI,CAACU,KAAK,CAAC;QAC3C,CAAC,CAAC,CACD2B,KAAK,CAAC,UAACtO,CAAC,EAAK;UACZ6D,oBAAW,CAACC,MAAM,CAACG,KAAK,CAACjE,CAAC,CAAC;QAC7B,CAAC,CAAC,CACDuO,OAAO,CAAC,YAAM;UACb;UACA;;UAEA,IAAIf,MAAI,CAACgB,gBAAgB,CAACC,eAAI,EAAEvG,OAAO,CAACwG,EAAE,CAAC,EAAE;YAC3C;YACAlB,MAAI,CAACtH,KAAK,CAAC0D,QAAQ,CAAC+E,UAAU,CAACC,iBAAiB,CAAC;cAC/CC,IAAI,EAAE,4BAA4B;cAClCC,OAAO,EAAE;gBACPC,OAAO,EAAE;cACX,CAAC;cACDpJ,OAAO,EAAE;gBACPqJ,SAAS,EAAE9G,OAAO,CAACwG;cACrB;YACF,CAAC,CAAC;YACFO,qBAAO,CAACF,OAAO,CACbvB,MAAI,EACJ;cACE0B,IAAI,EAAE,UAAU;cAChBC,QAAQ,EAAE;YACZ,CAAC,EACDC,yBAAc,CAACC,aAAa,EAC5B;cACEnH,OAAO,EAAPA,OAAO;cACPwD,IAAI,EAAExD,OAAO,CAACwD,IAAI,KAAK4D,oBAAS,GAAGC,iBAAM,GAAGC;YAC9C,CACF,CAAC;UACH,CAAC,MAAM;YACL;YACA3L,oBAAW,CAACC,MAAM,CAACK,IAAI,CACrB,kGACF,CAAC;UACH;QACF,CAAC,CAAC;MACN,CAAC,MAAM;QACL+D,OAAO,CAACwF,SAAS,CAAC+B,KAAK,CAACvH,OAAO,EAAE+D,IAAI,CAAC;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAxI,GAAA;IAAAC,KAAA,EASA,SAAAgM,mBAA2BC,QAAqB,EAAE;MAChD,IAAO1D,IAAI,GAAI0D,QAAQ,CAAhB1D,IAAI;MACX;MACA,IAAO2D,SAAS,GAAI3D,IAAI,CAAjB2D,SAAS;MAEhB,IAAIA,SAAS,IAAIA,SAAS,KAAKC,qBAAU,CAACC,YAAY,EAAE;QACtD,IAAI,CAACzC,gBAAgB,CAACpB,IAAI,EAAE,IAAI,CAAC;MACnC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAxI,GAAA;IAAAC,KAAA,EAMA,SAAAqM,qBAAA,EAA+B;MAC7Bd,qBAAO,CAACF,OAAO,CACb,IAAI,EACJ;QACEG,IAAI,EAAE,gBAAgB;QACtBC,QAAQ,EAAE;MACZ,CAAC,EACDC,yBAAc,CAACY,6BACjB,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAvM,GAAA;IAAAC,KAAA,EAMA,SAAAuM,gBAAA,EAA0B;MAAA,IAAAC,MAAA;MACxB;MACA,IAAI,CAAChK,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACC,EAAE,CAACP,qBAAU,CAACQ,aAAa,EAAE,UAACV,QAAQ,EAAK;QACrEO,MAAI,CAACR,kBAAkB,CAACC,QAAQ,CAAC;MACnC,CAAC,CAAC;MACF;MACA,IAAI,CAACzJ,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACC,EAAE,CAACE,eAAI,CAACC,YAAY,EAAE,UAACZ,QAAQ,EAAK;QAC9DjG,cAAY,CAAC8G,iBAAiB,CAACb,QAAQ,EAAEO,MAAI,CAAC5I,iBAAiB,CAAC;MAClE,CAAC,CAAC;;MAEF;MACA,IAAI,CAACpB,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACC,EAAE,CAACK,iBAAM,EAAE,YAAM;QAC3CP,MAAI,CAACQ,YAAY,CAAC;UAACC,qBAAqB,EAAE;QAAK,CAAC,CAAC;MACnD,CAAC,CAAC;;MAEF;MACA,IAAI,CAACzK,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACC,EAAE,CAACQ,kBAAO,EAAE,YAAM;QAC5CV,MAAI,CAACH,oBAAoB,CAAC,CAAC;MAC7B,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAtM,GAAA;IAAAC,KAAA,EAMA,SAAAmN,uBAAA,EAAiC;MAC/B;MACA,IAAI,CAAC3K,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACW,GAAG,CAACjB,qBAAU,CAACQ,aAAa,CAAC;MACzD;MACA,IAAI,CAACnK,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACW,GAAG,CAACR,eAAI,CAACC,YAAY,CAAC;MAClD;MACA,IAAI,CAACrK,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACW,GAAG,CAACL,iBAAM,CAAC;IACzC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAhN,GAAA;IAAAC,KAAA,EAKA,SAAAsE,QAAA,EAAkB;MAAA,IAAA+I,MAAA;MAChB;MACA,IAAI,CAAC7K,KAAK,CAAC8K,IAAI,CAACC,gBAAK,EAAE,YAAM;QAC3B;QACAC,eAAY,CAAC9P,GAAG,CAAC2P,MAAI,CAACI,MAAM,CAAC;QAC7B;QACAC,qBAAY,CAAChQ,GAAG,CAAC2P,MAAI,CAACI,MAAM,CAACE,OAAO,CAAC;QACrC;QACAxN,oBAAW,CAACzC,GAAG,CAAC2P,MAAI,CAAC7K,KAAK,CAACpC,MAAM,CAAC;QAElCT,WAAW,GAAG,IAAIC,WAAW,CAAC,CAAC;QAC/B,IAAAgO,4BAAS,EAACjO,WAAW,CAAC;;QAEtB;AACN;AACA;AACA;AACA;AACA;AACA;QACM;QACA0N,MAAI,CAACQ,WAAW,GAAGR,MAAI,CAACI,MAAM,CAACK,YAAY,CAACC,qBAAqB;QAC7D;QACA,IAAIC,qBAAa,CAACX,MAAI,CAAC7K,KAAK,CAAC;QAC7B;QACA,IAAIyL,oBAAW,CAACZ,MAAI,CAAC7K,KAAK,CAAC;QAC/B;QACA6K,MAAI,CAACvJ,mBAAmB,GAAG,IAAIoK,4BAAmB,CAChD;UAACL,WAAW,EAAER,MAAI,CAACQ;QAAW,CAAC;QAC/B;QACA;UAACpK,MAAM,EAAE4J,MAAI,CAAC7K;QAAK,CACrB,CAAC;QAED+I,qBAAO,CAACF,OAAO,CACbgC,MAAI,EACJ;UACE7B,IAAI,EAAE,UAAU;UAChBC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAACyC,cACjB,CAAC;QAEDnI,cAAY,CAACoI,gBAAgB,CAAC;UAACC,oBAAoB,EAAE;QAAI,CAAC,CAAC;QAC3D;QACAC,gBAAO,CAAC5D,YAAY,CAAC2C,MAAI,CAAC7K,KAAK,CAAC;MAClC,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAzC,GAAA;IAAAC,KAAA,EAOA,SAAAuO,uBAA+BC,WAAoB,EAAE;MAAA,IAAAC,YAAA,EAAAC,qBAAA;MACnD,IAAI,OAAOF,WAAW,KAAK,SAAS,EAAE;QACpC;MACF;MACA;MACA,IAAI,EAAAC,YAAA,OAAI,CAAChB,MAAM,cAAAgB,YAAA,wBAAAC,qBAAA,GAAXD,YAAA,CAAaX,YAAY,cAAAY,qBAAA,uBAAzBA,qBAAA,CAA2BX,qBAAqB,MAAKS,WAAW,EAAE;QACpE;QACA,IAAI,CAACf,MAAM,CAACK,YAAY,CAACC,qBAAqB,GAAGS,WAAW;QAC5D;QACA,IAAI,CAACX,WAAW,GAAGW,WAAW,GAAG,IAAIR,qBAAa,CAAC,IAAI,CAACxL,KAAK,CAAC,GAAG,IAAIyL,oBAAW,CAAC,IAAI,CAACzL,KAAK,CAAC;MAC9F;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAzC,GAAA;IAAAC,KAAA,EAOA,SAAA2O,qBAA6BH,WAAoB,EAAE;MAAA,IAAAI,aAAA,EAAAC,qBAAA;MACjD,IAAI,OAAOL,WAAW,KAAK,SAAS,EAAE;QACpC;MACF;MACA;MACA,IAAI,EAAAI,aAAA,OAAI,CAACnB,MAAM,cAAAmB,aAAA,wBAAAC,qBAAA,GAAXD,aAAA,CAAad,YAAY,cAAAe,qBAAA,uBAAzBA,qBAAA,CAA2BC,mBAAmB,MAAKN,WAAW,EAAE;QAClE;QACA,IAAI,CAACf,MAAM,CAACK,YAAY,CAACgB,mBAAmB,GAAGN,WAAW;MAC5D;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAzO,GAAA;IAAAC,KAAA,EAOA,SAAA+O,uBAA+BC,QAAiB,EAAE;MAChD,IAAI,OAAOA,QAAQ,KAAK,SAAS,EAAE;QACjC;MACF;MACA;MACA,IAAI,IAAI,CAACvB,MAAM,CAACK,YAAY,CAACmB,qBAAqB,KAAKD,QAAQ,EAAE;QAC/D;QACA,IAAI,CAACvB,MAAM,CAACK,YAAY,CAACmB,qBAAqB,GAAGD,QAAQ;MAC3D;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAjP,GAAA;IAAAC,KAAA,EAOA,SAAAkP,uBAA+BF,QAAiB,EAAE;MAChD,IAAI,OAAOA,QAAQ,KAAK,SAAS,EAAE;QACjC;MACF;MACA;MACA,IAAI,IAAI,CAACvB,MAAM,CAACK,YAAY,CAACqB,qBAAqB,KAAKH,QAAQ,EAAE;QAC/D;QACA,IAAI,CAACvB,MAAM,CAACK,YAAY,CAACqB,qBAAqB,GAAGH,QAAQ;MAC3D;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAjP,GAAA;IAAAC,KAAA,EAQA,SAAAoP,SAAA,EAAkB;MAAA,IAAAC,MAAA;MAChB;MACA,IAAI,CAAC,IAAI,CAAC7M,KAAK,CAAC8M,YAAY,EAAE;QAC5BnP,oBAAW,CAACC,MAAM,CAACG,KAAK,CACtB,6EACF,CAAC;QAED,OAAOgP,QAAA,CAAA3S,OAAA,CAAQ4S,MAAM,CAAC,IAAIC,KAAK,CAAC,sBAAsB,CAAC,CAAC;MAC1D;MAEA,IAAI,IAAI,CAACxL,UAAU,EAAE;QACnB9D,oBAAW,CAACC,MAAM,CAACH,IAAI,CACrB,sEACF,CAAC;QAED,OAAOsP,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAAC,CAAC;MAC1B;MAEA,OAAOH,QAAA,CAAA3S,OAAA,CAAQ+S,GAAG,CAAC,CACjB,IAAI,CAACC,2BAA2B,CAAC,CAAC,EAClC,IAAI,CAACC,UAAU,CAAC,CAAC,EACjB,IAAI,CAACC,iBAAiB,CAAC,cAAc,CAAC,CAAClF,KAAK,CAAC,UAACrK,KAAK,EAAK;QACtDJ,oBAAW,CAACC,MAAM,CAACG,KAAK,2CAAAkB,MAAA,CAA2ClB,KAAK,CAACwP,OAAO,CAAE,CAAC;MACrF,CAAC,CAAC;MACF;MACA,IAAI,CAACvN,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CACvBiJ,QAAQ,CAAC;MACV;MAAA,CACC5E,IAAI,CAAC;QAAA,OACJrK,oBAAW,CAACC,MAAM,CAACH,IAAI,EACrB;QAAA,uDAAAwB,MAAA,CACuD4N,MAAI,CAAC7M,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACf,GAAG,CACvF,CAAC;MAAA,CACH;MACA;MAAA,CACCoF,IAAI,CAAC;QAAA,OAAM6E,MAAI,CAAC7M,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CAACuD,OAAO,CAAC,CAAC;MAAA,EAAC,EACpDhK,cAAY,CAACoI,gBAAgB,CAAC5Q,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC,CACCgN,IAAI,CAAC,YAAM;QACV6E,MAAI,CAAC9C,eAAe,CAAC,CAAC;QACtBhB,qBAAO,CAACF,OAAO,CACbgE,MAAI,EACJ;UACE7D,IAAI,EAAE,UAAU;UAChBC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAACuE,mBACjB,CAAC;QACDZ,MAAI,CAACpL,UAAU,GAAG,IAAI;QACtBqK,gBAAO,CAAC4B,oBAAoB,CAACC,mBAAkB,CAACC,6BAA6B,CAAC;MAChF,CAAC,CAAC,CACDxF,KAAK,CAAC,UAACrK,KAAK,EAAK;QAChBJ,oBAAW,CAACC,MAAM,CAACG,KAAK,2DAAAkB,MAAA,CACoClB,KAAK,CAACwP,OAAO,CACzE,CAAC;QAEDzB,gBAAO,CAAC4B,oBAAoB,CAACC,mBAAkB,CAACE,4BAA4B,EAAE;UAC5ExK,MAAM,EAAEtF,KAAK,CAACwP,OAAO;UACrBO,KAAK,EAAE/P,KAAK,CAAC+P;QACf,CAAC,CAAC;QAEF,OAAOf,QAAA,CAAA3S,OAAA,CAAQ4S,MAAM,CAACjP,KAAK,CAAC;MAC9B,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAR,GAAA;IAAAC,KAAA,EAQA,SAAAuQ,WAAA,EAAa;MAAA,IAAAC,MAAA;MACX,IAAI,CAAC,IAAI,CAACvM,UAAU,EAAE;QACpB9D,oBAAW,CAACC,MAAM,CAACH,IAAI,CACrB,0EACF,CAAC;QAED,OAAOsP,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAAC,CAAC;MAC1B;MAEA,IAAI,CAACvC,sBAAsB,CAAC,CAAC;MAE7B;QACE;QACA,IAAI,CAAC3K,KAAK,CAAC0D,QAAQ,CAACuG,OAAO,CACxBgE,UAAU,CAAC;QACZ;QAAA,CACCjG,IAAI,CAAC;UAAA,OAAMgG,MAAI,CAAChO,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACoK,UAAU,CAAC,CAAC;QAAA,EAAC,CACnD/F,IAAI,CAAC,YAAM;UACVe,qBAAO,CAACF,OAAO,CACbmF,MAAI,EACJ;YACEhF,IAAI,EAAE,UAAU;YAChBC,QAAQ,EAAE;UACZ,CAAC,EACDC,yBAAc,CAACgF,qBACjB,CAAC;UACDF,MAAI,CAACvM,UAAU,GAAG,KAAK;QACzB,CAAC;MAAC;IAER;EAAC;IAAAlE,GAAA;IAAAC,KAAA;IAgCD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAA2Q,WAAA,EAYE;MAAA,IAAAC,MAAA;MAAA,IAXA3O,OAUC,GAAA7D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,CAAC,CAAC;MAEN+B,oBAAW,CAACC,MAAM,CAACH,IAAI,CAAC,8CAA8C,CAAC;MAEvE,OAAO,IAAI,CAACyD,aAAa,CACtBiN,UAAU,CAAC1O,OAAO,CAAC,CACnBuI,IAAI,CAAC,UAACqG,YAAY,EAAK;QACtB1Q,oBAAW,CAACC,MAAM,CAACH,IAAI,CACrB,kEAAkE,EAClE4Q,YACF,CAAC;QACDvC,gBAAO,CAAC4B,oBAAoB,CAACC,mBAAkB,CAACW,mBAAmB,EAAE7O,OAAO,CAAC;QAC7EsJ,qBAAO,CAACF,OAAO,CACbuF,MAAI,EACJ;UACEpF,IAAI,EAAE,UAAU;UAChBC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAACqF,0BAA0B,EACzC;UACEzF,SAAS,EAAErJ,OAAO,CAACqJ,SAAS;UAC5B0F,OAAO,EAAEH;QACX,CACF,CAAC;QAED,OAAOA,YAAY;MACrB,CAAC,CAAC,CACDjG,KAAK,CAAC,UAACqG,WAAW,EAAK;QACtB9Q,oBAAW,CAACC,MAAM,CAACG,KAAK,CACtB,iEAAiE,EACjE0Q,WACF,CAAC;QACD1F,qBAAO,CAACF,OAAO,CACbuF,MAAI,EACJ;UACEpF,IAAI,EAAE,UAAU;UAChBC,QAAQ,EAAE;QACZ,CAAC,EACDC,yBAAc,CAACwF,0BAA0B,EACzC;UACE5F,SAAS,EAAErJ,OAAO,CAACqJ,SAAS;UAC5BzF,MAAM,EAAEoL;QACV,CACF,CAAC;QAED3C,gBAAO,CAAC4B,oBAAoB,CAACC,mBAAkB,CAACgB,mBAAmB,EAAAhT,aAAA,CAAAA,aAAA,KAC9D8D,OAAO;UACV4D,MAAM,EAAEoL,WAAW,CAAClB,OAAO;UAC3BO,KAAK,EAAEW,WAAW,CAACX,KAAK;UACxBc,IAAI,EAAEH,WAAW,CAACG;QAAI,EACvB,CAAC;MACJ,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAArR,GAAA;IAAAC,KAAA,EAMA,SAAAqR,gBAAA,EAAkB;MAChB,OAAO,IAAI,CAACtN,YAAY;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAhE,GAAA;IAAAC,KAAA,EAOA,SAAA8P,kBAAA,EAAsC;MAAA,IAApBzE,OAAO,GAAAjN,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,QAAQ;MAClC,OAAO,IAAI,CAACiT,eAAe,CAAC,CAAC,CAACC,kBAAkB,CAACjG,OAAO,CAAC;IAC3D;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAtL,GAAA;IAAAC,KAAA,EAMA,SAAA6P,WAAA,EAAa;MAAA,IAAA0B,MAAA;MACX,OAAO,IAAI,CAAChO,OAAO,CAACiO,YAAY,CAAC,CAAC,CAAChH,IAAI,CAAC,UAACiH,GAAG,EAAK;QAC/CF,MAAI,CAACG,WAAW,GAAGD,GAAG;MACxB,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA1R,GAAA;IAAAC,KAAA,EAOA,SAAA4P,4BAAA,EAA8B;MAAA,IAAA+B,MAAA;MAC5B,OAAO,IAAI,CAACpO,OAAO,CAACqO,qBAAqB,CAAC,CAAC,CAACpH,IAAI,CAAC,UAACiH,GAAG,EAAK;QACxD,IAAIA,GAAG,EAAE;UACP,IAAMvN,kBAAkB,GAAG8B,cAAY,CAAC6L,sCAAsC,CAACJ,GAAG,CAAC;UACnFE,MAAI,CAACzN,kBAAkB,GAAGA,kBAAkB;UAC5C;UACAyN,MAAI,CAACnP,KAAK,CAAC0D,QAAQ,CAAC4L,QAAQ,CAACC,WAAW,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC9N,kBAAkB,CAAC,CAAC;QACpF;;QAEA;QACA,IAAI,CAACyN,MAAI,CAACzN,kBAAkB,EAAE;UAC5B;UACA,OAAOyN,MAAI,CAACnP,KAAK,CAAC0D,QAAQ,CAAC+L,IAAI,CAC5BnV,GAAG,CAAC,CAAC,CACL0N,IAAI,CAAC,UAACyH,IAAI,EAAK;YAAA,IAAAC,qBAAA,EAAAC,sBAAA;YACd,IAAMjO,kBAAkB,GACtB+N,IAAI,aAAJA,IAAI,wBAAAC,qBAAA,GAAJD,IAAI,CAAEG,eAAe,cAAAF,qBAAA,wBAAAC,sBAAA,GAArBD,qBAAA,CAAuBG,oBAAoB,cAAAF,sBAAA,uBAA3CA,sBAAA,CAA6CG,kBAAkB;YACjE,IAAIpO,kBAAkB,EAAE;cACtByN,MAAI,CAACzN,kBAAkB,GAAGA,kBAAkB;cAC5C;cACAyN,MAAI,CAACnP,KAAK,CAAC0D,QAAQ,CAAC4L,QAAQ,CAACC,WAAW,CAAC,CAAC,CAACC,iBAAiB,CAAC,CAAC9N,kBAAkB,CAAC,CAAC;YACpF,CAAC,MAAM;cACL,MAAM,IAAIuL,KAAK,CAAC,gBAAgB,CAAC;YACnC;UACF,CAAC,CAAC,CACD7E,KAAK,CAAC,YAAM;YACXzK,oBAAW,CAACC,MAAM,CAACG,KAAK,CACtB,gEACF,CAAC;UACH,CAAC,CAAC;QACN;QAEA,OAAOgP,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAAC,CAAC;MAC1B,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA3P,GAAA;IAAAC,KAAA,EAOA,SAAAuS,uBAAA,EAAyB;MACvB,OAAO,IAAI,CAACzO,mBAAmB;IACjC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA/D,GAAA;IAAAC,KAAA,EAQA,SAAAwS,QAAgBhO,OAAgB,EAAEqB,MAAc,EAAE;MAChD4M,aAAW,CAACC,OAAO,CAAClO,OAAO,CAAC;MAC5B,IAAI,CAACZ,iBAAiB,CAAC+O,MAAM,CAACnO,OAAO,CAACwG,EAAE,CAAC;MACzCO,qBAAO,CAACF,OAAO,CACb,IAAI,EACJ;QACEG,IAAI,EAAE,UAAU;QAChBC,QAAQ,EAAE;MACZ,CAAC,EACDC,yBAAc,CAACkH,eAAe,EAC9B;QACEtH,SAAS,EAAE9G,OAAO,CAACwG,EAAE;QACrBnF,MAAM,EAANA;MACF,CACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAlBE;IAAA9F,GAAA;IAAAC,KAAA,EAmBA,SAAAqK,OACEwI,WAAmB,EAUnB;MAAA,IAAAC,OAAA;MAAA,IATA9K,IAAsB,GAAA5J,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,IAAI;MAAA,IAC7B2L,qBAAqB,GAAA3L,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,KAAK;MAAA,IAC7B2U,eAAe,GAAA3U,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,CAAC,CAAC;MAAA,IACpBqI,aAAqB,GAAArI,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAGkL,SAAS;MAAA,IACjC0J,wBAAwB,GAAA5U,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,KAAK;MAAA,IAChC6U,mBAAwC,GAAA7U,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAGkL,SAAS;MAAA,IACpDuE,WAAW,GAAAzP,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAGkL,SAAS;MAAA,IACvB4J,gBAAgB,GAAA9U,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAGkL,SAAS;MAAA,IAC5B6J,oBAA4B,GAAA/U,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAGkL,SAAS;MAExC;MACA;MACA;MACA;;MAEA,IAAI7C,aAAa,EAAE;QACjBwM,mBAAmB,GAAA9U,aAAA,CAAAA,aAAA,KAAQ8U,mBAAmB,IAAI,CAAC,CAAC;UAAGxM,aAAa,EAAbA;QAAa,EAAC;MACvE;MAEA,IAAI0M,oBAAoB,EAAE;QACxBF,mBAAmB,GAAA9U,aAAA,CAAAA,aAAA,KAAQ8U,mBAAmB,IAAI,CAAC,CAAC;UAAGE,oBAAoB,EAApBA;QAAoB,EAAC;MAC9E;MAEA,OACE,IAAI,CAACtF,WAAW,CACbuF,gBAAgB,CAACP,WAAW,EAAE7K,IAAI;MACnC;MAAA,CACC4C,KAAK,CAAC,UAACrK,KAAK,EAAK;QAChBJ,oBAAW,CAACC,MAAM,CAACG,KAAK,uEAAAkB,MAAA,CACgDlB,KAAK,CAACwP,OAAO,CACrF,CAAC;QACD,IAAIxP,KAAK,YAAY8S,mCAAsB,EAAE;UAC3C,MAAM,IAAIA,mCAAsB,CAAC,CAAC;QACpC;MACF,CAAC,CAAC,CACD7I,IAAI,CAAC,YAAuB;QAAA,IAAtBvI,OAAY,GAAA7D,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAG,CAAC,CAAC;QACtB;QACA,IAAMkV,UAAU,GAAGrR,OAAO,CAAC4Q,WAAW,IAAIA,WAAW;;QAErD;QACA,IAAIrO,OAAO,GAAG,IAAI;QAElB,IACEwD,IAAI,KAAKsC,2BAAgB,CAACf,gBAAgB,IAC1CtH,OAAO,CAAC+F,IAAI,KAAKsC,2BAAgB,CAACf,gBAAgB,EAClD;UACA,IAAMgK,YAAY,GAAGT,OAAI,CAAClP,iBAAiB,CAAC+E,QAAQ,CAClDC,qBAAW,CAACW,gBAAgB,EAC5B+J,UACF,CAAC;UAED,IAAIC,YAAY,EAAE;YAChB,IAAMC,gCAAgC,GAAG,CAACD,YAAY,CAACvJ,SAAS,CAACyJ,gBAAgB;;YAEjF;YACA;YACA,IAAID,gCAAgC,EAAE;cACpChP,OAAO,GAAG+O,YAAY;YACxB;UACF;QACF;;QAEA;QACA,IAAI,CAAC/O,OAAO,EAAE;UACZA,OAAO,GAAGsO,OAAI,CAAClP,iBAAiB,CAAC+E,QAAQ,CAACC,qBAAW,CAACM,OAAO,EAAEoK,UAAU,CAAC;QAC5E;;QAEA;QACA,IAAI,CAAC9O,OAAO,EAAE;UACZ;UACA,OAAOsO,OAAI,CAACY,aAAa,CACvBJ,UAAU,EACVtL,IAAI,EACJ+B,qBAAqB,EACrBgJ,eAAe,EACfE,mBAAmB,EACnBD,wBAAwB,EACxBnF,WAAW,EACXqF,gBACF,CAAC,CAAC1I,IAAI,CAAC,UAACmJ,cAAmB,EAAK;YAC9B;YACA,IAAIA,cAAc,IAAIA,cAAc,CAACjH,EAAE,EAAE;cACvC;cACAiH,cAAc,CAACjH,EAAE,CAACkH,iBAAM,CAACC,eAAe,EAAE,UAACzI,OAAO,EAAK;gBACrD;gBACA,IAAI0H,OAAI,CAACrF,MAAM,CAACqG,cAAc,EAAE;kBAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;kBAC9BtB,OAAI,CAACnC,UAAU,CAAC;oBACd0D,SAAS,GAAAN,qBAAA,GAAEJ,cAAc,CAAC3J,SAAS,cAAA+J,qBAAA,wBAAAC,sBAAA,GAAxBD,qBAAA,CAA0B3L,SAAS,cAAA4L,sBAAA,uBAAnCA,sBAAA,CAAqCM,UAAU;oBAC1DC,cAAc,GAAAN,sBAAA,GAAEN,cAAc,CAAC3J,SAAS,cAAAiK,sBAAA,wBAAAC,sBAAA,GAAxBD,sBAAA,CAA0B7L,SAAS,cAAA8L,sBAAA,uBAAnCA,sBAAA,CAAqCM,SAAS;oBAC9D/N,aAAa,EAAEkN,cAAc,CAAClN,aAAa;oBAC3CgO,UAAU,EAAEd,cAAc,CAAClN,aAAa;oBACxCiO,OAAO,EAAEf,cAAc,CAACe,OAAO;oBAC/BpJ,SAAS,GAAA6I,sBAAA,GAAER,cAAc,CAAC3J,SAAS,cAAAmK,sBAAA,wBAAAC,sBAAA,GAAxBD,sBAAA,CAA0BlU,IAAI,cAAAmU,sBAAA,uBAA9BA,sBAAA,CAAgC1K,cAAc;oBACzDiL,UAAU,EAAE;kBACd,CAAC,CAAC,CAACnK,IAAI,CAAC;oBAAA,OAAMsI,OAAI,CAACN,OAAO,CAACmB,cAAc,EAAEvI,OAAO,CAACvF,MAAM,CAAC;kBAAA,EAAC;gBAC7D,CAAC,MAAM;kBACLiN,OAAI,CAACN,OAAO,CAACmB,cAAc,EAAEvI,OAAO,CAACvF,MAAM,CAAC;gBAC9C;cACF,CAAC,CAAC;cAEF8N,cAAc,CAACjH,EAAE,CAACkH,iBAAM,CAACgB,mBAAmB,EAAE,UAACC,eAAe,EAAK;gBACjE;gBACA,IAAI/B,OAAI,CAACrF,MAAM,CAACqG,cAAc,EAAE;kBAAA,IAAAgB,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;kBAC9BrC,OAAI,CAACnC,UAAU,CAAC;oBACd0D,SAAS,EAAEQ,eAAe,aAAfA,eAAe,wBAAAC,qBAAA,GAAfD,eAAe,CAAE7K,SAAS,cAAA8K,qBAAA,wBAAAC,sBAAA,GAA1BD,qBAAA,CAA4B1M,SAAS,cAAA2M,sBAAA,uBAArCA,sBAAA,CAAuCT,UAAU;oBAC5DC,cAAc,EAAEM,eAAe,aAAfA,eAAe,wBAAAG,sBAAA,GAAfH,eAAe,CAAE7K,SAAS,cAAAgL,sBAAA,wBAAAC,sBAAA,GAA1BD,sBAAA,CAA4B5M,SAAS,cAAA6M,sBAAA,uBAArCA,sBAAA,CAAuCT,SAAS;oBAChE/N,aAAa,EAAEoO,eAAe,CAACpO,aAAa;oBAC5CgO,UAAU,EAAEI,eAAe,CAACpO,aAAa;oBACzCiO,OAAO,EAAEG,eAAe,CAACH,OAAO;oBAChCpJ,SAAS,GAAA4J,sBAAA,GAAEL,eAAe,CAAC7K,SAAS,cAAAkL,sBAAA,wBAAAC,sBAAA,GAAzBD,sBAAA,CAA2BjV,IAAI,cAAAkV,sBAAA,uBAA/BA,sBAAA,CAAiCzL,cAAc;oBAC1DiL,UAAU,EAAE;kBACd,CAAC,CAAC;gBACJ;cACF,CAAC,CAAC;YACJ,CAAC,MAAM;cACLxU,oBAAW,CAACC,MAAM,CAACG,KAAK,qIAAAkB,MAAA,CAC8G+C,OAAO,CAC7I,CAAC;YACH;;YAEA;YACA,OAAO+K,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAACiE,cAAc,CAAC;UACxC,CAAC,CAAC;QACJ;QACAnP,OAAO,CAAC4Q,sBAAsB,CAACnC,mBAAmB,CAAC;;QAEnD;QACA,OAAO1D,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAAClL,OAAO,CAAC;MACjC,CAAC,CAAC;IAER;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAhBE;IAAAzE,GAAA;IAAAC,KAAA;MAAA,IAAAqV,cAAA,OAAAxT,kBAAA,CAAAjF,OAAA,gBAAAkF,YAAA,CAAAlF,OAAA,CAAAmF,IAAA,CAiBA,SAAAuT,SACEzC,WAAgB;QAAA,IAAA7K,IAAA;UAAA+B,qBAAA;UAAAgJ,eAAA;UAAAE,mBAAA;UAAAD,wBAAA;UAAAnF,WAAA;UAAAqF,gBAAA;UAAA1O,OAAA;UAAA+Q,qBAAA;UAAAC,WAAA;UAAAC,SAAA;UAAAC,aAAA;UAAAC,kBAAA;UAAAC,WAAA;UAAAC,cAAA;UAAAC,eAAA;UAAA/H,qBAAA;UAAAgI,kBAAA;UAAAC,gBAAA;UAAAC,MAAA,GAAA7X,SAAA;QAAA,OAAA0D,YAAA,CAAAlF,OAAA,CAAAuF,IAAA,UAAA+T,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAA7T,IAAA,GAAA6T,SAAA,CAAA5T,IAAA;YAAA;cAChByF,IAAsB,GAAAiO,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG,IAAI;cAC7BlM,qBAAqB,GAAAkM,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG,KAAK;cAC7BlD,eAAe,GAAAkD,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG,CAAC,CAAC;cACpBhD,mBAAwC,GAAAgD,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG3M,SAAS;cACpD0J,wBAAwB,GAAAiD,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG,KAAK;cAChCpI,WAAW,GAAAoI,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG3M,SAAS;cACvB4J,gBAAgB,GAAA+C,MAAA,CAAA5X,MAAA,QAAA4X,MAAA,QAAA3M,SAAA,GAAA2M,MAAA,MAAG3M,SAAS;cAEtB9E,OAAO,GAAG,IAAI4R,gBAAO,CACzB;gBACE;gBACAC,MAAM,EAAE,IAAI,CAAC7T,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACkQ,MAAM;gBACzC;gBACAC,SAAS,EAAE,IAAI,CAAC9T,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACf,GAAG;gBACzC;gBACAmR,KAAK,EAAE,IAAI,CAAC/T,KAAK,CAAC0D,QAAQ,CAACC,MAAM,CAACoQ,KAAK;gBACvCtN,KAAK,EAAEjB,IAAI,KAAKsC,2BAAgB,CAACC,QAAQ,GAAGsI,WAAW,GAAG,IAAI;gBAAE;gBAChE2D,mBAAmB,EAAE,IAAI,CAAC3I,WAAW;gBACrCgF,WAAW,EAAXA,WAAW;gBACX4D,eAAe,EAAEzO,IAAI;gBACrBiL,mBAAmB,EAAnBA;cACF,CAAC,EACD;gBACE;gBACAxP,MAAM,EAAE,IAAI,CAACjB;cACf,CACF,CAAC;cAED,IAAI,CAACoB,iBAAiB,CAAClG,GAAG,CAAC8G,OAAO,CAAC;cAAC2R,SAAA,CAAA7T,IAAA;cAGlC;cACA;cACA;cACA;cACIkT,WAAW,GAAG,CAAC;cAEnB,IAAI3C,WAAW,CAACrO,OAAO,EAAE;gBAChBiR,SAAS,GAAI5C,WAAW,CAACrO,OAAO,CAAhCiR,SAAS;gBACVC,aAAa,GAAG,IAAIgB,IAAI,CAACjB,SAAS,CAAC;gBACnCE,kBAAkB,GAAGD,aAAa,CAACiB,OAAO,CAAC,CAAC;gBAC5Cf,WAAW,GAAGD,kBAAkB,GAAG,IAAAiB,IAAA,CAAAha,OAAA,EAAS,CAAC;gBAC7CiZ,cAAc,GAAGgB,IAAI,CAACC,GAAG,CAC7BD,IAAI,CAACE,GAAG,CAACnB,WAAW,EAAEoB,4CAAiC,CAAC,EACxD,CACF,CAAC;gBAEDxB,WAAW,GAAGqB,IAAI,CAACI,KAAK,CAACJ,IAAI,CAACK,MAAM,CAAC,CAAC,GAAGrB,cAAc,CAAC;cAC1D;cACMC,eAAe,GAAG,CAAC,GAAAP,qBAAA,GAAC1C,WAAW,CAACzK,SAAS,cAAAmN,qBAAA,eAArBA,qBAAA,CAAuBlN,MAAM,GACvD;cACO0F,qBAAqB,GAAI,IAAI,CAACN,MAAM,CAACK,YAAY,CAAjDC,qBAAqB;cACtBgI,kBAAkB,GAAG;gBACzBoB,WAAW,EAAEpE,eAAe;gBAC5BqE,YAAY,EAAE,CAAC,EAACnE,mBAAmB,aAAnBA,mBAAmB,eAAnBA,mBAAmB,CAAExM,aAAa,EAAE;cACtD,CAAC;cAAA,KAEGoH,WAAW;gBAAAsI,SAAA,CAAA5T,IAAA;gBAAA;cAAA;cACbiC,OAAO,CAAC6S,iBAAiB,CAACxJ,WAAW,EAAEkI,kBAAkB,EAAE7C,gBAAgB,CAAC;cAACiD,SAAA,CAAA5T,IAAA;cAAA;YAAA;cAAA,MACpEyF,IAAI,KAAKsC,2BAAgB,CAACgN,eAAe;gBAAAnB,SAAA,CAAA5T,IAAA;gBAAA;cAAA;cAAA,MAE9CwL,qBAAqB,IAAI,CAAC+H,eAAe,IAAI/L,qBAAqB,IAAIyL,WAAW,GAAG,CAAC;gBAAAW,SAAA,CAAA5T,IAAA;gBAAA;cAAA;cACvFiC,OAAO,CAAC+S,yBAAyB,GAAGC,UAAU,CAC5C;gBAAA,OAAMhT,OAAO,CAACiT,gBAAgB,CAAC1B,kBAAkB,CAAC;cAAA,GAClDP,WACF,CAAC;cACDhR,OAAO,CAACkT,gBAAgB,CAACpO,SAAS,EAAEuJ,WAAW,CAAC;cAACsD,SAAA,CAAA5T,IAAA;cAAA;YAAA;cAAA4T,SAAA,CAAA5T,IAAA;cAAA,OAE3CiC,OAAO,CAACiT,gBAAgB,CAAC1B,kBAAkB,CAAC;YAAA;cAAAI,SAAA,CAAA5T,IAAA;cAAA;YAAA;cAAA4T,SAAA,CAAA7T,IAAA;cAAA6T,SAAA,CAAAwB,EAAA,GAAAxB,SAAA;cAAA,MAKpD,EAAEA,SAAA,CAAAwB,EAAA,YAAeC,qBAAY,CAAC,IAC9B,EAAEzB,SAAA,CAAAwB,EAAA,YAAeE,sBAAa,CAAC,IAC/B,EAAE1B,SAAA,CAAAwB,EAAA,YAAeG,mBAAe,CAAC;gBAAA3B,SAAA,CAAA5T,IAAA;gBAAA;cAAA;cAEjCpC,oBAAW,CAACC,MAAM,CAACH,IAAI,2EAAAwB,MAAA,CACqDoR,WAAW,MACvF,CAAC;cAAC,KACEG,wBAAwB;gBAAAmD,SAAA,CAAA5T,IAAA;gBAAA;cAAA;cAC1BpC,oBAAW,CAACC,MAAM,CAACH,IAAI,mFAEvB,CAAC;cACD;cACA,IAAI,CAACuS,OAAO,CAAChO,OAAO,EAAEuT,iCAAsB,CAACC,oBAAoB,CAAC;cAAC,MAC7D,IAAIC,sBAAkB,CAAC,CAAC;YAAA;cAEhC;cACA9X,oBAAW,CAACC,MAAM,CAACH,IAAI,CACrB,4FACF,CAAC;YAAC;cAEJE,oBAAW,CAACC,MAAM,CAACS,KAAK,2CAAAY,MAAA,CAAA0U,SAAA,CAAAwB,EAAA,yCAExB,CAAC;YAAC;cAAAxB,SAAA,CAAA7T,IAAA;cAEF;cACA;cACA;cACA,IAAI0F,IAAI,KAAKsC,2BAAgB,CAACC,QAAQ,EAAE;gBACtC,IAAI,CAAC/F,OAAO,CAAC0T,MAAM,EAAE;kBACnB1T,OAAO,CAAC2T,SAAS,CAACtF,WAAW,CAAC;gBAChC;;gBAEA;gBACMmD,gBAAgB,GAAGhQ,cAAY,CAACoS,mBAAmB,CAACpQ,IAAI,CAAC,EAE/D;gBACA;gBACAuD,qBAAO,CAACF,OAAO,CACb,IAAI,EACJ;kBACEG,IAAI,EAAE,UAAU;kBAChBC,QAAQ,EAAE;gBACZ,CAAC,EACDC,yBAAc,CAACC,aAAa,EAC5B;kBACEnH,OAAO,EAAPA,OAAO;kBACPwD,IAAI,EAAEgO;gBACR,CACF,CAAC;cACH;cAAC,OAAAG,SAAA,CAAAkC,MAAA;YAAA;cAAA,OAAAlC,SAAA,CAAAvT,MAAA,WAGI4B,OAAO;YAAA;YAAA;cAAA,OAAA2R,SAAA,CAAArT,IAAA;UAAA;QAAA,GAAAwS,QAAA;MAAA,CAmBf;MAAA,SAAA5B,cAAA4E,GAAA;QAAA,OAAAjD,cAAA,CAAAnX,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAAsV,aAAA;IAAA;IAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IAPE;EAAA;IAAA3T,GAAA;IAAAC,KAAA,EAQA,SAAA8K,iBAAwB9C,IAAY,EAAEhI,KAAa,EAAE;MACnD,OAAO,IAAI,CAAC4D,iBAAiB,CAAC+E,QAAQ,CAACX,IAAI,EAAEhI,KAAK,CAAC;IACrD;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAD,GAAA;IAAAC,KAAA,EAMA,SAAAuY,eAAA,EAAwB;MACtB,OAAO,IAAI,CAAC3U,iBAAiB,CAAC4U,MAAM,CAAC,CAAC;IACxC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAzY,GAAA;IAAAC,KAAA,EAOA,SAAAgN,aAAA,EAAwE;MAAA,IAAAyL,OAAA;MAAA,IAAAC,KAAA,GAAAta,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAkL,SAAA,GAAAlL,SAAA,MAAnB,CAAC,CAAC;QAAAua,qBAAA,GAAAD,KAAA,CAAlCzL,qBAAqB;QAArBA,qBAAqB,GAAA0L,qBAAA,cAAG,IAAI,GAAAA,qBAAA;MAC/C;MACA,IAAI,IAAI,CAACnW,KAAK,CAACC,WAAW,CAACmW,iBAAiB,EAAE;QAC5CzY,oBAAW,CAACC,MAAM,CAACH,IAAI,CACrB,2EACF,CAAC;QAED,OAAOsP,QAAA,CAAA3S,OAAA,CAAQ8S,OAAO,CAAC,CAAC;MAC1B;MAEA,OAAO,IAAI,CAACnM,OAAO,CAChBsV,iBAAiB,CAAC,CAAC,CACnBrO,IAAI,CAAC,UAACsO,UAAU,EAAK;QACpB,IAAMC,cAAc,GAAG,EAAE;QAEzB,IAAID,UAAU,aAAVA,UAAU,eAAVA,UAAU,CAAEE,IAAI,IAAIF,UAAU,CAACE,IAAI,CAAC3a,MAAM,GAAG,CAAC,EAAE;UAClD,IAAM4a,YAAY,GAAGR,OAAI,CAACS,sBAAsB,CAACJ,UAAU,CAACE,IAAI,CAAC;UACjEC,YAAY,CAAC3a,OAAO,CAAC,UAAC2K,KAAK,EAAK;YAC9B8P,cAAc,CAAC9a,IAAI,CAACgL,KAAK,CAAC7D,GAAG,CAAC;YAC9BqT,OAAI,CAAC9O,gBAAgB,CAAC;cACpBV,KAAK,EAALA,KAAK;cACLH,QAAQ,EAAEG,KAAK,CAAC7D;YAClB,CAAC,CAAC;UACJ,CAAC,CAAC;QACJ;QACA,IAAM+T,kBAAkB,GAAGV,OAAI,CAAC7U,iBAAiB,CAAC4U,MAAM,CAAC,CAAC;QAE1D,IAAI,IAAAY,KAAA,CAAAxc,OAAA,EAAYuc,kBAAkB,CAAC,CAAC9a,MAAM,GAAG,CAAC,EAAE;UAC9C;UACA;UACA;UACA,SAAAgb,EAAA,MAAAC,cAAA,GAAsB,IAAAC,OAAA,CAAA3c,OAAA,EAAcuc,kBAAkB,CAAC,EAAAE,EAAA,GAAAC,cAAA,CAAAjb,MAAA,EAAAgb,EAAA,IAAE;YAApD,IAAM7U,OAAO,GAAA8U,cAAA,CAAAD,EAAA;YAChB;YACA,IAAOvQ,QAAQ,GAAItE,OAAO,CAAnBsE,QAAQ;YACf,IAAI,CAACmE,qBAAqB,IAAInE,QAAQ,KAAK,CAACiQ,cAAc,CAACS,QAAQ,CAAC1Q,QAAQ,CAAC,EAAE;cAC7E;cACA;cACA2P,OAAI,CAACjG,OAAO,CAAChO,OAAO,EAAEuT,iCAAsB,CAAC0B,mBAAmB,CAAC;YACnE;UACF;QACF;MACF,CAAC,CAAC,CACD7O,KAAK,CAAC,UAACrK,KAAK,EAAK;QAChBJ,oBAAW,CAACC,MAAM,CAACG,KAAK,6DAAAkB,MAAA,CACsClB,KAAK,CACnE,CAAC;QACD,MAAM,IAAIkP,KAAK,CAAClP,KAAK,CAAC;MACxB,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAR,GAAA;IAAAC,KAAA,EAOA,SAAAkZ,uBAAuBF,IAAW,EAAE;MAAA,IAAAU,OAAA;MAClC,IAAMC,QAAQ,GAAGX,IAAI,CAACjb,MAAM,CAAC,UAACkL,KAAK;QAAA,OAAK,CAACjD,cAAY,CAAC2B,kBAAkB,CAACsB,KAAK,CAAC;MAAA,EAAC;MAChF,IAAM2Q,YAAY,GAAGZ,IAAI,CAACjb,MAAM,CAAC,UAACkL,KAAK;QAAA,OAAKjD,cAAY,CAAC6T,oBAAoB,CAAC5Q,KAAK,CAAC;MAAA,EAAC;MACrF,IAAI,CAAC6Q,2BAA2B,GAAG,EAAE;MACrC,IAAMb,YAAY,OAAAc,mBAAA,CAAAnd,OAAA,EAAO+c,QAAQ,CAAC;MAClCC,YAAY,CAACtb,OAAO,CAAC,UAAC+G,aAAa,EAAK;QACtC,IAAM2U,kBAAkB,GAAGL,QAAQ,CAACM,IAAI,CACtC,UAACC,SAAS;UAAA,IAAAC,mBAAA,EAAAC,qBAAA,EAAAC,qBAAA,EAAAC,sBAAA;UAAA,OAAK,EAAAH,mBAAA,GAAAD,SAAS,CAAChV,QAAQ,cAAAiV,mBAAA,wBAAAC,qBAAA,GAAlBD,mBAAA,CAAoBhV,QAAQ,cAAAiV,qBAAA,uBAA5BA,qBAAA,CAA8BhV,GAAG,QAAAiV,qBAAA,GAAKhV,aAAa,CAACH,QAAQ,cAAAmV,qBAAA,wBAAAC,sBAAA,GAAtBD,qBAAA,CAAwBlV,QAAQ,cAAAmV,sBAAA,uBAAhCA,sBAAA,CAAkClV,GAAG;QAAA,CAC5F,CAAC;QACD,IAAMmV,yBAAyB,GAAGb,OAAI,CAACpR,8BAA8B,CAAC;UACpEW,KAAK,EAAE5D,aAAa;UACpByD,QAAQ,EAAEzD,aAAa,CAACD;QAC1B,CAAC,CAAC;QAEF,IAAI4U,kBAAkB,IAAI,CAACO,yBAAyB,EAAE;UACpD;UACA;UACA;UACAb,OAAI,CAACI,2BAA2B,CAAC7b,IAAI,CAACoH,aAAa,CAAC;QACtD,CAAC,MAAM;UACL4T,YAAY,CAAChb,IAAI,CAACoH,aAAa,CAAC;QAClC;MACF,CAAC,CAAC;MAEF,OAAO4T,YAAY;IACrB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAlZ,GAAA;IAAAC,KAAA,EAOA,SAAA2K,yBAAyB6P,eAAe,EAAE;MACxC,IACE,CAACA,eAAe,IAChB,CAAC,IAAI,CAACV,2BAA2B,IACjC,CAAC,IAAI,CAACA,2BAA2B,CAACzb,MAAM,EACxC;QACA;MACF;MACA,IAAI2H,cAAY,CAAC2B,kBAAkB,CAAC6S,eAAe,CAAC,EAAE;QACpD;MACF;MACA,IAAMC,UAAU,GAAG,IAAI,CAACX,2BAA2B,CAACY,SAAS,CAC3D,UAACrV,aAAa;QAAA,IAAAsV,sBAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAC,sBAAA;QAAA,OACZ,EAAAH,sBAAA,GAAAtV,aAAa,CAACH,QAAQ,cAAAyV,sBAAA,wBAAAC,sBAAA,GAAtBD,sBAAA,CAAwBxV,QAAQ,cAAAyV,sBAAA,uBAAhCA,sBAAA,CAAkCxV,GAAG,QAAAyV,qBAAA,GAAKL,eAAe,CAACtV,QAAQ,cAAA2V,qBAAA,wBAAAC,sBAAA,GAAxBD,qBAAA,CAA0B1V,QAAQ,cAAA2V,sBAAA,uBAAlCA,sBAAA,CAAoC1V,GAAG;MAAA,CACrF,CAAC;MAED,IAAIqV,UAAU,GAAG,CAAC,EAAE;QAClB;MACF;MAEA,IAAMM,sBAAsB,GAAG,IAAI,CAACjB,2BAA2B,CAACW,UAAU,CAAC;MAC3E,IAAI,CAAC9Q,gBAAgB,CAAC;QAACV,KAAK,EAAE8R,sBAAsB;QAAEjS,QAAQ,EAAEiS,sBAAsB,CAAC3V;MAAG,CAAC,CAAC;MAC5F,IAAI,CAAC0U,2BAA2B,CAACkB,MAAM,CAACP,UAAU,EAAE,CAAC,CAAC;IACxD;;IAEA;AACF;AACA;AACA;EAHE;IAAA1a,GAAA;IAAAC,KAAA,EAIA,SAAAib,UAAA,EAAY;MACV,OAAO9a,oBAAW,CAACrD,GAAG,CAAC,CAAC;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAiD,GAAA;IAAAC,KAAA,EAOA,SAAAkb,uBAAA,EAAyB;MACvB,OAAO,IAAI,CAACtX,iBAAiB,CAACsX,sBAAsB,CAAC,CAAC;IACxD;EAAC;EAAA,OAAAna,QAAA;AAAA,EAl4CmCoa,sBAAW"}
1
+ {"version":3,"names":["_lodash","require","_webexCore","_internalMediaCore","mediaHelpersModule","_interopRequireWildcard","_metrics","_interopRequireDefault","_loggerConfig","_config","_loggerProxy","_request","_triggerProxy","_media","_util","_constants","_constants2","_meetingInfo","_meetingInfoV","_meeting","_personalMeetingRoom","_reachability","_request2","_passwordError","_captchaError","_collection","_meetings","_util2","_permission","_webexErrors","_noMeetingInfo","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","valueOf","mediaLogger","MediaLogger","_classCallCheck2","_createClass2","key","value","info","_LoggerProxy$logger","LoggerProxy","logger","log","_LoggerProxy$logger2","error","_LoggerProxy$logger3","warn","_LoggerProxy$logger4","trace","_LoggerProxy$logger5","debug","_LoggerProxy$logger6","Meetings","exports","_WebexPlugin","_inherits2","_super","_this","_len","args","Array","_key","concat","_assertThisInitialized2","MEETINGS","_ref","_asyncToGenerator2","_regenerator","mark","_callee","options","authToken","wrap","_callee$","_context","prev","next","webex","credentials","supertoken","access_token","abrupt","NoiseReductionEffect","stop","_x","_ref2","_callee2","_callee2$","_context2","VirtualBackgroundEffect","_x2","mediaHelpers","request","Request","parent","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","deletedMeetings","_map","personalMeetingRoom","reachability","Reachability","registered","preferredWebexSite","media","getUserMedia","Media","onReady","isNeedHandleMainLocus","meeting","newLocus","_newLocus$controls","_newLocus$controls$br","_newLocus$self","_newLocus$self2","_newLocus$self3","_breakoutLocus$joined","_newLocus$self4","breakoutUrl","controls","breakout","url","breakoutLocus","getActiveBreakoutLocus","isSelfJoined","self","state","_JOINED_","isSelfMoved","_LEFT_","reason","_MOVED_","deviceFromNewLocus","MeetingsUtil","getThisDevice","internal","device","isResourceMovedOnThisDevice","isNewLocusJoinThisDevice","joinedOnThisDevice","isBreakoutLocusJoinThisDevice","joinedWith","correlationId","_breakoutLocus$joined2","_deviceFromNewLocus$r","breakoutReplaceAt","replaces","replaceAt","newLocusReplaceAt","removed","isNeedHandleLocusDTO","_newLocus$self5","_newLocus$self6","_newLocus$self7","_newLocus$self7$devic","_newLocus$self7$devic2","_newLocus$self8","_newLocus$self8$devic","_newLocus$self8$devic2","isNewLocusAsBreakout","isBreakoutLocusDTO","isSelfMovedToLobby","devices","intent","_ON_HOLD_LOBBY_","type","_WAIT_","_newLocus$fullState","_newLocus$self9","fullState","active","getCorrespondingMeetingByLocus","data","_data$locus$info","_data$locus","_data$locus$info2","getByKey","MEETING_KEY","LOCUS_URL","locusUrl","CORRELATION_ID","checkForCorrelationId","locus","SIP_URI","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","MEETINGNUMBER","webExMeetingId","handleLocusEvent","_data$locus2","_data$locus2$replaces","_this2","useRandomDelayForInfo","locusInfo","updateMainSessionLocusCache","LOCUS","STATE","INACTIVE","create","DESTINATION_TYPE","LOCUS_ID","then","newMeeting","initialSetup","checkHandleBreakoutLocus","catch","finally","getMeetingByType","_ID_","id","newMetrics","submitClientEvent","name","payload","trigger","meetingId","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","_MEETING_","_JOIN_","_INCOMING_","parse","handleLocusMercury","envelope","eventType","LOCUSEVENT","MESSAGE_ROAP","handleMercuryOffline","MEETINGS_NETWORK_DISCONNECTED","listenForEvents","_this3","mercury","on","LOCUS_MERCURY","ROAP","ROAP_MERCURY","handleRoapMercury","ONLINE","syncMeetings","keepOnlyLocusMeetings","OFFLINE","stopListeningForEvents","off","_this4","once","READY","StaticConfig","config","LoggerConfig","logging","setLogger","meetingInfo","experimental","enableUnifiedMeetings","MeetingInfoV2","MeetingInfo","PersonalMeetingRoom","MEETINGS_READY","checkH264Support","disableNotifications","Metrics","_toggleUnifiedMeetings","changeState","_this$config","_this$config$experime","_toggleAdhocMeetings","_this$config2","_this$config2$experim","enableAdhocMeetings","_toggleTcpReachability","newValue","enableTcpReachability","_toggleTlsReachability","enableTlsReachability","register","_this5","canAuthorize","_promise","reject","Error","resolve","all","fetchUserPreferredWebexSite","getGeoHint","startReachability","message","connect","MEETINGS_REGISTERED","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_FAILED","stack","unregister","_this6","disconnect","MEETINGS_UNREGISTERED","uploadLogs","_this7","uploadResult","UPLOAD_LOGS_SUCCESS","MEETING_LOG_UPLOAD_SUCCESS","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","code","getReachability","gatherReachability","_this8","fetchGeoHint","res","geoHintInfo","_this9","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","services","_getCatalog","addAllowedDomains","user","_user$userPreferences","_user$userPreferences2","userPreferences","userPreferencesItems","preferredWebExSite","getPersonalMeetingRoom","getBasicMeetingInformation","destroy","_meeting$locusInfo","_meeting$locusInfo2","_meeting$locusInfo3","_meeting$locusInfo3$f","_meeting$locusInfo4","_meeting$locusInfo4$f","MeetingUtil","cleanUp","allowMediaInLobby","sessionCorrelationId","environment","cloneDeep","sequence","lastActive","sessionId","delete","MEETING_REMOVED","destination","_this10","infoExtraParams","failOnMissingMeetingInfo","callStateForMetrics","meetingLookupUrl","fetchInfoOptions","SpaceIDDeprecatedError","targetDest","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","autoUploadLogs","_createdMeeting$locus","_createdMeeting$locus2","_createdMeeting$locus3","_createdMeeting$locus4","_createdMeeting$locus5","_createdMeeting$locus6","callStart","locussessionid","feedbackId","locusId","autoupload","REQUEST_UPLOAD_LOGS","meetingInstance","_meetingInstance$locu","_meetingInstance$locu2","_meetingInstance$locu3","_meetingInstance$locu4","_meetingInstance$locu5","_meetingInstance$locu6","setCallStateForMetrics","_createMeeting","_callee3","_destination$fullStat","waitingTime","startTime","startTimeDate","startTimeDatestamp","timeToStart","maxWaitingTime","isMeetingActive","meetingInfoOptions","meetingAddedType","_args3","_callee3$","_context3","Meeting","userId","deviceUrl","orgId","meetingInfoProvider","destinationType","Date","getTime","_now","Math","max","min","MAX_RANDOM_DELAY_FOR_MEETING_INFO","round","random","extraParams","sendCAevents","injectMeetingInfo","ONE_ON_ONE_CALL","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","parseMeetingInfo","t0","CaptchaError","PasswordError","PermissionError","MEETING_REMOVED_REASON","MISSING_MEETING_INFO","NoMeetingInfoError","sipUri","setSipUri","getMeetingAddedType","finish","_x3","getAllMeetings","getAll","_this11","_ref3","_ref3$keepOnlyLocusMe","isUnverifiedGuest","getActiveMeetings","locusArray","activeLocusUrl","loci","lociToUpdate","sortLocusArrayToUpdate","meetingsCollection","_keys","_i","_Object$values","_values","includes","NO_MEETINGS_TO_SYNC","_this12","mainLoci","breakoutLoci","isValidBreakoutLocus","breakoutLocusForHandleLater","_toConsumableArray2","associateMainLocus","find","mainLocus","_mainLocus$controls","_mainLocus$controls$b","_breakoutLocus$contro","_breakoutLocus$contro2","existCorrespondingMeeting","newCreatedLocus","existIndex","findIndex","_breakoutLocus$contro3","_breakoutLocus$contro4","_newCreatedLocus$cont","_newCreatedLocus$cont2","associateBreakoutLocus","splice","getLogger","getActiveWebrtcMeeting","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\nimport {cloneDeep, union} from 'lodash';\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-metrics';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport * as mediaHelpersModule from '@webex/media-helpers';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport LoggerConfig from '../common/logs/logger-config';\nimport StaticConfig from '../common/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport LoggerRequest from '../common/logs/request';\nimport Trigger from '../common/events/trigger-proxy';\nimport Media from '../media';\nimport MeetingUtil from '../meeting/util';\nimport {\n MEETINGS,\n EVENTS,\n EVENT_TRIGGERS,\n READY,\n LOCUSEVENT,\n MAX_RANDOM_DELAY_FOR_MEETING_INFO,\n ROAP,\n ONLINE,\n OFFLINE,\n _MEETING_,\n _JOIN_,\n _INCOMING_,\n LOCUS,\n _LEFT_,\n _ID_,\n MEETING_REMOVED_REASON,\n _JOINED_,\n _MOVED_,\n _ON_HOLD_LOBBY_,\n _WAIT_,\n DESTINATION_TYPE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport MeetingInfo from '../meeting-info';\nimport MeetingInfoV2 from '../meeting-info/meeting-info-v2';\nimport Meeting, {CallStateForMetrics} from '../meeting';\nimport PersonalMeetingRoom from '../personal-meeting-room';\nimport Reachability from '../reachability';\nimport Request from './request';\nimport PasswordError from '../common/errors/password-error';\nimport CaptchaError from '../common/errors/captcha-error';\nimport MeetingCollection from './collection';\nimport {MEETING_KEY, INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';\nimport MeetingsUtil from './util';\nimport PermissionError from '../common/errors/permission';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\nimport NoMeetingInfoError from '../common/errors/no-meeting-info';\n\nlet mediaLogger;\n\nclass MediaLogger {\n info(...args) {\n LoggerProxy.logger.info(...args);\n }\n\n log(...args) {\n LoggerProxy.logger.log(...args);\n }\n\n error(...args) {\n LoggerProxy.logger.error(...args);\n }\n\n warn(...args) {\n LoggerProxy.logger.warn(...args);\n }\n\n trace(...args) {\n LoggerProxy.logger.trace(...args);\n }\n\n debug(...args) {\n LoggerProxy.logger.debug(...args);\n }\n}\n/**\n * Meetings Ready Event\n * Emitted when the meetings instance on webex is ready\n * @event meetings:ready\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Network Disconnected Event\n * Emitted when the meetings instance is disconnected from\n * the internal mercury server\n * @event network:disconnected\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Registered Event\n * Emitted when the meetings instance has been registered and listening\n * @event meetings:registered\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meeting Removed Event\n * Emitted when a meeting was removed from the cache of meetings\n * @event meeting:removed\n * @instance\n * @type {Object}\n * @property {String} meetingId the removed meeting\n * @property {Object} response the server response\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Meeting Added Event\n * Emitted when a meeting was added to the cache of meetings\n * @event meeting:added\n * @instance\n * @type {Object}\n * @property {String} meetingId the added meeting\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Object containing only the most basic information about a meeting.\n * This is the information that is kept even after the meeting is deleted from the MeetingCollection\n */\nexport type BasicMeetingInformation = {\n allowMediaInLobby: boolean;\n correlationId: string;\n environment: string;\n id: string;\n locusUrl: string;\n locusInfo: any; // it's only a very small subset of the locus info, see what's populated in the destroy() method\n meetingInfo: any;\n sessionCorrelationId: string;\n};\n\n/**\n * Maintain a cache of meetings and sync with services.\n * @class\n */\nexport default class Meetings extends WebexPlugin {\n loggerRequest: any;\n media: any;\n meetingCollection: any;\n deletedMeetings: Map<string, BasicMeetingInformation>;\n personalMeetingRoom: any;\n preferredWebexSite: any;\n reachability: Reachability;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n mediaHelpers: any;\n breakoutLocusForHandleLater: any;\n namespace = MEETINGS;\n\n /**\n * Initializes the Meetings Plugin\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app\n * to be able to call media helper functions.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.mediaHelpers = mediaHelpersModule;\n\n /**\n * The Meetings request to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.request = new Request({}, {parent: this.webex});\n /**\n * Log upload request helper\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.loggerRequest = new LoggerRequest({webex: this.webex});\n this.meetingCollection = new MeetingCollection();\n this.deletedMeetings = new Map();\n\n /**\n * The PersonalMeetingRoom object to interact with server\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this.personalMeetingRoom = null;\n\n /**\n * The Reachability object to interact with server\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\n\n /**\n * If the meetings plugin has been registered and listening via {@link Meetings#register}\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Meetings\n */\n this.registered = false;\n\n /**\n * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}\n * @instance\n * @type {String}\n * @private\n * @memberof Meetings\n */\n this.preferredWebexSite = '';\n\n /**\n * The public interface for the internal Media util files. These are helpful to expose outside the context\n * of a meeting so that a user can access media without creating a meeting instance.\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.media = {\n getUserMedia: Media.getUserMedia,\n };\n\n this.onReady();\n }\n\n /**\n * check whether you need to handle this main session's locus data or not\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleMainLocus(meeting: any, newLocus: any) {\n const breakoutUrl = newLocus.controls?.breakout?.url;\n const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);\n\n const isSelfJoined = newLocus?.self?.state === _JOINED_;\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n // @ts-ignore\n const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);\n const isResourceMovedOnThisDevice =\n deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;\n\n const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(\n meeting,\n newLocus,\n // @ts-ignore\n this.webex.internal.device.url\n );\n const isBreakoutLocusJoinThisDevice =\n breakoutLocus?.joinedWith?.correlationId &&\n breakoutLocus.joinedWith.correlationId === meeting?.correlationId;\n\n if (isSelfJoined && isNewLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'\n );\n if (breakoutLocus?.joinedWith && deviceFromNewLocus) {\n const breakoutReplaceAt =\n breakoutLocus.joinedWith.replaces?.length > 0\n ? breakoutLocus.joinedWith.replaces[0].replaceAt\n : '';\n const newLocusReplaceAt =\n deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';\n if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`\n );\n\n return false;\n }\n }\n\n return true;\n }\n if (isBreakoutLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`\n );\n\n return false;\n }\n if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'\n );\n\n return false;\n }\n if (isSelfJoined && isResourceMovedOnThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'\n );\n\n return false;\n }\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'\n );\n\n return true;\n }\n\n /**\n * check whether you need to handle this locus data or not\n * @param {Object} meeting old locus data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleLocusDTO(meeting: any, newLocus: any) {\n if (newLocus) {\n const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n const isSelfMovedToLobby =\n newLocus?.self?.devices[0]?.intent?.reason === _ON_HOLD_LOBBY_ &&\n newLocus?.self?.devices[0]?.intent?.type === _WAIT_;\n if (!meeting) {\n if (isNewLocusAsBreakout) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`\n );\n\n return newLocus.self?.state === _JOINED_;\n }\n\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n if (!isNewLocusAsBreakout) {\n return isSelfMovedToLobby || this.isNeedHandleMainLocus(meeting, newLocus);\n }\n\n return !isSelfMoved;\n }\n\n return true;\n }\n\n /**\n * get corresponding meeting object by locus data\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @returns {Object}\n * @private\n * @memberof Meetings\n */\n getCorrespondingMeetingByLocus(data) {\n // getting meeting by correlationId. This will happen for the new event\n // Either the locus\n // TODO : Add check for the callBack Address\n return (\n this.meetingCollection.getByKey(MEETING_KEY.LOCUS_URL, data.locusUrl) ||\n // @ts-ignore\n this.meetingCollection.getByKey(\n MEETING_KEY.CORRELATION_ID,\n // @ts-ignore\n MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)\n ) ||\n this.meetingCollection.getByKey(\n MEETING_KEY.SIP_URI,\n data.locus.self &&\n data.locus.self.callbackInfo &&\n data.locus.self.callbackInfo.callbackAddress\n ) ||\n (data.locus.info?.isUnifiedSpaceMeeting\n ? undefined\n : this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n data.locus.conversationUrl\n )) ||\n this.meetingCollection.getByKey(MEETING_KEY.MEETINGNUMBER, data.locus?.info?.webExMeetingId)\n );\n }\n\n /**\n * handle locus events and takes meeting actions with them as they come in\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {String} data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {\n let meeting = this.getCorrespondingMeetingByLocus(data);\n\n // Special case when locus has got replaced, This only happend once if a replace locus exists\n // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call\n\n if (!meeting && data.locus?.replaces?.length > 0) {\n // Always the last element in the replace is the active one\n meeting = this.meetingCollection.getByKey(\n MEETING_KEY.LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\n\n if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {\n meeting.locusInfo.updateMainSessionLocusCache(data.locus);\n }\n if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {\n LoggerProxy.logger.log(\n `Meetings:index#handleLocusEvent --> doesn't need to process locus event`\n );\n\n return;\n }\n if (!meeting) {\n // TODO: create meeting when we get a meeting object\n // const checkForEnded = (locus) => {\n // TODO: you already ended the meeting but you got an event later\n // Mainly for 1:1 Callsor meeting\n // Happens mainly after refresh\n\n // 1:1 Meeting\n // 1) You ended a call before but you got a mercury event\n // Make sure end the call and cleanup the meeting only if the mercury\n // event says so\n // 2) Maintain lastSync time in the meetings object which helps to compare\n // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid\n\n // For space Meeting\n // Check the locus object and see who has joined\n\n // };\n // rather then locus object change to locus url\n\n if (\n data.locus &&\n data.locus.fullState &&\n data.locus.fullState.state === LOCUS.STATE.INACTIVE\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object\n // Any future events will be neglected\n\n if (\n data.locus &&\n data.locus.self &&\n data.locus.self.state === _LEFT_ &&\n data.locus.self.removed === true\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n this.create(data.locus, DESTINATION_TYPE.LOCUS_ID, useRandomDelayForInfo)\n .then((newMeeting) => {\n meeting = newMeeting;\n\n // It's a new meeting so initialize the locus data\n meeting.locusInfo.initialSetup(data.locus);\n this.checkHandleBreakoutLocus(data.locus);\n })\n .catch((e) => {\n LoggerProxy.logger.error(e);\n })\n .finally(() => {\n // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted\n // because the other user left so before sending 'added' event make sure it exists in the collection\n\n if (this.getMeetingByType(_ID_, meeting.id)) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-started',\n payload: {\n trigger: 'mercury-event',\n },\n options: {\n meetingId: meeting.id,\n },\n });\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'handleLocusEvent',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_,\n }\n );\n } else {\n // Meeting got added but was not found in the collection. It might have got destroyed\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event'\n );\n }\n });\n } else {\n meeting.locusInfo.parse(meeting, data);\n }\n }\n\n /**\n * handles locus events through mercury that are not roap\n * @param {Object} envelope\n * @param {Object} envelope.data\n * @param {String} envelope.data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusMercury(envelope: {data: any}) {\n const {data} = envelope;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {\n this.handleLocusEvent(data, true);\n }\n }\n\n /**\n * handles mecury offline event\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleMercuryOffline() {\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'handleMercuryOffline',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n }\n\n /**\n * registers for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private listenForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {\n this.handleLocusMercury(envelope);\n });\n // @ts-ignore\n this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {\n MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n this.syncMeetings({keepOnlyLocusMeetings: false});\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n this.handleMercuryOffline();\n });\n }\n\n /**\n * stops listening for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private stopListeningForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n }\n\n /**\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private onReady() {\n // @ts-ignore\n this.webex.once(READY, () => {\n // @ts-ignore\n StaticConfig.set(this.config);\n // @ts-ignore\n LoggerConfig.set(this.config.logging);\n // @ts-ignore\n LoggerProxy.set(this.webex.logger);\n\n mediaLogger = new MediaLogger();\n setLogger(mediaLogger);\n\n /**\n * The MeetingInfo object to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.meetingInfo = this.config.experimental.enableUnifiedMeetings\n ? // @ts-ignore\n new MeetingInfoV2(this.webex)\n : // @ts-ignore\n new MeetingInfo(this.webex);\n // @ts-ignore\n this.personalMeetingRoom = new PersonalMeetingRoom(\n {meetingInfo: this.meetingInfo},\n // @ts-ignore\n {parent: this.webex}\n );\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'onReady',\n },\n EVENT_TRIGGERS.MEETINGS_READY\n );\n\n MeetingsUtil.checkH264Support({disableNotifications: true});\n // @ts-ignore\n Metrics.initialSetup(this.webex);\n });\n }\n\n /**\n * API to toggle unified meetings\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleUnifiedMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings = changeState;\n // @ts-ignore\n this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);\n }\n }\n\n /**\n * API to toggle starting adhoc meeting\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleAdhocMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableAdhocMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableAdhocMeetings = changeState;\n }\n }\n\n /**\n * API to toggle TCP reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTcpReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTcpReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTcpReachability = newValue;\n }\n }\n\n /**\n * API to toggle TLS reachability, needs to be called before webex.meetings.register()\n * @param {Boolean} newValue\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTlsReachability(newValue: boolean) {\n if (typeof newValue !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config.experimental.enableTlsReachability !== newValue) {\n // @ts-ignore\n this.config.experimental.enableTlsReachability = newValue;\n }\n }\n\n /**\n * Explicitly sets up the meetings plugin by registering\n * the device, connecting to mercury, and listening for locus events.\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n public register() {\n // @ts-ignore\n if (!this.webex.canAuthorize) {\n LoggerProxy.logger.error(\n 'Meetings:index#register --> ERROR, Unable to register, SDK cannot authorize'\n );\n\n return Promise.reject(new Error('SDK cannot authorize'));\n }\n\n if (this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#register --> INFO, Meetings plugin already registered'\n );\n\n return Promise.resolve();\n }\n\n return Promise.all([\n this.fetchUserPreferredWebexSite(),\n this.getGeoHint(),\n this.startReachability('registration').catch((error) => {\n LoggerProxy.logger.error(`Meetings:index#register --> GDM error, ${error.message}`);\n }),\n // @ts-ignore\n this.webex.internal.device\n .register()\n // @ts-ignore\n .then(() =>\n LoggerProxy.logger.info(\n // @ts-ignore\n `Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`\n )\n )\n // @ts-ignore\n .then(() => this.webex.internal.mercury.connect()),\n MeetingsUtil.checkH264Support.call(this),\n ])\n .then(() => {\n this.listenForEvents();\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'register',\n },\n EVENT_TRIGGERS.MEETINGS_REGISTERED\n );\n this.registered = true;\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_SUCCESS);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#register --> ERROR, Unable to register, ${error.message}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETINGS_REGISTRATION_FAILED, {\n reason: error.message,\n stack: error.stack,\n });\n\n return Promise.reject(error);\n });\n }\n\n /**\n * Explicitly tears down the meetings plugin by deregistering\n * the device, disconnecting from mercury, and stops listening to locus events\n *\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n unregister() {\n if (!this.registered) {\n LoggerProxy.logger.info(\n 'Meetings:index#unregister --> INFO, Meetings plugin already unregistered'\n );\n\n return Promise.resolve();\n }\n\n this.stopListeningForEvents();\n\n return (\n // @ts-ignore\n this.webex.internal.mercury\n .disconnect()\n // @ts-ignore\n .then(() => this.webex.internal.device.unregister())\n .then(() => {\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'unregister',\n },\n EVENT_TRIGGERS.MEETINGS_UNREGISTERED\n );\n this.registered = false;\n })\n );\n }\n\n /**\n * Creates a noise reduction effect\n *\n * @param {INoiseReductionEffect} options optional custom effect options\n * @returns {Promise<effect>} noise reduction effect.\n * @public\n * @memberof Meetings\n */\n createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});\n };\n\n /**\n * Creates a virtual background effect\n *\n * @param {IVirtualBackgroundEffect} options optional custom effect options\n * @returns {Promise<effect>} virtual background effect.\n * @public\n * @memberof Meetings\n */\n createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});\n };\n\n /**\n * Uploads logs to the webex services for tracking\n * @param {Object} [options={}]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.feedbackId] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.meetingId] webex meeting ID\n * @param {String} [options.userId] userId\n * @param {String} [options.orgId] org id\n * @returns {String} feedback ID logs were submitted under\n */\n uploadLogs(\n options: {\n autoupload?: boolean;\n callStart?: string;\n feedbackId?: string;\n locussessionid?: string;\n locusId?: string;\n correlationId?: string;\n meetingId?: string;\n userId?: string;\n orgId?: string;\n } = {}\n ) {\n LoggerProxy.logger.info('Meetings:index#uploadLogs --> uploading logs');\n\n return this.loggerRequest\n .uploadLogs(options)\n .then((uploadResult) => {\n LoggerProxy.logger.info(\n 'Meetings:index#uploadLogs --> Upload logs for meeting completed.',\n uploadResult\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,\n {\n meetingId: options.meetingId,\n details: uploadResult,\n }\n );\n\n return uploadResult;\n })\n .catch((uploadError) => {\n LoggerProxy.logger.error(\n 'Meetings:index#uploadLogs --> Unable to upload logs for meeting',\n uploadError\n );\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,\n {\n meetingId: options.meetingId,\n reason: uploadError,\n }\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {\n ...options,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * gets the reachability instance for Meetings\n * @returns {Reachability}\n * @public\n * @memberof Meetings\n */\n getReachability() {\n return this.reachability;\n }\n\n /**\n * initializes and starts gathering reachability for Meetings\n * @param {string} trigger - explains the reason for starting reachability\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability(trigger = 'client') {\n return this.getReachability().gatherReachability(trigger);\n }\n\n /**\n * Get geoHint for info for meetings\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n getGeoHint() {\n return this.request.fetchGeoHint().then((res) => {\n this.geoHintInfo = res;\n });\n }\n\n /**\n * Fetch user preferred webex site information\n * This also has other infomation about the user\n * @returns {Promise}\n * @private\n * @memberof Meetings\n */\n fetchUserPreferredWebexSite() {\n return this.request.getMeetingPreferences().then((res) => {\n if (res) {\n const preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n }\n\n // fall back to getting the preferred site from the user information\n if (!this.preferredWebexSite) {\n // @ts-ignore\n return this.webex.internal.user\n .get()\n .then((user) => {\n const preferredWebexSite =\n user?.userPreferences?.userPreferencesItems?.preferredWebExSite;\n if (preferredWebexSite) {\n this.preferredWebexSite = preferredWebexSite;\n // @ts-ignore\n this.webex.internal.services._getCatalog().addAllowedDomains([preferredWebexSite]);\n } else {\n throw new Error('site not found');\n }\n })\n .catch(() => {\n LoggerProxy.logger.error(\n 'Failed to fetch preferred site from user - no site will be set'\n );\n });\n }\n\n return Promise.resolve();\n });\n }\n\n /**\n * gets the personal meeting room instance, for saved PMR values for this user\n * @returns {PersonalMeetingRoom}\n * @public\n * @memberof Meetings\n */\n\n getPersonalMeetingRoom() {\n return this.personalMeetingRoom;\n }\n\n /**\n * Returns basic information about a meeting that exists or\n * used to exist in the MeetingCollection\n *\n * @param {string} meetingId\n * @returns {BasicMeetingInformation|undefined}\n */\n public getBasicMeetingInformation(meetingId: string): BasicMeetingInformation {\n return this.meetingCollection.get(meetingId) || this.deletedMeetings.get(meetingId);\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} reason\n * @param {String} type\n * @returns {Undefined}\n * @private\n * @memberof Meetings\n */\n private destroy(meeting: Meeting, reason: object) {\n MeetingUtil.cleanUp(meeting);\n // keep some basic info about the deleted meeting forever\n this.deletedMeetings.set(meeting.id, {\n id: meeting.id,\n allowMediaInLobby: meeting.allowMediaInLobby,\n correlationId: meeting.correlationId,\n sessionCorrelationId: meeting.sessionCorrelationId,\n environment: meeting.environment,\n locusUrl: meeting.locusUrl,\n meetingInfo: cloneDeep(meeting.meetingInfo),\n locusInfo: {\n // locusInfo can be quite big, so keep just the minimal info\n sequence: meeting.locusInfo?.sequence,\n url: meeting.locusInfo?.url,\n fullState: {\n lastActive: meeting.locusInfo?.fullState?.lastActive,\n sessionId: meeting.locusInfo?.fullState?.sessionId,\n },\n },\n });\n this.meetingCollection.delete(meeting.id);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'destroy',\n },\n EVENT_TRIGGERS.MEETING_REMOVED,\n {\n meetingId: meeting.id,\n reason,\n }\n );\n }\n\n /**\n * Create a meeting or return an existing meeting.\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {string} destination - sipURL, phonenumber, or locus object}\n * @param {DESTINATION_TYPE} [type] - the optional specified type, such as locusId\n * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {string} correlationId - the optional specified correlationId (callStateForMetrics.correlationId can be provided instead)\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @param {string} sessionCorrelationId - the optional specified sessionCorrelationId (callStateForMetrics.sessionCorrelationId) can be provided instead\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(\n destination: string,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n correlationId: string = undefined,\n failOnMissingMeetingInfo = false,\n callStateForMetrics: CallStateForMetrics = undefined,\n meetingInfo = undefined,\n meetingLookupUrl = undefined,\n sessionCorrelationId: string = undefined\n ) {\n // Validate meeting information based on the provided destination and\n // type. This must be performed prior to determining if the meeting is\n // found in the collection, as we mutate the destination for hydra person\n // id values.\n\n if (correlationId) {\n callStateForMetrics = {...(callStateForMetrics || {}), correlationId};\n }\n\n if (sessionCorrelationId) {\n callStateForMetrics = {...(callStateForMetrics || {}), sessionCorrelationId};\n }\n\n return (\n this.meetingInfo\n .fetchInfoOptions(destination, type)\n // Catch a failure to fetch info options.\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`\n );\n if (error instanceof SpaceIDDeprecatedError) {\n throw new SpaceIDDeprecatedError();\n }\n })\n .then((options: any = {}) => {\n // Normalize the destination.\n const targetDest = options.destination || destination;\n\n // check for the conversation URL then sip Url\n let meeting = null;\n\n if (\n type === DESTINATION_TYPE.CONVERSATION_URL ||\n options.type === DESTINATION_TYPE.CONVERSATION_URL\n ) {\n const foundMeeting = this.meetingCollection.getByKey(\n MEETING_KEY.CONVERSATION_URL,\n targetDest\n );\n\n if (foundMeeting) {\n const foundMeetingIsNotCalendarMeeting = !foundMeeting.locusInfo.scheduledMeeting;\n\n // If the found meeting is not a calendar meeting, return that meeting.\n // This allows for the creation of instant-meetings when calendar meetings are present.\n if (foundMeetingIsNotCalendarMeeting) {\n meeting = foundMeeting;\n }\n }\n }\n\n // Attempt to collect the meeting if it exists.\n if (!meeting) {\n meeting = this.meetingCollection.getByKey(MEETING_KEY.SIP_URI, targetDest);\n }\n\n // Validate if a meeting was found.\n if (!meeting) {\n // Create a meeting based on the normalized destination and type.\n return this.createMeeting(\n targetDest,\n type,\n useRandomDelayForInfo,\n infoExtraParams,\n callStateForMetrics,\n failOnMissingMeetingInfo,\n meetingInfo,\n meetingLookupUrl\n ).then((createdMeeting: any) => {\n // If the meeting was successfully created.\n if (createdMeeting && createdMeeting.on) {\n // Create a destruction event for the meeting.\n createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: createdMeeting.locusInfo?.fullState?.lastActive,\n locussessionid: createdMeeting.locusInfo?.fullState?.sessionId,\n correlationId: createdMeeting.correlationId,\n feedbackId: createdMeeting.correlationId,\n locusId: createdMeeting.locusId,\n meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n }).then(() => this.destroy(createdMeeting, payload.reason));\n } else {\n this.destroy(createdMeeting, payload.reason);\n }\n });\n\n createdMeeting.on(EVENTS.REQUEST_UPLOAD_LOGS, (meetingInstance) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: meetingInstance?.locusInfo?.fullState?.lastActive,\n locussessionid: meetingInstance?.locusInfo?.fullState?.sessionId,\n correlationId: meetingInstance.correlationId,\n feedbackId: meetingInstance.correlationId,\n locusId: meetingInstance.locusId,\n meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,\n autoupload: true,\n });\n }\n });\n } else {\n LoggerProxy.logger.error(\n `Meetings:index#create --> ERROR, meeting does not have on method, will not be destroyed, meeting cleanup impossible for meeting: ${meeting}`\n );\n }\n\n // Return the newly created meeting.\n return Promise.resolve(createdMeeting);\n });\n }\n meeting.setCallStateForMetrics(callStateForMetrics);\n\n // Return the existing meeting.\n return Promise.resolve(meeting);\n })\n );\n }\n\n /**\n * Create meeting\n *\n * When meeting info passed it should be complete, e.g.: fetched after password or captcha provided\n *\n * @param {String} destination see create()\n * @param {DESTINATION_TYPE} type see create()\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {CallStateForMetrics} callStateForMetrics - information about call state for metrics\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @param {Object} [meetingInfo] - Pre-fetched complete meeting info\n * @param {String} [meetingLookupUrl] - meeting info prefetch url\n * @returns {Promise} a new meeting instance complete with meeting info and destination\n * @private\n * @memberof Meetings\n */\n private async createMeeting(\n destination: any,\n type: DESTINATION_TYPE = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n callStateForMetrics: CallStateForMetrics = undefined,\n failOnMissingMeetingInfo = false,\n meetingInfo = undefined,\n meetingLookupUrl = undefined\n ) {\n const meeting = new Meeting(\n {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n // @ts-ignore\n deviceUrl: this.webex.internal.device.url,\n // @ts-ignore\n orgId: this.webex.internal.device.orgId,\n locus: type === DESTINATION_TYPE.LOCUS_ID ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\n callStateForMetrics,\n },\n {\n // @ts-ignore\n parent: this.webex,\n }\n );\n\n this.meetingCollection.set(meeting);\n\n try {\n // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,\n // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo\n // between 5 and 2 min (random between 3 minutes) before the meeting starts\n // to avoid a spike in traffic to the wbxappi service\n let waitingTime = 0;\n\n if (destination.meeting) {\n const {startTime} = destination.meeting;\n const startTimeDate = new Date(startTime);\n const startTimeDatestamp = startTimeDate.getTime();\n const timeToStart = startTimeDatestamp - Date.now();\n const maxWaitingTime = Math.max(\n Math.min(timeToStart, MAX_RANDOM_DELAY_FOR_MEETING_INFO),\n 0\n );\n\n waitingTime = Math.round(Math.random() * maxWaitingTime);\n }\n const isMeetingActive = !!destination.fullState?.active;\n // @ts-ignore\n const {enableUnifiedMeetings} = this.config.experimental;\n const meetingInfoOptions = {\n extraParams: infoExtraParams,\n sendCAevents: !!callStateForMetrics?.correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n };\n\n if (meetingInfo) {\n meeting.injectMeetingInfo(meetingInfo, meetingInfoOptions, meetingLookupUrl);\n } else if (type !== DESTINATION_TYPE.ONE_ON_ONE_CALL) {\n // ignore fetchMeetingInfo for 1:1 meetings\n if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {\n meeting.fetchMeetingInfoTimeoutId = setTimeout(\n () => meeting.fetchMeetingInfo(meetingInfoOptions),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo(meetingInfoOptions);\n }\n }\n } catch (err) {\n if (\n !(err instanceof CaptchaError) &&\n !(err instanceof PasswordError) &&\n !(err instanceof PermissionError)\n ) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\n if (failOnMissingMeetingInfo) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`\n );\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);\n throw new NoMeetingInfoError();\n }\n // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n 'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'\n );\n }\n LoggerProxy.logger.debug(\n `Meetings:index#createMeeting --> Debug ${err} fetching /meetingInfo for creation.`\n );\n } finally {\n // For type LOCUS_ID we need to parse the locus object to get the information\n // about the caller and callee\n // Meeting Added event will be created in `handleLocusEvent`\n if (type !== DESTINATION_TYPE.LOCUS_ID) {\n if (!meeting.sipUri) {\n meeting.setSipUri(destination);\n }\n\n // TODO: check if we have to move this to parser\n const meetingAddedType = MeetingsUtil.getMeetingAddedType(type);\n\n // We typically shouldn't need to trigger both and event and return a promise.\n // Is this a special case? We want to make the public API usage as simple as possible.\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'createMeeting',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meetingAddedType,\n }\n );\n }\n }\n\n return meeting;\n\n // Create the meeting calling the necessary service endpoints.\n\n // Internally, there are many more destinations:\n //\n // - locusID\n // - meetingURL\n // - globalMeetingID, e.g, *00*meetingID\n // - meetingID\n // - meetingURL\n // - PSTN\n // - phone number\n //\n // Our job is to determine the appropriate one\n // and its corresponding service so that developers\n // need only sipURL to get a meeting\n // and its ID, but have the option to use createWithType()\n // and specify those types to get meetingInfo\n }\n\n /**\n * get a specifc meeting given it's type matched to the value, i.e., locus url\n * @param {String} type\n * @param {Object} value\n * @returns {Meeting}\n * @public\n * @memberof Meetings\n */\n public getMeetingByType(type: string, value: object) {\n return this.meetingCollection.getByKey(type, value);\n }\n\n /**\n * Get all meetings.\n * @returns {Object} All currently active meetings.\n * @public\n * @memberof Meetings\n */\n public getAllMeetings() {\n return this.meetingCollection.getAll();\n }\n\n /**\n * Syncs all the meetings from server. Does nothing and returns immediately if unverified guest.\n * @param {boolean} keepOnlyLocusMeetings - whether the sync should keep only locus meetings or any other meeting in meetingCollection\n * @returns {Promise<void>}\n * @public\n * @memberof Meetings\n */\n public syncMeetings({keepOnlyLocusMeetings = true} = {}): Promise<void> {\n // @ts-ignore\n if (this.webex.credentials.isUnverifiedGuest) {\n LoggerProxy.logger.info(\n 'Meetings:index#syncMeetings --> skipping meeting sync as unverified guest'\n );\n\n return Promise.resolve();\n }\n\n return this.request\n .getActiveMeetings()\n .then((locusArray) => {\n const activeLocusUrl = [];\n\n if (locusArray?.loci && locusArray.loci.length > 0) {\n const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);\n lociToUpdate.forEach((locus) => {\n activeLocusUrl.push(locus.url);\n this.handleLocusEvent({\n locus,\n locusUrl: locus.url,\n });\n });\n }\n const meetingsCollection = this.meetingCollection.getAll();\n\n if (Object.keys(meetingsCollection).length > 0) {\n // Sometimes the mercury events are lost after mercury reconnect\n // Remove any Locus meetings that are not returned by Locus\n // (they had a locusUrl previously but are no longer active) in the sync\n for (const meeting of Object.values(meetingsCollection)) {\n // @ts-ignore\n const {locusUrl} = meeting;\n if ((keepOnlyLocusMeetings || locusUrl) && !activeLocusUrl.includes(locusUrl)) {\n // destroy function also uploads logs\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);\n }\n }\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:index#syncMeetings --> failed to sync meetings, ${error}`\n );\n throw new Error(error);\n });\n }\n\n /**\n * sort out locus array for initial creating\n * @param {Array} loci original locus array\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n sortLocusArrayToUpdate(loci: any[]) {\n const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));\n const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));\n this.breakoutLocusForHandleLater = [];\n const lociToUpdate = [...mainLoci];\n breakoutLoci.forEach((breakoutLocus) => {\n const associateMainLocus = mainLoci.find(\n (mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url\n );\n const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({\n locus: breakoutLocus,\n locusUrl: breakoutLocus.url,\n });\n\n if (associateMainLocus && !existCorrespondingMeeting) {\n // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,\n // after meeting create with main locus, then handle the associate breakout locus.\n // if only handle breakout locus, will miss some date\n this.breakoutLocusForHandleLater.push(breakoutLocus);\n } else {\n lociToUpdate.push(breakoutLocus);\n }\n });\n\n return lociToUpdate;\n }\n\n /**\n * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus\n * @param {Object} newCreatedLocus the locus which just create meeting object of it\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n checkHandleBreakoutLocus(newCreatedLocus) {\n if (\n !newCreatedLocus ||\n !this.breakoutLocusForHandleLater ||\n !this.breakoutLocusForHandleLater.length\n ) {\n return;\n }\n if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {\n return;\n }\n const existIndex = this.breakoutLocusForHandleLater.findIndex(\n (breakoutLocus) =>\n breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url\n );\n\n if (existIndex < 0) {\n return;\n }\n\n const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];\n this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});\n this.breakoutLocusForHandleLater.splice(existIndex, 1);\n }\n\n /**\n * Get the logger instance for plugin-meetings\n * @returns {Logger}\n */\n getLogger() {\n return LoggerProxy.get();\n }\n\n /**\n * Returns the first meeting it finds that has the webrtc media connection created.\n * Useful for debugging in the console.\n *\n * @private\n * @returns {Meeting} Meeting object that has a webrtc media connection, else undefined\n */\n getActiveWebrtcMeeting() {\n return this.meetingCollection.getActiveWebrtcMeeting();\n }\n}\n"],"mappings":"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"}
@@ -51,6 +51,20 @@ import { INoiseReductionEffect, IVirtualBackgroundEffect } from './meetings.type
51
51
  * @property {String} type what type of meeting it was
52
52
  * @memberof Meetings
53
53
  */
54
+ /**
55
+ * Object containing only the most basic information about a meeting.
56
+ * This is the information that is kept even after the meeting is deleted from the MeetingCollection
57
+ */
58
+ export type BasicMeetingInformation = {
59
+ allowMediaInLobby: boolean;
60
+ correlationId: string;
61
+ environment: string;
62
+ id: string;
63
+ locusUrl: string;
64
+ locusInfo: any;
65
+ meetingInfo: any;
66
+ sessionCorrelationId: string;
67
+ };
54
68
  /**
55
69
  * Maintain a cache of meetings and sync with services.
56
70
  * @class
@@ -59,6 +73,7 @@ export default class Meetings extends WebexPlugin {
59
73
  loggerRequest: any;
60
74
  media: any;
61
75
  meetingCollection: any;
76
+ deletedMeetings: Map<string, BasicMeetingInformation>;
62
77
  personalMeetingRoom: any;
63
78
  preferredWebexSite: any;
64
79
  reachability: Reachability;
@@ -281,6 +296,14 @@ export default class Meetings extends WebexPlugin {
281
296
  * @memberof Meetings
282
297
  */
283
298
  getPersonalMeetingRoom(): any;
299
+ /**
300
+ * Returns basic information about a meeting that exists or
301
+ * used to exist in the MeetingCollection
302
+ *
303
+ * @param {string} meetingId
304
+ * @returns {BasicMeetingInformation|undefined}
305
+ */
306
+ getBasicMeetingInformation(meetingId: string): BasicMeetingInformation;
284
307
  /**
285
308
  * @param {Meeting} meeting
286
309
  * @param {Object} reason
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
62
62
  updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
63
63
  this.set('canManageWebcast', canManageWebcast);
64
64
  },
65
- version: "3.5.0-next.11"
65
+ version: "3.5.0-next.13"
66
66
  });
67
67
  var _default = exports.default = Webinar;
68
68
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,13 +43,13 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.5.0-next.11",
47
- "@webex/plugin-rooms": "3.5.0-next.8",
48
- "@webex/test-helper-chai": "3.5.0-next.6",
49
- "@webex/test-helper-mocha": "3.5.0-next.6",
50
- "@webex/test-helper-mock-webex": "3.5.0-next.6",
51
- "@webex/test-helper-retry": "3.5.0-next.6",
52
- "@webex/test-helper-test-users": "3.5.0-next.6",
46
+ "@webex/plugin-meetings": "3.5.0-next.13",
47
+ "@webex/plugin-rooms": "3.5.0-next.10",
48
+ "@webex/test-helper-chai": "3.5.0-next.8",
49
+ "@webex/test-helper-mocha": "3.5.0-next.8",
50
+ "@webex/test-helper-mock-webex": "3.5.0-next.8",
51
+ "@webex/test-helper-retry": "3.5.0-next.8",
52
+ "@webex/test-helper-test-users": "3.5.0-next.8",
53
53
  "chai": "^4.3.4",
54
54
  "chai-as-promised": "^7.1.1",
55
55
  "eslint": "^8.24.0",
@@ -61,21 +61,21 @@
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "dependencies": {
64
- "@webex/common": "3.5.0-next.6",
64
+ "@webex/common": "3.5.0-next.8",
65
65
  "@webex/internal-media-core": "2.11.3",
66
- "@webex/internal-plugin-conversation": "3.5.0-next.8",
67
- "@webex/internal-plugin-device": "3.5.0-next.6",
68
- "@webex/internal-plugin-llm": "3.5.0-next.6",
69
- "@webex/internal-plugin-mercury": "3.5.0-next.6",
70
- "@webex/internal-plugin-metrics": "3.5.0-next.6",
71
- "@webex/internal-plugin-support": "3.5.0-next.8",
72
- "@webex/internal-plugin-user": "3.5.0-next.6",
73
- "@webex/internal-plugin-voicea": "3.5.0-next.11",
74
- "@webex/media-helpers": "3.5.0-next.7",
75
- "@webex/plugin-people": "3.5.0-next.6",
76
- "@webex/plugin-rooms": "3.5.0-next.8",
66
+ "@webex/internal-plugin-conversation": "3.5.0-next.10",
67
+ "@webex/internal-plugin-device": "3.5.0-next.8",
68
+ "@webex/internal-plugin-llm": "3.5.0-next.8",
69
+ "@webex/internal-plugin-mercury": "3.5.0-next.8",
70
+ "@webex/internal-plugin-metrics": "3.5.0-next.8",
71
+ "@webex/internal-plugin-support": "3.5.0-next.10",
72
+ "@webex/internal-plugin-user": "3.5.0-next.8",
73
+ "@webex/internal-plugin-voicea": "3.5.0-next.13",
74
+ "@webex/media-helpers": "3.5.0-next.9",
75
+ "@webex/plugin-people": "3.5.0-next.8",
76
+ "@webex/plugin-rooms": "3.5.0-next.10",
77
77
  "@webex/web-capabilities": "^1.4.0",
78
- "@webex/webex-core": "3.5.0-next.6",
78
+ "@webex/webex-core": "3.5.0-next.8",
79
79
  "ampersand-collection": "^2.0.2",
80
80
  "bowser": "^2.11.0",
81
81
  "btoa": "^1.2.1",
@@ -91,5 +91,5 @@
91
91
  "//": [
92
92
  "TODO: upgrade jwt-decode when moving to node 18"
93
93
  ],
94
- "version": "3.5.0-next.11"
94
+ "version": "3.5.0-next.13"
95
95
  }
@@ -1,5 +1,5 @@
1
1
  /* eslint no-shadow: ["error", { "allow": ["eventType"] }] */
2
- import {union} from 'lodash';
2
+ import {cloneDeep, union} from 'lodash';
3
3
  import '@webex/internal-plugin-mercury';
4
4
  import '@webex/internal-plugin-conversation';
5
5
  import '@webex/internal-plugin-metrics';
@@ -133,6 +133,21 @@ class MediaLogger {
133
133
  * @memberof Meetings
134
134
  */
135
135
 
136
+ /**
137
+ * Object containing only the most basic information about a meeting.
138
+ * This is the information that is kept even after the meeting is deleted from the MeetingCollection
139
+ */
140
+ export type BasicMeetingInformation = {
141
+ allowMediaInLobby: boolean;
142
+ correlationId: string;
143
+ environment: string;
144
+ id: string;
145
+ locusUrl: string;
146
+ locusInfo: any; // it's only a very small subset of the locus info, see what's populated in the destroy() method
147
+ meetingInfo: any;
148
+ sessionCorrelationId: string;
149
+ };
150
+
136
151
  /**
137
152
  * Maintain a cache of meetings and sync with services.
138
153
  * @class
@@ -141,6 +156,7 @@ export default class Meetings extends WebexPlugin {
141
156
  loggerRequest: any;
142
157
  media: any;
143
158
  meetingCollection: any;
159
+ deletedMeetings: Map<string, BasicMeetingInformation>;
144
160
  personalMeetingRoom: any;
145
161
  preferredWebexSite: any;
146
162
  reachability: Reachability;
@@ -191,6 +207,8 @@ export default class Meetings extends WebexPlugin {
191
207
  // @ts-ignore
192
208
  this.loggerRequest = new LoggerRequest({webex: this.webex});
193
209
  this.meetingCollection = new MeetingCollection();
210
+ this.deletedMeetings = new Map();
211
+
194
212
  /**
195
213
  * The PersonalMeetingRoom object to interact with server
196
214
  * @instance
@@ -1042,6 +1060,17 @@ export default class Meetings extends WebexPlugin {
1042
1060
  return this.personalMeetingRoom;
1043
1061
  }
1044
1062
 
1063
+ /**
1064
+ * Returns basic information about a meeting that exists or
1065
+ * used to exist in the MeetingCollection
1066
+ *
1067
+ * @param {string} meetingId
1068
+ * @returns {BasicMeetingInformation|undefined}
1069
+ */
1070
+ public getBasicMeetingInformation(meetingId: string): BasicMeetingInformation {
1071
+ return this.meetingCollection.get(meetingId) || this.deletedMeetings.get(meetingId);
1072
+ }
1073
+
1045
1074
  /**
1046
1075
  * @param {Meeting} meeting
1047
1076
  * @param {Object} reason
@@ -1052,6 +1081,25 @@ export default class Meetings extends WebexPlugin {
1052
1081
  */
1053
1082
  private destroy(meeting: Meeting, reason: object) {
1054
1083
  MeetingUtil.cleanUp(meeting);
1084
+ // keep some basic info about the deleted meeting forever
1085
+ this.deletedMeetings.set(meeting.id, {
1086
+ id: meeting.id,
1087
+ allowMediaInLobby: meeting.allowMediaInLobby,
1088
+ correlationId: meeting.correlationId,
1089
+ sessionCorrelationId: meeting.sessionCorrelationId,
1090
+ environment: meeting.environment,
1091
+ locusUrl: meeting.locusUrl,
1092
+ meetingInfo: cloneDeep(meeting.meetingInfo),
1093
+ locusInfo: {
1094
+ // locusInfo can be quite big, so keep just the minimal info
1095
+ sequence: meeting.locusInfo?.sequence,
1096
+ url: meeting.locusInfo?.url,
1097
+ fullState: {
1098
+ lastActive: meeting.locusInfo?.fullState?.lastActive,
1099
+ sessionId: meeting.locusInfo?.fullState?.sessionId,
1100
+ },
1101
+ },
1102
+ });
1055
1103
  this.meetingCollection.delete(meeting.id);
1056
1104
  Trigger.trigger(
1057
1105
  this,
@@ -196,6 +196,43 @@ describe('plugin-meetings', () => {
196
196
  assert.calledOnce(MeetingsUtil.checkH264Support);
197
197
  });
198
198
 
199
+ describe('#getBasicMeetingInformation', () => {
200
+ beforeEach(() => {
201
+ sinon.stub(MeetingUtil, 'cleanUp');
202
+ });
203
+
204
+ it('returns correct meeting information', async () => {
205
+ const meeting = await webex.meetings.createMeeting('test', 'test');
206
+
207
+ const meetingIds = {
208
+ meetingId: meeting.id,
209
+ correlationId: meeting.correlationId,
210
+ };
211
+
212
+ // before meeting is destroyed - it should return information from the meetingCollection
213
+ assert.equal(
214
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
215
+ meetingIds.meetingId
216
+ );
217
+ assert.equal(
218
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
219
+ meetingIds.correlationId
220
+ );
221
+
222
+ webex.meetings.destroy(meeting, test1);
223
+
224
+ // and it should still return the information after the meeting is destroyed
225
+ assert.equal(
226
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
227
+ meetingIds.meetingId
228
+ );
229
+ assert.equal(
230
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
231
+ meetingIds.correlationId
232
+ );
233
+ });
234
+ });
235
+
199
236
  describe('#startReachability', () => {
200
237
  let gatherReachabilitySpy;
201
238
  let fakeResult = {id: 'fake-result'};
@@ -1904,17 +1941,23 @@ describe('plugin-meetings', () => {
1904
1941
  assert.exists(webex.meetings.destroy);
1905
1942
  });
1906
1943
  describe('correctly established meeting', () => {
1944
+ let deleteSpy;
1907
1945
  beforeEach(() => {
1908
- webex.meetings.meetingCollection.delete = sinon.stub().returns(true);
1946
+ deleteSpy = sinon.spy(webex.meetings.meetingCollection, 'delete');
1909
1947
  });
1910
1948
 
1911
- it('tests the destroy removal from the collection', async () => {
1949
+ it('tests the destroy removal from the collection and storing basic info in deletedMeetings', async () => {
1912
1950
  const meeting = await webex.meetings.createMeeting('test', 'test');
1913
1951
 
1952
+ const meetingIds = {
1953
+ meetingId: meeting.id,
1954
+ correlationId: meeting.correlationId,
1955
+ };
1956
+
1914
1957
  webex.meetings.destroy(meeting, test1);
1915
1958
 
1916
- assert.calledOnce(webex.meetings.meetingCollection.delete);
1917
- assert.calledWith(webex.meetings.meetingCollection.delete, meeting.id);
1959
+ assert.calledOnce(deleteSpy);
1960
+ assert.calledWith(deleteSpy, meeting.id);
1918
1961
  assert.calledWith(
1919
1962
  TriggerProxy.trigger,
1920
1963
  sinon.match.instanceOf(Meetings),
@@ -1928,6 +1971,23 @@ describe('plugin-meetings', () => {
1928
1971
  reason: test1,
1929
1972
  }
1930
1973
  );
1974
+
1975
+ // check that the meeting is stored in deletedMeetings and removed from meetingCollection
1976
+ assert.equal(webex.meetings.deletedMeetings.get(meeting.id).id, meetingIds.meetingId);
1977
+ assert.equal(
1978
+ webex.meetings.deletedMeetings.get(meeting.id).correlationId,
1979
+ meetingIds.correlationId
1980
+ );
1981
+
1982
+ assert.equal(webex.meetings.meetingCollection.get(meeting.id), undefined);
1983
+
1984
+ // and that getBasicMeetingInformation() still returns the meeting info
1985
+ const deletedMeetingInfo = webex.meetings.getBasicMeetingInformation(
1986
+ meetingIds.meetingId
1987
+ );
1988
+
1989
+ assert.equal(deletedMeetingInfo.id, meetingIds.meetingId);
1990
+ assert.equal(deletedMeetingInfo.correlationId, meetingIds.correlationId);
1931
1991
  });
1932
1992
  });
1933
1993