@webex/plugin-meetings 2.59.4 → 2.59.6-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/dist/common/browser-detection.js +2 -2
  2. package/dist/common/browser-detection.js.map +1 -1
  3. package/dist/common/collection.js +2 -2
  4. package/dist/common/collection.js.map +1 -1
  5. package/dist/config.js +2 -2
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +0 -2
  8. package/dist/constants.js.map +1 -1
  9. package/dist/controls-options-manager/index.js +2 -2
  10. package/dist/controls-options-manager/index.js.map +1 -1
  11. package/dist/locus-info/controlsUtils.js +6 -6
  12. package/dist/locus-info/controlsUtils.js.map +1 -1
  13. package/dist/locus-info/index.js +18 -18
  14. package/dist/locus-info/index.js.map +1 -1
  15. package/dist/locus-info/parser.js +2 -2
  16. package/dist/locus-info/parser.js.map +1 -1
  17. package/dist/meeting/index.js +28 -51
  18. package/dist/meeting/index.js.map +1 -1
  19. package/dist/meeting/request.js +2 -2
  20. package/dist/meeting/request.js.map +1 -1
  21. package/dist/meeting/util.js +4 -4
  22. package/dist/meeting/util.js.map +1 -1
  23. package/dist/meeting-info/collection.js +2 -2
  24. package/dist/meeting-info/collection.js.map +1 -1
  25. package/dist/meeting-info/meeting-info-v2.js +7 -1
  26. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  27. package/dist/meetings/collection.js +2 -2
  28. package/dist/meetings/collection.js.map +1 -1
  29. package/dist/members/index.js +2 -2
  30. package/dist/members/index.js.map +1 -1
  31. package/dist/metrics/constants.js +0 -2
  32. package/dist/metrics/constants.js.map +1 -1
  33. package/dist/metrics/index.js +2 -2
  34. package/dist/metrics/index.js.map +1 -1
  35. package/dist/reachability/index.js +9 -2
  36. package/dist/reachability/index.js.map +1 -1
  37. package/dist/statsAnalyzer/global.js +12 -4
  38. package/dist/statsAnalyzer/global.js.map +1 -1
  39. package/dist/statsAnalyzer/index.js +14 -56
  40. package/dist/statsAnalyzer/index.js.map +1 -1
  41. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  42. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  43. package/package.json +22 -21
  44. package/src/config.ts +2 -2
  45. package/src/constants.ts +0 -2
  46. package/src/meeting/index.ts +0 -35
  47. package/src/meeting-info/meeting-info-v2.ts +1 -1
  48. package/src/metrics/constants.ts +0 -2
  49. package/src/statsAnalyzer/global.ts +10 -2
  50. package/src/statsAnalyzer/index.ts +17 -80
  51. package/test/unit/spec/meeting/index.js +6 -77
  52. package/test/unit/spec/meeting-info/meetinginfov2.js +1 -1
  53. package/test/unit/spec/stats-analyzer/index.js +0 -151
  54. package/dist/common/browser-detection.d.ts +0 -9
  55. package/dist/common/collection.d.ts +0 -48
  56. package/dist/common/config.d.ts +0 -2
  57. package/dist/common/errors/captcha-error.d.ts +0 -15
  58. package/dist/common/errors/intent-to-join.d.ts +0 -16
  59. package/dist/common/errors/join-meeting.d.ts +0 -17
  60. package/dist/common/errors/media.d.ts +0 -15
  61. package/dist/common/errors/parameter.d.ts +0 -15
  62. package/dist/common/errors/password-error.d.ts +0 -15
  63. package/dist/common/errors/permission.d.ts +0 -14
  64. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  65. package/dist/common/errors/reconnection.d.ts +0 -15
  66. package/dist/common/errors/stats.d.ts +0 -15
  67. package/dist/common/errors/webex-errors.d.ts +0 -81
  68. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  69. package/dist/common/events/events-scope.d.ts +0 -17
  70. package/dist/common/events/events.d.ts +0 -12
  71. package/dist/common/events/trigger-proxy.d.ts +0 -2
  72. package/dist/common/events/util.d.ts +0 -2
  73. package/dist/common/logs/logger-config.d.ts +0 -2
  74. package/dist/common/logs/logger-proxy.d.ts +0 -2
  75. package/dist/common/logs/request.d.ts +0 -34
  76. package/dist/common/queue.d.ts +0 -32
  77. package/dist/config.d.ts +0 -73
  78. package/dist/constants.d.ts +0 -926
  79. package/dist/controls-options-manager/constants.d.ts +0 -4
  80. package/dist/controls-options-manager/enums.d.ts +0 -5
  81. package/dist/controls-options-manager/index.d.ts +0 -120
  82. package/dist/controls-options-manager/util.d.ts +0 -7
  83. package/dist/index.d.ts +0 -4
  84. package/dist/locus-info/controlsUtils.d.ts +0 -2
  85. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  86. package/dist/locus-info/fullState.d.ts +0 -2
  87. package/dist/locus-info/hostUtils.d.ts +0 -2
  88. package/dist/locus-info/index.d.ts +0 -269
  89. package/dist/locus-info/infoUtils.d.ts +0 -2
  90. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  91. package/dist/locus-info/parser.d.ts +0 -212
  92. package/dist/locus-info/selfUtils.d.ts +0 -2
  93. package/dist/media/index.d.ts +0 -32
  94. package/dist/media/properties.d.ts +0 -108
  95. package/dist/media/util.d.ts +0 -2
  96. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  97. package/dist/meeting/effectsState.d.ts +0 -42
  98. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  99. package/dist/meeting/index.d.ts +0 -1621
  100. package/dist/meeting/muteState.d.ts +0 -116
  101. package/dist/meeting/request.d.ts +0 -255
  102. package/dist/meeting/state.d.ts +0 -9
  103. package/dist/meeting/util.d.ts +0 -2
  104. package/dist/meeting-info/collection.d.ts +0 -20
  105. package/dist/meeting-info/index.d.ts +0 -57
  106. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  107. package/dist/meeting-info/request.d.ts +0 -22
  108. package/dist/meeting-info/util.d.ts +0 -2
  109. package/dist/meeting-info/utilv2.d.ts +0 -2
  110. package/dist/meetings/collection.d.ts +0 -23
  111. package/dist/meetings/index.d.ts +0 -296
  112. package/dist/meetings/request.d.ts +0 -27
  113. package/dist/meetings/util.d.ts +0 -18
  114. package/dist/member/index.d.ts +0 -147
  115. package/dist/member/member.types.d.ts +0 -11
  116. package/dist/member/util.d.ts +0 -2
  117. package/dist/members/collection.d.ts +0 -24
  118. package/dist/members/index.d.ts +0 -298
  119. package/dist/members/request.d.ts +0 -50
  120. package/dist/members/util.d.ts +0 -2
  121. package/dist/metrics/config.d.ts +0 -169
  122. package/dist/metrics/constants.d.ts +0 -59
  123. package/dist/metrics/index.d.ts +0 -152
  124. package/dist/networkQualityMonitor/index.d.ts +0 -70
  125. package/dist/peer-connection-manager/index.d.ts +0 -6
  126. package/dist/peer-connection-manager/util.d.ts +0 -6
  127. package/dist/personal-meeting-room/index.d.ts +0 -47
  128. package/dist/personal-meeting-room/request.d.ts +0 -14
  129. package/dist/personal-meeting-room/util.d.ts +0 -2
  130. package/dist/reachability/index.d.ts +0 -139
  131. package/dist/reachability/request.d.ts +0 -35
  132. package/dist/reactions/reactions.d.ts +0 -4
  133. package/dist/reactions/reactions.type.d.ts +0 -32
  134. package/dist/reconnection-manager/index.d.ts +0 -112
  135. package/dist/recording-controller/enums.d.ts +0 -7
  136. package/dist/recording-controller/index.d.ts +0 -193
  137. package/dist/recording-controller/util.d.ts +0 -13
  138. package/dist/roap/collection.d.ts +0 -10
  139. package/dist/roap/handler.d.ts +0 -47
  140. package/dist/roap/index.d.ts +0 -116
  141. package/dist/roap/request.d.ts +0 -35
  142. package/dist/roap/state.d.ts +0 -9
  143. package/dist/roap/turnDiscovery.d.ts +0 -67
  144. package/dist/roap/util.d.ts +0 -2
  145. package/dist/statsAnalyzer/global.d.ts +0 -118
  146. package/dist/statsAnalyzer/index.d.ts +0 -193
  147. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  148. package/dist/transcription/index.d.ts +0 -64
