@webex/plugin-meetings 2.37.1 → 2.38.0
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.
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +2 -1
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/index.js +24 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +1 -0
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +405 -352
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +0 -27
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +0 -56
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +2 -0
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +27 -17
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +14 -12
- package/dist/meetings/request.js.map +1 -1
- package/dist/member/util.js +3 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/request.js +3 -1
- package/dist/members/request.js.map +1 -1
- package/dist/reachability/index.js +4 -4
- package/dist/reachability/index.js.map +1 -1
- package/dist/reactions/reactions.type.js +1 -0
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +18 -6
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/package.json +23 -18
- package/src/config.ts +1 -1
- package/src/constants.ts +1 -0
- package/src/locus-info/index.ts +24 -0
- package/src/locus-info/parser.ts +1 -0
- package/src/media/properties.ts +1 -1
- package/src/meeting/index.ts +121 -70
- package/src/meeting/request.ts +0 -31
- package/src/meeting/util.ts +0 -60
- package/src/meeting-info/meeting-info-v2.ts +2 -0
- package/src/meetings/index.ts +8 -3
- package/src/meetings/request.ts +1 -1
- package/src/member/util.ts +2 -1
- package/src/members/request.ts +1 -0
- package/src/reachability/index.ts +2 -1
- package/src/reactions/reactions.type.ts +2 -1
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/turnDiscovery.ts +1 -1
- package/src/statsAnalyzer/mqaUtil.ts +6 -0
- package/test/integration/spec/journey.js +1 -1
- package/test/integration/spec/space-meeting.js +1 -1
- package/test/integration/spec/transcription.js +1 -1
- package/test/unit/spec/meeting/index.js +33 -6
- package/test/unit/spec/meeting/utils.js +0 -127
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +2 -1
- package/test/unit/spec/roap/turnDiscovery.ts +5 -4
- package/tsconfig.json +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","Reachability","webex","reachabilityRequest","ReachabilityRequest","clusterLatencyResults","setup","window","localStorage","removeItem","REACHABILITY","LoggerProxy","logger","error","getClusters","clusters","performReachabilityCheck","results","setItem","log","reachable","reachabilityData","getItem","reachabilityResults","JSON","parse","some","result","udp","tcp","e","cluster","iceServers","map","url","username","credential","urls","iceCandidatePoolSize","iceTransportPolicy","key","config","peerConnection","RTCPeerConnection","peerConnectionError","startTime","begin","clusterList","buildPeerConnectionConfig","createPeerConnection","createOffer","offerToReceiveAudio","description","setLocalDescription","iceGatheringState","isVideoMesh","catch","iceGatheringStateError","all","then","parseIceResultsToReachabilityResults","reachabilityLatencyResults","logUnreachableClusters","unreachableList","forEach","unreachable","push","onicegatheringstatechange","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","elapsed","getElapsedTime","setLatencyAndClose","onicecandidate","SERVER_REFLEXIVE","candidate","String","type","toLowerCase","timeout","ELAPSED","resolve","peerConnectionProxy","Proxy","get","target","property","targetMember","bind","set","value","clusterId","Reflect","handleIceGatheringStateChange","handleOnIceCandidate","setTimeout","CLOSED","CONNECTION_STATE","connectionState","list","getUnreachablClusters","iceResults","reachabilityMap","latencyResult","latencyInMilliseconds","toString","length","getLocalSDPForClusters","localSDPData","REACHABLE","UNREACHABLE","resultKey","intialState","close"],"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 `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 // @ts-ignore\n LoggerProxy.logger.log(\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":["DEFAULT_TIMEOUT","VIDEO_MESH_TIMEOUT","Reachability","webex","reachabilityRequest","ReachabilityRequest","clusterLatencyResults","setup","window","localStorage","removeItem","REACHABILITY","LoggerProxy","logger","error","getClusters","clusters","performReachabilityCheck","results","setItem","log","reachable","reachabilityData","getItem","reachabilityResults","JSON","parse","some","result","udp","tcp","e","cluster","iceServers","map","url","username","credential","urls","iceCandidatePoolSize","iceTransportPolicy","key","config","peerConnection","RTCPeerConnection","peerConnectionError","startTime","begin","clusterList","buildPeerConnectionConfig","createPeerConnection","createOffer","offerToReceiveAudio","description","setLocalDescription","iceGatheringState","isVideoMesh","catch","iceGatheringStateError","all","then","parseIceResultsToReachabilityResults","reachabilityLatencyResults","logUnreachableClusters","unreachableList","forEach","unreachable","push","onicegatheringstatechange","COMPLETE","ICE_GATHERING_STATE","iceConnectionState","elapsed","getElapsedTime","setLatencyAndClose","onicecandidate","SERVER_REFLEXIVE","candidate","String","type","toLowerCase","timeout","ELAPSED","resolve","peerConnectionProxy","Proxy","get","target","property","targetMember","bind","set","value","clusterId","Reflect","handleIceGatheringStateChange","handleOnIceCandidate","setTimeout","CLOSED","CONNECTION_STATE","connectionState","list","getUnreachablClusters","iceResults","reachabilityMap","latencyResult","latencyInMilliseconds","toString","length","getLocalSDPForClusters","localSDPData","REACHABLE","UNREACHABLE","resultKey","intialState","close"],"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":["ReactionType","SkinToneType"],"sources":["reactions.type.ts"],"sourcesContent":["export type EmoticonData = {\n type: string;\n codepoints?: string;\n shortcodes?: string;\n};\n\nexport type SkinTone = EmoticonData;\nexport type Reaction =
|
|
1
|
+
{"version":3,"names":["ReactionType","SkinToneType"],"sources":["reactions.type.ts"],"sourcesContent":["export type EmoticonData = {\n type: string;\n codepoints?: string;\n shortcodes?: string;\n};\n\nexport type SkinTone = EmoticonData;\n// @ts-ignore\nexport type Reaction = EmoticonData & {\n tone?: SkinTone;\n};\n\nexport enum ReactionType {\n smile = 'smile',\n sad = 'sad',\n wow = 'wow',\n haha = 'haha',\n celebrate = 'celebrate',\n clap = 'clap',\n thumbs_up = 'thumbs_up',\n thumbs_down = 'thumbs_down',\n heart = 'heart',\n fire = 'fire',\n prayer = 'prayer',\n speed_up = 'speed_up',\n slow_down = 'slow_down',\n}\n\nexport enum SkinToneType {\n normal = 'normal',\n light = 'light',\n medium_light = 'medium_light',\n medium = 'medium',\n medium_dark = 'medium_dark',\n dark = 'dark',\n}\n"],"mappings":";;;;;;;AAOA;AAAA,IAKYA,YAAY;AAAA;AAAA,WAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;AAAA,GAAZA,YAAY,4BAAZA,YAAY;AAAA,IAgBZC,YAAY;AAAA;AAAA,WAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;AAAA,GAAZA,YAAY,4BAAZA,YAAY"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var RecordingAction;
|
|
9
|
+
(function (RecordingAction) {
|
|
10
|
+
RecordingAction["Start"] = "Start";
|
|
11
|
+
RecordingAction["Stop"] = "Stop";
|
|
12
|
+
RecordingAction["Pause"] = "Pause";
|
|
13
|
+
RecordingAction["Resume"] = "Resume";
|
|
14
|
+
})(RecordingAction || (RecordingAction = {}));
|
|
15
|
+
var _default = RecordingAction;
|
|
16
|
+
exports.default = _default;
|
|
17
|
+
//# sourceMappingURL=enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RecordingAction"],"sources":["enums.ts"],"sourcesContent":["enum RecordingAction {\n Start = 'Start',\n Stop = 'Stop',\n Pause = 'Pause',\n Resume = 'Resume',\n}\n\nexport default RecordingAction;\n"],"mappings":";;;;;;;IAAKA,eAAe;AAAA,WAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;AAAA,GAAfA,eAAe,KAAfA,eAAe;AAAA,eAOLA,eAAe;AAAA"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
13
|
+
var _permission = _interopRequireDefault(require("../common/errors/permission"));
|
|
14
|
+
var _constants = require("../constants");
|
|
15
|
+
var _enums = _interopRequireDefault(require("./enums"));
|
|
16
|
+
var _util = _interopRequireDefault(require("./util"));
|
|
17
|
+
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
18
|
+
/**
|
|
19
|
+
* @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting
|
|
20
|
+
* @export
|
|
21
|
+
* @private
|
|
22
|
+
* @class Recording
|
|
23
|
+
*/
|
|
24
|
+
var RecordingController = /*#__PURE__*/function () {
|
|
25
|
+
/**
|
|
26
|
+
* @instance
|
|
27
|
+
* @type {MeetingRequest}
|
|
28
|
+
* @private
|
|
29
|
+
* @memberof RecordingController
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @instance
|
|
34
|
+
* @type {Array}
|
|
35
|
+
* @private
|
|
36
|
+
* @memberof RecordingInfo
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @instance
|
|
41
|
+
* @type {string}
|
|
42
|
+
* @private
|
|
43
|
+
* @memberof RecordingInfo
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @instance
|
|
48
|
+
* @type {string}
|
|
49
|
+
* @private
|
|
50
|
+
* @memberof RecordingInfo
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @instance
|
|
55
|
+
* @type {string}
|
|
56
|
+
* @private
|
|
57
|
+
* @memberof RecordingInfo
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @instance
|
|
62
|
+
* @type {string}
|
|
63
|
+
* @private
|
|
64
|
+
* @memberof RecordingInfo
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param {MeetingRequest} request
|
|
69
|
+
* @param {Object} options
|
|
70
|
+
* @constructor
|
|
71
|
+
* @memberof RecordingController
|
|
72
|
+
*/
|
|
73
|
+
function RecordingController(request, options) {
|
|
74
|
+
(0, _classCallCheck2.default)(this, RecordingController);
|
|
75
|
+
(0, _defineProperty2.default)(this, "request", void 0);
|
|
76
|
+
(0, _defineProperty2.default)(this, "displayHints", []);
|
|
77
|
+
(0, _defineProperty2.default)(this, "serviceUrl", void 0);
|
|
78
|
+
(0, _defineProperty2.default)(this, "sessionId", void 0);
|
|
79
|
+
(0, _defineProperty2.default)(this, "locusUrl", void 0);
|
|
80
|
+
(0, _defineProperty2.default)(this, "locusId", void 0);
|
|
81
|
+
this.initialize(request);
|
|
82
|
+
this.set(options);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {MeetingRequest} request
|
|
87
|
+
* @param {LocusInfo} info
|
|
88
|
+
* @returns {void}
|
|
89
|
+
* @private
|
|
90
|
+
* @memberof RecordingController
|
|
91
|
+
*/
|
|
92
|
+
(0, _createClass2.default)(RecordingController, [{
|
|
93
|
+
key: "initialize",
|
|
94
|
+
value: function initialize(request) {
|
|
95
|
+
this.request = request;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @param {Object} options
|
|
100
|
+
* @returns {void}
|
|
101
|
+
* @public
|
|
102
|
+
* @memberof RecordingController
|
|
103
|
+
*/
|
|
104
|
+
}, {
|
|
105
|
+
key: "set",
|
|
106
|
+
value: function set(options) {
|
|
107
|
+
this.extract(options);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @param {string} url
|
|
112
|
+
* @returns {void}
|
|
113
|
+
* @public
|
|
114
|
+
* @memberof RecordingController
|
|
115
|
+
*/
|
|
116
|
+
}, {
|
|
117
|
+
key: "setLocusUrl",
|
|
118
|
+
value: function setLocusUrl(url) {
|
|
119
|
+
this.locusUrl = url;
|
|
120
|
+
this.locusId = _util.default.extractLocusId(this.locusUrl);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @param {Array} hints
|
|
125
|
+
* @returns {void}
|
|
126
|
+
* @public
|
|
127
|
+
* @memberof RecordingController
|
|
128
|
+
*/
|
|
129
|
+
}, {
|
|
130
|
+
key: "setDisplayHints",
|
|
131
|
+
value: function setDisplayHints(hints) {
|
|
132
|
+
this.displayHints = hints;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @param {string} id
|
|
137
|
+
* @returns {void}
|
|
138
|
+
* @public
|
|
139
|
+
* @memberof RecordingController
|
|
140
|
+
*/
|
|
141
|
+
}, {
|
|
142
|
+
key: "setSessionId",
|
|
143
|
+
value: function setSessionId(id) {
|
|
144
|
+
this.sessionId = id;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @param {string} url
|
|
149
|
+
* @returns {void}
|
|
150
|
+
* @public
|
|
151
|
+
* @memberof RecordingController
|
|
152
|
+
*/
|
|
153
|
+
}, {
|
|
154
|
+
key: "setServiceUrl",
|
|
155
|
+
value: function setServiceUrl(url) {
|
|
156
|
+
this.serviceUrl = url;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* @returns {string}
|
|
161
|
+
* @public
|
|
162
|
+
* @memberof RecordingController
|
|
163
|
+
*/
|
|
164
|
+
}, {
|
|
165
|
+
key: "getLocusUrl",
|
|
166
|
+
value: function getLocusUrl() {
|
|
167
|
+
return this.locusUrl;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @returns {string}
|
|
172
|
+
* @public
|
|
173
|
+
* @memberof RecordingController
|
|
174
|
+
*/
|
|
175
|
+
}, {
|
|
176
|
+
key: "getLocusId",
|
|
177
|
+
value: function getLocusId() {
|
|
178
|
+
return this.locusId;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @returns {string}
|
|
183
|
+
* @public
|
|
184
|
+
* @memberof RecordingController
|
|
185
|
+
*/
|
|
186
|
+
}, {
|
|
187
|
+
key: "getSessionId",
|
|
188
|
+
value: function getSessionId() {
|
|
189
|
+
return this.sessionId;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @returns {string}
|
|
194
|
+
* @public
|
|
195
|
+
* @memberof RecordingController
|
|
196
|
+
*/
|
|
197
|
+
}, {
|
|
198
|
+
key: "getServiceUrl",
|
|
199
|
+
value: function getServiceUrl() {
|
|
200
|
+
return this.serviceUrl;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @returns {Array}
|
|
205
|
+
* @public
|
|
206
|
+
* @memberof RecordingController
|
|
207
|
+
*/
|
|
208
|
+
}, {
|
|
209
|
+
key: "getDisplayHints",
|
|
210
|
+
value: function getDisplayHints() {
|
|
211
|
+
return this.displayHints;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* @param {Object} options
|
|
216
|
+
* @returns {void}
|
|
217
|
+
* @private
|
|
218
|
+
* @memberof RecordingController
|
|
219
|
+
*/
|
|
220
|
+
}, {
|
|
221
|
+
key: "extract",
|
|
222
|
+
value: function extract(options) {
|
|
223
|
+
this.setServiceUrl(options === null || options === void 0 ? void 0 : options.serviceUrl);
|
|
224
|
+
this.setSessionId(options === null || options === void 0 ? void 0 : options.sessionId);
|
|
225
|
+
this.setDisplayHints(options === null || options === void 0 ? void 0 : options.displayHints);
|
|
226
|
+
this.setLocusUrl(options === null || options === void 0 ? void 0 : options.locusUrl);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @param {RecordingAction} action
|
|
231
|
+
* @private
|
|
232
|
+
* @memberof RecordingController
|
|
233
|
+
* @returns {Promise}
|
|
234
|
+
*/
|
|
235
|
+
}, {
|
|
236
|
+
key: "recordingService",
|
|
237
|
+
value: function recordingService(action) {
|
|
238
|
+
// @ts-ignore
|
|
239
|
+
return this.request.request({
|
|
240
|
+
body: {
|
|
241
|
+
meetingInfo: {
|
|
242
|
+
locusSessionId: this.sessionId
|
|
243
|
+
},
|
|
244
|
+
recording: {
|
|
245
|
+
action: action.toLowerCase()
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
uri: "".concat(this.serviceUrl, "/loci/").concat(this.locusId, "/recording"),
|
|
249
|
+
method: _constants.HTTP_VERBS.PUT
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* @param {RecordingAction} action
|
|
255
|
+
* @private
|
|
256
|
+
* @memberof RecordingController
|
|
257
|
+
* @returns {Promise}
|
|
258
|
+
*/
|
|
259
|
+
}, {
|
|
260
|
+
key: "recordingControls",
|
|
261
|
+
value: function recordingControls(action) {
|
|
262
|
+
var record = _util.default.deriveRecordingStates(action);
|
|
263
|
+
_loggerProxy.default.logger.log("RecordingController:index#recordingControls --> ".concat(record));
|
|
264
|
+
|
|
265
|
+
// @ts-ignore
|
|
266
|
+
return this.request.request({
|
|
267
|
+
uri: "".concat(this.locusUrl, "/").concat(_constants.CONTROLS),
|
|
268
|
+
body: {
|
|
269
|
+
record: record
|
|
270
|
+
},
|
|
271
|
+
method: _constants.HTTP_VERBS.PATCH
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @param {RecordingAction} action
|
|
277
|
+
* @private
|
|
278
|
+
* @memberof RecordingController
|
|
279
|
+
* @returns {Promise}
|
|
280
|
+
*/
|
|
281
|
+
}, {
|
|
282
|
+
key: "recordingFacade",
|
|
283
|
+
value: function recordingFacade(action) {
|
|
284
|
+
_loggerProxy.default.logger.log("RecordingController:index#recordingFacade --> recording action [".concat(action, "]"));
|
|
285
|
+
|
|
286
|
+
// assumes action is proper cased (i.e., Example)
|
|
287
|
+
if (_util.default !== null && _util.default !== void 0 && _util.default["canUser".concat(action)](this.displayHints)) {
|
|
288
|
+
if (this.serviceUrl) {
|
|
289
|
+
return this.recordingService(action);
|
|
290
|
+
}
|
|
291
|
+
return this.recordingControls(action);
|
|
292
|
+
}
|
|
293
|
+
return _promise.default.reject(new _permission.default("".concat(action, " recording not allowed, due to moderator property.")));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @private
|
|
298
|
+
* @memberof RecordingController
|
|
299
|
+
* @returns {Promise}
|
|
300
|
+
*/
|
|
301
|
+
}, {
|
|
302
|
+
key: "startRecording",
|
|
303
|
+
value: function startRecording() {
|
|
304
|
+
return this.recordingFacade(_enums.default.Start);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* @private
|
|
309
|
+
* @memberof RecordingController
|
|
310
|
+
* @returns {Promise}
|
|
311
|
+
*/
|
|
312
|
+
}, {
|
|
313
|
+
key: "stopRecording",
|
|
314
|
+
value: function stopRecording() {
|
|
315
|
+
return this.recordingFacade(_enums.default.Stop);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* @private
|
|
320
|
+
* @memberof RecordingController
|
|
321
|
+
* @returns {Promise}
|
|
322
|
+
*/
|
|
323
|
+
}, {
|
|
324
|
+
key: "pauseRecording",
|
|
325
|
+
value: function pauseRecording() {
|
|
326
|
+
return this.recordingFacade(_enums.default.Pause);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* @private
|
|
331
|
+
* @memberof RecordingController
|
|
332
|
+
* @returns {Promise}
|
|
333
|
+
*/
|
|
334
|
+
}, {
|
|
335
|
+
key: "resumeRecording",
|
|
336
|
+
value: function resumeRecording() {
|
|
337
|
+
return this.recordingFacade(_enums.default.Resume);
|
|
338
|
+
}
|
|
339
|
+
}]);
|
|
340
|
+
return RecordingController;
|
|
341
|
+
}();
|
|
342
|
+
exports.default = RecordingController;
|
|
343
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["RecordingController","request","options","initialize","set","extract","url","locusUrl","locusId","Util","extractLocusId","hints","displayHints","id","sessionId","serviceUrl","setServiceUrl","setSessionId","setDisplayHints","setLocusUrl","action","body","meetingInfo","locusSessionId","recording","toLowerCase","uri","method","HTTP_VERBS","PUT","record","deriveRecordingStates","LoggerProxy","logger","log","CONTROLS","PATCH","recordingService","recordingControls","reject","PermissionError","recordingFacade","RecordingAction","Start","Stop","Pause","Resume"],"sources":["index.ts"],"sourcesContent":["import PermissionError from '../common/errors/permission';\nimport {CONTROLS, HTTP_VERBS} from '../constants';\nimport MeetingRequest from '../meeting/request';\nimport RecordingAction from './enums';\nimport Util from './util';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @description Recording manages the recording functionality of the meeting object, there should only be one instantation of recording per meeting\n * @export\n * @private\n * @class Recording\n */\nexport default class RecordingController {\n /**\n * @instance\n * @type {MeetingRequest}\n * @private\n * @memberof RecordingController\n */\n private request: MeetingRequest;\n\n /**\n * @instance\n * @type {Array}\n * @private\n * @memberof RecordingInfo\n */\n private displayHints: Array<string> = [];\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private serviceUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private sessionId: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusUrl: string;\n\n /**\n * @instance\n * @type {string}\n * @private\n * @memberof RecordingInfo\n */\n private locusId: string;\n\n /**\n * @param {MeetingRequest} request\n * @param {Object} options\n * @constructor\n * @memberof RecordingController\n */\n constructor(\n request: MeetingRequest,\n options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }\n ) {\n this.initialize(request);\n this.set(options);\n }\n\n /**\n * @param {MeetingRequest} request\n * @param {LocusInfo} info\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private initialize(request: MeetingRequest) {\n this.request = request;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public set(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.extract(options);\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setLocusUrl(url: string) {\n this.locusUrl = url;\n this.locusId = Util.extractLocusId(this.locusUrl);\n }\n\n /**\n * @param {Array} hints\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setDisplayHints(hints: Array<string>) {\n this.displayHints = hints;\n }\n\n /**\n * @param {string} id\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setSessionId(id: string) {\n this.sessionId = id;\n }\n\n /**\n * @param {string} url\n * @returns {void}\n * @public\n * @memberof RecordingController\n */\n public setServiceUrl(url: string) {\n this.serviceUrl = url;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusUrl() {\n return this.locusUrl;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getLocusId() {\n return this.locusId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getSessionId() {\n return this.sessionId;\n }\n\n /**\n * @returns {string}\n * @public\n * @memberof RecordingController\n */\n public getServiceUrl() {\n return this.serviceUrl;\n }\n\n /**\n * @returns {Array}\n * @public\n * @memberof RecordingController\n */\n public getDisplayHints() {\n return this.displayHints;\n }\n\n /**\n * @param {Object} options\n * @returns {void}\n * @private\n * @memberof RecordingController\n */\n private extract(options?: {\n serviceUrl?: string;\n sessionId: string;\n locusUrl: string;\n displayHints?: Array<string>;\n }) {\n this.setServiceUrl(options?.serviceUrl);\n this.setSessionId(options?.sessionId);\n this.setDisplayHints(options?.displayHints);\n this.setLocusUrl(options?.locusUrl);\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingService(action: RecordingAction): Promise<any> {\n // @ts-ignore\n return this.request.request({\n body: {\n meetingInfo: {\n locusSessionId: this.sessionId,\n },\n recording: {\n action: action.toLowerCase(),\n },\n },\n uri: `${this.serviceUrl}/loci/${this.locusId}/recording`,\n method: HTTP_VERBS.PUT,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingControls(action: RecordingAction): Promise<any> {\n const record = Util.deriveRecordingStates(action);\n\n LoggerProxy.logger.log(`RecordingController:index#recordingControls --> ${record}`);\n\n // @ts-ignore\n return this.request.request({\n uri: `${this.locusUrl}/${CONTROLS}`,\n body: {\n record,\n },\n method: HTTP_VERBS.PATCH,\n });\n }\n\n /**\n * @param {RecordingAction} action\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n private recordingFacade(action: RecordingAction): Promise<any> {\n LoggerProxy.logger.log(\n `RecordingController:index#recordingFacade --> recording action [${action}]`\n );\n\n // assumes action is proper cased (i.e., Example)\n if (Util?.[`canUser${action}`](this.displayHints)) {\n if (this.serviceUrl) {\n return this.recordingService(action);\n }\n\n return this.recordingControls(action);\n }\n\n return Promise.reject(\n new PermissionError(`${action} recording not allowed, due to moderator property.`)\n );\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public startRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Start);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public stopRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Stop);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public pauseRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Pause);\n }\n\n /**\n * @private\n * @memberof RecordingController\n * @returns {Promise}\n */\n public resumeRecording(): Promise<any> {\n return this.recordingFacade(RecordingAction.Resume);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _constants = require("../constants");
|
|
10
|
+
var _enums = _interopRequireDefault(require("./enums"));
|
|
11
|
+
var canUserStart = function canUserStart(displayHints) {
|
|
12
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_START);
|
|
13
|
+
};
|
|
14
|
+
var canUserPause = function canUserPause(displayHints) {
|
|
15
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);
|
|
16
|
+
};
|
|
17
|
+
var canUserResume = function canUserResume(displayHints) {
|
|
18
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_RESUME);
|
|
19
|
+
};
|
|
20
|
+
var canUserStop = function canUserStop(displayHints) {
|
|
21
|
+
return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_STOP);
|
|
22
|
+
};
|
|
23
|
+
var extractLocusId = function extractLocusId(url) {
|
|
24
|
+
return url === null || url === void 0 ? void 0 : url.split('/').pop();
|
|
25
|
+
};
|
|
26
|
+
var deriveRecordingStates = function deriveRecordingStates(action) {
|
|
27
|
+
var recording;
|
|
28
|
+
var paused;
|
|
29
|
+
switch (action) {
|
|
30
|
+
case _enums.default.Start:
|
|
31
|
+
recording = true;
|
|
32
|
+
paused = false;
|
|
33
|
+
break;
|
|
34
|
+
case _enums.default.Stop:
|
|
35
|
+
recording = false;
|
|
36
|
+
paused = false;
|
|
37
|
+
break;
|
|
38
|
+
case _enums.default.Resume:
|
|
39
|
+
recording = true;
|
|
40
|
+
paused = false;
|
|
41
|
+
break;
|
|
42
|
+
case _enums.default.Pause:
|
|
43
|
+
recording = true;
|
|
44
|
+
paused = true;
|
|
45
|
+
break;
|
|
46
|
+
default:
|
|
47
|
+
throw new Error("Recording state cannot be derived from invalid action: ".concat(action));
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
recording: recording,
|
|
51
|
+
paused: paused
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
var _default = {
|
|
55
|
+
canUserStart: canUserStart,
|
|
56
|
+
canUserPause: canUserPause,
|
|
57
|
+
canUserResume: canUserResume,
|
|
58
|
+
canUserStop: canUserStop,
|
|
59
|
+
deriveRecordingStates: deriveRecordingStates,
|
|
60
|
+
extractLocusId: extractLocusId
|
|
61
|
+
};
|
|
62
|
+
exports.default = _default;
|
|
63
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["canUserStart","displayHints","includes","DISPLAY_HINTS","RECORDING_CONTROL_START","canUserPause","RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","extractLocusId","url","split","pop","deriveRecordingStates","action","recording","paused","RecordingAction","Start","Stop","Resume","Pause","Error"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS} from '../constants';\nimport RecordingAction from './enums';\n\nconst canUserStart = (displayHints: Array<string>): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START);\n\nconst canUserPause = (displayHints: Array<string>): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE);\n\nconst canUserResume = (displayHints: Array<string>): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME);\n\nconst canUserStop = (displayHints: Array<string>): boolean =>\n displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP);\n\nconst extractLocusId = (url: string) => {\n return url?.split('/').pop();\n};\n\nconst deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {\n let recording;\n let paused;\n\n switch (action) {\n case RecordingAction.Start:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Stop:\n recording = false;\n paused = false;\n break;\n case RecordingAction.Resume:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Pause:\n recording = true;\n paused = true;\n break;\n default:\n throw new Error(`Recording state cannot be derived from invalid action: ${action}`);\n }\n\n return {\n recording,\n paused,\n };\n};\n\nexport default {\n canUserStart,\n canUserPause,\n canUserResume,\n canUserStop,\n deriveRecordingStates,\n extractLocusId,\n};\n"],"mappings":";;;;;;;;AAAA;AACA;AAEA,IAAMA,YAAY,GAAG,SAAfA,YAAY,CAAIC,YAA2B;EAAA,OAC/CA,YAAY,CAACC,QAAQ,CAACC,wBAAa,CAACC,uBAAuB,CAAC;AAAA;AAE9D,IAAMC,YAAY,GAAG,SAAfA,YAAY,CAAIJ,YAA2B;EAAA,OAC/CA,YAAY,CAACC,QAAQ,CAACC,wBAAa,CAACG,uBAAuB,CAAC;AAAA;AAE9D,IAAMC,aAAa,GAAG,SAAhBA,aAAa,CAAIN,YAA2B;EAAA,OAChDA,YAAY,CAACC,QAAQ,CAACC,wBAAa,CAACK,wBAAwB,CAAC;AAAA;AAE/D,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIR,YAA2B;EAAA,OAC9CA,YAAY,CAACC,QAAQ,CAACC,wBAAa,CAACO,sBAAsB,CAAC;AAAA;AAE7D,IAAMC,cAAc,GAAG,SAAjBA,cAAc,CAAIC,GAAW,EAAK;EACtC,OAAOA,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEC,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE;AAC9B,CAAC;AAED,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqB,CAAIC,MAAuB,EAA4C;EAChG,IAAIC,SAAS;EACb,IAAIC,MAAM;EAEV,QAAQF,MAAM;IACZ,KAAKG,cAAe,CAACC,KAAK;MACxBH,SAAS,GAAG,IAAI;MAChBC,MAAM,GAAG,KAAK;MACd;IACF,KAAKC,cAAe,CAACE,IAAI;MACvBJ,SAAS,GAAG,KAAK;MACjBC,MAAM,GAAG,KAAK;MACd;IACF,KAAKC,cAAe,CAACG,MAAM;MACzBL,SAAS,GAAG,IAAI;MAChBC,MAAM,GAAG,KAAK;MACd;IACF,KAAKC,cAAe,CAACI,KAAK;MACxBN,SAAS,GAAG,IAAI;MAChBC,MAAM,GAAG,IAAI;MACb;IACF;MACE,MAAM,IAAIM,KAAK,kEAA2DR,MAAM,EAAG;EAAC;EAGxF,OAAO;IACLC,SAAS,EAATA,SAAS;IACTC,MAAM,EAANA;EACF,CAAC;AACH,CAAC;AAAC,eAEa;EACblB,YAAY,EAAZA,YAAY;EACZK,YAAY,EAAZA,YAAY;EACZE,aAAa,EAAbA,aAAa;EACbE,WAAW,EAAXA,WAAW;EACXM,qBAAqB,EAArBA,qBAAqB;EACrBJ,cAAc,EAAdA;AACF,CAAC;AAAA"}
|