@webex/plugin-meetings 3.0.0-beta.57 → 3.0.0-beta.58

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.
@@ -130,7 +130,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
130
130
  sessionId: this.sessionId
131
131
  });
132
132
  },
133
- version: "3.0.0-beta.57"
133
+ version: "3.0.0-beta.58"
134
134
  });
135
135
  var _default = Breakout;
136
136
  exports.default = _default;
@@ -718,7 +718,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
718
718
  }
719
719
  });
720
720
  },
721
- version: "3.0.0-beta.57"
721
+ version: "3.0.0-beta.58"
722
722
  });
723
723
  var _default = Breakouts;
724
724
  exports.default = _default;
@@ -1076,6 +1076,9 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1076
1076
  }
1077
1077
  }
1078
1078
  }
1079
+ }).catch(function (error) {
1080
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1081
+ throw new Error(error);
1079
1082
  });
1080
1083
  }
1081
1084
 
@@ -1 +1 @@
1
- {"version":3,"names":["mediaLogger","MediaLogger","LoggerProxy","logger","info","log","error","warn","trace","debug","Meetings","args","MEETINGS","request","Request","parent","webex","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","personalMeetingRoom","reachability","registered","preferredWebexSite","media","getUserMedia","Media","getSupportedDevice","onReady","data","useRandomDelayForInfo","meeting","getByKey","LOCUS_URL","locusUrl","CORRELATION_ID","MeetingsUtil","checkForCorrelationId","internal","device","url","locus","SIP_URI","self","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","replaces","length","fullState","state","LOCUS","STATE","INACTIVE","_LEFT_","removed","create","_LOCUS_ID_","then","newMeeting","locusInfo","initialSetup","catch","e","finally","getMeetingByType","_ID_","id","Metrics","postEvent","event","eventType","REMOTE_STARTED","trigger","MERCURY_EVENT","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","type","_MEETING_","_JOIN_","_INCOMING_","parse","envelope","LOCUSEVENT","MESSAGE_ROAP","handleLocusEvent","MEETINGS_NETWORK_DISCONNECTED","mercury","on","LOCUS_MERCURY","handleLocusMercury","ROAP","ROAP_MERCURY","handleRoapMercury","ONLINE","syncMeetings","OFFLINE","handleMercuryOffline","off","once","READY","StaticConfig","set","config","LoggerConfig","logging","setLogger","meetingInfo","experimental","enableUnifiedMeetings","MeetingInfoV2","MeetingInfo","PersonalMeetingRoom","MEETINGS_READY","checkH264Support","disableNotifications","changeState","enable","enableTurnDiscovery","enableAdhocMeetings","canAuthorize","reject","Error","resolve","all","fetchUserPreferredWebexSite","getGeoHint","startReachability","message","register","connect","call","listenForEvents","MEETINGS_REGISTERED","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_FAILED","reason","stack","stopListeningForEvents","disconnect","unregister","MEETINGS_UNREGISTERED","options","uploadLogs","uploadResult","MEETING_LOG_UPLOAD_SUCCESS","meetingId","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","meetingsId","code","Reachability","setReachability","getReachability","gatherReachability","fetchGeoHint","res","geoHintInfo","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","MeetingUtil","cleanUp","delete","MEETING_REMOVED","destination","fetchInfoOptions","targetDest","_CONVERSATION_URL_","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","payload","autoUploadLogs","callStart","lastActive","correlationId","feedbackId","locusId","webExMeetingId","destroy","REQUEST_UPLOAD_LOGS","meetingInstance","Meeting","userId","deviceUrl","orgId","meetingInfoProvider","destinationType","waitingTime","startTime","startTimeDate","Date","startTimeDatestamp","getTime","timeToStart","maxWaitingTime","Math","max","min","MAX_RANDOM_DELAY_FOR_MEETING_INFO","round","random","isMeetingActive","active","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","parseMeetingInfo","CaptchaError","PasswordError","sipUri","setSipUri","meetingAddedType","getMeetingAddedType","value","getAll","getActiveMeetings","locusArray","activeLocusUrl","loci","forEach","push","meetingsCollection","includes","MEETING_REMOVED_REASON","NO_MEETINGS_TO_SYNC","scheduled","get","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport {trigger, eventType} from '../metrics/config';\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 LOCUS_URL,\n MAX_RANDOM_DELAY_FOR_MEETING_INFO,\n ROAP,\n ONLINE,\n OFFLINE,\n _MEETING_,\n _JOIN_,\n _LOCUS_ID_,\n _INCOMING_,\n LOCUS,\n CORRELATION_ID,\n SIP_URI,\n _LEFT_,\n _ID_,\n MEETING_REMOVED_REASON,\n _CONVERSATION_URL_,\n CONVERSATION_URL,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport MeetingInfo from '../meeting-info';\nimport MeetingInfoV2 from '../meeting-info/meeting-info-v2';\nimport Meeting 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';\n\nimport MeetingCollection from './collection';\nimport MeetingsUtil from './util';\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: any;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n\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 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 * The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.reachability = null;\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 getSupportedDevice: Media.getSupportedDevice,\n };\n\n this.onReady();\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 = null;\n\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 meeting =\n this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||\n // @ts-ignore\n this.meetingCollection.getByKey(\n CORRELATION_ID,\n // @ts-ignore\n MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)\n ) ||\n this.meetingCollection.getByKey(\n 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(CONVERSATION_URL, data.locus.conversationUrl));\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 LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\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, _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 })\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 Metrics.postEvent({\n event: eventType.REMOTE_STARTED,\n meeting,\n data: {trigger: trigger.MERCURY_EVENT},\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();\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.meetingCollection, 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 enable or disable TURN discovery\n * @param {Boolean} enable\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTurnDiscovery(enable: boolean) {\n if (typeof enable !== 'boolean') {\n return;\n }\n // @ts-ignore\n this.config.experimental.enableTurnDiscovery = enable;\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 * 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().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 * 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 callStart?: string;\n feedbackId?: 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 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 // @ts-ignore - seems like typo\n meetingId: options.meetingsId,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * initializes the reachability instance for Meetings\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n setReachability() {\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\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 * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability() {\n if (!this.reachability) {\n this.setReachability();\n }\n\n return this.getReachability().gatherReachability();\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 this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);\n }\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.\n * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}\n * @param {string} [type] - the optional specified type, such as locusId\n * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(destination: string, type: string = null, useRandomDelayForInfo = false) {\n // TODO: type should be from a dictionary\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 return (\n this.meetingInfo\n .fetchInfoOptions(destination, type)\n // Catch a failure to fetch info options.\n .catch((error) => {\n LoggerProxy.logger.info(\n `Meetings:index#create --> INFO, unable to determine info options: ${error.message}`\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 (type === _CONVERSATION_URL_ || options.type === _CONVERSATION_URL_) {\n const foundMeeting = this.meetingCollection.getByKey(CONVERSATION_URL, targetDest);\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(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(targetDest, type, useRandomDelayForInfo).then(\n (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 correlationId: createdMeeting.correlationId,\n feedbackId: createdMeeting.correlationId,\n locusId: createdMeeting.locusId,\n meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,\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 correlationId: meetingInstance.correlationId,\n feedbackId: meetingInstance.correlationId,\n locusId: meetingInstance.locusId,\n meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,\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 }\n\n // Return the existing meeting.\n return Promise.resolve(meeting);\n })\n );\n }\n\n /**\n * @param {String} destination see create()\n * @param {String} type see create()\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\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: string = null,\n useRandomDelayForInfo = false\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 === _LOCUS_ID_ ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\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\n if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {\n meeting.fetchMeetingInfoTimeoutId = setTimeout(\n () => meeting.fetchMeetingInfo({}),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo({});\n }\n } catch (err) {\n if (!(err instanceof CaptchaError) && !(err instanceof PasswordError)) {\n // if there is no meeting info we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\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 !== _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 or spaceID 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 * @param {object} options\n * @param {object} options.startDate - get meetings after this start date\n * @param {object} options.endDate - get meetings before this end date\n * @returns {Object} All currently active meetings.\n * @public\n * @memberof Meetings\n */\n public getAllMeetings(\n options: {\n startDate: object;\n endDate: object;\n } = {} as any\n ) {\n // Options may include other parameters to filter this collection\n // of meetings.\n return this.meetingCollection.getAll(options);\n }\n\n /**\n * syncs all the meeting from server\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n public syncMeetings() {\n return this.request.getActiveMeetings().then((locusArray) => {\n const activeLocusUrl = [];\n\n if (locusArray?.loci && locusArray.loci.length > 0) {\n locusArray.loci.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 // Some time the mercury event is missed after mercury reconnect\n // if sync returns no locus then clear all the meetings\n for (const meeting of Object.values(meetingsCollection)) {\n // @ts-ignore\n if (!activeLocusUrl.includes(meeting.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 }\n\n /**\n * Get all scheduled meetings.\n * @param {object} options\n * @param {object} options.startDate - get meetings after this start date\n * @param {object} options.endDate - get meetings before this end date\n * @returns {Object} All scheduled meetings.\n * @memberof Meetings\n */\n getScheduledMeetings() {\n return this.meetingCollection.getAll({scheduled: true});\n }\n\n /**\n * Get the logger instance for plugin-meetings\n * @returns {Logger}\n */\n getLogger() {\n return LoggerProxy.get();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["mediaLogger","MediaLogger","LoggerProxy","logger","info","log","error","warn","trace","debug","Meetings","args","MEETINGS","request","Request","parent","webex","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","personalMeetingRoom","reachability","registered","preferredWebexSite","media","getUserMedia","Media","getSupportedDevice","onReady","data","useRandomDelayForInfo","meeting","getByKey","LOCUS_URL","locusUrl","CORRELATION_ID","MeetingsUtil","checkForCorrelationId","internal","device","url","locus","SIP_URI","self","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","replaces","length","fullState","state","LOCUS","STATE","INACTIVE","_LEFT_","removed","create","_LOCUS_ID_","then","newMeeting","locusInfo","initialSetup","catch","e","finally","getMeetingByType","_ID_","id","Metrics","postEvent","event","eventType","REMOTE_STARTED","trigger","MERCURY_EVENT","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","type","_MEETING_","_JOIN_","_INCOMING_","parse","envelope","LOCUSEVENT","MESSAGE_ROAP","handleLocusEvent","MEETINGS_NETWORK_DISCONNECTED","mercury","on","LOCUS_MERCURY","handleLocusMercury","ROAP","ROAP_MERCURY","handleRoapMercury","ONLINE","syncMeetings","OFFLINE","handleMercuryOffline","off","once","READY","StaticConfig","set","config","LoggerConfig","logging","setLogger","meetingInfo","experimental","enableUnifiedMeetings","MeetingInfoV2","MeetingInfo","PersonalMeetingRoom","MEETINGS_READY","checkH264Support","disableNotifications","changeState","enable","enableTurnDiscovery","enableAdhocMeetings","canAuthorize","reject","Error","resolve","all","fetchUserPreferredWebexSite","getGeoHint","startReachability","message","register","connect","call","listenForEvents","MEETINGS_REGISTERED","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETINGS_REGISTRATION_SUCCESS","MEETINGS_REGISTRATION_FAILED","reason","stack","stopListeningForEvents","disconnect","unregister","MEETINGS_UNREGISTERED","options","uploadLogs","uploadResult","MEETING_LOG_UPLOAD_SUCCESS","meetingId","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","meetingsId","code","Reachability","setReachability","getReachability","gatherReachability","fetchGeoHint","res","geoHintInfo","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","MeetingUtil","cleanUp","delete","MEETING_REMOVED","destination","fetchInfoOptions","targetDest","_CONVERSATION_URL_","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","payload","autoUploadLogs","callStart","lastActive","correlationId","feedbackId","locusId","webExMeetingId","destroy","REQUEST_UPLOAD_LOGS","meetingInstance","Meeting","userId","deviceUrl","orgId","meetingInfoProvider","destinationType","waitingTime","startTime","startTimeDate","Date","startTimeDatestamp","getTime","timeToStart","maxWaitingTime","Math","max","min","MAX_RANDOM_DELAY_FOR_MEETING_INFO","round","random","isMeetingActive","active","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","parseMeetingInfo","CaptchaError","PasswordError","sipUri","setSipUri","meetingAddedType","getMeetingAddedType","value","getAll","getActiveMeetings","locusArray","activeLocusUrl","loci","forEach","push","meetingsCollection","includes","MEETING_REMOVED_REASON","NO_MEETINGS_TO_SYNC","scheduled","get","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport {trigger, eventType} from '../metrics/config';\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 LOCUS_URL,\n MAX_RANDOM_DELAY_FOR_MEETING_INFO,\n ROAP,\n ONLINE,\n OFFLINE,\n _MEETING_,\n _JOIN_,\n _LOCUS_ID_,\n _INCOMING_,\n LOCUS,\n CORRELATION_ID,\n SIP_URI,\n _LEFT_,\n _ID_,\n MEETING_REMOVED_REASON,\n _CONVERSATION_URL_,\n CONVERSATION_URL,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport MeetingInfo from '../meeting-info';\nimport MeetingInfoV2 from '../meeting-info/meeting-info-v2';\nimport Meeting 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';\n\nimport MeetingCollection from './collection';\nimport MeetingsUtil from './util';\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: any;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n\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 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 * The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.reachability = null;\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 getSupportedDevice: Media.getSupportedDevice,\n };\n\n this.onReady();\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 = null;\n\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 meeting =\n this.meetingCollection.getByKey(LOCUS_URL, data.locusUrl) ||\n // @ts-ignore\n this.meetingCollection.getByKey(\n CORRELATION_ID,\n // @ts-ignore\n MeetingsUtil.checkForCorrelationId(this.webex.internal.device.url, data.locus)\n ) ||\n this.meetingCollection.getByKey(\n 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(CONVERSATION_URL, data.locus.conversationUrl));\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 LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\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, _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 })\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 Metrics.postEvent({\n event: eventType.REMOTE_STARTED,\n meeting,\n data: {trigger: trigger.MERCURY_EVENT},\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();\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.meetingCollection, 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 enable or disable TURN discovery\n * @param {Boolean} enable\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleTurnDiscovery(enable: boolean) {\n if (typeof enable !== 'boolean') {\n return;\n }\n // @ts-ignore\n this.config.experimental.enableTurnDiscovery = enable;\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 * 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().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 * 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 callStart?: string;\n feedbackId?: 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 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 // @ts-ignore - seems like typo\n meetingId: options.meetingsId,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * initializes the reachability instance for Meetings\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n setReachability() {\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\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 * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability() {\n if (!this.reachability) {\n this.setReachability();\n }\n\n return this.getReachability().gatherReachability();\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 this.preferredWebexSite = MeetingsUtil.parseDefaultSiteFromMeetingPreferences(res);\n }\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.\n * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}\n * @param {string} [type] - the optional specified type, such as locusId\n * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(destination: string, type: string = null, useRandomDelayForInfo = false) {\n // TODO: type should be from a dictionary\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 return (\n this.meetingInfo\n .fetchInfoOptions(destination, type)\n // Catch a failure to fetch info options.\n .catch((error) => {\n LoggerProxy.logger.info(\n `Meetings:index#create --> INFO, unable to determine info options: ${error.message}`\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 (type === _CONVERSATION_URL_ || options.type === _CONVERSATION_URL_) {\n const foundMeeting = this.meetingCollection.getByKey(CONVERSATION_URL, targetDest);\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(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(targetDest, type, useRandomDelayForInfo).then(\n (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 correlationId: createdMeeting.correlationId,\n feedbackId: createdMeeting.correlationId,\n locusId: createdMeeting.locusId,\n meetingId: createdMeeting.locusInfo?.info?.webExMeetingId,\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 correlationId: meetingInstance.correlationId,\n feedbackId: meetingInstance.correlationId,\n locusId: meetingInstance.locusId,\n meetingId: meetingInstance.locusInfo?.info?.webExMeetingId,\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 }\n\n // Return the existing meeting.\n return Promise.resolve(meeting);\n })\n );\n }\n\n /**\n * @param {String} destination see create()\n * @param {String} type see create()\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\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: string = null,\n useRandomDelayForInfo = false\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 === _LOCUS_ID_ ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\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\n if (enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0) {\n meeting.fetchMeetingInfoTimeoutId = setTimeout(\n () => meeting.fetchMeetingInfo({}),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo({});\n }\n } catch (err) {\n if (!(err instanceof CaptchaError) && !(err instanceof PasswordError)) {\n // if there is no meeting info we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\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 !== _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 or spaceID 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 * @param {object} options\n * @param {object} options.startDate - get meetings after this start date\n * @param {object} options.endDate - get meetings before this end date\n * @returns {Object} All currently active meetings.\n * @public\n * @memberof Meetings\n */\n public getAllMeetings(\n options: {\n startDate: object;\n endDate: object;\n } = {} as any\n ) {\n // Options may include other parameters to filter this collection\n // of meetings.\n return this.meetingCollection.getAll(options);\n }\n\n /**\n * syncs all the meeting from server\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n public syncMeetings() {\n return this.request\n .getActiveMeetings()\n .then((locusArray) => {\n const activeLocusUrl = [];\n\n if (locusArray?.loci && locusArray.loci.length > 0) {\n locusArray.loci.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 // Some time the mercury event is missed after mercury reconnect\n // if sync returns no locus then clear all the meetings\n for (const meeting of Object.values(meetingsCollection)) {\n // @ts-ignore\n if (!activeLocusUrl.includes(meeting.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 * Get all scheduled meetings.\n * @param {object} options\n * @param {object} options.startDate - get meetings after this start date\n * @param {object} options.endDate - get meetings before this end date\n * @returns {Object} All scheduled meetings.\n * @memberof Meetings\n */\n getScheduledMeetings() {\n return this.meetingCollection.getAll({scheduled: true});\n }\n\n /**\n * Get the logger instance for plugin-meetings\n * @returns {Logger}\n */\n getLogger() {\n return LoggerProxy.get();\n }\n}\n"],"mappings":"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"}
@@ -45,6 +45,7 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
45
45
  return _this.determineRedirections(res.body);
46
46
  }).catch(function (error) {
47
47
  _loggerProxy.default.logger.error("Meetings:request#getActiveMeetings --> failed to get locus details, ".concat(error));
48
+ throw new Error(error);
48
49
  });
