@webex/plugin-meetings 2.59.7 → 2.59.8-next.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.
Files changed (147) 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/meetings/collection.js +2 -2
  26. package/dist/meetings/collection.js.map +1 -1
  27. package/dist/members/index.js +2 -2
  28. package/dist/members/index.js.map +1 -1
  29. package/dist/metrics/constants.js +0 -2
  30. package/dist/metrics/constants.js.map +1 -1
  31. package/dist/metrics/index.js +2 -2
  32. package/dist/metrics/index.js.map +1 -1
  33. package/dist/reachability/index.js +9 -2
  34. package/dist/reachability/index.js.map +1 -1
  35. package/dist/roap/index.js.map +1 -1
  36. package/dist/statsAnalyzer/global.js +12 -4
  37. package/dist/statsAnalyzer/global.js.map +1 -1
  38. package/dist/statsAnalyzer/index.js +14 -56
  39. package/dist/statsAnalyzer/index.js.map +1 -1
  40. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  41. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  42. package/package.json +22 -21
  43. package/src/config.ts +2 -2
  44. package/src/constants.ts +0 -2
  45. package/src/meeting/index.ts +0 -35
  46. package/src/metrics/constants.ts +0 -2
  47. package/src/roap/index.ts +0 -1
  48. package/src/statsAnalyzer/global.ts +10 -2
  49. package/src/statsAnalyzer/index.ts +17 -80
  50. package/test/unit/spec/meeting/index.js +6 -77
  51. package/test/unit/spec/roap/index.ts +1 -0
  52. package/test/unit/spec/stats-analyzer/index.js +0 -151
  53. package/dist/common/browser-detection.d.ts +0 -9
  54. package/dist/common/collection.d.ts +0 -48
  55. package/dist/common/config.d.ts +0 -2
  56. package/dist/common/errors/captcha-error.d.ts +0 -15
  57. package/dist/common/errors/intent-to-join.d.ts +0 -16
  58. package/dist/common/errors/join-meeting.d.ts +0 -17
  59. package/dist/common/errors/media.d.ts +0 -15
  60. package/dist/common/errors/parameter.d.ts +0 -15
  61. package/dist/common/errors/password-error.d.ts +0 -15
  62. package/dist/common/errors/permission.d.ts +0 -14
  63. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  64. package/dist/common/errors/reconnection.d.ts +0 -15
  65. package/dist/common/errors/stats.d.ts +0 -15
  66. package/dist/common/errors/webex-errors.d.ts +0 -81
  67. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  68. package/dist/common/events/events-scope.d.ts +0 -17
  69. package/dist/common/events/events.d.ts +0 -12
  70. package/dist/common/events/trigger-proxy.d.ts +0 -2
  71. package/dist/common/events/util.d.ts +0 -2
  72. package/dist/common/logs/logger-config.d.ts +0 -2
  73. package/dist/common/logs/logger-proxy.d.ts +0 -2
  74. package/dist/common/logs/request.d.ts +0 -34
  75. package/dist/common/queue.d.ts +0 -32
  76. package/dist/config.d.ts +0 -73
  77. package/dist/constants.d.ts +0 -926
  78. package/dist/controls-options-manager/constants.d.ts +0 -4
  79. package/dist/controls-options-manager/enums.d.ts +0 -5
  80. package/dist/controls-options-manager/index.d.ts +0 -120
  81. package/dist/controls-options-manager/util.d.ts +0 -7
  82. package/dist/index.d.ts +0 -4
  83. package/dist/locus-info/controlsUtils.d.ts +0 -2
  84. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  85. package/dist/locus-info/fullState.d.ts +0 -2
  86. package/dist/locus-info/hostUtils.d.ts +0 -2
  87. package/dist/locus-info/index.d.ts +0 -269
  88. package/dist/locus-info/infoUtils.d.ts +0 -2
  89. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  90. package/dist/locus-info/parser.d.ts +0 -212
  91. package/dist/locus-info/selfUtils.d.ts +0 -2
  92. package/dist/media/index.d.ts +0 -32
  93. package/dist/media/properties.d.ts +0 -108
  94. package/dist/media/util.d.ts +0 -2
  95. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  96. package/dist/meeting/effectsState.d.ts +0 -42
  97. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  98. package/dist/meeting/index.d.ts +0 -1622
  99. package/dist/meeting/muteState.d.ts +0 -116
  100. package/dist/meeting/request.d.ts +0 -255
  101. package/dist/meeting/state.d.ts +0 -9
  102. package/dist/meeting/util.d.ts +0 -2
  103. package/dist/meeting-info/collection.d.ts +0 -20
  104. package/dist/meeting-info/index.d.ts +0 -57
  105. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  106. package/dist/meeting-info/request.d.ts +0 -22
  107. package/dist/meeting-info/util.d.ts +0 -2
  108. package/dist/meeting-info/utilv2.d.ts +0 -2
  109. package/dist/meetings/collection.d.ts +0 -23
  110. package/dist/meetings/index.d.ts +0 -296
  111. package/dist/meetings/request.d.ts +0 -27
  112. package/dist/meetings/util.d.ts +0 -18
  113. package/dist/member/index.d.ts +0 -147
  114. package/dist/member/member.types.d.ts +0 -11
  115. package/dist/member/util.d.ts +0 -2
  116. package/dist/members/collection.d.ts +0 -24
  117. package/dist/members/index.d.ts +0 -298
  118. package/dist/members/request.d.ts +0 -50
  119. package/dist/members/util.d.ts +0 -2
  120. package/dist/metrics/config.d.ts +0 -169
  121. package/dist/metrics/constants.d.ts +0 -59
  122. package/dist/metrics/index.d.ts +0 -152
  123. package/dist/networkQualityMonitor/index.d.ts +0 -70
  124. package/dist/peer-connection-manager/index.d.ts +0 -6
  125. package/dist/peer-connection-manager/util.d.ts +0 -6
  126. package/dist/personal-meeting-room/index.d.ts +0 -47
  127. package/dist/personal-meeting-room/request.d.ts +0 -14
  128. package/dist/personal-meeting-room/util.d.ts +0 -2
  129. package/dist/reachability/index.d.ts +0 -139
  130. package/dist/reachability/request.d.ts +0 -35
  131. package/dist/reactions/reactions.d.ts +0 -4
  132. package/dist/reactions/reactions.type.d.ts +0 -32
  133. package/dist/reconnection-manager/index.d.ts +0 -112
  134. package/dist/recording-controller/enums.d.ts +0 -7
  135. package/dist/recording-controller/index.d.ts +0 -193
  136. package/dist/recording-controller/util.d.ts +0 -13
  137. package/dist/roap/collection.d.ts +0 -10
  138. package/dist/roap/handler.d.ts +0 -47
  139. package/dist/roap/index.d.ts +0 -116
  140. package/dist/roap/request.d.ts +0 -35
  141. package/dist/roap/state.d.ts +0 -9
  142. package/dist/roap/turnDiscovery.d.ts +0 -81
  143. package/dist/roap/util.d.ts +0 -2
  144. package/dist/statsAnalyzer/global.d.ts +0 -118
  145. package/dist/statsAnalyzer/index.d.ts +0 -193
  146. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  147. package/dist/transcription/index.d.ts +0 -64
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_util","_handler","_request","_collection","_turnDiscovery","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_meeting$audio","_meeting$video","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","_isNan","_parseFloat2","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","_stringify","roapRequest","attachRechabilityData","audioMuted","audio","isLocallyMuted","videoMuted","video","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","_createClass2","key","value","roapEvent","data","message","LoggerProxy","logger","log","concat","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","stop","RECEIVE_CALL_LEAVE","_promise","resolve","_this2","_meeting$audio2","_meeting$video2","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","_meeting$audio3","_meeting$video3","_this3","ANSWER","sendRoapError","session","errorType","ERROR","sendRoapMediaRequest","_this4","reconnect","isSkipped","isTurnDiscoverySkipped","_meeting$audio4","_meeting$video4","sendEmptyMediaId","_ref","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","doTurnDiscovery","isReconnecting","StatelessWebexPlugin","exports"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n } else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId,\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId,\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq,\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n return this.turnDiscovery\n .isSkipped(meeting)\n .then((isTurnDiscoverySkipped) => {\n const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;\n\n return this.roapRequest.sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n });\n })\n\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n })\n ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,KAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,WAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,cAAA,GAAAL,sBAAA,CAAAH,OAAA;AAA4C,SAAAS,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA;AAG5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,IAAI,0BAAAC,qBAAA;EAAA,IAAAC,UAAA,CAAAlB,OAAA,EAAAgB,IAAA,EAAAC,qBAAA;EAAA,IAAAE,MAAA,GAAA1B,YAAA,CAAAuB,IAAA;EAQvB;AACF;AACA;AACA;AACA;EACE,SAAAA,KAAYI,KAAU,EAAEC,QAAY,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAvB,OAAA,QAAAgB,IAAA;IACpCM,KAAA,GAAAH,MAAA,CAAAL,IAAA,OAAM,CAAC,CAAC,EAAEO,QAAO;IACjB;AACJ;AACA;AACA;AACA;AACA;IALI,IAAAG,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAoRF;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,0BAOsB,UAACD,OAAY,EAAK;MAAA,IAAAK,cAAA,EAAAC,cAAA;MACtC,IAAOC,OAAO,GAAIP,OAAO,CAAlBO,OAAO;MACd,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACb,OAAO,CAACc,GAAG,CAAC;QACnBC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOjB,OAAO,CAACkB,OAAO,KAAK,QAAQ,IAAI,IAAAC,MAAA,CAAAxC,OAAA,EAAa,IAAAyC,YAAA,CAAAzC,OAAA,EAAWqB,OAAO,CAACkB,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDlB,OAAO,CAACkB,OAAO,GAAG,CAAC;QACzBG,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAEDpB,KAAA,CAAKqB,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAEpB,OAAO,CAACoB;MACzB,CAAC,CAAC;MAEF,IAAMC,QAAQ,GAAG;QACfC,WAAW,EAAE,CACX;UACEC,QAAQ,EAAE,IAAAC,UAAA,CAAApD,OAAA,EACRsB,KAAA,CAAK+B,WAAW,CAACC,qBAAqB,CAAC;YACrCzB,WAAW,EAAXA,WAAW;YACX;YACA;YACA0B,UAAU,GAAA7B,cAAA,GAAEE,OAAO,CAAC4B,KAAK,cAAA9B,cAAA,uBAAbA,cAAA,CAAe+B,cAAc,EAAE;YAC3CC,UAAU,GAAA/B,cAAA,GAAEC,OAAO,CAAC+B,KAAK,cAAAhC,cAAA,uBAAbA,cAAA,CAAe8B,cAAc;UAC3C,CAAC,CAAC;UAEJ;QACF,CAAC;MAEL,CAAC;;MAED,OAAOG,aAAW,CAACC,kBAAkB,CAACjC,OAAO,EAAE;QAACC,WAAW,EAAEoB;MAAQ,CAAC,CAAC,CAACa,IAAI,CAAC,UAACC,KAAK,EAAK;QACtFzC,KAAA,CAAKqB,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;QACFpB,OAAO,CAACqC,UAAU,CAACpC,WAAW,CAACS,GAAG,CAAC;;QAEnC;QACA;QACA,OAAOyB,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACJ,CAAC;IAvUCzC,KAAA,CAAKF,KAAK,GAAGA,KAAK;IAClB;AACJ;AACA;AACA;AACA;AACA;IACIE,KAAA,CAAKD,OAAO,GAAGA,QAAO;IACtB;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,KAAA,CAAKqB,WAAW,GAAG,IAAIuB,gBAAW,CAChC5C,KAAA,CAAKF,KAAK,EACVE,KAAA,CAAKD,OAAO,EACZC,KAAA,CAAK6C,UAAU,CAACC,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,EAC1BA,KAAA,CAAK+C,cAAc,CAACD,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,EAC9BA,KAAA,CAAKgD,YAAY,CAACF,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,CAC7B;IACD;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACAA,KAAA,CAAK+B,WAAW,GAAG,IAAIkB,gBAAW,CAAC,CAAC,CAAC,EAAElD,QAAO,CAAC;IAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,KAAA,CAAKkD,aAAa,GAAG,CAAC,CAAC;IAEvBlD,KAAA,CAAKmD,aAAa,GAAG,IAAIC,sBAAa,CAACpD,KAAA,CAAK+B,WAAW,CAAC;IAAC,OAAA/B,KAAA;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE,IAAAqD,aAAA,CAAA3E,OAAA,EAAAgB,IAAA;IAAA4D,GAAA;IAAAC,KAAA,EAOA,SAAAC,UAAkBC,IAAS,EAAE;MAC3B,IAAMhC,GAAG,GAAGgC,IAAI,CAACC,OAAO;MACxB,IAAOhC,aAAa,GAAI+B,IAAI,CAArB/B,aAAa;MAEpBiC,oBAAW,CAACC,MAAM,CAACC,GAAG,oDAAAC,MAAA,CAC+B,IAAAhC,UAAA,CAAApD,OAAA,EAAe+C,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAChF;MAED,IAAIA,GAAG,CAACjB,WAAW,KAAKC,eAAI,CAACC,UAAU,CAACqD,uBAAuB,EAAE;QAC/D;QACA;QACA,IAAI,CAACZ,aAAa,CAACa,2BAA2B,CAACvC,GAAG,CAAC;MACrD,CAAC,MAAM;QACL,IAAI,CAACJ,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACwD,gBAAgB;UAC3BxC,GAAG,EAAHA,GAAG;UACHC,aAAa,EAAbA;QACF,CAAC,CAAC;MACJ;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA4B,GAAA;IAAAC,KAAA,EAQA,SAAAW,KAAaxC,aAAqB,EAAEV,GAAW,EAAE;MAC/C,IAAI,CAACK,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAAC0D,kBAAkB;QAC7BnD,GAAG,EAAHA,GAAG;QACHU,aAAa,EAAbA;MACF,CAAC,CAAC;MAEF,OAAO0C,QAAA,CAAA1F,OAAA,CAAQ2F,OAAO,EAAE;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAf,GAAA;IAAAC,KAAA,EAOA,SAAAV,WAAmB9C,OAAY,EAAE;MAAA,IAAAuE,MAAA;MAC/B,OAAOF,QAAA,CAAA1F,OAAA,CAAQ2F,OAAO,EAAE,CAAC7B,IAAI,CAAC,YAAM;QAAA,IAAA+B,eAAA,EAAAC,eAAA;QAClC;QACA,IAAMlE,OAAO,GAAGgE,MAAI,CAACG,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACf7E,OAAO,CAAC2B,aAAa,CACtB;QACD,IAAMnB,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACmE,EAAE;UAC/B/D,OAAO,EAAEL,eAAI,CAACM,YAAY;UAC1BC,GAAG,EAAEjB,OAAO,CAACiB;QACf,CAAC;QAED2C,oBAAW,CAACC,MAAM,CAACC,GAAG,uDAAAC,MAAA,CAAuD/D,OAAO,CAACiB,GAAG,EAAG;QAE3F,OAAOsD,MAAI,CAACvC,WAAW,CACpB+C,QAAQ,CAAC;UACRvE,WAAW,EAAXA,WAAW;UACXwE,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;UAC7BC,OAAO,EAAElF,OAAO,CAACkF,OAAO;UACxBvD,aAAa,EAAE3B,OAAO,CAAC2B,aAAa;UACpCO,UAAU,GAAAsC,eAAA,GAAEjE,OAAO,CAAC4B,KAAK,cAAAqC,eAAA,uBAAbA,eAAA,CAAepC,cAAc,EAAE;UAC3CC,UAAU,GAAAoC,eAAA,GAAElE,OAAO,CAAC+B,KAAK,cAAAmC,eAAA,uBAAbA,eAAA,CAAerC,cAAc,EAAE;UAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;QACrB,CAAC,CAAC,CACD3C,IAAI,CAAC,YAAM;UACV8B,MAAI,CAACjD,WAAW,CAACC,MAAM,CAAC;YACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;YACxBC,GAAG,EAAElB,WAAW;YAChBmB,aAAa,EAAE3B,OAAO,CAAC2B;UACzB,CAAC,CAAC;UACFiC,oBAAW,CAACC,MAAM,CAACC,GAAG,oDAAAC,MAAA,CAAoD/D,OAAO,CAACiB,GAAG,EAAG;UACxFV,OAAO,CAACqC,UAAU,CAAC5C,OAAO,CAACiB,GAAG,CAAC;QACjC,CAAC,CAAC;MACN,CAAC,CAAC;IACJ;;IAEA;IACA;IACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAsC,GAAA;IAAAC,KAAA,EASA,SAAAR,eAAuBhD,OAAY,EAAE;MAAA,IAAAqF,eAAA;QAAAC,eAAA;QAAAC,MAAA;MACnC;MACA,IAAMhF,OAAO,GAAG,IAAI,CAACmE,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACf7E,OAAO,CAAC2B,aAAa,CACtB;MACD,IAAMnB,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAAC6E,MAAM;QACnC3E,IAAI,EAAEb,OAAO,CAACa,IAAI;QAClBE,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EAAEjB,OAAO,CAACiB;MACf,CAAC;MAED,IAAI,CAACK,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAE3B,OAAO,CAAC2B;MACzB,CAAC,CAAC;MAEF,OAAO,IAAI,CAACK,WAAW,CACpB+C,QAAQ,CAAC;QACRvE,WAAW,EAAXA,WAAW;QACXwE,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;QAC7BC,OAAO,EAAElF,OAAO,CAACkF,OAAO;QACxBvD,aAAa,EAAE3B,OAAO,CAAC2B,aAAa;QACpCO,UAAU,GAAAmD,eAAA,GAAE9E,OAAO,CAAC4B,KAAK,cAAAkD,eAAA,uBAAbA,eAAA,CAAejD,cAAc,EAAE;QAC3CC,UAAU,GAAAiD,eAAA,GAAE/E,OAAO,CAAC+B,KAAK,cAAAgD,eAAA,uBAAbA,eAAA,CAAelD,cAAc,EAAE;QAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;MACrB,CAAC,CAAC,CACD3C,IAAI,CAAC,YAAM;QACVlC,OAAO,CAACqC,UAAU,CAAC5C,OAAO,CAACiB,GAAG,CAAC;QAE/BsE,MAAI,CAACjE,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA4B,GAAA;IAAAC,KAAA,EASA,SAAAiC,cAAsBC,OAAY,EAAEhD,KAAa,EAAEiD,SAAiB,EAAE;MACpE,IAAMjE,GAAG,GAAG;QACVjB,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACiF,KAAK;QAClC7E,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1B2E,SAAS,EAATA,SAAS;QACT1E,GAAG,EAAEyE,OAAO,CAAC9E,KAAK,CAACK;MACrB,CAAC;MAED,OAAO,IAAI,CAACe,WAAW,CAAC+C,QAAQ,CAACrD,GAAG,EAAEgB,KAAK,CAAC;IAC9C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAa,GAAA;IAAAC,KAAA,EAOA,SAAAqC,qBAAqB7F,OAAY,EAAE;MAAA,IAAA8F,MAAA;MACjC,IAAOvF,OAAO,GAAeP,OAAO,CAA7BO,OAAO;QAAEwF,SAAS,GAAI/F,OAAO,CAApB+F,SAAS;MACzB,IAAMvF,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACb,OAAO,CAACc,GAAG,CAAC;QACnB;QACAC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOjB,OAAO,CAACkB,OAAO,KAAK,QAAQ,IAAI,IAAAC,MAAA,CAAAxC,OAAA,EAAa,IAAAyC,YAAA,CAAAzC,OAAA,EAAWqB,OAAO,CAACkB,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDlB,OAAO,CAACkB,OAAO,GAAG,CAAC;QACzBG,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAED,IAAI,CAACC,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAEpB,OAAO,CAACoB;MACzB,CAAC,CAAC;;MAEF;MACA;MACA;MACA,OAAO,IAAI,CAACyB,aAAa,CACtB4C,SAAS,CAACzF,OAAO,CAAC,CAClBkC,IAAI,CAAC,UAACwD,sBAAsB,EAAK;QAAA,IAAAC,eAAA,EAAAC,eAAA;QAChC,IAAMC,gBAAgB,GAAGL,SAAS,IAAIE,sBAAsB;QAE5D,OAAOH,MAAI,CAAC9D,WAAW,CAAC+C,QAAQ,CAAC;UAC/BvE,WAAW,EAAXA,WAAW;UACXmB,aAAa,EAAEpB,OAAO,CAACoB,aAAa;UACpCqD,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;UAC7BC,OAAO,EAAEkB,gBAAgB,GAAG,EAAE,GAAG7F,OAAO,CAAC2E,OAAO;UAChDhD,UAAU,GAAAgE,eAAA,GAAE3F,OAAO,CAAC4B,KAAK,cAAA+D,eAAA,uBAAbA,eAAA,CAAe9D,cAAc,EAAE;UAC3CC,UAAU,GAAA8D,eAAA,GAAE5F,OAAO,CAAC+B,KAAK,cAAA6D,eAAA,uBAAbA,eAAA,CAAe/D,cAAc,EAAE;UAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;QACrB,CAAC,CAAC;MACJ,CAAC,CAAC,CAED3C,IAAI,CAAC,UAAA4D,IAAA,EAA+B;QAAA,IAA7B3D,KAAK,GAAA2D,IAAA,CAAL3D,KAAK;UAAE4D,gBAAgB,GAAAD,IAAA,CAAhBC,gBAAgB;QAC7BR,MAAI,CAACxE,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;QACFpB,OAAO,CAACqC,UAAU,CAACpC,WAAW,CAACS,GAAG,CAAC;QAEnC,IAAIqF,gBAAgB,EAAE;UACpB/F,OAAO,CAACgG,sBAAsB,CAACD,gBAAgB,CAAC;QAClD;;QAEA;QACA;QACA,OAAO5D,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACN;EAAC;IAAAa,GAAA;IAAAC,KAAA;IA6DD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAAP,aAAqBtB,aAAqB,EAAE6E,UAAkB,EAAE;MAC9DC,mBAAc,CAACC,uBAAuB,CAAC/E,aAAa,EAAE6E,UAAU,CAAC;MACjE;MACA,IAAMjG,OAAO,GAAG,IAAI,CAACmE,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAAC,eAAe,EAAElD,aAAa,CAAC;MAE9FpB,OAAO,CAACoG,oBAAoB,EAAE;MAC9B,IAAI,CAACF,mBAAc,CAACG,MAAM,CAACjF,aAAa,CAAC,EAAE;QACzCpB,OAAO,CAACsG,4BAA4B,EAAE;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAtD,GAAA;IAAAC,KAAA,EAUA,SAAAsD,gBAAgBvG,OAAgB,EAAEwG,cAAuB,EAAE;MACzD,OAAO,IAAI,CAAC3D,aAAa,CAAC0D,eAAe,CAACvG,OAAO,EAAEwG,cAAc,CAAC;IACpE;EAAC;EAAA,OAAApH,IAAA;AAAA,EA7X+BqH,+BAAoB;AAAAC,OAAA,CAAAtI,OAAA,GAAAgB,IAAA"}
1
+ {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_util","_handler","_request","_collection","_turnDiscovery","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","_meeting$audio","_meeting$video","meeting","roapMessage","messageType","ROAP","ROAP_TYPES","OFFER","sdps","sdp","version","ROAP_VERSION","seq","roapSeq","_isNan","_parseFloat2","tieBreaker","roapHandler","submit","type","SEND_ROAP_MSG","msg","correlationId","roapBody","localMedias","localSdp","_stringify","roapRequest","attachRechabilityData","audioMuted","audio","isLocallyMuted","videoMuted","video","MeetingUtil","joinMeetingOptions","then","locus","SEND_ROAP_MSG_SUCCESS","setRoapSeq","RoapHandler","sendRoapOK","bind","sendRoapAnswer","roapFinished","RoapRequest","lastRoapOffer","turnDiscovery","TurnDiscovery","_createClass2","key","value","roapEvent","data","message","LoggerProxy","logger","log","concat","TURN_DISCOVERY_RESPONSE","handleTurnDiscoveryResponse","RECEIVE_ROAP_MSG","stop","RECEIVE_CALL_LEAVE","_promise","resolve","_this2","_meeting$audio2","_meeting$video2","webex","meetings","meetingCollection","getByKey","OK","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","_meeting$audio3","_meeting$video3","_this3","ANSWER","sendRoapError","session","errorType","ERROR","sendRoapMediaRequest","_this4","reconnect","isSkipped","isTurnDiscoverySkipped","_meeting$audio4","_meeting$video4","sendEmptyMediaId","_ref","mediaConnections","updateMediaConnections","sequenceId","RoapCollection","onSessionSequenceFinish","mediaNegotiatedEvent","isBusy","processNextQueuedMediaUpdate","doTurnDiscovery","isReconnecting","StatelessWebexPlugin","exports"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport MeetingUtil from '../meeting/util';\n\nimport RoapHandler from './handler';\nimport RoapRequest from './request';\nimport RoapCollection from './collection';\nimport TurnDiscovery from './turnDiscovery';\nimport Meeting from '../meeting';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} roapSeq\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: any;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Process State Handler\n * @instance\n * @type {RoapHandler}\n * @private\n * @memberof Roap\n */\n this.roapHandler = new RoapHandler(\n this.attrs,\n this.options,\n this.sendRoapOK.bind(this),\n this.sendRoapAnswer.bind(this),\n this.roapFinished.bind(this)\n );\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n /**\n * The last roap offer sent to server and acked\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.lastRoapOffer = {};\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n * Starts listening to mercury events for Roap messages\n * @param {object} data event object\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private roapEvent(data: any) {\n const msg = data.message;\n const {correlationId} = data;\n\n LoggerProxy.logger.log(\n `Roap:index#roapEvent --> Received Roap Message [${JSON.stringify(msg, null, 2)}]`\n );\n\n if (msg.messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n // turn discovery is not part of normal roap protocol and so we are not handling it\n // through the usual roap state machine\n this.turnDiscovery.handleTurnDiscoveryResponse(msg);\n } else {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_ROAP_MSG,\n msg,\n correlationId,\n });\n }\n }\n\n /**\n *\n * @param {String} correlationId correlation id of a meeting\n * @param {Number} seq ROAP sequence number\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private stop(correlationId: string, seq: number) {\n this.roapHandler.submit({\n type: ROAP.RECEIVE_CALL_LEAVE,\n seq,\n correlationId,\n });\n\n return Promise.resolve();\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @private\n * @memberof Roap\n */\n private sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n meeting.setRoapSeq(options.seq);\n });\n });\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: try to merge sendRoapOk and roapAnswer\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: options.sdps,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: options.correlationId,\n });\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n correlationId: options.correlationId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n })\n .then(() => {\n meeting.setRoapSeq(options.seq);\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} session\n * @param {Object} locus\n * @param {String} errorType\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapError(session: any, locus: object, errorType: string) {\n const msg = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType,\n seq: session.OFFER.seq,\n };\n\n return this.roapRequest.sendRoap(msg, locus);\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, reconnect} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n // sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n // When reconnecting, it's important that the first roap message being sent out has empty media id.\n // Normally this is the roap offer, but when TURN discovery is enabled,\n // then this is the TURN discovery request message\n return this.turnDiscovery\n .isSkipped(meeting)\n .then((isTurnDiscoverySkipped) => {\n const sendEmptyMediaId = reconnect && isTurnDiscoverySkipped;\n\n return this.roapRequest.sendRoap({\n roapMessage,\n correlationId: meeting.correlationId,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n meetingId: meeting.id,\n });\n })\n .then(({locus, mediaConnections}) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n sendRoapCallRequest = (options: any) => {\n const {meeting} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq:\n typeof options.roapSeq !== 'number' && Number.isNaN(parseFloat(options.roapSeq))\n ? 0\n : options.roapSeq + 1,\n tieBreaker: 4294967294, // Math.floor(Math.random() * (2 ** 32) - 1) // TODO: Handle the roap conflict scenario\n };\n\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG,\n msg: roapMessage,\n correlationId: meeting.correlationId,\n });\n\n const roapBody = {\n localMedias: [\n {\n localSdp: JSON.stringify(\n this.roapRequest.attachRechabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: meeting.audio?.isLocallyMuted(),\n videoMuted: meeting.video?.isLocallyMuted(),\n })\n ),\n // mediaId: meeting.mediaId\n },\n ],\n };\n\n return MeetingUtil.joinMeetingOptions(meeting, {roapMessage: roapBody}).then((locus) => {\n this.roapHandler.submit({\n type: ROAP.SEND_ROAP_MSG_SUCCESS,\n seq: roapMessage.seq,\n correlationId: meeting.correlationId,\n });\n meeting.setRoapSeq(roapMessage.seq);\n\n // eslint-disable-next-line no-warning-comments\n // TODO: we need to attach peerconenction to locus not sure if we need to pass everything here\n return locus;\n // eslint-disable-next-line no-warning-comments\n // TODO: check where to update the sequence number\n });\n };\n\n /**\n * Called when the roap sequence is finished (completed successfully or failed)\n * @param {String} correlationId id of the meeting affected\n * @param {String} sequenceId the id of the finished sequence\n * @returns {undefined}\n * @private\n * @memberof Roap\n */\n private roapFinished(correlationId: string, sequenceId: string) {\n RoapCollection.onSessionSequenceFinish(correlationId, sequenceId);\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey('correlationId', correlationId);\n\n meeting.mediaNegotiatedEvent();\n if (!RoapCollection.isBusy(correlationId)) {\n meeting.processNextQueuedMediaUpdate();\n }\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @returns {Promise}\n */\n doTurnDiscovery(meeting: Meeting, isReconnecting: boolean) {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,KAAA,GAAAD,sBAAA,CAAAH,OAAA;AAEA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,WAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,cAAA,GAAAL,sBAAA,CAAAH,OAAA;AAA4C,SAAAS,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA;AAG5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,IAAI,0BAAAC,qBAAA;EAAA,IAAAC,UAAA,CAAAlB,OAAA,EAAAgB,IAAA,EAAAC,qBAAA;EAAA,IAAAE,MAAA,GAAA1B,YAAA,CAAAuB,IAAA;EAQvB;AACF;AACA;AACA;AACA;EACE,SAAAA,KAAYI,KAAU,EAAEC,QAAY,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAvB,OAAA,QAAAgB,IAAA;IACpCM,KAAA,GAAAH,MAAA,CAAAL,IAAA,OAAM,CAAC,CAAC,EAAEO,QAAO;IACjB;AACJ;AACA;AACA;AACA;AACA;IALI,IAAAG,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAAA,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA;IAmRF;AACF;AACA;AACA;AACA;AACA;AACA;IANE,IAAAE,gBAAA,CAAAxB,OAAA,MAAAyB,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,0BAOsB,UAACD,OAAY,EAAK;MAAA,IAAAK,cAAA,EAAAC,cAAA;MACtC,IAAOC,OAAO,GAAIP,OAAO,CAAlBO,OAAO;MACd,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACb,OAAO,CAACc,GAAG,CAAC;QACnBC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOjB,OAAO,CAACkB,OAAO,KAAK,QAAQ,IAAI,IAAAC,MAAA,CAAAxC,OAAA,EAAa,IAAAyC,YAAA,CAAAzC,OAAA,EAAWqB,OAAO,CAACkB,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDlB,OAAO,CAACkB,OAAO,GAAG,CAAC;QACzBG,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAEDpB,KAAA,CAAKqB,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAEpB,OAAO,CAACoB;MACzB,CAAC,CAAC;MAEF,IAAMC,QAAQ,GAAG;QACfC,WAAW,EAAE,CACX;UACEC,QAAQ,EAAE,IAAAC,UAAA,CAAApD,OAAA,EACRsB,KAAA,CAAK+B,WAAW,CAACC,qBAAqB,CAAC;YACrCzB,WAAW,EAAXA,WAAW;YACX;YACA;YACA0B,UAAU,GAAA7B,cAAA,GAAEE,OAAO,CAAC4B,KAAK,cAAA9B,cAAA,uBAAbA,cAAA,CAAe+B,cAAc,EAAE;YAC3CC,UAAU,GAAA/B,cAAA,GAAEC,OAAO,CAAC+B,KAAK,cAAAhC,cAAA,uBAAbA,cAAA,CAAe8B,cAAc;UAC3C,CAAC,CAAC;UAEJ;QACF,CAAC;MAEL,CAAC;;MAED,OAAOG,aAAW,CAACC,kBAAkB,CAACjC,OAAO,EAAE;QAACC,WAAW,EAAEoB;MAAQ,CAAC,CAAC,CAACa,IAAI,CAAC,UAACC,KAAK,EAAK;QACtFzC,KAAA,CAAKqB,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;QACFpB,OAAO,CAACqC,UAAU,CAACpC,WAAW,CAACS,GAAG,CAAC;;QAEnC;QACA;QACA,OAAOyB,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACJ,CAAC;IAtUCzC,KAAA,CAAKF,KAAK,GAAGA,KAAK;IAClB;AACJ;AACA;AACA;AACA;AACA;IACIE,KAAA,CAAKD,OAAO,GAAGA,QAAO;IACtB;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,KAAA,CAAKqB,WAAW,GAAG,IAAIuB,gBAAW,CAChC5C,KAAA,CAAKF,KAAK,EACVE,KAAA,CAAKD,OAAO,EACZC,KAAA,CAAK6C,UAAU,CAACC,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,EAC1BA,KAAA,CAAK+C,cAAc,CAACD,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,EAC9BA,KAAA,CAAKgD,YAAY,CAACF,IAAI,KAAA3C,uBAAA,CAAAzB,OAAA,EAAAsB,KAAA,EAAM,CAC7B;IACD;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACAA,KAAA,CAAK+B,WAAW,GAAG,IAAIkB,gBAAW,CAAC,CAAC,CAAC,EAAElD,QAAO,CAAC;IAC/C;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,KAAA,CAAKkD,aAAa,GAAG,CAAC,CAAC;IAEvBlD,KAAA,CAAKmD,aAAa,GAAG,IAAIC,sBAAa,CAACpD,KAAA,CAAK+B,WAAW,CAAC;IAAC,OAAA/B,KAAA;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE,IAAAqD,aAAA,CAAA3E,OAAA,EAAAgB,IAAA;IAAA4D,GAAA;IAAAC,KAAA,EAOA,SAAAC,UAAkBC,IAAS,EAAE;MAC3B,IAAMhC,GAAG,GAAGgC,IAAI,CAACC,OAAO;MACxB,IAAOhC,aAAa,GAAI+B,IAAI,CAArB/B,aAAa;MAEpBiC,oBAAW,CAACC,MAAM,CAACC,GAAG,oDAAAC,MAAA,CAC+B,IAAAhC,UAAA,CAAApD,OAAA,EAAe+C,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAChF;MAED,IAAIA,GAAG,CAACjB,WAAW,KAAKC,eAAI,CAACC,UAAU,CAACqD,uBAAuB,EAAE;QAC/D;QACA;QACA,IAAI,CAACZ,aAAa,CAACa,2BAA2B,CAACvC,GAAG,CAAC;MACrD,CAAC,MAAM;QACL,IAAI,CAACJ,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACwD,gBAAgB;UAC3BxC,GAAG,EAAHA,GAAG;UACHC,aAAa,EAAbA;QACF,CAAC,CAAC;MACJ;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA4B,GAAA;IAAAC,KAAA,EAQA,SAAAW,KAAaxC,aAAqB,EAAEV,GAAW,EAAE;MAC/C,IAAI,CAACK,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAAC0D,kBAAkB;QAC7BnD,GAAG,EAAHA,GAAG;QACHU,aAAa,EAAbA;MACF,CAAC,CAAC;MAEF,OAAO0C,QAAA,CAAA1F,OAAA,CAAQ2F,OAAO,EAAE;IAC1B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAf,GAAA;IAAAC,KAAA,EAOA,SAAAV,WAAmB9C,OAAY,EAAE;MAAA,IAAAuE,MAAA;MAC/B,OAAOF,QAAA,CAAA1F,OAAA,CAAQ2F,OAAO,EAAE,CAAC7B,IAAI,CAAC,YAAM;QAAA,IAAA+B,eAAA,EAAAC,eAAA;QAClC;QACA,IAAMlE,OAAO,GAAGgE,MAAI,CAACG,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACf7E,OAAO,CAAC2B,aAAa,CACtB;QACD,IAAMnB,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACmE,EAAE;UAC/B/D,OAAO,EAAEL,eAAI,CAACM,YAAY;UAC1BC,GAAG,EAAEjB,OAAO,CAACiB;QACf,CAAC;QAED2C,oBAAW,CAACC,MAAM,CAACC,GAAG,uDAAAC,MAAA,CAAuD/D,OAAO,CAACiB,GAAG,EAAG;QAE3F,OAAOsD,MAAI,CAACvC,WAAW,CACpB+C,QAAQ,CAAC;UACRvE,WAAW,EAAXA,WAAW;UACXwE,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;UAC7BC,OAAO,EAAElF,OAAO,CAACkF,OAAO;UACxBvD,aAAa,EAAE3B,OAAO,CAAC2B,aAAa;UACpCO,UAAU,GAAAsC,eAAA,GAAEjE,OAAO,CAAC4B,KAAK,cAAAqC,eAAA,uBAAbA,eAAA,CAAepC,cAAc,EAAE;UAC3CC,UAAU,GAAAoC,eAAA,GAAElE,OAAO,CAAC+B,KAAK,cAAAmC,eAAA,uBAAbA,eAAA,CAAerC,cAAc,EAAE;UAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;QACrB,CAAC,CAAC,CACD3C,IAAI,CAAC,YAAM;UACV8B,MAAI,CAACjD,WAAW,CAACC,MAAM,CAAC;YACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;YACxBC,GAAG,EAAElB,WAAW;YAChBmB,aAAa,EAAE3B,OAAO,CAAC2B;UACzB,CAAC,CAAC;UACFiC,oBAAW,CAACC,MAAM,CAACC,GAAG,oDAAAC,MAAA,CAAoD/D,OAAO,CAACiB,GAAG,EAAG;UACxFV,OAAO,CAACqC,UAAU,CAAC5C,OAAO,CAACiB,GAAG,CAAC;QACjC,CAAC,CAAC;MACN,CAAC,CAAC;IACJ;;IAEA;IACA;IACA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAsC,GAAA;IAAAC,KAAA,EASA,SAAAR,eAAuBhD,OAAY,EAAE;MAAA,IAAAqF,eAAA;QAAAC,eAAA;QAAAC,MAAA;MACnC;MACA,IAAMhF,OAAO,GAAG,IAAI,CAACmE,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACf7E,OAAO,CAAC2B,aAAa,CACtB;MACD,IAAMnB,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAAC6E,MAAM;QACnC3E,IAAI,EAAEb,OAAO,CAACa,IAAI;QAClBE,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EAAEjB,OAAO,CAACiB;MACf,CAAC;MAED,IAAI,CAACK,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAE3B,OAAO,CAAC2B;MACzB,CAAC,CAAC;MAEF,OAAO,IAAI,CAACK,WAAW,CACpB+C,QAAQ,CAAC;QACRvE,WAAW,EAAXA,WAAW;QACXwE,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;QAC7BC,OAAO,EAAElF,OAAO,CAACkF,OAAO;QACxBvD,aAAa,EAAE3B,OAAO,CAAC2B,aAAa;QACpCO,UAAU,GAAAmD,eAAA,GAAE9E,OAAO,CAAC4B,KAAK,cAAAkD,eAAA,uBAAbA,eAAA,CAAejD,cAAc,EAAE;QAC3CC,UAAU,GAAAiD,eAAA,GAAE/E,OAAO,CAAC+B,KAAK,cAAAgD,eAAA,uBAAbA,eAAA,CAAelD,cAAc,EAAE;QAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;MACrB,CAAC,CAAC,CACD3C,IAAI,CAAC,YAAM;QACVlC,OAAO,CAACqC,UAAU,CAAC5C,OAAO,CAACiB,GAAG,CAAC;QAE/BsE,MAAI,CAACjE,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA4B,GAAA;IAAAC,KAAA,EASA,SAAAiC,cAAsBC,OAAY,EAAEhD,KAAa,EAAEiD,SAAiB,EAAE;MACpE,IAAMjE,GAAG,GAAG;QACVjB,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACiF,KAAK;QAClC7E,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1B2E,SAAS,EAATA,SAAS;QACT1E,GAAG,EAAEyE,OAAO,CAAC9E,KAAK,CAACK;MACrB,CAAC;MAED,OAAO,IAAI,CAACe,WAAW,CAAC+C,QAAQ,CAACrD,GAAG,EAAEgB,KAAK,CAAC;IAC9C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAa,GAAA;IAAAC,KAAA,EAOA,SAAAqC,qBAAqB7F,OAAY,EAAE;MAAA,IAAA8F,MAAA;MACjC,IAAOvF,OAAO,GAAeP,OAAO,CAA7BO,OAAO;QAAEwF,SAAS,GAAI/F,OAAO,CAApB+F,SAAS;MACzB,IAAMvF,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,KAAK;QAClCC,IAAI,EAAE,CAACb,OAAO,CAACc,GAAG,CAAC;QACnB;QACAC,OAAO,EAAEL,eAAI,CAACM,YAAY;QAC1BC,GAAG,EACD,OAAOjB,OAAO,CAACkB,OAAO,KAAK,QAAQ,IAAI,IAAAC,MAAA,CAAAxC,OAAA,EAAa,IAAAyC,YAAA,CAAAzC,OAAA,EAAWqB,OAAO,CAACkB,OAAO,CAAC,CAAC,GAC5E,CAAC,GACDlB,OAAO,CAACkB,OAAO,GAAG,CAAC;QACzBG,UAAU,EAAE,UAAU,CAAE;MAC1B,CAAC;;MAED,IAAI,CAACC,WAAW,CAACC,MAAM,CAAC;QACtBC,IAAI,EAAEd,eAAI,CAACe,aAAa;QACxBC,GAAG,EAAElB,WAAW;QAChBmB,aAAa,EAAEpB,OAAO,CAACoB;MACzB,CAAC,CAAC;;MAEF;MACA;MACA;MACA,OAAO,IAAI,CAACyB,aAAa,CACtB4C,SAAS,CAACzF,OAAO,CAAC,CAClBkC,IAAI,CAAC,UAACwD,sBAAsB,EAAK;QAAA,IAAAC,eAAA,EAAAC,eAAA;QAChC,IAAMC,gBAAgB,GAAGL,SAAS,IAAIE,sBAAsB;QAE5D,OAAOH,MAAI,CAAC9D,WAAW,CAAC+C,QAAQ,CAAC;UAC/BvE,WAAW,EAAXA,WAAW;UACXmB,aAAa,EAAEpB,OAAO,CAACoB,aAAa;UACpCqD,YAAY,EAAEzE,OAAO,CAAC0E,OAAO;UAC7BC,OAAO,EAAEkB,gBAAgB,GAAG,EAAE,GAAG7F,OAAO,CAAC2E,OAAO;UAChDhD,UAAU,GAAAgE,eAAA,GAAE3F,OAAO,CAAC4B,KAAK,cAAA+D,eAAA,uBAAbA,eAAA,CAAe9D,cAAc,EAAE;UAC3CC,UAAU,GAAA8D,eAAA,GAAE5F,OAAO,CAAC+B,KAAK,cAAA6D,eAAA,uBAAbA,eAAA,CAAe/D,cAAc,EAAE;UAC3C+C,SAAS,EAAE5E,OAAO,CAAC6E;QACrB,CAAC,CAAC;MACJ,CAAC,CAAC,CACD3C,IAAI,CAAC,UAAA4D,IAAA,EAA+B;QAAA,IAA7B3D,KAAK,GAAA2D,IAAA,CAAL3D,KAAK;UAAE4D,gBAAgB,GAAAD,IAAA,CAAhBC,gBAAgB;QAC7BR,MAAI,CAACxE,WAAW,CAACC,MAAM,CAAC;UACtBC,IAAI,EAAEd,eAAI,CAACiC,qBAAqB;UAChC1B,GAAG,EAAET,WAAW,CAACS,GAAG;UACpBU,aAAa,EAAEpB,OAAO,CAACoB;QACzB,CAAC,CAAC;QACFpB,OAAO,CAACqC,UAAU,CAACpC,WAAW,CAACS,GAAG,CAAC;QAEnC,IAAIqF,gBAAgB,EAAE;UACpB/F,OAAO,CAACgG,sBAAsB,CAACD,gBAAgB,CAAC;QAClD;;QAEA;QACA;QACA,OAAO5D,KAAK;QACZ;QACA;MACF,CAAC,CAAC;IACN;EAAC;IAAAa,GAAA;IAAAC,KAAA;IA6DD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAAP,aAAqBtB,aAAqB,EAAE6E,UAAkB,EAAE;MAC9DC,mBAAc,CAACC,uBAAuB,CAAC/E,aAAa,EAAE6E,UAAU,CAAC;MACjE;MACA,IAAMjG,OAAO,GAAG,IAAI,CAACmE,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAAC,eAAe,EAAElD,aAAa,CAAC;MAE9FpB,OAAO,CAACoG,oBAAoB,EAAE;MAC9B,IAAI,CAACF,mBAAc,CAACG,MAAM,CAACjF,aAAa,CAAC,EAAE;QACzCpB,OAAO,CAACsG,4BAA4B,EAAE;MACxC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAtD,GAAA;IAAAC,KAAA,EAUA,SAAAsD,gBAAgBvG,OAAgB,EAAEwG,cAAuB,EAAE;MACzD,OAAO,IAAI,CAAC3D,aAAa,CAAC0D,eAAe,CAACvG,OAAO,EAAEwG,cAAc,CAAC;IACpE;EAAC;EAAA,OAAApH,IAAA;AAAA,EA5X+BqH,+BAAoB;AAAAC,OAAA,CAAAtI,OAAA,GAAAgB,IAAA"}
@@ -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;