@webex/plugin-meetings 3.0.0-beta.261 → 3.0.0-beta.262

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.
@@ -57,6 +57,7 @@ var _collection = _interopRequireDefault(require("./collection"));
57
57
  var _util2 = _interopRequireDefault(require("./util"));
58
58
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
59
59
  var _webexErrors = require("../common/errors/webex-errors");
60
+ var _noMeetingInfo = _interopRequireDefault(require("../common/errors/no-meeting-info"));
60
61
  function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
62
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
62
63
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -978,6 +979,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
978
979
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
979
980
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
980
981
  * @param {string} correlationId - the optional specified correlationId
982
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
981
983
  * @returns {Promise<Meeting>} A new Meeting.
982
984
  * @public
983
985
  * @memberof Meetings
@@ -990,6 +992,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
990
992
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
991
993
  var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
992
994
  var correlationId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
995
+ var failOnMissingMeetingInfo = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
993
996
  // TODO: type should be from a dictionary
994
997
 
995
998
  // Validate meeting information based on the provided destination and
@@ -1031,7 +1034,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1031
1034
  // Validate if a meeting was found.
1032
1035
  if (!meeting) {
1033
1036
  // Create a meeting based on the normalized destination and type.
1034
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, correlationId).then(function (createdMeeting) {
1037
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, correlationId, failOnMissingMeetingInfo).then(function (createdMeeting) {
1035
1038
  // If the meeting was successfully created.
1036
1039
  if (createdMeeting && createdMeeting.on) {
1037
1040
  // Create a destruction event for the meeting.
@@ -1085,6 +1088,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1085
1088
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1086
1089
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
1087
1090
  * @param {String} correlationId the optional specified correlationId
1091
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
1088
1092
  * @returns {Promise} a new meeting instance complete with meeting info and destination
1089
1093
  * @private
1090
1094
  * @memberof Meetings
@@ -1097,6 +1101,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1097
1101
  useRandomDelayForInfo,
1098
1102
  infoExtraParams,
1099
1103
  correlationId,
1104
+ failOnMissingMeetingInfo,
1100
1105
  meeting,
1101
1106
  _destination$fullStat,
1102
1107
  waitingTime,
@@ -1116,6 +1121,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1116
1121
  useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1117
1122
  infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
1118
1123
  correlationId = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
1124
+ failOnMissingMeetingInfo = _args3.length > 5 && _args3[5] !== undefined ? _args3[5] : false;
1119
1125
  meeting = new _meeting.default({
1120
1126
  // @ts-ignore
1121
1127
  userId: this.webex.internal.device.userId,
@@ -1134,7 +1140,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1134
1140
  parent: this.webex
1135
1141
  });
1136
1142
  this.meetingCollection.set(meeting);
1137
- _context3.prev = 6;
1143
+ _context3.prev = 7;
1138
1144
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
1139
1145
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
1140
1146
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -1151,7 +1157,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1151
1157
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
1152
1158
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
1153
1159
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
1154
- _context3.next = 16;
1160
+ _context3.next = 17;
1155
1161
  break;
1156
1162
  }
1157
1163
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
@@ -1161,28 +1167,40 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1161
1167
  });
1162
1168
  }, waitingTime);
1163
1169
  meeting.parseMeetingInfo(undefined, destination);
1164
- _context3.next = 18;
1170
+ _context3.next = 19;
1165
1171
  break;
1166
- case 16:
1167
- _context3.next = 18;
1172
+ case 17:
1173
+ _context3.next = 19;
1168
1174
  return meeting.fetchMeetingInfo({
1169
1175
  extraParams: infoExtraParams,
1170
1176
  sendCAevents: !!correlationId // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user
1171
1177
  });
1172
- case 18:
1173
- _context3.next = 24;
1178
+ case 19:
1179
+ _context3.next = 31;
1174
1180
  break;
1175
- case 20:
1176
- _context3.prev = 20;
1177
- _context3.t0 = _context3["catch"](6);
1178
- if (!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default)) {
1179
- // if there is no meeting info we assume its a 1:1 call or wireless share
1180
- _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1181
- _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1181
+ case 21:
1182
+ _context3.prev = 21;
1183
+ _context3.t0 = _context3["catch"](7);
1184
+ if (!(!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default))) {
1185
+ _context3.next = 30;
1186
+ break;
1187
+ }
1188
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
1189
+ if (!failOnMissingMeetingInfo) {
1190
+ _context3.next = 29;
1191
+ break;
1182
1192
  }
1193
+ _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.");
1194
+ // @ts-ignore
1195
+ this.destroy(meeting, _constants.MEETING_REMOVED_REASON.MISSING_MEETING_INFO);
1196
+ throw new _noMeetingInfo.default();
1197
+ case 29:
1198
+ // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share
1199
+ _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
1200
+ case 30:
1183
1201
  _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1184
- case 24:
1185
- _context3.prev = 24;
1202
+ case 31:
1203
+ _context3.prev = 31;
1186
1204
  // For type LOCUS_ID we need to parse the locus object to get the information
1187
1205
  // about the caller and callee
1188
1206
  // Meeting Added event will be created in `handleLocusEvent`
@@ -1202,14 +1220,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1202
1220
  type: meetingAddedType
1203
1221
  });
1204
1222
  }
1205
- return _context3.finish(24);
1206
- case 27:
1223
+ return _context3.finish(31);
1224
+ case 34:
1207
1225
  return _context3.abrupt("return", meeting);
1208
- case 28:
1226
+ case 35:
1209
1227
  case "end":
1210
1228
  return _context3.stop();
1211
1229
  }
1212
- }, _callee3, this, [[6, 20, 24, 27]]);
1230
+ }, _callee3, this, [[7, 21, 31, 34]]);
1213
1231
  }));