49
50
  }
50
51
 
@@ -95,6 +96,7 @@ var MeetingRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
95
96
  return _promise.default.resolve(responseBody);
96
97
  }).catch(function (error) {
97
98
  _loggerProxy.default.logger.error("Meetings:request#determineRedirections --> failed to get locus details from url: ".concat(url, ", reason: ").concat(error));
99
+ throw new Error(error);
98
100
  })
99
101
  );
100
102
  })).then(function () {
@@ -1 +1 @@
1
- {"version":3,"names":["MeetingRequest","request","api","API","LOCUS","resource","RESOURCE","LOCI","then","res","determineRedirections","body","catch","error","LoggerProxy","logger","webex","internal","services","fetchClientRegionInfo","getMeetingPreferences","responseBody","remoteLocusClusterUrls","length","all","map","url","method","HTTP_VERBS","GET","runWhitelistedDomains","loci","concat","locusUrls","resolve","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, API, RESOURCE} from '../constants';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n /**\n * get all the active meetings for the user\n * @returns {Array} return locus array\n */\n getActiveMeetings() {\n // @ts-ignore\n return this.request({\n api: API.LOCUS,\n resource: RESOURCE.LOCI,\n })\n .then((res) => this.determineRedirections(res.body))\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`\n );\n });\n }\n\n /**\n * fetch geoHit for the user\n * @returns {Promise<object>} geoHintInfo\n */\n fetchGeoHint() {\n // @ts-ignore\n return this.webex.internal.services.fetchClientRegionInfo();\n }\n\n /**\n * get user meeting preference information\n * @returns {Promise<object>} getMeetingPreferences\n */\n getMeetingPreferences() {\n // @ts-ignore\n return this.webex.internal.services.getMeetingPreferences();\n }\n\n // locus federation, determines and populate locus if the responseBody has remote URLs to fetch locus details\n\n /**\n * Fetches indivdual locus rather then getting all at once\n * @param {object} responseBody determine the locus and fetch them if a remoteUrl is given\n * @returns {Promise} returns locusObject array\n */\n determineRedirections(responseBody: any) {\n if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {\n return Promise.all(\n responseBody.remoteLocusClusterUrls.map((url) =>\n // @ts-ignore\n this.request({\n method: HTTP_VERBS.GET,\n url,\n runWhitelistedDomains: true, // allows auth token for whitelisted domain\n })\n .then((res) => {\n responseBody.loci = responseBody.loci.concat(res.body.loci);\n responseBody.locusUrls = responseBody.locusUrls.concat(res.body.locusUrls);\n\n return Promise.resolve(responseBody);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`\n );\n })\n )\n ).then(() => Promise.resolve(responseBody));\n }\n\n return Promise.resolve(responseBody);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AACA;AAEA;AACA;AAAuD;AAAA;AAEvD;AACA;AACA;AAFA,IAGqBA,cAAc;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;IACjC;AACF;AACA;AACA;IACE,6BAAoB;MAAA;MAClB;MACA,OAAO,IAAI,CAACC,OAAO,CAAC;QAClBC,GAAG,EAAEC,cAAG,CAACC,KAAK;QACdC,QAAQ,EAAEC,mBAAQ,CAACC;MACrB,CAAC,CAAC,CACCC,IAAI,CAAC,UAACC,GAAG;QAAA,OAAK,KAAI,CAACC,qBAAqB,CAACD,GAAG,CAACE,IAAI,CAAC;MAAA,EAAC,CACnDC,KAAK,CAAC,UAACC,KAAK,EAAK;QAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,+EACiDA,KAAK,EAC7E;MACH,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,wBAAe;MACb;MACA,OAAO,IAAI,CAACG,KAAK,CAACC,QAAQ,CAACC,QAAQ,CAACC,qBAAqB,EAAE;IAC7D;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,iCAAwB;MACtB;MACA,OAAO,IAAI,CAACH,KAAK,CAACC,QAAQ,CAACC,QAAQ,CAACE,qBAAqB,EAAE;IAC7D;;IAEA;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,+BAAsBC,YAAiB,EAAE;MAAA;MACvC,IAAIA,YAAY,CAACC,sBAAsB,IAAID,YAAY,CAACC,sBAAsB,CAACC,MAAM,EAAE;QACrF,OAAO,iBAAQC,GAAG,CAChBH,YAAY,CAACC,sBAAsB,CAACG,GAAG,CAAC,UAACC,GAAG;UAAA;YAC1C;YACA,MAAI,CAACzB,OAAO,CAAC;cACX0B,MAAM,EAAEC,qBAAU,CAACC,GAAG;cACtBH,GAAG,EAAHA,GAAG;cACHI,qBAAqB,EAAE,IAAI,CAAE;YAC/B,CAAC,CAAC,CACCtB,IAAI,CAAC,UAACC,GAAG,EAAK;cACbY,YAAY,CAACU,IAAI,GAAGV,YAAY,CAACU,IAAI,CAACC,MAAM,CAACvB,GAAG,CAACE,IAAI,CAACoB,IAAI,CAAC;cAC3DV,YAAY,CAACY,SAAS,GAAGZ,YAAY,CAACY,SAAS,CAACD,MAAM,CAACvB,GAAG,CAACE,IAAI,CAACsB,SAAS,CAAC;cAE1E,OAAO,iBAAQC,OAAO,CAACb,YAAY,CAAC;YACtC,CAAC,CAAC,CACDT,KAAK,CAAC,UAACC,KAAK,EAAK;cAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,4FAC8Da,GAAG,uBAAab,KAAK,EAC1G;YACH,CAAC;UAAC;QAAA,EACL,CACF,CAACL,IAAI,CAAC;UAAA,OAAM,iBAAQ0B,OAAO,CAACb,YAAY,CAAC;QAAA,EAAC;MAC7C;MAEA,OAAO,iBAAQa,OAAO,CAACb,YAAY,CAAC;IACtC;EAAC;EAAA;AAAA,EAtEyCc,+BAAoB;AAAA"}
1
+ {"version":3,"names":["MeetingRequest","request","api","API","LOCUS","resource","RESOURCE","LOCI","then","res","determineRedirections","body","catch","error","LoggerProxy","logger","Error","webex","internal","services","fetchClientRegionInfo","getMeetingPreferences","responseBody","remoteLocusClusterUrls","length","all","map","url","method","HTTP_VERBS","GET","runWhitelistedDomains","loci","concat","locusUrls","resolve","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {HTTP_VERBS, API, RESOURCE} from '../constants';\n\n/**\n * @class MeetingRequest\n */\nexport default class MeetingRequest extends StatelessWebexPlugin {\n /**\n * get all the active meetings for the user\n * @returns {Array} return locus array\n */\n getActiveMeetings() {\n // @ts-ignore\n return this.request({\n api: API.LOCUS,\n resource: RESOURCE.LOCI,\n })\n .then((res) => this.determineRedirections(res.body))\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`\n );\n throw new Error(error);\n });\n }\n\n /**\n * fetch geoHit for the user\n * @returns {Promise<object>} geoHintInfo\n */\n fetchGeoHint() {\n // @ts-ignore\n return this.webex.internal.services.fetchClientRegionInfo();\n }\n\n /**\n * get user meeting preference information\n * @returns {Promise<object>} getMeetingPreferences\n */\n getMeetingPreferences() {\n // @ts-ignore\n return this.webex.internal.services.getMeetingPreferences();\n }\n\n // locus federation, determines and populate locus if the responseBody has remote URLs to fetch locus details\n\n /**\n * Fetches indivdual locus rather then getting all at once\n * @param {object} responseBody determine the locus and fetch them if a remoteUrl is given\n * @returns {Promise} returns locusObject array\n */\n determineRedirections(responseBody: any) {\n if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {\n return Promise.all(\n responseBody.remoteLocusClusterUrls.map((url) =>\n // @ts-ignore\n this.request({\n method: HTTP_VERBS.GET,\n url,\n runWhitelistedDomains: true, // allows auth token for whitelisted domain\n })\n .then((res) => {\n responseBody.loci = responseBody.loci.concat(res.body.loci);\n responseBody.locusUrls = responseBody.locusUrls.concat(res.body.locusUrls);\n\n return Promise.resolve(responseBody);\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`\n );\n throw new Error(error);\n })\n )\n ).then(() => Promise.resolve(responseBody));\n }\n\n return Promise.resolve(responseBody);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AACA;AAEA;AACA;AAAuD;AAAA;AAEvD;AACA;AACA;AAFA,IAGqBA,cAAc;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;IACjC;AACF;AACA;AACA;IACE,6BAAoB;MAAA;MAClB;MACA,OAAO,IAAI,CAACC,OAAO,CAAC;QAClBC,GAAG,EAAEC,cAAG,CAACC,KAAK;QACdC,QAAQ,EAAEC,mBAAQ,CAACC;MACrB,CAAC,CAAC,CACCC,IAAI,CAAC,UAACC,GAAG;QAAA,OAAK,KAAI,CAACC,qBAAqB,CAACD,GAAG,CAACE,IAAI,CAAC;MAAA,EAAC,CACnDC,KAAK,CAAC,UAACC,KAAK,EAAK;QAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,+EACiDA,KAAK,EAC7E;QACD,MAAM,IAAIG,KAAK,CAACH,KAAK,CAAC;MACxB,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,wBAAe;MACb;MACA,OAAO,IAAI,CAACI,KAAK,CAACC,QAAQ,CAACC,QAAQ,CAACC,qBAAqB,EAAE;IAC7D;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,iCAAwB;MACtB;MACA,OAAO,IAAI,CAACH,KAAK,CAACC,QAAQ,CAACC,QAAQ,CAACE,qBAAqB,EAAE;IAC7D;;IAEA;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,+BAAsBC,YAAiB,EAAE;MAAA;MACvC,IAAIA,YAAY,CAACC,sBAAsB,IAAID,YAAY,CAACC,sBAAsB,CAACC,MAAM,EAAE;QACrF,OAAO,iBAAQC,GAAG,CAChBH,YAAY,CAACC,sBAAsB,CAACG,GAAG,CAAC,UAACC,GAAG;UAAA;YAC1C;YACA,MAAI,CAAC1B,OAAO,CAAC;cACX2B,MAAM,EAAEC,qBAAU,CAACC,GAAG;cACtBH,GAAG,EAAHA,GAAG;cACHI,qBAAqB,EAAE,IAAI,CAAE;YAC/B,CAAC,CAAC,CACCvB,IAAI,CAAC,UAACC,GAAG,EAAK;cACba,YAAY,CAACU,IAAI,GAAGV,YAAY,CAACU,IAAI,CAACC,MAAM,CAACxB,GAAG,CAACE,IAAI,CAACqB,IAAI,CAAC;cAC3DV,YAAY,CAACY,SAAS,GAAGZ,YAAY,CAACY,SAAS,CAACD,MAAM,CAACxB,GAAG,CAACE,IAAI,CAACuB,SAAS,CAAC;cAE1E,OAAO,iBAAQC,OAAO,CAACb,YAAY,CAAC;YACtC,CAAC,CAAC,CACDV,KAAK,CAAC,UAACC,KAAK,EAAK;cAChBC,oBAAW,CAACC,MAAM,CAACF,KAAK,4FAC8Dc,GAAG,uBAAad,KAAK,EAC1G;cACD,MAAM,IAAIG,KAAK,CAACH,KAAK,CAAC;YACxB,CAAC;UAAC;QAAA,EACL,CACF,CAACL,IAAI,CAAC;UAAA,OAAM,iBAAQ2B,OAAO,CAACb,YAAY,CAAC;QAAA,EAAC;MAC7C;MAEA,OAAO,iBAAQa,OAAO,CAACb,YAAY,CAAC;IACtC;EAAC;EAAA;AAAA,EAxEyCc,+BAAoB;AAAA"}
@@ -466,8 +466,8 @@ var ReconnectionManager = /*#__PURE__*/function () {
466
466
  _context2.next = 30;
467
467
  break;
468
468
  }
469
- _loggerProxy.default.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely ');
470
- throw new Error('Unable to rejoin a meeting already ended or inactive .');
469
+ _loggerProxy.default.logger.info('ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.');
470
+ throw new Error('Unable to rejoin a meeting already ended or inactive.');
471
471
  case 30:
472
472
  _loggerProxy.default.logger.info("ReconnectionManager:index#executeReconnection --> Current state of meeting is ".concat(this.meeting.state));
473
473
 
@@ -1 +1 @@
1
- {"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","reason","setLocalShareTrack","isSharing","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","NO_SHARE","mediaProperties","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","stopLocalShareTrack","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","internal","device","url","FAILURE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","roap","doTurnDiscovery","turnServerResult","iceServers","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","mediaRequestManagers","forEach","mediaRequestManager","commit","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * Stop the local share track.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private stopLocalShareTrack(reason: string) {\n this.meeting.setLocalShareTrack(null);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareTrack',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting,\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW},\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false,\n },\n ],\n },\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely '\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive .');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // do the TURN server discovery again since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach((mediaRequestManager) =>\n // @ts-ignore - Fix type\n mediaRequestManager.commit()\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["NeedsRetryError","Error","NeedsRejoinError","wasSharing","error","ReconnectionManager","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","tryCount","DEFAULT_TRY_COUNT","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","clearTimeout","LoggerProxy","logger","log","resetReconnectionTimer","reject","setTimeout","reason","setLocalShareTrack","isSharing","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","NO_SHARE","mediaProperties","mediaDirection","sendShare","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","IN_PROGRESS","enabled","COMPLETE","info","ReconnectInProgress","ReconnectionError","networkDisconnect","networkRetry","id","validate","Metrics","postEvent","event","eventType","MEDIA_RECONNECTING","executeReconnection","then","MEDIA_RECOVERED","data","recoveredBy","RECOVERED_BY_NEW","catch","reconnectError","reconnect","message","reconnectMetric","CALL_ABORTED","errors","category","errorObjects","expected","errorCode","fatal","name","mediaEngine","shownToUser","rejoinMeeting","stopLocalShareTrack","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","internal","device","url","FAILURE","meetings","syncMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","media","join","rejoin","MEETING_REJOIN","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_MAX_REJOIN_FAILURE","locus_id","locusUrl","split","pop","stack","roap","doTurnDiscovery","turnServerResult","iceServers","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","mediaRequestManagers","forEach","mediaRequestManager","commit","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectInProgress from '../common/errors/reconnection-in-progress';\nimport {eventType, reconnection, errorObjects} from '../metrics/config';\nimport Media from '../media';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n tryCount: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {String}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Number}\n * @private\n * @memberof ReconnectionManager\n */\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.tryCount = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n this.rejoinAttempts = RECONNECTION.STATE.DEFAULT_TRY_COUNT;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n this.meeting = null;\n }\n\n /**\n * Stop the local share track.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private stopLocalShareTrack(reason: string) {\n this.meeting.setLocalShareTrack(null);\n this.meeting.isSharing = false;\n if (this.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE) {\n this.meeting.shareStatus = SHARE_STATUS.NO_SHARE;\n }\n this.meeting.mediaProperties.mediaDirection.sendShare = false;\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareTrack',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectionError}\n * @private\n * @memberof ReconnectionManager\n */\n private validate() {\n if (this.meeting.config.reconnection.enabled) {\n if (\n this.status === RECONNECTION.STATE.DEFAULT_STATUS ||\n this.status === RECONNECTION.STATE.COMPLETE\n ) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#validate --> Reconnection already in progress.'\n );\n\n throw new ReconnectInProgress('Reconnection already in progress.');\n }\n\n LoggerProxy.logger.info('ReconnectionManager:index#validate --> Reconnection is not enabled.');\n\n throw new ReconnectionError('Reconnection is not enabled.');\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect({\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {}) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n // First, validate that we can reconnect, if not, it will throw an error\n try {\n this.validate();\n } catch (error) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection unable to begin.',\n error\n );\n throw error;\n }\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECONNECTING,\n meeting: this.meeting,\n });\n }\n\n return this.executeReconnection({networkDisconnect})\n .then(() => {\n LoggerProxy.logger.info('ReconnectionManager:index#reconnect --> Reconnection successful.');\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect success metric.'\n );\n Metrics.postEvent({\n event: eventType.MEDIA_RECOVERED,\n meeting: this.meeting,\n data: {recoveredBy: reconnection.RECOVERED_BY_NEW},\n });\n })\n .catch((reconnectError) => {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n return this.reconnect({networkDisconnect: true, networkRetry: true});\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect abort metric.'\n );\n\n const reconnectMetric = {\n event: eventType.CALL_ABORTED,\n meeting: this.meeting,\n data: {\n errors: [\n {\n category: errorObjects.category.expected,\n errorCode: 2008,\n fatal: true,\n name: errorObjects.name.mediaEngine,\n shownToUser: false,\n },\n ],\n },\n };\n\n Metrics.postEvent(reconnectMetric);\n if (reconnectError instanceof NeedsRejoinError) {\n // send call aborded event with catogery as expected as we are trying to rejoin\n\n if (this.autoRejoinEnabled) {\n return this.rejoinMeeting(reconnectError.wasSharing);\n }\n }\n\n throw reconnectError;\n });\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings();\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> Media reestablished'\n );\n this.status = RECONNECTION.STATE.COMPLETE;\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Media reestablishment failed'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n this.stopLocalShareTrack(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> Begin reestablishment of media'\n );\n\n // do the TURN server discovery again since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach((mediaRequestManager) =>\n // @ts-ignore - Fix type\n mediaRequestManager.commit()\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.57",
3
+ "version": "3.0.0-beta.58",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -32,12 +32,12 @@
32
32
  "build": "yarn run -T tsc --declaration true --declarationDir ./dist/types"
33
33
  },
34
34
  "devDependencies": {
35
- "@webex/plugin-meetings": "3.0.0-beta.57",
36
- "@webex/test-helper-chai": "3.0.0-beta.57",
37
- "@webex/test-helper-mocha": "3.0.0-beta.57",
38
- "@webex/test-helper-mock-webex": "3.0.0-beta.57",
39
- "@webex/test-helper-retry": "3.0.0-beta.57",
40
- "@webex/test-helper-test-users": "3.0.0-beta.57",
35
+ "@webex/plugin-meetings": "3.0.0-beta.58",
36
+ "@webex/test-helper-chai": "3.0.0-beta.58",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.58",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.58",
39
+ "@webex/test-helper-retry": "3.0.0-beta.58",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.58",
41
41
  "chai": "^4.3.4",
42
42
  "chai-as-promised": "^7.1.1",
43
43
  "jsdom-global": "3.0.2",
@@ -46,18 +46,18 @@
46
46
  "typescript": "^4.7.4"
47
47
  },
48
48
  "dependencies": {
49
- "@webex/common": "3.0.0-beta.57",
49
+ "@webex/common": "3.0.0-beta.58",
50
50
  "@webex/internal-media-core": "1.35.3",
51
- "@webex/internal-plugin-conversation": "3.0.0-beta.57",
52
- "@webex/internal-plugin-device": "3.0.0-beta.57",
53
- "@webex/internal-plugin-llm": "3.0.0-beta.57",
54
- "@webex/internal-plugin-mercury": "3.0.0-beta.57",
55
- "@webex/internal-plugin-metrics": "3.0.0-beta.57",
56
- "@webex/internal-plugin-support": "3.0.0-beta.57",
57
- "@webex/internal-plugin-user": "3.0.0-beta.57",
58
- "@webex/plugin-people": "3.0.0-beta.57",
59
- "@webex/plugin-rooms": "3.0.0-beta.57",
60
- "@webex/webex-core": "3.0.0-beta.57",
51
+ "@webex/internal-plugin-conversation": "3.0.0-beta.58",
52
+ "@webex/internal-plugin-device": "3.0.0-beta.58",
53
+ "@webex/internal-plugin-llm": "3.0.0-beta.58",
54
+ "@webex/internal-plugin-mercury": "3.0.0-beta.58",
55
+ "@webex/internal-plugin-metrics": "3.0.0-beta.58",
56
+ "@webex/internal-plugin-support": "3.0.0-beta.58",
57
+ "@webex/internal-plugin-user": "3.0.0-beta.58",
58
+ "@webex/plugin-people": "3.0.0-beta.58",
59
+ "@webex/plugin-rooms": "3.0.0-beta.58",
60
+ "@webex/webex-core": "3.0.0-beta.58",
61
61
  "ampersand-collection": "^2.0.2",
62
62
  "bowser": "^2.11.0",
63
63
  "btoa": "^1.2.1",
@@ -1108,33 +1108,41 @@ export default class Meetings extends WebexPlugin {
1108
1108
  * @memberof Meetings
1109
1109
  */
1110
1110
  public syncMeetings() {
1111
- return this.request.getActiveMeetings().then((locusArray) => {
1112
- const activeLocusUrl = [];
1113
-
1114
- if (locusArray?.loci && locusArray.loci.length > 0) {
1115
- locusArray.loci.forEach((locus) => {
1116
- activeLocusUrl.push(locus.url);
1117
- this.handleLocusEvent({
1118
- locus,
1119
- locusUrl: locus.url,
1111
+ return this.request
1112
+ .getActiveMeetings()
1113
+ .then((locusArray) => {
1114
+ const activeLocusUrl = [];
1115
+
1116
+ if (locusArray?.loci && locusArray.loci.length > 0) {
1117
+ locusArray.loci.forEach((locus) => {
1118
+ activeLocusUrl.push(locus.url);
1119
+ this.handleLocusEvent({
1120
+ locus,
1121
+ locusUrl: locus.url,
1122
+ });
1120
1123
  });
1121
- });
1122
- }
1123
- const meetingsCollection = this.meetingCollection.getAll();
1124
-
1125
- if (Object.keys(meetingsCollection).length > 0) {
1126
- // Some time the mercury event is missed after mercury reconnect
1127
- // if sync returns no locus then clear all the meetings
1128
- for (const meeting of Object.values(meetingsCollection)) {
1129
- // @ts-ignore
1130
- if (!activeLocusUrl.includes(meeting.locusUrl)) {
1131
- // destroy function also uploads logs
1124
+ }
1125
+ const meetingsCollection = this.meetingCollection.getAll();
1126
+
1127
+ if (Object.keys(meetingsCollection).length > 0) {
1128
+ // Some time the mercury event is missed after mercury reconnect
1129
+ // if sync returns no locus then clear all the meetings
1130
+ for (const meeting of Object.values(meetingsCollection)) {
1132
1131
  // @ts-ignore
1133
- this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
1132
+ if (!activeLocusUrl.includes(meeting.locusUrl)) {
1133
+ // destroy function also uploads logs
1134
+ // @ts-ignore
1135
+ this.destroy(meeting, MEETING_REMOVED_REASON.NO_MEETINGS_TO_SYNC);
1136
+ }
1134
1137
  }
1135
1138
  }
1136
- }
1137
- });
1139
+ })
1140
+ .catch((error) => {
1141
+ LoggerProxy.logger.error(
1142
+ `Meetings:index#syncMeetings --> failed to sync meetings, ${error}`
1143
+ );
1144
+ throw new Error(error);
1145
+ });
1138
1146
  }
1139
1147
 
1140
1148
  /**
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
23
23
  LoggerProxy.logger.error(
24
24
  `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
25
25
  );
26
+ throw new Error(error);
26
27
  });
27
28
  }
28
29
 
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
71
72
  LoggerProxy.logger.error(
72
73
  `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
73
74
  );
75
+ throw new Error(error);
74
76
  })
75
77
  )
76
78
  ).then(() => Promise.resolve(responseBody));
@@ -452,10 +452,10 @@ export default class ReconnectionManager {
452
452
  // So that on rejoin it known what parametrs it was using
453
453
  if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {
454
454
  LoggerProxy.logger.info(
455
- 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely '
455
+ 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'
456
456
  );
457
457
 
458
- throw new Error('Unable to rejoin a meeting already ended or inactive .');
458
+ throw new Error('Unable to rejoin a meeting already ended or inactive.');
459
459
  }
460
460
 
461
461
  LoggerProxy.logger.info(