@@ -1 +1 @@
1
- {"version":3,"names":["_util","_interopRequireDefault","require","_uuid","_window","_ipAnonymize","_internalPluginMetrics","_loggerProxy","_constants","_browserDetection","_config","_BrowserDetection","BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","anonymize","triggerTimers","_ref","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","_classCallCheck2","default","_defineProperty2","instance","_events","meetingCollection","keys","_values","_createClass2","key","value","initialSetup","webex","postEvent","options","meetingId","_options$data","indexOf","LoggerProxy","logger","error","concat","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","initPayload","identifiers","_this$webex$meetings$","_this$webex$meetings$2","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOSNameInternal","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","isRoapCallEnabled","initMediaPayload","_this$webex$meetings$3","_this$webex$meetings$4","arguments","length","undefined","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","parseLocusError","err","showToUser","errorCode","statusCode","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","_includes2","notFatalErrorList","OTHER","errorData","httpCode","_this$webex$meetings","_this$webex$meetings$5","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","sendBehavioralMetric","metricName","metricFields","metricTags","internal","submitClientMetrics","type","config","fields","tags","_default","exports"],"sources":["index.ts"],"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';\n// @ts-ignore\nimport window from 'global/window';\nimport anonymize from 'ip-anonymize';\n\n// @ts-ignore\nimport {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error,\n eventType,\n errorCodes as ERROR_CODE,\n UNKNOWN,\n CLIENT_NAME,\n mediaType,\n} from './config';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses\n// For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\nconst anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\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 static instance: Metrics;\n\n _events: any;\n keys: any;\n meetingCollection: any;\n webex: any;\n\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 // eslint-disable-next-line no-constructor-return\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: object, webex: object) {\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: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(\n `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`\n );\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 } else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n } else {\n LoggerProxy.logger.info(\n `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`\n );\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n initPayload(eventType, identifiers, options) {\n const payload: any = {\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: getOSNameInternal(),\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 if (options.isRoapCallEnabled) {\n payload.event.isRoapCallEnabled = options.isRoapCallEnabled;\n }\n }\n\n return payload;\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 public initMediaPayload(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n eventType: string,\n identifiers: {\n correlationId: string;\n locusUrl: string;\n locusId: string;\n },\n options:\n | {\n intervalData: object;\n clientType: string;\n }\n | any = {}\n ) {\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: getOSNameInternal(),\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: any, showToUser: boolean) {\n let errorCode;\n\n if (err && err.statusCode && err.statusCode >= 500) {\n errorCode = 1003;\n } else if (err && err.body && err.body.errorCode) {\n // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties\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 } else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);\n }\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload: any = {\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 if (err && err.statusCode) {\n errorPayload.httpCode = err.statusCode;\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 (\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==\n -1\n ) {\n browserInfo = util.format(\n 'browser=%s',\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\n );\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\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\n : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format(\n 'webex-js-sdk/%s %s',\n `${process.env.NODE_ENV}-${this.webex.version}`,\n userAgentOption\n );\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 Behavioral 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 Behavioral 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 sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_util","_interopRequireDefault","require","_lodash","_uuid","_window","_ipAnonymize","_internalPluginMetrics","_loggerProxy","_constants","_browserDetection","_config","_BrowserDetection","BrowserDetection","getOSName","getOSVersion","getBrowserName","getBrowserVersion","anonymizeIPAddress","localIp","anonymize","triggerTimers","_ref","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","_classCallCheck2","default","_defineProperty2","instance","_events","meetingCollection","keys","_values","_createClass2","key","value","initialSetup","webex","postEvent","options","meetingId","_options$data","indexOf","LoggerProxy","logger","error","concat","get","callEvents","MEDIA_QUALITY","sendMediaQualityAnalyzerMetrics","push","sendCallAnalyzerMetrics","info","initPayload","identifiers","_this$webex$meetings$","_this$webex$meetings$2","payload","eventId","uuid","v4","version","origin","name","networkType","userAgent","userAgentToString","clientInfo","clientType","clientVersion","CLIENT_NAME","localNetworkPrefix","meetings","geoHintInfo","clientAddress","osVersion","subClientType","os","getOSNameInternal","browser","browserVersion","originTime","triggered","Date","toISOString","senderCountryCode","countryCode","canProceed","eventData","webClientDomain","window","location","hostname","Object","prototype","hasOwnProperty","call","errors","trigger","pstnAudioType","mediaCapabilities","recoveredBy","joinTimes","isRoapCallEnabled","initMediaPayload","_this$webex$meetings$3","_this$webex$meetings$4","arguments","length","undefined","audioSetupDelay","videoSetupDelay","UNKNOWN","intervals","intervalData","sourceMetadata","applicationSoftwareType","applicationSoftwareVersion","mediaEngineSoftwareType","mediaEngineSoftwareVersion","startTime","parseLocusError","err","showToUser","errorCode","statusCode","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","includes","notFatalErrorList","OTHER","errorData","httpCode","_this$webex$meetings","_this$webex$meetings$5","userAgentOption","browserInfo","util","format","metrics","clientName","toLowerCase","split","osInfo","process","env","NODE_ENV","sendBehavioralMetric","metricName","metricFields","metricTags","internal","submitClientMetrics","type","config","fields","tags","_default","exports"],"sources":["index.ts"],"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';\n// @ts-ignore\nimport window from 'global/window';\nimport anonymize from 'ip-anonymize';\n\n// @ts-ignore\nimport {getOSNameInternal} from '@webex/internal-plugin-metrics';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEETING_ERRORS} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {\n error,\n eventType,\n errorCodes as ERROR_CODE,\n UNKNOWN,\n CLIENT_NAME,\n mediaType,\n} from './config';\n\nconst {getOSName, getOSVersion, getBrowserName, getBrowserVersion} = BrowserDetection();\n\n// Apply a CIDR /28 format to the IPV4 and /96 to the IPV6 addresses\n// For reference : https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing\nconst anonymizeIPAddress = (localIp) => anonymize(localIp, 28, 96);\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 static instance: Metrics;\n\n _events: any;\n keys: any;\n meetingCollection: any;\n webex: any;\n\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 // eslint-disable-next-line no-constructor-return\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: object, webex: object) {\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: {meeting?: any; meetingId?: string; data?: object; event?: any} | any) {\n const {meetingId, data = {}, event} = options;\n let {meeting} = options;\n\n if (this.keys.indexOf(event) === -1) {\n LoggerProxy.logger.error(\n `Metrics:index#postEvent --> Event ${event} doesn't exist in dictionary`\n );\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 } else {\n meeting.callEvents.push(event);\n data.event = event;\n meeting.sendCallAnalyzerMetrics(data);\n }\n } else {\n LoggerProxy.logger.info(\n `Metrics:index#postEvent --> Event received for meetingId:${meetingId}, but meeting not found in collection.`\n );\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 // eslint-disable-next-line @typescript-eslint/no-shadow\n initPayload(eventType, identifiers, options) {\n const payload: any = {\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: getOSNameInternal(),\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 if (options.isRoapCallEnabled) {\n payload.event.isRoapCallEnabled = options.isRoapCallEnabled;\n }\n }\n\n return payload;\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 public initMediaPayload(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n eventType: string,\n identifiers: {\n correlationId: string;\n locusUrl: string;\n locusId: string;\n },\n options:\n | {\n intervalData: object;\n clientType: string;\n }\n | any = {}\n ) {\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: getOSNameInternal(),\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: any, showToUser: boolean) {\n let errorCode;\n\n if (err && err.statusCode && err.statusCode >= 500) {\n errorCode = 1003;\n } else if (err && err.body && err.body.errorCode) {\n // locus error codes: https://sqbu-github.cisco.com/WebExSquared/locus/blob/master/server/src/main/resources/locus-error-codes.properties\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 } else {\n errorCode = 4008;\n }\n\n return this.generateErrorPayload(errorCode, showToUser, error.name.LOCUS_RESPONSE, err);\n }\n\n generateErrorPayload(errorCode, shownToUser, name, err) {\n if (error.errors[errorCode]) {\n const errorPayload: any = {\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 if (err && err.statusCode) {\n errorPayload.httpCode = err.statusCode;\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 (\n ['chrome', 'firefox', 'msie', 'msedge', 'safari'].indexOf(getBrowserName().toLowerCase()) !==\n -1\n ) {\n browserInfo = util.format(\n 'browser=%s',\n `${getBrowserName().toLowerCase()}/${getBrowserVersion().split('.')[0]}`\n );\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\n ? `${userAgentOption}; ${clientInfo}; ${osInfo}`\n : `${clientInfo}; (${osInfo}`;\n }\n if (userAgentOption) {\n userAgentOption += ')';\n\n return util.format(\n 'webex-js-sdk/%s %s',\n `${process.env.NODE_ENV}-${this.webex.version}`,\n userAgentOption\n );\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 Behavioral 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 Behavioral 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 sendBehavioralMetric(metricName: string, metricFields: object = {}, metricTags: object = {}) {\n this.webex.internal.metrics.submitClientMetrics(metricName, {\n type: this.webex.config.metrics.type,\n fields: metricFields,\n tags: metricTags,\n });\n }\n}\n\n// Export Metrics singleton ---------------------------------------------------\nconst instance = new Metrics();\n\nexport default instance;\n"],"mappings":"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"}
@@ -17,10 +17,17 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/
17
17
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
19
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
20
- var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
20
+ var _lodash = _interopRequireDefault(require("lodash"));
21
21
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
22
22
  var _constants = require("../constants");