1214
1232
  function createMeeting(_x3) {
1215
1233
  return _createMeeting.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"names":["mediaLogger","MediaLogger","LoggerProxy","logger","info","log","error","warn","trace","debug","Meetings","args","MEETINGS","options","authToken","webex","credentials","supertoken","access_token","mediaHelpersModule","NoiseReductionEffect","VirtualBackgroundEffect","mediaHelpers","request","Request","parent","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","personalMeetingRoom","reachability","Reachability","registered","preferredWebexSite","media","getUserMedia","Media","onReady","meeting","newLocus","breakoutUrl","controls","breakout","url","breakoutLocus","getActiveBreakoutLocus","isSelfJoined","self","state","_JOINED_","isSelfMoved","_LEFT_","reason","_MOVED_","deviceFromNewLocus","MeetingsUtil","getThisDevice","internal","device","isResourceMovedOnThisDevice","isNewLocusJoinThisDevice","joinedOnThisDevice","isBreakoutLocusJoinThisDevice","joinedWith","correlationId","breakoutReplaceAt","replaces","length","replaceAt","newLocusReplaceAt","removed","isNewLocusAsBreakout","isBreakoutLocusDTO","fullState","active","isNeedHandleMainLocus","data","getByKey","LOCUS_URL","locusUrl","CORRELATION_ID","checkForCorrelationId","locus","SIP_URI","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","MEETINGNUMBER","webExMeetingId","useRandomDelayForInfo","getCorrespondingMeetingByLocus","locusInfo","updateMainSessionLocusCache","isNeedHandleLocusDTO","LOCUS","STATE","INACTIVE","create","_LOCUS_ID_","then","newMeeting","initialSetup","checkHandleBreakoutLocus","catch","e","finally","getMeetingByType","_ID_","id","newMetrics","submitClientEvent","name","payload","trigger","meetingId","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","type","_MEETING_","_JOIN_","_INCOMING_","parse","envelope","eventType","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","Metrics","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","stack","stopListeningForEvents","disconnect","unregister","MEETINGS_UNREGISTERED","uploadLogs","uploadResult","UPLOAD_LOGS_SUCCESS","MEETING_LOG_UPLOAD_SUCCESS","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","code","getReachability","gatherReachability","fetchGeoHint","res","geoHintInfo","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","user","get","userPreferences","userPreferencesItems","preferredWebExSite","MeetingUtil","cleanUp","delete","MEETING_REMOVED","destination","infoExtraParams","fetchInfoOptions","SpaceIDDeprecatedError","targetDest","_CONVERSATION_URL_","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","autoUploadLogs","callStart","lastActive","feedbackId","locusId","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","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","extraParams","sendCAevents","parseMeetingInfo","CaptchaError","PasswordError","PermissionError","sipUri","setSipUri","meetingAddedType","getMeetingAddedType","value","getAll","getActiveMeetings","locusArray","activeLocusUrl","loci","lociToUpdate","sortLocusArrayToUpdate","forEach","push","meetingsCollection","includes","MEETING_REMOVED_REASON","NO_MEETINGS_TO_SYNC","mainLoci","filter","breakoutLoci","isValidBreakoutLocus","breakoutLocusForHandleLater","associateMainLocus","find","mainLocus","existCorrespondingMeeting","newCreatedLocus","existIndex","findIndex","associateBreakoutLocus","splice","scheduled","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-metrics';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport * as mediaHelpersModule from '@webex/media-helpers';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport LoggerConfig from '../common/logs/logger-config';\nimport StaticConfig from '../common/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport LoggerRequest from '../common/logs/request';\nimport Trigger from '../common/events/trigger-proxy';\nimport Media from '../media';\nimport MeetingUtil from '../meeting/util';\nimport {\n MEETINGS,\n EVENTS,\n EVENT_TRIGGERS,\n READY,\n LOCUSEVENT,\n 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 MEETINGNUMBER,\n _JOINED_,\n _MOVED_,\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';\nimport PermissionError from '../common/errors/permission';\nimport {INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\n\nlet mediaLogger;\n\nclass MediaLogger {\n info(...args) {\n LoggerProxy.logger.info(...args);\n }\n\n log(...args) {\n LoggerProxy.logger.log(...args);\n }\n\n error(...args) {\n LoggerProxy.logger.error(...args);\n }\n\n warn(...args) {\n LoggerProxy.logger.warn(...args);\n }\n\n trace(...args) {\n LoggerProxy.logger.trace(...args);\n }\n\n debug(...args) {\n LoggerProxy.logger.debug(...args);\n }\n}\n/**\n * Meetings Ready Event\n * Emitted when the meetings instance on webex is ready\n * @event meetings:ready\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Network Disconnected Event\n * Emitted when the meetings instance is disconnected from\n * the internal mercury server\n * @event network:disconnected\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Registered Event\n * Emitted when the meetings instance has been registered and listening\n * @event meetings:registered\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meeting Removed Event\n * Emitted when a meeting was removed from the cache of meetings\n * @event meeting:removed\n * @instance\n * @type {Object}\n * @property {String} meetingId the removed meeting\n * @property {Object} response the server response\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Meeting Added Event\n * Emitted when a meeting was added to the cache of meetings\n * @event meeting:added\n * @instance\n * @type {Object}\n * @property {String} meetingId the added meeting\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Maintain a cache of meetings and sync with services.\n * @class\n */\nexport default class Meetings extends WebexPlugin {\n loggerRequest: any;\n media: any;\n meetingCollection: any;\n personalMeetingRoom: any;\n preferredWebexSite: any;\n reachability: Reachability;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n mediaHelpers: any;\n breakoutLocusForHandleLater: any;\n namespace = MEETINGS;\n\n /**\n * Initializes the Meetings Plugin\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app\n * to be able to call media helper functions.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.mediaHelpers = mediaHelpersModule;\n\n /**\n * The Meetings request to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.request = new Request({}, {parent: this.webex});\n /**\n * Log upload request helper\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.loggerRequest = new LoggerRequest({webex: this.webex});\n this.meetingCollection = new MeetingCollection();\n /**\n * The PersonalMeetingRoom object to interact with server\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this.personalMeetingRoom = null;\n\n /**\n * The Reachability object to interact with server\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\n\n /**\n * If the meetings plugin has been registered and listening via {@link Meetings#register}\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Meetings\n */\n this.registered = false;\n\n /**\n * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}\n * @instance\n * @type {String}\n * @private\n * @memberof Meetings\n */\n this.preferredWebexSite = '';\n\n /**\n * The public interface for the internal Media util files. These are helpful to expose outside the context\n * of a meeting so that a user can access media without creating a meeting instance.\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.media = {\n getUserMedia: Media.getUserMedia,\n };\n\n this.onReady();\n }\n\n /**\n * check whether you need to handle this main session's locus data or not\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleMainLocus(meeting: any, newLocus: any) {\n const breakoutUrl = newLocus.controls?.breakout?.url;\n const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);\n\n const isSelfJoined = newLocus?.self?.state === _JOINED_;\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n // @ts-ignore\n const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);\n const isResourceMovedOnThisDevice =\n deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;\n\n const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(\n meeting,\n newLocus,\n // @ts-ignore\n this.webex.internal.device.url\n );\n const isBreakoutLocusJoinThisDevice =\n breakoutLocus?.joinedWith?.correlationId &&\n breakoutLocus.joinedWith.correlationId === meeting?.correlationId;\n\n if (isSelfJoined && isNewLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'\n );\n if (breakoutLocus?.joinedWith && deviceFromNewLocus) {\n const breakoutReplaceAt =\n breakoutLocus.joinedWith.replaces?.length > 0\n ? breakoutLocus.joinedWith.replaces[0].replaceAt\n : '';\n const newLocusReplaceAt =\n deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';\n if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`\n );\n\n return false;\n }\n }\n\n return true;\n }\n if (isBreakoutLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`\n );\n\n return false;\n }\n if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'\n );\n\n return false;\n }\n if (isSelfJoined && isResourceMovedOnThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'\n );\n\n return false;\n }\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'\n );\n\n return true;\n }\n\n /**\n * check whether you need to handle this locus data or not\n * @param {Object} meeting old locus data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleLocusDTO(meeting: any, newLocus: any) {\n if (newLocus) {\n const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n if (!meeting) {\n if (isNewLocusAsBreakout) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`\n );\n\n return newLocus.self?.state === _JOINED_;\n }\n\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n if (!isNewLocusAsBreakout) {\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n\n return !isSelfMoved;\n }\n\n return true;\n }\n\n /**\n * get corresponding meeting object by locus data\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @returns {Object}\n * @private\n * @memberof Meetings\n */\n getCorrespondingMeetingByLocus(data) {\n // getting meeting by correlationId. This will happen for the new event\n // Either the locus\n // TODO : Add check for the callBack Address\n return (\n this.meetingCollection.getByKey(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 this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)\n );\n }\n\n /**\n * handle locus events and takes meeting actions with them as they come in\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {String} data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {\n let meeting = this.getCorrespondingMeetingByLocus(data);\n\n // Special case when locus has got replaced, This only happend once if a replace locus exists\n // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call\n\n if (!meeting && data.locus?.replaces?.length > 0) {\n // Always the last element in the replace is the active one\n meeting = this.meetingCollection.getByKey(\n LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\n\n if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {\n meeting.locusInfo.updateMainSessionLocusCache(data.locus);\n }\n if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {\n LoggerProxy.logger.log(\n `Meetings:index#handleLocusEvent --> doesn't need to process locus event`\n );\n\n return;\n }\n if (!meeting) {\n // TODO: create meeting when we get a meeting object\n // const checkForEnded = (locus) => {\n // TODO: you already ended the meeting but you got an event later\n // Mainly for 1:1 Callsor meeting\n // Happens mainly after refresh\n\n // 1:1 Meeting\n // 1) You ended a call before but you got a mercury event\n // Make sure end the call and cleanup the meeting only if the mercury\n // event says so\n // 2) Maintain lastSync time in the meetings object which helps to compare\n // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid\n\n // For space Meeting\n // Check the locus object and see who has joined\n\n // };\n // rather then locus object change to locus url\n\n if (\n data.locus &&\n data.locus.fullState &&\n data.locus.fullState.state === LOCUS.STATE.INACTIVE\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object\n // Any future events will be neglected\n\n if (\n data.locus &&\n data.locus.self &&\n data.locus.self.state === _LEFT_ &&\n data.locus.self.removed === true\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n this.create(data.locus, _LOCUS_ID_, useRandomDelayForInfo)\n .then((newMeeting) => {\n meeting = newMeeting;\n\n // It's a new meeting so initialize the locus data\n meeting.locusInfo.initialSetup(data.locus);\n this.checkHandleBreakoutLocus(data.locus);\n })\n .catch((e) => {\n LoggerProxy.logger.error(e);\n })\n .finally(() => {\n // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted\n // because the other user left so before sending 'added' event make sure it exists in the collection\n\n if (this.getMeetingByType(_ID_, meeting.id)) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-started',\n payload: {\n trigger: 'mercury-event',\n },\n options: {\n meetingId: meeting.id,\n },\n });\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'handleLocusEvent',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_,\n }\n );\n } else {\n // Meeting got added but was not found in the collection. It might have got destroyed\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event'\n );\n }\n });\n } else {\n meeting.locusInfo.parse(meeting, data);\n }\n }\n\n /**\n * handles locus events through mercury that are not roap\n * @param {Object} envelope\n * @param {Object} envelope.data\n * @param {String} envelope.data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusMercury(envelope: {data: any}) {\n const {data} = envelope;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {\n this.handleLocusEvent(data, true);\n }\n }\n\n /**\n * handles mecury offline event\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleMercuryOffline() {\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'handleMercuryOffline',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n }\n\n /**\n * registers for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private listenForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {\n this.handleLocusMercury(envelope);\n });\n // @ts-ignore\n this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {\n MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n this.syncMeetings();\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n this.handleMercuryOffline();\n });\n }\n\n /**\n * stops listening for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private stopListeningForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n }\n\n /**\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private onReady() {\n // @ts-ignore\n this.webex.once(READY, () => {\n // @ts-ignore\n StaticConfig.set(this.config);\n // @ts-ignore\n LoggerConfig.set(this.config.logging);\n // @ts-ignore\n LoggerProxy.set(this.webex.logger);\n\n mediaLogger = new MediaLogger();\n setLogger(mediaLogger);\n\n /**\n * The MeetingInfo object to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.meetingInfo = this.config.experimental.enableUnifiedMeetings\n ? // @ts-ignore\n new MeetingInfoV2(this.webex)\n : // @ts-ignore\n new MeetingInfo(this.webex);\n // @ts-ignore\n this.personalMeetingRoom = new PersonalMeetingRoom(\n {meetingInfo: this.meetingInfo},\n // @ts-ignore\n {parent: this.webex}\n );\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'onReady',\n },\n EVENT_TRIGGERS.MEETINGS_READY\n );\n\n MeetingsUtil.checkH264Support({disableNotifications: true});\n // @ts-ignore\n Metrics.initialSetup(this.webex);\n });\n }\n\n /**\n * API to toggle unified meetings\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleUnifiedMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings = changeState;\n // @ts-ignore\n this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);\n }\n }\n\n /**\n * API to 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 * Creates a noise reduction effect\n *\n * @param {INoiseReductionEffect} options optional custom effect options\n * @returns {Promise<effect>} noise reduction effect.\n * @public\n * @memberof Meetings\n */\n createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});\n };\n\n /**\n * Creates a virtual background effect\n *\n * @param {IVirtualBackgroundEffect} options optional custom effect options\n * @returns {Promise<effect>} virtual background effect.\n * @public\n * @memberof Meetings\n */\n createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});\n };\n\n /**\n * Uploads logs to the webex services for tracking\n * @param {Object} [options={}]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.feedbackId] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.meetingId] webex meeting ID\n * @param {String} [options.userId] userId\n * @param {String} [options.orgId] org id\n * @returns {String} feedback ID logs were submitted under\n */\n uploadLogs(\n options: {\n 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 Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,\n {\n meetingId: options.meetingId,\n details: uploadResult,\n }\n );\n\n return uploadResult;\n })\n .catch((uploadError) => {\n LoggerProxy.logger.error(\n 'Meetings:index#uploadLogs --> Unable to upload logs for meeting',\n uploadError\n );\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,\n {\n meetingId: options.meetingId,\n reason: uploadError,\n }\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {\n ...options,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * gets the reachability instance for Meetings\n * @returns {Reachability}\n * @public\n * @memberof Meetings\n */\n getReachability() {\n return this.reachability;\n }\n\n /**\n * initializes and starts gathering reachability for Meetings\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability() {\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 // fall back to getting the preferred site from the user information\n if (!this.preferredWebexSite) {\n // @ts-ignore\n return this.webex.internal.user\n .get()\n .then((user) => {\n const preferredWebexSite =\n user?.userPreferences?.userPreferencesItems?.preferredWebExSite;\n if (preferredWebexSite) {\n this.preferredWebexSite = preferredWebexSite;\n } else {\n throw new Error('site not found');\n }\n })\n .catch(() => {\n LoggerProxy.logger.error(\n 'Failed to fetch preferred site from user - no site will be set'\n );\n });\n }\n\n return Promise.resolve();\n });\n }\n\n /**\n * gets the personal meeting room instance, for saved PMR values for this user\n * @returns {PersonalMeetingRoom}\n * @public\n * @memberof Meetings\n */\n\n getPersonalMeetingRoom() {\n return this.personalMeetingRoom;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} reason\n * @param {String} type\n * @returns {Undefined}\n * @private\n * @memberof Meetings\n */\n private destroy(meeting: Meeting, reason: object) {\n MeetingUtil.cleanUp(meeting);\n this.meetingCollection.delete(meeting.id);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'destroy',\n },\n EVENT_TRIGGERS.MEETING_REMOVED,\n {\n meetingId: meeting.id,\n reason,\n }\n );\n }\n\n /**\n * Create a meeting.\n * @param {string} destination - sipURL, 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 * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {string} correlationId - the optional specified correlationId\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(\n destination: string,\n type: string = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n correlationId: string = undefined\n ) {\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.error(\n `Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`\n );\n if (error instanceof SpaceIDDeprecatedError) {\n throw new SpaceIDDeprecatedError();\n }\n })\n .then((options: any = {}) => {\n // Normalize the destination.\n const targetDest = options.destination || destination;\n\n // check for the conversation URL then sip Url\n let meeting = null;\n\n if (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(\n targetDest,\n type,\n useRandomDelayForInfo,\n infoExtraParams,\n correlationId\n ).then((createdMeeting: any) => {\n // If the meeting was successfully created.\n if (createdMeeting && createdMeeting.on) {\n // Create a destruction event for the meeting.\n createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: createdMeeting.locusInfo?.fullState?.lastActive,\n 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 // 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 * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {String} correlationId the optional specified correlationId\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 infoExtraParams = {},\n correlationId: string = undefined\n ) {\n const meeting = new Meeting(\n {\n // @ts-ignore\n userId: this.webex.internal.device.userId,\n // @ts-ignore\n deviceUrl: this.webex.internal.device.url,\n // @ts-ignore\n orgId: this.webex.internal.device.orgId,\n locus: type === _LOCUS_ID_ ? destination : null, // pass the locus object if present\n meetingInfoProvider: this.meetingInfo,\n destination,\n destinationType: type,\n correlationId,\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 () =>\n meeting.fetchMeetingInfo({\n extraParams: infoExtraParams,\n sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n }),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo({\n extraParams: infoExtraParams,\n sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n });\n }\n } catch (err) {\n if (\n !(err instanceof CaptchaError) &&\n !(err instanceof PasswordError) &&\n !(err instanceof PermissionError)\n ) {\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 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 const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);\n lociToUpdate.forEach((locus) => {\n activeLocusUrl.push(locus.url);\n this.handleLocusEvent({\n locus,\n locusUrl: locus.url,\n });\n });\n }\n const meetingsCollection = this.meetingCollection.getAll();\n\n if (Object.keys(meetingsCollection).length > 0) {\n // 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 * sort out locus array for initial creating\n * @param {Array} loci original locus array\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n sortLocusArrayToUpdate(loci: any[]) {\n const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));\n const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));\n this.breakoutLocusForHandleLater = [];\n const lociToUpdate = [...mainLoci];\n breakoutLoci.forEach((breakoutLocus) => {\n const associateMainLocus = mainLoci.find(\n (mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url\n );\n const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({\n locus: breakoutLocus,\n locusUrl: breakoutLocus.url,\n });\n\n if (associateMainLocus && !existCorrespondingMeeting) {\n // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,\n // after meeting create with main locus, then handle the associate breakout locus.\n // if only handle breakout locus, will miss some date\n this.breakoutLocusForHandleLater.push(breakoutLocus);\n } else {\n lociToUpdate.push(breakoutLocus);\n }\n });\n\n return lociToUpdate;\n }\n\n /**\n * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus\n * @param {Object} newCreatedLocus the locus which just create meeting object of it\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n checkHandleBreakoutLocus(newCreatedLocus) {\n if (\n !newCreatedLocus ||\n !this.breakoutLocusForHandleLater ||\n !this.breakoutLocusForHandleLater.length\n ) {\n return;\n }\n if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {\n return;\n }\n const existIndex = this.breakoutLocusForHandleLater.findIndex(\n (breakoutLocus) =>\n breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url\n );\n\n if (existIndex < 0) {\n return;\n }\n\n const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];\n this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});\n this.breakoutLocusForHandleLater.splice(existIndex, 1);\n }\n\n /**\n * Get 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","options","authToken","webex","credentials","supertoken","access_token","mediaHelpersModule","NoiseReductionEffect","VirtualBackgroundEffect","mediaHelpers","request","Request","parent","loggerRequest","LoggerRequest","meetingCollection","MeetingCollection","personalMeetingRoom","reachability","Reachability","registered","preferredWebexSite","media","getUserMedia","Media","onReady","meeting","newLocus","breakoutUrl","controls","breakout","url","breakoutLocus","getActiveBreakoutLocus","isSelfJoined","self","state","_JOINED_","isSelfMoved","_LEFT_","reason","_MOVED_","deviceFromNewLocus","MeetingsUtil","getThisDevice","internal","device","isResourceMovedOnThisDevice","isNewLocusJoinThisDevice","joinedOnThisDevice","isBreakoutLocusJoinThisDevice","joinedWith","correlationId","breakoutReplaceAt","replaces","length","replaceAt","newLocusReplaceAt","removed","isNewLocusAsBreakout","isBreakoutLocusDTO","fullState","active","isNeedHandleMainLocus","data","getByKey","LOCUS_URL","locusUrl","CORRELATION_ID","checkForCorrelationId","locus","SIP_URI","callbackInfo","callbackAddress","isUnifiedSpaceMeeting","undefined","CONVERSATION_URL","conversationUrl","MEETINGNUMBER","webExMeetingId","useRandomDelayForInfo","getCorrespondingMeetingByLocus","locusInfo","updateMainSessionLocusCache","isNeedHandleLocusDTO","LOCUS","STATE","INACTIVE","create","_LOCUS_ID_","then","newMeeting","initialSetup","checkHandleBreakoutLocus","catch","e","finally","getMeetingByType","_ID_","id","newMetrics","submitClientEvent","name","payload","trigger","meetingId","Trigger","file","function","EVENT_TRIGGERS","MEETING_ADDED","type","_MEETING_","_JOIN_","_INCOMING_","parse","envelope","eventType","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","Metrics","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","stack","stopListeningForEvents","disconnect","unregister","MEETINGS_UNREGISTERED","uploadLogs","uploadResult","UPLOAD_LOGS_SUCCESS","MEETING_LOG_UPLOAD_SUCCESS","details","uploadError","MEETING_LOG_UPLOAD_FAILURE","UPLOAD_LOGS_FAILURE","code","getReachability","gatherReachability","fetchGeoHint","res","geoHintInfo","getMeetingPreferences","parseDefaultSiteFromMeetingPreferences","user","get","userPreferences","userPreferencesItems","preferredWebExSite","MeetingUtil","cleanUp","delete","MEETING_REMOVED","destination","infoExtraParams","failOnMissingMeetingInfo","fetchInfoOptions","SpaceIDDeprecatedError","targetDest","_CONVERSATION_URL_","foundMeeting","foundMeetingIsNotCalendarMeeting","scheduledMeeting","createMeeting","createdMeeting","EVENTS","DESTROY_MEETING","autoUploadLogs","callStart","lastActive","feedbackId","locusId","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","fetchMeetingInfoTimeoutId","setTimeout","fetchMeetingInfo","extraParams","sendCAevents","parseMeetingInfo","CaptchaError","PasswordError","PermissionError","MEETING_REMOVED_REASON","MISSING_MEETING_INFO","NoMeetingInfoError","sipUri","setSipUri","meetingAddedType","getMeetingAddedType","value","getAll","getActiveMeetings","locusArray","activeLocusUrl","loci","lociToUpdate","sortLocusArrayToUpdate","forEach","push","meetingsCollection","includes","NO_MEETINGS_TO_SYNC","mainLoci","filter","breakoutLoci","isValidBreakoutLocus","breakoutLocusForHandleLater","associateMainLocus","find","mainLocus","existCorrespondingMeeting","newCreatedLocus","existIndex","findIndex","associateBreakoutLocus","splice","scheduled","WebexPlugin"],"sources":["index.ts"],"sourcesContent":["/* eslint no-shadow: [\"error\", { \"allow\": [\"eventType\"] }] */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-metrics';\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\nimport {setLogger} from '@webex/internal-media-core';\n\nimport * as mediaHelpersModule from '@webex/media-helpers';\n\nimport 'webrtc-adapter';\n\nimport Metrics from '../metrics';\nimport LoggerConfig from '../common/logs/logger-config';\nimport StaticConfig from '../common/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport LoggerRequest from '../common/logs/request';\nimport Trigger from '../common/events/trigger-proxy';\nimport Media from '../media';\nimport MeetingUtil from '../meeting/util';\nimport {\n MEETINGS,\n EVENTS,\n EVENT_TRIGGERS,\n READY,\n LOCUSEVENT,\n 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 MEETINGNUMBER,\n _JOINED_,\n _MOVED_,\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';\nimport PermissionError from '../common/errors/permission';\nimport {INoiseReductionEffect, IVirtualBackgroundEffect} from './meetings.types';\nimport {SpaceIDDeprecatedError} from '../common/errors/webex-errors';\nimport NoMeetingInfoError from '../common/errors/no-meeting-info';\n\nlet mediaLogger;\n\nclass MediaLogger {\n info(...args) {\n LoggerProxy.logger.info(...args);\n }\n\n log(...args) {\n LoggerProxy.logger.log(...args);\n }\n\n error(...args) {\n LoggerProxy.logger.error(...args);\n }\n\n warn(...args) {\n LoggerProxy.logger.warn(...args);\n }\n\n trace(...args) {\n LoggerProxy.logger.trace(...args);\n }\n\n debug(...args) {\n LoggerProxy.logger.debug(...args);\n }\n}\n/**\n * Meetings Ready Event\n * Emitted when the meetings instance on webex is ready\n * @event meetings:ready\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Network Disconnected Event\n * Emitted when the meetings instance is disconnected from\n * the internal mercury server\n * @event network:disconnected\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meetings Registered Event\n * Emitted when the meetings instance has been registered and listening\n * @event meetings:registered\n * @instance\n * @memberof Meetings\n */\n\n/**\n * Meeting Removed Event\n * Emitted when a meeting was removed from the cache of meetings\n * @event meeting:removed\n * @instance\n * @type {Object}\n * @property {String} meetingId the removed meeting\n * @property {Object} response the server response\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Meeting Added Event\n * Emitted when a meeting was added to the cache of meetings\n * @event meeting:added\n * @instance\n * @type {Object}\n * @property {String} meetingId the added meeting\n * @property {String} type what type of meeting it was\n * @memberof Meetings\n */\n\n/**\n * Maintain a cache of meetings and sync with services.\n * @class\n */\nexport default class Meetings extends WebexPlugin {\n loggerRequest: any;\n media: any;\n meetingCollection: any;\n personalMeetingRoom: any;\n preferredWebexSite: any;\n reachability: Reachability;\n registered: any;\n request: any;\n geoHintInfo: any;\n meetingInfo: any;\n mediaHelpers: any;\n breakoutLocusForHandleLater: any;\n namespace = MEETINGS;\n\n /**\n * Initializes the Meetings Plugin\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor(...args) {\n super(...args);\n\n /**\n * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app\n * to be able to call media helper functions.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.mediaHelpers = mediaHelpersModule;\n\n /**\n * The Meetings request to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.request = new Request({}, {parent: this.webex});\n /**\n * Log upload request helper\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.loggerRequest = new LoggerRequest({webex: this.webex});\n this.meetingCollection = new MeetingCollection();\n /**\n * The PersonalMeetingRoom object to interact with server\n * @instance\n * @type {Object}\n * @public\n * @memberof Meetings\n */\n this.personalMeetingRoom = null;\n\n /**\n * The Reachability object to interact with server\n * starts as null\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.reachability = new Reachability(this.webex);\n\n /**\n * If the meetings plugin has been registered and listening via {@link Meetings#register}\n * @instance\n * @type {Boolean}\n * @public\n * @memberof Meetings\n */\n this.registered = false;\n\n /**\n * This values indicates the preferred webex site the user will start there meeting, getsits value from {@link Meetings#register}\n * @instance\n * @type {String}\n * @private\n * @memberof Meetings\n */\n this.preferredWebexSite = '';\n\n /**\n * The public interface for the internal Media util files. These are helpful to expose outside the context\n * of a meeting so that a user can access media without creating a meeting instance.\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n this.media = {\n getUserMedia: Media.getUserMedia,\n };\n\n this.onReady();\n }\n\n /**\n * check whether you need to handle this main session's locus data or not\n * @param {Object} meeting current meeting data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleMainLocus(meeting: any, newLocus: any) {\n const breakoutUrl = newLocus.controls?.breakout?.url;\n const breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);\n\n const isSelfJoined = newLocus?.self?.state === _JOINED_;\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n // @ts-ignore\n const deviceFromNewLocus = MeetingsUtil.getThisDevice(newLocus, this.webex.internal.device.url);\n const isResourceMovedOnThisDevice =\n deviceFromNewLocus?.state === _LEFT_ && deviceFromNewLocus?.reason === _MOVED_;\n\n const isNewLocusJoinThisDevice = MeetingsUtil.joinedOnThisDevice(\n meeting,\n newLocus,\n // @ts-ignore\n this.webex.internal.device.url\n );\n const isBreakoutLocusJoinThisDevice =\n breakoutLocus?.joinedWith?.correlationId &&\n breakoutLocus.joinedWith.correlationId === meeting?.correlationId;\n\n if (isSelfJoined && isNewLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'\n );\n if (breakoutLocus?.joinedWith && deviceFromNewLocus) {\n const breakoutReplaceAt =\n breakoutLocus.joinedWith.replaces?.length > 0\n ? breakoutLocus.joinedWith.replaces[0].replaceAt\n : '';\n const newLocusReplaceAt =\n deviceFromNewLocus.replaces?.length > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';\n if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ${newLocusReplaceAt} bo replacedAt ${breakoutReplaceAt}`\n );\n\n return false;\n }\n }\n\n return true;\n }\n if (isBreakoutLocusJoinThisDevice) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ${breakoutUrl}`\n );\n\n return false;\n }\n if (isSelfMoved && (newLocus?.self?.removed || isResourceMovedOnThisDevice)) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle'\n );\n\n return false;\n }\n if (isSelfJoined && isResourceMovedOnThisDevice) {\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle'\n );\n\n return false;\n }\n LoggerProxy.logger.log(\n 'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'\n );\n\n return true;\n }\n\n /**\n * check whether you need to handle this locus data or not\n * @param {Object} meeting old locus data\n * @param {Object} newLocus new locus data\n * @returns {boolean}\n * @private\n * @memberof Meetings\n */\n private isNeedHandleLocusDTO(meeting: any, newLocus: any) {\n if (newLocus) {\n const isNewLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(newLocus);\n const isSelfMoved = newLocus?.self?.state === _LEFT_ && newLocus?.self?.reason === _MOVED_;\n if (!meeting) {\n if (isNewLocusAsBreakout) {\n LoggerProxy.logger.log(\n `Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ${newLocus.fullState?.active}`\n );\n\n return newLocus.self?.state === _JOINED_;\n }\n\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n if (!isNewLocusAsBreakout) {\n return this.isNeedHandleMainLocus(meeting, newLocus);\n }\n\n return !isSelfMoved;\n }\n\n return true;\n }\n\n /**\n * get corresponding meeting object by locus data\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @returns {Object}\n * @private\n * @memberof Meetings\n */\n getCorrespondingMeetingByLocus(data) {\n // getting meeting by correlationId. This will happen for the new event\n // Either the locus\n // TODO : Add check for the callBack Address\n return (\n this.meetingCollection.getByKey(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 this.meetingCollection.getByKey(MEETINGNUMBER, data.locus?.info?.webExMeetingId)\n );\n }\n\n /**\n * handle locus events and takes meeting actions with them as they come in\n * @param {Object} data a locus event\n * @param {String} data.locusUrl\n * @param {Object} data.locus\n * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info\n * @param {String} data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusEvent(data: {locusUrl: string; locus: any}, useRandomDelayForInfo = false) {\n let meeting = this.getCorrespondingMeetingByLocus(data);\n\n // Special case when locus has got replaced, This only happend once if a replace locus exists\n // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call\n\n if (!meeting && data.locus?.replaces?.length > 0) {\n // Always the last element in the replace is the active one\n meeting = this.meetingCollection.getByKey(\n LOCUS_URL,\n data.locus.replaces[data.locus.replaces.length - 1].locusUrl\n );\n }\n\n if (meeting && !MeetingsUtil.isBreakoutLocusDTO(data.locus)) {\n meeting.locusInfo.updateMainSessionLocusCache(data.locus);\n }\n if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {\n LoggerProxy.logger.log(\n `Meetings:index#handleLocusEvent --> doesn't need to process locus event`\n );\n\n return;\n }\n if (!meeting) {\n // TODO: create meeting when we get a meeting object\n // const checkForEnded = (locus) => {\n // TODO: you already ended the meeting but you got an event later\n // Mainly for 1:1 Callsor meeting\n // Happens mainly after refresh\n\n // 1:1 Meeting\n // 1) You ended a call before but you got a mercury event\n // Make sure end the call and cleanup the meeting only if the mercury\n // event says so\n // 2) Maintain lastSync time in the meetings object which helps to compare\n // If the meeting came befor or after the sync . ANy meeting start time before the sync time is invalid\n\n // For space Meeting\n // Check the locus object and see who has joined\n\n // };\n // rather then locus object change to locus url\n\n if (\n data.locus &&\n data.locus.fullState &&\n data.locus.fullState.state === LOCUS.STATE.INACTIVE\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n // When its wireless share or guest and user leaves the meeting we dont have to keep the meeting object\n // Any future events will be neglected\n\n if (\n data.locus &&\n data.locus.self &&\n data.locus.self.state === _LEFT_ &&\n data.locus.self.removed === true\n ) {\n // just ignore the event as its already ended and not active\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Locus event received for meeting, after it was ended.'\n );\n\n return;\n }\n\n this.create(data.locus, _LOCUS_ID_, useRandomDelayForInfo)\n .then((newMeeting) => {\n meeting = newMeeting;\n\n // It's a new meeting so initialize the locus data\n meeting.locusInfo.initialSetup(data.locus);\n this.checkHandleBreakoutLocus(data.locus);\n })\n .catch((e) => {\n LoggerProxy.logger.error(e);\n })\n .finally(() => {\n // There will be cases where locus event comes in gets created and deleted because its a 1:1 and meeting gets deleted\n // because the other user left so before sending 'added' event make sure it exists in the collection\n\n if (this.getMeetingByType(_ID_, meeting.id)) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-started',\n payload: {\n trigger: 'mercury-event',\n },\n options: {\n meetingId: meeting.id,\n },\n });\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'handleLocusEvent',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meeting.type === _MEETING_ ? _JOIN_ : _INCOMING_,\n }\n );\n } else {\n // Meeting got added but was not found in the collection. It might have got destroyed\n LoggerProxy.logger.warn(\n 'Meetings:index#handleLocusEvent --> Created and destroyed meeting object before sending an event'\n );\n }\n });\n } else {\n meeting.locusInfo.parse(meeting, data);\n }\n }\n\n /**\n * handles locus events through mercury that are not roap\n * @param {Object} envelope\n * @param {Object} envelope.data\n * @param {String} envelope.data.eventType\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleLocusMercury(envelope: {data: any}) {\n const {data} = envelope;\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n\n if (eventType && eventType !== LOCUSEVENT.MESSAGE_ROAP) {\n this.handleLocusEvent(data, true);\n }\n }\n\n /**\n * handles mecury offline event\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private handleMercuryOffline() {\n Trigger.trigger(\n this,\n {\n file: 'meetings/index',\n function: 'handleMercuryOffline',\n },\n EVENT_TRIGGERS.MEETINGS_NETWORK_DISCONNECTED\n );\n }\n\n /**\n * registers for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private listenForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.on(LOCUSEVENT.LOCUS_MERCURY, (envelope) => {\n this.handleLocusMercury(envelope);\n });\n // @ts-ignore\n this.webex.internal.mercury.on(ROAP.ROAP_MERCURY, (envelope) => {\n MeetingsUtil.handleRoapMercury(envelope, this.meetingCollection);\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(ONLINE, () => {\n this.syncMeetings();\n });\n\n // @ts-ignore\n this.webex.internal.mercury.on(OFFLINE, () => {\n this.handleMercuryOffline();\n });\n }\n\n /**\n * stops listening for locus and roap mercury events\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private stopListeningForEvents() {\n // @ts-ignore\n this.webex.internal.mercury.off(LOCUSEVENT.LOCUS_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ROAP.ROAP_MERCURY);\n // @ts-ignore\n this.webex.internal.mercury.off(ONLINE);\n }\n\n /**\n * @returns {undefined}\n * @private\n * @memberof Meetings\n */\n private onReady() {\n // @ts-ignore\n this.webex.once(READY, () => {\n // @ts-ignore\n StaticConfig.set(this.config);\n // @ts-ignore\n LoggerConfig.set(this.config.logging);\n // @ts-ignore\n LoggerProxy.set(this.webex.logger);\n\n mediaLogger = new MediaLogger();\n setLogger(mediaLogger);\n\n /**\n * The MeetingInfo object to interact with server\n * @instance\n * @type {Object}\n * @private\n * @memberof Meetings\n */\n // @ts-ignore\n this.meetingInfo = this.config.experimental.enableUnifiedMeetings\n ? // @ts-ignore\n new MeetingInfoV2(this.webex)\n : // @ts-ignore\n new MeetingInfo(this.webex);\n // @ts-ignore\n this.personalMeetingRoom = new PersonalMeetingRoom(\n {meetingInfo: this.meetingInfo},\n // @ts-ignore\n {parent: this.webex}\n );\n\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'onReady',\n },\n EVENT_TRIGGERS.MEETINGS_READY\n );\n\n MeetingsUtil.checkH264Support({disableNotifications: true});\n // @ts-ignore\n Metrics.initialSetup(this.webex);\n });\n }\n\n /**\n * API to toggle unified meetings\n * @param {Boolean} changeState\n * @private\n * @memberof Meetings\n * @returns {undefined}\n */\n private _toggleUnifiedMeetings(changeState: boolean) {\n if (typeof changeState !== 'boolean') {\n return;\n }\n // @ts-ignore\n if (this.config?.experimental?.enableUnifiedMeetings !== changeState) {\n // @ts-ignore\n this.config.experimental.enableUnifiedMeetings = changeState;\n // @ts-ignore\n this.meetingInfo = changeState ? new MeetingInfoV2(this.webex) : new MeetingInfo(this.webex);\n }\n }\n\n /**\n * API to 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 * Creates a noise reduction effect\n *\n * @param {INoiseReductionEffect} options optional custom effect options\n * @returns {Promise<effect>} noise reduction effect.\n * @public\n * @memberof Meetings\n */\n createNoiseReductionEffect = async (options?: INoiseReductionEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.NoiseReductionEffect({authToken, ...options});\n };\n\n /**\n * Creates a virtual background effect\n *\n * @param {IVirtualBackgroundEffect} options optional custom effect options\n * @returns {Promise<effect>} virtual background effect.\n * @public\n * @memberof Meetings\n */\n createVirtualBackgroundEffect = async (options?: IVirtualBackgroundEffect) => {\n // @ts-ignore\n const authToken = this.webex.credentials.supertoken.access_token;\n\n return new mediaHelpersModule.VirtualBackgroundEffect({authToken, ...options});\n };\n\n /**\n * Uploads logs to the webex services for tracking\n * @param {Object} [options={}]\n * @param {String} [options.callStart] Call Start Time\n * @param {String} [options.feedbackId] ID used for tracking\n * @param {String} [options.locusId]\n * @param {String} [options.correlationId]\n * @param {String} [options.meetingId] webex meeting ID\n * @param {String} [options.userId] userId\n * @param {String} [options.orgId] org id\n * @returns {String} feedback ID logs were submitted under\n */\n uploadLogs(\n options: {\n 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 Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_SUCCESS, options);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_SUCCESS,\n {\n meetingId: options.meetingId,\n details: uploadResult,\n }\n );\n\n return uploadResult;\n })\n .catch((uploadError) => {\n LoggerProxy.logger.error(\n 'Meetings:index#uploadLogs --> Unable to upload logs for meeting',\n uploadError\n );\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'uploadLogs',\n },\n EVENT_TRIGGERS.MEETING_LOG_UPLOAD_FAILURE,\n {\n meetingId: options.meetingId,\n reason: uploadError,\n }\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.UPLOAD_LOGS_FAILURE, {\n ...options,\n reason: uploadError.message,\n stack: uploadError.stack,\n code: uploadError.code,\n });\n });\n }\n\n /**\n * gets the reachability instance for Meetings\n * @returns {Reachability}\n * @public\n * @memberof Meetings\n */\n getReachability() {\n return this.reachability;\n }\n\n /**\n * initializes and starts gathering reachability for Meetings\n * @returns {Promise}\n * @public\n * @memberof Meetings\n */\n startReachability() {\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 // fall back to getting the preferred site from the user information\n if (!this.preferredWebexSite) {\n // @ts-ignore\n return this.webex.internal.user\n .get()\n .then((user) => {\n const preferredWebexSite =\n user?.userPreferences?.userPreferencesItems?.preferredWebExSite;\n if (preferredWebexSite) {\n this.preferredWebexSite = preferredWebexSite;\n } else {\n throw new Error('site not found');\n }\n })\n .catch(() => {\n LoggerProxy.logger.error(\n 'Failed to fetch preferred site from user - no site will be set'\n );\n });\n }\n\n return Promise.resolve();\n });\n }\n\n /**\n * gets the personal meeting room instance, for saved PMR values for this user\n * @returns {PersonalMeetingRoom}\n * @public\n * @memberof Meetings\n */\n\n getPersonalMeetingRoom() {\n return this.personalMeetingRoom;\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} reason\n * @param {String} type\n * @returns {Undefined}\n * @private\n * @memberof Meetings\n */\n private destroy(meeting: Meeting, reason: object) {\n MeetingUtil.cleanUp(meeting);\n this.meetingCollection.delete(meeting.id);\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'destroy',\n },\n EVENT_TRIGGERS.MEETING_REMOVED,\n {\n meetingId: meeting.id,\n reason,\n }\n );\n }\n\n /**\n * Create a meeting.\n * @param {string} destination - sipURL, 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 * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {string} correlationId - the optional specified correlationId\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @returns {Promise<Meeting>} A new Meeting.\n * @public\n * @memberof Meetings\n */\n public create(\n destination: string,\n type: string = null,\n useRandomDelayForInfo = false,\n infoExtraParams = {},\n correlationId: string = undefined,\n failOnMissingMeetingInfo = false\n ) {\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.error(\n `Meetings:index#create --> ERROR, unable to determine info options: ${error.message}`\n );\n if (error instanceof SpaceIDDeprecatedError) {\n throw new SpaceIDDeprecatedError();\n }\n })\n .then((options: any = {}) => {\n // Normalize the destination.\n const targetDest = options.destination || destination;\n\n // check for the conversation URL then sip Url\n let meeting = null;\n\n if (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(\n targetDest,\n type,\n useRandomDelayForInfo,\n infoExtraParams,\n correlationId,\n failOnMissingMeetingInfo\n ).then((createdMeeting: any) => {\n // If the meeting was successfully created.\n if (createdMeeting && createdMeeting.on) {\n // Create a destruction event for the meeting.\n createdMeeting.on(EVENTS.DESTROY_MEETING, (payload) => {\n // @ts-ignore\n if (this.config.autoUploadLogs) {\n this.uploadLogs({\n callStart: createdMeeting.locusInfo?.fullState?.lastActive,\n 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 // 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 * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info\n * @param {String} correlationId the optional specified correlationId\n * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)\n * @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 infoExtraParams = {},\n correlationId: string = undefined,\n failOnMissingMeetingInfo = 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 correlationId,\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 () =>\n meeting.fetchMeetingInfo({\n extraParams: infoExtraParams,\n sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n }),\n waitingTime\n );\n meeting.parseMeetingInfo(undefined, destination);\n } else {\n await meeting.fetchMeetingInfo({\n extraParams: infoExtraParams,\n sendCAevents: !!correlationId, // if client sends correlation id as argument of public create(), then it means that this meeting creation is part of a pre-join intent from user\n });\n }\n } catch (err) {\n if (\n !(err instanceof CaptchaError) &&\n !(err instanceof PasswordError) &&\n !(err instanceof PermissionError)\n ) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`\n );\n if (failOnMissingMeetingInfo) {\n LoggerProxy.logger.info(\n `Meetings:index#createMeeting --> Destroying meeting due to missing meeting info.`\n );\n // @ts-ignore\n this.destroy(meeting, MEETING_REMOVED_REASON.MISSING_MEETING_INFO);\n throw new NoMeetingInfoError();\n }\n // if there is no meeting info and no error should be thrown then we assume its a 1:1 call or wireless share\n LoggerProxy.logger.info(\n 'Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share'\n );\n }\n LoggerProxy.logger.debug(\n `Meetings:index#createMeeting --> Debug ${err} fetching /meetingInfo for creation.`\n );\n } finally {\n // For type LOCUS_ID we need to parse the locus object to get the information\n // about the caller and callee\n // Meeting Added event will be created in `handleLocusEvent`\n if (type !== _LOCUS_ID_) {\n if (!meeting.sipUri) {\n meeting.setSipUri(destination);\n }\n\n // TODO: check if we have to move this to parser\n const meetingAddedType = MeetingsUtil.getMeetingAddedType(type);\n\n // We typically shouldn't need to trigger both and event and return a promise.\n // Is this a special case? We want to make the public API usage as simple as possible.\n Trigger.trigger(\n this,\n {\n file: 'meetings',\n function: 'createMeeting',\n },\n EVENT_TRIGGERS.MEETING_ADDED,\n {\n meeting,\n type: meetingAddedType,\n }\n );\n }\n }\n\n return meeting;\n\n // Create the meeting calling the necessary service endpoints.\n\n // Internally, there are many more destinations:\n //\n // - locusID\n // - meetingURL\n // - globalMeetingID, e.g, *00*meetingID\n // - meetingID\n // - meetingURL\n // - PSTN\n // - phone number\n //\n // Our job is to determine the appropriate one\n // and its corresponding service so that developers\n // need only sipURL to get a meeting\n // and its ID, but have the option to use createWithType()\n // and specify those types to get meetingInfo\n }\n\n /**\n * get a specifc meeting given it's type matched to the value, i.e., locus url\n * @param {String} type\n * @param {Object} value\n * @returns {Meeting}\n * @public\n * @memberof Meetings\n */\n public getMeetingByType(type: string, value: object) {\n return this.meetingCollection.getByKey(type, value);\n }\n\n /**\n * Get all meetings.\n * @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 const lociToUpdate = this.sortLocusArrayToUpdate(locusArray.loci);\n lociToUpdate.forEach((locus) => {\n activeLocusUrl.push(locus.url);\n this.handleLocusEvent({\n locus,\n locusUrl: locus.url,\n });\n });\n }\n const meetingsCollection = this.meetingCollection.getAll();\n\n if (Object.keys(meetingsCollection).length > 0) {\n // 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 * sort out locus array for initial creating\n * @param {Array} loci original locus array\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n sortLocusArrayToUpdate(loci: any[]) {\n const mainLoci = loci.filter((locus) => !MeetingsUtil.isBreakoutLocusDTO(locus));\n const breakoutLoci = loci.filter((locus) => MeetingsUtil.isValidBreakoutLocus(locus));\n this.breakoutLocusForHandleLater = [];\n const lociToUpdate = [...mainLoci];\n breakoutLoci.forEach((breakoutLocus) => {\n const associateMainLocus = mainLoci.find(\n (mainLocus) => mainLocus.controls?.breakout?.url === breakoutLocus.controls?.breakout?.url\n );\n const existCorrespondingMeeting = this.getCorrespondingMeetingByLocus({\n locus: breakoutLocus,\n locusUrl: breakoutLocus.url,\n });\n\n if (associateMainLocus && !existCorrespondingMeeting) {\n // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,\n // after meeting create with main locus, then handle the associate breakout locus.\n // if only handle breakout locus, will miss some date\n this.breakoutLocusForHandleLater.push(breakoutLocus);\n } else {\n lociToUpdate.push(breakoutLocus);\n }\n });\n\n return lociToUpdate;\n }\n\n /**\n * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus\n * @param {Object} newCreatedLocus the locus which just create meeting object of it\n * @returns {undefined}\n * @public\n * @memberof Meetings\n */\n checkHandleBreakoutLocus(newCreatedLocus) {\n if (\n !newCreatedLocus ||\n !this.breakoutLocusForHandleLater ||\n !this.breakoutLocusForHandleLater.length\n ) {\n return;\n }\n if (MeetingsUtil.isBreakoutLocusDTO(newCreatedLocus)) {\n return;\n }\n const existIndex = this.breakoutLocusForHandleLater.findIndex(\n (breakoutLocus) =>\n breakoutLocus.controls?.breakout?.url === newCreatedLocus.controls?.breakout?.url\n );\n\n if (existIndex < 0) {\n return;\n }\n\n const associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];\n this.handleLocusEvent({locus: associateBreakoutLocus, locusUrl: associateBreakoutLocus.url});\n this.breakoutLocusForHandleLater.splice(existIndex, 1);\n }\n\n /**\n * Get 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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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Extended Error object for general parameter errors
3
+ */
4
+ export default class NoMeetingInfoError extends Error {
5
+ code: any;
6
+ error: any;
7
+ sdkMessage: any;
8
+ /**
9
+ * @constructor
10
+ * @param {String} [message]
11
+ * @param {Object} [error]
12
+ */
13
+ constructor(message?: string, error?: any);
14
+ }
@@ -278,6 +278,7 @@ export declare const MEETING_REMOVED_REASON: {
278
278
  NO_MEETINGS_TO_SYNC: string;
279
279
  MEETING_CONNECTION_FAILED: string;
280
280
  LOCUS_DTO_SYNC_FAILED: string;
281
+ MISSING_MEETING_INFO: string;
281
282
  };
282
283
  export declare const CALL_REMOVED_REASON: {
283
284
  CALL_INACTIVE: string;
@@ -361,6 +362,11 @@ export declare const ERROR_DICTIONARY: {
361
362
  MESSAGE: string;
362
363
  CODE: number;
363
364
  };
365
+ NO_MEETING_INFO: {
366
+ NAME: string;
367
+ MESSAGE: string;
368
+ CODE: number;
369
+ };
364
370
  };
365
371
  export declare const FLOOR_ACTION: {
366
372
  GRANTED: string;
@@ -293,17 +293,19 @@ export default class Meetings extends WebexPlugin {
293
293
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
294
294
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
295
295
  * @param {string} correlationId - the optional specified correlationId
296
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
296
297
  * @returns {Promise<Meeting>} A new Meeting.
297
298
  * @public
298
299
  * @memberof Meetings
299
300
  */
300
- create(destination: string, type?: string, useRandomDelayForInfo?: boolean, infoExtraParams?: {}, correlationId?: string): any;
301
+ create(destination: string, type?: string, useRandomDelayForInfo?: boolean, infoExtraParams?: {}, correlationId?: string, failOnMissingMeetingInfo?: boolean): any;
301
302
  /**
302
303
  * @param {String} destination see create()
303
304
  * @param {String} type see create()
304
305
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
305
306
  * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
306
307
  * @param {String} correlationId the optional specified correlationId
308
+ * @param {Boolean} failOnMissingMeetingInfo - whether to throw an error if meeting info fails to fetch (for calls that are not 1:1 or content share)
307
309
  * @returns {Promise} a new meeting instance complete with meeting info and destination
308
310
  * @private
309
311
  * @memberof Meetings