@webex/plugin-meetings 1.150.0 → 1.151.2

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.
@@ -278,11 +278,13 @@ MeetingInfoUtil.getDestinationType = /*#__PURE__*/function () {
278
278
 
279
279
 
280
280
  MeetingInfoUtil.getRequestBody = function (options) {
281
- var _destination$info;
281
+ var _destination$info, _destination$info2;
282
282
 
283
283
  var type = options.type,
284
284
  destination = options.destination;
285
- var body = {};
285
+ var body = {
286
+ supportHostKey: true
287
+ };
286
288
 
287
289
  switch (type) {
288
290
  case _constants._SIP_URI_:
@@ -307,6 +309,8 @@ MeetingInfoUtil.getRequestBody = function (options) {
307
309
  // use meetingID for the completer meeting info for the already started meeting
308
310
  if ((_destination$info = destination.info) !== null && _destination$info !== void 0 && _destination$info.webExMeetingId) {
309
311
  body.meetingKey = destination.info.webExMeetingId;
312
+ } else if ((_destination$info2 = destination.info) !== null && _destination$info2 !== void 0 && _destination$info2.sipUri) {
313
+ body.sipUrl = destination.info.sipUri;
310
314
  }
311
315
 
312
316
  break;
@@ -1 +1 @@
1
- {"version":3,"sources":["utilv2.js"],"names":["MeetingInfoUtil","getParsedUrl","link","parsedUrl","url","parse","protocol","HTTPS_PROTOCOL","error","LoggerProxy","logger","warn","isMeetingLink","value","hostNameBool","hostname","includes","WEBEX_DOT_COM","pathNameBool","pathname","MEET","MEET_M","JOIN","isConversationUrl","webex","clusterId","internal","services","getClusterId","endsWith","CONVERSATION_SERVICE","isSipUri","sipString","sipUri","DIALER_REGEX","SIP_ADDRESS","exec","isPhoneNumber","phoneNumber","isValidNumber","PHONE_NUMBER","test","getHydraId","destination","type","id","cluster","UUID_REG","_ROOM_","room","_PEOPLE_","people","getSipUriFromHydraPersonId","get","then","res","emails","length","ParameterError","catch","err","getDestinationType","from","options","hydraId","_MEETING_LINK_","_SIP_URI_","_CONVERSATION_URL_","wasHydraPerson","resolve","waitForCatalog","conversationUrl","conversation","getUrlFromClusterId","getRequestBody","body","sipUrl","_PERSONAL_ROOM_","userId","orgId","_MEETING_ID_","meetingKey","_LOCUS_ID_","info","webExMeetingId","meetingUrl","_MEETING_UUID_","meetingUUID"],"mappings":"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","sourcesContent":["import url from 'url';\n\nimport {\n deconstructHydraId\n} from '@webex/common';\n\nimport {\n _SIP_URI_,\n _PERSONAL_ROOM_,\n _MEETING_ID_,\n _CONVERSATION_URL_,\n _LOCUS_ID_,\n _MEETING_LINK_,\n _PEOPLE_,\n _ROOM_,\n _MEETING_UUID_,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n JOIN,\n MEET,\n MEET_M,\n HTTPS_PROTOCOL,\n UUID_REG\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nconst MeetingInfoUtil = {};\n\nMeetingInfoUtil.getParsedUrl = (link) => {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as <company>.webex.com/meet/<user> without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n }\n catch (error) {\n LoggerProxy.logger.warn(`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`);\n\n return null;\n }\n};\n\n/**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\nMeetingInfoUtil.isMeetingLink = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n const pathNameBool = parsedUrl.pathname && (parsedUrl.pathname.includes(`/${MEET}`) || parsedUrl.pathname.includes(`/${MEET_M}`) || parsedUrl.pathname.includes(`/${JOIN}`));\n\n return hostNameBool && pathNameBool;\n};\n\nMeetingInfoUtil.isConversationUrl = (value, webex) => {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n};\n\n\nMeetingInfoUtil.isSipUri = (sipString) => {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n};\n\nMeetingInfoUtil.isPhoneNumber = (phoneNumber) => {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n};\n\nMeetingInfoUtil.getHydraId = (destination) => {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n};\n\nMeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) => webex.people.get(destination).then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n}).catch((err) => {\n LoggerProxy.logger.error(`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `);\n throw err;\n});\n\n\nMeetingInfoUtil.getDestinationType = async (from) => {\n const {destination, type, webex} = from;\n\n if (type) {\n return {\n destination,\n type\n };\n }\n const options = {};\n const hydraId = MeetingInfoUtil.getHydraId(destination);\n\n if (MeetingInfoUtil.isMeetingLink(destination)) {\n LoggerProxy.logger.warn('Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead');\n\n options.type = _MEETING_LINK_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isSipUri(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isPhoneNumber(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {\n options.type = _CONVERSATION_URL_;\n options.destination = destination;\n }\n else if (hydraId.people) {\n options.type = _SIP_URI_;\n\n return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n }\n else if (hydraId.room) {\n options.type = _CONVERSATION_URL_;\n try {\n await webex.internal.services.waitForCatalog('postauth');\n\n const conversationUrl = webex.internal.conversation.getUrlFromClusterId({\n cluster: hydraId.cluster,\n id: hydraId.destination\n });\n\n options.destination = conversationUrl;\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting-info:util#getDestinationType --> ${e}`);\n throw (e);\n }\n }\n else {\n LoggerProxy.logger.warn('Meeting-info:util#getDestinationType --> (\\'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n throw new ParameterError('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n }\n\n return Promise.resolve(options);\n};\n\n/**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {Object} options type and value to fetch meeting info\n * @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} options.destination ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\nMeetingInfoUtil.getRequestBody = (options) => {\n const {type, destination} = options;\n const body = {};\n\n switch (type) {\n case _SIP_URI_:\n body.sipUrl = destination;\n break;\n case _PERSONAL_ROOM_:\n body.userId = destination;\n body.orgId = ''; // TODO: when to use the org iD (fetch others PMR)\n break;\n case _MEETING_ID_:\n body.meetingKey = destination;\n break;\n case _CONVERSATION_URL_:\n body.conversationUrl = destination;\n break;\n case _LOCUS_ID_:\n // use meetingID for the completer meeting info for the already started meeting\n if (destination.info?.webExMeetingId) {\n body.meetingKey = destination.info.webExMeetingId;\n }\n break;\n case _MEETING_LINK_:\n body.meetingUrl = destination;\n break;\n case _MEETING_UUID_: {\n body.meetingUUID = destination;\n break;\n }\n default:\n }\n\n return body;\n};\n\nexport default MeetingInfoUtil;\n"]}
1
+ {"version":3,"sources":["utilv2.js"],"names":["MeetingInfoUtil","getParsedUrl","link","parsedUrl","url","parse","protocol","HTTPS_PROTOCOL","error","LoggerProxy","logger","warn","isMeetingLink","value","hostNameBool","hostname","includes","WEBEX_DOT_COM","pathNameBool","pathname","MEET","MEET_M","JOIN","isConversationUrl","webex","clusterId","internal","services","getClusterId","endsWith","CONVERSATION_SERVICE","isSipUri","sipString","sipUri","DIALER_REGEX","SIP_ADDRESS","exec","isPhoneNumber","phoneNumber","isValidNumber","PHONE_NUMBER","test","getHydraId","destination","type","id","cluster","UUID_REG","_ROOM_","room","_PEOPLE_","people","getSipUriFromHydraPersonId","get","then","res","emails","length","ParameterError","catch","err","getDestinationType","from","options","hydraId","_MEETING_LINK_","_SIP_URI_","_CONVERSATION_URL_","wasHydraPerson","resolve","waitForCatalog","conversationUrl","conversation","getUrlFromClusterId","getRequestBody","body","supportHostKey","sipUrl","_PERSONAL_ROOM_","userId","orgId","_MEETING_ID_","meetingKey","_LOCUS_ID_","info","webExMeetingId","meetingUrl","_MEETING_UUID_","meetingUUID"],"mappings":"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","sourcesContent":["import url from 'url';\n\nimport {\n deconstructHydraId\n} from '@webex/common';\n\nimport {\n _SIP_URI_,\n _PERSONAL_ROOM_,\n _MEETING_ID_,\n _CONVERSATION_URL_,\n _LOCUS_ID_,\n _MEETING_LINK_,\n _PEOPLE_,\n _ROOM_,\n _MEETING_UUID_,\n DIALER_REGEX,\n WEBEX_DOT_COM,\n CONVERSATION_SERVICE,\n JOIN,\n MEET,\n MEET_M,\n HTTPS_PROTOCOL,\n UUID_REG\n} from '../constants';\nimport ParameterError from '../common/errors/parameter';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nconst MeetingInfoUtil = {};\n\nMeetingInfoUtil.getParsedUrl = (link) => {\n try {\n let parsedUrl = url.parse(link);\n\n if (!parsedUrl) {\n return false;\n }\n // hack for links such as <company>.webex.com/meet/<user> without a protocol\n if (!parsedUrl.protocol) {\n parsedUrl = url.parse(`${HTTPS_PROTOCOL}${link}`);\n }\n\n return parsedUrl;\n }\n catch (error) {\n LoggerProxy.logger.warn(`Meeting-info:util#getParsedUrl --> unable to parse the URL, error: ${error}`);\n\n return null;\n }\n};\n\n/**\n * Helper function to check if a string matches a known meeting link pattern\n * @param {String} value string to parse and see if it matches a meeting link\n * @returns {Boolean}\n */\nMeetingInfoUtil.isMeetingLink = (value) => {\n const parsedUrl = MeetingInfoUtil.getParsedUrl(value);\n const hostNameBool = parsedUrl.hostname && parsedUrl.hostname.includes(WEBEX_DOT_COM);\n const pathNameBool = parsedUrl.pathname && (parsedUrl.pathname.includes(`/${MEET}`) || parsedUrl.pathname.includes(`/${MEET_M}`) || parsedUrl.pathname.includes(`/${JOIN}`));\n\n return hostNameBool && pathNameBool;\n};\n\nMeetingInfoUtil.isConversationUrl = (value, webex) => {\n const clusterId = webex.internal.services.getClusterId(value);\n\n if (clusterId) {\n return clusterId.endsWith(CONVERSATION_SERVICE);\n }\n\n return false;\n};\n\n\nMeetingInfoUtil.isSipUri = (sipString) => {\n // TODO: lets remove regex from this equation and user URI matchers and such\n // have not found a great sip uri parser library as of now\n const sipUri = DIALER_REGEX.SIP_ADDRESS.exec(sipString);\n\n return sipUri;\n};\n\nMeetingInfoUtil.isPhoneNumber = (phoneNumber) => {\n const isValidNumber = DIALER_REGEX.PHONE_NUMBER.test(phoneNumber);\n\n return isValidNumber;\n};\n\nMeetingInfoUtil.getHydraId = (destination) => {\n const {type, id, cluster} = deconstructHydraId(destination);\n\n if (id && UUID_REG.test(id)) {\n if (type === _ROOM_) {\n return {room: true, destination: id, cluster};\n }\n if (type === _PEOPLE_) {\n return {people: true, destination: id, cluster};\n }\n\n return {};\n }\n\n return {};\n};\n\nMeetingInfoUtil.getSipUriFromHydraPersonId = (destination, webex) => webex.people.get(destination).then((res) => {\n if (res.emails && res.emails.length) {\n return res.emails[0];\n }\n throw new ParameterError('Hydra Id Lookup was an invalid hydra person id.');\n}).catch((err) => {\n LoggerProxy.logger.error(`Meeting-info:util#MeetingInfoUtil.getSipUriFromHydraPersonId --> getSipUriFromHydraPersonId ${err} `);\n throw err;\n});\n\n\nMeetingInfoUtil.getDestinationType = async (from) => {\n const {destination, type, webex} = from;\n\n if (type) {\n return {\n destination,\n type\n };\n }\n const options = {};\n const hydraId = MeetingInfoUtil.getHydraId(destination);\n\n if (MeetingInfoUtil.isMeetingLink(destination)) {\n LoggerProxy.logger.warn('Meeting-info:util#generateOptions --> WARN, use of Meeting Link is deprecated, please use a SIP URI instead');\n\n options.type = _MEETING_LINK_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isSipUri(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isPhoneNumber(destination)) {\n options.type = _SIP_URI_;\n options.destination = destination;\n }\n else if (MeetingInfoUtil.isConversationUrl(destination, webex)) {\n options.type = _CONVERSATION_URL_;\n options.destination = destination;\n }\n else if (hydraId.people) {\n options.type = _SIP_URI_;\n\n return MeetingInfoUtil.getSipUriFromHydraPersonId(hydraId.destination, webex).then((res) => {\n options.destination = res;\n\n // Since hydra person ids require a unique case in which they are\n // entirely converted to a SIP URI, we need to set a flag for detecting\n // this type of destination.\n options.wasHydraPerson = true;\n\n return Promise.resolve(options);\n });\n }\n else if (hydraId.room) {\n options.type = _CONVERSATION_URL_;\n try {\n await webex.internal.services.waitForCatalog('postauth');\n\n const conversationUrl = webex.internal.conversation.getUrlFromClusterId({\n cluster: hydraId.cluster,\n id: hydraId.destination\n });\n\n options.destination = conversationUrl;\n }\n catch (e) {\n LoggerProxy.logger.error(`Meeting-info:util#getDestinationType --> ${e}`);\n throw (e);\n }\n }\n else {\n LoggerProxy.logger.warn('Meeting-info:util#getDestinationType --> (\\'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n throw new ParameterError('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.');\n }\n\n return Promise.resolve(options);\n};\n\n/**\n * Helper function to build up a correct locus url depending on the value passed\n * @param {Object} options type and value to fetch meeting info\n * @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]\n * @param {Object} options.destination ?? value.value\n * @returns {Object} returns an object with {resource, method}\n */\nMeetingInfoUtil.getRequestBody = (options) => {\n const {type, destination} = options;\n const body = {\n supportHostKey: true\n };\n\n switch (type) {\n case _SIP_URI_:\n body.sipUrl = destination;\n break;\n case _PERSONAL_ROOM_:\n body.userId = destination;\n body.orgId = ''; // TODO: when to use the org iD (fetch others PMR)\n break;\n case _MEETING_ID_:\n body.meetingKey = destination;\n break;\n case _CONVERSATION_URL_:\n body.conversationUrl = destination;\n break;\n case _LOCUS_ID_:\n // use meetingID for the completer meeting info for the already started meeting\n if (destination.info?.webExMeetingId) {\n body.meetingKey = destination.info.webExMeetingId;\n }\n else if (destination.info?.sipUri) {\n body.sipUrl = destination.info.sipUri;\n }\n break;\n case _MEETING_LINK_:\n body.meetingUrl = destination;\n break;\n case _MEETING_UUID_: {\n body.meetingUUID = destination;\n break;\n }\n default:\n }\n\n return body;\n};\n\nexport default MeetingInfoUtil;\n"]}
@@ -36,27 +36,27 @@ var _uuid = _interopRequireDefault(require("uuid"));
36
36
 
37
37
  var _window = _interopRequireDefault(require("global/window"));
38
38
 
39
+ var _ipAnonymize = _interopRequireDefault(require("ip-anonymize"));
40
+
39
41
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
40
42
 
41
43
  var _constants = require("../constants");
42
44
 
43
- var _config = _interopRequireDefault(require("../common/config"));
44
-
45
45
  var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
46
46
 
47
- var _config2 = require("./config");
47
+ var _config = require("./config");
48
48
 
49
49
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
50
50
 
51
51
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
52
52
 
53
53
  var OSMap = {
54
- 'Chrome OS': _config2.OS_NAME.chrome,
55
- macOS: _config2.OS_NAME.MAC,
56
- Windows: _config2.OS_NAME.WINDOWS,
57
- iOS: _config2.OS_NAME.IOS,
58
- Android: _config2.OS_NAME.ANDROID,
59
- Linux: _config2.OS_NAME.LINUX
54
+ 'Chrome OS': _config.OS_NAME.chrome,
55
+ macOS: _config.OS_NAME.MAC,
56
+ Windows: _config.OS_NAME.WINDOWS,
57
+ iOS: _config.OS_NAME.IOS,
58
+ Android: _config.OS_NAME.ANDROID,
59
+ Linux: _config.OS_NAME.LINUX
60
60
  };
61
61
 
62
62
  var _BrowserDetection = (0, _browserDetection.default)(),
@@ -66,15 +66,8 @@ var _BrowserDetection = (0, _browserDetection.default)(),
66
66
  getBrowserVersion = _BrowserDetection.getBrowserVersion; // Apply a CIDR /28 format to the IP address
67
67
 
68
68
 
69
- var getLocalNetworkPrefix = function getLocalNetworkPrefix(localIp) {
70
- if (!localIp) {
71
- return undefined;
72
- }
73
-
74
- var parts = localIp.split('.'); // eslint-disable-next-line no-bitwise
75
-
76
- parts[3] &= 240;
77
- return parts.join('.');
69
+ var anonymizeIPAddress = function anonymizeIPAddress(localIp) {
70
+ return (0, _ipAnonymize.default)(localIp);
78
71
  };
79
72
 
80
73
  var triggerTimers = function triggerTimers(_ref) {
@@ -83,21 +76,39 @@ var triggerTimers = function triggerTimers(_ref) {
83
76
  data = _ref.data;
84
77
 
85
78
  switch (event) {
86
- case _config2.eventType.LOCUS_JOIN_RESPONSE:
87
- meeting.setStartSetupDelay(_config2.mediaType.AUDIO);
88
- meeting.setStartSetupDelay(_config2.mediaType.VIDEO);
89
- meeting.setStartSendingMediaDelay(_config2.mediaType.AUDIO);
90
- meeting.setStartSendingMediaDelay(_config2.mediaType.VIDEO);
79
+ case _config.eventType.CALL_INITIATED:
80
+ meeting.setStartCallInitiateJoinReq();
81
+ break;
82
+
83
+ case _config.eventType.LOCUS_JOIN_REQUEST:
84
+ meeting.setEndCallInitiateJoinReq();
85
+ meeting.setStartJoinReqResp();
86
+ break;
87
+
88
+ case _config.eventType.LOCUS_JOIN_RESPONSE:
89
+ meeting.setEndJoinReqResp();
90
+ meeting.setStartSetupDelay(_config.mediaType.AUDIO);
91
+ meeting.setStartSetupDelay(_config.mediaType.VIDEO);
92
+ meeting.setStartSendingMediaDelay(_config.mediaType.AUDIO);
93
+ meeting.setStartSendingMediaDelay(_config.mediaType.VIDEO);
91
94
  break;
92
95
 
93
- case _config2.eventType.RECEIVING_MEDIA_START:
96
+ case _config.eventType.RECEIVING_MEDIA_START:
94
97
  meeting.setEndSetupDelay(data.mediaType);
95
98
  break;
96
99
 
97
- case _config2.eventType.SENDING_MEDIA_START:
100
+ case _config.eventType.SENDING_MEDIA_START:
98
101
  meeting.setEndSendingMediaDelay(data.mediaType);
99
102
  break;
100
103
 
104
+ case _config.eventType.LOCAL_SDP_GENERATED:
105
+ meeting.setStartLocalSDPGenRemoteSDPRecvDelay();
106
+ break;
107
+
108
+ case _config.eventType.REMOTE_SDP_RECEIVED:
109
+ meeting.setEndLocalSDPGenRemoteSDPRecvDelay();
110
+ break;
111
+
101
112
  default:
102
113
  break;
103
114
  }
@@ -142,7 +153,7 @@ var Metrics = /*#__PURE__*/function () {
142
153
  * @memberof Metrics
143
154
  */
144
155
 
145
- this.keys = (0, _values.default)(_config2.eventType);
156
+ this.keys = (0, _values.default)(_config.eventType);
146
157
  /**
147
158
  * @instance
148
159
  * @type {Metrics}
@@ -196,6 +207,7 @@ var Metrics = /*#__PURE__*/function () {
196
207
 
197
208
  if (!meeting && meetingId) {
198
209
  meeting = this.meetingCollection.get(meetingId);
210
+ options.meeting = meeting;
199
211
  }
200
212
 
201
213
  if (meeting) {
@@ -205,7 +217,7 @@ var Metrics = /*#__PURE__*/function () {
205
217
  meeting.callEvents = [];
206
218
  }
207
219
 
208
- if (event === _config2.eventType.MEDIA_QUALITY) {
220
+ if (event === _config.eventType.MEDIA_QUALITY) {
209
221
  data.event = event;
210
222
  meeting.sendMediaQualityAnalyzerMetrics(data);
211
223
  } else {
@@ -237,8 +249,8 @@ var Metrics = /*#__PURE__*/function () {
237
249
  userAgent: this.userAgentToString(),
238
250
  clientInfo: {
239
251
  clientType: options.clientType,
240
- clientVersion: "".concat(_config2.CLIENT_NAME, "/").concat(this.webex.version),
241
- localNetworkPrefix: getLocalNetworkPrefix((_this$webex$meetings$ = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress),
252
+ clientVersion: "".concat(_config.CLIENT_NAME, "/").concat(this.webex.version),
253
+ localNetworkPrefix: anonymizeIPAddress((_this$webex$meetings$ = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress),
242
254
  osVersion: getOSVersion() || 'unknown',
243
255
  subClientType: options.subClientType,
244
256
  os: this.getOsName(),
@@ -288,6 +300,10 @@ var Metrics = /*#__PURE__*/function () {
288
300
  if (options.recoveredBy) {
289
301
  payload.event.recoveredBy = options.recoveredBy;
290
302
  }
303
+
304
+ if (options.joinTimes) {
305
+ payload.event.joinTimes = options.joinTimes;
306
+ }
291
307
  }
292
308
 
293
309
  return payload;
@@ -305,7 +321,7 @@ var Metrics = /*#__PURE__*/function () {
305
321
  value: function getOsName() {
306
322
  var _OSMap$getOSName;
307
323
 
308
- return (_OSMap$getOSName = OSMap[getOSName()]) !== null && _OSMap$getOSName !== void 0 ? _OSMap$getOSName : _config2.OS_NAME.OTHERS;
324
+ return (_OSMap$getOSName = OSMap[getOSName()]) !== null && _OSMap$getOSName !== void 0 ? _OSMap$getOSName : _config.OS_NAME.OTHERS;
309
325
  }
310
326
  /**
311
327
  * get the payload specific for a media quality event through call analyzer
@@ -329,7 +345,8 @@ var Metrics = /*#__PURE__*/function () {
329
345
 
330
346
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
331
347
  var audioSetupDelay = options.audioSetupDelay,
332
- videoSetupDelay = options.videoSetupDelay;
348
+ videoSetupDelay = options.videoSetupDelay,
349
+ joinTimes = options.joinTimes;
333
350
  var payload = {
334
351
  eventId: _uuid.default.v4(),
335
352
  version: 1,
@@ -337,15 +354,15 @@ var Metrics = /*#__PURE__*/function () {
337
354
  audioSetupDelay: audioSetupDelay,
338
355
  videoSetupDelay: videoSetupDelay,
339
356
  name: 'endpoint',
340
- networkType: options.networkType || _config2.UNKNOWN,
357
+ networkType: options.networkType || _config.UNKNOWN,
341
358
  userAgent: this.userAgentToString(),
342
359
  clientInfo: {
343
360
  clientType: options.clientType,
344
361
  // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted
345
- clientVersion: "".concat(_config2.CLIENT_NAME, "/").concat(this.webex.version),
346
- localNetworkPrefix: getLocalNetworkPrefix((_this$webex$meetings$3 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$3 === void 0 ? void 0 : _this$webex$meetings$3.clientAddress),
362
+ clientVersion: "".concat(_config.CLIENT_NAME, "/").concat(this.webex.version),
363
+ localNetworkPrefix: anonymizeIPAddress((_this$webex$meetings$3 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$3 === void 0 ? void 0 : _this$webex$meetings$3.clientAddress),
347
364
  os: this.getOsName(),
348
- osVersion: getOSVersion() || _config2.UNKNOWN,
365
+ osVersion: getOSVersion() || _config.UNKNOWN,
349
366
  subClientType: options.subClientType,
350
367
  browser: getBrowserName(),
351
368
  browserVersion: getBrowserVersion()
@@ -360,14 +377,15 @@ var Metrics = /*#__PURE__*/function () {
360
377
  canProceed: true,
361
378
  identifiers: identifiers,
362
379
  intervals: [options.intervalData],
380
+ joinTimes: joinTimes,
363
381
  eventData: {
364
382
  webClientDomain: _window.default.location.hostname
365
383
  },
366
384
  sourceMetadata: {
367
- applicationSoftwareType: _config2.CLIENT_NAME,
385
+ applicationSoftwareType: _config.CLIENT_NAME,
368
386
  applicationSoftwareVersion: this.webex.version,
369
387
  mediaEngineSoftwareType: getBrowserName() || 'browser',
370
- mediaEngineSoftwareVersion: getOSVersion() || _config2.UNKNOWN,
388
+ mediaEngineSoftwareVersion: getOSVersion() || _config.UNKNOWN,
371
389
  startTime: new Date().toISOString()
372
390
  }
373
391
  }
@@ -391,7 +409,7 @@ var Metrics = /*#__PURE__*/function () {
391
409
  var errorCode;
392
410
 
393
411
  if (err && err.body && err.body.errorCode) {
394
- switch (_config2.errorCodes[err.body.errorCode]) {
412
+ switch (_config.errorCodes[err.body.errorCode]) {
395
413
  case _constants.MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:
396
414
  errorCode = 3007;
397
415
  break;
@@ -521,19 +539,19 @@ var Metrics = /*#__PURE__*/function () {
521
539
  errorCode = 4008;
522
540
  }
523
541
 
524
- return this.generateErrorPayload(errorCode, showToUser, _config2.error.name.LOCUS_RESPONSE, err);
542
+ return this.generateErrorPayload(errorCode, showToUser, _config.error.name.LOCUS_RESPONSE, err);
525
543
  }
526
544
  }, {
527
545
  key: "generateErrorPayload",
528
546
  value: function generateErrorPayload(errorCode, shownToUser, name, err) {
529
- if (_config2.error.errors[errorCode]) {
547
+ if (_config.error.errors[errorCode]) {
530
548
  var errorPayload = {
531
549
  shownToUser: shownToUser || false,
532
- category: _config2.error.errors[errorCode][2],
533
- errorDescription: _config2.error.errors[errorCode][0],
550
+ category: _config.error.errors[errorCode][2],
551
+ errorDescription: _config.error.errors[errorCode][0],
534
552
  errorCode: errorCode,
535
- fatal: !(0, _includes2.default)(_config2.error.notFatalErrorList, errorCode),
536
- name: name || _config2.error.name.OTHER
553
+ fatal: !(0, _includes2.default)(_config.error.notFatalErrorList, errorCode),
554
+ name: name || _config.error.name.OTHER
537
555
  };
538
556
 
539
557
  if (err && err.body) {
@@ -554,10 +572,12 @@ var Metrics = /*#__PURE__*/function () {
554
572
  }, {
555
573
  key: "userAgentToString",
556
574
  value: function userAgentToString() {
575
+ var _this$webex$meetings, _this$webex$meetings$5;
576
+
557
577
  var userAgentOption;
558
578
  var browserInfo;
559
579
 
560
- var clientInfo = _util.default.format('client=%s', "".concat(_config.default.meetings.metrics.clientName));
580
+ var clientInfo = _util.default.format('client=%s', "".concat((_this$webex$meetings = this.webex.meetings) === null || _this$webex$meetings === void 0 ? void 0 : (_this$webex$meetings$5 = _this$webex$meetings.metrics) === null || _this$webex$meetings$5 === void 0 ? void 0 : _this$webex$meetings$5.clientName));
561
581
 
562
582
  if (['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1) {
563
583
  browserInfo = _util.default.format('browser=%s', "".concat(getBrowserName().toLowerCase(), "/").concat(getBrowserVersion().split('.')[0]));
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js"],"names":["OSMap","OS_NAME","chrome","macOS","MAC","Windows","WINDOWS","iOS","IOS","Android","ANDROID","Linux","LINUX","getOSName","getOSVersion","getBrowserName","getBrowserVersion","getLocalNetworkPrefix","localIp","undefined","parts","split","join","triggerTimers","event","meeting","data","eventType","LOCUS_JOIN_RESPONSE","setStartSetupDelay","mediaType","AUDIO","VIDEO","setStartSendingMediaDelay","RECEIVING_MEDIA_START","setEndSetupDelay","SENDING_MEDIA_START","setEndSendingMediaDelay","Metrics","instance","_events","meetingCollection","keys","webex","options","meetingId","indexOf","LoggerProxy","logger","error","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","identifiers","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOsName","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","OTHERS","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","err","showToUser","errorCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","notFatalErrorList","OTHER","errorData","userAgentOption","browserInfo","util","format","StaticConfig","metrics","clientName","toLowerCase","osInfo","process","env","NODE_ENV","metricName","metricFields","metricTags","fields","browser_version","os_version","sdk_version","tags","org_id","credentials","getOrgId","domain","client_id","config","Error","internal","submitClientMetrics","type"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\nimport window from 'global/window';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,\n mediaType\n} from './config';\n\nconst OSMap = {\n 'Chrome OS': OS_NAME.chrome,\n macOS: OS_NAME.MAC,\n Windows: OS_NAME.WINDOWS,\n iOS: OS_NAME.IOS,\n Android: OS_NAME.ANDROID,\n Linux: OS_NAME.LINUX\n};\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IP address\nconst getLocalNetworkPrefix = (localIp) => {\n if (!localIp) {\n return undefined;\n }\n const parts = localIp.split('.');\n\n // eslint-disable-next-line no-bitwise\n parts[3] &= 240;\n\n return parts.join('.');\n};\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n meeting.setStartSendingMediaDelay(mediaType.AUDIO);\n meeting.setStartSendingMediaDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n case eventType.SENDING_MEDIA_START:\n meeting.setEndSendingMediaDelay(data.mediaType);\n break;\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection, webex) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(`Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`);\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n }\n else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n }\n\n else {\n LoggerProxy.logger.info(`Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`);\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n initPayload(eventType, identifiers, options) {\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: this.getOsName(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname}\n }\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n }\n\n return payload;\n }\n\n /**\n * returns metrics friendly OS versions\n * @param {String} osName Os name\n * @returns {String}\n * @private\n * @memberof Metrics\n */\n getOsName() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n initMediaPayload(eventType, identifiers, options = {}) {\n const {audioSetupDelay, videoSetupDelay} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: getLocalNetworkPrefix(this.webex.meetings.geoHintInfo?.clientAddress),\n os: this.getOsName(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n eventData: {webClientDomain: window.location.hostname},\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString()\n }\n }\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err, showToUser) {\n let errorCode;\n\n if (err && err.body && err.body.errorCode) {\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n }\n else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(\n errorCode, showToUser, error.name.LOCUS_RESPONSE, err\n );\n }\n\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${StaticConfig.meetings.metrics.clientName}`);\n\n if (['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1) {\n browserInfo = util.format('browser=%s', `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`);\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption ? `${userAgentOption}; ${clientInfo}; ${osInfo}` : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format('webex-js-sdk/%s %s', `${process.env.NODE_ENV}-${this.webex.version}`, userAgentOption);\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an operational metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an operational metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendOperationalMetric(metricName, metricFields = {}, metricTags = {}) {\n const fields = {\n ...metricFields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version\n };\n\n const tags = {\n ...metricTags,\n browser: getBrowserName(),\n org_id: this.webex.credentials.getOrgId(),\n os: getOSName(),\n domain: window.location.hostname,\n client_id: this.webex.credentials.config.client_id\n };\n\n if (!metricName) {\n throw Error('Missing operational metric name. Please provide one');\n }\n\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: ['operational'],\n fields,\n tags\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"]}
1
+ {"version":3,"sources":["index.js"],"names":["OSMap","OS_NAME","chrome","macOS","MAC","Windows","WINDOWS","iOS","IOS","Android","ANDROID","Linux","LINUX","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","triggerTimers","event","meeting","data","eventType","CALL_INITIATED","setStartCallInitiateJoinReq","LOCUS_JOIN_REQUEST","setEndCallInitiateJoinReq","setStartJoinReqResp","LOCUS_JOIN_RESPONSE","setEndJoinReqResp","setStartSetupDelay","mediaType","AUDIO","VIDEO","setStartSendingMediaDelay","RECEIVING_MEDIA_START","setEndSetupDelay","SENDING_MEDIA_START","setEndSendingMediaDelay","LOCAL_SDP_GENERATED","setStartLocalSDPGenRemoteSDPRecvDelay","REMOTE_SDP_RECEIVED","setEndLocalSDPGenRemoteSDPRecvDelay","Metrics","instance","_events","meetingCollection","keys","webex","options","meetingId","indexOf","LoggerProxy","logger","error","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","identifiers","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOsName","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","OTHERS","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","err","showToUser","errorCode","body","ERROR_CODE","MEETING_ERRORS","FREE_USER_MAX_PARTICIPANTS_EXCEEDED","PAID_USER_MAX_PARTICIPANTS_EXCEEDED","SERVICE_MAX_PARTICIPANTS_EXCEEDED","INACTIVE","EXCEEDED_MAX_JOINED_PARTICIPANTS","EXCEEDED_SERVICE_MAX_PARTICIPANTS","MEETING_IS_LOCKED","MEETING_IS_TERMINATING","MEETING_REQUIRE_MODERATOR_PIN_INTENT","MEETING_REQUIRE_MODERATOR_PIN","MEETING_REQUIRE_MODERATOR_ROLE","JOIN_RESTRICTED_USER","GET_RESTRICTED_USER","CREATE_MEDIA_RESTRICTED_USER","JOIN_RESTRICTED_USER_NOT_IN_ROOM","MEETING_NOT_FOUND","NOT_WEBEX_SITE","INVALID_JOIN_TIME","PHONE_NUMBER_NOT_A_NUMBER","PHONE_NUMBER_TOO_LONG","INVALID_DIALABLE_KEY","ONE_ON_ONE_TO_SELF_NOT_ALLOWED","REMOVED_PARTICIPANT","MEETING_LINK_NOT_FOUND","PHONE_NUMBER_TOO_SHORT_AFTER_IDD","INVALID_INVITEE_ADDRESS","PMR_ACCOUNT_LOCKED","RESOURCE_GUEST_FORBIDDEN","PMR_ACCOUNT_SUSPENDED","EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE","INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST","CONVERSATION_NOT_FOUND","RECORDING_CONTROL_NOT_SUPPORTED","RECORDING_NOT_STARTED","RECORDING_NOT_ENABLED","generateErrorPayload","LOCUS_RESPONSE","shownToUser","errorPayload","category","errorDescription","fatal","notFatalErrorList","OTHER","errorData","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","metricName","metricFields","metricTags","fields","browser_version","os_version","sdk_version","tags","org_id","credentials","getOrgId","domain","client_id","config","Error","internal","submitClientMetrics","type"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport util from 'util';\n\nimport {includes} from 'lodash';\nimport uuid from 'uuid';\nimport window from 'global/window';\nimport anonymize from 'ip-anonymize';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error, eventType, errorCodes as ERROR_CODE, OS_NAME, UNKNOWN, CLIENT_NAME,\n mediaType\n} from './config';\n\nconst OSMap = {\n 'Chrome OS': OS_NAME.chrome,\n macOS: OS_NAME.MAC,\n Windows: OS_NAME.WINDOWS,\n iOS: OS_NAME.IOS,\n Android: OS_NAME.ANDROID,\n Linux: OS_NAME.LINUX\n};\n\nconst {\n getOSName,\n getOSVersion,\n getBrowserName,\n getBrowserVersion\n} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IP address\nconst anonymizeIPAddress = (localIp) => anonymize(localIp);\n\nconst triggerTimers = ({event, meeting, data}) => {\n switch (event) {\n case eventType.CALL_INITIATED:\n meeting.setStartCallInitiateJoinReq();\n break;\n case eventType.LOCUS_JOIN_REQUEST:\n meeting.setEndCallInitiateJoinReq();\n meeting.setStartJoinReqResp();\n break;\n case eventType.LOCUS_JOIN_RESPONSE:\n meeting.setEndJoinReqResp();\n meeting.setStartSetupDelay(mediaType.AUDIO);\n meeting.setStartSetupDelay(mediaType.VIDEO);\n meeting.setStartSendingMediaDelay(mediaType.AUDIO);\n meeting.setStartSendingMediaDelay(mediaType.VIDEO);\n break;\n case eventType.RECEIVING_MEDIA_START:\n meeting.setEndSetupDelay(data.mediaType);\n break;\n case eventType.SENDING_MEDIA_START:\n meeting.setEndSendingMediaDelay(data.mediaType);\n break;\n case eventType.LOCAL_SDP_GENERATED:\n meeting.setStartLocalSDPGenRemoteSDPRecvDelay();\n break;\n case eventType.REMOTE_SDP_RECEIVED:\n meeting.setEndLocalSDPGenRemoteSDPRecvDelay();\n break;\n default:\n break;\n }\n};\n\n/**\n * @description Metrics handles all the call metrics events\n * @export\n * @class Metrics\n */\nclass Metrics {\n /**\n * Create Metrics Object\n * @constructor\n * @public\n * @memberof Meetings\n */\n constructor() {\n if (!Metrics.instance) {\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof Metrics\n */\n this._events = [];\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.meetingCollection = null;\n /**\n * @instance\n * @type {MeetingCollection}\n * @private\n * @memberof Metrics\n */\n this.keys = Object.values(eventType);\n /**\n * @instance\n * @type {Metrics}\n * @private\n * @memberof Metrics\n */\n Metrics.instance = this;\n }\n\n return Metrics.instance;\n }\n\n /**\n * Initializes the Metrics singleton with a meeting Collection.\n *\n * @param {Object} meetingCollection meetings object\n * @param {Object} webex webex SDK object\n *\n * @returns {void}\n */\n initialSetup(meetingCollection, webex) {\n this.meetingCollection = meetingCollection;\n this.webex = webex;\n }\n\n /**\n * poste Meeting event metrics\n * @param {object} options {meetingId/meeting} as a json object\n * @param {Meeting} options.meeting Meeting object\n * @param {String} options.meetingId\n * @param {object} options.data\n * @param {object} options.event\n * @returns {object} null\n */\n postEvent(options) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(`Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`);\n }\n\n if (!meeting && meetingId) {\n meeting = this.meetingCollection.get(meetingId);\n options.meeting = meeting;\n }\n\n if (meeting) {\n triggerTimers(options);\n\n if (!meeting.callEvents) {\n meeting.callEvents = [];\n }\n if (event === eventType.MEDIA_QUALITY) {\n data.event = event;\n meeting.sendMediaQualityAnalyzerMetrics(data);\n }\n else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n }\n\n else {\n LoggerProxy.logger.info(`Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`);\n }\n }\n\n /**\n * Docs for Call analyzer metrics\n * https://sqbu-github.cisco.com/WebExSquared/call-analyzer/wiki\n * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/master/diagnostic-events.raml\n */\n\n initPayload(eventType, identifiers, options) {\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n name: 'endpoint',\n networkType: 'unknown',\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType,\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n osVersion: getOSVersion() || 'unknown',\n subClientType: options.subClientType,\n os: this.getOsName(),\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n eventData: {webClientDomain: window.location.hostname}\n }\n };\n\n // TODO: more options should be checked and some of them should be mandatory in certain conditions\n if (options) {\n if (Object.prototype.hasOwnProperty.call(options, 'canProceed')) {\n payload.event.canProceed = options.canProceed;\n }\n if (options.errors) {\n payload.event.errors = options.errors;\n }\n if (options.mediaType) {\n payload.event.mediaType = options.mediaType;\n }\n if (options.trigger) {\n payload.event.trigger = options.trigger;\n }\n if (options.pstnAudioType) {\n payload.event.pstnAudioType = options.pstnAudioType;\n }\n if (options.mediaCapabilities) {\n payload.event.mediaCapabilities = options.mediaCapabilities;\n }\n if (options.recoveredBy) {\n payload.event.recoveredBy = options.recoveredBy;\n }\n if (options.joinTimes) {\n payload.event.joinTimes = options.joinTimes;\n }\n }\n\n return payload;\n }\n\n /**\n * returns metrics friendly OS versions\n * @param {String} osName Os name\n * @returns {String}\n * @private\n * @memberof Metrics\n */\n getOsName() {\n return OSMap[getOSName()] ?? OS_NAME.OTHERS;\n }\n\n /**\n * get the payload specific for a media quality event through call analyzer\n * @param {String} eventType the event name\n * @param {Object} identifiers contains the identifiers needed for CA\n * @param {String} identifiers.correlationId\n * @param {String} identifiers.locusUrl\n * @param {String} identifiers.locusId\n * @param {Object} options\n * @param {Object} options.intervalData\n * @param {String} options.clientType\n * @returns {Object}\n * @public\n * @memberof Metrics\n */\n initMediaPayload(eventType, identifiers, options = {}) {\n const {audioSetupDelay, videoSetupDelay, joinTimes} = options;\n\n const payload = {\n eventId: uuid.v4(),\n version: 1,\n origin: {\n audioSetupDelay,\n videoSetupDelay,\n name: 'endpoint',\n networkType: options.networkType || UNKNOWN,\n userAgent: this.userAgentToString(),\n clientInfo: {\n clientType: options.clientType, // TODO: Only clientType: 'TEAMS_CLIENT' is whitelisted\n clientVersion: `${CLIENT_NAME}/${this.webex.version}`,\n localNetworkPrefix: anonymizeIPAddress(this.webex.meetings.geoHintInfo?.clientAddress),\n os: this.getOsName(),\n osVersion: getOSVersion() || UNKNOWN,\n subClientType: options.subClientType,\n browser: getBrowserName(),\n browserVersion: getBrowserVersion()\n }\n },\n originTime: {\n triggered: new Date().toISOString()\n },\n senderCountryCode: this.webex.meetings.geoHintInfo?.countryCode,\n event: {\n name: eventType,\n canProceed: true,\n identifiers,\n intervals: [options.intervalData],\n joinTimes,\n eventData: {\n webClientDomain: window.location.hostname\n },\n sourceMetadata: {\n applicationSoftwareType: CLIENT_NAME,\n applicationSoftwareVersion: this.webex.version,\n mediaEngineSoftwareType: getBrowserName() || 'browser',\n mediaEngineSoftwareVersion: getOSVersion() || UNKNOWN,\n startTime: new Date().toISOString()\n }\n }\n };\n\n return payload;\n }\n\n /**\n * This function Parses a Locus error and returns a diagnostic event payload.\n * It should keep updating from:\n * https://sqbu-github.cisco.com/WebExSquared/spark-client-framework/blob/master/spark-client-framework/Adapters/TelephonyAdapter/TelephonyAdapter.cpp#L920\n *\n * @param {Object} err the error Object from Locus response\n * @param {boolean} showToUser true if a toast is shown to user\n * @returns {{showToUser: boolean, category: string, errorDescription: string,\n * errorCode: number, errorData: *, fatal: boolean, name: string}}\n */\n parseLocusError(err, showToUser) {\n let errorCode;\n\n if (err && err.body && err.body.errorCode) {\n switch (ERROR_CODE[err.body.errorCode]) {\n case MEETING_ERRORS.FREE_USER_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3007;\n break;\n case MEETING_ERRORS.PAID_USER_MAX_PARTICIPANTS_EXCEEDED:\n case MEETING_ERRORS.SERVICE_MAX_PARTICIPANTS_EXCEEDED:\n errorCode = 3002;\n break;\n case MEETING_ERRORS.INACTIVE:\n errorCode = 4001;\n break;\n case MEETING_ERRORS.EXCEEDED_MAX_JOINED_PARTICIPANTS:\n case MEETING_ERRORS.EXCEEDED_SERVICE_MAX_PARTICIPANTS:\n errorCode = 3001;\n break;\n case MEETING_ERRORS.MEETING_IS_LOCKED:\n errorCode = 4002;\n break;\n case MEETING_ERRORS.MEETING_IS_TERMINATING:\n errorCode = 4003;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN_INTENT:\n errorCode = 4004;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_PIN:\n errorCode = 4005;\n break;\n case MEETING_ERRORS.MEETING_REQUIRE_MODERATOR_ROLE:\n errorCode = 4006;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER:\n case MEETING_ERRORS.GET_RESTRICTED_USER:\n case MEETING_ERRORS.CREATE_MEDIA_RESTRICTED_USER:\n errorCode = 3005;\n break;\n case MEETING_ERRORS.JOIN_RESTRICTED_USER_NOT_IN_ROOM:\n errorCode = 4007;\n break;\n case MEETING_ERRORS.MEETING_NOT_FOUND:\n errorCode = 4011;\n break;\n case MEETING_ERRORS.NOT_WEBEX_SITE:\n errorCode = 4012;\n break;\n case MEETING_ERRORS.INVALID_JOIN_TIME:\n errorCode = 4013;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_NOT_A_NUMBER:\n errorCode = 4016;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_LONG:\n errorCode = 4017;\n break;\n case MEETING_ERRORS.INVALID_DIALABLE_KEY:\n errorCode = 4018;\n break;\n case MEETING_ERRORS.ONE_ON_ONE_TO_SELF_NOT_ALLOWED:\n errorCode = 4019;\n break;\n case MEETING_ERRORS.REMOVED_PARTICIPANT:\n errorCode = 4020;\n break;\n case MEETING_ERRORS.MEETING_LINK_NOT_FOUND:\n errorCode = 4021;\n break;\n case MEETING_ERRORS.PHONE_NUMBER_TOO_SHORT_AFTER_IDD:\n errorCode = 4022;\n break;\n case MEETING_ERRORS.INVALID_INVITEE_ADDRESS:\n errorCode = 4023;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_LOCKED:\n errorCode = 4024;\n break;\n case MEETING_ERRORS.RESOURCE_GUEST_FORBIDDEN:\n errorCode = 4025;\n break;\n case MEETING_ERRORS.PMR_ACCOUNT_SUSPENDED:\n errorCode = 4026;\n break;\n case MEETING_ERRORS.EMPTY_PHONE_NUMBER_OR_COUNTRY_CODE:\n errorCode = 4027;\n break;\n case MEETING_ERRORS.INVALID_SINCE_OR_SEQUENCE_HASH_IN_REQUEST:\n errorCode = 1006;\n break;\n case MEETING_ERRORS.CONVERSATION_NOT_FOUND:\n errorCode = 4028;\n break;\n case MEETING_ERRORS.RECORDING_CONTROL_NOT_SUPPORTED:\n case MEETING_ERRORS.RECORDING_NOT_STARTED:\n case MEETING_ERRORS.RECORDING_NOT_ENABLED:\n errorCode = 4029;\n break;\n default:\n errorCode = 4008;\n }\n }\n else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(\n errorCode, showToUser, error.name.LOCUS_RESPONSE, err\n );\n }\n\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload = {\n shownToUser: shownToUser || false,\n category: error.errors[errorCode][2],\n errorDescription: error.errors[errorCode][0],\n errorCode,\n fatal: !includes(error.notFatalErrorList, errorCode),\n name: name || error.name.OTHER\n };\n\n if (err && err.body) {\n errorPayload.errorData = err.body;\n }\n\n return errorPayload;\n }\n\n return null;\n }\n\n /**\n * Returns a formated string of the user agent.\n *\n * @returns {string} formatted user agent information\n */\n userAgentToString() {\n let userAgentOption;\n let browserInfo;\n const clientInfo = util.format('client=%s', `${this.webex.meetings?.metrics?.clientName}`);\n\n if (['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !== -1) {\n browserInfo = util.format('browser=%s', `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`);\n }\n const osInfo = util.format('os=%s', `${getOSName()}/${getOSVersion().split('.')[0]}`);\n\n if (browserInfo) {\n userAgentOption = `(${browserInfo}`;\n }\n if (osInfo) {\n userAgentOption = userAgentOption ? `${userAgentOption}; ${clientInfo}; ${osInfo}` : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format('webex-js-sdk/%s %s', `${process.env.NODE_ENV}-${this.webex.version}`, userAgentOption);\n }\n\n return util.format('webex-js-sdk/%s', `${process.env.NODE_ENV}-${this.webex.version}`);\n }\n\n /**\n * Uploads given metric to the Metrics service as an operational metric.\n * Metadata about the environment such as browser, OS, SDK and their versions\n * are automatically added when the metric is sent.\n *\n * The Metrics service will send an operational metric to InfluxDB for\n * aggregation.\n * See https://confluence-eng-gpk2.cisco.com/conf/display/WBXT/Getting+started+with+Metrics+Service.\n *\n * @param {string} metricName Name of the metric (measurement) to send\n * @param {Object} metricFields Key-valye pairs of data or values about this metric\n * @param {Object} metricTags Key-value pairs of metric metadata\n *\n * @returns {void}\n */\n sendOperationalMetric(metricName, metricFields = {}, metricTags = {}) {\n const fields = {\n ...metricFields,\n browser_version: getBrowserVersion(),\n os_version: getOSVersion(),\n sdk_version: this.webex.version\n };\n\n const tags = {\n ...metricTags,\n browser: getBrowserName(),\n org_id: this.webex.credentials.getOrgId(),\n os: getOSName(),\n domain: window.location.hostname,\n client_id: this.webex.credentials.config.client_id\n };\n\n if (!metricName) {\n throw Error('Missing operational metric name. Please provide one');\n }\n\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: ['operational'],\n fields,\n tags\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"]}
@@ -352,7 +352,7 @@ pc.setRemoteSessionDetails = function (peerConnection, typeStr, remoteSdp, meeti
352
352
  type: typeStr,
353
353
  sdp: sdp
354
354
  })).then(function () {
355
- if (!peerConnection.remoteDescription) {
355
+ if (peerConnection.signalingState === _constants.SDP.STABLE) {
356
356
  _metrics.default.postEvent({
357
357
  event: _config2.eventType.REMOTE_SDP_RECEIVED,
358
358
  meetingId: meetingId