23
23
  var _request = _interopRequireDefault(require("./request"));
24
+ /*!
25
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
26
+ */
27
+
28
+ /* eslint-disable class-methods-use-this */
29
+ /* globals window */
30
+
24
31
  var DEFAULT_TIMEOUT = 3000;
25
32
  var VIDEO_MESH_TIMEOUT = 1000;
26
33
 
@@ -153,7 +160,7 @@ var Reachability = /*#__PURE__*/function () {
153
160
  }, {
154
161
  key: "buildPeerConnectionConfig",
155
162
  value: function buildPeerConnectionConfig(cluster) {
156
- var iceServers = (0, _uniq2.default)([].concat((0, _toConsumableArray2.default)(cluster.udp), (0, _toConsumableArray2.default)(cluster.tcp))).map(function (url) {
163
+ var iceServers = _lodash.default.uniq([].concat((0, _toConsumableArray2.default)(cluster.udp), (0, _toConsumableArray2.default)(cluster.tcp))).map(function (url) {
157
164
  return {
158
165
  username: '',
159
166
  credential: '',
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_request","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","Reachability","webex","_classCallCheck2","default","_defineProperty2","reachabilityRequest","ReachabilityRequest","clusterLatencyResults","_createClass2","key","value","_gatherReachability","_asyncToGenerator2","_regenerator","mark","_callee","_window","_window$localStorage","clusters","results","wrap","_callee$","_context","prev","next","setup","window","localStorage","removeItem","REACHABILITY","LoggerProxy","logger","error","abrupt","getClusters","sent","performReachabilityCheck","setItem","_stringify","log","t0","concat","stop","gatherReachability","apply","arguments","isAnyClusterReachable","reachable","reachabilityData","getItem","reachabilityResults","JSON","parse","_values","some","result","_result$udp","_result$tcp","udp","tcp","e","buildPeerConnectionConfig","cluster","iceServers","_uniq2","_toConsumableArray2","map","url","username","credential","urls","iceCandidatePoolSize","iceTransportPolicy","createPeerConnection","config","peerConnection","RTCPeerConnection","peerConnectionError","getElapsedTime","startTime","begin","_now","getLocalSDPForClusters","clusterList","_this","_keys","_ref","_callee2","description","_callee2$","_context2","createOffer","offerToReceiveAudio","setLocalDescription","iceGatheringState","isVideoMesh","catch","iceGatheringStateError","_x","_promise","all","then","parseIceResultsToReachabilityResults","reachabilityLatencyResults","logUnreachableClusters","getUnreachablClusters","unreachableList","forEach","unreachable","push","handleIceGatheringStateChange","_this2","onicegatheringstatechange","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","elapsed","setLatencyAndClose","handleOnIceCandidate","_this3","onicecandidate","SERVER_REFLEXIVE","candidate","String","type","toLowerCase","timeout","_this4","ELAPSED","resolve","peerConnectionProxy","Proxy","get","target","property","targetMember","bind","set","clusterId","Reflect","setTimeout","CLOSED","CONNECTION_STATE","connectionState","list","iceResults","reachabilityMap","_ref2","latencyResult","latencyInMilliseconds","toString","_this5","length","localSDPData","_intialState","REACHABLE","UNREACHABLE","resultKey","intialState","close","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\n/* globals window */\nimport _ from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';\n\nimport ReachabilityRequest from './request';\n\nconst DEFAULT_TIMEOUT = 3000;\nconst VIDEO_MESH_TIMEOUT = 1000;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability {\n webex: object;\n reachabilityRequest: any;\n clusterLatencyResults: any;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n /**\n * internal object of clusters latency results\n * @instance\n * @type {object}\n * @private\n * @memberof Reachability\n */\n this.clusterLatencyResults = {};\n }\n\n /**\n * fetches reachability data\n * @returns {Object} reachability data\n * @public\n * @async\n * @memberof Reachability\n */\n public async gatherReachability() {\n this.setup();\n\n // Remove stored reachability results to ensure no stale data\n if (window?.localStorage?.removeItem) {\n window.localStorage.removeItem(REACHABILITY.localStorage);\n } else {\n LoggerProxy.logger.error(\n 'Reachability:index#gatherReachability --> Error in accessing LocalStorage.'\n );\n\n return {};\n }\n\n // Fetch clusters and measure latency\n try {\n const clusters = await this.reachabilityRequest.getClusters();\n\n // Perform Reachability Check\n const results = await this.performReachabilityCheck(clusters);\n\n window.localStorage.setItem(REACHABILITY.localStorage, JSON.stringify(results));\n\n LoggerProxy.logger.log(\n 'Reachability:index#gatherReachability --> Reachability checks completed'\n );\n\n return results;\n } catch (getClusterError) {\n LoggerProxy.logger.error(\n `Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`\n );\n\n return {};\n }\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n isAnyClusterReachable() {\n let reachable = false;\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Generate peerConnection config settings\n * @param {object} cluster\n * @returns {object} peerConnectionConfig\n * @private\n * @memberof Reachability\n */\n private buildPeerConnectionConfig(cluster: any) {\n const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n return {\n iceServers: [...iceServers],\n iceCandidatePoolSize: '0',\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {object} cluster\n * @returns {RTCPeerConnection} peerConnection\n * @private\n * @memberof Reachability\n */\n private createPeerConnection(cluster: any) {\n const {key, config} = cluster;\n\n try {\n const peerConnection = new window.RTCPeerConnection(config);\n\n // @ts-ignore\n peerConnection.key = key;\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.log(\n `Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`\n );\n\n return null;\n }\n }\n\n /**\n * Gets total elapsed time\n * @param {RTCPeerConnection} peerConnection\n * @returns {Number} Milliseconds\n * @private\n * @memberof Reachability\n */\n private getElapsedTime(peerConnection: any) {\n const startTime = peerConnection.begin;\n\n delete peerConnection.begin;\n\n return Date.now() - startTime;\n }\n\n /**\n * creates offer and generates localSDP\n * @param {object} clusterList cluster List\n * @returns {Promise} Reachability latency results\n * @private\n * @memberof Reachability\n */\n private getLocalSDPForClusters(clusterList: object) {\n let clusters: any[] = [...Object.keys(clusterList)];\n\n clusters = clusters.map(async (key) => {\n const cluster = clusterList[key];\n const config = this.buildPeerConnectionConfig(cluster);\n const peerConnection = this.createPeerConnection({key, config});\n const description = await peerConnection.createOffer({offerToReceiveAudio: true});\n\n // @ts-ignore\n peerConnection.begin = Date.now();\n peerConnection.setLocalDescription(description);\n\n return this.iceGatheringState(\n peerConnection,\n cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT\n ).catch((iceGatheringStateError) => {\n LoggerProxy.logger.log(\n `Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`\n );\n });\n });\n\n return Promise.all(clusters)\n .then(this.parseIceResultsToReachabilityResults)\n .then((reachabilityLatencyResults) => {\n this.logUnreachableClusters();\n\n // return results\n return reachabilityLatencyResults;\n });\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachablClusters() {\n const unreachableList = [];\n const clusters = this.clusterLatencyResults;\n\n Object.keys(clusters).forEach((key) => {\n const cluster = clusters[key];\n\n if (cluster.unreachable && !cluster.reachable) {\n unreachableList.push(key);\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Attach an event handler for the icegatheringstatechange\n * event and measure latency.\n * @param {RTCPeerConnection} peerConnection\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private handleIceGatheringStateChange(peerConnection: RTCPeerConnection) {\n peerConnection.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (peerConnection.iceConnectionState === COMPLETE) {\n const elapsed = this.getElapsedTime(peerConnection);\n\n // @ts-ignore\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,\n elapsed\n );\n this.setLatencyAndClose(peerConnection, elapsed);\n }\n };\n }\n\n /**\n * Attach an event handler for the icecandidate\n * event and measure latency.\n * @param {RTCPeerConnection} peerConnection\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private handleOnIceCandidate(peerConnection: RTCPeerConnection) {\n peerConnection.onicecandidate = (e) => {\n const SERVER_REFLEXIVE = 'srflx';\n\n if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {\n const elapsed = this.getElapsedTime(peerConnection);\n\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,\n elapsed\n );\n this.setLatencyAndClose(peerConnection, elapsed);\n }\n };\n }\n\n /**\n * An event handler on an RTCPeerConnection when the state of the ICE\n * candidate gathering process changes. Used to measure connection\n * speed.\n * @private\n * @param {RTCPeerConnection} peerConnection\n * @param {number} timeout\n * @returns {Promise}\n */\n private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {\n const ELAPSED = 'elapsed';\n\n return new Promise((resolve) => {\n const peerConnectionProxy = new window.Proxy(peerConnection, {\n get(target, property) {\n const targetMember = target[property];\n\n if (typeof targetMember === 'function') {\n return targetMember.bind(target);\n }\n\n return targetMember;\n },\n set: (target, property, value) => {\n // only intercept elapsed property\n if (property === ELAPSED) {\n // @ts-ignore\n resolve({clusterId: peerConnection.key, elapsed: value});\n\n return true;\n }\n\n // pass thru\n return window.Reflect.set(target, property, value);\n },\n });\n\n // Using peerConnection proxy so handle functions below\n // won't be coupled to our promise implementation\n this.handleIceGatheringStateChange(peerConnectionProxy);\n this.handleOnIceCandidate(peerConnectionProxy);\n\n // Set maximum timeout\n window.setTimeout(() => {\n const {CLOSED} = CONNECTION_STATE;\n\n // Close any open peerConnections\n if (peerConnectionProxy.connectionState !== CLOSED) {\n this.setLatencyAndClose(peerConnectionProxy, null);\n }\n }, timeout);\n });\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachablClusters();\n\n list.forEach((cluster) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`\n );\n });\n }\n\n /**\n * Calculates time to establish connection\n * @param {array} iceResults iceResults\n * @returns {object} reachabilityMap\n * @private\n * @memberof Reachability\n */\n private parseIceResultsToReachabilityResults(iceResults: Array<any>) {\n const reachabilityMap = {};\n\n iceResults.forEach(({clusterId, elapsed}) => {\n let latencyResult;\n\n if (elapsed === null) {\n latencyResult = {reachable: 'false'};\n } else {\n latencyResult = {\n reachable: 'true',\n latencyInMilliseconds: elapsed.toString(),\n };\n }\n\n reachabilityMap[clusterId] = {\n udp: latencyResult,\n tcp: latencyResult,\n };\n });\n\n return reachabilityMap;\n }\n\n /**\n * fetches reachability data\n * @param {object} clusterList\n * @returns {Promise<localSDPData>} reachability check results\n * @private\n * @memberof Reachability\n */\n private performReachabilityCheck(clusterList: object) {\n if (!clusterList || !Object.keys(clusterList).length) {\n return Promise.resolve({});\n }\n\n return new Promise((resolve) => {\n this.getLocalSDPForClusters(clusterList)\n .then((localSDPData) => {\n if (!localSDPData || !Object.keys(localSDPData).length) {\n // TODO: handle the error condition properly and try retry\n LoggerProxy.logger.log(\n 'Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning'\n );\n resolve({});\n } else {\n resolve(localSDPData);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`\n );\n resolve({});\n });\n });\n }\n\n /**\n * Records latency and closes the peerConnection\n * @param {RTCPeerConnection} peerConnection\n * @param {number} elapsed Latency in milliseconds\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private setLatencyAndClose(peerConnection: RTCPeerConnection, elapsed: number) {\n const REACHABLE = 'reachable';\n const UNREACHABLE = 'unreachable';\n const {CLOSED} = CONNECTION_STATE;\n // @ts-ignore\n const {key} = peerConnection;\n const resultKey = elapsed === null ? UNREACHABLE : REACHABLE;\n const intialState = {[REACHABLE]: 0, [UNREACHABLE]: 0};\n\n if (peerConnection.connectionState === CLOSED) {\n LoggerProxy.logger.log(\n `Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`\n );\n\n return;\n }\n\n this.clusterLatencyResults[key] = this.clusterLatencyResults[key] || intialState;\n this.clusterLatencyResults[key][resultKey] += 1;\n\n // Set to null in case this fired from\n // an event other than onIceCandidate\n peerConnection.onicecandidate = null;\n peerConnection.close();\n // @ts-ignore\n peerConnection.elapsed = elapsed;\n }\n\n /**\n * utility function\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private setup() {\n this.clusterLatencyResults = {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_lodash","_interopRequireDefault","require","_loggerProxy","_constants","_request","DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","Reachability","webex","_classCallCheck2","default","_defineProperty2","reachabilityRequest","ReachabilityRequest","clusterLatencyResults","_createClass2","key","value","_gatherReachability","_asyncToGenerator2","_regenerator","mark","_callee","_window","_window$localStorage","clusters","results","wrap","_callee$","_context","prev","next","setup","window","localStorage","removeItem","REACHABILITY","LoggerProxy","logger","error","abrupt","getClusters","sent","performReachabilityCheck","setItem","_stringify","log","t0","concat","stop","gatherReachability","apply","arguments","isAnyClusterReachable","reachable","reachabilityData","getItem","reachabilityResults","JSON","parse","_values","some","result","_result$udp","_result$tcp","udp","tcp","e","buildPeerConnectionConfig","cluster","iceServers","_","uniq","_toConsumableArray2","map","url","username","credential","urls","iceCandidatePoolSize","iceTransportPolicy","createPeerConnection","config","peerConnection","RTCPeerConnection","peerConnectionError","getElapsedTime","startTime","begin","_now","getLocalSDPForClusters","clusterList","_this","_keys","_ref","_callee2","description","_callee2$","_context2","createOffer","offerToReceiveAudio","setLocalDescription","iceGatheringState","isVideoMesh","catch","iceGatheringStateError","_x","_promise","all","then","parseIceResultsToReachabilityResults","reachabilityLatencyResults","logUnreachableClusters","getUnreachablClusters","unreachableList","forEach","unreachable","push","handleIceGatheringStateChange","_this2","onicegatheringstatechange","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","elapsed","setLatencyAndClose","handleOnIceCandidate","_this3","onicecandidate","SERVER_REFLEXIVE","candidate","String","type","toLowerCase","timeout","_this4","ELAPSED","resolve","peerConnectionProxy","Proxy","get","target","property","targetMember","bind","set","clusterId","Reflect","setTimeout","CLOSED","CONNECTION_STATE","connectionState","list","iceResults","reachabilityMap","_ref2","latencyResult","latencyInMilliseconds","toString","_this5","length","localSDPData","_intialState","REACHABLE","UNREACHABLE","resultKey","intialState","close","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable class-methods-use-this */\n/* globals window */\nimport _ from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ICE_GATHERING_STATE, CONNECTION_STATE, REACHABILITY} from '../constants';\n\nimport ReachabilityRequest from './request';\n\nconst DEFAULT_TIMEOUT = 3000;\nconst VIDEO_MESH_TIMEOUT = 1000;\n\n/**\n * @class Reachability\n * @export\n */\nexport default class Reachability {\n webex: object;\n reachabilityRequest: any;\n clusterLatencyResults: any;\n\n /**\n * Creates an instance of Reachability.\n * @param {object} webex\n * @memberof Reachability\n */\n constructor(webex: object) {\n this.webex = webex;\n\n /**\n * internal request object for the server\n * @instance\n * @type {Array}\n * @private\n * @memberof Reachability\n */\n this.reachabilityRequest = new ReachabilityRequest(this.webex);\n\n /**\n * internal object of clusters latency results\n * @instance\n * @type {object}\n * @private\n * @memberof Reachability\n */\n this.clusterLatencyResults = {};\n }\n\n /**\n * fetches reachability data\n * @returns {Object} reachability data\n * @public\n * @async\n * @memberof Reachability\n */\n public async gatherReachability() {\n this.setup();\n\n // Remove stored reachability results to ensure no stale data\n if (window?.localStorage?.removeItem) {\n window.localStorage.removeItem(REACHABILITY.localStorage);\n } else {\n LoggerProxy.logger.error(\n 'Reachability:index#gatherReachability --> Error in accessing LocalStorage.'\n );\n\n return {};\n }\n\n // Fetch clusters and measure latency\n try {\n const clusters = await this.reachabilityRequest.getClusters();\n\n // Perform Reachability Check\n const results = await this.performReachabilityCheck(clusters);\n\n window.localStorage.setItem(REACHABILITY.localStorage, JSON.stringify(results));\n\n LoggerProxy.logger.log(\n 'Reachability:index#gatherReachability --> Reachability checks completed'\n );\n\n return results;\n } catch (getClusterError) {\n LoggerProxy.logger.error(\n `Reachability:index#gatherReachability --> Error in calling getClusters(): ${getClusterError}`\n );\n\n return {};\n }\n }\n\n /**\n * fetches reachability data and checks for cluster reachability\n * @returns {boolean}\n * @public\n * @memberof Reachability\n */\n isAnyClusterReachable() {\n let reachable = false;\n const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);\n\n if (reachabilityData) {\n try {\n const reachabilityResults = JSON.parse(reachabilityData);\n\n reachable = Object.values(reachabilityResults).some(\n (result: any) => result.udp?.reachable === 'true' || result.tcp?.reachable === 'true'\n );\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n return reachable;\n }\n\n /**\n * Generate peerConnection config settings\n * @param {object} cluster\n * @returns {object} peerConnectionConfig\n * @private\n * @memberof Reachability\n */\n private buildPeerConnectionConfig(cluster: any) {\n const iceServers = _.uniq([...cluster.udp, ...cluster.tcp]).map((url) => ({\n username: '',\n credential: '',\n urls: [url],\n }));\n\n return {\n iceServers: [...iceServers],\n iceCandidatePoolSize: '0',\n iceTransportPolicy: 'all',\n };\n }\n\n /**\n * Creates an RTCPeerConnection\n * @param {object} cluster\n * @returns {RTCPeerConnection} peerConnection\n * @private\n * @memberof Reachability\n */\n private createPeerConnection(cluster: any) {\n const {key, config} = cluster;\n\n try {\n const peerConnection = new window.RTCPeerConnection(config);\n\n // @ts-ignore\n peerConnection.key = key;\n\n return peerConnection;\n } catch (peerConnectionError) {\n LoggerProxy.logger.log(\n `Reachability:index#createPeerConnection --> Error creating peerConnection: ${peerConnectionError}`\n );\n\n return null;\n }\n }\n\n /**\n * Gets total elapsed time\n * @param {RTCPeerConnection} peerConnection\n * @returns {Number} Milliseconds\n * @private\n * @memberof Reachability\n */\n private getElapsedTime(peerConnection: any) {\n const startTime = peerConnection.begin;\n\n delete peerConnection.begin;\n\n return Date.now() - startTime;\n }\n\n /**\n * creates offer and generates localSDP\n * @param {object} clusterList cluster List\n * @returns {Promise} Reachability latency results\n * @private\n * @memberof Reachability\n */\n private getLocalSDPForClusters(clusterList: object) {\n let clusters: any[] = [...Object.keys(clusterList)];\n\n clusters = clusters.map(async (key) => {\n const cluster = clusterList[key];\n const config = this.buildPeerConnectionConfig(cluster);\n const peerConnection = this.createPeerConnection({key, config});\n const description = await peerConnection.createOffer({offerToReceiveAudio: true});\n\n // @ts-ignore\n peerConnection.begin = Date.now();\n peerConnection.setLocalDescription(description);\n\n return this.iceGatheringState(\n peerConnection,\n cluster.isVideoMesh ? VIDEO_MESH_TIMEOUT : DEFAULT_TIMEOUT\n ).catch((iceGatheringStateError) => {\n LoggerProxy.logger.log(\n `Reachability:index#getLocalSDPForClusters --> Error in getLocalSDP : ${iceGatheringStateError}`\n );\n });\n });\n\n return Promise.all(clusters)\n .then(this.parseIceResultsToReachabilityResults)\n .then((reachabilityLatencyResults) => {\n this.logUnreachableClusters();\n\n // return results\n return reachabilityLatencyResults;\n });\n }\n\n /**\n * Get list of all unreachable clusters\n * @returns {array} Unreachable clusters\n * @private\n * @memberof Reachability\n */\n private getUnreachablClusters() {\n const unreachableList = [];\n const clusters = this.clusterLatencyResults;\n\n Object.keys(clusters).forEach((key) => {\n const cluster = clusters[key];\n\n if (cluster.unreachable && !cluster.reachable) {\n unreachableList.push(key);\n }\n });\n\n return unreachableList;\n }\n\n /**\n * Attach an event handler for the icegatheringstatechange\n * event and measure latency.\n * @param {RTCPeerConnection} peerConnection\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private handleIceGatheringStateChange(peerConnection: RTCPeerConnection) {\n peerConnection.onicegatheringstatechange = () => {\n const {COMPLETE} = ICE_GATHERING_STATE;\n\n if (peerConnection.iceConnectionState === COMPLETE) {\n const elapsed = this.getElapsedTime(peerConnection);\n\n // @ts-ignore\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#onIceGatheringStateChange --> Successfully pinged ${peerConnection.key}:`,\n elapsed\n );\n this.setLatencyAndClose(peerConnection, elapsed);\n }\n };\n }\n\n /**\n * Attach an event handler for the icecandidate\n * event and measure latency.\n * @param {RTCPeerConnection} peerConnection\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private handleOnIceCandidate(peerConnection: RTCPeerConnection) {\n peerConnection.onicecandidate = (e) => {\n const SERVER_REFLEXIVE = 'srflx';\n\n if (e.candidate && String(e.candidate.type).toLowerCase() === SERVER_REFLEXIVE) {\n const elapsed = this.getElapsedTime(peerConnection);\n\n LoggerProxy.logger.log(\n // @ts-ignore\n `Reachability:index#onIceCandidate --> Successfully pinged ${peerConnection.key}:`,\n elapsed\n );\n this.setLatencyAndClose(peerConnection, elapsed);\n }\n };\n }\n\n /**\n * An event handler on an RTCPeerConnection when the state of the ICE\n * candidate gathering process changes. Used to measure connection\n * speed.\n * @private\n * @param {RTCPeerConnection} peerConnection\n * @param {number} timeout\n * @returns {Promise}\n */\n private iceGatheringState(peerConnection: RTCPeerConnection, timeout: number) {\n const ELAPSED = 'elapsed';\n\n return new Promise((resolve) => {\n const peerConnectionProxy = new window.Proxy(peerConnection, {\n get(target, property) {\n const targetMember = target[property];\n\n if (typeof targetMember === 'function') {\n return targetMember.bind(target);\n }\n\n return targetMember;\n },\n set: (target, property, value) => {\n // only intercept elapsed property\n if (property === ELAPSED) {\n // @ts-ignore\n resolve({clusterId: peerConnection.key, elapsed: value});\n\n return true;\n }\n\n // pass thru\n return window.Reflect.set(target, property, value);\n },\n });\n\n // Using peerConnection proxy so handle functions below\n // won't be coupled to our promise implementation\n this.handleIceGatheringStateChange(peerConnectionProxy);\n this.handleOnIceCandidate(peerConnectionProxy);\n\n // Set maximum timeout\n window.setTimeout(() => {\n const {CLOSED} = CONNECTION_STATE;\n\n // Close any open peerConnections\n if (peerConnectionProxy.connectionState !== CLOSED) {\n this.setLatencyAndClose(peerConnectionProxy, null);\n }\n }, timeout);\n });\n }\n\n /**\n * Make a log of unreachable clusters.\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private logUnreachableClusters() {\n const list = this.getUnreachablClusters();\n\n list.forEach((cluster) => {\n LoggerProxy.logger.log(\n `Reachability:index#logUnreachableClusters --> No ice candidate for ${cluster}.`\n );\n });\n }\n\n /**\n * Calculates time to establish connection\n * @param {array} iceResults iceResults\n * @returns {object} reachabilityMap\n * @private\n * @memberof Reachability\n */\n private parseIceResultsToReachabilityResults(iceResults: Array<any>) {\n const reachabilityMap = {};\n\n iceResults.forEach(({clusterId, elapsed}) => {\n let latencyResult;\n\n if (elapsed === null) {\n latencyResult = {reachable: 'false'};\n } else {\n latencyResult = {\n reachable: 'true',\n latencyInMilliseconds: elapsed.toString(),\n };\n }\n\n reachabilityMap[clusterId] = {\n udp: latencyResult,\n tcp: latencyResult,\n };\n });\n\n return reachabilityMap;\n }\n\n /**\n * fetches reachability data\n * @param {object} clusterList\n * @returns {Promise<localSDPData>} reachability check results\n * @private\n * @memberof Reachability\n */\n private performReachabilityCheck(clusterList: object) {\n if (!clusterList || !Object.keys(clusterList).length) {\n return Promise.resolve({});\n }\n\n return new Promise((resolve) => {\n this.getLocalSDPForClusters(clusterList)\n .then((localSDPData) => {\n if (!localSDPData || !Object.keys(localSDPData).length) {\n // TODO: handle the error condition properly and try retry\n LoggerProxy.logger.log(\n 'Reachability:index#performReachabilityCheck --> Local SDP is empty or has missing elements..returning'\n );\n resolve({});\n } else {\n resolve(localSDPData);\n }\n })\n .catch((error) => {\n LoggerProxy.logger.error(\n `Reachability:index#performReachabilityCheck --> Error in getLocalSDPForClusters: ${error}`\n );\n resolve({});\n });\n });\n }\n\n /**\n * Records latency and closes the peerConnection\n * @param {RTCPeerConnection} peerConnection\n * @param {number} elapsed Latency in milliseconds\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private setLatencyAndClose(peerConnection: RTCPeerConnection, elapsed: number) {\n const REACHABLE = 'reachable';\n const UNREACHABLE = 'unreachable';\n const {CLOSED} = CONNECTION_STATE;\n // @ts-ignore\n const {key} = peerConnection;\n const resultKey = elapsed === null ? UNREACHABLE : REACHABLE;\n const intialState = {[REACHABLE]: 0, [UNREACHABLE]: 0};\n\n if (peerConnection.connectionState === CLOSED) {\n LoggerProxy.logger.log(\n `Reachability:index#setLatencyAndClose --> Attempting to set latency of ${elapsed} on closed peerConnection.`\n );\n\n return;\n }\n\n this.clusterLatencyResults[key] = this.clusterLatencyResults[key] || intialState;\n this.clusterLatencyResults[key][resultKey] += 1;\n\n // Set to null in case this fired from\n // an event other than onIceCandidate\n peerConnection.onicecandidate = null;\n peerConnection.close();\n // @ts-ignore\n peerConnection.elapsed = elapsed;\n }\n\n /**\n * utility function\n * @returns {undefined}\n * @private\n * @memberof Reachability\n */\n private setup() {\n this.clusterLatencyResults = {};\n }\n}\n"],"mappings":"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"}
@@ -82,11 +82,20 @@ var STATS_DEFAULT = {
82
82
  }
83
83
  },
84
84
  resolutions: {
85
+ audio: {
86
+ send: {
87
+ width: 0,
88
+ height: 0
89
+ },
90
+ recv: {
91
+ width: 0,
92
+ height: 0
93
+ }
94
+ },
85
95
  video: {
86
96
  send: {
87
97
  width: 0,
88
- height: 0,
89
- framesSent: 0
98
+ height: 0
90
99
  },
91
100
  recv: {
92
101
  width: 0,
@@ -96,8 +105,7 @@ var STATS_DEFAULT = {
96
105
  share: {
97
106
  send: {
98
107
  width: 0,
99
- height: 0,
100
- framesSent: 0
108
+ height: 0
101
109
  },
102
110
  recv: {
103
111
  width: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","framesSent","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n video: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
1
+ {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n audio: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n video: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
@@ -16,7 +16,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
16
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
17
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
18
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
- var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
19
+ var _lodash = require("lodash");
20
20
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
21
  var _constants = require("../constants");
22
22
  var _config = _interopRequireDefault(require("../mediaQualityMetrics/config"));
@@ -27,8 +27,6 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
27
27
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
28
28
  var EVENTS = {
29
29
  MEDIA_QUALITY: 'MEDIA_QUALITY',
30
- NO_FRAMES_SENT: 'NO_FRAMES_SENT',
31
- NO_VIDEO_ENCODED: 'NO_VIDEO_ENCODED',
32
30
  LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
33
31
  LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',
34
32
  REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
@@ -101,7 +99,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
101
99
  var newEvent;
102
100
  if (currentValue - previousValue > 0) {
103
101
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
104
- } else if (currentValue === previousValue && currentValue >= 0) {
102
+ } else if (currentValue === previousValue && currentValue > 0) {
105
103
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
106
104
  }
107
105
  if (newEvent && lastEmittedEvent !== newEvent) {
@@ -414,7 +412,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
414
412
  _config.default.intervals[0].intervalNumber = this.mqaSentCount;
415
413
 
416
414
  // DO Deep copy, for some reason it takes the reference all the time rather then old value set
417
- this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
415
+ this.lastMqaDataSent = (0, _lodash.cloneDeep)(this.statsResults);
418
416
  this.populateResults(_config.default.intervals[0]);
419
417
  this.resetStatsResults();
420
418
  this.emit({
@@ -522,6 +520,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
522
520
  case 'inbound-rtp':
523
521
  this.processInboundRTPResult(getStatsResult, type);
524
522
  break;
523
+ case 'track':
524
+ this.processTrackResult(getStatsResult, type);
525
+ break;
525
526
  case 'remote-inbound-rtp':
526
527
  case 'remote-outbound-rtp':
527
528
  // @ts-ignore
@@ -629,32 +630,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
629
630
  previousStats = this.lastStatsResults[mediaType].send;
630
631
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
631
632
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
632
- } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
633
+ } else {
633
634
  if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
634
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
635
635
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames Encoded"));
636
- this.emit({
637
- file: 'statsAnalyzer',
638
- function: 'compareLastStatsResult'
639
- }, EVENTS.NO_VIDEO_ENCODED, {
640
- mediaType: mediaType
641
- });
642
636
  }
643
637
  if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
644
638
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
645
639
  }
646
-
647
- // Video is encoded but frames are not sent
648
- if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
649
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
650
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent even though frames are encoded"));
651
- this.emit({
652
- file: 'statsAnalyzer',
653
- function: 'compareLastStatsResult'
654
- }, EVENTS.NO_FRAMES_SENT, {
655
- mediaType: mediaType
656
- });
657
- }
658
640
  }
659
641
  this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
660
642
  }
@@ -686,32 +668,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
686
668
  previousStats = this.lastStatsResults[mediaType].send;
687
669
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
688
670
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
689
- } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
671
+ } else {
690
672
  if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
691
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
692
673
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames getting encoded"));
693
- this.emit({
694
- file: 'statsAnalyzer',
695
- function: 'compareLastStatsResult'
696
- }, EVENTS.NO_VIDEO_ENCODED, {
697
- mediaType: mediaType
698
- });
699
674
  }
700
675
  if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
701
676
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
702
677
  }
703
-
704
- // Share video is encoded but frames are not sent
705
- if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
706
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
707
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent even though frames are being encoded"));
708
- this.emit({
709
- file: 'statsAnalyzer',
710
- function: 'compareLastStatsResult'
711
- }, EVENTS.NO_FRAMES_SENT, {
712
- mediaType: mediaType
713
- });
714
- }
715
678
  }
716
679
 
717
680
  // TODO:need to check receive share value
@@ -798,7 +761,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
798
761
  value: function processOutboundRTPResult(result, type) {
799
762
  var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
800
763
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
801
- this.processTrackResult(result, type, sendrecvType);
802
764
  if (result.bytesSent) {
803
765
  var kilobytes = 0;
804
766
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
@@ -855,7 +817,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
855
817
  value: function processInboundRTPResult(result, type) {
856
818
  var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
857
819
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
858
- this.processTrackResult(result, type, sendrecvType);
859
820
  if (result.bytesReceived) {
860
821
  var kilobytes = 0;
861
822
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
@@ -935,28 +896,25 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
935
896
  * @private
936
897
  * @param {*} result
937
898
  * @param {*} mediaType
938
- * @param {*} sendrecvType
939
899
  * @returns {void}
940
900
  * @memberof StatsAnalyzer
941
901
  */
942
- function processTrackResult(result, mediaType, sendrecvType) {
943
- if (!result || mediaType === _constants.STATS.AUDIO_CORRELATE) {
944
- return;
945
- }
946
- if (result.type !== 'inbound-rtp' && result.type !== 'outbound-rtp') {
902
+ function processTrackResult(result, mediaType) {
903
+ if (!result || result.type !== 'track') {
947
904
  return;
948
905
  }
906
+ if (result.type !== 'track') return;
907
+ var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
949
908
  if (result.frameWidth && result.frameHeight) {
950
909
  this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
951
910
  this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
911
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
912
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
952
913
  }
953
914
  if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
954
915
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
955
916
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
956
917
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
957
- } else if (sendrecvType === _constants.STATS.SEND_DIRECTION) {
958
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
959
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
960
918
  }
961
919
  if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
962
920
  this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;